occam-languages 3.0.29 → 3.0.30

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.
@@ -27,15 +27,15 @@ const _necessary = require("necessary");
27
27
  const _continuation = require("../utilities/continuation");
28
28
  const _constants = require("../constants");
29
29
  const { last } = _necessary.arrayUtilities;
30
- function createReleaseContexts(dependencyName, context, fail, succeed) {
30
+ function createReleaseContexts(dependencyName, context, succeed, fail) {
31
31
  const name = dependencyName, dependency = _occammodel.Dependency.fromName(name), dependentNames = [], dependentReleased = false;
32
- return createReleaseContext(dependency, dependentNames, dependentReleased, context, fail, (releaseContextCreated)=>{
32
+ return createReleaseContext(dependency, dependentNames, dependentReleased, context, (releaseContextCreated)=>{
33
33
  let releaseContextsCreated = false;
34
34
  if (releaseContextCreated) {
35
35
  releaseContextsCreated = true;
36
36
  }
37
37
  return succeed(releaseContextsCreated);
38
- });
38
+ }, fail);
39
39
  }
40
40
  function initialiseReleaseContexts(context) {
41
41
  const { releaseContexts } = context;
@@ -43,28 +43,28 @@ function initialiseReleaseContexts(context) {
43
43
  initialiseReleaseContext(releaseContext, context);
44
44
  });
45
45
  }
46
- function verifyReleaseContexts(context, back, forward) {
46
+ function verifyReleaseContexts(context, forward, back) {
47
47
  const { releaseContexts } = context;
48
- return (0, _continuation.every)(releaseContexts, verifyReleaseContext, context, back, forward);
48
+ return (0, _continuation.every)(releaseContexts, verifyReleaseContext, context, forward, back);
49
49
  }
50
50
  const _default = {
51
51
  createReleaseContexts,
52
52
  initialiseReleaseContexts,
53
53
  verifyReleaseContexts
54
54
  };
55
- function verifyReleaseContext(releaseContext, context, back, forward) {
55
+ function verifyReleaseContext(releaseContext, context, forward, back) {
56
56
  const released = releaseContext.isReleased(), verified = releaseContext.hasVerified();
57
57
  if (released || verified) {
58
- return forward();
58
+ return forward(back);
59
59
  }
60
60
  const { log } = context, name = releaseContext.getName(), releaseName = name; ///
61
61
  log.info(`Verifying the '${releaseName}' project...`);
62
- return releaseContext.verify(back, ()=>{
62
+ return releaseContext.verify((back)=>{
63
63
  log.info(`...verified the '${releaseName}' project.`);
64
- return forward(context);
65
- });
64
+ return forward(context, back);
65
+ }, back);
66
66
  }
67
- function createReleaseContext(dependency, dependentNames, dependentReleased, context, fail, succeed) {
67
+ function createReleaseContext(dependency, dependentNames, dependentReleased, context, succeed, fail) {
68
68
  const { log } = context, releaseContext = findReleaseContext(dependency, context);
69
69
  if (releaseContext !== null) {
70
70
  const releaseContextCreated = true;
@@ -78,7 +78,7 @@ function createReleaseContext(dependency, dependentNames, dependentReleased, con
78
78
  log.info(`Creating the '${dependencyName}' package context given the '${dependentName}' dependant's '${dependencyString}' dependency...`);
79
79
  }
80
80
  const { releaseContextFromDependency } = context;
81
- return releaseContextFromDependency(dependency, context, fail, (releaseContext)=>{
81
+ return releaseContextFromDependency(dependency, context, (releaseContext)=>{
82
82
  let releaseContextCreated = false;
83
83
  const releatePresent = checkReleasePresent(releaseContext, dependencyName, context);
84
84
  if (!releatePresent) {
@@ -92,7 +92,7 @@ function createReleaseContext(dependency, dependentNames, dependentReleased, con
92
92
  if (!releaseMatchesDependency) {
93
93
  return succeed(releaseContextCreated);
94
94
  }
95
- return createDependencyReleaseContexts(releaseContext, dependency, dependentNames, context, fail, (dependencyReleaseContextsCreated)=>{
95
+ return createDependencyReleaseContexts(releaseContext, dependency, dependentNames, context, (dependencyReleaseContextsCreated)=>{
96
96
  if (dependencyReleaseContextsCreated) {
97
97
  releaseContextCreated = true;
98
98
  }
@@ -101,24 +101,27 @@ function createReleaseContext(dependency, dependentNames, dependentReleased, con
101
101
  }
102
102
  releaseContextCreated ? log.debug(`...created the '${dependencyName}' package context.`) : log.warning(`...unable to create the '${dependencyName}' package context.`);
103
103
  return succeed(releaseContextCreated);
104
- });
105
- });
104
+ }, fail);
105
+ }, fail);
106
106
  }
107
- function createDependencyReleaseContexts(releaseContext, dependency, dependentNames, context, fail, succeed) {
107
+ function createDependencyReleaseContexts(releaseContext, dependency, dependentNames, context, succeed, fail) {
108
108
  const name = releaseContext.getName(), released = releaseContext.isReleased(), dependencies = releaseContext.getDependencies(), dependentName = name, dependentReleased = released; ///
109
109
  dependentNames = [
110
110
  ...dependentNames,
111
111
  dependentName
112
112
  ]; ///
113
113
  const array = dependencies.getArray();
114
- return (0, _continuation.every)(array, (dependency, back, forward)=>{
114
+ return (0, _continuation.every)(array, (dependency, forward, back)=>{
115
115
  const cyclicDependencyPresent = checkCyclicDependencyPresent(dependency, dependentNames, context);
116
116
  if (cyclicDependencyPresent) {
117
117
  return back();
118
118
  }
119
- return createReleaseContext(dependency, dependentNames, dependentReleased, context, fail, (releaseContextCreated)=>{
120
- return releaseContextCreated ? forward() : back();
121
- });
119
+ return createReleaseContext(dependency, dependentNames, dependentReleased, context, (releaseContextCreated)=>{
120
+ if (!releaseContextCreated) {
121
+ return back();
122
+ }
123
+ return forward(back);
124
+ }, fail);
122
125
  }, ()=>succeed(false), ()=>succeed(true));
123
126
  }
124
127
  function addReleaseContext(releaseContext, context) {
@@ -201,4 +204,4 @@ function checkProjectDependencyOfPackage(releaseContext, dependentReleased, depe
201
204
  return projectDependencyOfPackage;
202
205
  }
203
206
 
204
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmVyaWZpY2F0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBEZXBlbmRlbmN5IH0gZnJvbSBcIm9jY2FtLW1vZGVsXCI7XG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgZXZlcnkgIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IFNJTkdMRV9TUEFDRSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBsYXN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGVhc2VDb250ZXh0cyhkZXBlbmRlbmN5TmFtZSwgY29udGV4dCwgZmFpbCwgc3VjY2VlZCkge1xuICBjb25zdCBuYW1lID0gZGVwZW5kZW5jeU5hbWUsICAvLy9cbiAgICAgICAgZGVwZW5kZW5jeSA9IERlcGVuZGVuY3kuZnJvbU5hbWUobmFtZSksXG4gICAgICAgIGRlcGVuZGVudE5hbWVzID0gW10sXG4gICAgICAgIGRlcGVuZGVudFJlbGVhc2VkID0gZmFsc2U7XG5cbiAgcmV0dXJuIGNyZWF0ZVJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBkZXBlbmRlbnRSZWxlYXNlZCwgY29udGV4dCwgZmFpbCwgKHJlbGVhc2VDb250ZXh0Q3JlYXRlZCkgPT4ge1xuICAgIGxldCByZWxlYXNlQ29udGV4dHNDcmVhdGVkID0gZmFsc2U7XG5cbiAgICBpZiAocmVsZWFzZUNvbnRleHRDcmVhdGVkKSB7XG4gICAgICByZWxlYXNlQ29udGV4dHNDcmVhdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VjY2VlZChyZWxlYXNlQ29udGV4dHNDcmVhdGVkKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXNlUmVsZWFzZUNvbnRleHRzKGNvbnRleHQpIHtcbiAgY29uc3QgeyByZWxlYXNlQ29udGV4dHMgfSA9IGNvbnRleHQ7XG5cbiAgcmVsZWFzZUNvbnRleHRzLmZvckVhY2goKHJlbGVhc2VDb250ZXh0KSA9PiB7XG4gICAgaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0KHJlbGVhc2VDb250ZXh0LCBjb250ZXh0KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlSZWxlYXNlQ29udGV4dHMoY29udGV4dCwgYmFjaywgZm9yd2FyZCkge1xuICBjb25zdCB7IHJlbGVhc2VDb250ZXh0cyB9ID0gY29udGV4dDtcblxuICByZXR1cm4gZXZlcnkocmVsZWFzZUNvbnRleHRzLCB2ZXJpZnlSZWxlYXNlQ29udGV4dCwgY29udGV4dCwgYmFjaywgZm9yd2FyZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY3JlYXRlUmVsZWFzZUNvbnRleHRzLFxuICBpbml0aWFsaXNlUmVsZWFzZUNvbnRleHRzLFxuICB2ZXJpZnlSZWxlYXNlQ29udGV4dHNcbn07XG5cbmZ1bmN0aW9uIHZlcmlmeVJlbGVhc2VDb250ZXh0KHJlbGVhc2VDb250ZXh0LCBjb250ZXh0LCBiYWNrLCBmb3J3YXJkKSB7XG4gIGNvbnN0IHJlbGVhc2VkID0gcmVsZWFzZUNvbnRleHQuaXNSZWxlYXNlZCgpLFxuICAgICAgICB2ZXJpZmllZCA9IHJlbGVhc2VDb250ZXh0Lmhhc1ZlcmlmaWVkKCk7XG5cbiAgaWYgKHJlbGVhc2VkIHx8IHZlcmlmaWVkKSB7XG4gICAgcmV0dXJuIGZvcndhcmQoKTtcbiAgfVxuXG4gIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0LFxuICAgICAgICBuYW1lID0gcmVsZWFzZUNvbnRleHQuZ2V0TmFtZSgpLFxuICAgICAgICByZWxlYXNlTmFtZSA9IG5hbWU7IC8vL1xuXG4gIGxvZy5pbmZvKGBWZXJpZnlpbmcgdGhlICcke3JlbGVhc2VOYW1lfScgcHJvamVjdC4uLmApO1xuXG4gIHJldHVybiByZWxlYXNlQ29udGV4dC52ZXJpZnkoYmFjaywgKCkgPT4ge1xuICAgIGxvZy5pbmZvKGAuLi52ZXJpZmllZCB0aGUgJyR7cmVsZWFzZU5hbWV9JyBwcm9qZWN0LmApO1xuXG4gICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZWxlYXNlQ29udGV4dChkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgZGVwZW5kZW50UmVsZWFzZWQsIGNvbnRleHQsIGZhaWwsIHN1Y2NlZWQpIHtcbiAgY29uc3QgeyBsb2cgfSA9IGNvbnRleHQsXG4gICAgICAgIHJlbGVhc2VDb250ZXh0ID0gZmluZFJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGNvbnRleHQpO1xuXG4gIGlmIChyZWxlYXNlQ29udGV4dCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0Q3JlYXRlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gc3VjY2VlZChyZWxlYXNlQ29udGV4dENyZWF0ZWQpO1xuICB9XG5cbiAgY29uc3QgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgZGVwZW5kZW50TmFtZXNMZW5ndGggPSBkZXBlbmRlbnROYW1lcy5sZW5ndGg7XG5cbiAgaWYgKGRlcGVuZGVudE5hbWVzTGVuZ3RoID09PSAwKSB7XG4gICAgbG9nLmluZm8oYENyZWF0aW5nIHRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIHBhY2thZ2UgY29udGV4dC4uLmApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGxhc3REZXBlbmRlbnROYW1lID0gbGFzdChkZXBlbmRlbnROYW1lcyksXG4gICAgICAgICAgZGVwZW5kZW50TmFtZSA9IGxhc3REZXBlbmRlbnROYW1lLCAgLy8vXG4gICAgICAgICAgZGVwZW5kZW5jeVN0cmluZyA9IGRlcGVuZGVuY3kuYXNTdHJpbmcoKTtcblxuICAgIGxvZy5pbmZvKGBDcmVhdGluZyB0aGUgJyR7ZGVwZW5kZW5jeU5hbWV9JyBwYWNrYWdlIGNvbnRleHQgZ2l2ZW4gdGhlICcke2RlcGVuZGVudE5hbWV9JyBkZXBlbmRhbnQncyAnJHtkZXBlbmRlbmN5U3RyaW5nfScgZGVwZW5kZW5jeS4uLmApO1xuICB9XG5cbiAgY29uc3QgeyByZWxlYXNlQ29udGV4dEZyb21EZXBlbmRlbmN5IH0gPSBjb250ZXh0O1xuXG4gIHJldHVybiByZWxlYXNlQ29udGV4dEZyb21EZXBlbmRlbmN5KGRlcGVuZGVuY3ksIGNvbnRleHQsIGZhaWwsIChyZWxlYXNlQ29udGV4dCkgPT4ge1xuICAgIGxldCByZWxlYXNlQ29udGV4dENyZWF0ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHJlbGVhdGVQcmVzZW50ID0gY2hlY2tSZWxlYXNlUHJlc2VudChyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW5jeU5hbWUsIGNvbnRleHQpO1xuXG4gICAgaWYgKCFyZWxlYXRlUHJlc2VudCkge1xuICAgICAgcmV0dXJuIHN1Y2NlZWQocmVsZWFzZUNvbnRleHRDcmVhdGVkKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9qZWN0RGVwZW5kZW5jeU9mUGFja2FnZSA9IGNoZWNrUHJvamVjdERlcGVuZGVuY3lPZlBhY2thZ2UocmVsZWFzZUNvbnRleHQsIGRlcGVuZGVudFJlbGVhc2VkLCBkZXBlbmRlbnROYW1lcywgY29udGV4dCk7XG5cbiAgICBpZiAocHJvamVjdERlcGVuZGVuY3lPZlBhY2thZ2UpIHtcbiAgICAgIHJldHVybiBzdWNjZWVkKHJlbGVhc2VDb250ZXh0Q3JlYXRlZCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5ID0gY2hlY2tSZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kocmVsZWFzZUNvbnRleHQsIGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KTtcblxuICAgIGlmICghcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5KSB7XG4gICAgICByZXR1cm4gc3VjY2VlZChyZWxlYXNlQ29udGV4dENyZWF0ZWQpO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCwgZmFpbCwgKGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHNDcmVhdGVkKSA9PiB7XG4gICAgICBpZiAoZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0c0NyZWF0ZWQpIHtcbiAgICAgICAgcmVsZWFzZUNvbnRleHRDcmVhdGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlbGVhc2VDb250ZXh0Q3JlYXRlZCkge1xuICAgICAgICBhZGRSZWxlYXNlQ29udGV4dChyZWxlYXNlQ29udGV4dCwgY29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIHJlbGVhc2VDb250ZXh0Q3JlYXRlZCA/XG4gICAgICAgIGxvZy5kZWJ1ZyhgLi4uY3JlYXRlZCB0aGUgJyR7ZGVwZW5kZW5jeU5hbWV9JyBwYWNrYWdlIGNvbnRleHQuYCkgOlxuICAgICAgICAgIGxvZy53YXJuaW5nKGAuLi51bmFibGUgdG8gY3JlYXRlIHRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIHBhY2thZ2UgY29udGV4dC5gKTtcblxuICAgICAgcmV0dXJuIHN1Y2NlZWQocmVsZWFzZUNvbnRleHRDcmVhdGVkKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMocmVsZWFzZUNvbnRleHQsIGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0LCBmYWlsLCBzdWNjZWVkKSB7XG4gIGNvbnN0IG5hbWUgPSByZWxlYXNlQ29udGV4dC5nZXROYW1lKCksXG4gICAgICAgIHJlbGVhc2VkID0gcmVsZWFzZUNvbnRleHQuaXNSZWxlYXNlZCgpLFxuICAgICAgICBkZXBlbmRlbmNpZXMgPSByZWxlYXNlQ29udGV4dC5nZXREZXBlbmRlbmNpZXMoKSxcbiAgICAgICAgZGVwZW5kZW50TmFtZSA9IG5hbWUsICAvLy9cbiAgICAgICAgZGVwZW5kZW50UmVsZWFzZWQgPSByZWxlYXNlZDsgIC8vL1xuXG4gIGRlcGVuZGVudE5hbWVzID0gWyAuLi5kZXBlbmRlbnROYW1lcywgZGVwZW5kZW50TmFtZSBdOyAgLy8vXG5cbiAgY29uc3QgYXJyYXkgPSBkZXBlbmRlbmNpZXMuZ2V0QXJyYXkoKTtcblxuICByZXR1cm4gZXZlcnkoYXJyYXksIChkZXBlbmRlbmN5LCBiYWNrLCBmb3J3YXJkKSA9PiB7XG4gICAgY29uc3QgY3ljbGljRGVwZW5kZW5jeVByZXNlbnQgPSBjaGVja0N5Y2xpY0RlcGVuZGVuY3lQcmVzZW50KGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KTtcblxuICAgIGlmIChjeWNsaWNEZXBlbmRlbmN5UHJlc2VudCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlUmVsZWFzZUNvbnRleHQoZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGRlcGVuZGVudFJlbGVhc2VkLCBjb250ZXh0LCBmYWlsLCAocmVsZWFzZUNvbnRleHRDcmVhdGVkKSA9PiB7XG4gICAgICByZXR1cm4gKHJlbGVhc2VDb250ZXh0Q3JlYXRlZCkgP1xuICAgICAgICAgICAgICAgIGZvcndhcmQoKSA6XG4gICAgICAgICAgICAgICAgICBiYWNrKCk7XG4gICAgfSk7XG4gIH0sICgpID0+IHN1Y2NlZWQoZmFsc2UpLCAoKSA9PiBzdWNjZWVkKHRydWUpKTtcbn1cblxuZnVuY3Rpb24gYWRkUmVsZWFzZUNvbnRleHQocmVsZWFzZUNvbnRleHQsIGNvbnRleHQpIHtcbiAgY29uc3QgeyByZWxlYXNlQ29udGV4dHMgfSA9IGNvbnRleHQ7XG5cbiAgcmVsZWFzZUNvbnRleHRzLnB1c2gocmVsZWFzZUNvbnRleHQpO1xufVxuXG5mdW5jdGlvbiBmaW5kUmVsZWFzZUNvbnRleHQoZGVwZW5kZW5jeSwgY29udGV4dCkge1xuICBjb25zdCB7IHJlbGVhc2VDb250ZXh0cyB9ID0gY29udGV4dCxcbiAgICAgICAgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgcmVsZWFzZUNvbnRleHQgPSByZWxlYXNlQ29udGV4dHMuZmluZCgocmVsZWFzZUNvbnRleHQpID0+IHtcbiAgICAgICAgICBjb25zdCBkZXBlbmRlbmN5TmFtZU1hdGNoZXMgPSByZWxlYXNlQ29udGV4dC5tYXRjaERlcGVuZGVuY3lOYW1lKGRlcGVuZGVuY3lOYW1lKTtcblxuICAgICAgICAgIGlmIChkZXBlbmRlbmN5TmFtZU1hdGNoZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcblxuICByZXR1cm4gcmVsZWFzZUNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGNoZWNrUmVsZWFzZVByZXNlbnQocmVsZWFzZUNvbnRleHQsIGRlcGVuZGVuY3lOYW1lLCBjb250ZXh0KSB7XG4gIGxldCByZWxlYXNlUHJlc2VudCA9IHRydWU7XG5cbiAgaWYgKHJlbGVhc2VDb250ZXh0ID09PSBudWxsKSB7XG4gICAgY29uc3QgeyBsb2cgfSA9IGNvbnRleHQ7XG5cbiAgICBsb2cud2FybmluZyhgVGhlICcke2RlcGVuZGVuY3lOYW1lfScgcGFja2FnZSBjb250ZXh0IGNvdWxkIG5vdCBiZSBjcmVhdGVkLiBQZXJoYXBzIHRoZSAnbWV0YS5qc29uJyBmaWxlIGlzIG1pc3Npbmcgb3IgaW52YWxpZC5gKTtcblxuICAgIHJlbGVhc2VQcmVzZW50ID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gcmVsZWFzZVByZXNlbnQ7XG59XG5cbmZ1bmN0aW9uIHJldHJpZXZlUmVsZWFzZUNvbnRleHRzKHJlbGVhc2VDb250ZXh0LCBjb250ZXh0LCByZWxlYXNlQ29udGV4dHMgPSBbXSkge1xuICBjb25zdCByZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0ID0gcmVsZWFzZUNvbnRleHRzLmluY2x1ZGVzKHJlbGVhc2VDb250ZXh0KTtcblxuICBpZiAoIXJlbGVhc2VDb250ZXh0c0luY2x1ZGVzUmVsZWFzZUNvbnRleHQpIHtcbiAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSByZWxlYXNlQ29udGV4dC5nZXREZXBlbmRlbmNpZXMoKTtcblxuICAgIGRlcGVuZGVuY2llcy5mb3JFYWNoRGVwZW5kZW5jeSgoZGVwZW5kZW5jeSkgPT4ge1xuICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHQgPSBmaW5kUmVsZWFzZUNvbnRleHQoZGVwZW5kZW5jeSwgY29udGV4dCk7XG5cbiAgICAgIHJldHJpZXZlUmVsZWFzZUNvbnRleHRzKHJlbGVhc2VDb250ZXh0LCBjb250ZXh0LCByZWxlYXNlQ29udGV4dHMpO1xuICAgIH0pO1xuXG4gICAgcmVsZWFzZUNvbnRleHRzLnVuc2hpZnQocmVsZWFzZUNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlbGVhc2VDb250ZXh0cztcbn1cblxuZnVuY3Rpb24gaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0KHJlbGVhc2VDb250ZXh0LCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0LFxuICAgICAgICBuYW1lID0gcmVsZWFzZUNvbnRleHQuZ2V0TmFtZSgpLFxuICAgICAgICByZWxlYXNlTmFtZSA9IG5hbWUsIC8vL1xuICAgICAgICByZWxlYXNlQ29udGV4dHMgPSByZXRyaWV2ZVJlbGVhc2VDb250ZXh0cyhyZWxlYXNlQ29udGV4dCwgY29udGV4dCk7XG5cbiAgbG9nLmluZm8oYEluaXRpYWxpc2luZyB0aGUgJyR7cmVsZWFzZU5hbWV9JyBwYWNrYWdlIGNvbnRleHQuLi5gKTtcblxuICBjb25zdCB7IEZpbGVDb250ZXh0RnJvbUZpbGVQYXRoIH0gPSBjb250ZXh0O1xuXG4gIHJlbGVhc2VDb250ZXh0LmluaXRpYWxpc2UocmVsZWFzZUNvbnRleHRzLCBGaWxlQ29udGV4dEZyb21GaWxlUGF0aCk7XG5cbiAgbG9nLmRlYnVnKGAuLi5pbml0aWFsaXNlZCB0aGUgJyR7cmVsZWFzZU5hbWV9JyBwYWNrYWdlIGNvbnRleHQuYCk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQ3ljbGljRGVwZW5kZW5jeVByZXNlbnQoZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpIHtcbiAgbGV0IGN5Y2xpY0RlcGVuZGVuY3lQcmVzZW50ID0gZmFsc2U7XG5cbiAgY29uc3QgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgaW5kZXggPSBkZXBlbmRlbnROYW1lcy5pbmRleE9mKGRlcGVuZGVuY3lOYW1lKTtcblxuICBpZiAoaW5kZXggPiAtMSkge1xuICAgIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0LFxuICAgICAgICAgIGNpcmN1bGFyRGVwZW5kZW50TmFtZXMgPSBkZXBlbmRlbnROYW1lcy5zbGljZShpbmRleCksXG4gICAgICAgICAgY2lyY3VsYXJEZXBlbmRlbmN5TmFtZXMgPSBbXG4gICAgICAgICAgICAuLi5jaXJjdWxhckRlcGVuZGVudE5hbWVzLFxuICAgICAgICAgICAgZGVwZW5kZW5jeU5hbWVcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNpcmN1bGFyRGVwZW5kZW5jeU5hbWVzU3RyaW5nID0gY2lyY3VsYXJEZXBlbmRlbmN5TmFtZXMuam9pbihTSU5HTEVfU1BBQ0UpO1xuXG4gICAgbG9nLndhcm5pbmcoYFRoZXJlIGlzIGEgY3ljbGljIGRlcGVuZGVuY3ksICcke2NpcmN1bGFyRGVwZW5kZW5jeU5hbWVzU3RyaW5nfScuYCk7XG5cbiAgICBjeWNsaWNEZXBlbmRlbmN5UHJlc2VudCA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gY3ljbGljRGVwZW5kZW5jeVByZXNlbnQ7XG59XG5cbmZ1bmN0aW9uIGNoZWNrUmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5KHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCkge1xuICBsZXQgcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5ID0gdHJ1ZTtcblxuICBjb25zdCBzaG9ydGVuZWRWZXJzaW9uID0gZGVwZW5kZW5jeS5nZXRTaG9ydGVuZWRWZXJzaW9uKCk7XG5cbiAgaWYgKHNob3J0ZW5lZFZlcnNpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBlbnRyaWVzTWF0Y2hTaG9ydGVuZWRWZXJzaW9uID0gcmVsZWFzZUNvbnRleHQubWF0Y2hTaG9ydGVuZWRWZXJzaW9uKHNob3J0ZW5lZFZlcnNpb24pO1xuXG4gICAgaWYgKCFlbnRyaWVzTWF0Y2hTaG9ydGVuZWRWZXJzaW9uKSB7XG4gICAgICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgICAgIHZlcnNpb24gPSByZWxlYXNlQ29udGV4dC5nZXRWZXJzaW9uKCksXG4gICAgICAgICAgICBsYXN0RGVwZW5kZW50TmFtZSA9IGxhc3QoZGVwZW5kZW50TmFtZXMpLFxuICAgICAgICAgICAgZGVwZW5kZW50TmFtZSA9IGxhc3REZXBlbmRlbnROYW1lLCAgLy8vXG4gICAgICAgICAgICB2ZXJzaW9uU3RyaW5nID0gdmVyc2lvbi50b1N0cmluZygpLFxuICAgICAgICAgICAgZGVwZW5kZW5jeVN0cmluZyA9IGRlcGVuZGVuY3kuYXNTdHJpbmcoKTtcblxuICAgICAgbG9nLndhcm5pbmcoYFRoZSAnJHtkZXBlbmRlbnROYW1lfScgZGVwZW5kZW50IHJlcXVpcmVzIHRoZSAnJHtkZXBlbmRlbmN5U3RyaW5nfScgZGVwZW5kZW5jeSBidXQgYSBjb250ZXh0IHdpdGggdmVyc2lvbiAnJHt2ZXJzaW9uU3RyaW5nfScgd2FzIHByb3ZpZGVkLmApO1xuXG4gICAgICByZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5O1xufVxuXG5mdW5jdGlvbiBjaGVja1Byb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlKHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbnRSZWxlYXNlZCwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpIHtcbiAgbGV0IHByb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlID0gZmFsc2U7XG5cbiAgaWYgKGRlcGVuZGVudFJlbGVhc2VkKSB7XG4gICAgY29uc3QgdW5yZWxlYXNlZCA9IHJlbGVhc2VDb250ZXh0LmlzVW5yZWxlYXNlZCgpO1xuXG4gICAgaWYgKHVucmVsZWFzZWQpIHtcbiAgICAgIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0LFxuICAgICAgICAgICAgbmFtZSA9IHJlbGVhc2VDb250ZXh0LmdldE5hbWUoKSxcbiAgICAgICAgICAgIGxhc3REZXBlbmRlbnROYW1lID0gbGFzdChkZXBlbmRlbnROYW1lcyksXG4gICAgICAgICAgICBkZXBlbmRlbmN5TmFtZSA9IG5hbWUsLy8vXG4gICAgICAgICAgICBkZXBlbmRlbnROYW1lID0gbGFzdERlcGVuZGVudE5hbWU7ICAvLy9cblxuICAgICAgbG9nLndhcm5pbmcoYFRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIGRlcGVuZGVuY3kgaXMgYSBwcm9qZWN0IHdoaWxzdCBpdHMgJyR7ZGVwZW5kZW50TmFtZX0nIGRlcGVuZGVudCBpcyBhIHBhY2thZ2UuYCk7XG5cbiAgICAgIHByb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJvamVjdERlcGVuZGVuY3lPZlBhY2thZ2U7XG59XG4iXSwibmFtZXMiOlsiY3JlYXRlUmVsZWFzZUNvbnRleHRzIiwiaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0cyIsInZlcmlmeVJlbGVhc2VDb250ZXh0cyIsImxhc3QiLCJhcnJheVV0aWxpdGllcyIsImRlcGVuZGVuY3lOYW1lIiwiY29udGV4dCIsImZhaWwiLCJzdWNjZWVkIiwibmFtZSIsImRlcGVuZGVuY3kiLCJEZXBlbmRlbmN5IiwiZnJvbU5hbWUiLCJkZXBlbmRlbnROYW1lcyIsImRlcGVuZGVudFJlbGVhc2VkIiwiY3JlYXRlUmVsZWFzZUNvbnRleHQiLCJyZWxlYXNlQ29udGV4dENyZWF0ZWQiLCJyZWxlYXNlQ29udGV4dHNDcmVhdGVkIiwicmVsZWFzZUNvbnRleHRzIiwiZm9yRWFjaCIsInJlbGVhc2VDb250ZXh0IiwiaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0IiwiYmFjayIsImZvcndhcmQiLCJldmVyeSIsInZlcmlmeVJlbGVhc2VDb250ZXh0IiwicmVsZWFzZWQiLCJpc1JlbGVhc2VkIiwidmVyaWZpZWQiLCJoYXNWZXJpZmllZCIsImxvZyIsImdldE5hbWUiLCJyZWxlYXNlTmFtZSIsImluZm8iLCJ2ZXJpZnkiLCJmaW5kUmVsZWFzZUNvbnRleHQiLCJkZXBlbmRlbnROYW1lc0xlbmd0aCIsImxlbmd0aCIsImxhc3REZXBlbmRlbnROYW1lIiwiZGVwZW5kZW50TmFtZSIsImRlcGVuZGVuY3lTdHJpbmciLCJhc1N0cmluZyIsInJlbGVhc2VDb250ZXh0RnJvbURlcGVuZGVuY3kiLCJyZWxlYXRlUHJlc2VudCIsImNoZWNrUmVsZWFzZVByZXNlbnQiLCJwcm9qZWN0RGVwZW5kZW5jeU9mUGFja2FnZSIsImNoZWNrUHJvamVjdERlcGVuZGVuY3lPZlBhY2thZ2UiLCJyZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kiLCJjaGVja1JlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeSIsImNyZWF0ZURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMiLCJkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzQ3JlYXRlZCIsImFkZFJlbGVhc2VDb250ZXh0IiwiZGVidWciLCJ3YXJuaW5nIiwiZGVwZW5kZW5jaWVzIiwiZ2V0RGVwZW5kZW5jaWVzIiwiYXJyYXkiLCJnZXRBcnJheSIsImN5Y2xpY0RlcGVuZGVuY3lQcmVzZW50IiwiY2hlY2tDeWNsaWNEZXBlbmRlbmN5UHJlc2VudCIsInB1c2giLCJmaW5kIiwiZGVwZW5kZW5jeU5hbWVNYXRjaGVzIiwibWF0Y2hEZXBlbmRlbmN5TmFtZSIsInJlbGVhc2VQcmVzZW50IiwicmV0cmlldmVSZWxlYXNlQ29udGV4dHMiLCJyZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0IiwiaW5jbHVkZXMiLCJmb3JFYWNoRGVwZW5kZW5jeSIsInVuc2hpZnQiLCJGaWxlQ29udGV4dEZyb21GaWxlUGF0aCIsImluaXRpYWxpc2UiLCJpbmRleCIsImluZGV4T2YiLCJjaXJjdWxhckRlcGVuZGVudE5hbWVzIiwic2xpY2UiLCJjaXJjdWxhckRlcGVuZGVuY3lOYW1lcyIsImNpcmN1bGFyRGVwZW5kZW5jeU5hbWVzU3RyaW5nIiwiam9pbiIsIlNJTkdMRV9TUEFDRSIsInNob3J0ZW5lZFZlcnNpb24iLCJnZXRTaG9ydGVuZWRWZXJzaW9uIiwiZW50cmllc01hdGNoU2hvcnRlbmVkVmVyc2lvbiIsIm1hdGNoU2hvcnRlbmVkVmVyc2lvbiIsInZlcnNpb24iLCJnZXRWZXJzaW9uIiwidmVyc2lvblN0cmluZyIsInRvU3RyaW5nIiwidW5yZWxlYXNlZCIsImlzVW5yZWxlYXNlZCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBVWdCQTtlQUFBQTs7UUErQmhCO2VBQUE7O1FBZGdCQztlQUFBQTs7UUFRQUM7ZUFBQUE7Ozs0QkFqQ1c7MkJBQ0k7OEJBRVI7MkJBQ007QUFFN0IsTUFBTSxFQUFFQyxJQUFJLEVBQUUsR0FBR0MseUJBQWM7QUFFeEIsU0FBU0osc0JBQXNCSyxjQUFjLEVBQUVDLE9BQU8sRUFBRUMsSUFBSSxFQUFFQyxPQUFPO0lBQzFFLE1BQU1DLE9BQU9KLGdCQUNQSyxhQUFhQyxzQkFBVSxDQUFDQyxRQUFRLENBQUNILE9BQ2pDSSxpQkFBaUIsRUFBRSxFQUNuQkMsb0JBQW9CO0lBRTFCLE9BQU9DLHFCQUFxQkwsWUFBWUcsZ0JBQWdCQyxtQkFBbUJSLFNBQVNDLE1BQU0sQ0FBQ1M7UUFDekYsSUFBSUMseUJBQXlCO1FBRTdCLElBQUlELHVCQUF1QjtZQUN6QkMseUJBQXlCO1FBQzNCO1FBRUEsT0FBT1QsUUFBUVM7SUFDakI7QUFDRjtBQUVPLFNBQVNoQiwwQkFBMEJLLE9BQU87SUFDL0MsTUFBTSxFQUFFWSxlQUFlLEVBQUUsR0FBR1o7SUFFNUJZLGdCQUFnQkMsT0FBTyxDQUFDLENBQUND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
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmVyaWZpY2F0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBEZXBlbmRlbmN5IH0gZnJvbSBcIm9jY2FtLW1vZGVsXCI7XG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgZXZlcnkgIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IFNJTkdMRV9TUEFDRSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBsYXN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGVhc2VDb250ZXh0cyhkZXBlbmRlbmN5TmFtZSwgY29udGV4dCwgc3VjY2VlZCwgZmFpbCkge1xuICBjb25zdCBuYW1lID0gZGVwZW5kZW5jeU5hbWUsICAvLy9cbiAgICAgICAgZGVwZW5kZW5jeSA9IERlcGVuZGVuY3kuZnJvbU5hbWUobmFtZSksXG4gICAgICAgIGRlcGVuZGVudE5hbWVzID0gW10sXG4gICAgICAgIGRlcGVuZGVudFJlbGVhc2VkID0gZmFsc2U7XG5cbiAgcmV0dXJuIGNyZWF0ZVJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBkZXBlbmRlbnRSZWxlYXNlZCwgY29udGV4dCwgKHJlbGVhc2VDb250ZXh0Q3JlYXRlZCkgPT4ge1xuICAgIGxldCByZWxlYXNlQ29udGV4dHNDcmVhdGVkID0gZmFsc2U7XG5cbiAgICBpZiAocmVsZWFzZUNvbnRleHRDcmVhdGVkKSB7XG4gICAgICByZWxlYXNlQ29udGV4dHNDcmVhdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VjY2VlZChyZWxlYXNlQ29udGV4dHNDcmVhdGVkKTtcbiAgfSwgZmFpbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXNlUmVsZWFzZUNvbnRleHRzKGNvbnRleHQpIHtcbiAgY29uc3QgeyByZWxlYXNlQ29udGV4dHMgfSA9IGNvbnRleHQ7XG5cbiAgcmVsZWFzZUNvbnRleHRzLmZvckVhY2goKHJlbGVhc2VDb250ZXh0KSA9PiB7XG4gICAgaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0KHJlbGVhc2VDb250ZXh0LCBjb250ZXh0KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlSZWxlYXNlQ29udGV4dHMoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICBjb25zdCB7IHJlbGVhc2VDb250ZXh0cyB9ID0gY29udGV4dDtcblxuICByZXR1cm4gZXZlcnkocmVsZWFzZUNvbnRleHRzLCB2ZXJpZnlSZWxlYXNlQ29udGV4dCwgY29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY3JlYXRlUmVsZWFzZUNvbnRleHRzLFxuICBpbml0aWFsaXNlUmVsZWFzZUNvbnRleHRzLFxuICB2ZXJpZnlSZWxlYXNlQ29udGV4dHNcbn07XG5cbmZ1bmN0aW9uIHZlcmlmeVJlbGVhc2VDb250ZXh0KHJlbGVhc2VDb250ZXh0LCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gIGNvbnN0IHJlbGVhc2VkID0gcmVsZWFzZUNvbnRleHQuaXNSZWxlYXNlZCgpLFxuICAgICAgICB2ZXJpZmllZCA9IHJlbGVhc2VDb250ZXh0Lmhhc1ZlcmlmaWVkKCk7XG5cbiAgaWYgKHJlbGVhc2VkIHx8IHZlcmlmaWVkKSB7XG4gICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gIH1cblxuICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgbmFtZSA9IHJlbGVhc2VDb250ZXh0LmdldE5hbWUoKSxcbiAgICAgICAgcmVsZWFzZU5hbWUgPSBuYW1lOyAvLy9cblxuICBsb2cuaW5mbyhgVmVyaWZ5aW5nIHRoZSAnJHtyZWxlYXNlTmFtZX0nIHByb2plY3QuLi5gKTtcblxuICByZXR1cm4gcmVsZWFzZUNvbnRleHQudmVyaWZ5KChiYWNrKSA9PiB7XG4gICAgbG9nLmluZm8oYC4uLnZlcmlmaWVkIHRoZSAnJHtyZWxlYXNlTmFtZX0nIHByb2plY3QuYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgfSwgYmFjayk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBkZXBlbmRlbnRSZWxlYXNlZCwgY29udGV4dCwgc3VjY2VlZCwgZmFpbCkge1xuICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgcmVsZWFzZUNvbnRleHQgPSBmaW5kUmVsZWFzZUNvbnRleHQoZGVwZW5kZW5jeSwgY29udGV4dCk7XG5cbiAgaWYgKHJlbGVhc2VDb250ZXh0ICE9PSBudWxsKSB7XG4gICAgY29uc3QgcmVsZWFzZUNvbnRleHRDcmVhdGVkID0gdHJ1ZTtcblxuICAgIHJldHVybiBzdWNjZWVkKHJlbGVhc2VDb250ZXh0Q3JlYXRlZCk7XG4gIH1cblxuICBjb25zdCBkZXBlbmRlbmN5TmFtZSA9IGRlcGVuZGVuY3kuZ2V0TmFtZSgpLFxuICAgICAgICBkZXBlbmRlbnROYW1lc0xlbmd0aCA9IGRlcGVuZGVudE5hbWVzLmxlbmd0aDtcblxuICBpZiAoZGVwZW5kZW50TmFtZXNMZW5ndGggPT09IDApIHtcbiAgICBsb2cuaW5mbyhgQ3JlYXRpbmcgdGhlICcke2RlcGVuZGVuY3lOYW1lfScgcGFja2FnZSBjb250ZXh0Li4uYCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGFzdERlcGVuZGVudE5hbWUgPSBsYXN0KGRlcGVuZGVudE5hbWVzKSxcbiAgICAgICAgICBkZXBlbmRlbnROYW1lID0gbGFzdERlcGVuZGVudE5hbWUsICAvLy9cbiAgICAgICAgICBkZXBlbmRlbmN5U3RyaW5nID0gZGVwZW5kZW5jeS5hc1N0cmluZygpO1xuXG4gICAgbG9nLmluZm8oYENyZWF0aW5nIHRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIHBhY2thZ2UgY29udGV4dCBnaXZlbiB0aGUgJyR7ZGVwZW5kZW50TmFtZX0nIGRlcGVuZGFudCdzICcke2RlcGVuZGVuY3lTdHJpbmd9JyBkZXBlbmRlbmN5Li4uYCk7XG4gIH1cblxuICBjb25zdCB7IHJlbGVhc2VDb250ZXh0RnJvbURlcGVuZGVuY3kgfSA9IGNvbnRleHQ7XG5cbiAgcmV0dXJuIHJlbGVhc2VDb250ZXh0RnJvbURlcGVuZGVuY3koZGVwZW5kZW5jeSwgY29udGV4dCwgKHJlbGVhc2VDb250ZXh0KSA9PiB7XG4gICAgbGV0IHJlbGVhc2VDb250ZXh0Q3JlYXRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgcmVsZWF0ZVByZXNlbnQgPSBjaGVja1JlbGVhc2VQcmVzZW50KHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbmN5TmFtZSwgY29udGV4dCk7XG5cbiAgICBpZiAoIXJlbGVhdGVQcmVzZW50KSB7XG4gICAgICByZXR1cm4gc3VjY2VlZChyZWxlYXNlQ29udGV4dENyZWF0ZWQpO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlID0gY2hlY2tQcm9qZWN0RGVwZW5kZW5jeU9mUGFja2FnZShyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW50UmVsZWFzZWQsIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KTtcblxuICAgIGlmIChwcm9qZWN0RGVwZW5kZW5jeU9mUGFja2FnZSkge1xuICAgICAgcmV0dXJuIHN1Y2NlZWQocmVsZWFzZUNvbnRleHRDcmVhdGVkKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kgPSBjaGVja1JlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeShyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpO1xuXG4gICAgaWYgKCFyZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kpIHtcbiAgICAgIHJldHVybiBzdWNjZWVkKHJlbGVhc2VDb250ZXh0Q3JlYXRlZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMocmVsZWFzZUNvbnRleHQsIGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0LCAoZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0c0NyZWF0ZWQpID0+IHtcbiAgICAgIGlmIChkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzQ3JlYXRlZCkge1xuICAgICAgICByZWxlYXNlQ29udGV4dENyZWF0ZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVsZWFzZUNvbnRleHRDcmVhdGVkKSB7XG4gICAgICAgIGFkZFJlbGVhc2VDb250ZXh0KHJlbGVhc2VDb250ZXh0LCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgcmVsZWFzZUNvbnRleHRDcmVhdGVkID9cbiAgICAgICAgbG9nLmRlYnVnKGAuLi5jcmVhdGVkIHRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIHBhY2thZ2UgY29udGV4dC5gKSA6XG4gICAgICAgICAgbG9nLndhcm5pbmcoYC4uLnVuYWJsZSB0byBjcmVhdGUgdGhlICcke2RlcGVuZGVuY3lOYW1lfScgcGFja2FnZSBjb250ZXh0LmApO1xuXG4gICAgICByZXR1cm4gc3VjY2VlZChyZWxlYXNlQ29udGV4dENyZWF0ZWQpO1xuICAgIH0sIGZhaWwpO1xuICB9LCBmYWlsKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyhyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQsIHN1Y2NlZWQsIGZhaWwpIHtcbiAgY29uc3QgbmFtZSA9IHJlbGVhc2VDb250ZXh0LmdldE5hbWUoKSxcbiAgICAgICAgcmVsZWFzZWQgPSByZWxlYXNlQ29udGV4dC5pc1JlbGVhc2VkKCksXG4gICAgICAgIGRlcGVuZGVuY2llcyA9IHJlbGVhc2VDb250ZXh0LmdldERlcGVuZGVuY2llcygpLFxuICAgICAgICBkZXBlbmRlbnROYW1lID0gbmFtZSwgIC8vL1xuICAgICAgICBkZXBlbmRlbnRSZWxlYXNlZCA9IHJlbGVhc2VkOyAgLy8vXG5cbiAgZGVwZW5kZW50TmFtZXMgPSBbIC4uLmRlcGVuZGVudE5hbWVzLCBkZXBlbmRlbnROYW1lIF07ICAvLy9cblxuICBjb25zdCBhcnJheSA9IGRlcGVuZGVuY2llcy5nZXRBcnJheSgpO1xuXG4gIHJldHVybiBldmVyeShhcnJheSwgKGRlcGVuZGVuY3ksIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICBjb25zdCBjeWNsaWNEZXBlbmRlbmN5UHJlc2VudCA9IGNoZWNrQ3ljbGljRGVwZW5kZW5jeVByZXNlbnQoZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpO1xuXG4gICAgaWYgKGN5Y2xpY0RlcGVuZGVuY3lQcmVzZW50KSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVSZWxlYXNlQ29udGV4dChkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgZGVwZW5kZW50UmVsZWFzZWQsIGNvbnRleHQsIChyZWxlYXNlQ29udGV4dENyZWF0ZWQpID0+IHtcbiAgICAgIGlmICghcmVsZWFzZUNvbnRleHRDcmVhdGVkKSB7XG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGJhY2spO1xuICAgIH0sIGZhaWwpO1xuICB9LCAoKSA9PiBzdWNjZWVkKGZhbHNlKSwgKCkgPT4gc3VjY2VlZCh0cnVlKSk7XG59XG5cbmZ1bmN0aW9uIGFkZFJlbGVhc2VDb250ZXh0KHJlbGVhc2VDb250ZXh0LCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgcmVsZWFzZUNvbnRleHRzIH0gPSBjb250ZXh0O1xuXG4gIHJlbGVhc2VDb250ZXh0cy5wdXNoKHJlbGVhc2VDb250ZXh0KTtcbn1cblxuZnVuY3Rpb24gZmluZFJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGNvbnRleHQpIHtcbiAgY29uc3QgeyByZWxlYXNlQ29udGV4dHMgfSA9IGNvbnRleHQsXG4gICAgICAgIGRlcGVuZGVuY3lOYW1lID0gZGVwZW5kZW5jeS5nZXROYW1lKCksXG4gICAgICAgIHJlbGVhc2VDb250ZXh0ID0gcmVsZWFzZUNvbnRleHRzLmZpbmQoKHJlbGVhc2VDb250ZXh0KSA9PiB7XG4gICAgICAgICAgY29uc3QgZGVwZW5kZW5jeU5hbWVNYXRjaGVzID0gcmVsZWFzZUNvbnRleHQubWF0Y2hEZXBlbmRlbmN5TmFtZShkZXBlbmRlbmN5TmFtZSk7XG5cbiAgICAgICAgICBpZiAoZGVwZW5kZW5jeU5hbWVNYXRjaGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgcmV0dXJuIHJlbGVhc2VDb250ZXh0O1xufVxuXG5mdW5jdGlvbiBjaGVja1JlbGVhc2VQcmVzZW50KHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbmN5TmFtZSwgY29udGV4dCkge1xuICBsZXQgcmVsZWFzZVByZXNlbnQgPSB0cnVlO1xuXG4gIGlmIChyZWxlYXNlQ29udGV4dCA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0O1xuXG4gICAgbG9nLndhcm5pbmcoYFRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIHBhY2thZ2UgY29udGV4dCBjb3VsZCBub3QgYmUgY3JlYXRlZC4gUGVyaGFwcyB0aGUgJ21ldGEuanNvbicgZmlsZSBpcyBtaXNzaW5nIG9yIGludmFsaWQuYCk7XG5cbiAgICByZWxlYXNlUHJlc2VudCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHJlbGVhc2VQcmVzZW50O1xufVxuXG5mdW5jdGlvbiByZXRyaWV2ZVJlbGVhc2VDb250ZXh0cyhyZWxlYXNlQ29udGV4dCwgY29udGV4dCwgcmVsZWFzZUNvbnRleHRzID0gW10pIHtcbiAgY29uc3QgcmVsZWFzZUNvbnRleHRzSW5jbHVkZXNSZWxlYXNlQ29udGV4dCA9IHJlbGVhc2VDb250ZXh0cy5pbmNsdWRlcyhyZWxlYXNlQ29udGV4dCk7XG5cbiAgaWYgKCFyZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0KSB7XG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gcmVsZWFzZUNvbnRleHQuZ2V0RGVwZW5kZW5jaWVzKCk7XG5cbiAgICBkZXBlbmRlbmNpZXMuZm9yRWFjaERlcGVuZGVuY3koKGRlcGVuZGVuY3kpID0+IHtcbiAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0ID0gZmluZFJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGNvbnRleHQpO1xuXG4gICAgICByZXRyaWV2ZVJlbGVhc2VDb250ZXh0cyhyZWxlYXNlQ29udGV4dCwgY29udGV4dCwgcmVsZWFzZUNvbnRleHRzKTtcbiAgICB9KTtcblxuICAgIHJlbGVhc2VDb250ZXh0cy51bnNoaWZ0KHJlbGVhc2VDb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWxlYXNlQ29udGV4dHM7XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpc2VSZWxlYXNlQ29udGV4dChyZWxlYXNlQ29udGV4dCwgY29udGV4dCkge1xuICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgbmFtZSA9IHJlbGVhc2VDb250ZXh0LmdldE5hbWUoKSxcbiAgICAgICAgcmVsZWFzZU5hbWUgPSBuYW1lLCAvLy9cbiAgICAgICAgcmVsZWFzZUNvbnRleHRzID0gcmV0cmlldmVSZWxlYXNlQ29udGV4dHMocmVsZWFzZUNvbnRleHQsIGNvbnRleHQpO1xuXG4gIGxvZy5pbmZvKGBJbml0aWFsaXNpbmcgdGhlICcke3JlbGVhc2VOYW1lfScgcGFja2FnZSBjb250ZXh0Li4uYCk7XG5cbiAgY29uc3QgeyBGaWxlQ29udGV4dEZyb21GaWxlUGF0aCB9ID0gY29udGV4dDtcblxuICByZWxlYXNlQ29udGV4dC5pbml0aWFsaXNlKHJlbGVhc2VDb250ZXh0cywgRmlsZUNvbnRleHRGcm9tRmlsZVBhdGgpO1xuXG4gIGxvZy5kZWJ1ZyhgLi4uaW5pdGlhbGlzZWQgdGhlICcke3JlbGVhc2VOYW1lfScgcGFja2FnZSBjb250ZXh0LmApO1xufVxuXG5mdW5jdGlvbiBjaGVja0N5Y2xpY0RlcGVuZGVuY3lQcmVzZW50KGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KSB7XG4gIGxldCBjeWNsaWNEZXBlbmRlbmN5UHJlc2VudCA9IGZhbHNlO1xuXG4gIGNvbnN0IGRlcGVuZGVuY3lOYW1lID0gZGVwZW5kZW5jeS5nZXROYW1lKCksXG4gICAgICAgIGluZGV4ID0gZGVwZW5kZW50TmFtZXMuaW5kZXhPZihkZXBlbmRlbmN5TmFtZSk7XG5cbiAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgICBjaXJjdWxhckRlcGVuZGVudE5hbWVzID0gZGVwZW5kZW50TmFtZXMuc2xpY2UoaW5kZXgpLFxuICAgICAgICAgIGNpcmN1bGFyRGVwZW5kZW5jeU5hbWVzID0gW1xuICAgICAgICAgICAgLi4uY2lyY3VsYXJEZXBlbmRlbnROYW1lcyxcbiAgICAgICAgICAgIGRlcGVuZGVuY3lOYW1lXG4gICAgICAgICAgXSxcbiAgICAgICAgICBjaXJjdWxhckRlcGVuZGVuY3lOYW1lc1N0cmluZyA9IGNpcmN1bGFyRGVwZW5kZW5jeU5hbWVzLmpvaW4oU0lOR0xFX1NQQUNFKTtcblxuICAgIGxvZy53YXJuaW5nKGBUaGVyZSBpcyBhIGN5Y2xpYyBkZXBlbmRlbmN5LCAnJHtjaXJjdWxhckRlcGVuZGVuY3lOYW1lc1N0cmluZ30nLmApO1xuXG4gICAgY3ljbGljRGVwZW5kZW5jeVByZXNlbnQgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGN5Y2xpY0RlcGVuZGVuY3lQcmVzZW50O1xufVxuXG5mdW5jdGlvbiBjaGVja1JlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeShyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpIHtcbiAgbGV0IHJlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeSA9IHRydWU7XG5cbiAgY29uc3Qgc2hvcnRlbmVkVmVyc2lvbiA9IGRlcGVuZGVuY3kuZ2V0U2hvcnRlbmVkVmVyc2lvbigpO1xuXG4gIGlmIChzaG9ydGVuZWRWZXJzaW9uICE9PSBudWxsKSB7XG4gICAgY29uc3QgZW50cmllc01hdGNoU2hvcnRlbmVkVmVyc2lvbiA9IHJlbGVhc2VDb250ZXh0Lm1hdGNoU2hvcnRlbmVkVmVyc2lvbihzaG9ydGVuZWRWZXJzaW9uKTtcblxuICAgIGlmICghZW50cmllc01hdGNoU2hvcnRlbmVkVmVyc2lvbikge1xuICAgICAgY29uc3QgeyBsb2cgfSA9IGNvbnRleHQsXG4gICAgICAgICAgICB2ZXJzaW9uID0gcmVsZWFzZUNvbnRleHQuZ2V0VmVyc2lvbigpLFxuICAgICAgICAgICAgbGFzdERlcGVuZGVudE5hbWUgPSBsYXN0KGRlcGVuZGVudE5hbWVzKSxcbiAgICAgICAgICAgIGRlcGVuZGVudE5hbWUgPSBsYXN0RGVwZW5kZW50TmFtZSwgIC8vL1xuICAgICAgICAgICAgdmVyc2lvblN0cmluZyA9IHZlcnNpb24udG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGRlcGVuZGVuY3lTdHJpbmcgPSBkZXBlbmRlbmN5LmFzU3RyaW5nKCk7XG5cbiAgICAgIGxvZy53YXJuaW5nKGBUaGUgJyR7ZGVwZW5kZW50TmFtZX0nIGRlcGVuZGVudCByZXF1aXJlcyB0aGUgJyR7ZGVwZW5kZW5jeVN0cmluZ30nIGRlcGVuZGVuY3kgYnV0IGEgY29udGV4dCB3aXRoIHZlcnNpb24gJyR7dmVyc2lvblN0cmluZ30nIHdhcyBwcm92aWRlZC5gKTtcblxuICAgICAgcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeTtcbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9qZWN0RGVwZW5kZW5jeU9mUGFja2FnZShyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW50UmVsZWFzZWQsIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KSB7XG4gIGxldCBwcm9qZWN0RGVwZW5kZW5jeU9mUGFja2FnZSA9IGZhbHNlO1xuXG4gIGlmIChkZXBlbmRlbnRSZWxlYXNlZCkge1xuICAgIGNvbnN0IHVucmVsZWFzZWQgPSByZWxlYXNlQ29udGV4dC5pc1VucmVsZWFzZWQoKTtcblxuICAgIGlmICh1bnJlbGVhc2VkKSB7XG4gICAgICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgICAgIG5hbWUgPSByZWxlYXNlQ29udGV4dC5nZXROYW1lKCksXG4gICAgICAgICAgICBsYXN0RGVwZW5kZW50TmFtZSA9IGxhc3QoZGVwZW5kZW50TmFtZXMpLFxuICAgICAgICAgICAgZGVwZW5kZW5jeU5hbWUgPSBuYW1lLC8vL1xuICAgICAgICAgICAgZGVwZW5kZW50TmFtZSA9IGxhc3REZXBlbmRlbnROYW1lOyAgLy8vXG5cbiAgICAgIGxvZy53YXJuaW5nKGBUaGUgJyR7ZGVwZW5kZW5jeU5hbWV9JyBkZXBlbmRlbmN5IGlzIGEgcHJvamVjdCB3aGlsc3QgaXRzICcke2RlcGVuZGVudE5hbWV9JyBkZXBlbmRlbnQgaXMgYSBwYWNrYWdlLmApO1xuXG4gICAgICBwcm9qZWN0RGVwZW5kZW5jeU9mUGFja2FnZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlO1xufVxuIl0sIm5hbWVzIjpbImNyZWF0ZVJlbGVhc2VDb250ZXh0cyIsImluaXRpYWxpc2VSZWxlYXNlQ29udGV4dHMiLCJ2ZXJpZnlSZWxlYXNlQ29udGV4dHMiLCJsYXN0IiwiYXJyYXlVdGlsaXRpZXMiLCJkZXBlbmRlbmN5TmFtZSIsImNvbnRleHQiLCJzdWNjZWVkIiwiZmFpbCIsIm5hbWUiLCJkZXBlbmRlbmN5IiwiRGVwZW5kZW5jeSIsImZyb21OYW1lIiwiZGVwZW5kZW50TmFtZXMiLCJkZXBlbmRlbnRSZWxlYXNlZCIsImNyZWF0ZVJlbGVhc2VDb250ZXh0IiwicmVsZWFzZUNvbnRleHRDcmVhdGVkIiwicmVsZWFzZUNvbnRleHRzQ3JlYXRlZCIsInJlbGVhc2VDb250ZXh0cyIsImZvckVhY2giLCJyZWxlYXNlQ29udGV4dCIsImluaXRpYWxpc2VSZWxlYXNlQ29udGV4dCIsImZvcndhcmQiLCJiYWNrIiwiZXZlcnkiLCJ2ZXJpZnlSZWxlYXNlQ29udGV4dCIsInJlbGVhc2VkIiwiaXNSZWxlYXNlZCIsInZlcmlmaWVkIiwiaGFzVmVyaWZpZWQiLCJsb2ciLCJnZXROYW1lIiwicmVsZWFzZU5hbWUiLCJpbmZvIiwidmVyaWZ5IiwiZmluZFJlbGVhc2VDb250ZXh0IiwiZGVwZW5kZW50TmFtZXNMZW5ndGgiLCJsZW5ndGgiLCJsYXN0RGVwZW5kZW50TmFtZSIsImRlcGVuZGVudE5hbWUiLCJkZXBlbmRlbmN5U3RyaW5nIiwiYXNTdHJpbmciLCJyZWxlYXNlQ29udGV4dEZyb21EZXBlbmRlbmN5IiwicmVsZWF0ZVByZXNlbnQiLCJjaGVja1JlbGVhc2VQcmVzZW50IiwicHJvamVjdERlcGVuZGVuY3lPZlBhY2thZ2UiLCJjaGVja1Byb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlIiwicmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5IiwiY2hlY2tSZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kiLCJjcmVhdGVEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzIiwiZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0c0NyZWF0ZWQiLCJhZGRSZWxlYXNlQ29udGV4dCIsImRlYnVnIiwid2FybmluZyIsImRlcGVuZGVuY2llcyIsImdldERlcGVuZGVuY2llcyIsImFycmF5IiwiZ2V0QXJyYXkiLCJjeWNsaWNEZXBlbmRlbmN5UHJlc2VudCIsImNoZWNrQ3ljbGljRGVwZW5kZW5jeVByZXNlbnQiLCJwdXNoIiwiZmluZCIsImRlcGVuZGVuY3lOYW1lTWF0Y2hlcyIsIm1hdGNoRGVwZW5kZW5jeU5hbWUiLCJyZWxlYXNlUHJlc2VudCIsInJldHJpZXZlUmVsZWFzZUNvbnRleHRzIiwicmVsZWFzZUNvbnRleHRzSW5jbHVkZXNSZWxlYXNlQ29udGV4dCIsImluY2x1ZGVzIiwiZm9yRWFjaERlcGVuZGVuY3kiLCJ1bnNoaWZ0IiwiRmlsZUNvbnRleHRGcm9tRmlsZVBhdGgiLCJpbml0aWFsaXNlIiwiaW5kZXgiLCJpbmRleE9mIiwiY2lyY3VsYXJEZXBlbmRlbnROYW1lcyIsInNsaWNlIiwiY2lyY3VsYXJEZXBlbmRlbmN5TmFtZXMiLCJjaXJjdWxhckRlcGVuZGVuY3lOYW1lc1N0cmluZyIsImpvaW4iLCJTSU5HTEVfU1BBQ0UiLCJzaG9ydGVuZWRWZXJzaW9uIiwiZ2V0U2hvcnRlbmVkVmVyc2lvbiIsImVudHJpZXNNYXRjaFNob3J0ZW5lZFZlcnNpb24iLCJtYXRjaFNob3J0ZW5lZFZlcnNpb24iLCJ2ZXJzaW9uIiwiZ2V0VmVyc2lvbiIsInZlcnNpb25TdHJpbmciLCJ0b1N0cmluZyIsInVucmVsZWFzZWQiLCJpc1VucmVsZWFzZWQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQVVnQkE7ZUFBQUE7O1FBK0JoQjtlQUFBOztRQWRnQkM7ZUFBQUE7O1FBUUFDO2VBQUFBOzs7NEJBakNXOzJCQUNJOzhCQUVSOzJCQUNNO0FBRTdCLE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdDLHlCQUFjO0FBRXhCLFNBQVNKLHNCQUFzQkssY0FBYyxFQUFFQyxPQUFPLEVBQUVDLE9BQU8sRUFBRUMsSUFBSTtJQUMxRSxNQUFNQyxPQUFPSixnQkFDUEssYUFBYUMsc0JBQVUsQ0FBQ0MsUUFBUSxDQUFDSCxPQUNqQ0ksaUJBQWlCLEVBQUUsRUFDbkJDLG9CQUFvQjtJQUUxQixPQUFPQyxxQkFBcUJMLFlBQVlHLGdCQUFnQkMsbUJBQW1CUixTQUFTLENBQUNVO1FBQ25GLElBQUlDLHlCQUF5QjtRQUU3QixJQUFJRCx1QkFBdUI7WUFDekJDLHlCQUF5QjtRQUMzQjtRQUVBLE9BQU9WLFFBQVFVO0lBQ2pCLEdBQUdUO0FBQ0w7QUFFTyxTQUFTUCwwQkFBMEJLLE9BQU87SUFDL0MsTUFBTSxFQUFFWSxlQUFlLEVBQUUsR0FBR1o7SUFFNUJZLGdCQUFnQkMsT0FBTyxDQUFDLENBQUNDO1FBQ3ZCQyx5QkFBeUJELGdCQUFnQmQ7SUFDM0M7QUFDRjtBQUVPLFNBQVNKLHNCQUFzQkksT0FBTyxFQUFFZ0IsT0FBTyxFQUFFQyxJQUFJO0lBQzFELE1BQU0sRUFBRUwsZUFBZSxFQUFFLEdBQUdaO0lBRTVCLE9BQU9rQixJQUFBQSxtQkFBSyxFQUFDTixpQkFBaUJPLHNCQUFzQm5CLFNBQVNnQixTQUFTQztBQUN4RTtNQUVBLFdBQWU7SUFDYnZCO0lBQ0FDO0lBQ0FDO0FBQ0Y7QUFFQSxTQUFTdUIscUJBQXFCTCxjQUFjLEVBQUVkLE9BQU8sRUFBRWdCLE9BQU8sRUFBRUMsSUFBSTtJQUNsRSxNQUFNRyxXQUFXTixlQUFlTyxVQUFVLElBQ3BDQyxXQUFXUixlQUFlUyxXQUFXO0lBRTNDLElBQUlILFlBQVlFLFVBQVU7UUFDeEIsT0FBT04sUUFBUUM7SUFDakI7SUFFQSxNQUFNLEVBQUVPLEdBQUcsRUFBRSxHQUFHeEIsU0FDVkcsT0FBT1csZUFBZVcsT0FBTyxJQUM3QkMsY0FBY3ZCLE1BQU0sR0FBRztJQUU3QnFCLElBQUlHLElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBRUQsWUFBWSxZQUFZLENBQUM7SUFFcEQsT0FBT1osZUFBZWMsTUFBTSxDQUFDLENBQUNYO1FBQzVCTyxJQUFJRyxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsRUFBRUQsWUFBWSxVQUFVLENBQUM7UUFFcEQsT0FBT1YsUUFBUWhCLFNBQVNpQjtJQUMxQixHQUFHQTtBQUNMO0FBRUEsU0FBU1IscUJBQXFCTCxVQUFVLEVBQUVHLGNBQWMsRUFBRUMsaUJBQWlCLEVBQUVSLE9BQU8sRUFBRUMsT0FBTyxFQUFFQyxJQUFJO0lBQ2pHLE1BQU0sRUFBRXNCLEdBQUcsRUFBRSxHQUFHeEIsU0FDVmMsaUJBQWlCZSxtQkFBbUJ6QixZQUFZSjtJQUV0RCxJQUFJYyxtQkFBbUIsTUFBTTtRQUMzQixNQUFNSix3QkFBd0I7UUFFOUIsT0FBT1QsUUFBUVM7SUFDakI7SUFFQSxNQUFNWCxpQkFBaUJLLFdBQVdxQixPQUFPLElBQ25DSyx1QkFBdUJ2QixlQUFld0IsTUFBTTtJQUVsRCxJQUFJRCx5QkFBeUIsR0FBRztRQUM5Qk4sSUFBSUcsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFNUIsZUFBZSxvQkFBb0IsQ0FBQztJQUNoRSxPQUFPO1FBQ0wsTUFBTWlDLG9CQUFvQm5DLEtBQUtVLGlCQUN6QjBCLGdCQUFnQkQsbUJBQ2hCRSxtQkFBbUI5QixXQUFXK0IsUUFBUTtRQUU1Q1gsSUFBSUcsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFNUIsZUFBZSw2QkFBNkIsRUFBRWtDLGNBQWMsZUFBZSxFQUFFQyxpQkFBaUIsZUFBZSxDQUFDO0lBQzFJO0lBRUEsTUFBTSxFQUFFRSw0QkFBNEIsRUFBRSxHQUFHcEM7SUFFekMsT0FBT29DLDZCQUE2QmhDLFlBQVlKLFNBQVMsQ0FBQ2M7UUFDeEQsSUFBSUosd0JBQXdCO1FBRTVCLE1BQU0yQixpQkFBaUJDLG9CQUFvQnhCLGdCQUFnQmYsZ0JBQWdCQztRQUUzRSxJQUFJLENBQUNxQyxnQkFBZ0I7WUFDbkIsT0FBT3BDLFFBQVFTO1FBQ2pCO1FBRUEsTUFBTTZCLDZCQUE2QkMsZ0NBQWdDMUIsZ0JBQWdCTixtQkFBbUJELGdCQUFnQlA7UUFFdEgsSUFBSXVDLDRCQUE0QjtZQUM5QixPQUFPdEMsUUFBUVM7UUFDakI7UUFFQSxNQUFNK0IsMkJBQTJCQyw4QkFBOEI1QixnQkFBZ0JWLFlBQVlHLGdCQUFnQlA7UUFFM0csSUFBSSxDQUFDeUMsMEJBQTBCO1lBQzdCLE9BQU94QyxRQUFRUztRQUNqQjtRQUVBLE9BQU9pQyxnQ0FBZ0M3QixnQkFBZ0JWLFlBQVlHLGdCQUFnQlAsU0FBUyxDQUFDNEM7WUFDM0YsSUFBSUEsa0NBQWtDO2dCQUNwQ2xDLHdCQUF3QjtZQUMxQjtZQUVBLElBQUlBLHVCQUF1QjtnQkFDekJtQyxrQkFBa0IvQixnQkFBZ0JkO1lBQ3BDO1lBRUFVLHdCQUNFYyxJQUFJc0IsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUvQyxlQUFlLGtCQUFrQixDQUFDLElBQzdEeUIsSUFBSXVCLE9BQU8sQ0FBQyxDQUFDLHlCQUF5QixFQUFFaEQsZUFBZSxrQkFBa0IsQ0FBQztZQUU5RSxPQUFPRSxRQUFRUztRQUNqQixHQUFHUjtJQUNMLEdBQUdBO0FBQ0w7QUFFQSxTQUFTeUMsZ0NBQWdDN0IsY0FBYyxFQUFFVixVQUFVLEVBQUVHLGNBQWMsRUFBRVAsT0FBTyxFQUFFQyxPQUFPLEVBQUVDLElBQUk7SUFDekcsTUFBTUMsT0FBT1csZUFBZVcsT0FBTyxJQUM3QkwsV0FBV04sZUFBZU8sVUFBVSxJQUNwQzJCLGVBQWVsQyxlQUFlbUMsZUFBZSxJQUM3Q2hCLGdCQUFnQjlCLE1BQ2hCSyxvQkFBb0JZLFVBQVcsR0FBRztJQUV4Q2IsaUJBQWlCO1dBQUtBO1FBQWdCMEI7S0FBZSxFQUFHLEdBQUc7SUFFM0QsTUFBTWlCLFFBQVFGLGFBQWFHLFFBQVE7SUFFbkMsT0FBT2pDLElBQUFBLG1CQUFLLEVBQUNnQyxPQUFPLENBQUM5QyxZQUFZWSxTQUFTQztRQUN4QyxNQUFNbUMsMEJBQTBCQyw2QkFBNkJqRCxZQUFZRyxnQkFBZ0JQO1FBRXpGLElBQUlvRCx5QkFBeUI7WUFDM0IsT0FBT25DO1FBQ1Q7UUFFQSxPQUFPUixxQkFBcUJMLFlBQVlHLGdCQUFnQkMsbUJBQW1CUixTQUFTLENBQUNVO1lBQ25GLElBQUksQ0FBQ0EsdUJBQXVCO2dCQUMxQixPQUFPTztZQUNUO1lBRUEsT0FBT0QsUUFBUUM7UUFDakIsR0FBR2Y7SUFDTCxHQUFHLElBQU1ELFFBQVEsUUFBUSxJQUFNQSxRQUFRO0FBQ3pDO0FBRUEsU0FBUzRDLGtCQUFrQi9CLGNBQWMsRUFBRWQsT0FBTztJQUNoRCxNQUFNLEVBQUVZLGVBQWUsRUFBRSxHQUFHWjtJQUU1QlksZ0JBQWdCMEMsSUFBSSxDQUFDeEM7QUFDdkI7QUFFQSxTQUFTZSxtQkFBbUJ6QixVQUFVLEVBQUVKLE9BQU87SUFDN0MsTUFBTSxFQUFFWSxlQUFlLEVBQUUsR0FBR1osU0FDdEJELGlCQUFpQkssV0FBV3FCLE9BQU8sSUFDbkNYLGlCQUFpQkYsZ0JBQWdCMkMsSUFBSSxDQUFDLENBQUN6QztRQUNyQyxNQUFNMEMsd0JBQXdCMUMsZUFBZTJDLG1CQUFtQixDQUFDMUQ7UUFFakUsSUFBSXlELHVCQUF1QjtZQUN6QixPQUFPO1FBQ1Q7SUFDRixNQUFNO0lBRVosT0FBTzFDO0FBQ1Q7QUFFQSxTQUFTd0Isb0JBQW9CeEIsY0FBYyxFQUFFZixjQUFjLEVBQUVDLE9BQU87SUFDbEUsSUFBSTBELGlCQUFpQjtJQUVyQixJQUFJNUMsbUJBQW1CLE1BQU07UUFDM0IsTUFBTSxFQUFFVSxHQUFHLEVBQUUsR0FBR3hCO1FBRWhCd0IsSUFBSXVCLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRWhELGVBQWUsMkZBQTJGLENBQUM7UUFFL0gyRCxpQkFBaUI7SUFDbkI7SUFFQSxPQUFPQTtBQUNUO0FBRUEsU0FBU0Msd0JBQXdCN0MsY0FBYyxFQUFFZCxPQUFPLEVBQUVZLGtCQUFrQixFQUFFO0lBQzVFLE1BQU1nRCx3Q0FBd0NoRCxnQkFBZ0JpRCxRQUFRLENBQUMvQztJQUV2RSxJQUFJLENBQUM4Qyx1Q0FBdUM7UUFDMUMsTUFBTVosZUFBZWxDLGVBQWVtQyxlQUFlO1FBRW5ERCxhQUFhYyxpQkFBaUIsQ0FBQyxDQUFDMUQ7WUFDOUIsTUFBTVUsaUJBQWlCZSxtQkFBbUJ6QixZQUFZSjtZQUV0RDJELHdCQUF3QjdDLGdCQUFnQmQsU0FBU1k7UUFDbkQ7UUFFQUEsZ0JBQWdCbUQsT0FBTyxDQUFDakQ7SUFDMUI7SUFFQSxPQUFPRjtBQUNUO0FBRUEsU0FBU0cseUJBQXlCRCxjQUFjLEVBQUVkLE9BQU87SUFDdkQsTUFBTSxFQUFFd0IsR0FBRyxFQUFFLEdBQUd4QixTQUNWRyxPQUFPVyxlQUFlVyxPQUFPLElBQzdCQyxjQUFjdkIsTUFDZFMsa0JBQWtCK0Msd0JBQXdCN0MsZ0JBQWdCZDtJQUVoRXdCLElBQUlHLElBQUksQ0FBQyxDQUFDLGtCQUFrQixFQUFFRCxZQUFZLG9CQUFvQixDQUFDO0lBRS9ELE1BQU0sRUFBRXNDLHVCQUF1QixFQUFFLEdBQUdoRTtJQUVwQ2MsZUFBZW1ELFVBQVUsQ0FBQ3JELGlCQUFpQm9EO0lBRTNDeEMsSUFBSXNCLEtBQUssQ0FBQyxDQUFDLG9CQUFvQixFQUFFcEIsWUFBWSxrQkFBa0IsQ0FBQztBQUNsRTtBQUVBLFNBQVMyQiw2QkFBNkJqRCxVQUFVLEVBQUVHLGNBQWMsRUFBRVAsT0FBTztJQUN2RSxJQUFJb0QsMEJBQTBCO0lBRTlCLE1BQU1yRCxpQkFBaUJLLFdBQVdxQixPQUFPLElBQ25DeUMsUUFBUTNELGVBQWU0RCxPQUFPLENBQUNwRTtJQUVyQyxJQUFJbUUsUUFBUSxDQUFDLEdBQUc7UUFDZCxNQUFNLEVBQUUxQyxHQUFHLEVBQUUsR0FBR3hCLFNBQ1ZvRSx5QkFBeUI3RCxlQUFlOEQsS0FBSyxDQUFDSCxRQUM5Q0ksMEJBQTBCO2VBQ3JCRjtZQUNIckU7U0FDRCxFQUNEd0UsZ0NBQWdDRCx3QkFBd0JFLElBQUksQ0FBQ0MsdUJBQVk7UUFFL0VqRCxJQUFJdUIsT0FBTyxDQUFDLENBQUMsK0JBQStCLEVBQUV3Qiw4QkFBOEIsRUFBRSxDQUFDO1FBRS9FbkIsMEJBQTBCO0lBQzVCO0lBRUEsT0FBT0E7QUFDVDtBQUVBLFNBQVNWLDhCQUE4QjVCLGNBQWMsRUFBRVYsVUFBVSxFQUFFRyxjQUFjLEVBQUVQLE9BQU87SUFDeEYsSUFBSXlDLDJCQUEyQjtJQUUvQixNQUFNaUMsbUJBQW1CdEUsV0FBV3VFLG1CQUFtQjtJQUV2RCxJQUFJRCxxQkFBcUIsTUFBTTtRQUM3QixNQUFNRSwrQkFBK0I5RCxlQUFlK0QscUJBQXFCLENBQUNIO1FBRTFFLElBQUksQ0FBQ0UsOEJBQThCO1lBQ2pDLE1BQU0sRUFBRXBELEdBQUcsRUFBRSxHQUFHeEIsU0FDVjhFLFVBQVVoRSxlQUFlaUUsVUFBVSxJQUNuQy9DLG9CQUFvQm5DLEtBQUtVLGlCQUN6QjBCLGdCQUFnQkQsbUJBQ2hCZ0QsZ0JBQWdCRixRQUFRRyxRQUFRLElBQ2hDL0MsbUJBQW1COUIsV0FBVytCLFFBQVE7WUFFNUNYLElBQUl1QixPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUVkLGNBQWMsMEJBQTBCLEVBQUVDLGlCQUFpQix5Q0FBeUMsRUFBRThDLGNBQWMsZUFBZSxDQUFDO1lBRXhKdkMsMkJBQTJCO1FBQzdCO0lBQ0Y7SUFFQSxPQUFPQTtBQUNUO0FBRUEsU0FBU0QsZ0NBQWdDMUIsY0FBYyxFQUFFTixpQkFBaUIsRUFBRUQsY0FBYyxFQUFFUCxPQUFPO0lBQ2pHLElBQUl1Qyw2QkFBNkI7SUFFakMsSUFBSS9CLG1CQUFtQjtRQUNyQixNQUFNMEUsYUFBYXBFLGVBQWVxRSxZQUFZO1FBRTlDLElBQUlELFlBQVk7WUFDZCxNQUFNLEVBQUUxRCxHQUFHLEVBQUUsR0FBR3hCLFNBQ1ZHLE9BQU9XLGVBQWVXLE9BQU8sSUFDN0JPLG9CQUFvQm5DLEtBQUtVLGlCQUN6QlIsaUJBQWlCSSxNQUNqQjhCLGdCQUFnQkQsbUJBQW9CLEdBQUc7WUFFN0NSLElBQUl1QixPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUVoRCxlQUFlLHNDQUFzQyxFQUFFa0MsY0FBYyx5QkFBeUIsQ0FBQztZQUVuSE0sNkJBQTZCO1FBQy9CO0lBQ0Y7SUFFQSxPQUFPQTtBQUNUIn0=
@@ -19,10 +19,10 @@ _export(exports, {
19
19
  const _necessary = require("necessary");
20
20
  const _continuation = require("../utilities/continuation");
21
21
  const { first, filter, compress } = _necessary.arrayUtilities;
22
- function verifyFileContexts(fileContexts, verifiedFileContexts, back, forward) {
23
- return (0, _continuation.resolve)(fileContexts, verifiedFileContexts, (fileContext, back, forward)=>{
24
- return fileContext.verify(back, forward);
25
- }, back, forward);
22
+ function verifyFileContexts(fileContexts, verifiedFileContexts, forward, back) {
23
+ return (0, _continuation.resolve)(fileContexts, verifiedFileContexts, (fileContext, forward, back)=>{
24
+ return fileContext.verify(forward, back);
25
+ }, forward, back);
26
26
  }
27
27
  function verifyTypePrefixes(typePrefixes, releaseContext) {
28
28
  let typePrefixesVerify = true;
@@ -50,4 +50,4 @@ function verifyTypePrefixes(typePrefixes, releaseContext) {
50
50
  return typePrefixesVerify;
51
51
  }
52
52
 
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmVyaWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5cbmNvbnN0IHsgZmlyc3QsIGZpbHRlciwgY29tcHJlc3MgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5RmlsZUNvbnRleHRzKGZpbGVDb250ZXh0cywgdmVyaWZpZWRGaWxlQ29udGV4dHMsIGJhY2ssIGZvcndhcmQpIHtcbiAgcmV0dXJuIHJlc29sdmUoZmlsZUNvbnRleHRzLCB2ZXJpZmllZEZpbGVDb250ZXh0cywgKGZpbGVDb250ZXh0LCBiYWNrLCBmb3J3YXJkKSA9PiB7XG4gICAgcmV0dXJuIGZpbGVDb250ZXh0LnZlcmlmeShiYWNrLCBmb3J3YXJkKTtcbiAgfSwgYmFjaywgZm9yd2FyZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlUeXBlUHJlZml4ZXModHlwZVByZWZpeGVzLCByZWxlYXNlQ29udGV4dCkge1xuICBsZXQgdHlwZVByZWZpeGVzVmVyaWZ5ID0gdHJ1ZTtcblxuICBjb25zdCB0eXBlUHJlZml4ZXNMZW5ndGggPSB0eXBlUHJlZml4ZXMubGVuZ3RoLFxuICAgICAgICBjb21wcmVzc2VkVHlwZVByZWZpeGVzID0gWyAgLy8vXG4gICAgICAgICAgLi4udHlwZVByZWZpeGVzLFxuICAgICAgICBdO1xuXG4gIGNvbXByZXNzKGNvbXByZXNzZWRUeXBlUHJlZml4ZXMsICh0eXBlUHJlZml4QSwgdHlwZVByZWZpeEIpID0+IHtcbiAgICBjb25zdCB0eXBlUHJlZml4QU5hbWUgPSB0eXBlUHJlZml4QS5nZXROYW1lKCksXG4gICAgICAgICAgdHlwZVByZWZpeEJOYW1lID0gdHlwZVByZWZpeEIuZ2V0TmFtZSgpO1xuXG4gICAgaWYgKHR5cGVQcmVmaXhBTmFtZSAhPT0gdHlwZVByZWZpeEJOYW1lKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGNvbXByZXNzVHlwZVByZWZpeGVzTGVuZ3RoID0gY29tcHJlc3NlZFR5cGVQcmVmaXhlcy5sZW5ndGg7XG5cbiAgaWYgKHR5cGVQcmVmaXhlc0xlbmd0aCA+IGNvbXByZXNzVHlwZVByZWZpeGVzTGVuZ3RoKSB7XG4gICAgZmlsdGVyKGNvbXByZXNzZWRUeXBlUHJlZml4ZXMsICh0eXBlUHJlZml4KSA9PiB7XG4gICAgICBjb25zdCB0eXBlUHJlZml4ZXNJbmNsdWRlc1R5cGVQcmVmaXggPSB0eXBlUHJlZml4ZXMuaW5jbHVkZXModHlwZVByZWZpeCk7XG5cbiAgICAgIGlmICghdHlwZVByZWZpeGVzSW5jbHVkZXNUeXBlUHJlZml4KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZmlyc3RUeXBlUHJlZml4ID0gZmlyc3QodHlwZVByZWZpeGVzKSxcbiAgICAgICAgICB0eXBlUHJlZml4ID0gZmlyc3RUeXBlUHJlZml4LCAvLy9cbiAgICAgICAgICB0eXBlUHJlZml4U3RyaW5nID0gdHlwZVByZWZpeC5nZXRTdHJpbmcoKTtcblxuICAgIHJlbGVhc2VDb250ZXh0LmluZm8oYFRoZSAnJHt0eXBlUHJlZml4U3RyaW5nfScgdHlwZSBwcmVmaXggaXMgZHVwbGljYXRlZC5gKVxuXG4gICAgdHlwZVByZWZpeGVzVmVyaWZ5ID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHlwZVByZWZpeGVzVmVyaWZ5O1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeUZpbGVDb250ZXh0cyIsInZlcmlmeVR5cGVQcmVmaXhlcyIsImZpcnN0IiwiZmlsdGVyIiwiY29tcHJlc3MiLCJhcnJheVV0aWxpdGllcyIsImZpbGVDb250ZXh0cyIsInZlcmlmaWVkRmlsZUNvbnRleHRzIiwiYmFjayIsImZvcndhcmQiLCJyZXNvbHZlIiwiZmlsZUNvbnRleHQiLCJ2ZXJpZnkiLCJ0eXBlUHJlZml4ZXMiLCJyZWxlYXNlQ29udGV4dCIsInR5cGVQcmVmaXhlc1ZlcmlmeSIsInR5cGVQcmVmaXhlc0xlbmd0aCIsImxlbmd0aCIsImNvbXByZXNzZWRUeXBlUHJlZml4ZXMiLCJ0eXBlUHJlZml4QSIsInR5cGVQcmVmaXhCIiwidHlwZVByZWZpeEFOYW1lIiwiZ2V0TmFtZSIsInR5cGVQcmVmaXhCTmFtZSIsImNvbXByZXNzVHlwZVByZWZpeGVzTGVuZ3RoIiwidHlwZVByZWZpeCIsInR5cGVQcmVmaXhlc0luY2x1ZGVzVHlwZVByZWZpeCIsImluY2x1ZGVzIiwiZmlyc3RUeXBlUHJlZml4IiwidHlwZVByZWZpeFN0cmluZyIsImdldFN0cmluZyIsImluZm8iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQVFnQkE7ZUFBQUE7O1FBTUFDO2VBQUFBOzs7MkJBWmU7OEJBRVA7QUFFeEIsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFFLEdBQUdDLHlCQUFjO0FBRTNDLFNBQVNMLG1CQUFtQk0sWUFBWSxFQUFFQyxvQkFBb0IsRUFBRUMsSUFBSSxFQUFFQyxPQUFPO0lBQ2xGLE9BQU9DLElBQUFBLHFCQUFPLEVBQUNKLGNBQWNDLHNCQUFzQixDQUFDSSxhQUFhSCxNQUFNQztRQUNyRSxPQUFPRSxZQUFZQyxNQUFNLENBQUNKLE1BQU1DO0lBQ2xDLEdBQUdELE1BQU1DO0FBQ1g7QUFFTyxTQUFTUixtQkFBbUJZLFlBQVksRUFBRUMsY0FBYztJQUM3RCxJQUFJQyxxQkFBcUI7SUFFekIsTUFBTUMscUJBQXFCSCxhQUFhSSxNQUFNLEVBQ3hDQyx5QkFBeUI7V0FDcEJMO0tBQ0o7SUFFUFQsU0FBU2Msd0JBQXdCLENBQUNDLGFBQWFDO1FBQzdDLE1BQU1DLGtCQUFrQkYsWUFBWUcsT0FBTyxJQUNyQ0Msa0JBQWtCSCxZQUFZRSxPQUFPO1FBRTNDLElBQUlELG9CQUFvQkUsaUJBQWlCO1lBQ3ZDLE9BQU87UUFDVDtJQUNGO0lBRUEsTUFBTUMsNkJBQTZCTix1QkFBdUJELE1BQU07SUFFaEUsSUFBSUQscUJBQXFCUSw0QkFBNEI7UUFDbkRyQixPQUFPZSx3QkFBd0IsQ0FBQ087WUFDOUIsTUFBTUMsaUNBQWlDYixhQUFhYyxRQUFRLENBQUNGO1lBRTdELElBQUksQ0FBQ0MsZ0NBQWdDO2dCQUNuQyxPQUFPO1lBQ1Q7UUFDRjtRQUVBLE1BQU1FLGtCQUFrQjFCLE1BQU1XLGVBQ3hCWSxhQUFhRyxpQkFDYkMsbUJBQW1CSixXQUFXSyxTQUFTO1FBRTdDaEIsZUFBZWlCLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRUYsaUJBQWlCLDRCQUE0QixDQUFDO1FBRTFFZCxxQkFBcUI7SUFDdkI7SUFFQSxPQUFPQTtBQUNUIn0=
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmVyaWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5cbmNvbnN0IHsgZmlyc3QsIGZpbHRlciwgY29tcHJlc3MgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5RmlsZUNvbnRleHRzKGZpbGVDb250ZXh0cywgdmVyaWZpZWRGaWxlQ29udGV4dHMsIGZvcndhcmQsIGJhY2spIHtcbiAgcmV0dXJuIHJlc29sdmUoZmlsZUNvbnRleHRzLCB2ZXJpZmllZEZpbGVDb250ZXh0cywgKGZpbGVDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgcmV0dXJuIGZpbGVDb250ZXh0LnZlcmlmeShmb3J3YXJkLCBiYWNrKTtcbiAgfSwgZm9yd2FyZCwgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlUeXBlUHJlZml4ZXModHlwZVByZWZpeGVzLCByZWxlYXNlQ29udGV4dCkge1xuICBsZXQgdHlwZVByZWZpeGVzVmVyaWZ5ID0gdHJ1ZTtcblxuICBjb25zdCB0eXBlUHJlZml4ZXNMZW5ndGggPSB0eXBlUHJlZml4ZXMubGVuZ3RoLFxuICAgICAgICBjb21wcmVzc2VkVHlwZVByZWZpeGVzID0gWyAgLy8vXG4gICAgICAgICAgLi4udHlwZVByZWZpeGVzLFxuICAgICAgICBdO1xuXG4gIGNvbXByZXNzKGNvbXByZXNzZWRUeXBlUHJlZml4ZXMsICh0eXBlUHJlZml4QSwgdHlwZVByZWZpeEIpID0+IHtcbiAgICBjb25zdCB0eXBlUHJlZml4QU5hbWUgPSB0eXBlUHJlZml4QS5nZXROYW1lKCksXG4gICAgICAgICAgdHlwZVByZWZpeEJOYW1lID0gdHlwZVByZWZpeEIuZ2V0TmFtZSgpO1xuXG4gICAgaWYgKHR5cGVQcmVmaXhBTmFtZSAhPT0gdHlwZVByZWZpeEJOYW1lKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGNvbXByZXNzVHlwZVByZWZpeGVzTGVuZ3RoID0gY29tcHJlc3NlZFR5cGVQcmVmaXhlcy5sZW5ndGg7XG5cbiAgaWYgKHR5cGVQcmVmaXhlc0xlbmd0aCA+IGNvbXByZXNzVHlwZVByZWZpeGVzTGVuZ3RoKSB7XG4gICAgZmlsdGVyKGNvbXByZXNzZWRUeXBlUHJlZml4ZXMsICh0eXBlUHJlZml4KSA9PiB7XG4gICAgICBjb25zdCB0eXBlUHJlZml4ZXNJbmNsdWRlc1R5cGVQcmVmaXggPSB0eXBlUHJlZml4ZXMuaW5jbHVkZXModHlwZVByZWZpeCk7XG5cbiAgICAgIGlmICghdHlwZVByZWZpeGVzSW5jbHVkZXNUeXBlUHJlZml4KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZmlyc3RUeXBlUHJlZml4ID0gZmlyc3QodHlwZVByZWZpeGVzKSxcbiAgICAgICAgICB0eXBlUHJlZml4ID0gZmlyc3RUeXBlUHJlZml4LCAvLy9cbiAgICAgICAgICB0eXBlUHJlZml4U3RyaW5nID0gdHlwZVByZWZpeC5nZXRTdHJpbmcoKTtcblxuICAgIHJlbGVhc2VDb250ZXh0LmluZm8oYFRoZSAnJHt0eXBlUHJlZml4U3RyaW5nfScgdHlwZSBwcmVmaXggaXMgZHVwbGljYXRlZC5gKVxuXG4gICAgdHlwZVByZWZpeGVzVmVyaWZ5ID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHlwZVByZWZpeGVzVmVyaWZ5O1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeUZpbGVDb250ZXh0cyIsInZlcmlmeVR5cGVQcmVmaXhlcyIsImZpcnN0IiwiZmlsdGVyIiwiY29tcHJlc3MiLCJhcnJheVV0aWxpdGllcyIsImZpbGVDb250ZXh0cyIsInZlcmlmaWVkRmlsZUNvbnRleHRzIiwiZm9yd2FyZCIsImJhY2siLCJyZXNvbHZlIiwiZmlsZUNvbnRleHQiLCJ2ZXJpZnkiLCJ0eXBlUHJlZml4ZXMiLCJyZWxlYXNlQ29udGV4dCIsInR5cGVQcmVmaXhlc1ZlcmlmeSIsInR5cGVQcmVmaXhlc0xlbmd0aCIsImxlbmd0aCIsImNvbXByZXNzZWRUeXBlUHJlZml4ZXMiLCJ0eXBlUHJlZml4QSIsInR5cGVQcmVmaXhCIiwidHlwZVByZWZpeEFOYW1lIiwiZ2V0TmFtZSIsInR5cGVQcmVmaXhCTmFtZSIsImNvbXByZXNzVHlwZVByZWZpeGVzTGVuZ3RoIiwidHlwZVByZWZpeCIsInR5cGVQcmVmaXhlc0luY2x1ZGVzVHlwZVByZWZpeCIsImluY2x1ZGVzIiwiZmlyc3RUeXBlUHJlZml4IiwidHlwZVByZWZpeFN0cmluZyIsImdldFN0cmluZyIsImluZm8iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQVFnQkE7ZUFBQUE7O1FBTUFDO2VBQUFBOzs7MkJBWmU7OEJBRVA7QUFFeEIsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFFLEdBQUdDLHlCQUFjO0FBRTNDLFNBQVNMLG1CQUFtQk0sWUFBWSxFQUFFQyxvQkFBb0IsRUFBRUMsT0FBTyxFQUFFQyxJQUFJO0lBQ2xGLE9BQU9DLElBQUFBLHFCQUFPLEVBQUNKLGNBQWNDLHNCQUFzQixDQUFDSSxhQUFhSCxTQUFTQztRQUN4RSxPQUFPRSxZQUFZQyxNQUFNLENBQUNKLFNBQVNDO0lBQ3JDLEdBQUdELFNBQVNDO0FBQ2Q7QUFFTyxTQUFTUixtQkFBbUJZLFlBQVksRUFBRUMsY0FBYztJQUM3RCxJQUFJQyxxQkFBcUI7SUFFekIsTUFBTUMscUJBQXFCSCxhQUFhSSxNQUFNLEVBQ3hDQyx5QkFBeUI7V0FDcEJMO0tBQ0o7SUFFUFQsU0FBU2Msd0JBQXdCLENBQUNDLGFBQWFDO1FBQzdDLE1BQU1DLGtCQUFrQkYsWUFBWUcsT0FBTyxJQUNyQ0Msa0JBQWtCSCxZQUFZRSxPQUFPO1FBRTNDLElBQUlELG9CQUFvQkUsaUJBQWlCO1lBQ3ZDLE9BQU87UUFDVDtJQUNGO0lBRUEsTUFBTUMsNkJBQTZCTix1QkFBdUJELE1BQU07SUFFaEUsSUFBSUQscUJBQXFCUSw0QkFBNEI7UUFDbkRyQixPQUFPZSx3QkFBd0IsQ0FBQ087WUFDOUIsTUFBTUMsaUNBQWlDYixhQUFhYyxRQUFRLENBQUNGO1lBRTdELElBQUksQ0FBQ0MsZ0NBQWdDO2dCQUNuQyxPQUFPO1lBQ1Q7UUFDRjtRQUVBLE1BQU1FLGtCQUFrQjFCLE1BQU1XLGVBQ3hCWSxhQUFhRyxpQkFDYkMsbUJBQW1CSixXQUFXSyxTQUFTO1FBRTdDaEIsZUFBZWlCLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRUYsaUJBQWlCLDRCQUE0QixDQUFDO1FBRTFFZCxxQkFBcUI7SUFDdkI7SUFFQSxPQUFPQTtBQUNUIn0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-languages",
3
3
  "author": "James Smith",
4
- "version": "3.0.29",
4
+ "version": "3.0.30",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-languages",
7
7
  "description": "Occam's common language functionality.",
@@ -73,7 +73,7 @@ export default class FileContext extends Context {
73
73
  return string;
74
74
  }
75
75
 
76
- break(node, breakPoint, back, forward) {
76
+ break(node, breakPoint, forward, back) {
77
77
  const filePath = this.filePath,
78
78
  releaseContext = this.getReleaseContext();
79
79
 
@@ -81,10 +81,10 @@ export default class FileContext extends Context {
81
81
  breakPoint = BreakPoint.fromFilePathNodeAndTokens(filePath, node, this.tokens);
82
82
  }
83
83
 
84
- return releaseContext.break(breakPoint, back, forward);
84
+ return releaseContext.break(breakPoint, forward, back);
85
85
  }
86
86
 
87
- verify(back, forward) {
87
+ verify(forward, back) {
88
88
  if (this.node === null) {
89
89
  this.warning(`Unable to verify the '${this.filePath}' file because it cannot be parsed.`);
90
90
 
@@ -95,13 +95,13 @@ export default class FileContext extends Context {
95
95
 
96
96
  this.clear();
97
97
 
98
- return this.verifyFile(back, () => {
98
+ return this.verifyFile((back) => {
99
99
  this.complete();
100
100
 
101
101
  this.info(`...verified the '${this.filePath}' file.`);
102
102
 
103
- return forward();
104
- });
103
+ return forward(back);
104
+ }, back);
105
105
  }
106
106
 
107
107
  initialise() {
@@ -464,7 +464,7 @@ export default class ReleaseContext {
464
464
  this.initialised = true;
465
465
  }
466
466
 
467
- break(breakPoint, back, forward) {
467
+ break(breakPoint, forward, back) {
468
468
  const level = TRACE_LEVEL,
469
469
  message = BREAK_MESSAGE,
470
470
  filePath = breakPoint.getFilePath(),
@@ -474,10 +474,10 @@ export default class ReleaseContext {
474
474
 
475
475
  const context = this; ///
476
476
 
477
- return this.callback(breakPoint, context, back, forward);
477
+ return this.callback(breakPoint, context, forward, back);
478
478
  }
479
479
 
480
- verify(back, forward) {
480
+ verify(forward, back) {
481
481
  const typePrefixes = this.getTypePrefixes(),
482
482
  releaseContext = this, ///
483
483
  typePrefixesVerify = verifyTypePrefixes(typePrefixes, releaseContext);
@@ -488,13 +488,13 @@ export default class ReleaseContext {
488
488
 
489
489
  const fileContexts = [];
490
490
 
491
- return verifyFileContexts(this.fileContexts, fileContexts, back, () => {
491
+ return verifyFileContexts(this.fileContexts, fileContexts, (back) => {
492
492
  this.fileContexts = fileContexts; ///
493
493
 
494
494
  this.verifies = true;
495
495
 
496
- return forward();
497
- });
496
+ return forward(back);
497
+ }, back);
498
498
  }
499
499
 
500
500
  toJSON() {
package/src/context.js CHANGED
@@ -100,7 +100,7 @@ export default class Context {
100
100
  releaseContext.writeToLog(level, message);
101
101
  }
102
102
 
103
- break(node, breakPoint, back, forward) { return this.context.break(node, breakPoint, back, forward); }
103
+ break(node, breakPoint, forward, bcak) { return this.context.break(node, breakPoint, forward, bcak); }
104
104
 
105
105
  static fromNothing(Class, ...remainingArguments) {
106
106
  let context = remainingArguments.pop();
package/src/element.js CHANGED
@@ -50,12 +50,12 @@ export default class Element {
50
50
  this.context = context;
51
51
  }
52
52
 
53
- break(context, back, forward) {
54
- return context.break(this.node, this.breakPoint, back, (breakPoint) => {
53
+ break(context, forward, back) {
54
+ return context.break(this.node, this.breakPoint, (breakPoint, back) => {
55
55
  this.breakPoint = breakPoint;
56
56
 
57
- return forward();
58
- });
57
+ return forward(back);
58
+ }, back);
59
59
  }
60
60
 
61
61
  matchNode(node) { return this.node.match(node); }
@@ -5,10 +5,10 @@ import { nonTerminalNodeQuery } from "../utilities/pass";
5
5
 
6
6
  export default class ContinuationPass {
7
7
  run(node, ...remainingArguments) {
8
- const forward = remainingArguments.pop(),
9
- back = remainingArguments.pop();
8
+ const back = remainingArguments.pop(),
9
+ forward = remainingArguments.pop();
10
10
 
11
- return this.visitNode(node, ...remainingArguments, back, forward);
11
+ return this.visitNode(node, ...remainingArguments, forward, back);
12
12
  }
13
13
 
14
14
  descend(childNodes, ...remainingArguments) {
@@ -17,40 +17,40 @@ export default class ContinuationPass {
17
17
 
18
18
  return every(childNodes, (childNode, ...remainingArguments) => {
19
19
  const index = remainingArguments.pop(),
20
- forward = remainingArguments.pop(),
21
20
  back = remainingArguments.pop(),
21
+ forward = remainingArguments.pop(),
22
22
  node = childNode; ///
23
23
 
24
- return this.visitNode(node, ...remainingArguments, back, forward);
25
- }, ...remainingArguments, back, forward);
24
+ return this.visitNode(node, ...remainingArguments, forward, back);
25
+ }, ...remainingArguments, forward, back);
26
26
  }
27
27
 
28
28
  visitNode(node, ...remainingArguments) {
29
- const forward = remainingArguments.pop(),
30
- back = remainingArguments.pop(),
29
+ const back = remainingArguments.pop(),
30
+ forward = remainingArguments.pop(),
31
31
  nodeTerminalNode = node.isTerminalNode();
32
32
 
33
33
  if (nodeTerminalNode) {
34
34
  const terminalNode = node; ///
35
35
 
36
- return this.visitTerminalNode(terminalNode, ...remainingArguments, back, forward);
36
+ return this.visitTerminalNode(terminalNode, ...remainingArguments, forward, back);
37
37
  }
38
38
 
39
39
  const nonTerminalNode = node; ///
40
40
 
41
- return this.visitNonTerminalNode(nonTerminalNode, ...remainingArguments, back, forward);
41
+ return this.visitNonTerminalNode(nonTerminalNode, ...remainingArguments, forward, back);
42
42
  }
43
43
 
44
44
  visitTerminalNode(terminalNode, ...remainingArguments) {
45
- const forward = remainingArguments.pop(),
46
- back = remainingArguments.pop();
45
+ const back = remainingArguments.pop(),
46
+ forward = remainingArguments.pop();
47
47
 
48
- return forward(...remainingArguments);
48
+ return forward(...remainingArguments, back);
49
49
  }
50
50
 
51
51
  visitNonTerminalNode(nonTerminalNode, ...remainingArguments) {
52
- const forward = remainingArguments.pop(),
53
- back = remainingArguments.pop();
52
+ const back = remainingArguments.pop(),
53
+ forward = remainingArguments.pop();
54
54
 
55
55
  let { maps } = this.constructor;
56
56
 
@@ -69,7 +69,7 @@ export default class ContinuationPass {
69
69
  if (map !== null) {
70
70
  const { run } = map;
71
71
 
72
- return run(node, ...remainingArguments, back, forward);
72
+ return run(node, ...remainingArguments, forward, back);
73
73
  }
74
74
 
75
75
  node = nonTerminalNode; ///
@@ -82,6 +82,6 @@ export default class ContinuationPass {
82
82
 
83
83
  const childNodes = nonTerminalNode.getChildNodes();
84
84
 
85
- return this.descend(childNodes, ...remainingArguments, back, forward);
85
+ return this.descend(childNodes, ...remainingArguments, forward, back);
86
86
  }
87
87
  }
@@ -5,15 +5,15 @@ import { nonTerminalNodeQuery, areChildNodesCongruent } from "../utilities/pass"
5
5
 
6
6
  export default class ContinuationZipPass {
7
7
  run(generalNode, specificNode, ...remainingArguments) {
8
- const forward = remainingArguments.pop(),
9
- back = remainingArguments.pop();
8
+ const back = remainingArguments.pop(),
9
+ forward = remainingArguments.pop();
10
10
 
11
- return this.visitNode(generalNode, specificNode, ...remainingArguments, back, forward);
11
+ return this.visitNode(generalNode, specificNode, ...remainingArguments, forward, back);
12
12
  }
13
13
 
14
14
  descend(generalChildNodes, specificChildNodes, ...remainingArguments) {
15
- const forward = remainingArguments.pop(),
16
- back = remainingArguments.pop(),
15
+ const back = remainingArguments.pop(),
16
+ forward = remainingArguments.pop(),
17
17
  childNodesCongruent = areChildNodesCongruent(generalChildNodes, specificChildNodes);
18
18
 
19
19
  if (!childNodesCongruent) {
@@ -22,18 +22,18 @@ export default class ContinuationZipPass {
22
22
 
23
23
  return match(generalChildNodes, specificChildNodes, (generalChildNode, specificChildNode, ...remainingArguments) => {
24
24
  const index = remainingArguments.pop(),
25
- forward = remainingArguments.pop(),
26
25
  back = remainingArguments.pop(),
26
+ forward = remainingArguments.pop(),
27
27
  generalNode = generalChildNode, ///
28
28
  specificNode = specificChildNode; ///
29
29
 
30
- return this.visitNode(generalNode, specificNode, ...remainingArguments, back, forward);
31
- }, ...remainingArguments, back, forward);
30
+ return this.visitNode(generalNode, specificNode, ...remainingArguments, forward, back);
31
+ }, ...remainingArguments, forward, back);
32
32
  }
33
33
 
34
34
  visitNode(generalNode, specificNode, ...remainingArguments) {
35
- const forward = remainingArguments.pop(),
36
- back = remainingArguments.pop(),
35
+ const back = remainingArguments.pop(),
36
+ forward = remainingArguments.pop(),
37
37
  generalNodeTerminalNode = generalNode.isTerminalNode(),
38
38
  specificNodeTerminalNode = specificNode.isTerminalNode(),
39
39
  generalNodeNonTerminalNode = generalNode.isNonTerminalNode(),
@@ -43,29 +43,29 @@ export default class ContinuationZipPass {
43
43
  const generalTerminalNode = generalNode, ///
44
44
  specificTerminalNode = specificNode; ///
45
45
 
46
- return this.visitTerminalNode(generalTerminalNode, specificTerminalNode, ...remainingArguments, back, forward);
46
+ return this.visitTerminalNode(generalTerminalNode, specificTerminalNode, ...remainingArguments, forward, back);
47
47
  }
48
48
 
49
49
  if (generalNodeNonTerminalNode && specificNodeNonTerminalNode) {
50
50
  const generalNonTerminalNode = generalNode, ///
51
- specificNonTerminalNode = specificNode; ///
51
+ specificNonTerminalNode = specificNode; ///
52
52
 
53
- return this.visitNonTerminalNode(generalNonTerminalNode, specificNonTerminalNode, ...remainingArguments, back, forward);
53
+ return this.visitNonTerminalNode(generalNonTerminalNode, specificNonTerminalNode, ...remainingArguments, forward, back);
54
54
  }
55
55
 
56
56
  return back();
57
57
  }
58
58
 
59
59
  visitTerminalNode(generalTerminalNode, specificTerminalNode, ...remainingArguments) { ///
60
- const forward = remainingArguments.pop(),
61
- back = remainingArguments.pop();
60
+ const back = remainingArguments.pop(),
61
+ forward = remainingArguments.pop();
62
62
 
63
- return forward(...remainingArguments);
63
+ return forward(...remainingArguments, back);
64
64
  }
65
65
 
66
66
  visitNonTerminalNode(generalNonTerminalNode, specificNonTerminalNode, ...remainingArguments) {
67
- const forward = remainingArguments.pop(),
68
- back = remainingArguments.pop();
67
+ const back = remainingArguments.pop(),
68
+ forward = remainingArguments.pop();
69
69
 
70
70
  let { maps } = this.constructor;
71
71
 
@@ -86,7 +86,7 @@ export default class ContinuationZipPass {
86
86
  if (map !== null) {
87
87
  const { run } = map;
88
88
 
89
- return run(generalNode, specificNode, ...remainingArguments, back, forward);
89
+ return run(generalNode, specificNode, ...remainingArguments, forward, back);
90
90
  }
91
91
 
92
92
  generalNode = generalNonTerminalNode; ///
@@ -109,6 +109,6 @@ export default class ContinuationZipPass {
109
109
  const generalChildNodes = generalNonTerminalNode.getChildNodes(), ///
110
110
  specificChildNodes = specificNonTerminalNode.getChildNodes(); ///
111
111
 
112
- return this.descend(generalChildNodes, specificChildNodes, ...remainingArguments, back, forward);
112
+ return this.descend(generalChildNodes, specificChildNodes, ...remainingArguments, forward, back);
113
113
  }
114
114
  }
@@ -8,11 +8,11 @@ export function breakable(innerFunction) {
8
8
  back = remainingArguments.pop(),
9
9
  context = remainingArguments.pop();
10
10
 
11
- return this.break(context, back, () => {
11
+ return this.break(context, (back) => {
12
12
  setImmediate(() => {
13
- return innerFunction.call(this, ...remainingArguments, context, back, forward);
13
+ return innerFunction.call(this, ...remainingArguments, context, forward, back);
14
14
  });
15
- });
15
+ }, back);
16
16
  };
17
17
  }
18
18