single-scripture-rcl 3.3.3-beta.85 → 3.3.3-beta.87
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.
|
@@ -713,159 +713,209 @@ export default function ScriptureCard(_ref2) {
|
|
|
713
713
|
|
|
714
714
|
React.useEffect(function () {
|
|
715
715
|
// for each unsaved change, call into scripturePane to get latest changes for verse to save
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
if (!createEditBranch) {
|
|
720
|
-
// if already using the user branch
|
|
721
|
-
if (workingResourceBranch !== userEditBranchName) {
|
|
722
|
-
console.warn("saveChangesToCloud - state conflict - should be in user branch ".concat(userEditBranchName, ", but actually using ").concat(workingResourceBranch));
|
|
723
|
-
createEditBranch = true;
|
|
724
|
-
} else {
|
|
725
|
-
console.log("saveChangesToCloud - already using edit branch: ".concat(workingResourceBranch));
|
|
726
|
-
setState({
|
|
727
|
-
editBranchReady: true
|
|
728
|
-
});
|
|
729
|
-
}
|
|
730
|
-
}
|
|
716
|
+
function getReadyForSave() {
|
|
717
|
+
return _getReadyForSave.apply(this, arguments);
|
|
718
|
+
}
|
|
731
719
|
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
720
|
+
function _getReadyForSave() {
|
|
721
|
+
_getReadyForSave = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
|
|
722
|
+
var createEditBranch, branch, unsavedCardIndices, bibleUsfm, mergeFail, _cardNum, _iterator2, _step2, _cardIndex, _unsavedChangesList$_2, _getChanges2, _state2, _newUsfm, _getChanges3, _ref6, _updatedVerseObjects, newBookJson, _iterator3, _step3, cardIndex, _cardNum2, _unsavedChangesList$_, getChanges, _state, newUsfm, _getChanges, newVerseText, _ref5, updatedVerseObjects, targetVerseObjects_, _AlignmentHelpers$upd, targetVerseObjects;
|
|
723
|
+
|
|
724
|
+
return regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
725
|
+
while (1) {
|
|
726
|
+
switch (_context2.prev = _context2.next) {
|
|
727
|
+
case 0:
|
|
728
|
+
if (!saveClicked) {
|
|
729
|
+
_context2.next = 46;
|
|
730
|
+
break;
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
createEditBranch = !_usingUserBranch;
|
|
734
|
+
|
|
735
|
+
if (!createEditBranch) {
|
|
736
|
+
// if already using the user branch
|
|
737
|
+
if (workingResourceBranch !== userEditBranchName) {
|
|
738
|
+
console.warn("saveChangesToCloud - state conflict - should be in user branch ".concat(userEditBranchName, ", but actually using ").concat(workingResourceBranch));
|
|
739
|
+
createEditBranch = true;
|
|
740
|
+
} else {
|
|
741
|
+
console.log("saveChangesToCloud - already using edit branch: ".concat(workingResourceBranch));
|
|
742
|
+
setState({
|
|
743
|
+
editBranchReady: true
|
|
744
|
+
});
|
|
745
|
+
}
|
|
746
|
+
}
|
|
754
747
|
|
|
755
|
-
|
|
748
|
+
if (!createEditBranch) {
|
|
749
|
+
_context2.next = 10;
|
|
750
|
+
break;
|
|
751
|
+
}
|
|
756
752
|
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
753
|
+
// if not yet using the user branch, create it
|
|
754
|
+
console.log("saveChangesToCloud - creating edit branch");
|
|
755
|
+
setState({
|
|
756
|
+
editBranchReady: false,
|
|
757
|
+
readyForFetch: false,
|
|
758
|
+
sha: null
|
|
759
|
+
}); // we will need a new sha for book/branch
|
|
760
|
+
|
|
761
|
+
_context2.next = 8;
|
|
762
|
+
return startEditBranch();
|
|
763
|
+
|
|
764
|
+
case 8:
|
|
765
|
+
branch = _context2.sent;
|
|
766
|
+
|
|
767
|
+
if (branch) {
|
|
768
|
+
console.log("saveChangesToCloud - edit branch created");
|
|
769
|
+
setState({
|
|
770
|
+
editBranchReady: true,
|
|
771
|
+
readyForFetch: true,
|
|
772
|
+
ref: branch
|
|
773
|
+
});
|
|
774
|
+
} else {
|
|
775
|
+
console.log("saveChangesToCloud - failed to create edit branch");
|
|
776
|
+
}
|
|
761
777
|
|
|
762
|
-
|
|
763
|
-
|
|
778
|
+
case 10:
|
|
779
|
+
console.log("saveChangesToCloud - getting verse changes");
|
|
780
|
+
unsavedCardIndices = Object.keys(unsavedChangesList);
|
|
764
781
|
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
var _unsavedChangesList$_2 = unsavedChangesList[_cardNum],
|
|
770
|
-
_getChanges2 = _unsavedChangesList$_2.getChanges,
|
|
771
|
-
_state2 = _unsavedChangesList$_2.state;
|
|
782
|
+
if (!(unsavedCardIndices !== null && unsavedCardIndices !== void 0 && unsavedCardIndices.length)) {
|
|
783
|
+
_context2.next = 46;
|
|
784
|
+
break;
|
|
785
|
+
}
|
|
772
786
|
|
|
773
|
-
|
|
774
|
-
|
|
787
|
+
bibleUsfm = core.getResponseData(scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.fetchResponse);
|
|
788
|
+
mergeFail = false;
|
|
789
|
+
_cardNum = 0;
|
|
790
|
+
_iterator2 = _createForOfIteratorHelper(unsavedCardIndices);
|
|
791
|
+
_context2.prev = 17;
|
|
775
792
|
|
|
776
|
-
|
|
777
|
-
_ref6 = _getChanges3.ref,
|
|
778
|
-
_updatedVerseObjects = _getChanges3.updatedVerseObjects;
|
|
793
|
+
_iterator2.s();
|
|
779
794
|
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
795
|
+
case 19:
|
|
796
|
+
if ((_step2 = _iterator2.n()).done) {
|
|
797
|
+
_context2.next = 35;
|
|
798
|
+
break;
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
_cardIndex = _step2.value;
|
|
802
|
+
_cardNum = parseInt(_cardIndex);
|
|
803
|
+
_unsavedChangesList$_2 = unsavedChangesList[_cardNum], _getChanges2 = _unsavedChangesList$_2.getChanges, _state2 = _unsavedChangesList$_2.state;
|
|
804
|
+
|
|
805
|
+
if (!_getChanges2) {
|
|
806
|
+
_context2.next = 33;
|
|
807
|
+
break;
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
_newUsfm = void 0;
|
|
811
|
+
_getChanges3 = _getChanges2(_state2), _ref6 = _getChanges3.ref, _updatedVerseObjects = _getChanges3.updatedVerseObjects;
|
|
812
|
+
|
|
813
|
+
if (_updatedVerseObjects && bibleUsfm) {
|
|
814
|
+
// just replace verse
|
|
815
|
+
_newUsfm = mergeVerseObjectsIntoBibleUsfm(bibleUsfm, _ref6, _updatedVerseObjects, _cardNum);
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
if (!_newUsfm) {
|
|
819
|
+
_context2.next = 31;
|
|
820
|
+
break;
|
|
821
|
+
}
|
|
784
822
|
|
|
785
|
-
if (_newUsfm) {
|
|
786
823
|
bibleUsfm = _newUsfm;
|
|
787
|
-
|
|
824
|
+
_context2.next = 33;
|
|
825
|
+
break;
|
|
826
|
+
|
|
827
|
+
case 31:
|
|
788
828
|
mergeFail = true;
|
|
829
|
+
return _context2.abrupt("break", 35);
|
|
830
|
+
|
|
831
|
+
case 33:
|
|
832
|
+
_context2.next = 19;
|
|
833
|
+
break;
|
|
834
|
+
|
|
835
|
+
case 35:
|
|
836
|
+
_context2.next = 40;
|
|
789
837
|
break;
|
|
790
|
-
}
|
|
791
|
-
}
|
|
792
|
-
}
|
|
793
|
-
} catch (err) {
|
|
794
|
-
_iterator2.e(err);
|
|
795
|
-
} finally {
|
|
796
|
-
_iterator2.f();
|
|
797
|
-
}
|
|
798
838
|
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
var newBookJson;
|
|
839
|
+
case 37:
|
|
840
|
+
_context2.prev = 37;
|
|
841
|
+
_context2.t0 = _context2["catch"](17);
|
|
803
842
|
|
|
804
|
-
|
|
805
|
-
_step3;
|
|
843
|
+
_iterator2.e(_context2.t0);
|
|
806
844
|
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
var cardIndex = _step3.value;
|
|
845
|
+
case 40:
|
|
846
|
+
_context2.prev = 40;
|
|
810
847
|
|
|
811
|
-
|
|
848
|
+
_iterator2.f();
|
|
812
849
|
|
|
813
|
-
|
|
814
|
-
getChanges = _unsavedChangesList$_.getChanges,
|
|
815
|
-
_state = _unsavedChangesList$_.state;
|
|
850
|
+
return _context2.finish(40);
|
|
816
851
|
|
|
817
|
-
|
|
818
|
-
|
|
852
|
+
case 43:
|
|
853
|
+
if (mergeFail) {
|
|
854
|
+
// if we failed to merge, fallback to brute force verse objects to USFM
|
|
855
|
+
console.log("saveChangesToCloud(".concat(_cardNum, ") - verse not found, falling back to inserting verse object"));
|
|
856
|
+
_iterator3 = _createForOfIteratorHelper(unsavedCardIndices);
|
|
819
857
|
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
858
|
+
try {
|
|
859
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
860
|
+
cardIndex = _step3.value;
|
|
861
|
+
_cardNum2 = parseInt(cardIndex);
|
|
862
|
+
_unsavedChangesList$_ = unsavedChangesList[_cardNum2], getChanges = _unsavedChangesList$_.getChanges, _state = _unsavedChangesList$_.state;
|
|
824
863
|
|
|
825
|
-
|
|
826
|
-
|
|
864
|
+
if (getChanges) {
|
|
865
|
+
newUsfm = void 0;
|
|
866
|
+
_getChanges = getChanges(_state), newVerseText = _getChanges.newVerseText, _ref5 = _getChanges.ref, updatedVerseObjects = _getChanges.updatedVerseObjects;
|
|
827
867
|
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
var _AlignmentHelpers$upd = AlignmentHelpers.updateAlignmentsToTargetVerse(updatedVerseObjects, newVerseText),
|
|
831
|
-
targetVerseObjects = _AlignmentHelpers$upd.targetVerseObjects;
|
|
868
|
+
if (updatedVerseObjects && !newUsfm) {
|
|
869
|
+
targetVerseObjects_ = null;
|
|
832
870
|
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
871
|
+
if (_ref5) {
|
|
872
|
+
if (newVerseText) {
|
|
873
|
+
_AlignmentHelpers$upd = AlignmentHelpers.updateAlignmentsToTargetVerse(updatedVerseObjects, newVerseText), targetVerseObjects = _AlignmentHelpers$upd.targetVerseObjects;
|
|
874
|
+
targetVerseObjects_ = targetVerseObjects;
|
|
875
|
+
} else {
|
|
876
|
+
targetVerseObjects_ = updatedVerseObjects;
|
|
877
|
+
}
|
|
837
878
|
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
879
|
+
newBookJson = targetVerseObjects_ && (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.updateVerse(_ref5.chapter, _ref5.verse, {
|
|
880
|
+
verseObjects: targetVerseObjects_
|
|
881
|
+
}));
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
} catch (err) {
|
|
887
|
+
_iterator3.e(err);
|
|
888
|
+
} finally {
|
|
889
|
+
_iterator3.f();
|
|
841
890
|
}
|
|
891
|
+
|
|
892
|
+
bibleUsfm = usfmjs.toUSFM(newBookJson, {
|
|
893
|
+
forcedNewLines: true
|
|
894
|
+
});
|
|
842
895
|
}
|
|
843
|
-
}
|
|
844
|
-
}
|
|
845
|
-
} catch (err) {
|
|
846
|
-
_iterator3.e(err);
|
|
847
|
-
} finally {
|
|
848
|
-
_iterator3.f();
|
|
849
|
-
}
|
|
850
896
|
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
897
|
+
console.log("saveChangesToCloud() - saving new USFM: ".concat(bibleUsfm.substring(0, 100), "..."));
|
|
898
|
+
setState({
|
|
899
|
+
saveContent: bibleUsfm,
|
|
900
|
+
startSave: true,
|
|
901
|
+
saveClicked: false
|
|
902
|
+
});
|
|
855
903
|
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
});
|
|
862
|
-
}
|
|
904
|
+
case 46:
|
|
905
|
+
case "end":
|
|
906
|
+
return _context2.stop();
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
}, _callee2, null, [[17, 37, 40, 43]]);
|
|
910
|
+
}));
|
|
911
|
+
return _getReadyForSave.apply(this, arguments);
|
|
863
912
|
}
|
|
913
|
+
|
|
914
|
+
getReadyForSave();
|
|
864
915
|
}, [saveClicked]); // @ts-ignore
|
|
865
916
|
|
|
866
917
|
var _ref7 = _reference || {},
|
|
867
|
-
chapter = _ref7.chapter
|
|
868
|
-
verse = _ref7.verse;
|
|
918
|
+
chapter = _ref7.chapter;
|
|
869
919
|
|
|
870
920
|
React.useEffect(function () {
|
|
871
921
|
var _versesForRef = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef;
|
|
@@ -897,12 +947,12 @@ export default function ScriptureCard(_ref2) {
|
|
|
897
947
|
for (var i = 0, l = _versesForRef.length; i < l; i++) {
|
|
898
948
|
var verseRef = _versesForRef[i];
|
|
899
949
|
var _chapter2 = verseRef.chapter,
|
|
900
|
-
|
|
950
|
+
verse = verseRef.verse; // TRICKY - we remap verses in reference range to a linear series of verses so verse spans don't choke getQuoteMatchesInBookRef
|
|
901
951
|
|
|
902
952
|
var _verse = startVerse + i;
|
|
903
953
|
|
|
904
954
|
lastVerse = _verse;
|
|
905
|
-
substitute["".concat(_chapter2, ":").concat(_verse)] = "".concat(_chapter2, ":").concat(
|
|
955
|
+
substitute["".concat(_chapter2, ":").concat(_verse)] = "".concat(_chapter2, ":").concat(verse);
|
|
906
956
|
|
|
907
957
|
if (!originalVerses[_chapter2]) {
|
|
908
958
|
originalVerses[_chapter2] = {};
|
|
@@ -910,8 +960,8 @@ export default function ScriptureCard(_ref2) {
|
|
|
910
960
|
|
|
911
961
|
var verseObjects = [];
|
|
912
962
|
|
|
913
|
-
if (typeof
|
|
914
|
-
var verses = getVerses(bookVerseObject, "".concat(_chapter2, ":").concat(
|
|
963
|
+
if (typeof verse === 'string' && verse.includes('-')) {
|
|
964
|
+
var verses = getVerses(bookVerseObject, "".concat(_chapter2, ":").concat(verse));
|
|
915
965
|
|
|
916
966
|
var _iterator4 = _createForOfIteratorHelper(verses),
|
|
917
967
|
_step4;
|
|
@@ -930,7 +980,7 @@ export default function ScriptureCard(_ref2) {
|
|
|
930
980
|
} else {
|
|
931
981
|
var _bookVerseObject$_cha;
|
|
932
982
|
|
|
933
|
-
verseObjects = (_bookVerseObject$_cha = bookVerseObject[_chapter2][
|
|
983
|
+
verseObjects = (_bookVerseObject$_cha = bookVerseObject[_chapter2][verse]) === null || _bookVerseObject$_cha === void 0 ? void 0 : _bookVerseObject$_cha.verseObjects;
|
|
934
984
|
}
|
|
935
985
|
|
|
936
986
|
if (verseObjects) {
|
|
@@ -939,7 +989,7 @@ export default function ScriptureCard(_ref2) {
|
|
|
939
989
|
verseObjects: verseObjects
|
|
940
990
|
};
|
|
941
991
|
|
|
942
|
-
_map.set("".concat(_chapter2, ":").concat(
|
|
992
|
+
_map.set("".concat(_chapter2, ":").concat(verse), verseObjects);
|
|
943
993
|
}
|
|
944
994
|
} // create new reference range for new linear verse range
|
|
945
995
|
|
|
@@ -1325,4 +1375,4 @@ ScriptureCard.propTypes = {
|
|
|
1325
1375
|
/** use method for using local storage specific for user */
|
|
1326
1376
|
useUserLocalStorage: PropTypes.func.isRequired
|
|
1327
1377
|
};
|
|
1328
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1NjcmlwdHVyZUNhcmQvU2NyaXB0dXJlQ2FyZC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJQcm9wVHlwZXMiLCJjb3JlIiwiU2VsZWN0aW9uc0NvbnRleHRQcm92aWRlciIsInVzZm1qcyIsInVzZUVkaXQiLCJJY29uQnV0dG9uIiwiUnhMaW5rMiIsIlJ4TGlua0JyZWFrMiIsIkNhcmQiLCJFUlJPUl9TVEFURSIsIk1BTklGRVNUX05PVF9MT0FERURfRVJST1IiLCJ1c2VDYXJkU3RhdGUiLCJ1c2VVc2VyQnJhbmNoIiwiZ2V0UXVvdGVNYXRjaGVzSW5Cb29rUmVmIiwiQWxpZ25tZW50SGVscGVycyIsIlVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMiLCJpc0VxdWFsIiwiZ2V0VmVyc2VzIiwiU2NyaXB0dXJlUGFuZSIsIlNjcmlwdHVyZVNlbGVjdG9yIiwidXNlU2NyaXB0dXJlU2V0dGluZ3MiLCJjbGVhbnVwVmVyc2VPYmplY3RzIiwiZml4T2NjdXJyZW5jZSIsImdldFJlc291cmNlTGluayIsImdldFJlc291cmNlTWVzc2FnZSIsImdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyIsImlzT3JpZ2luYWxCaWJsZSIsImRlbGF5IiwiYXJlTWFwc1RoZVNhbWUiLCJUaXRsZSIsIk5UX09SSUdfTEFORyIsIk9SSUdJTkFMX1NPVVJDRSIsIk9UX09SSUdfTEFORyIsIlZlcnNlU2VsZWN0b3JQb3B1cCIsIktFWV9GT05UX1NJWkVfQkFTRSIsImxhYmVsIiwic3R5bGUiLCJtYXJnaW5Ub3AiLCJ3aWR0aCIsImNvbXBhcmVPYmplY3QiLCJ2ZXJzZVJlZiIsImNoYXB0ZXIiLCJ2ZXJzZSIsInZlcnNlRGF0YSIsInZlcnNlT2JqZWN0cyIsImxlbmd0aCIsImFyZVZlcnNlc1NhbWUiLCJ2ZXJzZXNGb3JSZWYxIiwidmVyc2VzRm9yUmVmMiIsImFyZVNhbWUiLCJpIiwibCIsInZlcnNlMSIsInZlcnNlMiIsIlNjcmlwdHVyZUNhcmQiLCJhcHBSZWYiLCJhdXRoZW50aWNhdGlvbiIsImJvb2tJbmRleCIsImNhcmROdW0iLCJjbGFzc2VzIiwiZGlzYWJsZVdvcmRQb3BvdmVyIiwiZ2V0TGFuZ3VhZ2UiLCJnZXRMZXhpY29uRGF0YSIsImdyZWVrUmVwb1VybCIsImhlYnJld1JlcG9VcmwiLCJodHRwQ29uZmlnIiwiaWQiLCJpc05UIiwibG9nZ2VkSW5Vc2VyIiwib25NaW5pbWl6ZSIsIm9uUmVzb3VyY2VFcnJvciIsIm9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHMiLCJyZWZlcmVuY2UiLCJyZXNvdXJjZSIsIm93bmVyIiwibGFuZ3VhZ2VJZCIsInJlc291cmNlSWQiLCJvcmlnaW5hbExhbmd1YWdlT3duZXIiLCJyZXNvdXJjZUxpbmsiLCJzZWxlY3RlZFF1b3RlIiwic2VydmVyIiwic2V0U2F2ZWRDaGFuZ2VzIiwic2V0V29yZEFsaWduZXJTdGF0dXMiLCJ0cmFuc2xhdGUiLCJ0aXRsZSIsInVzZVVzZXJMb2NhbFN0b3JhZ2UiLCJib29rSWQiLCJwcm9qZWN0SWQiLCJ1c2VTdGF0ZSIsImNoZWNrRm9yRWRpdEJyYW5jaCIsImN1cnJlbnRSZWZlcmVuY2UiLCJlZGl0QnJhbmNoUmVhZHkiLCJoYXZlVW5zYXZlZENoYW5nZXMiLCJsYXN0U2VsZWN0ZWRRdW90ZSIsInJlYWR5Rm9yRmV0Y2giLCJyZWYiLCJzYXZlQ2xpY2tlZCIsInNhdmVDb250ZW50Iiwic2VsZWN0aW9ucyIsIk1hcCIsInNoYSIsInN0YXJ0U2F2ZSIsInVybEVycm9yIiwidXNpbmdVc2VyQnJhbmNoIiwidW5zYXZlZENoYW5nZXNMaXN0IiwidmVyc2VzRm9yUmVmIiwic2hvd0FsaWdubWVudFBvcHVwIiwidmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCIsInZlcnNlc0FsaWdubWVudFN0YXR1cyIsInZlcnNlT2JqZWN0c01hcCIsInN0YXRlIiwic2V0U3RhdGVfIiwiZm9udFNpemUiLCJzZXRGb250U2l6ZSIsImlzTlRfIiwic2V0U3RhdGUiLCJuZXdTdGF0ZSIsInByZXZTdGF0ZSIsImNhY2hlIiwibWF4QWdlIiwibm9DYWNoZSIsInNldFVybEVycm9yIiwiZXJyb3IiLCJ3aG9sZUJvb2siLCJpc05ld1Rlc3RhbWVudCIsInNjcmlwdHVyZUNvbmZpZyIsInNldFNjcmlwdHVyZSIsInNjcmlwdHVyZVNldHRpbmdzIiwic2NyaXB0dXJlVmVyc2lvbkhpc3QiLCJmZXRjaFJlc3BfIiwiZmV0Y2hSZXNwb25zZSIsInJlcG8iLCJyZWZlcmVuY2VfIiwidXNlRWZmZWN0IiwiX3NoYSIsImRhdGEiLCJ1cmwiLCJkb3dubG9hZF91cmwiLCJ2YWxpZEJyYW5jaCIsInBhcnRzIiwic3BsaXQiLCJmZXRjaEJyYW5jaCIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5IiwiY2FyZFJlc291cmNlSWQiLCJyZWZfIiwiY2FuVXNlRWRpdEJyYW5jaCIsImluY2x1ZGVzIiwiY2FyZElkIiwiYnJhbmNoRGV0ZXJtaW5lZCIsInVzZXJFZGl0QnJhbmNoTmFtZSIsIl91c2luZ1VzZXJCcmFuY2giLCJ3b3JraW5nUmVzb3VyY2VCcmFuY2giLCJzdGFydEVkaXRCcmFuY2giLCJhY3Rpb25zIiwic3RhcnRFZGl0Iiwid29ya2luZ1JlZiIsInNjcmlwdHVyZVRpdGxlIiwicmVzb3VyY2VTdGF0dXMiLCJtZXNzYWdlIiwiaXNBY2Nlc3NFcnJvciIsInZlcnNpb24iLCJ1cGRhdGVUaXRsZSIsImdldFNjcmlwdHVyZVNlbGVjdG9yIiwic2NyaXB0dXJlU2VsZWN0aW9uQ29uZmlnIiwib25NZW51Q2xvc2UiLCJsYW5ndWFnZUlkXyIsImxhbmd1YWdlIiwiZGlyZWN0aW9uIiwiX3JlZmVyZW5jZSIsImlzSGVicmV3IiwiZm9udEZhY3RvciIsInNjYWxlZEZvbnRTaXplIiwiaXRlbXMiLCJoZWFkZXJzIiwiZmlsdGVycyIsIml0ZW1JbmRleCIsIm1hcmtkb3duVmlldyIsInNldEZpbHRlcnMiLCJzZXRJdGVtSW5kZXgiLCJzZXRNYXJrZG93blZpZXciLCJyZWZTdHlsZSIsInVzZU1lbW8iLCJmb250RmFtaWx5IiwiTWF0aCIsInJvdW5kIiwiY29udGVudFN0eWxlIiwic2NyaXB0dXJlTGFiZWwiLCJkaXNhYmxlV29yZFBvcG92ZXJfIiwidXNpbmdPcmlnaW5hbEJpYmxlIiwidW5kZWZpbmVkIiwiZW5hYmxlRWRpdCIsImVuYWJsZUFsaWdubWVudCIsIm9yaWdpbmFsUmVwb1VybCIsInNjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWciLCJjdXJyZW50VmVyc2VSZWYiLCJfc2V0U2F2ZWRDaGFuZ2VzIiwic291cmNlTGFuZ3VhZ2UiLCJ0YXJnZXRMYW5ndWFnZSIsImN1cnJlbnRJbmRleCIsInNhdmVkIiwiZ2V0Q2hhbmdlcyIsImNsZWFyQ2hhbmdlcyIsIl91bnNhdmVkQ2hhbmdlc0xpc3QiLCJoYXNPd25Qcm9wZXJ0eSIsIl9oYXZlVW5zYXZlZENoYW5nZXMiLCJPYmplY3QiLCJrZXlzIiwiZmluZFJlZkluQXJyYXkiLCJmaW5kSXRlbSIsImNodW5rcyIsInJlZkxlbiIsImluZGV4IiwiZmluZEluZGV4IiwiY2h1bmsiLCJpZHgiLCJzdWJzdHJpbmciLCJuZXh0Q2hhciIsImdldEJvb2tOYW1lIiwiYm9va0NhcHMiLCJ0b1VwcGVyQ2FzZSIsImZpbGVwYXRoIiwiY29udGVudCIsImNvbmZpZyIsInRva2VuIiwidGltZW91dCIsInNlcnZlclRpbWVPdXQiLCJhdXRob3IiLCJicmFuY2giLCJzYXZlRXJyb3IiLCJpc1NhdmVFcnJvciIsImlzRXJyb3IiLCJvblNhdmVFZGl0IiwiX3NhdmVFZGl0IiwiaW5mbyIsInRoZW4iLCJzdWNjZXNzIiwidW5zYXZlZENhcmRJbmRpY2VzIiwiY2FyZEluZGV4IiwicmVsb2FkUmVzb3VyY2UiLCJtZXJnZVZlcnNlT2JqZWN0c0ludG9CaWJsZVVzZm0iLCJiaWJsZVVzZm0iLCJ1cGRhdGVkVmVyc2VPYmplY3RzIiwibmV3VXNmbSIsImNoYXB0ZXJDaHVua3MiLCJjaGFwdGVySW5kZXgiLCJjdXJyZW50Q2hhcHRlciIsInZlcnNlQ2h1bmtzIiwidmVyc2VJbmRleCIsIm5ld1ZlcnNlVXNmbSIsImNvbnZlcnRWZXJzZURhdGFUb1VTRk0iLCJvbGRWZXJzZSIsInZlcnNlTnVtTGVuIiwibmV3Q2hhcHRlciIsImpvaW4iLCJjcmVhdGVFZGl0QnJhbmNoIiwid2FybiIsImdldFJlc3BvbnNlRGF0YSIsIm1lcmdlRmFpbCIsInBhcnNlSW50IiwibmV3Qm9va0pzb24iLCJuZXdWZXJzZVRleHQiLCJ0YXJnZXRWZXJzZU9iamVjdHNfIiwidXBkYXRlQWxpZ25tZW50c1RvVGFyZ2V0VmVyc2UiLCJ0YXJnZXRWZXJzZU9iamVjdHMiLCJ1cGRhdGVWZXJzZSIsInRvVVNGTSIsImZvcmNlZE5ld0xpbmVzIiwiX3ZlcnNlc0ZvclJlZiIsIm5ld1NlbGVjdGlvbnMiLCJ1cGRhdGVTZWxlY3Rpb25zIiwiX21hcCIsIm9yaWdpbmFsQm9va0lkIiwiYm9va1ZlcnNlT2JqZWN0IiwiY2hhcHRlcnMiLCJuZXdTZWxlY3RlZFF1b3RlIiwicXVvdGUiLCJvcmlnaW5hbFZlcnNlcyIsInN1YnN0aXR1dGUiLCJzdGFydFZlcnNlIiwibGFzdFZlcnNlIiwiX3ZlcnNlIiwidmVyc2VzIiwidmVyc2VJdGVtIiwidm8iLCJjb25jYXQiLCJzZXQiLCJzdWJSZWYiLCJxdW90ZU1hdGNoZXMiLCJib29rT2JqZWN0Iiwib2NjdXJyZW5jZSIsInNpemUiLCJmb3JFYWNoIiwid29yZHMiLCJrZXkiLCJfa2V5IiwibWFwIiwid29yZCIsInRleHQiLCJub3JtYWxpemVTdHJpbmciLCJib29rc05vdFNhbWUiLCJ1cGRhdGVWZXJzZXNBbGlnbm1lbnRTdGF0dXMiLCJhbGlnbmVkIiwicmVuZGVyZWRTY3JpcHR1cmVQYW5lcyIsIl9jdXJyZW50VmVyc2VEYXRhIiwiaW5pdGlhbFZlcnNlT2JqZWN0cyIsIl9zY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnIiwiaXNWZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50IiwiaGFuZGxlQWxpZ25CdXR0b25DbGljayIsIm9uUmVuZGVyVG9vbGJhciIsIm5ld0l0ZW1zIiwiYWxsVmVyc2VzQWxpZ25lZCIsInZhbHVlcyIsImV2ZXJ5IiwiYWxpZ25TdGF0dXMiLCJhbGlnbkljb24iLCJhbGlnbkJ1dHRvblRleHQiLCJwdXNoIiwiY3Vyc29yIiwicHJvcFR5cGVzIiwic3RyaW5nIiwiaXNSZXF1aXJlZCIsIm9iamVjdCIsIm51bWJlciIsImJvb2wiLCJmdW5jIiwic2hhcGUiLCJvbmVPZlR5cGUiLCJhbnkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLQSxLQUFaLE1BQXVCLE9BQXZCO0FBQ0EsT0FBTyxLQUFLQyxTQUFaLE1BQTJCLFlBQTNCO0FBQ0EsU0FBU0MsSUFBVCxFQUFlQyx5QkFBZixRQUFnRCx5QkFBaEQ7QUFDQSxPQUFPQyxNQUFQLE1BQW1CLFNBQW5CO0FBQ0EsU0FBU0MsT0FBVCxRQUF3QixxQkFBeEI7QUFDQSxTQUFTQyxVQUFULFFBQTJCLGVBQTNCO0FBQ0EsU0FBU0MsT0FBVCxFQUFrQkMsWUFBbEIsUUFBc0MsZ0JBQXRDO0FBQ0EsU0FDRUMsSUFERixFQUVFQyxXQUZGLEVBR0VDLHlCQUhGLEVBSUVDLFlBSkYsRUFLRUMsYUFMRixRQU1PLHVCQU5QO0FBT0EsU0FBU0Msd0JBQVQsUUFBeUMsa0JBQXpDO0FBQ0EsU0FBU0MsZ0JBQVQsRUFBMkJDLHlCQUEzQixRQUE0RCxrQkFBNUQ7QUFDQSxPQUFPLEtBQUtDLE9BQVosTUFBeUIsWUFBekI7QUFDQSxTQUFTQyxTQUFULFFBQTBCLHVCQUExQjtBQUNBLFNBQVNDLGFBQVQsRUFBd0JDLGlCQUF4QixRQUFpRCxJQUFqRDtBQUNBLFNBQVNDLG9CQUFULFFBQXFDLGtDQUFyQztBQUNBLFNBQ0VDLG1CQURGLEVBRUVDLGFBRkYsRUFHRUMsZUFIRixFQUlFQyxrQkFKRixFQUtFQywyQkFMRixFQU1FQyxlQU5GLFFBT08sK0JBUFA7QUFRQSxTQUFTQyxLQUFULFFBQXNCLG1CQUF0QjtBQUNBLFNBQVNDLGNB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UyxDQUFDa1UsTUFBVixDQUFpQkMsVUFwRUE7O0FBcUV4QjtBQUNBaFAsRUFBQUEsU0FBUyxFQUFFbkYsU0FBUyxDQUFDdVUsSUF0RUc7O0FBdUV4QjtBQUNBbFAsRUFBQUEsbUJBQW1CLEVBQUVyRixTQUFTLENBQUN1VSxJQUFWLENBQWVKO0FBeEVaLENBQTFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCB7IGNvcmUsIFNlbGVjdGlvbnNDb250ZXh0UHJvdmlkZXIgfSBmcm9tICdzY3JpcHR1cmUtcmVzb3VyY2VzLXJjbCdcbmltcG9ydCB1c2ZtanMgZnJvbSAndXNmbS1qcydcbmltcG9ydCB7IHVzZUVkaXQgfSBmcm9tICdnaXRlYS1yZWFjdC10b29sa2l0J1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnXG5pbXBvcnQgeyBSeExpbmsyLCBSeExpbmtCcmVhazIgfSBmcm9tICdyZWFjdC1pY29ucy9yeCdcbmltcG9ydCB7XG4gIENhcmQsXG4gIEVSUk9SX1NUQVRFLFxuICBNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SLFxuICB1c2VDYXJkU3RhdGUsXG4gIHVzZVVzZXJCcmFuY2gsXG59IGZyb20gJ3RyYW5zbGF0aW9uLWhlbHBzLXJjbCdcbmltcG9ydCB7IGdldFF1b3RlTWF0Y2hlc0luQm9va1JlZiB9IGZyb20gJ3V3LXF1b3RlLWhlbHBlcnMnXG5pbXBvcnQgeyBBbGlnbm1lbnRIZWxwZXJzLCBVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzIH0gZnJvbSAnd29yZC1hbGlnbmVyLXJjbCdcbmltcG9ydCAqIGFzIGlzRXF1YWwgZnJvbSAnZGVlcC1lcXVhbCdcbmltcG9ydCB7IGdldFZlcnNlcyB9IGZyb20gJ2JpYmxlLXJlZmVyZW5jZS1yYW5nZSdcbmltcG9ydCB7IFNjcmlwdHVyZVBhbmUsIFNjcmlwdHVyZVNlbGVjdG9yIH0gZnJvbSAnLi4nXG5pbXBvcnQgeyB1c2VTY3JpcHR1cmVTZXR0aW5ncyB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVNjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHtcbiAgY2xlYW51cFZlcnNlT2JqZWN0cyxcbiAgZml4T2NjdXJyZW5jZSxcbiAgZ2V0UmVzb3VyY2VMaW5rLFxuICBnZXRSZXNvdXJjZU1lc3NhZ2UsXG4gIGdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyxcbiAgaXNPcmlnaW5hbEJpYmxlLFxufSBmcm9tICcuLi8uLi91dGlscy9TY3JpcHR1cmVTZXR0aW5ncydcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZGVsYXknXG5pbXBvcnQgeyBhcmVNYXBzVGhlU2FtZSB9IGZyb20gJy4uLy4uL3V0aWxzL21hcHMnXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4uL1NjcmlwdHVyZVBhbmUvc3R5bGVkJ1xuaW1wb3J0IHtcbiAgTlRfT1JJR19MQU5HLFxuICBPUklHSU5BTF9TT1VSQ0UsXG4gIE9UX09SSUdfTEFORyxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnXG5pbXBvcnQgeyBWZXJzZVNlbGVjdG9yUG9wdXAgfSBmcm9tICcuLi9WZXJzZVNlbGVjdG9yUG9wdXAnXG5cbmNvbnN0IEtFWV9GT05UX1NJWkVfQkFTRSA9ICdzY3JpcHR1cmVQYW5lRm9udFNpemVfJ1xuY29uc3QgbGFiZWwgPSAnVmVyc2lvbidcbmNvbnN0IHN0eWxlID0geyBtYXJnaW5Ub3A6ICcxNnB4Jywgd2lkdGg6ICc1MDBweCcgfVxuXG4vKipcbiAqIGNyZWF0ZSBhIHNob3J0IGNvbXBhcmlzb24gdmVyc2UgcmVmIG9iamVjdCB3aXRob3V0IGFsbCB0aGUgdmVyc2VEYXRhXG4gKiBAcGFyYW0gdmVyc2VSZWZcbiAqL1xuZnVuY3Rpb24gY29tcGFyZU9iamVjdCh2ZXJzZVJlZikge1xuICBjb25zdCB7XG4gICAgY2hhcHRlcixcbiAgICB2ZXJzZSxcbiAgICB2ZXJzZURhdGEsXG4gIH0gPSB2ZXJzZVJlZiB8fCB7fVxuICBjb25zdCB2ZXJzZU9iamVjdHMgPSB2ZXJzZURhdGE/LnZlcnNlT2JqZWN0cz8ubGVuZ3RoIHx8IDBcbiAgcmV0dXJuIHtcbiAgICBjaGFwdGVyLFxuICAgIHZlcnNlLFxuICAgIHZlcnNlT2JqZWN0cyxcbiAgfVxufVxuXG4vKipcbiAqIGNvbXBhcmUgdHdvIHZlcnNlIHJlZnMgdG8gc2VlIGlmIHRoZXkgYXJlIHN1YnN0YW50aWFsbHkgc2ltaWxhclxuICogQHBhcmFtIHZlcnNlc0ZvclJlZjFcbiAqIEBwYXJhbSB2ZXJzZXNGb3JSZWYyXG4gKi9cbmZ1bmN0aW9uIGFyZVZlcnNlc1NhbWUodmVyc2VzRm9yUmVmMTogYW55W10sIHZlcnNlc0ZvclJlZjI6IGFueVtdKSB7XG4gIHZlcnNlc0ZvclJlZjEgPSB2ZXJzZXNGb3JSZWYxIHx8IFtdXG4gIHZlcnNlc0ZvclJlZjIgPSB2ZXJzZXNGb3JSZWYyIHx8IFtdXG4gIGxldCBhcmVTYW1lID0gZmFsc2VcblxuICBpZiAodmVyc2VzRm9yUmVmMS5sZW5ndGggPT09IHZlcnNlc0ZvclJlZjIubGVuZ3RoKSB7XG4gICAgYXJlU2FtZSA9IHRydWVcblxuICAgIGZvciAobGV0IGkgPSAwLCBsPSB2ZXJzZXNGb3JSZWYxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgY29uc3QgdmVyc2UxID0gY29tcGFyZU9iamVjdCh2ZXJzZXNGb3JSZWYxW2ldKVxuICAgICAgY29uc3QgdmVyc2UyID0gY29tcGFyZU9iamVjdCh2ZXJzZXNGb3JSZWYyW2ldKVxuICAgICAgYXJlU2FtZSA9IGlzRXF1YWwodmVyc2UxLCB2ZXJzZTIpXG5cbiAgICAgIGlmICghYXJlU2FtZSkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhcmVTYW1lXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNjcmlwdHVyZUNhcmQoe1xuICBhcHBSZWYsXG4gIGF1dGhlbnRpY2F0aW9uLFxuICBib29rSW5kZXgsXG4gIGNhcmROdW0sXG4gIGNsYXNzZXMsXG4gIGRpc2FibGVXb3JkUG9wb3ZlcixcbiAgZ2V0TGFuZ3VhZ2UsXG4gIGdldExleGljb25EYXRhLFxuICBncmVla1JlcG9VcmwsXG4gIGhlYnJld1JlcG9VcmwsXG4gIGh0dHBDb25maWcsXG4gIGlkLFxuICBpc05ULFxuICBsb2dnZWRJblVzZXIsXG4gIG9uTWluaW1pemUsXG4gIG9uUmVzb3VyY2VFcnJvcixcbiAgb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cyxcbiAgcmVmZXJlbmNlLFxuICByZXNvdXJjZToge1xuICAgIG93bmVyLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgcmVzb3VyY2VJZCxcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gIH0sXG4gIHJlc291cmNlTGluayxcbiAgc2VsZWN0ZWRRdW90ZSxcbiAgc2VydmVyLFxuICBzZXRTYXZlZENoYW5nZXMsXG4gIHNldFdvcmRBbGlnbmVyU3RhdHVzLFxuICB0cmFuc2xhdGUsXG4gIHRpdGxlLFxuICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxufSkge1xuICBjb25zdCBib29rSWQgPSByZWZlcmVuY2U/LnByb2plY3RJZFxuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlX10gPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgY2hlY2tGb3JFZGl0QnJhbmNoOiAwLFxuICAgIGN1cnJlbnRSZWZlcmVuY2U6IG51bGwsXG4gICAgZWRpdEJyYW5jaFJlYWR5OiBmYWxzZSxcbiAgICBoYXZlVW5zYXZlZENoYW5nZXM6IGZhbHNlLFxuICAgIGxhc3RTZWxlY3RlZFF1b3RlOiBudWxsLFxuICAgIHJlYWR5Rm9yRmV0Y2g6IGZhbHNlLFxuICAgIHJlZjogYXBwUmVmLFxuICAgIHNhdmVDbGlja2VkOiBmYWxzZSxcbiAgICBzYXZlQ29udGVudDogbnVsbCxcbiAgICBzZWxlY3Rpb25zOiBuZXcgTWFwKCksXG4gICAgc2hhOiBudWxsLFxuICAgIHN0YXJ0U2F2ZTogZmFsc2UsXG4gICAgdXJsRXJyb3I6IG51bGwsXG4gICAgdXNpbmdVc2VyQnJhbmNoOiBmYWxzZSxcbiAgICB1bnNhdmVkQ2hhbmdlc0xpc3Q6IHt9LFxuICAgIHZlcnNlc0ZvclJlZjogbnVsbCxcbiAgICBzaG93QWxpZ25tZW50UG9wdXA6IGZhbHNlLFxuICAgIHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQ6IG51bGwsXG4gICAgdmVyc2VzQWxpZ25tZW50U3RhdHVzOiBudWxsLFxuICAgIHZlcnNlT2JqZWN0c01hcDogbmV3IE1hcCgpLFxuICB9KVxuICBjb25zdCB7XG4gICAgY2hlY2tGb3JFZGl0QnJhbmNoLFxuICAgIGN1cnJlbnRSZWZlcmVuY2UsXG4gICAgZWRpdEJyYW5jaFJlYWR5LFxuICAgIGhhdmVVbnNhdmVkQ2hhbmdlcyxcbiAgICBsYXN0U2VsZWN0ZWRRdW90ZSxcbiAgICByZWFkeUZvckZldGNoLFxuICAgIHJlZixcbiAgICBzYXZlQ2xpY2tlZCxcbiAgICBzYXZlQ29udGVudCxcbiAgICBzZWxlY3Rpb25zLFxuICAgIHNoYSxcbiAgICBzaG93QWxpZ25tZW50UG9wdXAsXG4gICAgc3RhcnRTYXZlLFxuICAgIHVybEVycm9yLFxuICAgIHVzaW5nVXNlckJyYW5jaCxcbiAgICB1bnNhdmVkQ2hhbmdlc0xpc3QsXG4gICAgdmVyc2VPYmplY3RzTWFwLFxuICAgIHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQsXG4gICAgdmVyc2VzQWxpZ25tZW50U3RhdHVzLFxuICAgIHZlcnNlc0ZvclJlZixcbiAgfSA9IHN0YXRlXG5cbiAgY29uc3QgW2ZvbnRTaXplLCBzZXRGb250U2l6ZV0gPSB1c2VVc2VyTG9jYWxTdG9yYWdlKEtFWV9GT05UX1NJWkVfQkFTRSArIGNhcmROdW0sIDEwMClcbiAgY29uc3QgaXNOVF8gPSBpc05UKGJvb2tJZClcblxuICBmdW5jdGlvbiBzZXRTdGF0ZShuZXdTdGF0ZSkge1xuICAgIHNldFN0YXRlXyhwcmV2U3RhdGUgPT4gKHsgLi4ucHJldlN0YXRlLCAuLi5uZXdTdGF0ZSB9KSlcbiAgfVxuXG4gIGlmICh1c2luZ1VzZXJCcmFuY2gpIHtcbiAgICBodHRwQ29uZmlnID0ge1xuICAgICAgLi4uaHR0cENvbmZpZyxcbiAgICAgIGNhY2hlOiB7IG1heEFnZTogMCB9LFxuICAgICAgbm9DYWNoZTogdHJ1ZSxcbiAgICB9IC8vIGRpc2FibGUgaHR0cCBjYWNoaW5nXG4gIH1cblxuICBjb25zdCB7XG4gICAgaXNOZXdUZXN0YW1lbnQsXG4gICAgc2NyaXB0dXJlQ29uZmlnLFxuICAgIHNldFNjcmlwdHVyZSxcbiAgICBzY3JpcHR1cmVTZXR0aW5ncyxcbiAgICBzY3JpcHR1cmVWZXJzaW9uSGlzdCxcbiAgfSA9IHVzZVNjcmlwdHVyZVNldHRpbmdzKHtcbiAgICBpc05ULFxuICAgIHRpdGxlLFxuICAgIG93bmVyLFxuICAgIHJlZmVyZW5jZTogY3VycmVudFJlZmVyZW5jZSB8fCByZWZlcmVuY2UsXG4gICAgYXBwUmVmOiByZWYsXG4gICAgc2VydmVyLFxuICAgIGNhcmROdW0sXG4gICAgZGlzYWJsZVdvcmRQb3BvdmVyLFxuICAgIGdyZWVrUmVwb1VybCxcbiAgICBoZWJyZXdSZXBvVXJsLFxuICAgIGh0dHBDb25maWcsXG4gICAgbGFuZ3VhZ2VJZCxcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gICAgcmVhZHlGb3JGZXRjaCxcbiAgICByZXNvdXJjZUlkLFxuICAgIHJlc291cmNlTGluayxcbiAgICBzZXRVcmxFcnJvcjogKGVycm9yKSA9PiBzZXRTdGF0ZSh7IHVybEVycm9yOiBlcnJvciB9KSxcbiAgICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxuICAgIHdob2xlQm9vazogdHJ1ZSxcbiAgfSlcblxuICBjb25zdCBmZXRjaFJlc3BfID0gc2NyaXB0dXJlQ29uZmlnPy5mZXRjaFJlc3BvbnNlXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgcmVwbyA9IGAke3NjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/Lmxhbmd1YWdlSWR9XyR7c2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ucHJvamVjdElkfWBcbiAgY29uc3QgcmVmZXJlbmNlXyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVmZXJlbmNlIHx8IG51bGxcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBnZXQgdGhlIF9zaGEgZnJvbSBsYXN0IHNjcmlwdHVyZSBkb3dubG9hZFxuICAgIGNvbnN0IF9zaGEgPSBmZXRjaFJlc3BfPy5kYXRhPy5zaGEgfHwgbnVsbFxuICAgIGNvbnN0IHVybCA9IGZldGNoUmVzcF8/LmRhdGE/LmRvd25sb2FkX3VybCB8fCBudWxsXG4gICAgbGV0IHZhbGlkQnJhbmNoID0gdHJ1ZVxuXG4gICAgaWYgKF9zaGEpIHsgLy8gVFJJQ0tZOiBzaW5jZSB0aGlzIGZldGNoIG1heSBiZSBkZWxheWVkIC0gbWFrZSBzdXJlIGl0IHdhcyBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoIGJlZm9yZSB1c2luZyB0aGUgc2hhXG4gICAgICBjb25zdCBwYXJ0cyA9ICh1cmwgfHwgJycpLnNwbGl0KCcvJylcbiAgICAgIGNvbnN0IGZldGNoQnJhbmNoID0gcGFydHMubGVuZ3RoID4gNyA/IHBhcnRzWzddIDogJydcbiAgICAgIHZhbGlkQnJhbmNoID0gZmV0Y2hCcmFuY2ggPT09IHJlZlxuICAgIH1cblxuICAgIGlmICh2YWxpZEJyYW5jaCAmJiBfc2hhICE9PSBzaGEpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBTY3JpcHR1cmVDYXJkOiBmb3IgJHt1cmx9ICR7SlNPTi5zdHJpbmdpZnkocmVmZXJlbmNlXyl9IG5ldyBzaGEgaXMgJHtfc2hhfWApXG4gICAgICBzZXRTdGF0ZSh7IHNoYTogX3NoYSB9KVxuICAgIH1cbiAgfSwgW2ZldGNoUmVzcF9dKVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgY2FyZFJlc291cmNlSWQgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5wcm9qZWN0SWQgfHwgcmVzb3VyY2VJZFxuICAvLyBAdHMtaWdub3JlXG4gIGxldCByZWZfID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ucmVmIHx8IGFwcFJlZlxuICBjb25zdCBjYW5Vc2VFZGl0QnJhbmNoID0gISEobG9nZ2VkSW5Vc2VyICYmIGF1dGhlbnRpY2F0aW9uICYmIChyZXNvdXJjZUlkICE9PSBPUklHSU5BTF9TT1VSQ0UpICYmIC8vIFRSSUNLWSBpZiBub3Qgb3JpZ2luYWwgbGFuZ3VhZ2UgYW5kIHdlIGhhdmUgbG9naW4gZGF0YSwgdGhlbiB3ZSBjYW4gdXNlIHRoZSBlZGl0IGJyYW5jaFxuICAgICgocmVmXyA9PT0gJ21hc3RlcicpIHx8IChyZWZfLmluY2x1ZGVzKGxvZ2dlZEluVXNlcikpKSkgLy8gYWxzbyBtYWtlIHN1cmUgbm90IGEgdmVyc2lvbiB0YWdcblxuICBjb25zdCB7XG4gICAgc3RhdGU6IHtcbiAgICAgIGJyYW5jaERldGVybWluZWQsXG4gICAgICB1c2VyRWRpdEJyYW5jaE5hbWUsXG4gICAgICB1c2luZ1VzZXJCcmFuY2g6IF91c2luZ1VzZXJCcmFuY2gsXG4gICAgICB3b3JraW5nUmVzb3VyY2VCcmFuY2gsXG4gICAgfSxcbiAgICBhY3Rpb25zOiB7IHN0YXJ0RWRpdDogc3RhcnRFZGl0QnJhbmNoIH0sXG4gIH0gPSB1c2VVc2VyQnJhbmNoKHtcbiAgICBhcHBSZWYsXG4gICAgYXV0aGVudGljYXRpb246IGNhblVzZUVkaXRCcmFuY2ggPyBhdXRoZW50aWNhdGlvbiA6IG51bGwsXG4gICAgYm9va0lkLFxuICAgIGNhcmRJZDogaWQsXG4gICAgY2FyZFJlc291cmNlSWQsXG4gICAgY2hlY2tGb3JFZGl0QnJhbmNoLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgbG9nZ2VkSW5Vc2VyOiBjYW5Vc2VFZGl0QnJhbmNoID8gbG9nZ2VkSW5Vc2VyIDogbnVsbCxcbiAgICBvd25lcixcbiAgICBvblJlc291cmNlRXJyb3IsXG4gICAgc2VydmVyLFxuICAgIHVzZVVzZXJMb2NhbFN0b3JhZ2UsXG4gIH0pXG5cbiAgY29uc3Qgd29ya2luZ1JlZiA9IGNhblVzZUVkaXRCcmFuY2ggPyB3b3JraW5nUmVzb3VyY2VCcmFuY2ggOiBhcHBSZWZcbiAgbGV0IHNjcmlwdHVyZVRpdGxlXG5cbiAgaWYgKCFjYW5Vc2VFZGl0QnJhbmNoICYmICFyZWFkeUZvckZldGNoKSB7IC8vIGlmIGJpYmxlIG5vdCBlbGlnaWJsZSBmb3IgdXNlciBicmFuY2gsIG1ha2Ugc3VyZSBpdCdzIHJlYWR5XG4gICAgc2V0U3RhdGUoeyByZWFkeUZvckZldGNoOiB0cnVlIH0pXG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGBTY3JpcHR1cmVDYXJkIGJvb2sgY2hhbmdlZGAsIHsgYm9va0lkLCBvd25lciwgbGFuZ3VhZ2VJZCwgcmVzb3VyY2VJZCB9KVxuXG4gICAgaWYgKGNhblVzZUVkaXRCcmFuY2gpIHsgLy8gaWYgYmlibGUgZWxpZ2libGUgZm9yIHVzZXIgYnJhbmNoLCByZWZyZXNoIGl0XG4gICAgICBzZXRTdGF0ZSh7IHJlYWR5Rm9yRmV0Y2g6IGZhbHNlLCBjaGVja0ZvckVkaXRCcmFuY2g6IGNoZWNrRm9yRWRpdEJyYW5jaCArIDEgfSlcbiAgICB9XG4gIH0sIFtib29rSWQsIG93bmVyLCBsYW5ndWFnZUlkLCByZXNvdXJjZUlkXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNFcXVhbChyZWZlcmVuY2UsIGN1cnJlbnRSZWZlcmVuY2UpKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhgU2NyaXB0dXJlQ2FyZCByZWZlcmVuY2UgY2hhbmdlZGAsIHJlZmVyZW5jZSlcbiAgICAgIHNldFN0YXRlKHsgY3VycmVudFJlZmVyZW5jZTogcmVmZXJlbmNlIH0pXG4gICAgfVxuICB9LCBbcmVmZXJlbmNlXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyB3YWl0aW5nIGZvciBicmFuY2ggZmV0Y2ggdG8gY29tcGxldGVcbiAgICBjb25zb2xlLmxvZyhgU2NyaXB0dXJlQ2FyZCBicmFuY2hEZXRlcm1pbmVkIGlzICR7YnJhbmNoRGV0ZXJtaW5lZH0gYW5kIHdvcmtpbmdSZWYgaXMgJHt3b3JraW5nUmVmfSBhbmQgcmVhZHlGb3JGZXRjaCBpcyAke3JlYWR5Rm9yRmV0Y2h9YClcblxuICAgIGlmICghcmVhZHlGb3JGZXRjaCAmJiBicmFuY2hEZXRlcm1pbmVkICkge1xuICAgICAgc2V0U3RhdGUoeyByZWFkeUZvckZldGNoOiB0cnVlLCByZWY6IHdvcmtpbmdSZWYgfSlcbiAgICB9XG4gIH0sIFticmFuY2hEZXRlcm1pbmVkXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBzZWxlY3QgY29ycmVjdCB3b3JraW5nIHJlZiAtIGNvdWxkIGJlIG1hc3RlciwgdXNlciBicmFuY2gsIG9yIHJlbGVhc2VcbiAgICBpZiAoX3VzaW5nVXNlckJyYW5jaCAhPT0gdXNpbmdVc2VyQnJhbmNoKSB7XG4gICAgICBzZXRTdGF0ZSh7IHVzaW5nVXNlckJyYW5jaDogX3VzaW5nVXNlckJyYW5jaCB9KVxuICAgIH1cbiAgfSwgW191c2luZ1VzZXJCcmFuY2gsIHVzaW5nVXNlckJyYW5jaF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gdXBkYXRlIGRpc3BsYXkgc3RhdHVzIGlmIGVycm9yXG4gICAgY29uc3QgZXJyb3IgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlU3RhdHVzPy5bRVJST1JfU1RBVEVdXG5cbiAgICBpZiAoZXJyb3IpIHsgLy8gaWYgZXJyb3Igd2FzIGZvdW5kIGRvIGNhbGxiYWNrXG4gICAgICBjb25zdCByZXNvdXJjZVN0YXR1cyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0dXNcbiAgICAgIGNvbnN0IHJlc291cmNlTGluayA9IGdldFJlc291cmNlTGluayhzY3JpcHR1cmVDb25maWcpXG4gICAgICBjb25zdCBtZXNzYWdlID0gZ2V0UmVzb3VyY2VNZXNzYWdlKHJlc291cmNlU3RhdHVzLCBzZXJ2ZXIsIHJlc291cmNlTGluaywgaXNOVF8pXG4gICAgICBjb25zdCBpc0FjY2Vzc0Vycm9yID0gcmVzb3VyY2VTdGF0dXNbTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUl1cbiAgICAgIG9uUmVzb3VyY2VFcnJvciAmJiBvblJlc291cmNlRXJyb3IobWVzc2FnZSwgaXNBY2Nlc3NFcnJvciwgcmVzb3VyY2VTdGF0dXMpXG4gICAgfVxuICB9LCBbc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZVN0YXR1cz8uW0VSUk9SX1NUQVRFXV0pXG5cbiAgaWYgKHNjcmlwdHVyZUNvbmZpZy50aXRsZSAmJiBzY3JpcHR1cmVDb25maWcudmVyc2lvbikge1xuICAgIHNjcmlwdHVyZVRpdGxlID0gYCR7c2NyaXB0dXJlQ29uZmlnLnRpdGxlfSB2JHtzY3JpcHR1cmVDb25maWcudmVyc2lvbn1gXG4gICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QudXBkYXRlVGl0bGUoc2NyaXB0dXJlQ29uZmlnLnJlc291cmNlTGluaywgc2NyaXB0dXJlVGl0bGUpXG4gIH0gZWxzZSB7XG4gICAgc2NyaXB0dXJlVGl0bGUgPSBgVGl0bGUgbWlzc2luZyBmcm9tIHByb2plY3QgbWFuaWZlc3RgXG4gIH1cblxuICAvKiogRHluYW1pY2FsbHkgY3JlYXRlcyB0aGUgc2NyaXB0dXJlIHNlbGVjdGlvbiBkcm9wZG93biB0byBiZSBpbnNlcnRlZCBpbnRvIGNhcmQgc2V0dGluZ3MgKi9cbiAgZnVuY3Rpb24gZ2V0U2NyaXB0dXJlU2VsZWN0b3IoKSB7XG4gICAgY29uc3Qgc2NyaXB0dXJlU2VsZWN0aW9uQ29uZmlnID0gZ2V0U2NyaXB0dXJlVmVyc2lvblNldHRpbmdzKHtcbiAgICAgIGxhYmVsLFxuICAgICAgcmVzb3VyY2VMaW5rOiBzY3JpcHR1cmVDb25maWcucmVzb3VyY2VMaW5rLFxuICAgICAgc2V0U2NyaXB0dXJlLFxuICAgICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QsXG4gICAgfSlcblxuICAgIHJldHVybiA8U2NyaXB0dXJlU2VsZWN0b3Igey4uLnNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZ30gc3R5bGU9e3N0eWxlfSBlcnJvck1lc3NhZ2U9e3VybEVycm9yfSAvPlxuICB9XG5cbiAgZnVuY3Rpb24gb25NZW51Q2xvc2UoKSB7XG4gICAgLy8gY29uc29sZS5sb2coYG9uTWVudUNsb3NlKClgKVxuICAgIHNldFN0YXRlKHsgdXJsRXJyb3I6IG51bGwgfSlcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbGFuZ3VhZ2VJZF8gPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5sYW5ndWFnZUlkXG4gIGNvbnN0IGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2UoeyBsYW5ndWFnZUlkOiBsYW5ndWFnZUlkXyB9KVxuICBjb25zdCBkaXJlY3Rpb24gPSAobGFuZ3VhZ2U/LmRpcmVjdGlvbikgfHwgJ2x0cidcbiAgY29uc3QgX3JlZmVyZW5jZSA9IGN1cnJlbnRSZWZlcmVuY2UgfHwgcmVmZXJlbmNlXG5cbiAgY29uc3QgaXNIZWJyZXcgPSAobGFuZ3VhZ2VJZF8gPT09ICdoYm8nKVxuICBjb25zdCBmb250RmFjdG9yID0gaXNIZWJyZXcgPyAxLjQgOiAxIC8vIHdlIGF1dG9tYXRpY2FsbHkgc2NhbGUgdXAgZm9udCBzaXplIGZvciBIZWJyZXdcbiAgY29uc3Qgc2NhbGVkRm9udFNpemUgPSBmb250U2l6ZSAqIGZvbnRGYWN0b3JcblxuICBjb25zdCBpdGVtcyA9IG51bGxcbiAgY29uc3Qge1xuICAgIHN0YXRlOiB7XG4gICAgICBoZWFkZXJzLCBmaWx0ZXJzLCBpdGVtSW5kZXgsIG1hcmtkb3duVmlldyxcbiAgICB9LFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIHNldEZpbHRlcnMsIHNldEl0ZW1JbmRleCwgc2V0TWFya2Rvd25WaWV3LFxuICAgIH0sXG4gIH0gPSB1c2VDYXJkU3RhdGUoeyBpdGVtcyB9KVxuXG4gIGNvbnN0IHJlZlN0eWxlID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgIGZvbnRGYW1pbHk6ICdOb3RvIFNhbnMnLFxuICAgIGZvbnRTaXplOiBgJHtNYXRoLnJvdW5kKHNjYWxlZEZvbnRTaXplICogMC45KX0lYCxcbiAgfSksIFtzY2FsZWRGb250U2l6ZV0pXG5cbiAgY29uc3QgY29udGVudFN0eWxlID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgIGZvbnRGYW1pbHk6ICdOb3RvIFNhbnMnLFxuICAgIGZvbnRTaXplOiBgJHtzY2FsZWRGb250U2l6ZX0lYCxcbiAgfSksIFtzY2FsZWRGb250U2l6ZV0pXG5cbiAgY29uc3Qgc2NyaXB0dXJlTGFiZWwgPSA8VGl0bGU+e3NjcmlwdHVyZVRpdGxlfTwvVGl0bGU+XG4gIGxldCBkaXNhYmxlV29yZFBvcG92ZXJfID0gZGlzYWJsZVdvcmRQb3BvdmVyXG4gIGNvbnN0IHVzaW5nT3JpZ2luYWxCaWJsZSA9IGlzT3JpZ2luYWxCaWJsZShzY3JpcHR1cmVDb25maWdbJ3Jlc291cmNlJ10/LnByb2plY3RJZClcblxuICBpZiAoZGlzYWJsZVdvcmRQb3BvdmVyID09PSB1bmRlZmluZWQpIHsgLy8gaWYgbm90IHNwZWNpZmllZCwgdGhlbiBkZXRlcm1pbmUgaWYgb3JpZ2luYWwgbGFuZ3VhZ2UgcmVzb3VyY2VcbiAgICBkaXNhYmxlV29yZFBvcG92ZXJfID0gIXVzaW5nT3JpZ2luYWxCaWJsZVxuICB9XG5cbiAgY29uc3QgZW5hYmxlRWRpdCA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgY29uc3QgZW5hYmxlQWxpZ25tZW50ID0gIXVzaW5nT3JpZ2luYWxCaWJsZVxuICBjb25zdCBvcmlnaW5hbFJlcG9VcmwgPSBpc05ld1Rlc3RhbWVudCA/IGdyZWVrUmVwb1VybCA6IGhlYnJld1JlcG9VcmxcbiAgY29uc3Qgc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyA9IHtcbiAgICBhdXRoZW50aWNhdGlvbjogY2FuVXNlRWRpdEJyYW5jaCA/IGF1dGhlbnRpY2F0aW9uIDogbnVsbCxcbiAgICBib29rSW5kZXgsXG4gICAgY3VycmVudFZlcnNlUmVmOiBfcmVmZXJlbmNlLFxuICAgIGVuYWJsZUVkaXQsXG4gICAgZW5hYmxlQWxpZ25tZW50LFxuICAgIGh0dHBDb25maWcsXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlzTmV3VGVzdGFtZW50LFxuICAgIGxvZ2dlZEluVXNlcjogY2FuVXNlRWRpdEJyYW5jaCA/IGxvZ2dlZEluVXNlciA6IG51bGwsXG4gICAgb3JpZ2luYWxMYW5ndWFnZU93bmVyLFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcmlnaW5hbFJlcG9VcmwsXG4gICAgc2NyaXB0dXJlQ29uZmlnLFxuICAgIHNjcmlwdHVyZVNldHRpbmdzLFxuICAgIHN0YXJ0RWRpdEJyYW5jaCxcbiAgICBzZXRTYXZlZENoYW5nZXM6IF9zZXRTYXZlZENoYW5nZXMsXG4gICAgc291cmNlTGFuZ3VhZ2U6IGlzTlRfID8gTlRfT1JJR19MQU5HIDogT1RfT1JJR19MQU5HLFxuICAgIHRhcmdldExhbmd1YWdlOiBsYW5ndWFnZSxcbiAgICB0aXRsZTogc2NyaXB0dXJlVGl0bGUsXG4gICAgd29ya2luZ1Jlc291cmNlQnJhbmNoOiByZWYsXG4gIH1cblxuICAvKipcbiAgICogdGhpcyBnZXRzIGNhbGxlZCB3aGVuZXZlciBhIHNjcmlwdHVyZSBwYW5lIGhhcyBhIGNoYW5nZSBpbiBzYXZlIHN0YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50SW5kZXhcbiAgICogQHBhcmFtIHtib29sZWFufSBzYXZlZFxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBnZXRDaGFuZ2VzIC0gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgdXNlciBjbGlja3Mgc2F2ZSBidXR0b25cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2xlYXJDaGFuZ2VzIC0gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgc2F2ZSBoYXMgY29tcGxldGVkXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdGF0ZSAtIGN1cnJlbnQgc3RhdGUgb2Ygd29yZCBhbGlnbm1lbnQvZWRpdFxuICAgKi9cbiAgZnVuY3Rpb24gX3NldFNhdmVkQ2hhbmdlcyhjdXJyZW50SW5kZXgsIHNhdmVkLCB7IGdldENoYW5nZXMgPSBudWxsLCBjbGVhckNoYW5nZXMgPSBudWxsLCBzdGF0ZSA9IG51bGwgfSkge1xuICAgIGNvbnN0IF91bnNhdmVkQ2hhbmdlc0xpc3QgPSB7IC4uLnVuc2F2ZWRDaGFuZ2VzTGlzdCB9XG5cbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgIGlmIChfdW5zYXZlZENoYW5nZXNMaXN0Lmhhc093blByb3BlcnR5KGN1cnJlbnRJbmRleCkpIHtcbiAgICAgICAgZGVsZXRlIF91bnNhdmVkQ2hhbmdlc0xpc3RbY3VycmVudEluZGV4XVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBfdW5zYXZlZENoYW5nZXNMaXN0W2N1cnJlbnRJbmRleF0gPSB7IGdldENoYW5nZXMsIGNsZWFyQ2hhbmdlcywgc3RhdGUgfSAvLyB1cGRhdGUgd2l0aCBsYXRlc3RcbiAgICB9XG5cbiAgICBjb25zdCBfaGF2ZVVuc2F2ZWRDaGFuZ2VzID0gISFPYmplY3Qua2V5cyhfdW5zYXZlZENoYW5nZXNMaXN0KS5sZW5ndGhcblxuICAgIGlmIChoYXZlVW5zYXZlZENoYW5nZXMgIT0gX2hhdmVVbnNhdmVkQ2hhbmdlcykge1xuICAgICAgc2V0U2F2ZWRDaGFuZ2VzICYmIHNldFNhdmVkQ2hhbmdlcyhyZXNvdXJjZUlkLCAhX2hhdmVVbnNhdmVkQ2hhbmdlcylcbiAgICAgIHNldFN0YXRlKHsgaGF2ZVVuc2F2ZWRDaGFuZ2VzOiBfaGF2ZVVuc2F2ZWRDaGFuZ2VzIH0pXG4gICAgfVxuXG4gICAgaWYgKCFpc0VxdWFsKF91bnNhdmVkQ2hhbmdlc0xpc3QsIHVuc2F2ZWRDaGFuZ2VzTGlzdCkpIHtcbiAgICAgIHNldFN0YXRlKHsgdW5zYXZlZENoYW5nZXNMaXN0OiBfdW5zYXZlZENoYW5nZXNMaXN0IH0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHNlYXJjaCBjaGFwdGVyIG9yIHZlcnNlIGNodW5rIHRvIGxpbmUgdGhhdCBzdGFydHMgd2l0aCBmaW5kSXRlbVxuICAgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGZpbmRJdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGNodW5rc1xuICAgKi9cbiAgZnVuY3Rpb24gZmluZFJlZkluQXJyYXkoZmluZEl0ZW0sIGNodW5rcykge1xuICAgIGNvbnN0IHJlZl8gPSBmaW5kSXRlbSArICcnXG4gICAgY29uc3QgcmVmTGVuID0gcmVmXy5sZW5ndGhcbiAgICBjb25zdCBpbmRleCA9IGNodW5rcy5maW5kSW5kZXgoKGNodW5rLCBpZHgpID0+IHtcbiAgICAgIGlmIChpZHggPiAwKSB7XG4gICAgICAgIGlmIChjaHVuay5zdWJzdHJpbmcoMCwgcmVmTGVuKSA9PT0gcmVmXykge1xuICAgICAgICAgIGNvbnN0IG5leHRDaGFyID0gY2h1bmtbcmVmTGVuXVxuXG4gICAgICAgICAgaWYgKChuZXh0Q2hhciA+ICc5JykgfHwgKG5leHRDaGFyIDwgJzAnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0pXG4gICAgcmV0dXJuIGluZGV4XG4gIH1cblxuICBmdW5jdGlvbiBnZXRCb29rTmFtZSgpIHtcbiAgICBjb25zdCBib29rQ2FwcyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVmZXJlbmNlPy5wcm9qZWN0SWQgPyBzY3JpcHR1cmVDb25maWcucmVmZXJlbmNlLnByb2plY3RJZC50b1VwcGVyQ2FzZSgpIDogJydcbiAgICByZXR1cm4gYCR7Ym9va0luZGV4fS0ke2Jvb2tDYXBzfS51c2ZtYFxuICB9XG5cbiAgY29uc3QgZmlsZXBhdGggPSBnZXRCb29rTmFtZSgpXG5cbiAgLy8ga2VlcCB0cmFjayBvZiB2ZXJzZSBlZGl0IHN0YXRlXG4gIGNvbnN0IHtcbiAgICBlcnJvcjogc2F2ZUVycm9yLFxuICAgIGlzRXJyb3I6IGlzU2F2ZUVycm9yLFxuICAgIG9uU2F2ZUVkaXQsXG4gIH0gPSB1c2VFZGl0KHtcbiAgICBzaGEsXG4gICAgb3duZXIsXG4gICAgY29udGVudDogc2F2ZUNvbnRlbnQsXG4gICAgY29uZmlnOiB7XG4gICAgICBjYWNoZTogeyBtYXhBZ2U6IDAgfSxcbiAgICAgIC4uLmF1dGhlbnRpY2F0aW9uPy5jb25maWcsXG4gICAgICB0b2tlbjogYXV0aGVudGljYXRpb24/LnRva2VuLFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGltZW91dDogaHR0cENvbmZpZz8uc2VydmVyVGltZU91dCB8fCBodHRwQ29uZmlnPy50aW1lb3V0IHx8IDEwMDAwLFxuICAgICAgc2VydmVyLFxuICAgIH0sXG4gICAgYXV0aG9yOiBsb2dnZWRJblVzZXIsXG4gICAgdG9rZW46IGF1dGhlbnRpY2F0aW9uPy50b2tlbixcbiAgICBicmFuY2g6IHdvcmtpbmdSZXNvdXJjZUJyYW5jaCxcbiAgICBmaWxlcGF0aCxcbiAgICByZXBvLFxuICB9KVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHdoZW4gd2UgZ2V0IGEgc2F2ZSBzYXZlRXJyb3JcbiAgICBpZiAoc2F2ZUVycm9yICYmIGlzU2F2ZUVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhgc2F2ZSBlcnJvcmAsIHNhdmVFcnJvcilcbiAgICAgIC8vIG9uUmVzb3VyY2VFcnJvciAmJiBvblJlc291cmNlRXJyb3IobnVsbCwgZmFsc2UsIG51bGwsIGBFcnJvciBzYXZpbmcgJHtsYW5ndWFnZUlkX31fJHtyZXNvdXJjZUlkfSAke3NhdmVFcnJvcn1gLCB0cnVlKVxuICAgIH1cbiAgfSwgW3NhdmVFcnJvciwgaXNTYXZlRXJyb3JdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHdoZW4gc3RhcnRTYXZlIGdvZXMgdHJ1ZSwgc2F2ZSBlZGl0cyB0byB1c2VyIGJyYW5jaCBhbmQgdGhlbiBjbGVhciBzdGFydFNhdmVcbiAgICBjb25zdCBfc2F2ZUVkaXQgPSBhc3luYyAoKSA9PiB7IC8vIGJlZ2luIHVwbG9hZGluZyBuZXcgVVNGTVxuICAgICAgY29uc29sZS5pbmZvKGBzYXZlQ2hhbmdlc1RvQ2xvdWQoKSAtIFVzaW5nIHNoYTogJHtzaGF9YClcbiAgICAgIGF3YWl0IG9uU2F2ZUVkaXQodXNlckVkaXRCcmFuY2hOYW1lKS50aGVuKChzdWNjZXNzKSA9PiB7IC8vIHB1c2ggY2hhbmdlZCB0byBzZXJ2ZXJcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBzYXZlIHNjcmlwdHVyZSBlZGl0cyBzdWNjZXNzYClcbiAgICAgICAgICBjb25zdCB1bnNhdmVkQ2FyZEluZGljZXMgPSBPYmplY3Qua2V5cyh1bnNhdmVkQ2hhbmdlc0xpc3QpXG5cbiAgICAgICAgICBpZiAodW5zYXZlZENhcmRJbmRpY2VzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2FyZEluZGV4IG9mIHVuc2F2ZWRDYXJkSW5kaWNlcykge1xuICAgICAgICAgICAgICBjb25zdCB7IGNsZWFyQ2hhbmdlcyB9ID0gdW5zYXZlZENoYW5nZXNMaXN0W2NhcmRJbmRleF1cbiAgICAgICAgICAgICAgY2xlYXJDaGFuZ2VzICYmIGNsZWFyQ2hhbmdlcygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc29sZS5pbmZvKCdzYXZlQ2hhbmdlc1RvQ2xvdWQoKSAtIFJlbG9hZGluZyByZXNvdXJjZScpXG4gICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgc3RhcnRTYXZlOiBmYWxzZSxcbiAgICAgICAgICAgIHJlYWR5Rm9yRmV0Y2g6IHRydWUsXG4gICAgICAgICAgICByZWY6IHVzZXJFZGl0QnJhbmNoTmFtZSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGRlbGF5KDUwMCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBzY3JpcHR1cmVDb25maWc/LnJlbG9hZFJlc291cmNlKHNoYSlcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3NhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gc2F2aW5nIGNoYW5nZWQgc2NyaXB0dXJlIGZhaWxlZCcpXG4gICAgICAgICAgc2V0U3RhdGUoeyBzdGFydFNhdmU6IGZhbHNlIH0pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0U2F2ZSkge1xuICAgICAgaWYgKCFlZGl0QnJhbmNoUmVhZHkpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGVkaXQgYnJhbmNoIG5vdCB5ZXQgY3JlYXRlZGApXG4gICAgICB9IGVsc2UgaWYgKCFzaGEpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIHNhdmUgc2hhIG5vdCB5ZXQgcmVhZHlgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGNhbGxpbmcgX3NhdmVFZGl0KClgKVxuICAgICAgICBfc2F2ZUVkaXQoKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3N0YXJ0U2F2ZSwgZWRpdEJyYW5jaFJlYWR5LCBzaGFdKVxuXG4gIC8qKlxuICAgKiBjb252ZXJ0IHVwZGF0ZWRWZXJzZU9iamVjdHMgdG8gVVNGTSBhbmQgbWVyZ2UgaW50byB0aGUgYmlibGVVc2ZtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiaWJsZVVzZm0gLSBVU0ZNIG9mIGJpYmxlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWYgLSByZWZlcmVuY2Ugb2YgdmVyc2UgdG8gbWVyZ2UgaW5cbiAgICogQHBhcmFtIHtvYmplY3RbXX0gdXBkYXRlZFZlcnNlT2JqZWN0cyAtIG5ldyB2ZXJzZSBpbiB2ZXJzZU9iamVjdCBmb3JtYXRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNhcmROdW1cbiAgICovXG4gIGZ1bmN0aW9uIG1lcmdlVmVyc2VPYmplY3RzSW50b0JpYmxlVXNmbShiaWJsZVVzZm0sIHJlZiwgdXBkYXRlZFZlcnNlT2JqZWN0cywgY2FyZE51bTogbnVtYmVyKSB7XG4gICAgbGV0IG5ld1VzZm1cbiAgICBjb25zdCBjaGFwdGVyQ2h1bmtzID0gYmlibGVVc2ZtPy5zcGxpdCgnXFxcXGMgJylcbiAgICBjb25zdCBjaGFwdGVySW5kZXggPSBmaW5kUmVmSW5BcnJheShyZWY/LmNoYXB0ZXIsIGNoYXB0ZXJDaHVua3MpXG5cbiAgICBpZiAoY2hhcHRlckluZGV4ID49IDApIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRDaGFwdGVyID0gY2hhcHRlckNodW5rc1tjaGFwdGVySW5kZXhdXG4gICAgICBjb25zdCB2ZXJzZUNodW5rcyA9IGN1cnJlbnRDaGFwdGVyLnNwbGl0KCdcXFxcdiAnKVxuICAgICAgY29uc3QgdmVyc2VJbmRleCA9IGZpbmRSZWZJbkFycmF5KHJlZj8udmVyc2UsIHZlcnNlQ2h1bmtzKVxuXG4gICAgICBpZiAodmVyc2VJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZlcnNlVXNmbSA9IFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMuY29udmVydFZlcnNlRGF0YVRvVVNGTSh1cGRhdGVkVmVyc2VPYmplY3RzKVxuICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkKCR7Y2FyZE51bX0pIC0gbmV3IFVTRk0gZm9yIGNhcmQ6fSAtICR7bmV3VmVyc2VVc2ZtLnN1YnN0cmluZygwLCAxMDApfWApXG4gICAgICAgIGNvbnN0IG9sZFZlcnNlID0gdmVyc2VDaHVua3NbdmVyc2VJbmRleF1cbiAgICAgICAgY29uc3QgdmVyc2VOdW1MZW4gPSAocmVmPy52ZXJzZSArICcnKS5sZW5ndGhcbiAgICAgICAgdmVyc2VDaHVua3NbdmVyc2VJbmRleF0gPSBvbGRWZXJzZS5zdWJzdHJpbmcoMCwgdmVyc2VOdW1MZW4gKyAxKSArIG5ld1ZlcnNlVXNmbVxuICAgICAgICBjb25zdCBuZXdDaGFwdGVyID0gdmVyc2VDaHVua3Muam9pbignXFxcXHYgJylcbiAgICAgICAgY2hhcHRlckNodW5rc1tjaGFwdGVySW5kZXhdID0gbmV3Q2hhcHRlclxuICAgICAgICBuZXdVc2ZtID0gY2hhcHRlckNodW5rcy5qb2luKCdcXFxcYyAnKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3VXNmbVxuICB9XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gZm9yIGVhY2ggdW5zYXZlZCBjaGFuZ2UsIGNhbGwgaW50byBzY3JpcHR1cmVQYW5lIHRvIGdldCBsYXRlc3QgY2hhbmdlcyBmb3IgdmVyc2UgdG8gc2F2ZVxuICAgIGlmIChzYXZlQ2xpY2tlZCkge1xuICAgICAgbGV0IGNyZWF0ZUVkaXRCcmFuY2ggPSAhX3VzaW5nVXNlckJyYW5jaFxuXG4gICAgICBpZiAoIWNyZWF0ZUVkaXRCcmFuY2gpIHsgLy8gaWYgYWxyZWFkeSB1c2luZyB0aGUgdXNlciBicmFuY2hcbiAgICAgICAgaWYgKHdvcmtpbmdSZXNvdXJjZUJyYW5jaCAhPT0gdXNlckVkaXRCcmFuY2hOYW1lKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBzYXZlQ2hhbmdlc1RvQ2xvdWQgLSBzdGF0ZSBjb25mbGljdCAtIHNob3VsZCBiZSBpbiB1c2VyIGJyYW5jaCAke3VzZXJFZGl0QnJhbmNoTmFtZX0sIGJ1dCBhY3R1YWxseSB1c2luZyAke3dvcmtpbmdSZXNvdXJjZUJyYW5jaH1gKVxuICAgICAgICAgIGNyZWF0ZUVkaXRCcmFuY2ggPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGFscmVhZHkgdXNpbmcgZWRpdCBicmFuY2g6ICR7d29ya2luZ1Jlc291cmNlQnJhbmNofWApXG4gICAgICAgICAgc2V0U3RhdGUoeyBlZGl0QnJhbmNoUmVhZHk6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY3JlYXRlRWRpdEJyYW5jaCkgeyAvLyBpZiBub3QgdXNpbmcgdGhlIHVzZXIgYnJhbmNoLCBjcmVhdGUgaXRcbiAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGNyZWF0aW5nIGVkaXQgYnJhbmNoYClcbiAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgIGVkaXRCcmFuY2hSZWFkeTogZmFsc2UsXG4gICAgICAgICAgcmVhZHlGb3JGZXRjaDogZmFsc2UsXG4gICAgICAgICAgc2hhOiBudWxsLFxuICAgICAgICB9KSAvLyB3ZSB3aWxsIG5lZWQgYSBuZXcgc2hhIGZvciBib29rL2JyYW5jaFxuICAgICAgICBzdGFydEVkaXRCcmFuY2goKS50aGVuKChicmFuY2gpID0+IHtcbiAgICAgICAgICBpZiAoYnJhbmNoKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gZWRpdCBicmFuY2ggY3JlYXRlZGApXG4gICAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGVkaXRCcmFuY2hSZWFkeTogdHJ1ZSxcbiAgICAgICAgICAgICAgcmVhZHlGb3JGZXRjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgcmVmOiBicmFuY2gsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gZmFpbGVkIHRvIGNyZWF0ZSBlZGl0IGJyYW5jaGApXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB1bnNhdmVkQ2FyZEluZGljZXMgPSBPYmplY3Qua2V5cyh1bnNhdmVkQ2hhbmdlc0xpc3QpXG5cbiAgICAgIGlmICh1bnNhdmVkQ2FyZEluZGljZXM/Lmxlbmd0aCkge1xuICAgICAgICBsZXQgYmlibGVVc2ZtID0gY29yZS5nZXRSZXNwb25zZURhdGEoc2NyaXB0dXJlQ29uZmlnPy5mZXRjaFJlc3BvbnNlKVxuICAgICAgICBsZXQgbWVyZ2VGYWlsID0gZmFsc2VcbiAgICAgICAgbGV0IGNhcmROdW0gPSAwXG5cbiAgICAgICAgZm9yIChjb25zdCBjYXJkSW5kZXggb2YgdW5zYXZlZENhcmRJbmRpY2VzKSB7XG4gICAgICAgICAgY2FyZE51bSA9IHBhcnNlSW50KGNhcmRJbmRleClcbiAgICAgICAgICBjb25zdCB7IGdldENoYW5nZXMsIHN0YXRlIH0gPSB1bnNhdmVkQ2hhbmdlc0xpc3RbY2FyZE51bV1cblxuICAgICAgICAgIGlmIChnZXRDaGFuZ2VzKSB7XG4gICAgICAgICAgICBsZXQgbmV3VXNmbVxuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICByZWYsXG4gICAgICAgICAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHMsXG4gICAgICAgICAgICB9ID0gZ2V0Q2hhbmdlcyhzdGF0ZSlcblxuICAgICAgICAgICAgaWYgKHVwZGF0ZWRWZXJzZU9iamVjdHMgJiYgYmlibGVVc2ZtKSB7IC8vIGp1c3QgcmVwbGFjZSB2ZXJzZVxuICAgICAgICAgICAgICBuZXdVc2ZtID0gbWVyZ2VWZXJzZU9iamVjdHNJbnRvQmlibGVVc2ZtKGJpYmxlVXNmbSwgcmVmLCB1cGRhdGVkVmVyc2VPYmplY3RzLCBjYXJkTnVtKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmV3VXNmbSkge1xuICAgICAgICAgICAgICBiaWJsZVVzZm0gPSBuZXdVc2ZtXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtZXJnZUZhaWwgPSB0cnVlXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1lcmdlRmFpbCkgeyAvLyBpZiB3ZSBmYWlsZWQgdG8gbWVyZ2UsIGZhbGxiYWNrIHRvIGJydXRlIGZvcmNlIHZlcnNlIG9iamVjdHMgdG8gVVNGTVxuICAgICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQoJHtjYXJkTnVtfSkgLSB2ZXJzZSBub3QgZm91bmQsIGZhbGxpbmcgYmFjayB0byBpbnNlcnRpbmcgdmVyc2Ugb2JqZWN0YClcbiAgICAgICAgICBsZXQgbmV3Qm9va0pzb25cblxuICAgICAgICAgIGZvciAoY29uc3QgY2FyZEluZGV4IG9mIHVuc2F2ZWRDYXJkSW5kaWNlcykge1xuICAgICAgICAgICAgY29uc3QgY2FyZE51bSA9IHBhcnNlSW50KGNhcmRJbmRleClcbiAgICAgICAgICAgIGNvbnN0IHsgZ2V0Q2hhbmdlcywgc3RhdGUgfSA9IHVuc2F2ZWRDaGFuZ2VzTGlzdFtjYXJkTnVtXVxuXG4gICAgICAgICAgICBpZiAoZ2V0Q2hhbmdlcykge1xuICAgICAgICAgICAgICBsZXQgbmV3VXNmbVxuICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgbmV3VmVyc2VUZXh0LFxuICAgICAgICAgICAgICAgIHJlZixcbiAgICAgICAgICAgICAgICB1cGRhdGVkVmVyc2VPYmplY3RzLFxuICAgICAgICAgICAgICB9ID0gZ2V0Q2hhbmdlcyhzdGF0ZSlcblxuICAgICAgICAgICAgICBpZiAodXBkYXRlZFZlcnNlT2JqZWN0cyAmJiAhbmV3VXNmbSkge1xuICAgICAgICAgICAgICAgIGxldCB0YXJnZXRWZXJzZU9iamVjdHNfID0gbnVsbFxuXG4gICAgICAgICAgICAgICAgaWYgKHJlZikge1xuICAgICAgICAgICAgICAgICAgaWYgKG5ld1ZlcnNlVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHRhcmdldFZlcnNlT2JqZWN0cyB9ID0gQWxpZ25tZW50SGVscGVycy51cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZSh1cGRhdGVkVmVyc2VPYmplY3RzLCBuZXdWZXJzZVRleHQpXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFZlcnNlT2JqZWN0c18gPSB0YXJnZXRWZXJzZU9iamVjdHNcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFZlcnNlT2JqZWN0c18gPSB1cGRhdGVkVmVyc2VPYmplY3RzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBuZXdCb29rSnNvbiA9IHRhcmdldFZlcnNlT2JqZWN0c18gJiYgc2NyaXB0dXJlQ29uZmlnPy51cGRhdGVWZXJzZShyZWYuY2hhcHRlciwgcmVmLnZlcnNlLCB7IHZlcnNlT2JqZWN0czogdGFyZ2V0VmVyc2VPYmplY3RzXyB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJpYmxlVXNmbSA9IHVzZm1qcy50b1VTRk0obmV3Qm9va0pzb24sIHsgZm9yY2VkTmV3TGluZXM6IHRydWUgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQoKSAtIHNhdmluZyBuZXcgVVNGTTogJHtiaWJsZVVzZm0uc3Vic3RyaW5nKDAsIDEwMCl9Li4uYClcbiAgICAgICAgc2V0U3RhdGUoeyBzYXZlQ29udGVudDogYmlibGVVc2ZtLCBzdGFydFNhdmU6IHRydWUsIHNhdmVDbGlja2VkOiBmYWxzZSB9KVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3NhdmVDbGlja2VkXSlcblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IHsgY2hhcHRlciwgdmVyc2UgfSA9IF9yZWZlcmVuY2UgfHwge31cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IF92ZXJzZXNGb3JSZWYgPSBzY3JpcHR1cmVDb25maWc/LnZlcnNlc0ZvclJlZlxuICAgIGxldCBuZXdTZWxlY3Rpb25zID0gbmV3IE1hcCgpXG4gICAgbGV0IHVwZGF0ZVNlbGVjdGlvbnMgPSBmYWxzZVxuICAgIGNvbnN0IF9tYXAgPSBuZXdTZWxlY3Rpb25zXG4gICAgY29uc3Qgb3JpZ2luYWxCb29rSWQgPSBvcmlnaW5hbFNjcmlwdHVyZUJvb2tPYmplY3RzPy5ib29rSWRcbiAgICBjb25zdCBib29rVmVyc2VPYmplY3QgPSBvcmlnaW5hbFNjcmlwdHVyZUJvb2tPYmplY3RzPy5jaGFwdGVyc1xuICAgIGxldCBuZXdTZWxlY3RlZFF1b3RlID0gbnVsbFxuXG4gICAgLy8gaWYgd2UgaGF2ZSBldmVyeXRoaW5nIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHNlbGVjdGlvbnNcbiAgICBpZiAoX3ZlcnNlc0ZvclJlZj8ubGVuZ3RoICYmXG4gICAgICBib29rVmVyc2VPYmplY3QgJiZcbiAgICAgIChib29rSWQgPT09IG9yaWdpbmFsQm9va0lkKSAmJlxuICAgICAgYm9va1ZlcnNlT2JqZWN0W2NoYXB0ZXJdICYmIC8vIHdlIG5lZWQgdG8gaGF2ZSBkYXRhIGZvciBjaGFwdGVyXG4gICAgICBzZWxlY3RlZFF1b3RlPy5xdW90ZVxuICAgICkge1xuICAgICAgLy8gaWYgcXVvdGUgaXMgZGlmZmVyZW50IHRoYW4gbGFzdFxuICAgICAgaWYgKCFpc0VxdWFsKGxhc3RTZWxlY3RlZFF1b3RlLCBzZWxlY3RlZFF1b3RlKSB8fFxuICAgICAgICAhaXNFcXVhbCh2ZXJzZXNGb3JSZWYsIF92ZXJzZXNGb3JSZWYpKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsVmVyc2VzID0ge31cbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0ZSA9IHt9IC8vIGtlZXAgdHJhY2sgb2YgdmVyc2Ugc3Vic3RpdHV0aW9uc1xuICAgICAgICBsZXQgc3RhcnRWZXJzZSA9IF92ZXJzZXNGb3JSZWZbMF0udmVyc2VcblxuICAgICAgICBpZiAodHlwZW9mIHN0YXJ0VmVyc2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgc3RhcnRWZXJzZSA9IHBhcnNlSW50KHN0YXJ0VmVyc2UpXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGFzdFZlcnNlID0gc3RhcnRWZXJzZVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gX3ZlcnNlc0ZvclJlZi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBjb25zdCB2ZXJzZVJlZiA9IF92ZXJzZXNGb3JSZWZbaV1cbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBjaGFwdGVyLFxuICAgICAgICAgICAgdmVyc2UsXG4gICAgICAgICAgfSA9IHZlcnNlUmVmXG4gICAgICAgICAgLy8gVFJJQ0tZIC0gd2UgcmVtYXAgdmVyc2VzIGluIHJlZmVyZW5jZSByYW5nZSB0byBhIGxpbmVhciBzZXJpZXMgb2YgdmVyc2VzIHNvIHZlcnNlIHNwYW5zIGRvbid0IGNob2tlIGdldFF1b3RlTWF0Y2hlc0luQm9va1JlZlxuICAgICAgICAgIGxldCBfdmVyc2UgPSBzdGFydFZlcnNlICsgaVxuICAgICAgICAgIGxhc3RWZXJzZSA9IF92ZXJzZVxuICAgICAgICAgIHN1YnN0aXR1dGVbYCR7Y2hhcHRlcn06JHtfdmVyc2V9YF0gPSBgJHtjaGFwdGVyfToke3ZlcnNlfWBcblxuICAgICAgICAgIGlmICghb3JpZ2luYWxWZXJzZXNbY2hhcHRlcl0pIHtcbiAgICAgICAgICAgIG9yaWdpbmFsVmVyc2VzW2NoYXB0ZXJdID0ge31cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgdmVyc2VPYmplY3RzID0gW11cblxuICAgICAgICAgIGlmICgodHlwZW9mIHZlcnNlID09PSAnc3RyaW5nJykgJiYgKHZlcnNlLmluY2x1ZGVzKCctJykpKSB7XG4gICAgICAgICAgICBjb25zdCB2ZXJzZXMgPSBnZXRWZXJzZXMoYm9va1ZlcnNlT2JqZWN0LCBgJHtjaGFwdGVyfToke3ZlcnNlfWApXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdmVyc2VJdGVtIG9mIHZlcnNlcykge1xuICAgICAgICAgICAgICBjb25zdCB2byA9IHZlcnNlSXRlbS52ZXJzZURhdGEudmVyc2VPYmplY3RzXG4gICAgICAgICAgICAgIHZlcnNlT2JqZWN0cyA9IHZlcnNlT2JqZWN0cy5jb25jYXQodm8pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZlcnNlT2JqZWN0cyA9IGJvb2tWZXJzZU9iamVjdFtjaGFwdGVyXVt2ZXJzZV0/LnZlcnNlT2JqZWN0c1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2ZXJzZU9iamVjdHMpIHtcbiAgICAgICAgICAgIHZlcnNlT2JqZWN0cyA9IGNsZWFudXBWZXJzZU9iamVjdHModmVyc2VPYmplY3RzKVxuICAgICAgICAgICAgb3JpZ2luYWxWZXJzZXNbY2hhcHRlcl1bX3ZlcnNlXSA9IHsgdmVyc2VPYmplY3RzIH1cbiAgICAgICAgICAgIF9tYXAuc2V0KGAke2NoYXB0ZXJ9OiR7dmVyc2V9YCwgdmVyc2VPYmplY3RzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNyZWF0ZSBuZXcgcmVmZXJlbmNlIHJhbmdlIGZvciBuZXcgbGluZWFyIHZlcnNlIHJhbmdlXG4gICAgICAgIGNvbnN0IFtjaGFwdGVyXSA9IHNlbGVjdGVkUXVvdGU/LnJlZmVyZW5jZT8uc3BsaXQoJzonKVxuICAgICAgICBsZXQgc3ViUmVmID0gYCR7Y2hhcHRlcn06JHtzdGFydFZlcnNlfWBcblxuICAgICAgICBpZiAobGFzdFZlcnNlICE9IHN0YXJ0VmVyc2UpIHtcbiAgICAgICAgICBzdWJSZWYgKz0gYC0ke2xhc3RWZXJzZX1gXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBxdW90ZU1hdGNoZXMgPSBnZXRRdW90ZU1hdGNoZXNJbkJvb2tSZWYoe1xuICAgICAgICAgIGJvb2tPYmplY3Q6IG9yaWdpbmFsVmVyc2VzLFxuICAgICAgICAgIHJlZjogc3ViUmVmLFxuICAgICAgICAgIHF1b3RlOiBzZWxlY3RlZFF1b3RlPy5xdW90ZSxcbiAgICAgICAgICBvY2N1cnJlbmNlOiBzZWxlY3RlZFF1b3RlPy5vY2N1cnJlbmNlLFxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbnMgPSBuZXcgTWFwKClcblxuICAgICAgICBpZiAocXVvdGVNYXRjaGVzPy5zaXplKSB7XG4gICAgICAgICAgcXVvdGVNYXRjaGVzLmZvckVhY2goKHdvcmRzLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IF9rZXkgPSBzdWJzdGl0dXRlW2tleV1cblxuICAgICAgICAgICAgc2VsZWN0aW9ucy5zZXQoX2tleSwgd29yZHMubWFwKHdvcmQgPT4gKFxuICAgICAgICAgICAgICB7IC4uLndvcmQsIHRleHQ6IGNvcmUubm9ybWFsaXplU3RyaW5nKHdvcmQudGV4dCkgfVxuICAgICAgICAgICAgKSkpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBuZXdTZWxlY3Rpb25zID0gc2VsZWN0aW9uc1xuICAgICAgICBuZXdTZWxlY3RlZFF1b3RlID0gc2VsZWN0ZWRRdW90ZVxuICAgICAgICB1cGRhdGVTZWxlY3Rpb25zID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG5ld1N0YXRlOiBhbnkgPSB7fVxuXG4gICAgLy8gdXBkYXRlIHN0YXRlcyB0aGF0IGhhdmUgY2hhbmdlZFxuICAgIGlmICghYXJlTWFwc1RoZVNhbWUodmVyc2VPYmplY3RzTWFwLCBfbWFwKSkge1xuICAgICAgbmV3U3RhdGUudmVyc2VPYmplY3RzTWFwID0gX21hcFxuICAgIH1cblxuICAgIGNvbnN0IGJvb2tzTm90U2FtZSA9IHJlZmVyZW5jZT8ucHJvamVjdElkICE9PSBjdXJyZW50UmVmZXJlbmNlPy5wcm9qZWN0SWRcblxuICAgIGlmIChib29rc05vdFNhbWUgfHwgIWFyZVZlcnNlc1NhbWUodmVyc2VzRm9yUmVmLCBfdmVyc2VzRm9yUmVmKSkge1xuICAgICAgbmV3U3RhdGUudmVyc2VzRm9yUmVmID0gX3ZlcnNlc0ZvclJlZlxuICAgICAgbmV3U3RhdGUubGFzdFNlbGVjdGVkUXVvdGUgPSBuZXdTZWxlY3RlZFF1b3RlXG4gICAgICBuZXdTdGF0ZS5zZWxlY3Rpb25zID0gbmV3U2VsZWN0aW9uc1xuICAgIH1cblxuICAgIGlmIChuZXdTZWxlY3RlZFF1b3RlKSB7XG4gICAgICBuZXdTdGF0ZS5sYXN0U2VsZWN0ZWRRdW90ZSA9IG5ld1NlbGVjdGVkUXVvdGVcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlU2VsZWN0aW9ucykge1xuICAgICAgaWYgKCFhcmVNYXBzVGhlU2FtZShzZWxlY3Rpb25zIHx8IChuZXcgTWFwKCkpLCBuZXdTZWxlY3Rpb25zKSkge1xuICAgICAgICBuZXdTdGF0ZS5zZWxlY3Rpb25zID0gbmV3U2VsZWN0aW9uc1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChPYmplY3Qua2V5cyhuZXdTdGF0ZSkubGVuZ3RoKSB7XG4gICAgICBzZXRTdGF0ZShuZXdTdGF0ZSlcbiAgICB9XG4gIH0sIFtvd25lciwgcmVzb3VyY2VJZCwgYm9va0lkLCBsYW5ndWFnZUlkXywgc2NyaXB0dXJlQ29uZmlnPy52ZXJzZXNGb3JSZWYsIG9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHMsIHNlbGVjdGVkUXVvdGVdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIGNsZWFyIHNldHRpbmdzIG9uIHZlcnNlIGNoYW5nZVxuICAgIHNldFN0YXRlKHtcbiAgICAgIHZlcnNlc0FsaWdubWVudFN0YXR1czogbnVsbCxcbiAgICAgIHVuc2F2ZWRDaGFuZ2VzTGlzdDoge30sXG4gICAgICBoYXZlVW5zYXZlZENoYW5nZXM6IGZhbHNlLFxuICAgIH0pXG4gIH0sIFtfcmVmZXJlbmNlXSlcblxuICBjb25zdCB1cGRhdGVWZXJzZXNBbGlnbm1lbnRTdGF0dXMgPSAocmVmZXJlbmNlLCBhbGlnbmVkKSA9PiB7XG4gICAgc2V0U3RhdGVfKHByZXZTdGF0ZSA9PiAoe1xuICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgdmVyc2VzQWxpZ25tZW50U3RhdHVzOiB7IC4uLnByZXZTdGF0ZS52ZXJzZXNBbGlnbm1lbnRTdGF0dXMsIFtgJHtyZWZlcmVuY2UuY2hhcHRlcn06JHtyZWZlcmVuY2UudmVyc2V9YF06IGFsaWduZWQgfSxcbiAgICB9KSlcbiAgfVxuXG4gIGxldCBfdmVyc2VzRm9yUmVmID0gc2NyaXB0dXJlQ29uZmlnPy52ZXJzZXNGb3JSZWZcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChfdmVyc2VzRm9yUmVmPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHsgcmVmZXJlbmNlLCByZXNvdXJjZUxpbmsgfSA9IHNjcmlwdHVyZUNvbmZpZyB8fCB7fVxuICAgICAgY29uc29sZS5sb2coYFNjcmlwdHVyZUNhcmQuX3ZlcnNlc0ZvclJlZiBjaGFuZ2VkYCwgeyByZWZlcmVuY2UsIHJlc291cmNlTGluayB9KVxuICAgIH1cbiAgfSwgW192ZXJzZXNGb3JSZWZdKVxuXG4gIGlmICghX3ZlcnNlc0ZvclJlZj8ubGVuZ3RoKSB7IC8vIGlmIGVtcHR5IG9mIHJlZmVyZW5jZXMsIGNyZWF0ZSBzaW5nbGUgZW1wdHkgcmVmZXJlbmNlXG4gICAgX3ZlcnNlc0ZvclJlZiA9IFt7IC4uLnJlZmVyZW5jZSB9XVxuICB9XG5cbiAgY29uc3QgcmVuZGVyZWRTY3JpcHR1cmVQYW5lcyA9IF92ZXJzZXNGb3JSZWY/Lm1hcCgoX2N1cnJlbnRWZXJzZURhdGEsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaW5pdGlhbFZlcnNlT2JqZWN0cyA9IF9jdXJyZW50VmVyc2VEYXRhPy52ZXJzZURhdGE/LnZlcnNlT2JqZWN0cyB8fCBbXVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCB7IGNoYXB0ZXIsIHZlcnNlIH0gPSBfY3VycmVudFZlcnNlRGF0YSB8fCB7fVxuICAgIGNvbnN0IHByb2plY3RJZCA9IGN1cnJlbnRSZWZlcmVuY2U/LnByb2plY3RJZCB8fCByZWZlcmVuY2U/LnByb2plY3RJZFxuICAgIGNvbnN0IF9yZWZlcmVuY2UgPSB7XG4gICAgICAuLi5fdmVyc2VzRm9yUmVmLFxuICAgICAgY2hhcHRlcixcbiAgICAgIHZlcnNlLFxuICAgICAgcHJvamVjdElkLFxuICAgIH1cbiAgICBjb25zdCBfc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyA9IHtcbiAgICAgIC4uLnNjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWcsXG4gICAgICBjdXJyZW50SW5kZXg6IGluZGV4LFxuICAgICAgaW5pdGlhbFZlcnNlT2JqZWN0cyxcbiAgICAgIHJlZmVyZW5jZTogX3JlZmVyZW5jZSxcbiAgICAgIGlzTmV3VGVzdGFtZW50LFxuICAgIH1cblxuICAgIGxldCBpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQgPSBmYWxzZVxuXG4gICAgaWYgKHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQpIHtcbiAgICAgIGlzVmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCA9IHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQuY2hhcHRlciA9PSBjaGFwdGVyICYmIHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQudmVyc2UgPT0gdmVyc2VcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNjcmlwdHVyZVBhbmVcbiAgICAgICAgey4uLnNjcmlwdHVyZUNvbmZpZ31cbiAgICAgICAgY29udGVudFN0eWxlPXtjb250ZW50U3R5bGV9XG4gICAgICAgIGN1cnJlbnRJbmRleD17aW5kZXh9XG4gICAgICAgIGRldGVybWluaW5nQnJhbmNoPXshcmVhZHlGb3JGZXRjaH1cbiAgICAgICAgZGlyZWN0aW9uPXtkaXJlY3Rpb259XG4gICAgICAgIGRpc2FibGVXb3JkUG9wb3Zlcj17ZGlzYWJsZVdvcmRQb3BvdmVyX31cbiAgICAgICAgZm9udFNpemU9e2ZvbnRTaXplfVxuICAgICAgICBnZXRMZXhpY29uRGF0YT17Z2V0TGV4aWNvbkRhdGF9XG4gICAgICAgIGlzTlQ9e2lzTlRffVxuICAgICAgICBpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQ9e2lzVmVyc2VTZWxlY3RlZEZvckFsaWdubWVudH1cbiAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgb25BbGlnbm1lbnRGaW5pc2g9eygpID0+IHNldFN0YXRlKHsgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudDogbnVsbCB9KX1cbiAgICAgICAgb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cz17b3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0c31cbiAgICAgICAgcmVmU3R5bGU9e3JlZlN0eWxlfVxuICAgICAgICByZWZlcmVuY2U9e19yZWZlcmVuY2V9XG4gICAgICAgIHNhdmluZz17c3RhcnRTYXZlfVxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHNjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWc9e19zY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnfVxuICAgICAgICBzZXRXb3JkQWxpZ25lclN0YXR1cz17c2V0V29yZEFsaWduZXJTdGF0dXN9XG4gICAgICAgIHNlcnZlcj17c2VydmVyfVxuICAgICAgICB0cmFuc2xhdGU9e3RyYW5zbGF0ZX1cbiAgICAgICAgdXBkYXRlVmVyc2VzQWxpZ25tZW50U3RhdHVzPXt1cGRhdGVWZXJzZXNBbGlnbm1lbnRTdGF0dXN9XG4gICAgICAvPlxuICAgIClcbiAgfSlcblxuICBjb25zdCBoYW5kbGVBbGlnbkJ1dHRvbkNsaWNrID0gKCkgPT4ge1xuICAgIGlmICh2ZXJzZXNGb3JSZWY/Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHNldFN0YXRlKHsgc2hvd0FsaWdubWVudFBvcHVwOiB0cnVlIH0pXG4gICAgfSBlbHNlIGlmICh2ZXJzZXNGb3JSZWY/Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgc2V0U3RhdGUoeyB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50OiB2ZXJzZXNGb3JSZWZbMF0gfSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBvblJlbmRlclRvb2xiYXIgPSAoeyBpdGVtcyB9KSA9PiB7XG4gICAgY29uc3QgbmV3SXRlbXMgPSBbLi4uaXRlbXNdXG5cbiAgICBsZXQgYWxsVmVyc2VzQWxpZ25lZCA9IGZhbHNlXG5cbiAgICAvLyBDaGVjayBpZiBhbGwgdmFsdWVzIGluIHZlcnNlc0FsaWdubWVudFN0YXR1cyBhcmUgdHJ1ZVxuICAgIGlmICh2ZXJzZXNBbGlnbm1lbnRTdGF0dXMpIHtcbiAgICAgIGFsbFZlcnNlc0FsaWduZWQgPSBPYmplY3QudmFsdWVzKHZlcnNlc0FsaWdubWVudFN0YXR1cykuZXZlcnkoYWxpZ25TdGF0dXMgPT4gYWxpZ25TdGF0dXMgPT09IHRydWUpXG4gICAgfVxuXG4gICAgbGV0IGFsaWduSWNvbiA9IG51bGxcbiAgICBsZXQgYWxpZ25CdXR0b25UZXh0ID0gJydcblxuICAgIGlmIChhbGxWZXJzZXNBbGlnbmVkKSB7XG4gICAgICBhbGlnbkljb24gPSA8UnhMaW5rMiBpZD17YHZhbGlkX2ljb25fJHtyZXNvdXJjZUlkfWB9IGNvbG9yPScjQkJCJy8+XG4gICAgICBhbGlnbkJ1dHRvblRleHQgPSAnQWxpZ25tZW50IGlzIFZhbGlkJ1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGlnbkljb24gPSA8UnhMaW5rQnJlYWsyIGlkPXtgaW52YWxpZF9hbGlnbm1lbnRfaWNvbl8ke3Jlc291cmNlSWR9YH0gY29sb3I9JyMwMDAnLz5cbiAgICAgIGFsaWduQnV0dG9uVGV4dCA9ICdBbGlnbm1lbnQgaXMgSW52YWxpZCdcbiAgICB9XG5cbiAgICBpZiAoc2V0V29yZEFsaWduZXJTdGF0dXMgJiYgcmVzb3VyY2VJZCAhPT0gJ09SSUdJTkFMX1NPVVJDRScpIHtcbiAgICAgIG5ld0l0ZW1zLnB1c2goXG4gICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgaWQ9e2BhbGlnbm1lbnRfaWNvbl8ke3Jlc291cmNlSWR9YH1cbiAgICAgICAgICBrZXk9J2NoZWNraW5nLWJ1dHRvbidcbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVBbGlnbkJ1dHRvbkNsaWNrfVxuICAgICAgICAgIHRpdGxlPXthbGlnbkJ1dHRvblRleHR9XG4gICAgICAgICAgYXJpYS1sYWJlbD17YWxpZ25CdXR0b25UZXh0fVxuICAgICAgICAgIHN0eWxlPXt7IGN1cnNvcjogJ3BvaW50ZXInIH19XG4gICAgICAgID5cbiAgICAgICAgICB7YWxpZ25JY29ufVxuICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0l0ZW1zXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTZWxlY3Rpb25zQ29udGV4dFByb3ZpZGVyXG4gICAgICBzZWxlY3Rpb25zPXtzZWxlY3Rpb25zfVxuICAgICAgb25TZWxlY3Rpb25zPXtuZXdTZWxlY3Rpb25zID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ29uU2VsZWN0aW9ucycsIG5ld1NlbGVjdGlvbnMpXG4gICAgICB9fVxuICAgICAgcXVvdGU9e3NlbGVjdGVkUXVvdGU/LnF1b3RlfVxuICAgICAgb2NjdXJyZW5jZT17Zml4T2NjdXJyZW5jZShzZWxlY3RlZFF1b3RlPy5vY2N1cnJlbmNlKX1cbiAgICAgIHZlcnNlT2JqZWN0c01hcD17dmVyc2VPYmplY3RzTWFwfVxuICAgID5cbiAgICAgIDxDYXJkXG4gICAgICAgIGlkPXtgc2NyaXB0dXJlX2NhcmRfJHtjYXJkTnVtfWB9XG4gICAgICAgIHRpdGxlPXtzY3JpcHR1cmVMYWJlbH1cbiAgICAgICAgc2V0dGluZ3NUaXRsZT17c2NyaXB0dXJlVGl0bGUgKyAnIFNldHRpbmdzJ31cbiAgICAgICAgaXRlbXM9e2l0ZW1zfVxuICAgICAgICBjbGFzc2VzPXtjbGFzc2VzfVxuICAgICAgICBoZWFkZXJzPXtoZWFkZXJzfVxuICAgICAgICBmaWx0ZXJzPXtmaWx0ZXJzfVxuICAgICAgICBmb250U2l6ZT17Zm9udFNpemV9XG4gICAgICAgIGl0ZW1JbmRleD17aXRlbUluZGV4fVxuICAgICAgICBzZXRGaWx0ZXJzPXtzZXRGaWx0ZXJzfVxuICAgICAgICBzZXRGb250U2l6ZT17c2V0Rm9udFNpemV9XG4gICAgICAgIHNldEl0ZW1JbmRleD17c2V0SXRlbUluZGV4fVxuICAgICAgICBtYXJrZG93blZpZXc9e21hcmtkb3duVmlld31cbiAgICAgICAgc2V0TWFya2Rvd25WaWV3PXtzZXRNYXJrZG93blZpZXd9XG4gICAgICAgIGdldEN1c3RvbUNvbXBvbmVudD17Z2V0U2NyaXB0dXJlU2VsZWN0b3J9XG4gICAgICAgIGhpZGVNYXJrZG93blRvZ2dsZVxuICAgICAgICBvbk1lbnVDbG9zZT17b25NZW51Q2xvc2V9XG4gICAgICAgIG9uTWluaW1pemU9e29uTWluaW1pemUgPyAoKSA9PiBvbk1pbmltaXplKGlkKSA6IG51bGx9XG4gICAgICAgIGVkaXRhYmxlPXtlbmFibGVFZGl0IHx8IGVuYWJsZUFsaWdubWVudH1cbiAgICAgICAgc2F2ZWQ9e3N0YXJ0U2F2ZSB8fCAhaGF2ZVVuc2F2ZWRDaGFuZ2VzfVxuICAgICAgICBvblNhdmVFZGl0PXsoKSA9PiBzZXRTdGF0ZSh7IHNhdmVDbGlja2VkOiB0cnVlIH0pfVxuICAgICAgICBvblJlbmRlclRvb2xiYXI9e29uUmVuZGVyVG9vbGJhcn1cbiAgICAgID5cbiAgICAgICAgPGRpdiBpZD1cInNjcmlwdHVyZS1wYW5lLWxpc3RcIj5cbiAgICAgICAgICB7cmVuZGVyZWRTY3JpcHR1cmVQYW5lc31cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0NhcmQ+XG4gICAgICA8VmVyc2VTZWxlY3RvclBvcHVwXG4gICAgICAgIHJlc291cmNlSWQ9e3Jlc291cmNlSWR9XG4gICAgICAgIG9wZW49e3Nob3dBbGlnbm1lbnRQb3B1cH1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U3RhdGUoeyBzaG93QWxpZ25tZW50UG9wdXA6IGZhbHNlIH0pfVxuICAgICAgICB2ZXJzZXNGb3JSZWY9e3ZlcnNlc0ZvclJlZn1cbiAgICAgICAgdmVyc2VzQWxpZ25tZW50U3RhdHVzPXt2ZXJzZXNBbGlnbm1lbnRTdGF0dXN9XG4gICAgICAgIG9uVmVyc2VTZWxlY3Q9eyh2ZXJzZSkgPT4gc2V0U3RhdGUoe1xuICAgICAgICAgIHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQ6IHZlcnNlLFxuICAgICAgICAgIHNob3dBbGlnbm1lbnRQb3B1cDogZmFsc2VcbiAgICAgICAgfSl9XG4gICAgICAvPlxuICAgIDwvU2VsZWN0aW9uc0NvbnRleHRQcm92aWRlcj5cbiAgKVxufVxuXG5TY3JpcHR1cmVDYXJkLnByb3BUeXBlcyA9IHtcbiAgLyoqIHJlcG8gYnJhbmNoIG9yIHRhZyBzdWNoIGFzIG1hc3RlciAqL1xuICBhcHBSZWY6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqIGF1dGhlbnRpY2F0aW9uIGluZm8gKi9cbiAgYXV0aGVudGljYXRpb246IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBpbmRleCBmb3IgY3VycmVudCBib29rIChlLmcuICcwMScgZm9yICdnZW4nKSovXG4gIGJvb2tJbmRleDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIHNjcmlwdHVyZSBjYXJkIG51bWJlciAoMCB0byAyIGZvciBleGFtcGxlKSAqL1xuICBjYXJkTnVtOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIC8qKiBDU1MgY2xhc3NlcyAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogaWYgdHJ1ZSB0aGVuIHdvcmQgZGF0YSBob3ZlciBpcyBzaG93biAqL1xuICBkaXNhYmxlV29yZFBvcG92ZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKiogZ2V0IGxhbmd1YWdlIGRldGFpbHMgKi9cbiAgZ2V0TGFuZ3VhZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKiBmdW5jdGlvbiB0byBnZXQgbGF0ZXN0IGxleGljb24gZGF0YSAqL1xuICBnZXRMZXhpY29uRGF0YTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBvcHRpb25hbCB1cmwgZm9yIGdyZWVrIHJlcG8gKi9cbiAgZ3JlZWtSZXBvVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogb3B0aW9uYWwgdXJsIGZvciBoZWJyZXcgcmVwbyAqL1xuICBoZWJyZXdSZXBvVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogb3B0aW9uYWwgaHR0cCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgZmV0Y2hpbmcgcmVzb3VyY2VzLCBkZWZhdWx0IGlzIDAgKHZlcnkgbG9uZyB3YWl0KSAqL1xuICBodHRwQ29uZmlnOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogaHRtbCBpZGVudGlmaWVyIHRvIHVzZSBmb3IgY2FyZCAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgTlQgb3IgT1QgKi9cbiAgaXNOVDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIHVzZXItbmFtZSAqL1xuICBsb2dnZWRJblVzZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBmdW5jdGlvbiB0byBtaW5pbWl6ZSB0aGUgY2FyZCAob3B0aW9uYWwpICovXG4gIG9uTWluaW1pemU6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogb3B0aW9uYWwgY2FsbGJhY2sgaWYgZXJyb3IgbG9hZGluZyByZXNvdXJjZSwgcGFyYW1ldGVyIHJldHVybmVkIGFyZTpcbiAgICogICAgKHtzdHJpbmd9IGVycm9yTWVzc2FnZSwge2Jvb2xlYW59IGlzQWNjZXNzRXJyb3IsIHtvYmplY3R9IHJlc291cmNlU3RhdHVzKVxuICAgKiAgICAgIC0gaXNBY2Nlc3NFcnJvciAtIGlzIHRydWUgaWYgdGhpcyB3YXMgYW4gZXJyb3IgdHJ5aW5nIHRvIGFjY2VzcyBmaWxlXG4gICAqICAgICAgLSByZXNvdXJjZVN0YXR1cyAtIGlzIG9iamVjdCBjb250YWluaW5nIGRldGFpbHMgYWJvdXQgcHJvYmxlbXMgZmV0Y2hpbmcgcmVzb3VyY2UgKi9cbiAgb25SZXNvdXJjZUVycm9yOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIHRoZSBvcmlnaW5hbCBzY3JpcHR1cmUgYm9va09iamVjdHMgZm9yIGN1cnJlbnQgYm9vayAqL1xuICBvcmlnaW5hbFNjcmlwdHVyZUJvb2tPYmplY3RzOiBQcm9wVHlwZXMub2JqZWN0LFxuICByZWZlcmVuY2U6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqIHByb2plY3RJZCAoYm9va0lEKSB0byB1c2UgKi9cbiAgICBwcm9qZWN0SWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogY3VycmVudCBjaGFwdGVyIG51bWJlciAqL1xuICAgIGNoYXB0ZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKS5pc1JlcXVpcmVkLFxuICAgIC8qKiBjdXJyZW50IHZlcnNlIG51bWJlciAqL1xuICAgIHZlcnNlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkuaXNSZXF1aXJlZCxcbiAgfSksXG4gIC8qKiByZXNvdXJjZSBvYmplY3QgKi9cbiAgcmVzb3VyY2U6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqIHJlc291cmNlIGxhbmd1YWdlIHRvIHVzZSAqL1xuICAgIGxhbmd1YWdlSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVwbyBvd25lciBzdWNoIGFzIHVuZm9sZGluZ1dvcmQgKi9cbiAgICBvd25lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiByZXNvdXJjZUlkIHRvIHVzZSAoZS5nLiB1Z250KSAqL1xuICAgIHJlc291cmNlSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVwbyBvd25lciBmb3Igb3JpZ2luYWwgbGFuZ3VhZ2VzIHN1Y2ggYXMgdW5mb2xkaW5nV29yZCAqL1xuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB9KSxcbiAgLyoqIHJlc291cmNlTGluayAqL1xuICByZXNvdXJjZUxpbms6IFByb3BUeXBlcy5hbnksXG4gIC8qKlRoaXMgaXMgY3VycmVudGx5IHNlbGVjdGVkIHF1b3RlICovXG4gIHNlbGVjdGVkUXVvdGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBzZXJ2ZXIgKGUuZy4gJ2h0dHBzOi8vZ2l0LmRvb3I0My5vcmcnKSAqL1xuICBzZXJ2ZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqIGZ1bmN0aW9uIHRvIHNldCBzdGF0ZSBpbiBhcHAgdGhhdCB0aGVyZSBhcmUgdW5zYXZlZCBjaGFuZ2VzICovXG4gIHNldFNhdmVkQ2hhbmdlczogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBjYWxsYmFjayB0byB1cGRhdGUgd29yZCBhbGlnbmVyIHN0YXRlICovXG4gIHNldFdvcmRBbGlnbmVyU3RhdHVzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIHRpdGxlIGZvciBzY3JpcHR1cmUgY2FyZCAqL1xuICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKiogb3B0aW9uYWwgZnVuY3Rpb24gZm9yIGxvY2FsaXphdGlvbiAqL1xuICB0cmFuc2xhdGU6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogdXNlIG1ldGhvZCBmb3IgdXNpbmcgbG9jYWwgc3RvcmFnZSBzcGVjaWZpYyBmb3IgdXNlciAqL1xuICB1c2VVc2VyTG9jYWxTdG9yYWdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxufVxuIl19
|
|
1378
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1NjcmlwdHVyZUNhcmQvU2NyaXB0dXJlQ2FyZC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJQcm9wVHlwZXMiLCJjb3JlIiwiU2VsZWN0aW9uc0NvbnRleHRQcm92aWRlciIsInVzZm1qcyIsInVzZUVkaXQiLCJJY29uQnV0dG9uIiwiUnhMaW5rMiIsIlJ4TGlua0JyZWFrMiIsIkNhcmQiLCJFUlJPUl9TVEFURSIsIk1BTklGRVNUX05PVF9MT0FERURfRVJST1IiLCJ1c2VDYXJkU3RhdGUiLCJ1c2VVc2VyQnJhbmNoIiwiZ2V0UXVvdGVNYXRjaGVzSW5Cb29rUmVmIiwiQWxpZ25tZW50SGVscGVycyIsIlVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMiLCJpc0VxdWFsIiwiZ2V0VmVyc2VzIiwiU2NyaXB0dXJlUGFuZSIsIlNjcmlwdHVyZVNlbGVjdG9yIiwidXNlU2NyaXB0dXJlU2V0dGluZ3MiLCJjbGVhbnVwVmVyc2VPYmplY3RzIiwiZml4T2NjdXJyZW5jZSIsImdldFJlc291cmNlTGluayIsImdldFJlc291cmNlTWVzc2FnZSIsImdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyIsImlzT3JpZ2luYWxCaWJsZSIsImRlbGF5IiwiYXJlTWFwc1RoZVNhbWUiLCJUaXRsZSIsIk5UX09SSUdfTEFORyIsIk9SSUdJTkFMX1NPVVJDRSIsIk9UX09SSUdfTEFORyIsIlZlcnNlU2VsZWN0b3JQb3B1cCIsIktFWV9GT05UX1NJWkVfQkFTRSIsImxhYmVsIiwic3R5bGUiLCJtYXJnaW5Ub3AiLCJ3aWR0aCIsImNvbXBhcmVPYmplY3QiLCJ2ZXJzZVJlZiIsImNoYXB0ZXIiLCJ2ZXJzZSIsInZlcnNlRGF0YSIsInZlcnNlT2JqZWN0cyIsImxlbmd0aCIsImFyZVZlcnNlc1NhbWUiLCJ2ZXJzZXNGb3JSZWYxIiwidmVyc2VzRm9yUmVmMiIsImFyZVNhbWUiLCJpIiwibCIsInZlcnNlMSIsInZlcnNlMiIsIlNjcmlwdHVyZUNhcmQiLCJhcHBSZWYiLCJhdXRoZW50aWNhdGlvbiIsImJvb2tJbmRleCIsImNhcmROdW0iLCJjbGFzc2VzIiwiZGlzYWJsZVdvcmRQb3BvdmVyIiwiZ2V0TGFuZ3VhZ2UiLCJnZXRMZXhpY29uRGF0YSIsImdyZWVrUmVwb1VybCIsImhlYnJld1JlcG9VcmwiLCJodHRwQ29uZmlnIiwiaWQiLCJpc05UIiwibG9nZ2VkSW5Vc2VyIiwib25NaW5pbWl6ZSIsIm9uUmVzb3VyY2VFcnJvciIsIm9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHMiLCJyZWZlcmVuY2UiLCJyZXNvdXJjZSIsIm93bmVyIiwibGFuZ3VhZ2VJZCIsInJlc291cmNlSWQiLCJvcmlnaW5hbExhbmd1YWdlT3duZXIiLCJyZXNvdXJjZUxpbmsiLCJzZWxlY3RlZFF1b3RlIiwic2VydmVyIiwic2V0U2F2ZWRDaGFuZ2VzIiwic2V0V29yZEFsaWduZXJTdGF0dXMiLCJ0cmFuc2xhdGUiLCJ0aXRsZSIsInVzZVVzZXJMb2NhbFN0b3JhZ2UiLCJib29rSWQiLCJwcm9qZWN0SWQiLCJ1c2VTdGF0ZSIsImNoZWNrRm9yRWRpdEJyYW5jaCIsImN1cnJlbnRSZWZlcmVuY2UiLCJlZGl0QnJhbmNoUmVhZHkiLCJoYXZlVW5zYXZlZENoYW5nZXMiLCJsYXN0U2VsZWN0ZWRRdW90ZSIsInJlYWR5Rm9yRmV0Y2giLCJyZWYiLCJzYXZlQ2xpY2tlZCIsInNhdmVDb250ZW50Iiwic2VsZWN0aW9ucyIsIk1hcCIsInNoYSIsInN0YXJ0U2F2ZSIsInVybEVycm9yIiwidXNpbmdVc2VyQnJhbmNoIiwidW5zYXZlZENoYW5nZXNMaXN0IiwidmVyc2VzRm9yUmVmIiwic2hvd0FsaWdubWVudFBvcHVwIiwidmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCIsInZlcnNlc0FsaWdubWVudFN0YXR1cyIsInZlcnNlT2JqZWN0c01hcCIsInN0YXRlIiwic2V0U3RhdGVfIiwiZm9udFNpemUiLCJzZXRGb250U2l6ZSIsImlzTlRfIiwic2V0U3RhdGUiLCJuZXdTdGF0ZSIsInByZXZTdGF0ZSIsImNhY2hlIiwibWF4QWdlIiwibm9DYWNoZSIsInNldFVybEVycm9yIiwiZXJyb3IiLCJ3aG9sZUJvb2siLCJpc05ld1Rlc3RhbWVudCIsInNjcmlwdHVyZUNvbmZpZyIsInNldFNjcmlwdHVyZSIsInNjcmlwdHVyZVNldHRpbmdzIiwic2NyaXB0dXJlVmVyc2lvbkhpc3QiLCJmZXRjaFJlc3BfIiwiZmV0Y2hSZXNwb25zZSIsInJlcG8iLCJyZWZlcmVuY2VfIiwidXNlRWZmZWN0IiwiX3NoYSIsImRhdGEiLCJ1cmwiLCJkb3dubG9hZF91cmwiLCJ2YWxpZEJyYW5jaCIsInBhcnRzIiwic3BsaXQiLCJmZXRjaEJyYW5jaCIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5IiwiY2FyZFJlc291cmNlSWQiLCJyZWZfIiwiY2FuVXNlRWRpdEJyYW5jaCIsImluY2x1ZGVzIiwiY2FyZElkIiwiYnJhbmNoRGV0ZXJtaW5lZCIsInVzZXJFZGl0QnJhbmNoTmFtZSIsIl91c2luZ1VzZXJCcmFuY2giLCJ3b3JraW5nUmVzb3VyY2VCcmFuY2giLCJzdGFydEVkaXRCcmFuY2giLCJhY3Rpb25zIiwic3RhcnRFZGl0Iiwid29ya2luZ1JlZiIsInNjcmlwdHVyZVRpdGxlIiwicmVzb3VyY2VTdGF0dXMiLCJtZXNzYWdlIiwiaXNBY2Nlc3NFcnJvciIsInZlcnNpb24iLCJ1cGRhdGVUaXRsZSIsImdldFNjcmlwdHVyZVNlbGVjdG9yIiwic2NyaXB0dXJlU2VsZWN0aW9uQ29uZmlnIiwib25NZW51Q2xvc2UiLCJsYW5ndWFnZUlkXyIsImxhbmd1YWdlIiwiZGlyZWN0aW9uIiwiX3JlZmVyZW5jZSIsImlzSGVicmV3IiwiZm9udEZhY3RvciIsInNjYWxlZEZvbnRTaXplIiwiaXRlbXMiLCJoZWFkZXJzIiwiZmlsdGVycyIsIml0ZW1JbmRleCIsIm1hcmtkb3duVmlldyIsInNldEZpbHRlcnMiLCJzZXRJdGVtSW5kZXgiLCJzZXRNYXJrZG93blZpZXciLCJyZWZTdHlsZSIsInVzZU1lbW8iLCJmb250RmFtaWx5IiwiTWF0aCIsInJvdW5kIiwiY29udGVudFN0eWxlIiwic2NyaXB0dXJlTGFiZWwiLCJkaXNhYmxlV29yZFBvcG92ZXJfIiwidXNpbmdPcmlnaW5hbEJpYmxlIiwidW5kZWZpbmVkIiwiZW5hYmxlRWRpdCIsImVuYWJsZUFsaWdubWVudCIsIm9yaWdpbmFsUmVwb1VybCIsInNjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWciLCJjdXJyZW50VmVyc2VSZWYiLCJfc2V0U2F2ZWRDaGFuZ2VzIiwic291cmNlTGFuZ3VhZ2UiLCJ0YXJnZXRMYW5ndWFnZSIsImN1cnJlbnRJbmRleCIsInNhdmVkIiwiZ2V0Q2hhbmdlcyIsImNsZWFyQ2hhbmdlcyIsIl91bnNhdmVkQ2hhbmdlc0xpc3QiLCJoYXNPd25Qcm9wZXJ0eSIsIl9oYXZlVW5zYXZlZENoYW5nZXMiLCJPYmplY3QiLCJrZXlzIiwiZmluZFJlZkluQXJyYXkiLCJmaW5kSXRlbSIsImNodW5rcyIsInJlZkxlbiIsImluZGV4IiwiZmluZEluZGV4IiwiY2h1bmsiLCJpZHgiLCJzdWJzdHJpbmciLCJuZXh0Q2hhciIsImdldEJvb2tOYW1lIiwiYm9va0NhcHMiLCJ0b1VwcGVyQ2FzZSIsImZpbGVwYXRoIiwiY29udGVudCIsImNvbmZpZyIsInRva2VuIiwidGltZW91dCIsInNlcnZlclRpbWVPdXQiLCJhdXRob3IiLCJicmFuY2giLCJzYXZlRXJyb3IiLCJpc1NhdmVFcnJvciIsImlzRXJyb3IiLCJvblNhdmVFZGl0IiwiX3NhdmVFZGl0IiwiaW5mbyIsInRoZW4iLCJzdWNjZXNzIiwidW5zYXZlZENhcmRJbmRpY2VzIiwiY2FyZEluZGV4IiwicmVsb2FkUmVzb3VyY2UiLCJtZXJnZVZlcnNlT2JqZWN0c0ludG9CaWJsZVVzZm0iLCJiaWJsZVVzZm0iLCJ1cGRhdGVkVmVyc2VPYmplY3RzIiwibmV3VXNmbSIsImNoYXB0ZXJDaHVua3MiLCJjaGFwdGVySW5kZXgiLCJjdXJyZW50Q2hhcHRlciIsInZlcnNlQ2h1bmtzIiwidmVyc2VJbmRleCIsIm5ld1ZlcnNlVXNmbSIsImNvbnZlcnRWZXJzZURhdGFUb1VTRk0iLCJvbGRWZXJzZSIsInZlcnNlTnVtTGVuIiwibmV3Q2hhcHRlciIsImpvaW4iLCJnZXRSZWFkeUZvclNhdmUiLCJjcmVhdGVFZGl0QnJhbmNoIiwid2FybiIsImdldFJlc3BvbnNlRGF0YSIsIm1lcmdlRmFpbCIsInBhcnNlSW50IiwibmV3VmVyc2VUZXh0IiwidGFyZ2V0VmVyc2VPYmplY3RzXyIsInVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlIiwidGFyZ2V0VmVyc2VPYmplY3RzIiwibmV3Qm9va0pzb24iLCJ1cGRhdGVWZXJzZSIsInRvVVNGTSIsImZvcmNlZE5ld0xpbmVzIiwiX3ZlcnNlc0ZvclJlZiIsIm5ld1NlbGVjdGlvbnMiLCJ1cGRhdGVTZWxlY3Rpb25zIiwiX21hcCIsIm9yaWdpbmFsQm9va0lkIiwiYm9va1ZlcnNlT2JqZWN0IiwiY2hhcHRlcnMiLCJuZXdTZWxlY3RlZFF1b3RlIiwicXVvdGUiLCJvcmlnaW5hbFZlcnNlcyIsInN1YnN0aXR1dGUiLCJzdGFydFZlcnNlIiwibGFzdFZlcnNlIiwiX3ZlcnNlIiwidmVyc2VzIiwidmVyc2VJdGVtIiwidm8iLCJjb25jYXQiLCJzZXQiLCJzdWJSZWYiLCJxdW90ZU1hdGNoZXMiLCJib29rT2JqZWN0Iiwib2NjdXJyZW5jZSIsInNpemUiLCJmb3JFYWNoIiwid29yZHMiLCJrZXkiLCJfa2V5IiwibWFwIiwid29yZCIsInRleHQiLCJub3JtYWxpemVTdHJpbmciLCJib29rc05vdFNhbWUiLCJ1cGRhdGVWZXJzZXNBbGlnbm1lbnRTdGF0dXMiLCJhbGlnbmVkIiwicmVuZGVyZWRTY3JpcHR1cmVQYW5lcyIsIl9jdXJyZW50VmVyc2VEYXRhIiwiaW5pdGlhbFZlcnNlT2JqZWN0cyIsIl9zY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnIiwiaXNWZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50IiwiaGFuZGxlQWxpZ25CdXR0b25DbGljayIsIm9uUmVuZGVyVG9vbGJhciIsIm5ld0l0ZW1zIiwiYWxsVmVyc2VzQWxpZ25lZCIsInZhbHVlcyIsImV2ZXJ5IiwiYWxpZ25TdGF0dXMiLCJhbGlnbkljb24iLCJhbGlnbkJ1dHRvblRleHQiLCJwdXNoIiwiY3Vyc29yIiwicHJvcFR5cGVzIiwic3RyaW5nIiwiaXNSZXF1aXJlZCIsIm9iamVjdCIsIm51bWJlciIsImJvb2wiLCJmdW5jIiwic2hhcGUiLCJvbmVPZlR5cGUiLCJhbnkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLQSxLQUFaLE1BQXVCLE9BQXZCO0FBQ0EsT0FBTyxLQUFLQyxTQUFaLE1BQTJCLFlBQTNCO0FBQ0EsU0FBU0MsSUFBVCxFQUFlQyx5QkFBZixRQUFnRCx5QkFBaEQ7QUFDQSxPQUFPQyxNQUFQLE1BQW1CLFNBQW5CO0FBQ0EsU0FBU0MsT0FBVCxRQUF3QixxQkFBeEI7QUFDQSxTQUFTQyxVQUFULFFBQTJCLGVBQTNCO0FBQ0EsU0FBU0MsT0FBVCxFQUFrQkMsWUFBbEIsUUFBc0MsZ0JBQXRDO0FBQ0EsU0FDRUMsSUFERixFQUVFQyxXQUZGLEVBR0VDLHlCQUhGLEVBSUVDLFlBSkYsRUFLRUMsYUFMRixRQU1PLHVCQU5QO0FBT0EsU0FBU0Msd0JBQVQsUUFBeUMsa0JBQXpDO0FBQ0EsU0FBU0MsZ0JBQVQsRUFBMkJDLHlCQUEzQixRQUE0RCxrQkFBNUQ7QUFDQSxPQUFPLEtBQUtDLE9BQVosTUFBeUIsWUFBekI7QUFDQSxTQUFTQyxTQUFULFFBQTBCLHVCQUExQjtBQUNBLFNBQVNDLGFBQVQsRUFBd0JDLGlCQUF4QixRQUFpRCxJQUFqRDtBQUNBLFNBQVNDLG9CQUFULFFBQXFDLGtDQUFyQztBQUNBLFNBQ0VDLG1CQURGLEVBRUVDLGFBRkYsRUFHRUMsZUFIRixFQUlFQyxrQkFKRixFQUtFQywyQkFMRixFQU1FQyxlQU5GLFFBT08sK0JBUFA7QUFRQSxTQUFTQyxLQUFULFFBQXNCLG1C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QVMsQ0FBQzJVLEdBMURBOztBQTJEeEI7QUFDQTVQLEVBQUFBLGFBQWEsRUFBRS9FLFNBQVMsQ0FBQ3FVLE1BNUREOztBQTZEeEI7QUFDQXJQLEVBQUFBLE1BQU0sRUFBRWhGLFNBQVMsQ0FBQ21VLE1BQVYsQ0FBaUJDLFVBOUREOztBQStEeEI7QUFDQW5QLEVBQUFBLGVBQWUsRUFBRWpGLFNBQVMsQ0FBQ3dVLElBaEVIOztBQWlFeEI7QUFDQXRQLEVBQUFBLG9CQUFvQixFQUFFbEYsU0FBUyxDQUFDd1UsSUFsRVI7O0FBbUV4QjtBQUNBcFAsRUFBQUEsS0FBSyxFQUFFcEYsU0FBUyxDQUFDbVUsTUFBVixDQUFpQkMsVUFwRUE7O0FBcUV4QjtBQUNBalAsRUFBQUEsU0FBUyxFQUFFbkYsU0FBUyxDQUFDd1UsSUF0RUc7O0FBdUV4QjtBQUNBblAsRUFBQUEsbUJBQW1CLEVBQUVyRixTQUFTLENBQUN3VSxJQUFWLENBQWVKO0FBeEVaLENBQTFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCB7IGNvcmUsIFNlbGVjdGlvbnNDb250ZXh0UHJvdmlkZXIgfSBmcm9tICdzY3JpcHR1cmUtcmVzb3VyY2VzLXJjbCdcbmltcG9ydCB1c2ZtanMgZnJvbSAndXNmbS1qcydcbmltcG9ydCB7IHVzZUVkaXQgfSBmcm9tICdnaXRlYS1yZWFjdC10b29sa2l0J1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnXG5pbXBvcnQgeyBSeExpbmsyLCBSeExpbmtCcmVhazIgfSBmcm9tICdyZWFjdC1pY29ucy9yeCdcbmltcG9ydCB7XG4gIENhcmQsXG4gIEVSUk9SX1NUQVRFLFxuICBNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SLFxuICB1c2VDYXJkU3RhdGUsXG4gIHVzZVVzZXJCcmFuY2gsXG59IGZyb20gJ3RyYW5zbGF0aW9uLWhlbHBzLXJjbCdcbmltcG9ydCB7IGdldFF1b3RlTWF0Y2hlc0luQm9va1JlZiB9IGZyb20gJ3V3LXF1b3RlLWhlbHBlcnMnXG5pbXBvcnQgeyBBbGlnbm1lbnRIZWxwZXJzLCBVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzIH0gZnJvbSAnd29yZC1hbGlnbmVyLXJjbCdcbmltcG9ydCAqIGFzIGlzRXF1YWwgZnJvbSAnZGVlcC1lcXVhbCdcbmltcG9ydCB7IGdldFZlcnNlcyB9IGZyb20gJ2JpYmxlLXJlZmVyZW5jZS1yYW5nZSdcbmltcG9ydCB7IFNjcmlwdHVyZVBhbmUsIFNjcmlwdHVyZVNlbGVjdG9yIH0gZnJvbSAnLi4nXG5pbXBvcnQgeyB1c2VTY3JpcHR1cmVTZXR0aW5ncyB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVNjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHtcbiAgY2xlYW51cFZlcnNlT2JqZWN0cyxcbiAgZml4T2NjdXJyZW5jZSxcbiAgZ2V0UmVzb3VyY2VMaW5rLFxuICBnZXRSZXNvdXJjZU1lc3NhZ2UsXG4gIGdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyxcbiAgaXNPcmlnaW5hbEJpYmxlLFxufSBmcm9tICcuLi8uLi91dGlscy9TY3JpcHR1cmVTZXR0aW5ncydcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZGVsYXknXG5pbXBvcnQgeyBhcmVNYXBzVGhlU2FtZSB9IGZyb20gJy4uLy4uL3V0aWxzL21hcHMnXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4uL1NjcmlwdHVyZVBhbmUvc3R5bGVkJ1xuaW1wb3J0IHtcbiAgTlRfT1JJR19MQU5HLFxuICBPUklHSU5BTF9TT1VSQ0UsXG4gIE9UX09SSUdfTEFORyxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnXG5pbXBvcnQgeyBWZXJzZVNlbGVjdG9yUG9wdXAgfSBmcm9tICcuLi9WZXJzZVNlbGVjdG9yUG9wdXAnXG5cbmNvbnN0IEtFWV9GT05UX1NJWkVfQkFTRSA9ICdzY3JpcHR1cmVQYW5lRm9udFNpemVfJ1xuY29uc3QgbGFiZWwgPSAnVmVyc2lvbidcbmNvbnN0IHN0eWxlID0geyBtYXJnaW5Ub3A6ICcxNnB4Jywgd2lkdGg6ICc1MDBweCcgfVxuXG4vKipcbiAqIGNyZWF0ZSBhIHNob3J0IGNvbXBhcmlzb24gdmVyc2UgcmVmIG9iamVjdCB3aXRob3V0IGFsbCB0aGUgdmVyc2VEYXRhXG4gKiBAcGFyYW0gdmVyc2VSZWZcbiAqL1xuZnVuY3Rpb24gY29tcGFyZU9iamVjdCh2ZXJzZVJlZikge1xuICBjb25zdCB7XG4gICAgY2hhcHRlcixcbiAgICB2ZXJzZSxcbiAgICB2ZXJzZURhdGEsXG4gIH0gPSB2ZXJzZVJlZiB8fCB7fVxuICBjb25zdCB2ZXJzZU9iamVjdHMgPSB2ZXJzZURhdGE/LnZlcnNlT2JqZWN0cz8ubGVuZ3RoIHx8IDBcbiAgcmV0dXJuIHtcbiAgICBjaGFwdGVyLFxuICAgIHZlcnNlLFxuICAgIHZlcnNlT2JqZWN0cyxcbiAgfVxufVxuXG4vKipcbiAqIGNvbXBhcmUgdHdvIHZlcnNlIHJlZnMgdG8gc2VlIGlmIHRoZXkgYXJlIHN1YnN0YW50aWFsbHkgc2ltaWxhclxuICogQHBhcmFtIHZlcnNlc0ZvclJlZjFcbiAqIEBwYXJhbSB2ZXJzZXNGb3JSZWYyXG4gKi9cbmZ1bmN0aW9uIGFyZVZlcnNlc1NhbWUodmVyc2VzRm9yUmVmMTogYW55W10sIHZlcnNlc0ZvclJlZjI6IGFueVtdKSB7XG4gIHZlcnNlc0ZvclJlZjEgPSB2ZXJzZXNGb3JSZWYxIHx8IFtdXG4gIHZlcnNlc0ZvclJlZjIgPSB2ZXJzZXNGb3JSZWYyIHx8IFtdXG4gIGxldCBhcmVTYW1lID0gZmFsc2VcblxuICBpZiAodmVyc2VzRm9yUmVmMS5sZW5ndGggPT09IHZlcnNlc0ZvclJlZjIubGVuZ3RoKSB7XG4gICAgYXJlU2FtZSA9IHRydWVcblxuICAgIGZvciAobGV0IGkgPSAwLCBsPSB2ZXJzZXNGb3JSZWYxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgY29uc3QgdmVyc2UxID0gY29tcGFyZU9iamVjdCh2ZXJzZXNGb3JSZWYxW2ldKVxuICAgICAgY29uc3QgdmVyc2UyID0gY29tcGFyZU9iamVjdCh2ZXJzZXNGb3JSZWYyW2ldKVxuICAgICAgYXJlU2FtZSA9IGlzRXF1YWwodmVyc2UxLCB2ZXJzZTIpXG5cbiAgICAgIGlmICghYXJlU2FtZSkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhcmVTYW1lXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNjcmlwdHVyZUNhcmQoe1xuICBhcHBSZWYsXG4gIGF1dGhlbnRpY2F0aW9uLFxuICBib29rSW5kZXgsXG4gIGNhcmROdW0sXG4gIGNsYXNzZXMsXG4gIGRpc2FibGVXb3JkUG9wb3ZlcixcbiAgZ2V0TGFuZ3VhZ2UsXG4gIGdldExleGljb25EYXRhLFxuICBncmVla1JlcG9VcmwsXG4gIGhlYnJld1JlcG9VcmwsXG4gIGh0dHBDb25maWcsXG4gIGlkLFxuICBpc05ULFxuICBsb2dnZWRJblVzZXIsXG4gIG9uTWluaW1pemUsXG4gIG9uUmVzb3VyY2VFcnJvcixcbiAgb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cyxcbiAgcmVmZXJlbmNlLFxuICByZXNvdXJjZToge1xuICAgIG93bmVyLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgcmVzb3VyY2VJZCxcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gIH0sXG4gIHJlc291cmNlTGluayxcbiAgc2VsZWN0ZWRRdW90ZSxcbiAgc2VydmVyLFxuICBzZXRTYXZlZENoYW5nZXMsXG4gIHNldFdvcmRBbGlnbmVyU3RhdHVzLFxuICB0cmFuc2xhdGUsXG4gIHRpdGxlLFxuICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxufSkge1xuICBjb25zdCBib29rSWQgPSByZWZlcmVuY2U/LnByb2plY3RJZFxuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlX10gPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgY2hlY2tGb3JFZGl0QnJhbmNoOiAwLFxuICAgIGN1cnJlbnRSZWZlcmVuY2U6IG51bGwsXG4gICAgZWRpdEJyYW5jaFJlYWR5OiBmYWxzZSxcbiAgICBoYXZlVW5zYXZlZENoYW5nZXM6IGZhbHNlLFxuICAgIGxhc3RTZWxlY3RlZFF1b3RlOiBudWxsLFxuICAgIHJlYWR5Rm9yRmV0Y2g6IGZhbHNlLFxuICAgIHJlZjogYXBwUmVmLFxuICAgIHNhdmVDbGlja2VkOiBmYWxzZSxcbiAgICBzYXZlQ29udGVudDogbnVsbCxcbiAgICBzZWxlY3Rpb25zOiBuZXcgTWFwKCksXG4gICAgc2hhOiBudWxsLFxuICAgIHN0YXJ0U2F2ZTogZmFsc2UsXG4gICAgdXJsRXJyb3I6IG51bGwsXG4gICAgdXNpbmdVc2VyQnJhbmNoOiBmYWxzZSxcbiAgICB1bnNhdmVkQ2hhbmdlc0xpc3Q6IHt9LFxuICAgIHZlcnNlc0ZvclJlZjogbnVsbCxcbiAgICBzaG93QWxpZ25tZW50UG9wdXA6IGZhbHNlLFxuICAgIHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQ6IG51bGwsXG4gICAgdmVyc2VzQWxpZ25tZW50U3RhdHVzOiBudWxsLFxuICAgIHZlcnNlT2JqZWN0c01hcDogbmV3IE1hcCgpLFxuICB9KVxuICBjb25zdCB7XG4gICAgY2hlY2tGb3JFZGl0QnJhbmNoLFxuICAgIGN1cnJlbnRSZWZlcmVuY2UsXG4gICAgZWRpdEJyYW5jaFJlYWR5LFxuICAgIGhhdmVVbnNhdmVkQ2hhbmdlcyxcbiAgICBsYXN0U2VsZWN0ZWRRdW90ZSxcbiAgICByZWFkeUZvckZldGNoLFxuICAgIHJlZixcbiAgICBzYXZlQ2xpY2tlZCxcbiAgICBzYXZlQ29udGVudCxcbiAgICBzZWxlY3Rpb25zLFxuICAgIHNoYSxcbiAgICBzaG93QWxpZ25tZW50UG9wdXAsXG4gICAgc3RhcnRTYXZlLFxuICAgIHVybEVycm9yLFxuICAgIHVzaW5nVXNlckJyYW5jaCxcbiAgICB1bnNhdmVkQ2hhbmdlc0xpc3QsXG4gICAgdmVyc2VPYmplY3RzTWFwLFxuICAgIHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQsXG4gICAgdmVyc2VzQWxpZ25tZW50U3RhdHVzLFxuICAgIHZlcnNlc0ZvclJlZixcbiAgfSA9IHN0YXRlXG5cbiAgY29uc3QgW2ZvbnRTaXplLCBzZXRGb250U2l6ZV0gPSB1c2VVc2VyTG9jYWxTdG9yYWdlKEtFWV9GT05UX1NJWkVfQkFTRSArIGNhcmROdW0sIDEwMClcbiAgY29uc3QgaXNOVF8gPSBpc05UKGJvb2tJZClcblxuICBmdW5jdGlvbiBzZXRTdGF0ZShuZXdTdGF0ZSkge1xuICAgIHNldFN0YXRlXyhwcmV2U3RhdGUgPT4gKHsgLi4ucHJldlN0YXRlLCAuLi5uZXdTdGF0ZSB9KSlcbiAgfVxuXG4gIGlmICh1c2luZ1VzZXJCcmFuY2gpIHtcbiAgICBodHRwQ29uZmlnID0ge1xuICAgICAgLi4uaHR0cENvbmZpZyxcbiAgICAgIGNhY2hlOiB7IG1heEFnZTogMCB9LFxuICAgICAgbm9DYWNoZTogdHJ1ZSxcbiAgICB9IC8vIGRpc2FibGUgaHR0cCBjYWNoaW5nXG4gIH1cblxuICBjb25zdCB7XG4gICAgaXNOZXdUZXN0YW1lbnQsXG4gICAgc2NyaXB0dXJlQ29uZmlnLFxuICAgIHNldFNjcmlwdHVyZSxcbiAgICBzY3JpcHR1cmVTZXR0aW5ncyxcbiAgICBzY3JpcHR1cmVWZXJzaW9uSGlzdCxcbiAgfSA9IHVzZVNjcmlwdHVyZVNldHRpbmdzKHtcbiAgICBpc05ULFxuICAgIHRpdGxlLFxuICAgIG93bmVyLFxuICAgIHJlZmVyZW5jZTogY3VycmVudFJlZmVyZW5jZSB8fCByZWZlcmVuY2UsXG4gICAgYXBwUmVmOiByZWYsXG4gICAgc2VydmVyLFxuICAgIGNhcmROdW0sXG4gICAgZGlzYWJsZVdvcmRQb3BvdmVyLFxuICAgIGdyZWVrUmVwb1VybCxcbiAgICBoZWJyZXdSZXBvVXJsLFxuICAgIGh0dHBDb25maWcsXG4gICAgbGFuZ3VhZ2VJZCxcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gICAgcmVhZHlGb3JGZXRjaCxcbiAgICByZXNvdXJjZUlkLFxuICAgIHJlc291cmNlTGluayxcbiAgICBzZXRVcmxFcnJvcjogKGVycm9yKSA9PiBzZXRTdGF0ZSh7IHVybEVycm9yOiBlcnJvciB9KSxcbiAgICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxuICAgIHdob2xlQm9vazogdHJ1ZSxcbiAgfSlcblxuICBjb25zdCBmZXRjaFJlc3BfID0gc2NyaXB0dXJlQ29uZmlnPy5mZXRjaFJlc3BvbnNlXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgcmVwbyA9IGAke3NjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/Lmxhbmd1YWdlSWR9XyR7c2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ucHJvamVjdElkfWBcbiAgY29uc3QgcmVmZXJlbmNlXyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVmZXJlbmNlIHx8IG51bGxcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBnZXQgdGhlIF9zaGEgZnJvbSBsYXN0IHNjcmlwdHVyZSBkb3dubG9hZFxuICAgIGNvbnN0IF9zaGEgPSBmZXRjaFJlc3BfPy5kYXRhPy5zaGEgfHwgbnVsbFxuICAgIGNvbnN0IHVybCA9IGZldGNoUmVzcF8/LmRhdGE/LmRvd25sb2FkX3VybCB8fCBudWxsXG4gICAgbGV0IHZhbGlkQnJhbmNoID0gdHJ1ZVxuXG4gICAgaWYgKF9zaGEpIHsgLy8gVFJJQ0tZOiBzaW5jZSB0aGlzIGZldGNoIG1heSBiZSBkZWxheWVkIC0gbWFrZSBzdXJlIGl0IHdhcyBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoIGJlZm9yZSB1c2luZyB0aGUgc2hhXG4gICAgICBjb25zdCBwYXJ0cyA9ICh1cmwgfHwgJycpLnNwbGl0KCcvJylcbiAgICAgIGNvbnN0IGZldGNoQnJhbmNoID0gcGFydHMubGVuZ3RoID4gNyA/IHBhcnRzWzddIDogJydcbiAgICAgIHZhbGlkQnJhbmNoID0gZmV0Y2hCcmFuY2ggPT09IHJlZlxuICAgIH1cblxuICAgIGlmICh2YWxpZEJyYW5jaCAmJiBfc2hhICE9PSBzaGEpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBTY3JpcHR1cmVDYXJkOiBmb3IgJHt1cmx9ICR7SlNPTi5zdHJpbmdpZnkocmVmZXJlbmNlXyl9IG5ldyBzaGEgaXMgJHtfc2hhfWApXG4gICAgICBzZXRTdGF0ZSh7IHNoYTogX3NoYSB9KVxuICAgIH1cbiAgfSwgW2ZldGNoUmVzcF9dKVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgY2FyZFJlc291cmNlSWQgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5wcm9qZWN0SWQgfHwgcmVzb3VyY2VJZFxuICAvLyBAdHMtaWdub3JlXG4gIGxldCByZWZfID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ucmVmIHx8IGFwcFJlZlxuICBjb25zdCBjYW5Vc2VFZGl0QnJhbmNoID0gISEobG9nZ2VkSW5Vc2VyICYmIGF1dGhlbnRpY2F0aW9uICYmIChyZXNvdXJjZUlkICE9PSBPUklHSU5BTF9TT1VSQ0UpICYmIC8vIFRSSUNLWSBpZiBub3Qgb3JpZ2luYWwgbGFuZ3VhZ2UgYW5kIHdlIGhhdmUgbG9naW4gZGF0YSwgdGhlbiB3ZSBjYW4gdXNlIHRoZSBlZGl0IGJyYW5jaFxuICAgICgocmVmXyA9PT0gJ21hc3RlcicpIHx8IChyZWZfLmluY2x1ZGVzKGxvZ2dlZEluVXNlcikpKSkgLy8gYWxzbyBtYWtlIHN1cmUgbm90IGEgdmVyc2lvbiB0YWdcblxuICBjb25zdCB7XG4gICAgc3RhdGU6IHtcbiAgICAgIGJyYW5jaERldGVybWluZWQsXG4gICAgICB1c2VyRWRpdEJyYW5jaE5hbWUsXG4gICAgICB1c2luZ1VzZXJCcmFuY2g6IF91c2luZ1VzZXJCcmFuY2gsXG4gICAgICB3b3JraW5nUmVzb3VyY2VCcmFuY2gsXG4gICAgfSxcbiAgICBhY3Rpb25zOiB7IHN0YXJ0RWRpdDogc3RhcnRFZGl0QnJhbmNoIH0sXG4gIH0gPSB1c2VVc2VyQnJhbmNoKHtcbiAgICBhcHBSZWYsXG4gICAgYXV0aGVudGljYXRpb246IGNhblVzZUVkaXRCcmFuY2ggPyBhdXRoZW50aWNhdGlvbiA6IG51bGwsXG4gICAgYm9va0lkLFxuICAgIGNhcmRJZDogaWQsXG4gICAgY2FyZFJlc291cmNlSWQsXG4gICAgY2hlY2tGb3JFZGl0QnJhbmNoLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgbG9nZ2VkSW5Vc2VyOiBjYW5Vc2VFZGl0QnJhbmNoID8gbG9nZ2VkSW5Vc2VyIDogbnVsbCxcbiAgICBvd25lcixcbiAgICBvblJlc291cmNlRXJyb3IsXG4gICAgc2VydmVyLFxuICAgIHVzZVVzZXJMb2NhbFN0b3JhZ2UsXG4gIH0pXG5cbiAgY29uc3Qgd29ya2luZ1JlZiA9IGNhblVzZUVkaXRCcmFuY2ggPyB3b3JraW5nUmVzb3VyY2VCcmFuY2ggOiBhcHBSZWZcbiAgbGV0IHNjcmlwdHVyZVRpdGxlXG5cbiAgaWYgKCFjYW5Vc2VFZGl0QnJhbmNoICYmICFyZWFkeUZvckZldGNoKSB7IC8vIGlmIGJpYmxlIG5vdCBlbGlnaWJsZSBmb3IgdXNlciBicmFuY2gsIG1ha2Ugc3VyZSBpdCdzIHJlYWR5XG4gICAgc2V0U3RhdGUoeyByZWFkeUZvckZldGNoOiB0cnVlIH0pXG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGBTY3JpcHR1cmVDYXJkIGJvb2sgY2hhbmdlZGAsIHsgYm9va0lkLCBvd25lciwgbGFuZ3VhZ2VJZCwgcmVzb3VyY2VJZCB9KVxuXG4gICAgaWYgKGNhblVzZUVkaXRCcmFuY2gpIHsgLy8gaWYgYmlibGUgZWxpZ2libGUgZm9yIHVzZXIgYnJhbmNoLCByZWZyZXNoIGl0XG4gICAgICBzZXRTdGF0ZSh7IHJlYWR5Rm9yRmV0Y2g6IGZhbHNlLCBjaGVja0ZvckVkaXRCcmFuY2g6IGNoZWNrRm9yRWRpdEJyYW5jaCArIDEgfSlcbiAgICB9XG4gIH0sIFtib29rSWQsIG93bmVyLCBsYW5ndWFnZUlkLCByZXNvdXJjZUlkXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNFcXVhbChyZWZlcmVuY2UsIGN1cnJlbnRSZWZlcmVuY2UpKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhgU2NyaXB0dXJlQ2FyZCByZWZlcmVuY2UgY2hhbmdlZGAsIHJlZmVyZW5jZSlcbiAgICAgIHNldFN0YXRlKHsgY3VycmVudFJlZmVyZW5jZTogcmVmZXJlbmNlIH0pXG4gICAgfVxuICB9LCBbcmVmZXJlbmNlXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyB3YWl0aW5nIGZvciBicmFuY2ggZmV0Y2ggdG8gY29tcGxldGVcbiAgICBjb25zb2xlLmxvZyhgU2NyaXB0dXJlQ2FyZCBicmFuY2hEZXRlcm1pbmVkIGlzICR7YnJhbmNoRGV0ZXJtaW5lZH0gYW5kIHdvcmtpbmdSZWYgaXMgJHt3b3JraW5nUmVmfSBhbmQgcmVhZHlGb3JGZXRjaCBpcyAke3JlYWR5Rm9yRmV0Y2h9YClcblxuICAgIGlmICghcmVhZHlGb3JGZXRjaCAmJiBicmFuY2hEZXRlcm1pbmVkICkge1xuICAgICAgc2V0U3RhdGUoeyByZWFkeUZvckZldGNoOiB0cnVlLCByZWY6IHdvcmtpbmdSZWYgfSlcbiAgICB9XG4gIH0sIFticmFuY2hEZXRlcm1pbmVkXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBzZWxlY3QgY29ycmVjdCB3b3JraW5nIHJlZiAtIGNvdWxkIGJlIG1hc3RlciwgdXNlciBicmFuY2gsIG9yIHJlbGVhc2VcbiAgICBpZiAoX3VzaW5nVXNlckJyYW5jaCAhPT0gdXNpbmdVc2VyQnJhbmNoKSB7XG4gICAgICBzZXRTdGF0ZSh7IHVzaW5nVXNlckJyYW5jaDogX3VzaW5nVXNlckJyYW5jaCB9KVxuICAgIH1cbiAgfSwgW191c2luZ1VzZXJCcmFuY2gsIHVzaW5nVXNlckJyYW5jaF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gdXBkYXRlIGRpc3BsYXkgc3RhdHVzIGlmIGVycm9yXG4gICAgY29uc3QgZXJyb3IgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlU3RhdHVzPy5bRVJST1JfU1RBVEVdXG5cbiAgICBpZiAoZXJyb3IpIHsgLy8gaWYgZXJyb3Igd2FzIGZvdW5kIGRvIGNhbGxiYWNrXG4gICAgICBjb25zdCByZXNvdXJjZVN0YXR1cyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0dXNcbiAgICAgIGNvbnN0IHJlc291cmNlTGluayA9IGdldFJlc291cmNlTGluayhzY3JpcHR1cmVDb25maWcpXG4gICAgICBjb25zdCBtZXNzYWdlID0gZ2V0UmVzb3VyY2VNZXNzYWdlKHJlc291cmNlU3RhdHVzLCBzZXJ2ZXIsIHJlc291cmNlTGluaywgaXNOVF8pXG4gICAgICBjb25zdCBpc0FjY2Vzc0Vycm9yID0gcmVzb3VyY2VTdGF0dXNbTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUl1cbiAgICAgIG9uUmVzb3VyY2VFcnJvciAmJiBvblJlc291cmNlRXJyb3IobWVzc2FnZSwgaXNBY2Nlc3NFcnJvciwgcmVzb3VyY2VTdGF0dXMpXG4gICAgfVxuICB9LCBbc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZVN0YXR1cz8uW0VSUk9SX1NUQVRFXV0pXG5cbiAgaWYgKHNjcmlwdHVyZUNvbmZpZy50aXRsZSAmJiBzY3JpcHR1cmVDb25maWcudmVyc2lvbikge1xuICAgIHNjcmlwdHVyZVRpdGxlID0gYCR7c2NyaXB0dXJlQ29uZmlnLnRpdGxlfSB2JHtzY3JpcHR1cmVDb25maWcudmVyc2lvbn1gXG4gICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QudXBkYXRlVGl0bGUoc2NyaXB0dXJlQ29uZmlnLnJlc291cmNlTGluaywgc2NyaXB0dXJlVGl0bGUpXG4gIH0gZWxzZSB7XG4gICAgc2NyaXB0dXJlVGl0bGUgPSBgVGl0bGUgbWlzc2luZyBmcm9tIHByb2plY3QgbWFuaWZlc3RgXG4gIH1cblxuICAvKiogRHluYW1pY2FsbHkgY3JlYXRlcyB0aGUgc2NyaXB0dXJlIHNlbGVjdGlvbiBkcm9wZG93biB0byBiZSBpbnNlcnRlZCBpbnRvIGNhcmQgc2V0dGluZ3MgKi9cbiAgZnVuY3Rpb24gZ2V0U2NyaXB0dXJlU2VsZWN0b3IoKSB7XG4gICAgY29uc3Qgc2NyaXB0dXJlU2VsZWN0aW9uQ29uZmlnID0gZ2V0U2NyaXB0dXJlVmVyc2lvblNldHRpbmdzKHtcbiAgICAgIGxhYmVsLFxuICAgICAgcmVzb3VyY2VMaW5rOiBzY3JpcHR1cmVDb25maWcucmVzb3VyY2VMaW5rLFxuICAgICAgc2V0U2NyaXB0dXJlLFxuICAgICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QsXG4gICAgfSlcblxuICAgIHJldHVybiA8U2NyaXB0dXJlU2VsZWN0b3Igey4uLnNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZ30gc3R5bGU9e3N0eWxlfSBlcnJvck1lc3NhZ2U9e3VybEVycm9yfSAvPlxuICB9XG5cbiAgZnVuY3Rpb24gb25NZW51Q2xvc2UoKSB7XG4gICAgLy8gY29uc29sZS5sb2coYG9uTWVudUNsb3NlKClgKVxuICAgIHNldFN0YXRlKHsgdXJsRXJyb3I6IG51bGwgfSlcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbGFuZ3VhZ2VJZF8gPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5sYW5ndWFnZUlkXG4gIGNvbnN0IGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2UoeyBsYW5ndWFnZUlkOiBsYW5ndWFnZUlkXyB9KVxuICBjb25zdCBkaXJlY3Rpb24gPSAobGFuZ3VhZ2U/LmRpcmVjdGlvbikgfHwgJ2x0cidcbiAgY29uc3QgX3JlZmVyZW5jZSA9IGN1cnJlbnRSZWZlcmVuY2UgfHwgcmVmZXJlbmNlXG5cbiAgY29uc3QgaXNIZWJyZXcgPSAobGFuZ3VhZ2VJZF8gPT09ICdoYm8nKVxuICBjb25zdCBmb250RmFjdG9yID0gaXNIZWJyZXcgPyAxLjQgOiAxIC8vIHdlIGF1dG9tYXRpY2FsbHkgc2NhbGUgdXAgZm9udCBzaXplIGZvciBIZWJyZXdcbiAgY29uc3Qgc2NhbGVkRm9udFNpemUgPSBmb250U2l6ZSAqIGZvbnRGYWN0b3JcblxuICBjb25zdCBpdGVtcyA9IG51bGxcbiAgY29uc3Qge1xuICAgIHN0YXRlOiB7XG4gICAgICBoZWFkZXJzLCBmaWx0ZXJzLCBpdGVtSW5kZXgsIG1hcmtkb3duVmlldyxcbiAgICB9LFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIHNldEZpbHRlcnMsIHNldEl0ZW1JbmRleCwgc2V0TWFya2Rvd25WaWV3LFxuICAgIH0sXG4gIH0gPSB1c2VDYXJkU3RhdGUoeyBpdGVtcyB9KVxuXG4gIGNvbnN0IHJlZlN0eWxlID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgIGZvbnRGYW1pbHk6ICdOb3RvIFNhbnMnLFxuICAgIGZvbnRTaXplOiBgJHtNYXRoLnJvdW5kKHNjYWxlZEZvbnRTaXplICogMC45KX0lYCxcbiAgfSksIFtzY2FsZWRGb250U2l6ZV0pXG5cbiAgY29uc3QgY29udGVudFN0eWxlID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgIGZvbnRGYW1pbHk6ICdOb3RvIFNhbnMnLFxuICAgIGZvbnRTaXplOiBgJHtzY2FsZWRGb250U2l6ZX0lYCxcbiAgfSksIFtzY2FsZWRGb250U2l6ZV0pXG5cbiAgY29uc3Qgc2NyaXB0dXJlTGFiZWwgPSA8VGl0bGU+e3NjcmlwdHVyZVRpdGxlfTwvVGl0bGU+XG4gIGxldCBkaXNhYmxlV29yZFBvcG92ZXJfID0gZGlzYWJsZVdvcmRQb3BvdmVyXG4gIGNvbnN0IHVzaW5nT3JpZ2luYWxCaWJsZSA9IGlzT3JpZ2luYWxCaWJsZShzY3JpcHR1cmVDb25maWdbJ3Jlc291cmNlJ10/LnByb2plY3RJZClcblxuICBpZiAoZGlzYWJsZVdvcmRQb3BvdmVyID09PSB1bmRlZmluZWQpIHsgLy8gaWYgbm90IHNwZWNpZmllZCwgdGhlbiBkZXRlcm1pbmUgaWYgb3JpZ2luYWwgbGFuZ3VhZ2UgcmVzb3VyY2VcbiAgICBkaXNhYmxlV29yZFBvcG92ZXJfID0gIXVzaW5nT3JpZ2luYWxCaWJsZVxuICB9XG5cbiAgY29uc3QgZW5hYmxlRWRpdCA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgY29uc3QgZW5hYmxlQWxpZ25tZW50ID0gIXVzaW5nT3JpZ2luYWxCaWJsZVxuICBjb25zdCBvcmlnaW5hbFJlcG9VcmwgPSBpc05ld1Rlc3RhbWVudCA/IGdyZWVrUmVwb1VybCA6IGhlYnJld1JlcG9VcmxcbiAgY29uc3Qgc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyA9IHtcbiAgICBhdXRoZW50aWNhdGlvbjogY2FuVXNlRWRpdEJyYW5jaCA/IGF1dGhlbnRpY2F0aW9uIDogbnVsbCxcbiAgICBib29rSW5kZXgsXG4gICAgY3VycmVudFZlcnNlUmVmOiBfcmVmZXJlbmNlLFxuICAgIGVuYWJsZUVkaXQsXG4gICAgZW5hYmxlQWxpZ25tZW50LFxuICAgIGh0dHBDb25maWcsXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlzTmV3VGVzdGFtZW50LFxuICAgIGxvZ2dlZEluVXNlcjogY2FuVXNlRWRpdEJyYW5jaCA/IGxvZ2dlZEluVXNlciA6IG51bGwsXG4gICAgb3JpZ2luYWxMYW5ndWFnZU93bmVyLFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcmlnaW5hbFJlcG9VcmwsXG4gICAgc2NyaXB0dXJlQ29uZmlnLFxuICAgIHNjcmlwdHVyZVNldHRpbmdzLFxuICAgIHN0YXJ0RWRpdEJyYW5jaCxcbiAgICBzZXRTYXZlZENoYW5nZXM6IF9zZXRTYXZlZENoYW5nZXMsXG4gICAgc291cmNlTGFuZ3VhZ2U6IGlzTlRfID8gTlRfT1JJR19MQU5HIDogT1RfT1JJR19MQU5HLFxuICAgIHRhcmdldExhbmd1YWdlOiBsYW5ndWFnZSxcbiAgICB0aXRsZTogc2NyaXB0dXJlVGl0bGUsXG4gICAgd29ya2luZ1Jlc291cmNlQnJhbmNoOiByZWYsXG4gIH1cblxuICAvKipcbiAgICogdGhpcyBnZXRzIGNhbGxlZCB3aGVuZXZlciBhIHNjcmlwdHVyZSBwYW5lIGhhcyBhIGNoYW5nZSBpbiBzYXZlIHN0YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50SW5kZXhcbiAgICogQHBhcmFtIHtib29sZWFufSBzYXZlZFxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBnZXRDaGFuZ2VzIC0gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgdXNlciBjbGlja3Mgc2F2ZSBidXR0b25cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2xlYXJDaGFuZ2VzIC0gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgc2F2ZSBoYXMgY29tcGxldGVkXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdGF0ZSAtIGN1cnJlbnQgc3RhdGUgb2Ygd29yZCBhbGlnbm1lbnQvZWRpdFxuICAgKi9cbiAgZnVuY3Rpb24gX3NldFNhdmVkQ2hhbmdlcyhjdXJyZW50SW5kZXgsIHNhdmVkLCB7IGdldENoYW5nZXMgPSBudWxsLCBjbGVhckNoYW5nZXMgPSBudWxsLCBzdGF0ZSA9IG51bGwgfSkge1xuICAgIGNvbnN0IF91bnNhdmVkQ2hhbmdlc0xpc3QgPSB7IC4uLnVuc2F2ZWRDaGFuZ2VzTGlzdCB9XG5cbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgIGlmIChfdW5zYXZlZENoYW5nZXNMaXN0Lmhhc093blByb3BlcnR5KGN1cnJlbnRJbmRleCkpIHtcbiAgICAgICAgZGVsZXRlIF91bnNhdmVkQ2hhbmdlc0xpc3RbY3VycmVudEluZGV4XVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBfdW5zYXZlZENoYW5nZXNMaXN0W2N1cnJlbnRJbmRleF0gPSB7IGdldENoYW5nZXMsIGNsZWFyQ2hhbmdlcywgc3RhdGUgfSAvLyB1cGRhdGUgd2l0aCBsYXRlc3RcbiAgICB9XG5cbiAgICBjb25zdCBfaGF2ZVVuc2F2ZWRDaGFuZ2VzID0gISFPYmplY3Qua2V5cyhfdW5zYXZlZENoYW5nZXNMaXN0KS5sZW5ndGhcblxuICAgIGlmIChoYXZlVW5zYXZlZENoYW5nZXMgIT0gX2hhdmVVbnNhdmVkQ2hhbmdlcykge1xuICAgICAgc2V0U2F2ZWRDaGFuZ2VzICYmIHNldFNhdmVkQ2hhbmdlcyhyZXNvdXJjZUlkLCAhX2hhdmVVbnNhdmVkQ2hhbmdlcylcbiAgICAgIHNldFN0YXRlKHsgaGF2ZVVuc2F2ZWRDaGFuZ2VzOiBfaGF2ZVVuc2F2ZWRDaGFuZ2VzIH0pXG4gICAgfVxuXG4gICAgaWYgKCFpc0VxdWFsKF91bnNhdmVkQ2hhbmdlc0xpc3QsIHVuc2F2ZWRDaGFuZ2VzTGlzdCkpIHtcbiAgICAgIHNldFN0YXRlKHsgdW5zYXZlZENoYW5nZXNMaXN0OiBfdW5zYXZlZENoYW5nZXNMaXN0IH0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHNlYXJjaCBjaGFwdGVyIG9yIHZlcnNlIGNodW5rIHRvIGxpbmUgdGhhdCBzdGFydHMgd2l0aCBmaW5kSXRlbVxuICAgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGZpbmRJdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGNodW5rc1xuICAgKi9cbiAgZnVuY3Rpb24gZmluZFJlZkluQXJyYXkoZmluZEl0ZW0sIGNodW5rcykge1xuICAgIGNvbnN0IHJlZl8gPSBmaW5kSXRlbSArICcnXG4gICAgY29uc3QgcmVmTGVuID0gcmVmXy5sZW5ndGhcbiAgICBjb25zdCBpbmRleCA9IGNodW5rcy5maW5kSW5kZXgoKGNodW5rLCBpZHgpID0+IHtcbiAgICAgIGlmIChpZHggPiAwKSB7XG4gICAgICAgIGlmIChjaHVuay5zdWJzdHJpbmcoMCwgcmVmTGVuKSA9PT0gcmVmXykge1xuICAgICAgICAgIGNvbnN0IG5leHRDaGFyID0gY2h1bmtbcmVmTGVuXVxuXG4gICAgICAgICAgaWYgKChuZXh0Q2hhciA+ICc5JykgfHwgKG5leHRDaGFyIDwgJzAnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0pXG4gICAgcmV0dXJuIGluZGV4XG4gIH1cblxuICBmdW5jdGlvbiBnZXRCb29rTmFtZSgpIHtcbiAgICBjb25zdCBib29rQ2FwcyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVmZXJlbmNlPy5wcm9qZWN0SWQgPyBzY3JpcHR1cmVDb25maWcucmVmZXJlbmNlLnByb2plY3RJZC50b1VwcGVyQ2FzZSgpIDogJydcbiAgICByZXR1cm4gYCR7Ym9va0luZGV4fS0ke2Jvb2tDYXBzfS51c2ZtYFxuICB9XG5cbiAgY29uc3QgZmlsZXBhdGggPSBnZXRCb29rTmFtZSgpXG5cbiAgLy8ga2VlcCB0cmFjayBvZiB2ZXJzZSBlZGl0IHN0YXRlXG4gIGNvbnN0IHtcbiAgICBlcnJvcjogc2F2ZUVycm9yLFxuICAgIGlzRXJyb3I6IGlzU2F2ZUVycm9yLFxuICAgIG9uU2F2ZUVkaXQsXG4gIH0gPSB1c2VFZGl0KHtcbiAgICBzaGEsXG4gICAgb3duZXIsXG4gICAgY29udGVudDogc2F2ZUNvbnRlbnQsXG4gICAgY29uZmlnOiB7XG4gICAgICBjYWNoZTogeyBtYXhBZ2U6IDAgfSxcbiAgICAgIC4uLmF1dGhlbnRpY2F0aW9uPy5jb25maWcsXG4gICAgICB0b2tlbjogYXV0aGVudGljYXRpb24/LnRva2VuLFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGltZW91dDogaHR0cENvbmZpZz8uc2VydmVyVGltZU91dCB8fCBodHRwQ29uZmlnPy50aW1lb3V0IHx8IDEwMDAwLFxuICAgICAgc2VydmVyLFxuICAgIH0sXG4gICAgYXV0aG9yOiBsb2dnZWRJblVzZXIsXG4gICAgdG9rZW46IGF1dGhlbnRpY2F0aW9uPy50b2tlbixcbiAgICBicmFuY2g6IHdvcmtpbmdSZXNvdXJjZUJyYW5jaCxcbiAgICBmaWxlcGF0aCxcbiAgICByZXBvLFxuICB9KVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHdoZW4gd2UgZ2V0IGEgc2F2ZSBzYXZlRXJyb3JcbiAgICBpZiAoc2F2ZUVycm9yICYmIGlzU2F2ZUVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhgc2F2ZSBlcnJvcmAsIHNhdmVFcnJvcilcbiAgICAgIC8vIG9uUmVzb3VyY2VFcnJvciAmJiBvblJlc291cmNlRXJyb3IobnVsbCwgZmFsc2UsIG51bGwsIGBFcnJvciBzYXZpbmcgJHtsYW5ndWFnZUlkX31fJHtyZXNvdXJjZUlkfSAke3NhdmVFcnJvcn1gLCB0cnVlKVxuICAgIH1cbiAgfSwgW3NhdmVFcnJvciwgaXNTYXZlRXJyb3JdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHdoZW4gc3RhcnRTYXZlIGdvZXMgdHJ1ZSwgc2F2ZSBlZGl0cyB0byB1c2VyIGJyYW5jaCBhbmQgdGhlbiBjbGVhciBzdGFydFNhdmVcbiAgICBjb25zdCBfc2F2ZUVkaXQgPSBhc3luYyAoKSA9PiB7IC8vIGJlZ2luIHVwbG9hZGluZyBuZXcgVVNGTVxuICAgICAgY29uc29sZS5pbmZvKGBzYXZlQ2hhbmdlc1RvQ2xvdWQoKSAtIFVzaW5nIHNoYTogJHtzaGF9YClcbiAgICAgIGF3YWl0IG9uU2F2ZUVkaXQodXNlckVkaXRCcmFuY2hOYW1lKS50aGVuKChzdWNjZXNzKSA9PiB7IC8vIHB1c2ggY2hhbmdlZCB0byBzZXJ2ZXJcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBzYXZlIHNjcmlwdHVyZSBlZGl0cyBzdWNjZXNzYClcbiAgICAgICAgICBjb25zdCB1bnNhdmVkQ2FyZEluZGljZXMgPSBPYmplY3Qua2V5cyh1bnNhdmVkQ2hhbmdlc0xpc3QpXG5cbiAgICAgICAgICBpZiAodW5zYXZlZENhcmRJbmRpY2VzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2FyZEluZGV4IG9mIHVuc2F2ZWRDYXJkSW5kaWNlcykge1xuICAgICAgICAgICAgICBjb25zdCB7IGNsZWFyQ2hhbmdlcyB9ID0gdW5zYXZlZENoYW5nZXNMaXN0W2NhcmRJbmRleF1cbiAgICAgICAgICAgICAgY2xlYXJDaGFuZ2VzICYmIGNsZWFyQ2hhbmdlcygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc29sZS5pbmZvKCdzYXZlQ2hhbmdlc1RvQ2xvdWQoKSAtIFJlbG9hZGluZyByZXNvdXJjZScpXG4gICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgc3RhcnRTYXZlOiBmYWxzZSxcbiAgICAgICAgICAgIHJlYWR5Rm9yRmV0Y2g6IHRydWUsXG4gICAgICAgICAgICByZWY6IHVzZXJFZGl0QnJhbmNoTmFtZSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGRlbGF5KDUwMCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBzY3JpcHR1cmVDb25maWc/LnJlbG9hZFJlc291cmNlKHNoYSlcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3NhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gc2F2aW5nIGNoYW5nZWQgc2NyaXB0dXJlIGZhaWxlZCcpXG4gICAgICAgICAgc2V0U3RhdGUoeyBzdGFydFNhdmU6IGZhbHNlIH0pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0U2F2ZSkge1xuICAgICAgaWYgKCFlZGl0QnJhbmNoUmVhZHkpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGVkaXQgYnJhbmNoIG5vdCB5ZXQgY3JlYXRlZGApXG4gICAgICB9IGVsc2UgaWYgKCFzaGEpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIHNhdmUgc2hhIG5vdCB5ZXQgcmVhZHlgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGNhbGxpbmcgX3NhdmVFZGl0KClgKVxuICAgICAgICBfc2F2ZUVkaXQoKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3N0YXJ0U2F2ZSwgZWRpdEJyYW5jaFJlYWR5LCBzaGFdKVxuXG4gIC8qKlxuICAgKiBjb252ZXJ0IHVwZGF0ZWRWZXJzZU9iamVjdHMgdG8gVVNGTSBhbmQgbWVyZ2UgaW50byB0aGUgYmlibGVVc2ZtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiaWJsZVVzZm0gLSBVU0ZNIG9mIGJpYmxlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWYgLSByZWZlcmVuY2Ugb2YgdmVyc2UgdG8gbWVyZ2UgaW5cbiAgICogQHBhcmFtIHtvYmplY3RbXX0gdXBkYXRlZFZlcnNlT2JqZWN0cyAtIG5ldyB2ZXJzZSBpbiB2ZXJzZU9iamVjdCBmb3JtYXRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNhcmROdW1cbiAgICovXG4gIGZ1bmN0aW9uIG1lcmdlVmVyc2VPYmplY3RzSW50b0JpYmxlVXNmbShiaWJsZVVzZm0sIHJlZiwgdXBkYXRlZFZlcnNlT2JqZWN0cywgY2FyZE51bTogbnVtYmVyKSB7XG4gICAgbGV0IG5ld1VzZm1cbiAgICBjb25zdCBjaGFwdGVyQ2h1bmtzID0gYmlibGVVc2ZtPy5zcGxpdCgnXFxcXGMgJylcbiAgICBjb25zdCBjaGFwdGVySW5kZXggPSBmaW5kUmVmSW5BcnJheShyZWY/LmNoYXB0ZXIsIGNoYXB0ZXJDaHVua3MpXG5cbiAgICBpZiAoY2hhcHRlckluZGV4ID49IDApIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRDaGFwdGVyID0gY2hhcHRlckNodW5rc1tjaGFwdGVySW5kZXhdXG4gICAgICBjb25zdCB2ZXJzZUNodW5rcyA9IGN1cnJlbnRDaGFwdGVyLnNwbGl0KCdcXFxcdiAnKVxuICAgICAgY29uc3QgdmVyc2VJbmRleCA9IGZpbmRSZWZJbkFycmF5KHJlZj8udmVyc2UsIHZlcnNlQ2h1bmtzKVxuXG4gICAgICBpZiAodmVyc2VJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZlcnNlVXNmbSA9IFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMuY29udmVydFZlcnNlRGF0YVRvVVNGTSh1cGRhdGVkVmVyc2VPYmplY3RzKVxuICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkKCR7Y2FyZE51bX0pIC0gbmV3IFVTRk0gZm9yIGNhcmQ6fSAtICR7bmV3VmVyc2VVc2ZtLnN1YnN0cmluZygwLCAxMDApfWApXG4gICAgICAgIGNvbnN0IG9sZFZlcnNlID0gdmVyc2VDaHVua3NbdmVyc2VJbmRleF1cbiAgICAgICAgY29uc3QgdmVyc2VOdW1MZW4gPSAocmVmPy52ZXJzZSArICcnKS5sZW5ndGhcbiAgICAgICAgdmVyc2VDaHVua3NbdmVyc2VJbmRleF0gPSBvbGRWZXJzZS5zdWJzdHJpbmcoMCwgdmVyc2VOdW1MZW4gKyAxKSArIG5ld1ZlcnNlVXNmbVxuICAgICAgICBjb25zdCBuZXdDaGFwdGVyID0gdmVyc2VDaHVua3Muam9pbignXFxcXHYgJylcbiAgICAgICAgY2hhcHRlckNodW5rc1tjaGFwdGVySW5kZXhdID0gbmV3Q2hhcHRlclxuICAgICAgICBuZXdVc2ZtID0gY2hhcHRlckNodW5rcy5qb2luKCdcXFxcYyAnKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3VXNmbVxuICB9XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gZm9yIGVhY2ggdW5zYXZlZCBjaGFuZ2UsIGNhbGwgaW50byBzY3JpcHR1cmVQYW5lIHRvIGdldCBsYXRlc3QgY2hhbmdlcyBmb3IgdmVyc2UgdG8gc2F2ZVxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldFJlYWR5Rm9yU2F2ZSgpIHtcbiAgICAgIGlmIChzYXZlQ2xpY2tlZCkge1xuICAgICAgICBsZXQgY3JlYXRlRWRpdEJyYW5jaCA9ICFfdXNpbmdVc2VyQnJhbmNoXG5cbiAgICAgICAgaWYgKCFjcmVhdGVFZGl0QnJhbmNoKSB7IC8vIGlmIGFscmVhZHkgdXNpbmcgdGhlIHVzZXIgYnJhbmNoXG4gICAgICAgICAgaWYgKHdvcmtpbmdSZXNvdXJjZUJyYW5jaCAhPT0gdXNlckVkaXRCcmFuY2hOYW1lKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIHN0YXRlIGNvbmZsaWN0IC0gc2hvdWxkIGJlIGluIHVzZXIgYnJhbmNoICR7dXNlckVkaXRCcmFuY2hOYW1lfSwgYnV0IGFjdHVhbGx5IHVzaW5nICR7d29ya2luZ1Jlc291cmNlQnJhbmNofWApXG4gICAgICAgICAgICBjcmVhdGVFZGl0QnJhbmNoID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gYWxyZWFkeSB1c2luZyBlZGl0IGJyYW5jaDogJHt3b3JraW5nUmVzb3VyY2VCcmFuY2h9YClcbiAgICAgICAgICAgIHNldFN0YXRlKHsgZWRpdEJyYW5jaFJlYWR5OiB0cnVlIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNyZWF0ZUVkaXRCcmFuY2gpIHsgLy8gaWYgbm90IHlldCB1c2luZyB0aGUgdXNlciBicmFuY2gsIGNyZWF0ZSBpdFxuICAgICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQgLSBjcmVhdGluZyBlZGl0IGJyYW5jaGApXG4gICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgZWRpdEJyYW5jaFJlYWR5OiBmYWxzZSxcbiAgICAgICAgICAgIHJlYWR5Rm9yRmV0Y2g6IGZhbHNlLFxuICAgICAgICAgICAgc2hhOiBudWxsLFxuICAgICAgICAgIH0pIC8vIHdlIHdpbGwgbmVlZCBhIG5ldyBzaGEgZm9yIGJvb2svYnJhbmNoXG5cbiAgICAgICAgICBjb25zdCBicmFuY2ggPSBhd2FpdCBzdGFydEVkaXRCcmFuY2goKVxuXG4gICAgICAgICAgaWYgKGJyYW5jaCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGVkaXQgYnJhbmNoIGNyZWF0ZWRgKVxuICAgICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBlZGl0QnJhbmNoUmVhZHk6IHRydWUsXG4gICAgICAgICAgICAgIHJlYWR5Rm9yRmV0Y2g6IHRydWUsXG4gICAgICAgICAgICAgIHJlZjogYnJhbmNoLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGZhaWxlZCB0byBjcmVhdGUgZWRpdCBicmFuY2hgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQgLSBnZXR0aW5nIHZlcnNlIGNoYW5nZXNgKVxuICAgICAgICBjb25zdCB1bnNhdmVkQ2FyZEluZGljZXMgPSBPYmplY3Qua2V5cyh1bnNhdmVkQ2hhbmdlc0xpc3QpXG5cbiAgICAgICAgaWYgKHVuc2F2ZWRDYXJkSW5kaWNlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgbGV0IGJpYmxlVXNmbSA9IGNvcmUuZ2V0UmVzcG9uc2VEYXRhKHNjcmlwdHVyZUNvbmZpZz8uZmV0Y2hSZXNwb25zZSlcbiAgICAgICAgICBsZXQgbWVyZ2VGYWlsID0gZmFsc2VcbiAgICAgICAgICBsZXQgY2FyZE51bSA9IDBcblxuICAgICAgICAgIGZvciAoY29uc3QgY2FyZEluZGV4IG9mIHVuc2F2ZWRDYXJkSW5kaWNlcykge1xuICAgICAgICAgICAgY2FyZE51bSA9IHBhcnNlSW50KGNhcmRJbmRleClcbiAgICAgICAgICAgIGNvbnN0IHsgZ2V0Q2hhbmdlcywgc3RhdGUgfSA9IHVuc2F2ZWRDaGFuZ2VzTGlzdFtjYXJkTnVtXVxuXG4gICAgICAgICAgICBpZiAoZ2V0Q2hhbmdlcykge1xuICAgICAgICAgICAgICBsZXQgbmV3VXNmbVxuICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgcmVmLFxuICAgICAgICAgICAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHMsXG4gICAgICAgICAgICAgIH0gPSBnZXRDaGFuZ2VzKHN0YXRlKVxuXG4gICAgICAgICAgICAgIGlmICh1cGRhdGVkVmVyc2VPYmplY3RzICYmIGJpYmxlVXNmbSkgeyAvLyBqdXN0IHJlcGxhY2UgdmVyc2VcbiAgICAgICAgICAgICAgICBuZXdVc2ZtID0gbWVyZ2VWZXJzZU9iamVjdHNJbnRvQmlibGVVc2ZtKGJpYmxlVXNmbSwgcmVmLCB1cGRhdGVkVmVyc2VPYmplY3RzLCBjYXJkTnVtKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKG5ld1VzZm0pIHtcbiAgICAgICAgICAgICAgICBiaWJsZVVzZm0gPSBuZXdVc2ZtXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWVyZ2VGYWlsID0gdHJ1ZVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobWVyZ2VGYWlsKSB7IC8vIGlmIHdlIGZhaWxlZCB0byBtZXJnZSwgZmFsbGJhY2sgdG8gYnJ1dGUgZm9yY2UgdmVyc2Ugb2JqZWN0cyB0byBVU0ZNXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkKCR7Y2FyZE51bX0pIC0gdmVyc2Ugbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gaW5zZXJ0aW5nIHZlcnNlIG9iamVjdGApXG4gICAgICAgICAgICBsZXQgbmV3Qm9va0pzb25cblxuICAgICAgICAgICAgZm9yIChjb25zdCBjYXJkSW5kZXggb2YgdW5zYXZlZENhcmRJbmRpY2VzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNhcmROdW0gPSBwYXJzZUludChjYXJkSW5kZXgpXG4gICAgICAgICAgICAgIGNvbnN0IHsgZ2V0Q2hhbmdlcywgc3RhdGUgfSA9IHVuc2F2ZWRDaGFuZ2VzTGlzdFtjYXJkTnVtXVxuXG4gICAgICAgICAgICAgIGlmIChnZXRDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld1VzZm1cbiAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICBuZXdWZXJzZVRleHQsXG4gICAgICAgICAgICAgICAgICByZWYsXG4gICAgICAgICAgICAgICAgICB1cGRhdGVkVmVyc2VPYmplY3RzLFxuICAgICAgICAgICAgICAgIH0gPSBnZXRDaGFuZ2VzKHN0YXRlKVxuXG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRWZXJzZU9iamVjdHMgJiYgIW5ld1VzZm0pIHtcbiAgICAgICAgICAgICAgICAgIGxldCB0YXJnZXRWZXJzZU9iamVjdHNfID0gbnVsbFxuXG4gICAgICAgICAgICAgICAgICBpZiAocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdWZXJzZVRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHRhcmdldFZlcnNlT2JqZWN0cyB9ID0gQWxpZ25tZW50SGVscGVycy51cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZSh1cGRhdGVkVmVyc2VPYmplY3RzLCBuZXdWZXJzZVRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VmVyc2VPYmplY3RzXyA9IHRhcmdldFZlcnNlT2JqZWN0c1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFZlcnNlT2JqZWN0c18gPSB1cGRhdGVkVmVyc2VPYmplY3RzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbmV3Qm9va0pzb24gPSB0YXJnZXRWZXJzZU9iamVjdHNfICYmIHNjcmlwdHVyZUNvbmZpZz8udXBkYXRlVmVyc2UocmVmLmNoYXB0ZXIsIHJlZi52ZXJzZSwge3ZlcnNlT2JqZWN0czogdGFyZ2V0VmVyc2VPYmplY3RzX30pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJpYmxlVXNmbSA9IHVzZm1qcy50b1VTRk0obmV3Qm9va0pzb24sIHtmb3JjZWROZXdMaW5lczogdHJ1ZX0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gc2F2aW5nIG5ldyBVU0ZNOiAke2JpYmxlVXNmbS5zdWJzdHJpbmcoMCwgMTAwKX0uLi5gKVxuICAgICAgICAgIHNldFN0YXRlKHtzYXZlQ29udGVudDogYmlibGVVc2ZtLCBzdGFydFNhdmU6IHRydWUsIHNhdmVDbGlja2VkOiBmYWxzZX0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRSZWFkeUZvclNhdmUoKVxuICB9LCBbc2F2ZUNsaWNrZWRdKVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgeyBjaGFwdGVyIH0gPSBfcmVmZXJlbmNlIHx8IHt9XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBfdmVyc2VzRm9yUmVmID0gc2NyaXB0dXJlQ29uZmlnPy52ZXJzZXNGb3JSZWZcbiAgICBsZXQgbmV3U2VsZWN0aW9ucyA9IG5ldyBNYXAoKVxuICAgIGxldCB1cGRhdGVTZWxlY3Rpb25zID0gZmFsc2VcbiAgICBjb25zdCBfbWFwID0gbmV3U2VsZWN0aW9uc1xuICAgIGNvbnN0IG9yaWdpbmFsQm9va0lkID0gb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cz8uYm9va0lkXG4gICAgY29uc3QgYm9va1ZlcnNlT2JqZWN0ID0gb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cz8uY2hhcHRlcnNcbiAgICBsZXQgbmV3U2VsZWN0ZWRRdW90ZSA9IG51bGxcblxuICAgIC8vIGlmIHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBzZWxlY3Rpb25zXG4gICAgaWYgKF92ZXJzZXNGb3JSZWY/Lmxlbmd0aCAmJlxuICAgICAgYm9va1ZlcnNlT2JqZWN0ICYmXG4gICAgICAoYm9va0lkID09PSBvcmlnaW5hbEJvb2tJZCkgJiZcbiAgICAgIGJvb2tWZXJzZU9iamVjdFtjaGFwdGVyXSAmJiAvLyB3ZSBuZWVkIHRvIGhhdmUgZGF0YSBmb3IgY2hhcHRlclxuICAgICAgc2VsZWN0ZWRRdW90ZT8ucXVvdGVcbiAgICApIHtcbiAgICAgIC8vIGlmIHF1b3RlIGlzIGRpZmZlcmVudCB0aGFuIGxhc3RcbiAgICAgIGlmICghaXNFcXVhbChsYXN0U2VsZWN0ZWRRdW90ZSwgc2VsZWN0ZWRRdW90ZSkgfHxcbiAgICAgICAgIWlzRXF1YWwodmVyc2VzRm9yUmVmLCBfdmVyc2VzRm9yUmVmKSkge1xuICAgICAgICBjb25zdCBvcmlnaW5hbFZlcnNlcyA9IHt9XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGUgPSB7fSAvLyBrZWVwIHRyYWNrIG9mIHZlcnNlIHN1YnN0aXR1dGlvbnNcbiAgICAgICAgbGV0IHN0YXJ0VmVyc2UgPSBfdmVyc2VzRm9yUmVmWzBdLnZlcnNlXG5cbiAgICAgICAgaWYgKHR5cGVvZiBzdGFydFZlcnNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHN0YXJ0VmVyc2UgPSBwYXJzZUludChzdGFydFZlcnNlKVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxhc3RWZXJzZSA9IHN0YXJ0VmVyc2VcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IF92ZXJzZXNGb3JSZWYubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdmVyc2VSZWYgPSBfdmVyc2VzRm9yUmVmW2ldXG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgY2hhcHRlcixcbiAgICAgICAgICAgIHZlcnNlLFxuICAgICAgICAgIH0gPSB2ZXJzZVJlZlxuICAgICAgICAgIC8vIFRSSUNLWSAtIHdlIHJlbWFwIHZlcnNlcyBpbiByZWZlcmVuY2UgcmFuZ2UgdG8gYSBsaW5lYXIgc2VyaWVzIG9mIHZlcnNlcyBzbyB2ZXJzZSBzcGFucyBkb24ndCBjaG9rZSBnZXRRdW90ZU1hdGNoZXNJbkJvb2tSZWZcbiAgICAgICAgICBsZXQgX3ZlcnNlID0gc3RhcnRWZXJzZSArIGlcbiAgICAgICAgICBsYXN0VmVyc2UgPSBfdmVyc2VcbiAgICAgICAgICBzdWJzdGl0dXRlW2Ake2NoYXB0ZXJ9OiR7X3ZlcnNlfWBdID0gYCR7Y2hhcHRlcn06JHt2ZXJzZX1gXG5cbiAgICAgICAgICBpZiAoIW9yaWdpbmFsVmVyc2VzW2NoYXB0ZXJdKSB7XG4gICAgICAgICAgICBvcmlnaW5hbFZlcnNlc1tjaGFwdGVyXSA9IHt9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHZlcnNlT2JqZWN0cyA9IFtdXG5cbiAgICAgICAgICBpZiAoKHR5cGVvZiB2ZXJzZSA9PT0gJ3N0cmluZycpICYmICh2ZXJzZS5pbmNsdWRlcygnLScpKSkge1xuICAgICAgICAgICAgY29uc3QgdmVyc2VzID0gZ2V0VmVyc2VzKGJvb2tWZXJzZU9iamVjdCwgYCR7Y2hhcHRlcn06JHt2ZXJzZX1gKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZlcnNlSXRlbSBvZiB2ZXJzZXMpIHtcbiAgICAgICAgICAgICAgY29uc3Qgdm8gPSB2ZXJzZUl0ZW0udmVyc2VEYXRhLnZlcnNlT2JqZWN0c1xuICAgICAgICAgICAgICB2ZXJzZU9iamVjdHMgPSB2ZXJzZU9iamVjdHMuY29uY2F0KHZvKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2ZXJzZU9iamVjdHMgPSBib29rVmVyc2VPYmplY3RbY2hhcHRlcl1bdmVyc2VdPy52ZXJzZU9iamVjdHNcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmVyc2VPYmplY3RzKSB7XG4gICAgICAgICAgICB2ZXJzZU9iamVjdHMgPSBjbGVhbnVwVmVyc2VPYmplY3RzKHZlcnNlT2JqZWN0cylcbiAgICAgICAgICAgIG9yaWdpbmFsVmVyc2VzW2NoYXB0ZXJdW192ZXJzZV0gPSB7IHZlcnNlT2JqZWN0cyB9XG4gICAgICAgICAgICBfbWFwLnNldChgJHtjaGFwdGVyfToke3ZlcnNlfWAsIHZlcnNlT2JqZWN0cylcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjcmVhdGUgbmV3IHJlZmVyZW5jZSByYW5nZSBmb3IgbmV3IGxpbmVhciB2ZXJzZSByYW5nZVxuICAgICAgICBjb25zdCBbY2hhcHRlcl0gPSBzZWxlY3RlZFF1b3RlPy5yZWZlcmVuY2U/LnNwbGl0KCc6JylcbiAgICAgICAgbGV0IHN1YlJlZiA9IGAke2NoYXB0ZXJ9OiR7c3RhcnRWZXJzZX1gXG5cbiAgICAgICAgaWYgKGxhc3RWZXJzZSAhPSBzdGFydFZlcnNlKSB7XG4gICAgICAgICAgc3ViUmVmICs9IGAtJHtsYXN0VmVyc2V9YFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcXVvdGVNYXRjaGVzID0gZ2V0UXVvdGVNYXRjaGVzSW5Cb29rUmVmKHtcbiAgICAgICAgICBib29rT2JqZWN0OiBvcmlnaW5hbFZlcnNlcyxcbiAgICAgICAgICByZWY6IHN1YlJlZixcbiAgICAgICAgICBxdW90ZTogc2VsZWN0ZWRRdW90ZT8ucXVvdGUsXG4gICAgICAgICAgb2NjdXJyZW5jZTogc2VsZWN0ZWRRdW90ZT8ub2NjdXJyZW5jZSxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBzZWxlY3Rpb25zID0gbmV3IE1hcCgpXG5cbiAgICAgICAgaWYgKHF1b3RlTWF0Y2hlcz8uc2l6ZSkge1xuICAgICAgICAgIHF1b3RlTWF0Y2hlcy5mb3JFYWNoKCh3b3Jkcywga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBfa2V5ID0gc3Vic3RpdHV0ZVtrZXldXG5cbiAgICAgICAgICAgIHNlbGVjdGlvbnMuc2V0KF9rZXksIHdvcmRzLm1hcCh3b3JkID0+IChcbiAgICAgICAgICAgICAgeyAuLi53b3JkLCB0ZXh0OiBjb3JlLm5vcm1hbGl6ZVN0cmluZyh3b3JkLnRleHQpIH1cbiAgICAgICAgICAgICkpKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgbmV3U2VsZWN0aW9ucyA9IHNlbGVjdGlvbnNcbiAgICAgICAgbmV3U2VsZWN0ZWRRdW90ZSA9IHNlbGVjdGVkUXVvdGVcbiAgICAgICAgdXBkYXRlU2VsZWN0aW9ucyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBuZXdTdGF0ZTogYW55ID0ge31cblxuICAgIC8vIHVwZGF0ZSBzdGF0ZXMgdGhhdCBoYXZlIGNoYW5nZWRcbiAgICBpZiAoIWFyZU1hcHNUaGVTYW1lKHZlcnNlT2JqZWN0c01hcCwgX21hcCkpIHtcbiAgICAgIG5ld1N0YXRlLnZlcnNlT2JqZWN0c01hcCA9IF9tYXBcbiAgICB9XG5cbiAgICBjb25zdCBib29rc05vdFNhbWUgPSByZWZlcmVuY2U/LnByb2plY3RJZCAhPT0gY3VycmVudFJlZmVyZW5jZT8ucHJvamVjdElkXG5cbiAgICBpZiAoYm9va3NOb3RTYW1lIHx8ICFhcmVWZXJzZXNTYW1lKHZlcnNlc0ZvclJlZiwgX3ZlcnNlc0ZvclJlZikpIHtcbiAgICAgIG5ld1N0YXRlLnZlcnNlc0ZvclJlZiA9IF92ZXJzZXNGb3JSZWZcbiAgICAgIG5ld1N0YXRlLmxhc3RTZWxlY3RlZFF1b3RlID0gbmV3U2VsZWN0ZWRRdW90ZVxuICAgICAgbmV3U3RhdGUuc2VsZWN0aW9ucyA9IG5ld1NlbGVjdGlvbnNcbiAgICB9XG5cbiAgICBpZiAobmV3U2VsZWN0ZWRRdW90ZSkge1xuICAgICAgbmV3U3RhdGUubGFzdFNlbGVjdGVkUXVvdGUgPSBuZXdTZWxlY3RlZFF1b3RlXG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZVNlbGVjdGlvbnMpIHtcbiAgICAgIGlmICghYXJlTWFwc1RoZVNhbWUoc2VsZWN0aW9ucyB8fCAobmV3IE1hcCgpKSwgbmV3U2VsZWN0aW9ucykpIHtcbiAgICAgICAgbmV3U3RhdGUuc2VsZWN0aW9ucyA9IG5ld1NlbGVjdGlvbnNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMobmV3U3RhdGUpLmxlbmd0aCkge1xuICAgICAgc2V0U3RhdGUobmV3U3RhdGUpXG4gICAgfVxuICB9LCBbb3duZXIsIHJlc291cmNlSWQsIGJvb2tJZCwgbGFuZ3VhZ2VJZF8sIHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmLCBvcmlnaW5hbFNjcmlwdHVyZUJvb2tPYmplY3RzLCBzZWxlY3RlZFF1b3RlXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBjbGVhciBzZXR0aW5ncyBvbiB2ZXJzZSBjaGFuZ2VcbiAgICBzZXRTdGF0ZSh7XG4gICAgICB2ZXJzZXNBbGlnbm1lbnRTdGF0dXM6IG51bGwsXG4gICAgICB1bnNhdmVkQ2hhbmdlc0xpc3Q6IHt9LFxuICAgICAgaGF2ZVVuc2F2ZWRDaGFuZ2VzOiBmYWxzZSxcbiAgICB9KVxuICB9LCBbX3JlZmVyZW5jZV0pXG5cbiAgY29uc3QgdXBkYXRlVmVyc2VzQWxpZ25tZW50U3RhdHVzID0gKHJlZmVyZW5jZSwgYWxpZ25lZCkgPT4ge1xuICAgIHNldFN0YXRlXyhwcmV2U3RhdGUgPT4gKHtcbiAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgIHZlcnNlc0FsaWdubWVudFN0YXR1czogeyAuLi5wcmV2U3RhdGUudmVyc2VzQWxpZ25tZW50U3RhdHVzLCBbYCR7cmVmZXJlbmNlLmNoYXB0ZXJ9OiR7cmVmZXJlbmNlLnZlcnNlfWBdOiBhbGlnbmVkIH0sXG4gICAgfSkpXG4gIH1cblxuICBsZXQgX3ZlcnNlc0ZvclJlZiA9IHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoX3ZlcnNlc0ZvclJlZj8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCB7IHJlZmVyZW5jZSwgcmVzb3VyY2VMaW5rIH0gPSBzY3JpcHR1cmVDb25maWcgfHwge31cbiAgICAgIGNvbnNvbGUubG9nKGBTY3JpcHR1cmVDYXJkLl92ZXJzZXNGb3JSZWYgY2hhbmdlZGAsIHsgcmVmZXJlbmNlLCByZXNvdXJjZUxpbmsgfSlcbiAgICB9XG4gIH0sIFtfdmVyc2VzRm9yUmVmXSlcblxuICBpZiAoIV92ZXJzZXNGb3JSZWY/Lmxlbmd0aCkgeyAvLyBpZiBlbXB0eSBvZiByZWZlcmVuY2VzLCBjcmVhdGUgc2luZ2xlIGVtcHR5IHJlZmVyZW5jZVxuICAgIF92ZXJzZXNGb3JSZWYgPSBbeyAuLi5yZWZlcmVuY2UgfV1cbiAgfVxuXG4gIGNvbnN0IHJlbmRlcmVkU2NyaXB0dXJlUGFuZXMgPSBfdmVyc2VzRm9yUmVmPy5tYXAoKF9jdXJyZW50VmVyc2VEYXRhLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGluaXRpYWxWZXJzZU9iamVjdHMgPSBfY3VycmVudFZlcnNlRGF0YT8udmVyc2VEYXRhPy52ZXJzZU9iamVjdHMgfHwgW11cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgeyBjaGFwdGVyLCB2ZXJzZSB9ID0gX2N1cnJlbnRWZXJzZURhdGEgfHwge31cbiAgICBjb25zdCBwcm9qZWN0SWQgPSBjdXJyZW50UmVmZXJlbmNlPy5wcm9qZWN0SWQgfHwgcmVmZXJlbmNlPy5wcm9qZWN0SWRcbiAgICBjb25zdCBfcmVmZXJlbmNlID0ge1xuICAgICAgLi4uX3ZlcnNlc0ZvclJlZixcbiAgICAgIGNoYXB0ZXIsXG4gICAgICB2ZXJzZSxcbiAgICAgIHByb2plY3RJZCxcbiAgICB9XG4gICAgY29uc3QgX3NjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWcgPSB7XG4gICAgICAuLi5zY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnLFxuICAgICAgY3VycmVudEluZGV4OiBpbmRleCxcbiAgICAgIGluaXRpYWxWZXJzZU9iamVjdHMsXG4gICAgICByZWZlcmVuY2U6IF9yZWZlcmVuY2UsXG4gICAgICBpc05ld1Rlc3RhbWVudCxcbiAgICB9XG5cbiAgICBsZXQgaXNWZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50ID0gZmFsc2VcblxuICAgIGlmICh2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50KSB7XG4gICAgICBpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQgPSB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50LmNoYXB0ZXIgPT0gY2hhcHRlciAmJiB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50LnZlcnNlID09IHZlcnNlXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTY3JpcHR1cmVQYW5lXG4gICAgICAgIHsuLi5zY3JpcHR1cmVDb25maWd9XG4gICAgICAgIGNvbnRlbnRTdHlsZT17Y29udGVudFN0eWxlfVxuICAgICAgICBjdXJyZW50SW5kZXg9e2luZGV4fVxuICAgICAgICBkZXRlcm1pbmluZ0JyYW5jaD17IXJlYWR5Rm9yRmV0Y2h9XG4gICAgICAgIGRpcmVjdGlvbj17ZGlyZWN0aW9ufVxuICAgICAgICBkaXNhYmxlV29yZFBvcG92ZXI9e2Rpc2FibGVXb3JkUG9wb3Zlcl99XG4gICAgICAgIGZvbnRTaXplPXtmb250U2l6ZX1cbiAgICAgICAgZ2V0TGV4aWNvbkRhdGE9e2dldExleGljb25EYXRhfVxuICAgICAgICBpc05UPXtpc05UX31cbiAgICAgICAgaXNWZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50PXtpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnR9XG4gICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgIG9uQWxpZ25tZW50RmluaXNoPXsoKSA9PiBzZXRTdGF0ZSh7IHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQ6IG51bGwgfSl9XG4gICAgICAgIG9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHM9e29yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHN9XG4gICAgICAgIHJlZlN0eWxlPXtyZWZTdHlsZX1cbiAgICAgICAgcmVmZXJlbmNlPXtfcmVmZXJlbmNlfVxuICAgICAgICBzYXZpbmc9e3N0YXJ0U2F2ZX1cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBzY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnPXtfc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZ31cbiAgICAgICAgc2V0V29yZEFsaWduZXJTdGF0dXM9e3NldFdvcmRBbGlnbmVyU3RhdHVzfVxuICAgICAgICBzZXJ2ZXI9e3NlcnZlcn1cbiAgICAgICAgdHJhbnNsYXRlPXt0cmFuc2xhdGV9XG4gICAgICAgIHVwZGF0ZVZlcnNlc0FsaWdubWVudFN0YXR1cz17dXBkYXRlVmVyc2VzQWxpZ25tZW50U3RhdHVzfVxuICAgICAgLz5cbiAgICApXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlQWxpZ25CdXR0b25DbGljayA9ICgpID0+IHtcbiAgICBpZiAodmVyc2VzRm9yUmVmPy5sZW5ndGggPiAxKSB7XG4gICAgICBzZXRTdGF0ZSh7IHNob3dBbGlnbm1lbnRQb3B1cDogdHJ1ZSB9KVxuICAgIH0gZWxzZSBpZiAodmVyc2VzRm9yUmVmPy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHNldFN0YXRlKHsgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudDogdmVyc2VzRm9yUmVmWzBdIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb25SZW5kZXJUb29sYmFyID0gKHsgaXRlbXMgfSkgPT4ge1xuICAgIGNvbnN0IG5ld0l0ZW1zID0gWy4uLml0ZW1zXVxuXG4gICAgbGV0IGFsbFZlcnNlc0FsaWduZWQgPSBmYWxzZVxuXG4gICAgLy8gQ2hlY2sgaWYgYWxsIHZhbHVlcyBpbiB2ZXJzZXNBbGlnbm1lbnRTdGF0dXMgYXJlIHRydWVcbiAgICBpZiAodmVyc2VzQWxpZ25tZW50U3RhdHVzKSB7XG4gICAgICBhbGxWZXJzZXNBbGlnbmVkID0gT2JqZWN0LnZhbHVlcyh2ZXJzZXNBbGlnbm1lbnRTdGF0dXMpLmV2ZXJ5KGFsaWduU3RhdHVzID0+IGFsaWduU3RhdHVzID09PSB0cnVlKVxuICAgIH1cblxuICAgIGxldCBhbGlnbkljb24gPSBudWxsXG4gICAgbGV0IGFsaWduQnV0dG9uVGV4dCA9ICcnXG5cbiAgICBpZiAoYWxsVmVyc2VzQWxpZ25lZCkge1xuICAgICAgYWxpZ25JY29uID0gPFJ4TGluazIgaWQ9e2B2YWxpZF9pY29uXyR7cmVzb3VyY2VJZH1gfSBjb2xvcj0nI0JCQicvPlxuICAgICAgYWxpZ25CdXR0b25UZXh0ID0gJ0FsaWdubWVudCBpcyBWYWxpZCdcbiAgICB9IGVsc2Uge1xuICAgICAgYWxpZ25JY29uID0gPFJ4TGlua0JyZWFrMiBpZD17YGludmFsaWRfYWxpZ25tZW50X2ljb25fJHtyZXNvdXJjZUlkfWB9IGNvbG9yPScjMDAwJy8+XG4gICAgICBhbGlnbkJ1dHRvblRleHQgPSAnQWxpZ25tZW50IGlzIEludmFsaWQnXG4gICAgfVxuXG4gICAgaWYgKHNldFdvcmRBbGlnbmVyU3RhdHVzICYmIHJlc291cmNlSWQgIT09ICdPUklHSU5BTF9TT1VSQ0UnKSB7XG4gICAgICBuZXdJdGVtcy5wdXNoKFxuICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgIGlkPXtgYWxpZ25tZW50X2ljb25fJHtyZXNvdXJjZUlkfWB9XG4gICAgICAgICAga2V5PSdjaGVja2luZy1idXR0b24nXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlQWxpZ25CdXR0b25DbGlja31cbiAgICAgICAgICB0aXRsZT17YWxpZ25CdXR0b25UZXh0fVxuICAgICAgICAgIGFyaWEtbGFiZWw9e2FsaWduQnV0dG9uVGV4dH1cbiAgICAgICAgICBzdHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJyB9fVxuICAgICAgICA+XG4gICAgICAgICAge2FsaWduSWNvbn1cbiAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBuZXdJdGVtc1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0aW9uc0NvbnRleHRQcm92aWRlclxuICAgICAgc2VsZWN0aW9ucz17c2VsZWN0aW9uc31cbiAgICAgIG9uU2VsZWN0aW9ucz17bmV3U2VsZWN0aW9ucyA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdvblNlbGVjdGlvbnMnLCBuZXdTZWxlY3Rpb25zKVxuICAgICAgfX1cbiAgICAgIHF1b3RlPXtzZWxlY3RlZFF1b3RlPy5xdW90ZX1cbiAgICAgIG9jY3VycmVuY2U9e2ZpeE9jY3VycmVuY2Uoc2VsZWN0ZWRRdW90ZT8ub2NjdXJyZW5jZSl9XG4gICAgICB2ZXJzZU9iamVjdHNNYXA9e3ZlcnNlT2JqZWN0c01hcH1cbiAgICA+XG4gICAgICA8Q2FyZFxuICAgICAgICBpZD17YHNjcmlwdHVyZV9jYXJkXyR7Y2FyZE51bX1gfVxuICAgICAgICB0aXRsZT17c2NyaXB0dXJlTGFiZWx9XG4gICAgICAgIHNldHRpbmdzVGl0bGU9e3NjcmlwdHVyZVRpdGxlICsgJyBTZXR0aW5ncyd9XG4gICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgY2xhc3Nlcz17Y2xhc3Nlc31cbiAgICAgICAgaGVhZGVycz17aGVhZGVyc31cbiAgICAgICAgZmlsdGVycz17ZmlsdGVyc31cbiAgICAgICAgZm9udFNpemU9e2ZvbnRTaXplfVxuICAgICAgICBpdGVtSW5kZXg9e2l0ZW1JbmRleH1cbiAgICAgICAgc2V0RmlsdGVycz17c2V0RmlsdGVyc31cbiAgICAgICAgc2V0Rm9udFNpemU9e3NldEZvbnRTaXplfVxuICAgICAgICBzZXRJdGVtSW5kZXg9e3NldEl0ZW1JbmRleH1cbiAgICAgICAgbWFya2Rvd25WaWV3PXttYXJrZG93blZpZXd9XG4gICAgICAgIHNldE1hcmtkb3duVmlldz17c2V0TWFya2Rvd25WaWV3fVxuICAgICAgICBnZXRDdXN0b21Db21wb25lbnQ9e2dldFNjcmlwdHVyZVNlbGVjdG9yfVxuICAgICAgICBoaWRlTWFya2Rvd25Ub2dnbGVcbiAgICAgICAgb25NZW51Q2xvc2U9e29uTWVudUNsb3NlfVxuICAgICAgICBvbk1pbmltaXplPXtvbk1pbmltaXplID8gKCkgPT4gb25NaW5pbWl6ZShpZCkgOiBudWxsfVxuICAgICAgICBlZGl0YWJsZT17ZW5hYmxlRWRpdCB8fCBlbmFibGVBbGlnbm1lbnR9XG4gICAgICAgIHNhdmVkPXtzdGFydFNhdmUgfHwgIWhhdmVVbnNhdmVkQ2hhbmdlc31cbiAgICAgICAgb25TYXZlRWRpdD17KCkgPT4gc2V0U3RhdGUoeyBzYXZlQ2xpY2tlZDogdHJ1ZSB9KX1cbiAgICAgICAgb25SZW5kZXJUb29sYmFyPXtvblJlbmRlclRvb2xiYXJ9XG4gICAgICA+XG4gICAgICAgIDxkaXYgaWQ9XCJzY3JpcHR1cmUtcGFuZS1saXN0XCI+XG4gICAgICAgICAge3JlbmRlcmVkU2NyaXB0dXJlUGFuZXN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9DYXJkPlxuICAgICAgPFZlcnNlU2VsZWN0b3JQb3B1cFxuICAgICAgICByZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuICAgICAgICBvcGVuPXtzaG93QWxpZ25tZW50UG9wdXB9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFN0YXRlKHsgc2hvd0FsaWdubWVudFBvcHVwOiBmYWxzZSB9KX1cbiAgICAgICAgdmVyc2VzRm9yUmVmPXt2ZXJzZXNGb3JSZWZ9XG4gICAgICAgIHZlcnNlc0FsaWdubWVudFN0YXR1cz17dmVyc2VzQWxpZ25tZW50U3RhdHVzfVxuICAgICAgICBvblZlcnNlU2VsZWN0PXsodmVyc2UpID0+IHNldFN0YXRlKHtcbiAgICAgICAgICB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50OiB2ZXJzZSxcbiAgICAgICAgICBzaG93QWxpZ25tZW50UG9wdXA6IGZhbHNlXG4gICAgICAgIH0pfVxuICAgICAgLz5cbiAgICA8L1NlbGVjdGlvbnNDb250ZXh0UHJvdmlkZXI+XG4gIClcbn1cblxuU2NyaXB0dXJlQ2FyZC5wcm9wVHlwZXMgPSB7XG4gIC8qKiByZXBvIGJyYW5jaCBvciB0YWcgc3VjaCBhcyBtYXN0ZXIgKi9cbiAgYXBwUmVmOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKiBhdXRoZW50aWNhdGlvbiBpbmZvICovXG4gIGF1dGhlbnRpY2F0aW9uOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogaW5kZXggZm9yIGN1cnJlbnQgYm9vayAoZS5nLiAnMDEnIGZvciAnZ2VuJykqL1xuICBib29rSW5kZXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBzY3JpcHR1cmUgY2FyZCBudW1iZXIgKDAgdG8gMiBmb3IgZXhhbXBsZSkgKi9cbiAgY2FyZE51bTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAvKiogQ1NTIGNsYXNzZXMgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqIGlmIHRydWUgdGhlbiB3b3JkIGRhdGEgaG92ZXIgaXMgc2hvd24gKi9cbiAgZGlzYWJsZVdvcmRQb3BvdmVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqIGdldCBsYW5ndWFnZSBkZXRhaWxzICovXG4gIGdldExhbmd1YWdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAvKiogZnVuY3Rpb24gdG8gZ2V0IGxhdGVzdCBsZXhpY29uIGRhdGEgKi9cbiAgZ2V0TGV4aWNvbkRhdGE6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogb3B0aW9uYWwgdXJsIGZvciBncmVlayByZXBvICovXG4gIGdyZWVrUmVwb1VybDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIG9wdGlvbmFsIHVybCBmb3IgaGVicmV3IHJlcG8gKi9cbiAgaGVicmV3UmVwb1VybDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIG9wdGlvbmFsIGh0dHAgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIGZldGNoaW5nIHJlc291cmNlcywgZGVmYXVsdCBpcyAwICh2ZXJ5IGxvbmcgd2FpdCkgKi9cbiAgaHR0cENvbmZpZzogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqIGh0bWwgaWRlbnRpZmllciB0byB1c2UgZm9yIGNhcmQgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBtZXRob2QgdG8gZGV0ZXJtaW5lIGlmIE5UIG9yIE9UICovXG4gIGlzTlQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKiB1c2VyLW5hbWUgKi9cbiAgbG9nZ2VkSW5Vc2VyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogZnVuY3Rpb24gdG8gbWluaW1pemUgdGhlIGNhcmQgKG9wdGlvbmFsKSAqL1xuICBvbk1pbmltaXplOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIG9wdGlvbmFsIGNhbGxiYWNrIGlmIGVycm9yIGxvYWRpbmcgcmVzb3VyY2UsIHBhcmFtZXRlciByZXR1cm5lZCBhcmU6XG4gICAqICAgICh7c3RyaW5nfSBlcnJvck1lc3NhZ2UsIHtib29sZWFufSBpc0FjY2Vzc0Vycm9yLCB7b2JqZWN0fSByZXNvdXJjZVN0YXR1cylcbiAgICogICAgICAtIGlzQWNjZXNzRXJyb3IgLSBpcyB0cnVlIGlmIHRoaXMgd2FzIGFuIGVycm9yIHRyeWluZyB0byBhY2Nlc3MgZmlsZVxuICAgKiAgICAgIC0gcmVzb3VyY2VTdGF0dXMgLSBpcyBvYmplY3QgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IHByb2JsZW1zIGZldGNoaW5nIHJlc291cmNlICovXG4gIG9uUmVzb3VyY2VFcnJvcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiB0aGUgb3JpZ2luYWwgc2NyaXB0dXJlIGJvb2tPYmplY3RzIGZvciBjdXJyZW50IGJvb2sgKi9cbiAgb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0czogUHJvcFR5cGVzLm9iamVjdCxcbiAgcmVmZXJlbmNlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKiBwcm9qZWN0SWQgKGJvb2tJRCkgdG8gdXNlICovXG4gICAgcHJvamVjdElkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgLyoqIGN1cnJlbnQgY2hhcHRlciBudW1iZXIgKi9cbiAgICBjaGFwdGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkuaXNSZXF1aXJlZCxcbiAgICAvKiogY3VycmVudCB2ZXJzZSBudW1iZXIgKi9cbiAgICB2ZXJzZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLmlzUmVxdWlyZWQsXG4gIH0pLFxuICAvKiogcmVzb3VyY2Ugb2JqZWN0ICovXG4gIHJlc291cmNlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKiByZXNvdXJjZSBsYW5ndWFnZSB0byB1c2UgKi9cbiAgICBsYW5ndWFnZUlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgLyoqIHJlcG8gb3duZXIgc3VjaCBhcyB1bmZvbGRpbmdXb3JkICovXG4gICAgb3duZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVzb3VyY2VJZCB0byB1c2UgKGUuZy4gdWdudCkgKi9cbiAgICByZXNvdXJjZUlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgLyoqIHJlcG8gb3duZXIgZm9yIG9yaWdpbmFsIGxhbmd1YWdlcyBzdWNoIGFzIHVuZm9sZGluZ1dvcmQgKi9cbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgfSksXG4gIC8qKiByZXNvdXJjZUxpbmsgKi9cbiAgcmVzb3VyY2VMaW5rOiBQcm9wVHlwZXMuYW55LFxuICAvKipUaGlzIGlzIGN1cnJlbnRseSBzZWxlY3RlZCBxdW90ZSAqL1xuICBzZWxlY3RlZFF1b3RlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogc2VydmVyIChlLmcuICdodHRwczovL2dpdC5kb29yNDMub3JnJykgKi9cbiAgc2VydmVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKiBmdW5jdGlvbiB0byBzZXQgc3RhdGUgaW4gYXBwIHRoYXQgdGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcyAqL1xuICBzZXRTYXZlZENoYW5nZXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogY2FsbGJhY2sgdG8gdXBkYXRlIHdvcmQgYWxpZ25lciBzdGF0ZSAqL1xuICBzZXRXb3JkQWxpZ25lclN0YXR1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiB0aXRsZSBmb3Igc2NyaXB0dXJlIGNhcmQgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqIG9wdGlvbmFsIGZ1bmN0aW9uIGZvciBsb2NhbGl6YXRpb24gKi9cbiAgdHJhbnNsYXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIHVzZSBtZXRob2QgZm9yIHVzaW5nIGxvY2FsIHN0b3JhZ2Ugc3BlY2lmaWMgZm9yIHVzZXIgKi9cbiAgdXNlVXNlckxvY2FsU3RvcmFnZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbn1cbiJdfQ==
|
|
@@ -32,6 +32,7 @@ import { CONTENT_NOT_FOUND_ERROR, ERROR_STATE, INITIALIZED_STATE, INVALID_MANIFE
|
|
|
32
32
|
import { getVerses } from 'bible-reference-range';
|
|
33
33
|
import * as isEqual from 'deep-equal';
|
|
34
34
|
import { cleanupVerseObjects, getResourceLink } from '../utils/ScriptureSettings';
|
|
35
|
+
import { debugIsEqual } from '../utils/maps.js';
|
|
35
36
|
import { ServerConfig, ScriptureResource, ScriptureReference } from '../types';
|
|
36
37
|
import { parseResourceManifest } from './parseResourceManifest';
|
|
37
38
|
|
|
@@ -116,7 +117,8 @@ export function useScripture(_ref) {
|
|
|
116
117
|
fetchedBook: '',
|
|
117
118
|
fetchParams: {
|
|
118
119
|
resourceLink: '',
|
|
119
|
-
reference: {}
|
|
120
|
+
reference: {},
|
|
121
|
+
config: {}
|
|
120
122
|
},
|
|
121
123
|
ignoreSha: null,
|
|
122
124
|
initialized: false,
|
|
@@ -193,7 +195,8 @@ export function useScripture(_ref) {
|
|
|
193
195
|
|
|
194
196
|
var newFetchParams = {
|
|
195
197
|
resourceLink: resourceLink,
|
|
196
|
-
reference: bookRef
|
|
198
|
+
reference: bookRef,
|
|
199
|
+
config: config
|
|
197
200
|
};
|
|
198
201
|
|
|
199
202
|
if (!isEqual(newFetchParams, fetchParams)) {
|
|
@@ -214,7 +217,7 @@ export function useScripture(_ref) {
|
|
|
214
217
|
};
|
|
215
218
|
|
|
216
219
|
var _resourceResults = useRsrc({
|
|
217
|
-
config: config,
|
|
220
|
+
config: fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.config,
|
|
218
221
|
reference: fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.reference,
|
|
219
222
|
resourceLink: fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink,
|
|
220
223
|
options: options
|
|
@@ -244,8 +247,12 @@ export function useScripture(_ref) {
|
|
|
244
247
|
|
|
245
248
|
var newState = {
|
|
246
249
|
resourceState: currentResourceState
|
|
247
|
-
};
|
|
248
|
-
|
|
250
|
+
};
|
|
251
|
+
console.log("useScripture content changed", {
|
|
252
|
+
content: _content,
|
|
253
|
+
fetchParams: fetchParams,
|
|
254
|
+
fetchResponse: _fetchResponse
|
|
255
|
+
}); // TRICKY - responses from server can come back from previous requests. So we make sure this response is for the current requested book
|
|
249
256
|
|
|
250
257
|
var sameBook = false; // @ts-ignore
|
|
251
258
|
|
|
@@ -272,17 +279,27 @@ export function useScripture(_ref) {
|
|
|
272
279
|
var fetchingBranch = getBranchName(fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink);
|
|
273
280
|
|
|
274
281
|
if (fetchedBranch !== fetchingBranch) {
|
|
275
|
-
|
|
282
|
+
console.log("useScripture invalid branch, expected branch is ".concat(fetchingBranch, ", but fetchedBranch is ").concat(fetchedBranch), {
|
|
283
|
+
sha: sha,
|
|
284
|
+
url: url
|
|
285
|
+
});
|
|
276
286
|
sameBook = false;
|
|
277
287
|
}
|
|
278
288
|
}
|
|
279
289
|
|
|
280
290
|
if (ignoreSha === sha) {
|
|
281
|
-
|
|
291
|
+
console.log("useScripture - the sha is the same as the ignore sha ".concat(sha), {
|
|
292
|
+
sha: sha,
|
|
293
|
+
url: url
|
|
294
|
+
});
|
|
282
295
|
sameBook = false;
|
|
283
296
|
}
|
|
284
297
|
|
|
285
|
-
if (!sameBook) {
|
|
298
|
+
if (!sameBook) {
|
|
299
|
+
console.log("useScripture invalid book, expectedBookId is ".concat(expectedBookId, ", but received book name ").concat(_fetchedBook), {
|
|
300
|
+
sha: sha,
|
|
301
|
+
url: url
|
|
302
|
+
});
|
|
286
303
|
} else {
|
|
287
304
|
newState['bookObjects'] = _content;
|
|
288
305
|
newState['versesForRef'] = updateVersesForRef(_content);
|
|
@@ -435,6 +452,9 @@ export function useScripture(_ref) {
|
|
|
435
452
|
} // @ts-ignore
|
|
436
453
|
|
|
437
454
|
}, [currentBookRef]);
|
|
455
|
+
useEffect(function () {
|
|
456
|
+
console.log("useScripture book ref changed to ".concat(_bookId, ", ").concat(resourceLink_)); // @ts-ignore
|
|
457
|
+
}, [_bookId]);
|
|
438
458
|
useEffect(function () {
|
|
439
459
|
var expectedBookId = _bookId || '';
|
|
440
460
|
var fetchedBookSame = fetchedBook && fetchedBook === expectedBookId;
|
|
@@ -470,4 +490,4 @@ export function useScripture(_ref) {
|
|
|
470
490
|
versesForRef: versesForRef
|
|
471
491
|
};
|
|
472
492
|
}
|
|
473
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JpcHR1cmUudHN4Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZVN0YXRlIiwiY29yZSIsInVzZVJzcmMiLCJDT05URU5UX05PVF9GT1VORF9FUlJPUiIsIkVSUk9SX1NUQVRFIiwiSU5JVElBTElaRURfU1RBVEUiLCJJTlZBTElEX01BTklGRVNUX0VSUk9SIiwiTE9BRElOR19TVEFURSIsIk1BTklGRVNUX05PVF9MT0FERURfRVJST1IiLCJTQ1JJUFRVUkVfTk9UX0xPQURFRF9FUlJPUiIsImdldFZlcnNlcyIsImlzRXF1YWwiLCJjbGVhbnVwVmVyc2VPYmplY3RzIiwiZ2V0UmVzb3VyY2VMaW5rIiwiU2VydmVyQ29uZmlnIiwiU2NyaXB0dXJlUmVzb3VyY2UiLCJTY3JpcHR1cmVSZWZlcmVuY2UiLCJwYXJzZVJlc291cmNlTWFuaWZlc3QiLCJnZXRCcmFuY2hOYW1lIiwicmVzb3VyY2VMaW5rIiwiYnJhbmNoIiwicGFydHMiLCJzcGxpdCIsImxlbmd0aCIsIl9wYXJ0cyIsImdldFZlcnNlc0ZvclJlZlN0ciIsInJlZlN0ciIsImJvb2tPYmplY3RzIiwibGFuZ3VhZ2VJZCIsInZlcnNlcyIsImNoYXB0ZXJzIiwibWFwIiwidmVyc2UiLCJ2ZXJzZURhdGEiLCJ2ZXJzZU9iamVjdHMiLCJ2ZXJzZU9iamVjdHNfIiwib2NjdXJyZW5jZUluamVjdFZlcnNlT2JqZWN0cyIsImdldFZlcnNlc0ZvclJlZiIsInJlZmVyZW5jZSIsImNoYXB0ZXIiLCJ1c2VTY3JpcHR1cmUiLCJjb25maWciLCJyZWFkeUZvckZldGNoIiwicmVzb3VyY2VfIiwicmVzb3VyY2UiLCJyZXNvdXJjZUxpbmtfIiwid2hvbGVCb29rIiwiZmV0Y2hlZEJvb2siLCJmZXRjaFBhcmFtcyIsImlnbm9yZVNoYSIsImluaXRpYWxpemVkIiwiZmV0Y2hlZCIsInJlc291cmNlU3RhdGUiLCJiaWJsZUpzb24iLCJtYXRjaGVkVmVyc2UiLCJjb250ZW50IiwibG9hZGluZ1Jlc291cmNlIiwibG9hZGluZ0NvbnRlbnQiLCJmZXRjaFJlc3BvbnNlIiwidmVyc2VzRm9yUmVmIiwic3RhdGUiLCJzZXRTdGF0ZV8iLCJfYm9va0lkIiwicHJvamVjdElkIiwic2V0U3RhdGUiLCJuZXdTdGF0ZSIsInByZXZTdGF0ZSIsImNvbnNvbGUiLCJsb2ciLCJvd25lciIsInJlZiIsInJlZl8iLCJyZXNvdXJjZUlkIiwiYm9va1JlZiIsIm5ld0ZldGNoUGFyYW1zIiwib3B0aW9ucyIsImdldEJpYmxlSnNvbiIsIl9yZXNvdXJjZVJlc3VsdHMiLCJjdXJyZW50UmVzb3VyY2VTdGF0ZSIsInNhbWVCb29rIiwiZXhwZWN0ZWRCb29rSWQiLCJuYW1lIiwiZXh0IiwidG9Mb3dlckNhc2UiLCJpbmNsdWRlcyIsInNoYSIsImRhdGEiLCJ1cmwiLCJmZXRjaGVkQnJhbmNoIiwiZmV0Y2hpbmdCcmFuY2giLCJ1cGRhdGVWZXJzZXNGb3JSZWYiLCJ0aXRsZSIsInZlcnNpb24iLCJsb2FkaW5nIiwiY29udGVudE5vdEZvdW5kRXJyb3IiLCJzY3JpcHR1cmVOb3RMb2FkZWRFcnJvciIsIm1hbmlmZXN0Tm90Rm91bmRFcnJvciIsIm1hbmlmZXN0IiwiaW52YWxpZE1hbmlmZXN0RXJyb3IiLCJlcnJvciIsInJlc291cmNlU3RhdHVzIiwiaW50aWFsaXplZCIsIl9nZXRWZXJzZXNGb3JSZWYiLCJjb250ZW50XyIsInVwZGF0ZVZlcnNlIiwiYm9va09iamVjdHNfIiwiX2Jvb2tPYmplY3RzIiwibmV3VmVyc2VzRm9yUmVmIiwicmVsb2FkUmVzb3VyY2UiLCJfcmVsb2FkUmVzb3VyY2UiLCJhY3Rpb25zIiwiY3VycmVudEJvb2tSZWYiLCJmZXRjaGVkQm9va1NhbWUiLCJfdmVyc2VzRm9yUmVmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBLFNBQ0VBLFNBREYsRUFFRUMsUUFGRixRQUdPLE9BSFA7QUFJQSxTQUNFQyxJQURGLEVBRUVDLE9BRkYsUUFHTyx5QkFI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RCxLQUpELE1BSU87QUFDTCxVQUFNTixZQUFZLEdBQUdNLGVBQWUsR0FBR3JGLFdBQUgsR0FBaUIsSUFBckQ7O0FBQ0FzRixNQUFBQSxhQUFhLEdBQUd2QixrQkFBa0IsQ0FBQ2dCLFlBQUQsQ0FBbEMsQ0FGSyxDQUdMO0FBQ0Q7O0FBRUQsUUFBSSxDQUFDL0YsT0FBTyxDQUFDc0csYUFBRCxFQUFnQnRELFlBQWhCLENBQVosRUFBMkM7QUFDekNLLE1BQUFBLFFBQVEsQ0FBQztBQUFFTCxRQUFBQSxZQUFZLEVBQUVzRDtBQUFoQixPQUFELENBQVI7QUFDRDtBQUNGLEdBbEJRLEVBa0JOLENBQUMzRSxTQUFELENBbEJNLENBQVQ7QUFvQkEsU0FBTztBQUNMWCxJQUFBQSxXQUFXLEVBQVhBLFdBREs7QUFFTCtCLElBQUFBLGFBQWEsRUFBYkEsYUFGSztBQUdMckIsSUFBQUEsZUFBZSxFQUFFaUUsZ0JBSFo7QUFJTGhELElBQUFBLFlBQVksRUFBWkEsWUFKSztBQUtMaEIsSUFBQUEsU0FBUyxFQUFFVSxXQUFGLGFBQUVBLFdBQUYsdUJBQUVBLFdBQVcsQ0FBRVYsU0FMbkI7QUFNTHNFLElBQUFBLGNBQWMsRUFBZEEsY0FOSztBQU9MekYsSUFBQUEsWUFBWSxFQUFFNkIsV0FBRixhQUFFQSxXQUFGLHVCQUFFQSxXQUFXLENBQUU3QixZQVB0QjtBQVFMaUYsSUFBQUEsY0FBYyxFQUFkQSxjQVJLO0FBU0xULElBQUFBLEtBQUssRUFBTEEsS0FUSztBQVVMYSxJQUFBQSxXQUFXLEVBQVhBLFdBVks7QUFXTFosSUFBQUEsT0FBTyxFQUFQQSxPQVhLO0FBWUxqQyxJQUFBQSxZQUFZLEVBQVpBO0FBWkssR0FBUDtBQWNEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHtcbiAgdXNlRWZmZWN0LFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQge1xuICBjb3JlLFxuICB1c2VSc3JjLFxufSBmcm9tICdzY3JpcHR1cmUtcmVzb3VyY2VzLXJjbCdcbmltcG9ydCB7XG4gIENPTlRFTlRfTk9UX0ZPVU5EX0VSUk9SLFxuICBFUlJPUl9TVEFURSxcbiAgSU5JVElBTElaRURfU1RBVEUsXG4gIElOVkFMSURfTUFOSUZFU1RfRVJST1IsXG4gIExPQURJTkdfU1RBVEUsXG4gIE1BTklGRVNUX05PVF9MT0FERURfRVJST1IsXG4gIFNDUklQVFVSRV9OT1RfTE9BREVEX0VSUk9SLFxufSBmcm9tICd0cmFuc2xhdGlvbi1oZWxwcy1yY2wnXG5pbXBvcnQgeyBnZXRWZXJzZXMgfSBmcm9tICdiaWJsZS1yZWZlcmVuY2UtcmFuZ2UnXG5pbXBvcnQgKiBhcyBpc0VxdWFsIGZyb20gJ2RlZXAtZXF1YWwnXG5pbXBvcnQgeyBjbGVhbnVwVmVyc2VPYmplY3RzLCBnZXRSZXNvdXJjZUxpbmsgfSBmcm9tICcuLi91dGlscy9TY3JpcHR1cmVTZXR0aW5ncydcbmltcG9ydCB7XG4gIFNlcnZlckNvbmZpZyxcbiAgU2NyaXB0dXJlUmVzb3VyY2UsXG4gIFNjcmlwdHVyZVJlZmVyZW5jZSxcbn0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBwYXJzZVJlc291cmNlTWFuaWZlc3QgfSBmcm9tICcuL3BhcnNlUmVzb3VyY2VNYW5pZmVzdCdcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgLyoqIHJlZmVyZW5jZSBmb3Igc2NyaXB0dXJlICoqL1xuICByZWZlcmVuY2U6IFNjcmlwdHVyZVJlZmVyZW5jZTtcbiAgLyoqIHdoZXJlIHRvIGdldCBkYXRhICoqL1xuICBjb25maWc6IFNlcnZlckNvbmZpZztcbiAgLyoqIG9wdGlvbmFsIGRpcmVjdCBwYXRoIHRvIGJpYmxlIHJlc291cmNlLCBpbiBmb3JtYXQgJHtvd25lcn0vJHtsYW5ndWFnZUlkfS8ke3Byb2plY3RJZH0vJHticmFuY2h9ICoqL1xuICByZXNvdXJjZUxpbms6IHN0cmluZ3x1bmRlZmluZWQ7XG4gIC8qKiBvcHRpb25hbCByZXNvdXJjZSBvYmplY3QgdG8gdXNlIHRvIGJ1aWxkIHJlc291cmNlTGluayAqKi9cbiAgcmVzb3VyY2U6IFNjcmlwdHVyZVJlc291cmNlfHVuZGVmaW5lZDtcbiAgLyoqIGlmIHRydWUgdGhlbiBmZXRjaCB0aGUgZW50aXJlIGJvb2sgKi9cbiAgd2hvbGVCb29rOiBib29sZWFuO1xuICAvKiogaWYgdHJ1ZSB0aGVuIHNldHRpbmdzIGFyZSByZWFkeSBmb3IgZmV0Y2hpbmcgZGF0YSAqL1xuICByZWFkeUZvckZldGNoOiBib29sZWFuO1xufVxuXG4vKipcbiAqIGV4dHJhY3QgYnJhbmNoIGZyb20gcmVzb3VyY2UgbGlua1xuICogQHBhcmFtIHJlc291cmNlTGlua1xuICovXG5mdW5jdGlvbiBnZXRCcmFuY2hOYW1lKHJlc291cmNlTGluazogc3RyaW5nKSB7XG4gIGxldCBicmFuY2ggPSBudWxsXG4gIHJlc291cmNlTGluayA9IHJlc291cmNlTGluayB8fCAnJ1xuICBjb25zdCBwYXJ0cyA9IHJlc291cmNlTGluay5zcGxpdCgnP3JlZj0nKVxuXG4gIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7IC8vIGlmIHJlZiBwYXJhbWV0ZXIgZm91bmQsIGdldCBicmFuY2ggbmFtZSBhZnRlclxuICAgIGJyYW5jaCA9IHBhcnRzPy5bMV1cbiAgfSBlbHNlIHsgLy8gZmFsbCBiYWNrIHRvIHVzaW5nIHVzZVJzcmMgZm9ybWF0IHN1Y2ggYXMgXCJ1bmZvbGRpbmdXb3JkL2VuL3VzdC9tYXN0ZXJcIlxuICAgIGNvbnN0IF9wYXJ0cyA9IHJlc291cmNlTGluay5zcGxpdCgnLycpXG4gICAgYnJhbmNoID0gX3BhcnRzPy5bM11cbiAgfVxuICByZXR1cm4gYnJhbmNoXG59XG5cbi8qKlxuICogZ2V0IHRoZSB2ZXJzZSBvYmplY3RzIGZvciB0aGUgcmVmZXJlbmNlIHN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IHJlZlN0ciAtIGluIGZvcm1hdCA8Y2hhcHRlcj46PHZlcnNlPlxuICogQHBhcmFtIHtvYmplY3R9IGJvb2tPYmplY3RzIC0gcGFyc2VkIHVzZm0gZm9yIGJvb2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZUlkXG4gKiBAcmV0dXJuIHthcnJheXxudWxsfSAtIG9mIHZlcnNlT2JqZWN0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmVyc2VzRm9yUmVmU3RyKHJlZlN0ciwgYm9va09iamVjdHMsIGxhbmd1YWdlSWQpIHtcbiAgaWYgKGJvb2tPYmplY3RzKSB7XG4gICAgbGV0IHZlcnNlcyA9IGdldFZlcnNlcyhib29rT2JqZWN0cy5jaGFwdGVycywgcmVmU3RyKVxuXG4gICAgaWYgKGxhbmd1YWdlSWQgPT09ICdlbC14LWtvaW5lJyB8fCBsYW5ndWFnZUlkID09PSAnaGJvJykge1xuICAgICAgdmVyc2VzID0gdmVyc2VzLm1hcCh2ZXJzZSA9PiB7XG4gICAgICAgIGlmICggdmVyc2U/LnZlcnNlRGF0YT8udmVyc2VPYmplY3RzKSB7XG4gICAgICAgICAgbGV0IHZlcnNlT2JqZWN0c18gPSBjb3JlLm9jY3VycmVuY2VJbmplY3RWZXJzZU9iamVjdHMoIHZlcnNlLnZlcnNlRGF0YS52ZXJzZU9iamVjdHMpXG4gICAgICAgICAgdmVyc2VPYmplY3RzXyA9IGNsZWFudXBWZXJzZU9iamVjdHModmVyc2VPYmplY3RzXylcbiAgICAgICAgICB2ZXJzZS52ZXJzZURhdGEudmVyc2VPYmplY3RzID0gdmVyc2VPYmplY3RzX1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2ZXJzZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyc2VzXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBnZXQgdGhlIHZlcnNlIG9iamVjdHMgZm9yIHRoZSByZWZlcmVuY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge29iamVjdH0gcmVmZXJlbmNlXG4gKiBAcGFyYW0ge29iamVjdH0gYm9va09iamVjdHMgLSBwYXJzZWQgdXNmbSBmb3IgYm9va1xuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlSWRcbiAqIEByZXR1cm4ge2FycmF5fG51bGx9IC0gb2YgdmVyc2VPYmplY3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWZXJzZXNGb3JSZWYocmVmZXJlbmNlLCBib29rT2JqZWN0cywgbGFuZ3VhZ2VJZCkge1xuICBjb25zdCByZWZTdHIgPSBgJHtyZWZlcmVuY2UuY2hhcHRlcn06JHtyZWZlcmVuY2UudmVyc2V9YFxuICByZXR1cm4gZ2V0VmVyc2VzRm9yUmVmU3RyKHJlZlN0ciwgYm9va09iamVjdHMsIGxhbmd1YWdlSWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTY3JpcHR1cmUoeyAvLyBob29rIGZvciBmZXRjaGluZyBzY3JpcHR1cmVcbiAgY29uZmlnLFxuICByZWFkeUZvckZldGNoLFxuICByZWZlcmVuY2UsXG4gIHJlc291cmNlOiByZXNvdXJjZV8sXG4gIHJlc291cmNlTGluazogcmVzb3VyY2VMaW5rXyxcbiAgd2hvbGVCb29rID0gZmFsc2UsXG59IDogUHJvcHMpIHtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV9dID0gdXNlU3RhdGUoe1xuICAgIGJvb2tPYmplY3RzOiBudWxsLFxuICAgIGZldGNoZWRCb29rOiAnJyxcbiAgICBmZXRjaFBhcmFtczogeyByZXNvdXJjZUxpbms6ICcnLCByZWZlcmVuY2U6IHt9IH0sXG4gICAgaWdub3JlU2hhOiBudWxsLFxuICAgIGluaXRpYWxpemVkOiBmYWxzZSxcbiAgICBmZXRjaGVkOiBmYWxzZSxcbiAgICByZXNvdXJjZVN0YXRlOiB7XG4gICAgICBiaWJsZUpzb246IG51bGwsXG4gICAgICBtYXRjaGVkVmVyc2U6IG51bGwsXG4gICAgICByZXNvdXJjZTogbnVsbCxcbiAgICAgIGNvbnRlbnQ6IG51bGwsXG4gICAgICBsb2FkaW5nUmVzb3VyY2U6IGZhbHNlLFxuICAgICAgbG9hZGluZ0NvbnRlbnQ6IGZhbHNlLFxuICAgICAgZmV0Y2hSZXNwb25zZTogbnVsbCxcbiAgICB9LFxuICAgIHZlcnNlc0ZvclJlZjogW10sXG4gIH0pXG5cbiAgY29uc3Qge1xuICAgIGJvb2tPYmplY3RzLFxuICAgIGZldGNoZWRCb29rLFxuICAgIGZldGNoUGFyYW1zLFxuICAgIGZldGNoZWQsXG4gICAgaWdub3JlU2hhLFxuICAgIGluaXRpYWxpemVkLFxuICAgIHJlc291cmNlU3RhdGUsXG4gICAgdmVyc2VzRm9yUmVmLFxuICB9ID0gc3RhdGVcbiAgY29uc3QgX2Jvb2tJZCA9IHJlZmVyZW5jZT8ucHJvamVjdElkXG5cbiAgZnVuY3Rpb24gc2V0U3RhdGUobmV3U3RhdGUpIHtcbiAgICBzZXRTdGF0ZV8ocHJldlN0YXRlID0+ICh7IC4uLnByZXZTdGF0ZSwgLi4ubmV3U3RhdGUgfSkpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyZWFkeUZvckZldGNoKSB7XG4gICAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIC0gcmVhZHlGb3JGZXRjaCB0cnVlLCBpbml0aWFsaXppbmdgKVxuICAgICAgbGV0IHJlc291cmNlTGluayA9IHJlYWR5Rm9yRmV0Y2ggJiYgcmVzb3VyY2VMaW5rX1xuXG4gICAgICBpZiAoIXJlc291cmNlTGlua18gJiYgcmVzb3VyY2VfKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBvd25lcixcbiAgICAgICAgICBsYW5ndWFnZUlkLFxuICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICBicmFuY2ggPSAnbWFzdGVyJyxcbiAgICAgICAgICByZWYgPSBudWxsLFxuICAgICAgICB9ID0gcmVzb3VyY2VfIHx8IHt9XG4gICAgICAgIGNvbnN0IHJlZl8gPSByZWYgfHwgYnJhbmNoXG5cbiAgICAgICAgcmVzb3VyY2VMaW5rID0gZ2V0UmVzb3VyY2VMaW5rKHtcbiAgICAgICAgICBvd25lcixcbiAgICAgICAgICBsYW5ndWFnZUlkLFxuICAgICAgICAgIHJlc291cmNlSWQ6IHByb2plY3RJZCxcbiAgICAgICAgICByZWY6IHJlZl8sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJvb2tSZWYgPSB7IC4uLnJlZmVyZW5jZSB9XG5cbiAgICAgIGlmICh3aG9sZUJvb2spIHtcbiAgICAgICAgZGVsZXRlIGJvb2tSZWYuY2hhcHRlciAvLyByZW1vdmUgdGhlIGNoYXB0ZXIgYW5kIHZlcnNlIHNvIHRoZSB3aG9sZSBib29rIGlzIGZldGNoZWRcbiAgICAgICAgZGVsZXRlIGJvb2tSZWYudmVyc2VcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc291cmNlTGluayAhPT0gZmV0Y2hQYXJhbXM/LnJlc291cmNlTGluaykge1xuICAgICAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIC0gZm9yICR7cmVzb3VyY2VfPy5wcm9qZWN0SWR9IHJlc291cmNlTGluayBpcyBub3cgJHtyZXNvdXJjZUxpbmt9IGFuZCByZXNvdXJjZUxpbmtfPSR7cmVzb3VyY2VMaW5rX31gKVxuICAgICAgfSBlbHNlIGlmIChib29rUmVmICE9PSBmZXRjaFBhcmFtcz8ucmVmZXJlbmNlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgLSBib29rIGNoYW5nZWQgdG8gJHtyZXNvdXJjZV8/LnByb2plY3RJZH0gcmVzb3VyY2VMaW5rIGlzIG5vdyAke3Jlc291cmNlTGlua31gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdGZXRjaFBhcmFtcyA9IHtcbiAgICAgICAgcmVzb3VyY2VMaW5rLFxuICAgICAgICByZWZlcmVuY2U6IGJvb2tSZWYsXG4gICAgICB9XG5cbiAgICAgIGlmICghaXNFcXVhbChuZXdGZXRjaFBhcmFtcywgZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgLSBGRVRDSElORyBuZXcgcGFyYW1zICR7cmVzb3VyY2VfPy5wcm9qZWN0SWR9IHJlc291cmNlTGluayBpcyBub3cgJHtyZXNvdXJjZUxpbmt9IGFuZCByZXNvdXJjZUxpbmtfPSR7cmVzb3VyY2VMaW5rX31gLCBuZXdGZXRjaFBhcmFtcylcbiAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgIGZldGNoUGFyYW1zOiBuZXdGZXRjaFBhcmFtcyxcbiAgICAgICAgICBmZXRjaGVkOiBmYWxzZSxcbiAgICAgICAgICBpZ25vcmVTaGE6IG51bGwsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9LCBbcmVhZHlGb3JGZXRjaCwgX2Jvb2tJZCwgcmVzb3VyY2VMaW5rX10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIC0gZm9yICR7cmVzb3VyY2VfPy5wcm9qZWN0SWR9IHJlYWR5Rm9yRmV0Y2ggaXMgbm93ICR7cmVhZHlGb3JGZXRjaH1gKVxuICB9LCBbcmVhZHlGb3JGZXRjaF0pXG5cbiAgY29uc3Qgb3B0aW9ucyA9IHsgZ2V0QmlibGVKc29uOiB0cnVlIH1cblxuICBjb25zdCBfcmVzb3VyY2VSZXN1bHRzID0gdXNlUnNyYyh7XG4gICAgY29uZmlnLFxuICAgIHJlZmVyZW5jZTogZmV0Y2hQYXJhbXM/LnJlZmVyZW5jZSxcbiAgICByZXNvdXJjZUxpbms6IGZldGNoUGFyYW1zPy5yZXNvdXJjZUxpbmssXG4gICAgb3B0aW9ucyxcbiAgfSlcblxuICAvLyBvbmx5IHVzZSB0aGUgcmVzdWx0cyBpZiByZWFkeVRvRmV0Y2hcbiAgY29uc3Qge1xuICAgIGJpYmxlSnNvbixcbiAgICBjb250ZW50LFxuICAgIGZldGNoUmVzcG9uc2UsXG4gICAgbG9hZGluZ1Jlc291cmNlLFxuICAgIGxvYWRpbmdDb250ZW50LFxuICAgIG1hdGNoZWRWZXJzZSxcbiAgICByZXNvdXJjZSxcbiAgfSA9IHJlc291cmNlU3RhdGVcblxuICB1c2VFZmZlY3QoKCkgPT4geyAvLyB2YWxpZGF0ZSByZXNwb25zZSB0byBtYWtlIHN1cmUgZnJvbSBsYXRlc3QgcmVxdWVzdFxuICAgIGlmIChyZWFkeUZvckZldGNoKSB7XG4gICAgICBjb25zdCBjdXJyZW50UmVzb3VyY2VTdGF0ZSA9IF9yZXNvdXJjZVJlc3VsdHM/LnN0YXRlXG5cbiAgICAgIGlmICghZmV0Y2hlZCAmJiAhaXNFcXVhbChjdXJyZW50UmVzb3VyY2VTdGF0ZSwgcmVzb3VyY2VTdGF0ZSkpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgZmV0Y2hSZXNwb25zZSxcbiAgICAgICAgICBsb2FkaW5nQ29udGVudCxcbiAgICAgICAgICBsb2FkaW5nUmVzb3VyY2UsXG4gICAgICAgIH0gPSBjdXJyZW50UmVzb3VyY2VTdGF0ZVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIHJlc291cmNlcyBjaGFuZ2VkYCwgeyBjb250ZW50LCBmZXRjaFBhcmFtcywgZmV0Y2hSZXNwb25zZSB9KVxuXG4gICAgICAgIGlmICghbG9hZGluZ0NvbnRlbnQgJiYgIWxvYWRpbmdSZXNvdXJjZSAmJiBjb250ZW50ICYmIGZldGNoUmVzcG9uc2UpIHtcbiAgICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHsgcmVzb3VyY2VTdGF0ZTogY3VycmVudFJlc291cmNlU3RhdGUgfVxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgY29udGVudCBjaGFuZ2VkYCwgeyBjb250ZW50LCBmZXRjaFBhcmFtcywgZmV0Y2hSZXNwb25zZSB9KVxuXG4gICAgICAgICAgLy8gVFJJQ0tZIC0gcmVzcG9uc2VzIGZyb20gc2VydmVyIGNhbiBjb21lIGJhY2sgZnJvbSBwcmV2aW91cyByZXF1ZXN0cy4gIFNvIHdlIG1ha2Ugc3VyZSB0aGlzIHJlc3BvbnNlIGlzIGZvciB0aGUgY3VycmVudCByZXF1ZXN0ZWQgYm9va1xuICAgICAgICAgIGxldCBzYW1lQm9vayA9IGZhbHNlXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGNvbnN0IGV4cGVjdGVkQm9va0lkID0gX2Jvb2tJZCB8fCAnJ1xuICAgICAgICAgIGNvbnN0IGZldGNoZWRCb29rID0gY29udGVudC5uYW1lXG5cbiAgICAgICAgICBpZiAoZmV0Y2hlZEJvb2sgJiYgZXhwZWN0ZWRCb29rSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IFtuYW1lLCBleHRdID0gZmV0Y2hlZEJvb2suc3BsaXQoJy4nKVxuXG4gICAgICAgICAgICBpZiAoZXh0LnRvTG93ZXJDYXNlKCkgPT09ICd1c2ZtJykge1xuICAgICAgICAgICAgICBzYW1lQm9vayA9IG5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhleHBlY3RlZEJvb2tJZC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHNoYSA9IGZldGNoUmVzcG9uc2U/LmRhdGE/LnNoYSB8fCBudWxsXG4gICAgICAgICAgY29uc3QgdXJsID0gZmV0Y2hSZXNwb25zZT8uZGF0YT8udXJsIHx8IG51bGxcblxuICAgICAgICAgIGlmIChzYW1lQm9vaykgeyAvLyBhbHNvIG1ha2Ugc3VyZSBpdCBpcyB0aGUgc2FtZSBicmFuY2hcbiAgICAgICAgICAgIGNvbnN0IGZldGNoZWRCcmFuY2ggPSBnZXRCcmFuY2hOYW1lKHVybClcbiAgICAgICAgICAgIGNvbnN0IGZldGNoaW5nQnJhbmNoID0gZ2V0QnJhbmNoTmFtZShmZXRjaFBhcmFtcz8ucmVzb3VyY2VMaW5rKVxuXG4gICAgICAgICAgICBpZiAoZmV0Y2hlZEJyYW5jaCAhPT0gZmV0Y2hpbmdCcmFuY2gpIHtcbiAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSBpbnZhbGlkIGJyYW5jaCwgZXhwZWN0ZWQgYnJhbmNoIGlzICR7ZmV0Y2hpbmdCcmFuY2h9LCBidXQgZmV0Y2hlZEJyYW5jaCBpcyAke2ZldGNoZWRCcmFuY2h9YCwgeyBzaGEsIHVybCB9KVxuICAgICAgICAgICAgICBzYW1lQm9vayA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlnbm9yZVNoYSA9PT0gc2hhKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIC0gdGhlIHNoYSBpcyB0aGUgc2FtZSBhcyB0aGUgaWdub3JlIHNoYSAke3NoYX1gLCB7IHNoYSwgdXJsIH0pXG4gICAgICAgICAgICBzYW1lQm9vayA9IGZhbHNlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzYW1lQm9vaykge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSBpbnZhbGlkIGJvb2ssIGV4cGVjdGVkQm9va0lkIGlzICR7ZXhwZWN0ZWRCb29rSWR9LCBidXQgcmVjZWl2ZWQgYm9vayBuYW1lICR7ZmV0Y2hlZEJvb2t9YCwgeyBzaGEsIHVybCB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdTdGF0ZVsnYm9va09iamVjdHMnXSA9IGNvbnRlbnRcbiAgICAgICAgICAgIG5ld1N0YXRlWyd2ZXJzZXNGb3JSZWYnXSA9IHVwZGF0ZVZlcnNlc0ZvclJlZihjb250ZW50KVxuICAgICAgICAgICAgbmV3U3RhdGVbJ2ZldGNoZWRCb29rJ10gPSBleHBlY3RlZEJvb2tJZFxuXG4gICAgICAgICAgICBpZiAoIWlzRXF1YWwobmV3U3RhdGUsIHtcbiAgICAgICAgICAgICAgYm9va09iamVjdHMsXG4gICAgICAgICAgICAgIHZlcnNlc0ZvclJlZixcbiAgICAgICAgICAgICAgZmV0Y2hlZEJvb2s6IGV4cGVjdGVkQm9va0lkLFxuICAgICAgICAgICAgICByZXNvdXJjZVN0YXRlLFxuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSBjb3JyZWN0IGJvb2ssIGV4cGVjdGVkQm9va0lkIGlzICR7ZXhwZWN0ZWRCb29rSWR9YCwgeyBzaGEsIHVybCB9KVxuICAgICAgICAgICAgICBuZXdTdGF0ZVsnZmV0Y2hlZCddID0gdHJ1ZVxuICAgICAgICAgICAgICBuZXdTdGF0ZVsnaWdub3JlU2hhJ10gPSBudWxsXG4gICAgICAgICAgICAgIHNldFN0YXRlKG5ld1N0YXRlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIWlzRXF1YWwoY3VycmVudFJlc291cmNlU3RhdGUsIHJlc291cmNlU3RhdGUpKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIHN0YXRlIGNoYW5nZWQsIGJ1dCBubyBjb250ZW50YCwgY3VycmVudFJlc291cmNlU3RhdGUpXG4gICAgICAgICAgICBzZXRTdGF0ZSh7IHJlc291cmNlU3RhdGU6IGN1cnJlbnRSZXNvdXJjZVN0YXRlIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCBbcmVhZHlGb3JGZXRjaCwgX3Jlc291cmNlUmVzdWx0cz8uc3RhdGVdKVxuXG4gIGNvbnN0IHsgdGl0bGUsIHZlcnNpb24gfSA9IHBhcnNlUmVzb3VyY2VNYW5pZmVzdChyZXNvdXJjZSlcbiAgY29uc3QgeyBsYW5ndWFnZUlkIH0gPSByZXNvdXJjZV8gfHwge31cbiAgY29uc3QgbG9hZGluZyA9IGxvYWRpbmdSZXNvdXJjZSB8fCBsb2FkaW5nQ29udGVudCB8fCAhcmVhZHlGb3JGZXRjaFxuICBjb25zdCBjb250ZW50Tm90Rm91bmRFcnJvciA9ICFjb250ZW50XG4gIGNvbnN0IHNjcmlwdHVyZU5vdExvYWRlZEVycm9yID0gIWJpYmxlSnNvblxuICBjb25zdCBtYW5pZmVzdE5vdEZvdW5kRXJyb3IgPSAhcmVzb3VyY2U/Lm1hbmlmZXN0XG4gIGNvbnN0IGludmFsaWRNYW5pZmVzdEVycm9yID0gIXRpdGxlIHx8ICF2ZXJzaW9uIHx8ICFsYW5ndWFnZUlkXG4gIGNvbnN0IGVycm9yID0gcmVhZHlGb3JGZXRjaCAmJiBpbml0aWFsaXplZCAmJiAhbG9hZGluZyAmJlxuICAgIChjb250ZW50Tm90Rm91bmRFcnJvciB8fCBzY3JpcHR1cmVOb3RMb2FkZWRFcnJvciB8fCBtYW5pZmVzdE5vdEZvdW5kRXJyb3IgfHwgaW52YWxpZE1hbmlmZXN0RXJyb3IpXG4gIGNvbnN0IHJlc291cmNlU3RhdHVzID0ge1xuICAgIFtMT0FESU5HX1NUQVRFXTogbG9hZGluZyxcbiAgICBbQ09OVEVOVF9OT1RfRk9VTkRfRVJST1JdOiBjb250ZW50Tm90Rm91bmRFcnJvcixcbiAgICBbU0NSSVBUVVJFX05PVF9MT0FERURfRVJST1JdOiBzY3JpcHR1cmVOb3RMb2FkZWRFcnJvcixcbiAgICBbTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUl06IG1hbmlmZXN0Tm90Rm91bmRFcnJvcixcbiAgICBbSU5WQUxJRF9NQU5JRkVTVF9FUlJPUl06IGludmFsaWRNYW5pZmVzdEVycm9yLFxuICAgIFtFUlJPUl9TVEFURV06IGVycm9yLFxuICAgIFtJTklUSUFMSVpFRF9TVEFURV06IGluaXRpYWxpemVkLFxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXJlYWR5Rm9yRmV0Y2gpIHtcbiAgICAgIGlmIChpbml0aWFsaXplZCkge1xuICAgICAgICBzZXRTdGF0ZSh7IGludGlhbGl6ZWQ6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaW5pdGlhbGl6ZWQpIHtcbiAgICAgIGlmIChsb2FkaW5nKSB7IC8vIG9uY2UgZmlyc3QgbG9hZCBoYXMgYmVndW4sIHdlIGFyZSBpbml0aWFsaXplZFxuICAgICAgICBzZXRTdGF0ZSh7IGludGlhbGl6ZWQ6IHRydWUgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtsb2FkaW5nLCByZWFkeUZvckZldGNoXSlcblxuICAvKipcbiAgICogZ2V0IHZlcnNlcyBmb3IgcmVmXG4gICAqIEBwYXJhbSByZWZTdHJcbiAgICogQHBhcmFtIGNvbnRlbnRfXG4gICAqL1xuICBmdW5jdGlvbiBfZ2V0VmVyc2VzRm9yUmVmKHJlZlN0ciwgY29udGVudF8gPSBib29rT2JqZWN0cykge1xuICAgIGlmIChjb250ZW50Xykge1xuICAgICAgcmV0dXJuIGdldFZlcnNlc0ZvclJlZlN0cihyZWZTdHIsIGNvbnRlbnRfLCBsYW5ndWFnZUlkKVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlVmVyc2UoY2hhcHRlciwgdmVyc2UsIHZlcnNlRGF0YSkge1xuICAgIGlmIChib29rT2JqZWN0cykge1xuICAgICAgY29uc3QgYm9va09iamVjdHNfID0geyAuLi5ib29rT2JqZWN0cyB9IC8vIHNoYWxsb3cgY29weVxuXG4gICAgICBpZiAoYm9va09iamVjdHNfPy5jaGFwdGVycykge1xuICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnMgPSB7IC4uLmJvb2tPYmplY3RzXy5jaGFwdGVycyB9IC8vIHNoYWxsb3cgY29weSBjaGFwdGVyc1xuXG4gICAgICAgIGlmIChib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl0pIHtcbiAgICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl0gPSB7IC4uLmJvb2tPYmplY3RzXy5jaGFwdGVyc1tjaGFwdGVyXSB9IC8vIHNoYWxsb3cgY29weSB2ZXJzZXNcbiAgICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl1bdmVyc2VdID0gdmVyc2VEYXRhXG4gICAgICAgICAgc2V0U3RhdGUoeyBib29rT2JqZWN0czogYm9va09iamVjdHNfIH0pXG4gICAgICAgICAgcmV0dXJuIGJvb2tPYmplY3RzX1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVWZXJzZXNGb3JSZWYoX2Jvb2tPYmplY3RzID0gYm9va09iamVjdHMpIHtcbiAgICBsZXQgbmV3VmVyc2VzRm9yUmVmID0gW11cblxuICAgIGlmIChfYm9va09iamVjdHMpIHtcbiAgICAgIG5ld1ZlcnNlc0ZvclJlZiA9IGdldFZlcnNlc0ZvclJlZihyZWZlcmVuY2UsIF9ib29rT2JqZWN0cywgbGFuZ3VhZ2VJZClcbiAgICAgIHJldHVybiBuZXdWZXJzZXNGb3JSZWZcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIGZvcmNlIHJlbG9hZCBvZiBjdXJyZW50IHJlc291cmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gaWdub3JlU2hhIC0gb3B0aW9uYWwgc2hhIHRvIGlnbm9yZVxuICAgKi9cbiAgZnVuY3Rpb24gcmVsb2FkUmVzb3VyY2UoaWdub3JlU2hhKSB7XG4gICAgY29uc3QgX3JlbG9hZFJlc291cmNlID0gX3Jlc291cmNlUmVzdWx0cz8uYWN0aW9ucy5yZWxvYWRSZXNvdXJjZVxuXG4gICAgaWYgKF9yZWxvYWRSZXNvdXJjZSkge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7IGZldGNoZWQ6IGZhbHNlIH1cblxuICAgICAgaWYgKGlnbm9yZVNoYSkgeyAvLyBUUklDS1kgLSBpZiB0aGUgcmVzcG9uc2Ugd2FzIGZvciB0aGlzIHNoYSAod2hpY2ggd2FzIHRoZSBwcmV2aW91cyBzaGEpIHRoZW4gd2UgbmVlZCB0byBpZ25vcmUgaXRcbiAgICAgICAgbmV3U3RhdGVbJ2lnbm9yZVNoYSddID0gaWdub3JlU2hhXG4gICAgICB9XG4gICAgICBzZXRTdGF0ZSggbmV3U3RhdGUpXG4gICAgICBfcmVsb2FkUmVzb3VyY2UoKVxuICAgIH1cbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgY3VycmVudEJvb2tSZWYgPSBmZXRjaFBhcmFtcz8ucmVmZXJlbmNlPy5wcm9qZWN0SWRcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjdXJyZW50Qm9va1JlZikge1xuICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSBmZXRjaGVkIGJvb2sgY2hhbmdlZCB0byAke2N1cnJlbnRCb29rUmVmfSwgJHtyZXNvdXJjZUxpbmtffWAsIHsgY29udGVudCwgZmV0Y2hQYXJhbXMgfSlcbiAgICAgIHNldFN0YXRlKHsgYm9va09iamVjdHM6IG51bGwgfSlcbiAgICB9XG4gICAgLy8gQHRzLWlnbm9yZVxuICB9LCBbY3VycmVudEJvb2tSZWZdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZXhwZWN0ZWRCb29rSWQgPSBfYm9va0lkIHx8ICcnXG4gICAgY29uc3QgZmV0Y2hlZEJvb2tTYW1lID0gZmV0Y2hlZEJvb2sgJiYgKGZldGNoZWRCb29rID09PSBleHBlY3RlZEJvb2tJZClcbiAgICBsZXQgX3ZlcnNlc0ZvclJlZiA9IFtdXG5cbiAgICBpZiAoIWZldGNoZWRCb29rU2FtZSkge1xuICAgICAgLy8gaWYgKGV4cGVjdGVkQm9va0lkICYmIGZldGNoZWRCb29rKSB7XG4gICAgICAvLyAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgZXhwZWN0ZWQgYm9vayAke2V4cGVjdGVkQm9va0lkfSBidXQgZmV0Y2hlZCBib29rIHdhcyAke2ZldGNoZWRCb29rfSAtIGNsZWFyaW5nYClcbiAgICAgIC8vIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgX2Jvb2tPYmplY3RzID0gZmV0Y2hlZEJvb2tTYW1lID8gYm9va09iamVjdHMgOiBudWxsXG4gICAgICBfdmVyc2VzRm9yUmVmID0gdXBkYXRlVmVyc2VzRm9yUmVmKF9ib29rT2JqZWN0cylcbiAgICAgIC8vIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgX2Jvb2tPYmplY3RzIGlzICR7ISFfYm9va09iamVjdHN9IGFuZCBib29rcyBhcmUgdGhlIHNhbWUgJHtmZXRjaGVkQm9va31gLCB7IGNvbnRlbnQsIGZldGNoUGFyYW1zIH0pXG4gICAgfVxuXG4gICAgaWYgKCFpc0VxdWFsKF92ZXJzZXNGb3JSZWYsIHZlcnNlc0ZvclJlZikpIHtcbiAgICAgIHNldFN0YXRlKHsgdmVyc2VzRm9yUmVmOiBfdmVyc2VzRm9yUmVmIH0pXG4gICAgfVxuICB9LCBbcmVmZXJlbmNlXSlcblxuICByZXR1cm4ge1xuICAgIGJvb2tPYmplY3RzLFxuICAgIGZldGNoUmVzcG9uc2UsXG4gICAgZ2V0VmVyc2VzRm9yUmVmOiBfZ2V0VmVyc2VzRm9yUmVmLFxuICAgIG1hdGNoZWRWZXJzZSxcbiAgICByZWZlcmVuY2U6IGZldGNoUGFyYW1zPy5yZWZlcmVuY2UsXG4gICAgcmVsb2FkUmVzb3VyY2UsXG4gICAgcmVzb3VyY2VMaW5rOiBmZXRjaFBhcmFtcz8ucmVzb3VyY2VMaW5rLFxuICAgIHJlc291cmNlU3RhdHVzLFxuICAgIHRpdGxlLFxuICAgIHVwZGF0ZVZlcnNlLFxuICAgIHZlcnNpb24sXG4gICAgdmVyc2VzRm9yUmVmLFxuICB9XG59XG4iXX0=
|
|
493
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JpcHR1cmUudHN4Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZVN0YXRlIiwiY29yZSIsInVzZVJzcmMiLCJDT05URU5UX05PVF9GT1VORF9FUlJPUiIsIkVSUk9SX1NUQVRFIiwiSU5JVElBTElaRURfU1RBVEUiLCJJTlZBTElEX01BTklGRVNUX0VSUk9SIiwiTE9BRElOR19TVEFURSIsIk1BTklGRVNUX05PVF9MT0FERURfRVJST1IiLCJTQ1JJUFRVUkVfTk9UX0xPQURFRF9FUlJPUiIsImdldFZlcnNlcyIsImlzRXF1YWwiLCJjbGVhbnVwVmVyc2VPYmplY3RzIiwiZ2V0UmVzb3VyY2VMaW5rIiwiZGVidWdJc0VxdWFsIiwiU2VydmVyQ29uZmlnIiwiU2NyaXB0dXJlUmVzb3VyY2UiLCJTY3JpcHR1cmVSZWZlcmVuY2UiLCJwYXJzZVJlc291cmNlTWFuaWZlc3QiLCJnZXRCcmFuY2hOYW1lIiwicmVzb3VyY2VMaW5rIiwiYnJhbmNoIiwicGFydHMiLCJzcGxpdCIsImxlbmd0aCIsIl9wYXJ0cyIsImdldFZlcnNlc0ZvclJlZlN0ciIsInJlZlN0ciIsImJvb2tPYmplY3RzIiwibGFuZ3VhZ2VJZCIsInZlcnNlcyIsImNoYXB0ZXJzIiwibWFwIiwidmVyc2UiLCJ2ZXJzZURhdGEiLCJ2ZXJzZU9iamVjdHMiLCJ2ZXJzZU9iamVjdHNfIiwib2NjdXJyZW5jZUluamVjdFZlcnNlT2JqZWN0cyIsImdldFZlcnNlc0ZvclJlZiIsInJlZmVyZW5jZSIsImNoYXB0ZXIiLCJ1c2VTY3JpcHR1cmUiLCJjb25maWciLCJyZWFkeUZvckZldGNoIiwicmVzb3VyY2VfIiwicmVzb3VyY2UiLCJyZXNvdXJjZUxpbmtfIiwid2hvbGVCb29rIiwiZmV0Y2hlZEJvb2siLCJmZXRjaFBhcmFtcyIsImlnbm9yZVNoYSIsImluaXRpYWxpemVkIiwiZmV0Y2hlZCIsInJlc291cmNlU3RhdGUiLCJiaWJsZUpzb24iLCJtYXRjaGVkVmVyc2UiLCJjb250ZW50IiwibG9hZGluZ1Jlc291cmNlIiwibG9hZGluZ0NvbnRlbnQiLCJmZXRjaFJlc3BvbnNlIiwidmVyc2VzRm9yUmVmIiwic3RhdGUiLCJzZXRTdGF0ZV8iLCJfYm9va0lkIiwicHJvamVjdElkIiwic2V0U3RhdGUiLCJuZXdTdGF0ZSIsInByZXZTdGF0ZSIsImNvbnNvbGUiLCJsb2ciLCJvd25lciIsInJlZiIsInJlZl8iLCJyZXNvdXJjZUlkIiwiYm9va1JlZiIsIm5ld0ZldGNoUGFyYW1zIiwib3B0aW9ucyIsImdldEJpYmxlSnNvbiIsIl9yZXNvdXJjZVJlc3VsdHMiLCJjdXJyZW50UmVzb3VyY2VTdGF0ZSIsInNhbWVCb29rIiwiZXhwZWN0ZWRCb29rSWQiLCJuYW1lIiwiZXh0IiwidG9Mb3dlckNhc2UiLCJpbmNsdWRlcyIsInNoYSIsImRhdGEiLCJ1cmwiLCJmZXRjaGVkQnJhbmNoIiwiZmV0Y2hpbmdCcmFuY2giLCJ1cGRhdGVWZXJzZXNGb3JSZWYiLCJ0aXRsZSIsInZlcnNpb24iLCJsb2FkaW5nIiwiY29udGVudE5vdEZvdW5kRXJyb3IiLCJzY3JpcHR1cmVOb3RMb2FkZWRFcnJvciIsIm1hbmlmZXN0Tm90Rm91bmRFcnJvciIsIm1hbmlmZXN0IiwiaW52YWxpZE1hbmlmZXN0RXJyb3IiLCJlcnJvciIsInJlc291cmNlU3RhdHVzIiwiaW50aWFsaXplZCIsIl9nZXRWZXJzZXNGb3JSZWYiLCJjb250ZW50XyIsInVwZGF0ZVZlcnNlIiwiYm9va09iamVjdHNfIiwiX2Jvb2tPYmplY3RzIiwibmV3VmVyc2VzRm9yUmVmIiwicmVsb2FkUmVzb3VyY2UiLCJfcmVsb2FkUmVzb3VyY2UiLCJhY3Rpb25zIiwiY3VycmVudEJvb2tSZWYiLCJmZXRjaGVkQm9va1NhbWUiLCJfdmVyc2VzRm9yUmVmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBLFNBQ0VBLFNBREYsRUFFRUMsUUFGRixRQUdPLE9BSFA7QUFJQSxTQUNFQyxJQURGLEVBRUVD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QUQsRUFBZ0J0RCxZQUFoQixDQUFaLEVBQTJDO0FBQ3pDSyxNQUFBQSxRQUFRLENBQUM7QUFBRUwsUUFBQUEsWUFBWSxFQUFFc0Q7QUFBaEIsT0FBRCxDQUFSO0FBQ0Q7QUFDRixHQWxCUSxFQWtCTixDQUFDM0UsU0FBRCxDQWxCTSxDQUFUO0FBb0JBLFNBQU87QUFDTFgsSUFBQUEsV0FBVyxFQUFYQSxXQURLO0FBRUwrQixJQUFBQSxhQUFhLEVBQWJBLGFBRks7QUFHTHJCLElBQUFBLGVBQWUsRUFBRWlFLGdCQUhaO0FBSUxoRCxJQUFBQSxZQUFZLEVBQVpBLFlBSks7QUFLTGhCLElBQUFBLFNBQVMsRUFBRVUsV0FBRixhQUFFQSxXQUFGLHVCQUFFQSxXQUFXLENBQUVWLFNBTG5CO0FBTUxzRSxJQUFBQSxjQUFjLEVBQWRBLGNBTks7QUFPTHpGLElBQUFBLFlBQVksRUFBRTZCLFdBQUYsYUFBRUEsV0FBRix1QkFBRUEsV0FBVyxDQUFFN0IsWUFQdEI7QUFRTGlGLElBQUFBLGNBQWMsRUFBZEEsY0FSSztBQVNMVCxJQUFBQSxLQUFLLEVBQUxBLEtBVEs7QUFVTGEsSUFBQUEsV0FBVyxFQUFYQSxXQVZLO0FBV0xaLElBQUFBLE9BQU8sRUFBUEEsT0FYSztBQVlMakMsSUFBQUEsWUFBWSxFQUFaQTtBQVpLLEdBQVA7QUFjRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7XG4gIHVzZUVmZmVjdCxcbiAgdXNlU3RhdGUsXG59IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHtcbiAgY29yZSxcbiAgdXNlUnNyYyxcbn0gZnJvbSAnc2NyaXB0dXJlLXJlc291cmNlcy1yY2wnXG5pbXBvcnQge1xuICBDT05URU5UX05PVF9GT1VORF9FUlJPUixcbiAgRVJST1JfU1RBVEUsXG4gIElOSVRJQUxJWkVEX1NUQVRFLFxuICBJTlZBTElEX01BTklGRVNUX0VSUk9SLFxuICBMT0FESU5HX1NUQVRFLFxuICBNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SLFxuICBTQ1JJUFRVUkVfTk9UX0xPQURFRF9FUlJPUixcbn0gZnJvbSAndHJhbnNsYXRpb24taGVscHMtcmNsJ1xuaW1wb3J0IHsgZ2V0VmVyc2VzIH0gZnJvbSAnYmlibGUtcmVmZXJlbmNlLXJhbmdlJ1xuaW1wb3J0ICogYXMgaXNFcXVhbCBmcm9tICdkZWVwLWVxdWFsJ1xuaW1wb3J0IHsgY2xlYW51cFZlcnNlT2JqZWN0cywgZ2V0UmVzb3VyY2VMaW5rIH0gZnJvbSAnLi4vdXRpbHMvU2NyaXB0dXJlU2V0dGluZ3MnXG5pbXBvcnQgeyBkZWJ1Z0lzRXF1YWwgfSBmcm9tICcuLi91dGlscy9tYXBzLmpzJ1xuaW1wb3J0IHtcbiAgU2VydmVyQ29uZmlnLFxuICBTY3JpcHR1cmVSZXNvdXJjZSxcbiAgU2NyaXB0dXJlUmVmZXJlbmNlLFxufSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IHBhcnNlUmVzb3VyY2VNYW5pZmVzdCB9IGZyb20gJy4vcGFyc2VSZXNvdXJjZU1hbmlmZXN0J1xuXG5pbnRlcmZhY2UgUHJvcHMge1xuICAvKiogcmVmZXJlbmNlIGZvciBzY3JpcHR1cmUgKiovXG4gIHJlZmVyZW5jZTogU2NyaXB0dXJlUmVmZXJlbmNlO1xuICAvKiogd2hlcmUgdG8gZ2V0IGRhdGEgKiovXG4gIGNvbmZpZzogU2VydmVyQ29uZmlnO1xuICAvKiogb3B0aW9uYWwgZGlyZWN0IHBhdGggdG8gYmlibGUgcmVzb3VyY2UsIGluIGZvcm1hdCAke293bmVyfS8ke2xhbmd1YWdlSWR9LyR7cHJvamVjdElkfS8ke2JyYW5jaH0gKiovXG4gIHJlc291cmNlTGluazogc3RyaW5nfHVuZGVmaW5lZDtcbiAgLyoqIG9wdGlvbmFsIHJlc291cmNlIG9iamVjdCB0byB1c2UgdG8gYnVpbGQgcmVzb3VyY2VMaW5rICoqL1xuICByZXNvdXJjZTogU2NyaXB0dXJlUmVzb3VyY2V8dW5kZWZpbmVkO1xuICAvKiogaWYgdHJ1ZSB0aGVuIGZldGNoIHRoZSBlbnRpcmUgYm9vayAqL1xuICB3aG9sZUJvb2s6IGJvb2xlYW47XG4gIC8qKiBpZiB0cnVlIHRoZW4gc2V0dGluZ3MgYXJlIHJlYWR5IGZvciBmZXRjaGluZyBkYXRhICovXG4gIHJlYWR5Rm9yRmV0Y2g6IGJvb2xlYW47XG59XG5cbi8qKlxuICogZXh0cmFjdCBicmFuY2ggZnJvbSByZXNvdXJjZSBsaW5rXG4gKiBAcGFyYW0gcmVzb3VyY2VMaW5rXG4gKi9cbmZ1bmN0aW9uIGdldEJyYW5jaE5hbWUocmVzb3VyY2VMaW5rOiBzdHJpbmcpIHtcbiAgbGV0IGJyYW5jaCA9IG51bGxcbiAgcmVzb3VyY2VMaW5rID0gcmVzb3VyY2VMaW5rIHx8ICcnXG4gIGNvbnN0IHBhcnRzID0gcmVzb3VyY2VMaW5rLnNwbGl0KCc/cmVmPScpXG5cbiAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHsgLy8gaWYgcmVmIHBhcmFtZXRlciBmb3VuZCwgZ2V0IGJyYW5jaCBuYW1lIGFmdGVyXG4gICAgYnJhbmNoID0gcGFydHM/LlsxXVxuICB9IGVsc2UgeyAvLyBmYWxsIGJhY2sgdG8gdXNpbmcgdXNlUnNyYyBmb3JtYXQgc3VjaCBhcyBcInVuZm9sZGluZ1dvcmQvZW4vdXN0L21hc3RlclwiXG4gICAgY29uc3QgX3BhcnRzID0gcmVzb3VyY2VMaW5rLnNwbGl0KCcvJylcbiAgICBicmFuY2ggPSBfcGFydHM/LlszXVxuICB9XG4gIHJldHVybiBicmFuY2hcbn1cblxuLyoqXG4gKiBnZXQgdGhlIHZlcnNlIG9iamVjdHMgZm9yIHRoZSByZWZlcmVuY2Ugc3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVmU3RyIC0gaW4gZm9ybWF0IDxjaGFwdGVyPjo8dmVyc2U+XG4gKiBAcGFyYW0ge29iamVjdH0gYm9va09iamVjdHMgLSBwYXJzZWQgdXNmbSBmb3IgYm9va1xuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlSWRcbiAqIEByZXR1cm4ge2FycmF5fG51bGx9IC0gb2YgdmVyc2VPYmplY3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWZXJzZXNGb3JSZWZTdHIocmVmU3RyLCBib29rT2JqZWN0cywgbGFuZ3VhZ2VJZCkge1xuICBpZiAoYm9va09iamVjdHMpIHtcbiAgICBsZXQgdmVyc2VzID0gZ2V0VmVyc2VzKGJvb2tPYmplY3RzLmNoYXB0ZXJzLCByZWZTdHIpXG5cbiAgICBpZiAobGFuZ3VhZ2VJZCA9PT0gJ2VsLXgta29pbmUnIHx8IGxhbmd1YWdlSWQgPT09ICdoYm8nKSB7XG4gICAgICB2ZXJzZXMgPSB2ZXJzZXMubWFwKHZlcnNlID0+IHtcbiAgICAgICAgaWYgKCB2ZXJzZT8udmVyc2VEYXRhPy52ZXJzZU9iamVjdHMpIHtcbiAgICAgICAgICBsZXQgdmVyc2VPYmplY3RzXyA9IGNvcmUub2NjdXJyZW5jZUluamVjdFZlcnNlT2JqZWN0cyggdmVyc2UudmVyc2VEYXRhLnZlcnNlT2JqZWN0cylcbiAgICAgICAgICB2ZXJzZU9iamVjdHNfID0gY2xlYW51cFZlcnNlT2JqZWN0cyh2ZXJzZU9iamVjdHNfKVxuICAgICAgICAgIHZlcnNlLnZlcnNlRGF0YS52ZXJzZU9iamVjdHMgPSB2ZXJzZU9iamVjdHNfXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZlcnNlXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB2ZXJzZXNcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG4vKipcbiAqIGdldCB0aGUgdmVyc2Ugb2JqZWN0cyBmb3IgdGhlIHJlZmVyZW5jZSBvYmplY3RcbiAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VcbiAqIEBwYXJhbSB7b2JqZWN0fSBib29rT2JqZWN0cyAtIHBhcnNlZCB1c2ZtIGZvciBib29rXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2VJZFxuICogQHJldHVybiB7YXJyYXl8bnVsbH0gLSBvZiB2ZXJzZU9iamVjdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZlcnNlc0ZvclJlZihyZWZlcmVuY2UsIGJvb2tPYmplY3RzLCBsYW5ndWFnZUlkKSB7XG4gIGNvbnN0IHJlZlN0ciA9IGAke3JlZmVyZW5jZS5jaGFwdGVyfToke3JlZmVyZW5jZS52ZXJzZX1gXG4gIHJldHVybiBnZXRWZXJzZXNGb3JSZWZTdHIocmVmU3RyLCBib29rT2JqZWN0cywgbGFuZ3VhZ2VJZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNjcmlwdHVyZSh7IC8vIGhvb2sgZm9yIGZldGNoaW5nIHNjcmlwdHVyZVxuICBjb25maWcsXG4gIHJlYWR5Rm9yRmV0Y2gsXG4gIHJlZmVyZW5jZSxcbiAgcmVzb3VyY2U6IHJlc291cmNlXyxcbiAgcmVzb3VyY2VMaW5rOiByZXNvdXJjZUxpbmtfLFxuICB3aG9sZUJvb2sgPSBmYWxzZSxcbn0gOiBQcm9wcykge1xuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlX10gPSB1c2VTdGF0ZSh7XG4gICAgYm9va09iamVjdHM6IG51bGwsXG4gICAgZmV0Y2hlZEJvb2s6ICcnLFxuICAgIGZldGNoUGFyYW1zOiB7XG4gICAgICByZXNvdXJjZUxpbms6ICcnLFxuICAgICAgcmVmZXJlbmNlOiB7fSxcbiAgICAgIGNvbmZpZzoge30sXG4gICAgfSxcbiAgICBpZ25vcmVTaGE6IG51bGwsXG4gICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLFxuICAgIGZldGNoZWQ6IGZhbHNlLFxuICAgIHJlc291cmNlU3RhdGU6IHtcbiAgICAgIGJpYmxlSnNvbjogbnVsbCxcbiAgICAgIG1hdGNoZWRWZXJzZTogbnVsbCxcbiAgICAgIHJlc291cmNlOiBudWxsLFxuICAgICAgY29udGVudDogbnVsbCxcbiAgICAgIGxvYWRpbmdSZXNvdXJjZTogZmFsc2UsXG4gICAgICBsb2FkaW5nQ29udGVudDogZmFsc2UsXG4gICAgICBmZXRjaFJlc3BvbnNlOiBudWxsLFxuICAgIH0sXG4gICAgdmVyc2VzRm9yUmVmOiBbXSxcbiAgfSlcblxuICBjb25zdCB7XG4gICAgYm9va09iamVjdHMsXG4gICAgZmV0Y2hlZEJvb2ssXG4gICAgZmV0Y2hQYXJhbXMsXG4gICAgZmV0Y2hlZCxcbiAgICBpZ25vcmVTaGEsXG4gICAgaW5pdGlhbGl6ZWQsXG4gICAgcmVzb3VyY2VTdGF0ZSxcbiAgICB2ZXJzZXNGb3JSZWYsXG4gIH0gPSBzdGF0ZVxuICBjb25zdCBfYm9va0lkID0gcmVmZXJlbmNlPy5wcm9qZWN0SWRcblxuICBmdW5jdGlvbiBzZXRTdGF0ZShuZXdTdGF0ZSkge1xuICAgIHNldFN0YXRlXyhwcmV2U3RhdGUgPT4gKHsgLi4ucHJldlN0YXRlLCAuLi5uZXdTdGF0ZSB9KSlcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJlYWR5Rm9yRmV0Y2gpIHtcbiAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgLSByZWFkeUZvckZldGNoIHRydWUsIGluaXRpYWxpemluZ2ApXG4gICAgICBsZXQgcmVzb3VyY2VMaW5rID0gcmVhZHlGb3JGZXRjaCAmJiByZXNvdXJjZUxpbmtfXG5cbiAgICAgIGlmICghcmVzb3VyY2VMaW5rXyAmJiByZXNvdXJjZV8pIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIG93bmVyLFxuICAgICAgICAgIGxhbmd1YWdlSWQsXG4gICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgIGJyYW5jaCA9ICdtYXN0ZXInLFxuICAgICAgICAgIHJlZiA9IG51bGwsXG4gICAgICAgIH0gPSByZXNvdXJjZV8gfHwge31cbiAgICAgICAgY29uc3QgcmVmXyA9IHJlZiB8fCBicmFuY2hcblxuICAgICAgICByZXNvdXJjZUxpbmsgPSBnZXRSZXNvdXJjZUxpbmsoe1xuICAgICAgICAgIG93bmVyLFxuICAgICAgICAgIGxhbmd1YWdlSWQsXG4gICAgICAgICAgcmVzb3VyY2VJZDogcHJvamVjdElkLFxuICAgICAgICAgIHJlZjogcmVmXyxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYm9va1JlZiA9IHsgLi4ucmVmZXJlbmNlIH1cblxuICAgICAgaWYgKHdob2xlQm9vaykge1xuICAgICAgICBkZWxldGUgYm9va1JlZi5jaGFwdGVyIC8vIHJlbW92ZSB0aGUgY2hhcHRlciBhbmQgdmVyc2Ugc28gdGhlIHdob2xlIGJvb2sgaXMgZmV0Y2hlZFxuICAgICAgICBkZWxldGUgYm9va1JlZi52ZXJzZVxuICAgICAgfVxuXG4gICAgICBpZiAocmVzb3VyY2VMaW5rICE9PSBmZXRjaFBhcmFtcz8ucmVzb3VyY2VMaW5rKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgLSBmb3IgJHtyZXNvdXJjZV8/LnByb2plY3RJZH0gcmVzb3VyY2VMaW5rIGlzIG5vdyAke3Jlc291cmNlTGlua30gYW5kIHJlc291cmNlTGlua189JHtyZXNvdXJjZUxpbmtffWApXG4gICAgICB9IGVsc2UgaWYgKGJvb2tSZWYgIT09IGZldGNoUGFyYW1zPy5yZWZlcmVuY2UpIHtcbiAgICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSAtIGJvb2sgY2hhbmdlZCB0byAke3Jlc291cmNlXz8ucHJvamVjdElkfSByZXNvdXJjZUxpbmsgaXMgbm93ICR7cmVzb3VyY2VMaW5rfWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0ZldGNoUGFyYW1zID0ge1xuICAgICAgICByZXNvdXJjZUxpbmssXG4gICAgICAgIHJlZmVyZW5jZTogYm9va1JlZixcbiAgICAgICAgY29uZmlnLFxuICAgICAgfVxuXG4gICAgICBpZiAoIWlzRXF1YWwobmV3RmV0Y2hQYXJhbXMsIGZldGNoUGFyYW1zKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIC0gRkVUQ0hJTkcgbmV3IHBhcmFtcyAke3Jlc291cmNlXz8ucHJvamVjdElkfSByZXNvdXJjZUxpbmsgaXMgbm93ICR7cmVzb3VyY2VMaW5rfSBhbmQgcmVzb3VyY2VMaW5rXz0ke3Jlc291cmNlTGlua199YCwgbmV3RmV0Y2hQYXJhbXMpXG4gICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICBmZXRjaFBhcmFtczogbmV3RmV0Y2hQYXJhbXMsXG4gICAgICAgICAgZmV0Y2hlZDogZmFsc2UsXG4gICAgICAgICAgaWdub3JlU2hhOiBudWxsLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3JlYWR5Rm9yRmV0Y2gsIF9ib29rSWQsIHJlc291cmNlTGlua19dKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSAtIGZvciAke3Jlc291cmNlXz8ucHJvamVjdElkfSByZWFkeUZvckZldGNoIGlzIG5vdyAke3JlYWR5Rm9yRmV0Y2h9YClcbiAgfSwgW3JlYWR5Rm9yRmV0Y2hdKVxuXG4gIGNvbnN0IG9wdGlvbnMgPSB7IGdldEJpYmxlSnNvbjogdHJ1ZSB9XG5cbiAgY29uc3QgX3Jlc291cmNlUmVzdWx0cyA9IHVzZVJzcmMoe1xuICAgIGNvbmZpZzogZmV0Y2hQYXJhbXM/LmNvbmZpZyxcbiAgICByZWZlcmVuY2U6IGZldGNoUGFyYW1zPy5yZWZlcmVuY2UsXG4gICAgcmVzb3VyY2VMaW5rOiBmZXRjaFBhcmFtcz8ucmVzb3VyY2VMaW5rLFxuICAgIG9wdGlvbnMsXG4gIH0pXG5cbiAgLy8gb25seSB1c2UgdGhlIHJlc3VsdHMgaWYgcmVhZHlUb0ZldGNoXG4gIGNvbnN0IHtcbiAgICBiaWJsZUpzb24sXG4gICAgY29udGVudCxcbiAgICBmZXRjaFJlc3BvbnNlLFxuICAgIGxvYWRpbmdSZXNvdXJjZSxcbiAgICBsb2FkaW5nQ29udGVudCxcbiAgICBtYXRjaGVkVmVyc2UsXG4gICAgcmVzb3VyY2UsXG4gIH0gPSByZXNvdXJjZVN0YXRlXG5cbiAgdXNlRWZmZWN0KCgpID0+IHsgLy8gdmFsaWRhdGUgcmVzcG9uc2UgdG8gbWFrZSBzdXJlIGZyb20gbGF0ZXN0IHJlcXVlc3RcbiAgICBpZiAocmVhZHlGb3JGZXRjaCkge1xuICAgICAgY29uc3QgY3VycmVudFJlc291cmNlU3RhdGUgPSBfcmVzb3VyY2VSZXN1bHRzPy5zdGF0ZVxuXG4gICAgICBpZiAoIWZldGNoZWQgJiYgIWlzRXF1YWwoY3VycmVudFJlc291cmNlU3RhdGUsIHJlc291cmNlU3RhdGUpKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgIGZldGNoUmVzcG9uc2UsXG4gICAgICAgICAgbG9hZGluZ0NvbnRlbnQsXG4gICAgICAgICAgbG9hZGluZ1Jlc291cmNlLFxuICAgICAgICB9ID0gY3VycmVudFJlc291cmNlU3RhdGVcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSByZXNvdXJjZXMgY2hhbmdlZGAsIHsgY29udGVudCwgZmV0Y2hQYXJhbXMsIGZldGNoUmVzcG9uc2UgfSlcblxuICAgICAgICBpZiAoIWxvYWRpbmdDb250ZW50ICYmICFsb2FkaW5nUmVzb3VyY2UgJiYgY29udGVudCAmJiBmZXRjaFJlc3BvbnNlKSB7XG4gICAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB7IHJlc291cmNlU3RhdGU6IGN1cnJlbnRSZXNvdXJjZVN0YXRlIH1cbiAgICAgICAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIGNvbnRlbnQgY2hhbmdlZGAsIHsgY29udGVudCwgZmV0Y2hQYXJhbXMsIGZldGNoUmVzcG9uc2UgfSlcblxuICAgICAgICAgIC8vIFRSSUNLWSAtIHJlc3BvbnNlcyBmcm9tIHNlcnZlciBjYW4gY29tZSBiYWNrIGZyb20gcHJldmlvdXMgcmVxdWVzdHMuICBTbyB3ZSBtYWtlIHN1cmUgdGhpcyByZXNwb25zZSBpcyBmb3IgdGhlIGN1cnJlbnQgcmVxdWVzdGVkIGJvb2tcbiAgICAgICAgICBsZXQgc2FtZUJvb2sgPSBmYWxzZVxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBjb25zdCBleHBlY3RlZEJvb2tJZCA9IF9ib29rSWQgfHwgJydcbiAgICAgICAgICBjb25zdCBmZXRjaGVkQm9vayA9IGNvbnRlbnQubmFtZVxuXG4gICAgICAgICAgaWYgKGZldGNoZWRCb29rICYmIGV4cGVjdGVkQm9va0lkKSB7XG4gICAgICAgICAgICBjb25zdCBbbmFtZSwgZXh0XSA9IGZldGNoZWRCb29rLnNwbGl0KCcuJylcblxuICAgICAgICAgICAgaWYgKGV4dC50b0xvd2VyQ2FzZSgpID09PSAndXNmbScpIHtcbiAgICAgICAgICAgICAgc2FtZUJvb2sgPSBuYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZXhwZWN0ZWRCb29rSWQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzaGEgPSBmZXRjaFJlc3BvbnNlPy5kYXRhPy5zaGEgfHwgbnVsbFxuICAgICAgICAgIGNvbnN0IHVybCA9IGZldGNoUmVzcG9uc2U/LmRhdGE/LnVybCB8fCBudWxsXG5cbiAgICAgICAgICBpZiAoc2FtZUJvb2spIHsgLy8gYWxzbyBtYWtlIHN1cmUgaXQgaXMgdGhlIHNhbWUgYnJhbmNoXG4gICAgICAgICAgICBjb25zdCBmZXRjaGVkQnJhbmNoID0gZ2V0QnJhbmNoTmFtZSh1cmwpXG4gICAgICAgICAgICBjb25zdCBmZXRjaGluZ0JyYW5jaCA9IGdldEJyYW5jaE5hbWUoZmV0Y2hQYXJhbXM/LnJlc291cmNlTGluaylcblxuICAgICAgICAgICAgaWYgKGZldGNoZWRCcmFuY2ggIT09IGZldGNoaW5nQnJhbmNoKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgaW52YWxpZCBicmFuY2gsIGV4cGVjdGVkIGJyYW5jaCBpcyAke2ZldGNoaW5nQnJhbmNofSwgYnV0IGZldGNoZWRCcmFuY2ggaXMgJHtmZXRjaGVkQnJhbmNofWAsIHsgc2hhLCB1cmwgfSlcbiAgICAgICAgICAgICAgc2FtZUJvb2sgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpZ25vcmVTaGEgPT09IHNoYSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSAtIHRoZSBzaGEgaXMgdGhlIHNhbWUgYXMgdGhlIGlnbm9yZSBzaGEgJHtzaGF9YCwgeyBzaGEsIHVybCB9KVxuICAgICAgICAgICAgc2FtZUJvb2sgPSBmYWxzZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc2FtZUJvb2spIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgaW52YWxpZCBib29rLCBleHBlY3RlZEJvb2tJZCBpcyAke2V4cGVjdGVkQm9va0lkfSwgYnV0IHJlY2VpdmVkIGJvb2sgbmFtZSAke2ZldGNoZWRCb29rfWAsIHsgc2hhLCB1cmwgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3U3RhdGVbJ2Jvb2tPYmplY3RzJ10gPSBjb250ZW50XG4gICAgICAgICAgICBuZXdTdGF0ZVsndmVyc2VzRm9yUmVmJ10gPSB1cGRhdGVWZXJzZXNGb3JSZWYoY29udGVudClcbiAgICAgICAgICAgIG5ld1N0YXRlWydmZXRjaGVkQm9vayddID0gZXhwZWN0ZWRCb29rSWRcblxuICAgICAgICAgICAgaWYgKCFpc0VxdWFsKG5ld1N0YXRlLCB7XG4gICAgICAgICAgICAgIGJvb2tPYmplY3RzLFxuICAgICAgICAgICAgICB2ZXJzZXNGb3JSZWYsXG4gICAgICAgICAgICAgIGZldGNoZWRCb29rOiBleHBlY3RlZEJvb2tJZCxcbiAgICAgICAgICAgICAgcmVzb3VyY2VTdGF0ZSxcbiAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgY29ycmVjdCBib29rLCBleHBlY3RlZEJvb2tJZCBpcyAke2V4cGVjdGVkQm9va0lkfWAsIHsgc2hhLCB1cmwgfSlcbiAgICAgICAgICAgICAgbmV3U3RhdGVbJ2ZldGNoZWQnXSA9IHRydWVcbiAgICAgICAgICAgICAgbmV3U3RhdGVbJ2lnbm9yZVNoYSddID0gbnVsbFxuICAgICAgICAgICAgICBzZXRTdGF0ZShuZXdTdGF0ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFpc0VxdWFsKGN1cnJlbnRSZXNvdXJjZVN0YXRlLCByZXNvdXJjZVN0YXRlKSkge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSBzdGF0ZSBjaGFuZ2VkLCBidXQgbm8gY29udGVudGAsIGN1cnJlbnRSZXNvdXJjZVN0YXRlKVxuICAgICAgICAgICAgc2V0U3RhdGUoeyByZXNvdXJjZVN0YXRlOiBjdXJyZW50UmVzb3VyY2VTdGF0ZSB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3JlYWR5Rm9yRmV0Y2gsIF9yZXNvdXJjZVJlc3VsdHM/LnN0YXRlXSlcblxuICBjb25zdCB7IHRpdGxlLCB2ZXJzaW9uIH0gPSBwYXJzZVJlc291cmNlTWFuaWZlc3QocmVzb3VyY2UpXG4gIGNvbnN0IHsgbGFuZ3VhZ2VJZCB9ID0gcmVzb3VyY2VfIHx8IHt9XG4gIGNvbnN0IGxvYWRpbmcgPSBsb2FkaW5nUmVzb3VyY2UgfHwgbG9hZGluZ0NvbnRlbnQgfHwgIXJlYWR5Rm9yRmV0Y2hcbiAgY29uc3QgY29udGVudE5vdEZvdW5kRXJyb3IgPSAhY29udGVudFxuICBjb25zdCBzY3JpcHR1cmVOb3RMb2FkZWRFcnJvciA9ICFiaWJsZUpzb25cbiAgY29uc3QgbWFuaWZlc3ROb3RGb3VuZEVycm9yID0gIXJlc291cmNlPy5tYW5pZmVzdFxuICBjb25zdCBpbnZhbGlkTWFuaWZlc3RFcnJvciA9ICF0aXRsZSB8fCAhdmVyc2lvbiB8fCAhbGFuZ3VhZ2VJZFxuICBjb25zdCBlcnJvciA9IHJlYWR5Rm9yRmV0Y2ggJiYgaW5pdGlhbGl6ZWQgJiYgIWxvYWRpbmcgJiZcbiAgICAoY29udGVudE5vdEZvdW5kRXJyb3IgfHwgc2NyaXB0dXJlTm90TG9hZGVkRXJyb3IgfHwgbWFuaWZlc3ROb3RGb3VuZEVycm9yIHx8IGludmFsaWRNYW5pZmVzdEVycm9yKVxuICBjb25zdCByZXNvdXJjZVN0YXR1cyA9IHtcbiAgICBbTE9BRElOR19TVEFURV06IGxvYWRpbmcsXG4gICAgW0NPTlRFTlRfTk9UX0ZPVU5EX0VSUk9SXTogY29udGVudE5vdEZvdW5kRXJyb3IsXG4gICAgW1NDUklQVFVSRV9OT1RfTE9BREVEX0VSUk9SXTogc2NyaXB0dXJlTm90TG9hZGVkRXJyb3IsXG4gICAgW01BTklGRVNUX05PVF9MT0FERURfRVJST1JdOiBtYW5pZmVzdE5vdEZvdW5kRXJyb3IsXG4gICAgW0lOVkFMSURfTUFOSUZFU1RfRVJST1JdOiBpbnZhbGlkTWFuaWZlc3RFcnJvcixcbiAgICBbRVJST1JfU1RBVEVdOiBlcnJvcixcbiAgICBbSU5JVElBTElaRURfU1RBVEVdOiBpbml0aWFsaXplZCxcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFyZWFkeUZvckZldGNoKSB7XG4gICAgICBpZiAoaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgc2V0U3RhdGUoeyBpbnRpYWxpemVkOiBmYWxzZSB9KVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWluaXRpYWxpemVkKSB7XG4gICAgICBpZiAobG9hZGluZykgeyAvLyBvbmNlIGZpcnN0IGxvYWQgaGFzIGJlZ3VuLCB3ZSBhcmUgaW5pdGlhbGl6ZWRcbiAgICAgICAgc2V0U3RhdGUoeyBpbnRpYWxpemVkOiB0cnVlIH0pXG4gICAgICB9XG4gICAgfVxuICB9LCBbbG9hZGluZywgcmVhZHlGb3JGZXRjaF0pXG5cbiAgLyoqXG4gICAqIGdldCB2ZXJzZXMgZm9yIHJlZlxuICAgKiBAcGFyYW0gcmVmU3RyXG4gICAqIEBwYXJhbSBjb250ZW50X1xuICAgKi9cbiAgZnVuY3Rpb24gX2dldFZlcnNlc0ZvclJlZihyZWZTdHIsIGNvbnRlbnRfID0gYm9va09iamVjdHMpIHtcbiAgICBpZiAoY29udGVudF8pIHtcbiAgICAgIHJldHVybiBnZXRWZXJzZXNGb3JSZWZTdHIocmVmU3RyLCBjb250ZW50XywgbGFuZ3VhZ2VJZClcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVZlcnNlKGNoYXB0ZXIsIHZlcnNlLCB2ZXJzZURhdGEpIHtcbiAgICBpZiAoYm9va09iamVjdHMpIHtcbiAgICAgIGNvbnN0IGJvb2tPYmplY3RzXyA9IHsgLi4uYm9va09iamVjdHMgfSAvLyBzaGFsbG93IGNvcHlcblxuICAgICAgaWYgKGJvb2tPYmplY3RzXz8uY2hhcHRlcnMpIHtcbiAgICAgICAgYm9va09iamVjdHNfLmNoYXB0ZXJzID0geyAuLi5ib29rT2JqZWN0c18uY2hhcHRlcnMgfSAvLyBzaGFsbG93IGNvcHkgY2hhcHRlcnNcblxuICAgICAgICBpZiAoYm9va09iamVjdHNfLmNoYXB0ZXJzW2NoYXB0ZXJdKSB7XG4gICAgICAgICAgYm9va09iamVjdHNfLmNoYXB0ZXJzW2NoYXB0ZXJdID0geyAuLi5ib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl0gfSAvLyBzaGFsbG93IGNvcHkgdmVyc2VzXG4gICAgICAgICAgYm9va09iamVjdHNfLmNoYXB0ZXJzW2NoYXB0ZXJdW3ZlcnNlXSA9IHZlcnNlRGF0YVxuICAgICAgICAgIHNldFN0YXRlKHsgYm9va09iamVjdHM6IGJvb2tPYmplY3RzXyB9KVxuICAgICAgICAgIHJldHVybiBib29rT2JqZWN0c19cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlVmVyc2VzRm9yUmVmKF9ib29rT2JqZWN0cyA9IGJvb2tPYmplY3RzKSB7XG4gICAgbGV0IG5ld1ZlcnNlc0ZvclJlZiA9IFtdXG5cbiAgICBpZiAoX2Jvb2tPYmplY3RzKSB7XG4gICAgICBuZXdWZXJzZXNGb3JSZWYgPSBnZXRWZXJzZXNGb3JSZWYocmVmZXJlbmNlLCBfYm9va09iamVjdHMsIGxhbmd1YWdlSWQpXG4gICAgICByZXR1cm4gbmV3VmVyc2VzRm9yUmVmXG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBmb3JjZSByZWxvYWQgb2YgY3VycmVudCByZXNvdXJjZVxuICAgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IGlnbm9yZVNoYSAtIG9wdGlvbmFsIHNoYSB0byBpZ25vcmVcbiAgICovXG4gIGZ1bmN0aW9uIHJlbG9hZFJlc291cmNlKGlnbm9yZVNoYSkge1xuICAgIGNvbnN0IF9yZWxvYWRSZXNvdXJjZSA9IF9yZXNvdXJjZVJlc3VsdHM/LmFjdGlvbnMucmVsb2FkUmVzb3VyY2VcblxuICAgIGlmIChfcmVsb2FkUmVzb3VyY2UpIHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0geyBmZXRjaGVkOiBmYWxzZSB9XG5cbiAgICAgIGlmIChpZ25vcmVTaGEpIHsgLy8gVFJJQ0tZIC0gaWYgdGhlIHJlc3BvbnNlIHdhcyBmb3IgdGhpcyBzaGEgKHdoaWNoIHdhcyB0aGUgcHJldmlvdXMgc2hhKSB0aGVuIHdlIG5lZWQgdG8gaWdub3JlIGl0XG4gICAgICAgIG5ld1N0YXRlWydpZ25vcmVTaGEnXSA9IGlnbm9yZVNoYVxuICAgICAgfVxuICAgICAgc2V0U3RhdGUoIG5ld1N0YXRlKVxuICAgICAgX3JlbG9hZFJlc291cmNlKClcbiAgICB9XG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGN1cnJlbnRCb29rUmVmID0gZmV0Y2hQYXJhbXM/LnJlZmVyZW5jZT8ucHJvamVjdElkXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY3VycmVudEJvb2tSZWYpIHtcbiAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgZmV0Y2hlZCBib29rIGNoYW5nZWQgdG8gJHtjdXJyZW50Qm9va1JlZn0sICR7cmVzb3VyY2VMaW5rX31gLCB7IGNvbnRlbnQsIGZldGNoUGFyYW1zIH0pXG4gICAgICBzZXRTdGF0ZSh7IGJvb2tPYmplY3RzOiBudWxsIH0pXG4gICAgfVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgfSwgW2N1cnJlbnRCb29rUmVmXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgYm9vayByZWYgY2hhbmdlZCB0byAke19ib29rSWR9LCAke3Jlc291cmNlTGlua199YClcbiAgICAvLyBAdHMtaWdub3JlXG4gIH0sIFtfYm9va0lkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGV4cGVjdGVkQm9va0lkID0gX2Jvb2tJZCB8fCAnJ1xuICAgIGNvbnN0IGZldGNoZWRCb29rU2FtZSA9IGZldGNoZWRCb29rICYmIChmZXRjaGVkQm9vayA9PT0gZXhwZWN0ZWRCb29rSWQpXG4gICAgbGV0IF92ZXJzZXNGb3JSZWYgPSBbXVxuXG4gICAgaWYgKCFmZXRjaGVkQm9va1NhbWUpIHtcbiAgICAgIC8vIGlmIChleHBlY3RlZEJvb2tJZCAmJiBmZXRjaGVkQm9vaykge1xuICAgICAgLy8gICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIGV4cGVjdGVkIGJvb2sgJHtleHBlY3RlZEJvb2tJZH0gYnV0IGZldGNoZWQgYm9vayB3YXMgJHtmZXRjaGVkQm9va30gLSBjbGVhcmluZ2ApXG4gICAgICAvLyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IF9ib29rT2JqZWN0cyA9IGZldGNoZWRCb29rU2FtZSA/IGJvb2tPYmplY3RzIDogbnVsbFxuICAgICAgX3ZlcnNlc0ZvclJlZiA9IHVwZGF0ZVZlcnNlc0ZvclJlZihfYm9va09iamVjdHMpXG4gICAgICAvLyBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIF9ib29rT2JqZWN0cyBpcyAkeyEhX2Jvb2tPYmplY3RzfSBhbmQgYm9va3MgYXJlIHRoZSBzYW1lICR7ZmV0Y2hlZEJvb2t9YCwgeyBjb250ZW50LCBmZXRjaFBhcmFtcyB9KVxuICAgIH1cblxuICAgIGlmICghaXNFcXVhbChfdmVyc2VzRm9yUmVmLCB2ZXJzZXNGb3JSZWYpKSB7XG4gICAgICBzZXRTdGF0ZSh7IHZlcnNlc0ZvclJlZjogX3ZlcnNlc0ZvclJlZiB9KVxuICAgIH1cbiAgfSwgW3JlZmVyZW5jZV0pXG5cbiAgcmV0dXJuIHtcbiAgICBib29rT2JqZWN0cyxcbiAgICBmZXRjaFJlc3BvbnNlLFxuICAgIGdldFZlcnNlc0ZvclJlZjogX2dldFZlcnNlc0ZvclJlZixcbiAgICBtYXRjaGVkVmVyc2UsXG4gICAgcmVmZXJlbmNlOiBmZXRjaFBhcmFtcz8ucmVmZXJlbmNlLFxuICAgIHJlbG9hZFJlc291cmNlLFxuICAgIHJlc291cmNlTGluazogZmV0Y2hQYXJhbXM/LnJlc291cmNlTGluayxcbiAgICByZXNvdXJjZVN0YXR1cyxcbiAgICB0aXRsZSxcbiAgICB1cGRhdGVWZXJzZSxcbiAgICB2ZXJzaW9uLFxuICAgIHZlcnNlc0ZvclJlZixcbiAgfVxufVxuIl19
|
package/dist/utils/common.js
CHANGED
|
@@ -16,4 +16,4 @@ export var REPO_NOT_FOUND_ERROR = 'Project not Found!';
|
|
|
16
16
|
export var REPO_NOT_SCRIPTURE_ERROR = 'This link does not point to a scripture resource.';
|
|
17
17
|
export var MANIFEST_INVALID_SHORT_ERROR = 'The manifest for this project is invalid!';
|
|
18
18
|
export var LOADING_RESOURCE = 'Loading Resource...';
|
|
19
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jb21tb24udHMiXSwibmFtZXMiOlsiTlRfT1JJR19MQU5HIiwiTlRfT1JJR19MQU5HX0JJQkxFIiwiT1RfT1JJR19MQU5HIiwiT1RfT1JJR19MQU5HX0JJQkxFIiwiT1JJR0lOQUxfU09VUkNFIiwiVEFSR0VUX0xJVEVSQUwiLCJUQVJHRVRfU0lNUExJRklFRCIsIk1BTklGRVNUX05PVF9GT1VORF9FUlJPUl9NU0ciLCJNQU5JRkVTVF9JTlZBTElEX0VSUk9SX01TRyIsIkJPT0tfTk9UX0ZPVU5EX0VSUk9SX01TRyIsIlNDUklQVFVSRV9OT1RfRk9VTkRfRVJST1JfTVNHIiwiSU5WQUxJRF9VUkwiLCJJTlZBTElEX1JFUE9fVVJMX0VSUk9SIiwiUkVQT19OT1RfRk9VTkRfRVJST1IiLCJSRVBPX05PVF9TQ1JJUFRVUkVfRVJST1IiLCJNQU5JRkVTVF9JTlZBTElEX1NIT1JUX0VSUk9SIiwiTE9BRElOR19SRVNPVVJDRSJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFNQSxZQUFZLEdBQUcsWUFBckI7QUFDUCxPQUFPLElBQU1DLGtCQUFrQixHQUFHLE1BQTNCO0FBQ1AsT0FBTyxJQUFNQyxZQUFZLEdBQUcsS0FBckI7QUFDUCxPQUFPLElBQU1DLGtCQUFrQixHQUFHLEtBQTNCO0FBQ1AsT0FBTyxJQUFNQyxlQUFlLEdBQUcsaUJBQXhCO0FBQ1AsT0FBTyxJQUFNQyxjQUFjLEdBQUcsZ0JBQXZCO0FBQ1AsT0FBTyxJQUFNQyxpQkFBaUIsR0FBRyxtQkFBMUIsQyxDQUVQOztBQUNBLE9BQU8sSUFBTUMsNEJBQTRCLEdBQUcsdUhBQXJDO0FBQ1AsT0FBTyxJQUFNQywwQkFBMEIsR0FBRyw2REFBbkM7QUFDUCxPQUFPLElBQU1DLHdCQUF3QixHQUFHLDhEQUFqQztBQUNQLE9BQU8sSUFBTUMsNkJBQTZCLEdBQUcsa0VBQXRDO0FBQ1AsT0FBTyxJQUFNQyxXQUFXLEdBQUcsY0FBcEI7QUFDUCxPQUFPLElBQU1DLHNCQUFzQixHQUFHLHNCQUEvQjtBQUNQLE9BQU8sSUFBTUMsb0JBQW9CLEdBQUcsb0JBQTdCO0FBQ1AsT0FBTyxJQUFNQyx3QkFBd0IsR0FBRyxtREFBakM7QUFDUCxPQUFPLElBQU1DLDRCQUE0QixHQUFHLDJDQUFyQztBQUNQLE9BQU8sSUFBTUMsZ0JBQWdCLEdBQUcscUJBQXpCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IE5UX09SSUdfTEFORyA9ICdlbC14LWtvaW5lJ1xuZXhwb3J0IGNvbnN0IE5UX09SSUdfTEFOR19CSUJMRSA9ICd1Z250J1xuZXhwb3J0IGNvbnN0IE9UX09SSUdfTEFORyA9ICdoYm8nXG5leHBvcnQgY29uc3QgT1RfT1JJR19MQU5HX0JJQkxFID0gJ3VoYidcbmV4cG9ydCBjb25zdCBPUklHSU5BTF9TT1VSQ0UgPSAnT1JJR0lOQUxfU09VUkNFJ1xuZXhwb3J0IGNvbnN0IFRBUkdFVF9MSVRFUkFMID0gJ1RBUkdFVF9MSVRFUkFMJ1xuZXhwb3J0IGNvbnN0IFRBUkdFVF9TSU1QTElGSUVEID0gJ1RBUkdFVF9TSU1QTElGSUVEJ1xuXG4vLyBtZXNzYWdlc1xuZXhwb3J0IGNvbnN0IE1BTklGRVNUX05PVF9GT1VORF9FUlJPUl9NU0cgPSAnVGhpcyBwcm9qZWN0IG1hbmlmZXN0IGZhaWxlZCB0byBsb2FkLiAgUGxlYXNlIGNvbmZpcm0gdGhhdCB0aGUgY29ycmVjdCBtYW5pZmVzdC55YW1sIGZpbGUgZXhpc3RzIGluIHRoZSBwcm9qZWN0IGF0OlxcbidcbmV4cG9ydCBjb25zdCBNQU5JRkVTVF9JTlZBTElEX0VSUk9SX01TRyA9ICdUaGUgbWFuaWZlc3QgZm9yIHRoaXMgcHJvamVjdCBpcyBpbnZhbGlkLiAgUHJvamVjdCBpcyBhdDpcXG4nXG5leHBvcnQgY29uc3QgQk9PS19OT1RfRk9VTkRfRVJST1JfTVNHID0gJ1RoaXMgYm9vayBjYW4gbm90IGJlIGZvdW5kIGluIHRoZSBwcm9qZWN0LiAgUHJvamVjdCBpcyBhdDpcXG4nXG5leHBvcnQgY29uc3QgU0NSSVBUVVJFX05PVF9GT1VORF9FUlJPUl9NU0cgPSAnVGhlcmUgaXMgbm8gYXNzb2NpYXRlZCBjb250ZW50IGZvciB0aGlzIHZlcnNlLiAgUHJvamVjdCBpcyBhdDpcXG4nXG5leHBvcnQgY29uc3QgSU5WQUxJRF9VUkwgPSAnSW52YWxpZCBVUkwhJ1xuZXhwb3J0IGNvbnN0IElOVkFMSURfUkVQT19VUkxfRVJST1IgPSAnSW52YWxpZCBQcm9qZWN0IFVSTCEnXG5leHBvcnQgY29uc3QgUkVQT19OT1RfRk9VTkRfRVJST1IgPSAnUHJvamVjdCBub3QgRm91bmQhJ1xuZXhwb3J0IGNvbnN0IFJFUE9fTk9UX1NDUklQVFVSRV9FUlJPUiA9ICdUaGlzIGxpbmsgZG9lcyBub3QgcG9pbnQgdG8gYSBzY3JpcHR1cmUgcmVzb3VyY2UuJ1xuZXhwb3J0IGNvbnN0IE1BTklGRVNUX0lOVkFMSURfU0hPUlRfRVJST1IgPSAnVGhlIG1hbmlmZXN0IGZvciB0aGlzIHByb2plY3QgaXMgaW52YWxpZCEnXG5leHBvcnQgY29uc3QgTE9BRElOR19SRVNPVVJDRSA9ICdMb2FkaW5nIFJlc291cmNlLi4uJ1xuXG4iXX0=
|
package/dist/utils/delay.js
CHANGED
|
@@ -6,4 +6,4 @@ export function delay(ms) {
|
|
|
6
6
|
return setTimeout(resolve, ms);
|
|
7
7
|
});
|
|
8
8
|
}
|
|
9
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kZWxheS50cyJdLCJuYW1lcyI6WyJkZWxheSIsIm1zIiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiOzs7QUFBQSxPQUFPLFNBQVNBLEtBQVQsQ0FBZUMsRUFBZixFQUFtQjtBQUN4QixTQUFPLElBQUlDLE9BQUosQ0FBWSxVQUFDQyxPQUFEO0FBQUEsV0FDakJDLFVBQVUsQ0FBQ0QsT0FBRCxFQUFVRixFQUFWLENBRE87QUFBQSxHQUFaLENBQVA7QUFHRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBkZWxheShtcykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+
|
|
9
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kZWxheS50cyJdLCJuYW1lcyI6WyJkZWxheSIsIm1zIiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiOzs7QUFBQSxPQUFPLFNBQVNBLEtBQVQsQ0FBZUMsRUFBZixFQUFtQjtBQUN4QixTQUFPLElBQUlDLE9BQUosQ0FBWSxVQUFDQyxPQUFEO0FBQUEsV0FDakJDLFVBQVUsQ0FBQ0QsT0FBRCxFQUFVRixFQUFWLENBRE87QUFBQSxHQUFaLENBQVA7QUFHRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBkZWxheShtcykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCBtcyksXG4gIClcbn1cblxuIl19
|
package/dist/utils/maps.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import "core-js/modules/es.array.from.js";
|
|
2
2
|
import "core-js/modules/es.array.iterator.js";
|
|
3
|
+
import "core-js/modules/es.object.keys.js";
|
|
3
4
|
import "core-js/modules/es.object.to-string.js";
|
|
4
5
|
import "core-js/modules/es.string.iterator.js";
|
|
5
6
|
import "core-js/modules/web.dom-collections.iterator.js";
|
|
@@ -38,4 +39,24 @@ export function areMapsTheSame(map1, map2) {
|
|
|
38
39
|
|
|
39
40
|
return !different;
|
|
40
41
|
}
|
|
41
|
-
|
|
42
|
+
export function debugIsEqual(newItem, oldItem) {
|
|
43
|
+
var equal = isEqual(newItem, oldItem);
|
|
44
|
+
|
|
45
|
+
if (!equal) {
|
|
46
|
+
for (var _i2 = 0, _Object$keys = Object.keys(newItem); _i2 < _Object$keys.length; _i2++) {
|
|
47
|
+
var key = _Object$keys[_i2];
|
|
48
|
+
var newData = newItem[key];
|
|
49
|
+
var oldData = oldItem[key];
|
|
50
|
+
|
|
51
|
+
if (!isEqual(newData, oldData)) {
|
|
52
|
+
console.log("miscompare on ".concat(key), {
|
|
53
|
+
newData: newData,
|
|
54
|
+
oldData: oldData
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return equal;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9tYXBzLmpzIl0sIm5hbWVzIjpbImlzRXF1YWwiLCJhcmVNYXBzVGhlU2FtZSIsIm1hcDEiLCJtYXAyIiwic2l6ZSIsImtleXMxIiwiQXJyYXkiLCJmcm9tIiwia2V5cyIsImtleXMyIiwiZGlmZmVyZW50Iiwia2V5IiwidmFsdWUxIiwiZ2V0IiwidmFsdWUyIiwiZGVidWdJc0VxdWFsIiwibmV3SXRlbSIsIm9sZEl0ZW0iLCJlcXVhbCIsIk9iamVjdCIsIm5ld0RhdGEiLCJvbGREYXRhIiwiY29uc29sZSIsImxvZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxLQUFLQSxPQUFaLE1BQXlCLFlBQXpCO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLE9BQU8sU0FBU0MsY0FBVCxDQUF5QkMsSUFBekIsRUFBK0JDLElBQS9CLEVBQXNDO0FBQzNDLE1BQUlELElBQUksQ0FBQ0UsSUFBTCxLQUFjRCxJQUFJLENBQUNDLElBQXZCLEVBQTZCO0FBQzNCLFdBQU8sS0FBUDtBQUNEOztBQUVELE1BQU1DLEtBQUssR0FBR0MsS0FBSyxDQUFDQyxJQUFOLENBQVlMLElBQUksQ0FBQ00sSUFBTCxFQUFaLENBQWQ7QUFDQSxNQUFNQyxLQUFLLEdBQUdILEtBQUssQ0FBQ0MsSUFBTixDQUFZSixJQUFJLENBQUNLLElBQUwsRUFBWixDQUFkOztBQUVBLE1BQUksQ0FBQ1IsT0FBTyxDQUFDSyxLQUFELEVBQVFJLEtBQVIsQ0FBWixFQUE0QjtBQUMxQixXQUFPLEtBQVA7QUFDRDs7QUFFRCxNQUFJQyxTQUFTLEdBQUcsS0FBaEI7O0FBRUEsMkJBQWtCTCxLQUFsQiwyQkFBeUI7QUFBcEIsUUFBTU0sR0FBRyxZQUFUO0FBQ0gsUUFBTUMsTUFBTSxHQUFHVixJQUFJLENBQUNXLEdBQUwsQ0FBU0YsR0FBVCxDQUFmO0FBQ0EsUUFBTUcsTUFBTSxHQUFHWCxJQUFJLENBQUNVLEdBQUwsQ0FBU0YsR0FBVCxDQUFmOztBQUVBLFFBQUksQ0FBQ1gsT0FBTyxDQUFDWSxNQUFELEVBQVNFLE1BQVQsQ0FBWixFQUE4QjtBQUM1QkosTUFBQUEsU0FBUyxHQUFHLElBQVo7QUFDQTtBQUNEO0FBQ0Y7O0FBRUQsU0FBTyxDQUFDQSxTQUFSO0FBQ0Q7QUFFRCxPQUFPLFNBQVNLLFlBQVQsQ0FBc0JDLE9BQXRCLEVBQStCQyxPQUEvQixFQUF3QztBQUM3QyxNQUFNQyxLQUFLLEdBQUdsQixPQUFPLENBQUNnQixPQUFELEVBQVVDLE9BQVYsQ0FBckI7O0FBRUEsTUFBSSxDQUFDQyxLQUFMLEVBQVk7QUFDVixxQ0FBa0JDLE1BQU0sQ0FBQ1gsSUFBUCxDQUFZUSxPQUFaLENBQWxCLG9DQUF3QztBQUFuQyxVQUFNTCxHQUFHLG9CQUFUO0FBQ0gsVUFBTVMsT0FBTyxHQUFHSixPQUFPLENBQUNMLEdBQUQsQ0FBdkI7QUFDQSxVQUFNVSxPQUFPLEdBQUdKLE9BQU8sQ0FBQ04sR0FBRCxDQUF2Qjs7QUFFQSxVQUFJLENBQUNYLE9BQU8sQ0FBQ29CLE9BQUQsRUFBVUMsT0FBVixDQUFaLEVBQWdDO0FBQzlCQyxRQUFBQSxPQUFPLENBQUNDLEdBQVIseUJBQTZCWixHQUE3QixHQUFvQztBQUFFUyxVQUFBQSxPQUFPLEVBQVBBLE9BQUY7QUFBV0MsVUFBQUEsT0FBTyxFQUFQQTtBQUFYLFNBQXBDO0FBQ0Q7QUFDRjtBQUNGOztBQUNELFNBQU9ILEtBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGlzRXF1YWwgZnJvbSAnZGVlcC1lcXVhbCdcblxuLyoqXG4gKiBkbyBxdWljayBjb21wYXJpc29uIG9mIHR3byBtYXBzXG4gKiBAcGFyYW0ge01hcH0gbWFwMVxuICogQHBhcmFtIG1hcDJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IC0gdHJ1ZSBpZiBzYW1lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcmVNYXBzVGhlU2FtZSggbWFwMSwgbWFwMiApIHtcbiAgaWYgKG1hcDEuc2l6ZSAhPT0gbWFwMi5zaXplKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBrZXlzMSA9IEFycmF5LmZyb20oIG1hcDEua2V5cygpIClcbiAgY29uc3Qga2V5czIgPSBBcnJheS5mcm9tKCBtYXAyLmtleXMoKSApXG5cbiAgaWYgKCFpc0VxdWFsKGtleXMxLCBrZXlzMikpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGxldCBkaWZmZXJlbnQgPSBmYWxzZVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMxKSB7XG4gICAgY29uc3QgdmFsdWUxID0gbWFwMS5nZXQoa2V5KVxuICAgIGNvbnN0IHZhbHVlMiA9IG1hcDIuZ2V0KGtleSlcblxuICAgIGlmICghaXNFcXVhbCh2YWx1ZTEsIHZhbHVlMikpIHtcbiAgICAgIGRpZmZlcmVudCA9IHRydWVcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICFkaWZmZXJlbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlYnVnSXNFcXVhbChuZXdJdGVtLCBvbGRJdGVtKSB7XG4gIGNvbnN0IGVxdWFsID0gaXNFcXVhbChuZXdJdGVtLCBvbGRJdGVtKVxuXG4gIGlmICghZXF1YWwpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhuZXdJdGVtKSkge1xuICAgICAgY29uc3QgbmV3RGF0YSA9IG5ld0l0ZW1ba2V5XVxuICAgICAgY29uc3Qgb2xkRGF0YSA9IG9sZEl0ZW1ba2V5XVxuXG4gICAgICBpZiAoIWlzRXF1YWwobmV3RGF0YSwgb2xkRGF0YSkpIHtcbiAgICAgICAgY29uc29sZS5sb2coYG1pc2NvbXBhcmUgb24gJHtrZXl9YCwgeyBuZXdEYXRhLCBvbGREYXRhIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBlcXVhbFxufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "single-scripture-rcl",
|
|
3
3
|
"description": "A React Component Library for Rendering a Single Scripture Resource.",
|
|
4
|
-
"version": "3.3.3-beta.
|
|
4
|
+
"version": "3.3.3-beta.87",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/unfoldingWord/single-scripture-rcl.git"
|