occam-verify-cli 0.0.902 → 0.0.904

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.
Files changed (51) hide show
  1. package/lib/axiomLemmaTheoremConjecture.js +18 -34
  2. package/lib/conclusion.js +3 -3
  3. package/lib/constants.js +1 -9
  4. package/lib/metaLemmaMetatheorem.js +22 -40
  5. package/lib/rule.js +45 -83
  6. package/lib/ruleNames.js +1 -21
  7. package/lib/utilities/array.js +49 -42
  8. package/lib/utilities/verifier.js +4 -10
  9. package/lib/verifier/node/metastatement.js +31 -6
  10. package/lib/verifier/node/statementAsCombinator.js +31 -6
  11. package/lib/verifier/node/termAsConstructor.js +25 -5
  12. package/lib/verifier/nodes/equality.js +13 -3
  13. package/lib/verifier/nodes/intrinsicLevel.js +13 -3
  14. package/lib/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +13 -3
  15. package/lib/verifier/nodes/metaLevel.js +13 -3
  16. package/lib/verifier/nodes/statementAgainstCombinator.js +13 -3
  17. package/lib/verifier/nodes/termAgainstConstructor.js +13 -3
  18. package/lib/verify/containedAssertion.js +2 -2
  19. package/lib/verify/premise.js +1 -3
  20. package/lib/verify/statement/qualified.js +4 -7
  21. package/lib/verify/statement/unqualified.js +2 -5
  22. package/lib/verify/statement.js +34 -19
  23. package/lib/verify/statementAsCombinator.js +1 -2
  24. package/package.json +1 -1
  25. package/src/axiomLemmaTheoremConjecture.js +27 -47
  26. package/src/conclusion.js +2 -2
  27. package/src/constants.js +0 -2
  28. package/src/metaLemmaMetatheorem.js +33 -54
  29. package/src/rule.js +58 -101
  30. package/src/ruleNames.js +0 -5
  31. package/src/utilities/array.js +22 -42
  32. package/src/utilities/verifier.js +3 -11
  33. package/src/verifier/node/metastatement.js +46 -6
  34. package/src/verifier/node/statementAsCombinator.js +50 -10
  35. package/src/verifier/node/termAsConstructor.js +37 -6
  36. package/src/verifier/nodes/equality.js +19 -4
  37. package/src/verifier/nodes/intrinsicLevel.js +18 -3
  38. package/src/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +18 -3
  39. package/src/verifier/nodes/metaLevel.js +19 -4
  40. package/src/verifier/nodes/statementAgainstCombinator.js +18 -3
  41. package/src/verifier/nodes/termAgainstConstructor.js +19 -4
  42. package/src/verify/containedAssertion.js +1 -1
  43. package/src/verify/premise.js +0 -2
  44. package/src/verify/statement/qualified.js +3 -7
  45. package/src/verify/statement/unqualified.js +1 -5
  46. package/src/verify/statement.js +38 -18
  47. package/src/verify/statementAsCombinator.js +0 -1
  48. package/lib/permutationsMatrix.js +0 -466136
  49. package/lib/utilities/permutations.js +0 -114
  50. package/src/permutationsMatrix.js +0 -6
  51. package/src/utilities/permutations.js +0 -148
@@ -1,114 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- var _necessary = require("necessary");
6
- var _array = require("../utilities/array");
7
- var _constants = require("../constants");
8
- function _array_like_to_array(arr, len) {
9
- if (len == null || len > arr.length) len = arr.length;
10
- for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
11
- return arr2;
12
- }
13
- function _array_without_holes(arr) {
14
- if (Array.isArray(arr)) return _array_like_to_array(arr);
15
- }
16
- function _iterable_to_array(iter) {
17
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
18
- }
19
- function _non_iterable_spread() {
20
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
21
- }
22
- function _to_consumable_array(arr) {
23
- return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
24
- }
25
- function _unsupported_iterable_to_array(o, minLen) {
26
- if (!o) return;
27
- if (typeof o === "string") return _array_like_to_array(o, minLen);
28
- var n = Object.prototype.toString.call(o).slice(8, -1);
29
- if (n === "Object" && o.constructor) n = o.constructor.name;
30
- if (n === "Map" || n === "Set") return Array.from(n);
31
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
32
- }
33
- var writeFile = _necessary.fileSystemUtilities.writeFile;
34
- writePermutationsMatrixFile();
35
- function permutationsMatrixFromNothing() {
36
- var permutationsMatrix = [];
37
- for(var indexesLength = 0; indexesLength <= _constants.MAXIMUM_INDEXES_LENGTH; indexesLength++){
38
- var permutationsArray = [];
39
- for(var permutationLength = 0; permutationLength <= _constants.MAXIMUM_PERMUTATION_LENGTH; permutationLength++){
40
- var permutations = permutationLength === 0 || permutationLength > indexesLength ? null : permutationsFromIndexesLengthAndPermutationLength(indexesLength, permutationLength);
41
- permutationsArray.push(permutations);
42
- }
43
- permutationsMatrix.push(permutationsArray);
44
- }
45
- return permutationsMatrix;
46
- }
47
- function writePermutationsMatrixFile() {
48
- var permutationsMatrix = permutationsMatrixFromNothing(), permutationsMatrixJSON = JSON.stringify(permutationsMatrix), permutationsMatrixFileName = "./bin/permutationsMatrix.js", permutationsMatrixFileContent = '"use strict";\n \nconst permutationsMatrix = '.concat(permutationsMatrixJSON, ";\n \nexport default permutationsMatrix; \n ");
49
- writeFile(permutationsMatrixFileName, permutationsMatrixFileContent);
50
- }
51
- function permutationsFromChoice(choice) {
52
- var permutations = [], choiceLength = choice.length;
53
- if (choiceLength === 1) {
54
- var permutation = choice.slice();
55
- permutations.push(permutation);
56
- } else {
57
- var innerChoice = choice.slice(0), start = 0, deleteCount = 1, indexes = innerChoice.splice(start, deleteCount), firstIndex = (0, _array.first)(indexes), innerPermutations = permutationsFromChoice(innerChoice);
58
- innerPermutations.forEach(function(innerPermutation) {
59
- for(var position = 0; position < choiceLength; position++){
60
- var permutation = innerPermutation.slice(0), start = position, deleteCount = 0;
61
- permutation.splice(start, deleteCount, firstIndex);
62
- permutations.push(permutation);
63
- }
64
- });
65
- }
66
- return permutations;
67
- }
68
- function permutationsFromChoices(choices) {
69
- var permutations = [];
70
- choices.forEach(function(choice) {
71
- var choicePermutations = permutationsFromChoice(choice);
72
- (0, _array.push)(permutations, choicePermutations);
73
- });
74
- return permutations;
75
- }
76
- function indexesFromIndexesLength(indexesLength) {
77
- var indexes = [];
78
- for(var index = 0; index < indexesLength; index++){
79
- indexes.push(index);
80
- }
81
- return indexes;
82
- }
83
- function choicesFromIndexesAndChoiceLength(indexes, choiceLength) {
84
- var choices = [], indexesLength = indexes.length;
85
- if (choiceLength === 0) {
86
- ///
87
- } else if (choiceLength === 1) {
88
- for(var position = 0; position < indexesLength; position++){
89
- var index = indexes[position], choice = [
90
- index
91
- ];
92
- choices.push(choice);
93
- }
94
- } else {
95
- var _loop = function(position1) {
96
- var innerIndexes = indexes.slice(0), start = 0, deleteCount = position1 + 1, deletedIndexes = innerIndexes.splice(start, deleteCount), lastDeletedIndex = (0, _array.last)(deletedIndexes), index = lastDeletedIndex, innerChoices = choicesFromIndexesAndChoiceLength(innerIndexes, innerChoiceLength);
97
- innerChoices.forEach(function(innerChoice) {
98
- var choice = [
99
- index
100
- ].concat(_to_consumable_array(innerChoice));
101
- choices.push(choice);
102
- });
103
- };
104
- var innerChoiceLength = choiceLength - 1;
105
- for(var position1 = 0; position1 < indexesLength; position1++)_loop(position1);
106
- }
107
- return choices;
108
- }
109
- function permutationsFromIndexesLengthAndPermutationLength(indexesLength, permutationLength) {
110
- var choiceLength = permutationLength, indexes = indexesFromIndexesLength(indexesLength), choices = choicesFromIndexesAndChoiceLength(indexes, choiceLength), permutations = permutationsFromChoices(choices);
111
- return permutations;
112
- }
113
-
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcGVybXV0YXRpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBmaWxlU3lzdGVtVXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBwdXNoLCBsYXN0LCBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IE1BWElNVU1fSU5ERVhFU19MRU5HVEgsIE1BWElNVU1fUEVSTVVUQVRJT05fTEVOR1RIIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IHdyaXRlRmlsZSB9ID0gZmlsZVN5c3RlbVV0aWxpdGllcztcblxud3JpdGVQZXJtdXRhdGlvbnNNYXRyaXhGaWxlKCk7XG5cbmZ1bmN0aW9uIHBlcm11dGF0aW9uc01hdHJpeEZyb21Ob3RoaW5nKCkge1xuICBjb25zdCBwZXJtdXRhdGlvbnNNYXRyaXggPSBbXTtcblxuICBmb3IgKGxldCBpbmRleGVzTGVuZ3RoID0gMDsgaW5kZXhlc0xlbmd0aCA8PSBNQVhJTVVNX0lOREVYRVNfTEVOR1RIOyBpbmRleGVzTGVuZ3RoKyspIHtcbiAgICBjb25zdCBwZXJtdXRhdGlvbnNBcnJheSA9IFtdO1xuXG4gICAgZm9yIChsZXQgcGVybXV0YXRpb25MZW5ndGggPSAwOyBwZXJtdXRhdGlvbkxlbmd0aCA8PSBNQVhJTVVNX1BFUk1VVEFUSU9OX0xFTkdUSDsgcGVybXV0YXRpb25MZW5ndGgrKykge1xuICAgICAgY29uc3QgcGVybXV0YXRpb25zID0gKChwZXJtdXRhdGlvbkxlbmd0aCA9PT0gMCkgfHwgKHBlcm11dGF0aW9uTGVuZ3RoID4gaW5kZXhlc0xlbmd0aCkpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybXV0YXRpb25zRnJvbUluZGV4ZXNMZW5ndGhBbmRQZXJtdXRhdGlvbkxlbmd0aChpbmRleGVzTGVuZ3RoLCBwZXJtdXRhdGlvbkxlbmd0aCk7XG5cbiAgICAgIHBlcm11dGF0aW9uc0FycmF5LnB1c2gocGVybXV0YXRpb25zKTtcbiAgICB9XG5cbiAgICBwZXJtdXRhdGlvbnNNYXRyaXgucHVzaChwZXJtdXRhdGlvbnNBcnJheSk7XG4gIH1cblxuICByZXR1cm4gcGVybXV0YXRpb25zTWF0cml4O1xufVxuXG5mdW5jdGlvbiB3cml0ZVBlcm11dGF0aW9uc01hdHJpeEZpbGUoKSB7XG4gIGNvbnN0IHBlcm11dGF0aW9uc01hdHJpeCA9IHBlcm11dGF0aW9uc01hdHJpeEZyb21Ob3RoaW5nKCksXG4gICAgICAgIHBlcm11dGF0aW9uc01hdHJpeEpTT04gPSBKU09OLnN0cmluZ2lmeShwZXJtdXRhdGlvbnNNYXRyaXgpLFxuICAgICAgICBwZXJtdXRhdGlvbnNNYXRyaXhGaWxlTmFtZSA9IFwiLi9iaW4vcGVybXV0YXRpb25zTWF0cml4LmpzXCIsXG4gICAgICAgIHBlcm11dGF0aW9uc01hdHJpeEZpbGVDb250ZW50ID0gYFwidXNlIHN0cmljdFwiO1xuICAgICAgICBcbmNvbnN0IHBlcm11dGF0aW9uc01hdHJpeCA9ICR7cGVybXV0YXRpb25zTWF0cml4SlNPTn07XG4gIFxuZXhwb3J0IGRlZmF1bHQgcGVybXV0YXRpb25zTWF0cml4OyAgICAgIFxuICBgO1xuXG4gIHdyaXRlRmlsZShwZXJtdXRhdGlvbnNNYXRyaXhGaWxlTmFtZSwgcGVybXV0YXRpb25zTWF0cml4RmlsZUNvbnRlbnQpXG59XG5cbmZ1bmN0aW9uIHBlcm11dGF0aW9uc0Zyb21DaG9pY2UoY2hvaWNlKSB7XG4gIGNvbnN0IHBlcm11dGF0aW9ucyA9IFtdLFxuICAgICAgICBjaG9pY2VMZW5ndGggPSBjaG9pY2UubGVuZ3RoO1xuXG4gIGlmIChjaG9pY2VMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBwZXJtdXRhdGlvbiA9IGNob2ljZS5zbGljZSgpO1xuXG4gICAgcGVybXV0YXRpb25zLnB1c2gocGVybXV0YXRpb24pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGlubmVyQ2hvaWNlID0gY2hvaWNlLnNsaWNlKDApLFxuICAgICAgICAgIHN0YXJ0ID0gMCxcbiAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgaW5kZXhlcyA9IGlubmVyQ2hvaWNlLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpLFxuICAgICAgICAgIGZpcnN0SW5kZXggPSBmaXJzdChpbmRleGVzKSxcbiAgICAgICAgICBpbm5lclBlcm11dGF0aW9ucyA9IHBlcm11dGF0aW9uc0Zyb21DaG9pY2UoaW5uZXJDaG9pY2UpO1xuXG4gICAgaW5uZXJQZXJtdXRhdGlvbnMuZm9yRWFjaCgoaW5uZXJQZXJtdXRhdGlvbikgPT4ge1xuICAgICAgZm9yIChsZXQgcG9zaXRpb24gPSAwOyBwb3NpdGlvbiA8IGNob2ljZUxlbmd0aDsgcG9zaXRpb24rKykge1xuICAgICAgICBjb25zdCBwZXJtdXRhdGlvbiA9IGlubmVyUGVybXV0YXRpb24uc2xpY2UoMCksXG4gICAgICAgICAgICAgIHN0YXJ0ID0gcG9zaXRpb24sIC8vL1xuICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDA7XG5cbiAgICAgICAgcGVybXV0YXRpb24uc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgZmlyc3RJbmRleCk7XG5cbiAgICAgICAgcGVybXV0YXRpb25zLnB1c2gocGVybXV0YXRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHBlcm11dGF0aW9ucztcbn1cblxuZnVuY3Rpb24gcGVybXV0YXRpb25zRnJvbUNob2ljZXMoY2hvaWNlcykge1xuICBjb25zdCBwZXJtdXRhdGlvbnMgPSBbXTtcblxuICBjaG9pY2VzLmZvckVhY2goKGNob2ljZSkgPT4ge1xuICAgIGNvbnN0IGNob2ljZVBlcm11dGF0aW9ucyA9IHBlcm11dGF0aW9uc0Zyb21DaG9pY2UoY2hvaWNlKTtcblxuICAgIHB1c2gocGVybXV0YXRpb25zLCBjaG9pY2VQZXJtdXRhdGlvbnMpO1xuICB9KTtcblxuICByZXR1cm4gcGVybXV0YXRpb25zO1xufVxuXG5mdW5jdGlvbiBpbmRleGVzRnJvbUluZGV4ZXNMZW5ndGgoaW5kZXhlc0xlbmd0aCkge1xuICBjb25zdCBpbmRleGVzID0gW107XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGluZGV4ZXNMZW5ndGg7IGluZGV4KyspIHtcbiAgICBpbmRleGVzLnB1c2goaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIGluZGV4ZXM7XG59XG5cbmZ1bmN0aW9uIGNob2ljZXNGcm9tSW5kZXhlc0FuZENob2ljZUxlbmd0aChpbmRleGVzLCBjaG9pY2VMZW5ndGgpIHtcbiAgY29uc3QgY2hvaWNlcyA9IFtdLFxuICAgICAgICBpbmRleGVzTGVuZ3RoID0gaW5kZXhlcy5sZW5ndGg7XG5cbiAgaWYgKGNob2ljZUxlbmd0aCA9PT0gMCkge1xuICAgIC8vL1xuICB9IGVsc2UgaWYgKGNob2ljZUxlbmd0aCA9PT0gMSkge1xuICAgIGZvciAobGV0IHBvc2l0aW9uID0gMDsgcG9zaXRpb24gPCBpbmRleGVzTGVuZ3RoOyBwb3NpdGlvbisrKSB7XG4gICAgICBjb25zdCBpbmRleCA9IGluZGV4ZXNbcG9zaXRpb25dLFxuICAgICAgICAgICAgY2hvaWNlID0gW1xuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgXTtcblxuICAgICAgY2hvaWNlcy5wdXNoKGNob2ljZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGlubmVyQ2hvaWNlTGVuZ3RoID0gY2hvaWNlTGVuZ3RoIC0gMTtcblxuICAgIGZvciAobGV0IHBvc2l0aW9uID0gMDsgcG9zaXRpb24gPCBpbmRleGVzTGVuZ3RoOyBwb3NpdGlvbisrKSB7XG4gICAgICBjb25zdCBpbm5lckluZGV4ZXMgPSBpbmRleGVzLnNsaWNlKDApLFxuICAgICAgICAgICAgc3RhcnQgPSAwLCAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gcG9zaXRpb24gKyAxLFxuICAgICAgICAgICAgZGVsZXRlZEluZGV4ZXMgPSBpbm5lckluZGV4ZXMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBsYXN0RGVsZXRlZEluZGV4ID0gbGFzdChkZWxldGVkSW5kZXhlcyksXG4gICAgICAgICAgICBpbmRleCA9IGxhc3REZWxldGVkSW5kZXgsIC8vL1xuICAgICAgICAgICAgaW5uZXJDaG9pY2VzID0gY2hvaWNlc0Zyb21JbmRleGVzQW5kQ2hvaWNlTGVuZ3RoKGlubmVySW5kZXhlcywgaW5uZXJDaG9pY2VMZW5ndGgpO1xuXG4gICAgICBpbm5lckNob2ljZXMuZm9yRWFjaCgoaW5uZXJDaG9pY2UpID0+IHtcbiAgICAgICAgY29uc3QgY2hvaWNlID0gW1xuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIC4uLmlubmVyQ2hvaWNlXG4gICAgICAgIF07XG5cbiAgICAgICAgY2hvaWNlcy5wdXNoKGNob2ljZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hvaWNlcztcbn1cblxuZnVuY3Rpb24gcGVybXV0YXRpb25zRnJvbUluZGV4ZXNMZW5ndGhBbmRQZXJtdXRhdGlvbkxlbmd0aChpbmRleGVzTGVuZ3RoLCBwZXJtdXRhdGlvbkxlbmd0aCkge1xuICBjb25zdCBjaG9pY2VMZW5ndGggPSBwZXJtdXRhdGlvbkxlbmd0aCwgLy8vXG4gICAgICAgIGluZGV4ZXMgPSBpbmRleGVzRnJvbUluZGV4ZXNMZW5ndGgoaW5kZXhlc0xlbmd0aCksXG4gICAgICAgIGNob2ljZXMgPSBjaG9pY2VzRnJvbUluZGV4ZXNBbmRDaG9pY2VMZW5ndGgoaW5kZXhlcywgY2hvaWNlTGVuZ3RoKSxcbiAgICAgICAgcGVybXV0YXRpb25zID0gcGVybXV0YXRpb25zRnJvbUNob2ljZXMoY2hvaWNlcyk7XG5cbiAgcmV0dXJuIHBlcm11dGF0aW9ucztcbn1cbiJdLCJuYW1lcyI6WyJ3cml0ZUZpbGUiLCJmaWxlU3lzdGVtVXRpbGl0aWVzIiwid3JpdGVQZXJtdXRhdGlvbnNNYXRyaXhGaWxlIiwicGVybXV0YXRpb25zTWF0cml4RnJvbU5vdGhpbmciLCJwZXJtdXRhdGlvbnNNYXRyaXgiLCJpbmRleGVzTGVuZ3RoIiwiTUFYSU1VTV9JTkRFWEVTX0xFTkdUSCIsInBlcm11dGF0aW9uc0FycmF5IiwicGVybXV0YXRpb25MZW5ndGgiLCJNQVhJTVVNX1BFUk1VVEFUSU9OX0xFTkdUSCIsInBlcm11dGF0aW9ucyIsInBlcm11dGF0aW9uc0Zyb21JbmRleGVzTGVuZ3RoQW5kUGVybXV0YXRpb25MZW5ndGgiLCJwdXNoIiwicGVybXV0YXRpb25zTWF0cml4SlNPTiIsIkpTT04iLCJzdHJpbmdpZnkiLCJwZXJtdXRhdGlvbnNNYXRyaXhGaWxlTmFtZSIsInBlcm11dGF0aW9uc01hdHJpeEZpbGVDb250ZW50IiwicGVybXV0YXRpb25zRnJvbUNob2ljZSIsImNob2ljZSIsImNob2ljZUxlbmd0aCIsImxlbmd0aCIsInBlcm11dGF0aW9uIiwic2xpY2UiLCJpbm5lckNob2ljZSIsInN0YXJ0IiwiZGVsZXRlQ291bnQiLCJpbmRleGVzIiwic3BsaWNlIiwiZmlyc3RJbmRleCIsImZpcnN0IiwiaW5uZXJQZXJtdXRhdGlvbnMiLCJmb3JFYWNoIiwiaW5uZXJQZXJtdXRhdGlvbiIsInBvc2l0aW9uIiwicGVybXV0YXRpb25zRnJvbUNob2ljZXMiLCJjaG9pY2VzIiwiY2hvaWNlUGVybXV0YXRpb25zIiwiaW5kZXhlc0Zyb21JbmRleGVzTGVuZ3RoIiwiaW5kZXgiLCJjaG9pY2VzRnJvbUluZGV4ZXNBbmRDaG9pY2VMZW5ndGgiLCJpbm5lckluZGV4ZXMiLCJkZWxldGVkSW5kZXhlcyIsImxhc3REZWxldGVkSW5kZXgiLCJsYXN0IiwiaW5uZXJDaG9pY2VzIiwiaW5uZXJDaG9pY2VMZW5ndGgiXSwibWFwcGluZ3MiOiJBQUFBOzs7O3lCQUVvQztxQkFFRjt5QkFDaUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRW5FLElBQU0sQUFBRUEsWUFBY0Ms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