occam-parsers 23.3.13 → 23.3.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -88,7 +88,7 @@ regularExpression ::= [regular-expression] ;
88
88
 
89
89
  stringLiteral ::= [string-literal] ;
90
90
 
91
- precedence ::= "(" [number]? ")" ;
91
+ precedence ::= "(" [integer]? ")" ;
92
92
 
93
93
  endOfLine ::= "<END_OF_LINE>" ;
94
94
 
package/lib/bnf/bnf.js CHANGED
@@ -72,7 +72,7 @@ const bnf = `
72
72
 
73
73
  stringLiteral ::= [string-literal] ;
74
74
 
75
- precedence ::= "(" [number]? ")" ;
75
+ precedence ::= "(" [integer]? ")" ;
76
76
 
77
77
  endOfLine ::= "<END_OF_LINE>" ;
78
78
 
@@ -105,4 +105,4 @@ const bnf = `
105
105
  `;
106
106
  const _default = bnf;
107
107
 
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ibmYvYm5mLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICAgIGRvY3VtZW50ICAgICAgICAgICAgICAgICA6Oj0gICggcnVsZSB8IGVycm9yICkrIDtcblxuICAgICAgcnVsZSAgICAgICAgICAgICAgICAgICAgIDo6PSAgbmFtZSBvcGFjaXR5TW9kaWZpZXI/IFwiOjo9XCIgZGVmaW5pdGlvbnMgXCI7XCIgO1xuXG4gICAgICBuYW1lICAgICAgICAgICAgICAgICAgICAgOjo9ICBbbmFtZV0gO1xuXG4gICAgICBkZWZpbml0aW9ucyAgICAgICAgICAgICAgOjo9ICBkZWZpbml0aW9uICggXCJ8XCIgZGVmaW5pdGlvbiApKiA7XG5cbiAgICAgIGRlZmluaXRpb24gICAgICAgICAgICAgICA6Oj0gIHBhcnQrIHByZWNlZGVuY2U/IDtcbiBcbiAgICAgIHBhcnQgICAgICAgICAgICAgICAgICAgICA6Oj0gIG5vblRlcm1pbmFsUGFydCBxdWFudGlmaWVyKlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB0ZXJtaW5hbFBhcnQgcXVhbnRpZmllcipcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICBub25UZXJtaW5hbFBhcnQgICAgICAgICAgOjo9ICBjb21taXR0ZWRQYXJ0XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGlzb2xhdGVkUGFydFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBjaG9pY2VPZlBhcnRzXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHNlcXVlbmNlT2ZQYXJ0c1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBydWxlTmFtZSBjb250aW51YXRpb25Nb2RpZmllcj9cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICB0ZXJtaW5hbFBhcnQgICAgICAgICAgICAgOjo9ICBzaWduaWZpY2FudFRva2VuVHlwZVxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHJlZ3VsYXJFeHByZXNzaW9uXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBzdHJpbmdMaXRlcmFsXG4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgd2lsZGNhcmRcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBlcHNpbG9uXG4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgZW5kT2ZMaW5lXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG5vV2hpdGVzcGFjZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgIHNlcXVlbmNlT2ZQYXJ0cyAgICAgICAgICA6Oj0gIFwiKFwiIHBhcnQgcGFydCsgXCIpXCIgO1xuXG4gICAgICBjaG9pY2VPZlBhcnRzICAgICAgICAgICAgOjo9ICBcIihcIiBwYXJ0Q2hvaWNlICggXCJ8XCIgcGFydENob2ljZSApKyBcIilcIiA7XG5cbiAgICAgIGNvbW1pdHRlZFBhcnQgICAgICAgICAgICA6Oj0gIFwiXFxgXCIgcGFydCA7XG5cbiAgICAgIGlzb2xhdGVkUGFydCAgICAgICAgICAgICA6Oj0gIFwiKFwiIHBhcnQgXCIpXCIgO1xuXG4gICAgICBwYXJ0Q2hvaWNlICAgICAgICAgICAgICAgOjo9ICBwYXJ0IHByZWNlZGVuY2U/IDtcblxuICAgICAgcnVsZU5hbWUgICAgICAgICAgICAgICAgIDo6PSAgW25hbWVdIDtcblxuICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGUgICAgIDo6PSAgW3R5cGVdIDtcblxuICAgICAgcmVndWxhckV4cHJlc3Npb24gICAgICAgIDo6PSAgW3JlZ3VsYXItZXhwcmVzc2lvbl0gO1xuXG4gICAgICBzdHJpbmdMaXRlcmFsICAgICAgICAgICAgOjo9ICBbc3RyaW5nLWxpdGVyYWxdIDtcblxuICAgICAgcHJlY2VkZW5jZSAgICAgICAgICAgICAgIDo6PSAgXCIoXCIgW251bWJlcl0/IFwiKVwiIDtcbiAgICAgIFxuICAgICAgZW5kT2ZMaW5lICAgICAgICAgICAgICAgIDo6PSAgXCI8RU5EX09GX0xJTkU+XCIgO1xuICAgICAgXG4gICAgICB3aWxkY2FyZCAgICAgICAgICAgICAgICAgOjo9ICBcIi5cIiA7XG5cbiAgICAgIGVwc2lsb24gICAgICAgICAgICAgICAgICA6Oj0gIFwizrVcIiA7XG5cbiAgICAgIG5vV2hpdGVzcGFjZSAgICAgICAgICAgICA6Oj0gIFwiPE5PX1dISVRFU1BBQ0U+XCIgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICBxdWFudGlmaWVyICAgICAgICAgICAgICAgOjo9ICBvcHRpb25hbFF1YW50aWZpZXJcbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9uZU9yTW9yZVF1YW50aWZpZXJcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB6ZXJvT3JNb3JlUXVhbnRpZmllclxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgb3BhY2l0eU1vZGlmaWVyICAgICAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+KCBcIi5cIiB8IFwiLi5cIiApO1xuICAgICAgXG4gICAgICBjb250aW51YXRpb25Nb2RpZmllciAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIi4uLlwiIDtcblxuICAgICAgb3B0aW9uYWxRdWFudGlmaWVyICAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCI/XCIgO1xuXG4gICAgICBvbmVPck1vcmVRdWFudGlmaWVyICAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIitcIiA7XG5cbiAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiKlwiIDtcblxuICAgICAgZXJyb3IuICAgICAgICAgICAgICAgICAgIDo6PSAgLiA7XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiJdLCJuYW1lcyI6WyJibmYiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWtHQTs7O2VBQUE7OztBQWhHQSxNQUFNQSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4RmIsQ0FBQztNQUVELFdBQWVBIn0=
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ibmYvYm5mLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICAgIGRvY3VtZW50ICAgICAgICAgICAgICAgICA6Oj0gICggcnVsZSB8IGVycm9yICkrIDtcblxuICAgICAgcnVsZSAgICAgICAgICAgICAgICAgICAgIDo6PSAgbmFtZSBvcGFjaXR5TW9kaWZpZXI/IFwiOjo9XCIgZGVmaW5pdGlvbnMgXCI7XCIgO1xuXG4gICAgICBuYW1lICAgICAgICAgICAgICAgICAgICAgOjo9ICBbbmFtZV0gO1xuXG4gICAgICBkZWZpbml0aW9ucyAgICAgICAgICAgICAgOjo9ICBkZWZpbml0aW9uICggXCJ8XCIgZGVmaW5pdGlvbiApKiA7XG5cbiAgICAgIGRlZmluaXRpb24gICAgICAgICAgICAgICA6Oj0gIHBhcnQrIHByZWNlZGVuY2U/IDtcbiBcbiAgICAgIHBhcnQgICAgICAgICAgICAgICAgICAgICA6Oj0gIG5vblRlcm1pbmFsUGFydCBxdWFudGlmaWVyKlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB0ZXJtaW5hbFBhcnQgcXVhbnRpZmllcipcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICBub25UZXJtaW5hbFBhcnQgICAgICAgICAgOjo9ICBjb21taXR0ZWRQYXJ0XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGlzb2xhdGVkUGFydFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBjaG9pY2VPZlBhcnRzXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHNlcXVlbmNlT2ZQYXJ0c1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBydWxlTmFtZSBjb250aW51YXRpb25Nb2RpZmllcj9cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICB0ZXJtaW5hbFBhcnQgICAgICAgICAgICAgOjo9ICBzaWduaWZpY2FudFRva2VuVHlwZVxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHJlZ3VsYXJFeHByZXNzaW9uXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBzdHJpbmdMaXRlcmFsXG4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgd2lsZGNhcmRcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBlcHNpbG9uXG4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgZW5kT2ZMaW5lXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG5vV2hpdGVzcGFjZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgIHNlcXVlbmNlT2ZQYXJ0cyAgICAgICAgICA6Oj0gIFwiKFwiIHBhcnQgcGFydCsgXCIpXCIgO1xuXG4gICAgICBjaG9pY2VPZlBhcnRzICAgICAgICAgICAgOjo9ICBcIihcIiBwYXJ0Q2hvaWNlICggXCJ8XCIgcGFydENob2ljZSApKyBcIilcIiA7XG5cbiAgICAgIGNvbW1pdHRlZFBhcnQgICAgICAgICAgICA6Oj0gIFwiXFxgXCIgcGFydCA7XG5cbiAgICAgIGlzb2xhdGVkUGFydCAgICAgICAgICAgICA6Oj0gIFwiKFwiIHBhcnQgXCIpXCIgO1xuXG4gICAgICBwYXJ0Q2hvaWNlICAgICAgICAgICAgICAgOjo9ICBwYXJ0IHByZWNlZGVuY2U/IDtcblxuICAgICAgcnVsZU5hbWUgICAgICAgICAgICAgICAgIDo6PSAgW25hbWVdIDtcblxuICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGUgICAgIDo6PSAgW3R5cGVdIDtcblxuICAgICAgcmVndWxhckV4cHJlc3Npb24gICAgICAgIDo6PSAgW3JlZ3VsYXItZXhwcmVzc2lvbl0gO1xuXG4gICAgICBzdHJpbmdMaXRlcmFsICAgICAgICAgICAgOjo9ICBbc3RyaW5nLWxpdGVyYWxdIDtcblxuICAgICAgcHJlY2VkZW5jZSAgICAgICAgICAgICAgIDo6PSAgXCIoXCIgW2ludGVnZXJdPyBcIilcIiA7XG4gICAgICBcbiAgICAgIGVuZE9mTGluZSAgICAgICAgICAgICAgICA6Oj0gIFwiPEVORF9PRl9MSU5FPlwiIDtcbiAgICAgIFxuICAgICAgd2lsZGNhcmQgICAgICAgICAgICAgICAgIDo6PSAgXCIuXCIgO1xuXG4gICAgICBlcHNpbG9uICAgICAgICAgICAgICAgICAgOjo9ICBcIs61XCIgO1xuXG4gICAgICBub1doaXRlc3BhY2UgICAgICAgICAgICAgOjo9ICBcIjxOT19XSElURVNQQUNFPlwiIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgcXVhbnRpZmllciAgICAgICAgICAgICAgIDo6PSAgb3B0aW9uYWxRdWFudGlmaWVyXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvbmVPck1vcmVRdWFudGlmaWVyXG4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgemVyb09yTW9yZVF1YW50aWZpZXJcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIG9wYWNpdHlNb2RpZmllciAgICAgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPiggXCIuXCIgfCBcIi4uXCIgKTtcbiAgICAgIFxuICAgICAgY29udGludWF0aW9uTW9kaWZpZXIgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIuLi5cIiA7XG5cbiAgICAgIG9wdGlvbmFsUXVhbnRpZmllciAgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiP1wiIDtcblxuICAgICAgb25lT3JNb3JlUXVhbnRpZmllciAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIrXCIgO1xuXG4gICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllciAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIipcIiA7XG5cbiAgICAgIGVycm9yLiAgICAgICAgICAgICAgICAgICA6Oj0gIC4gO1xuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iXSwibmFtZXMiOlsiYm5mIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFrR0E7OztlQUFBOzs7QUFoR0EsTUFBTUEsTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBOEZiLENBQUM7TUFFRCxXQUFlQSJ9
@@ -18,10 +18,10 @@ function _interop_require_default(obj) {
18
18
  default: obj
19
19
  };
20
20
  }
21
- const { numberType } = _occamlexers.types, { openBracket, closeBracket } = _occamlexers.specialSymbols;
21
+ const { integerType } = _occamlexers.types, { openBracket, closeBracket } = _occamlexers.specialSymbols;
22
22
  class PrecedenceDefinition extends _definition.default {
23
23
  static fromNothing() {
24
- const significantTokenType = numberType, openBracketStringLiteralContent = openBracket, closeBracketStringLiteralContent = closeBracket, openBracketStringLiteralPart = _stringLiteral.default.fromContent(openBracketStringLiteralContent), closeBracketStringLiteralPart = _stringLiteral.default.fromContent(closeBracketStringLiteralContent), numberSignificantTokenTypePart = _significantTokenType.default.fromSignificantTokenType(significantTokenType), optionalNumberSignificantTokenTypePartPart = _optionalPart.default.fromPart(numberSignificantTokenTypePart), parts = [
24
+ const significantTokenType = integerType, openBracketStringLiteralContent = openBracket, closeBracketStringLiteralContent = closeBracket, openBracketStringLiteralPart = _stringLiteral.default.fromContent(openBracketStringLiteralContent), closeBracketStringLiteralPart = _stringLiteral.default.fromContent(closeBracketStringLiteralContent), numberSignificantTokenTypePart = _significantTokenType.default.fromSignificantTokenType(significantTokenType), optionalNumberSignificantTokenTypePartPart = _optionalPart.default.fromPart(numberSignificantTokenTypePart), parts = [
25
25
  openBracketStringLiteralPart,
26
26
  optionalNumberSignificantTokenTypePartPart,
27
27
  closeBracketStringLiteralPart
@@ -30,4 +30,4 @@ class PrecedenceDefinition extends _definition.default {
30
30
  }
31
31
  }
32
32
 
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWZpbml0aW9uL3ByZWNlZGVuY2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzLCBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IFN0cmluZ0xpdGVyYWxQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3N0cmluZ0xpdGVyYWxcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuY29uc3QgeyBudW1iZXJUeXBlIH0gPSB0eXBlcyxcbiAgICAgIHsgb3BlbkJyYWNrZXQsIGNsb3NlQnJhY2tldCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByZWNlZGVuY2VEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZSA9IG51bWJlclR5cGUsICAvLy9cbiAgICAgICAgICBvcGVuQnJhY2tldFN0cmluZ0xpdGVyYWxDb250ZW50ID0gb3BlbkJyYWNrZXQsIC8vL1xuICAgICAgICAgIGNsb3NlQnJhY2tldFN0cmluZ0xpdGVyYWxDb250ZW50ID0gY2xvc2VCcmFja2V0LCAvLy9cbiAgICAgICAgICBvcGVuQnJhY2tldFN0cmluZ0xpdGVyYWxQYXJ0ID0gU3RyaW5nTGl0ZXJhbFBhcnQuZnJvbUNvbnRlbnQob3BlbkJyYWNrZXRTdHJpbmdMaXRlcmFsQ29udGVudCksXG4gICAgICAgICAgY2xvc2VCcmFja2V0U3RyaW5nTGl0ZXJhbFBhcnQgPSBTdHJpbmdMaXRlcmFsUGFydC5mcm9tQ29udGVudChjbG9zZUJyYWNrZXRTdHJpbmdMaXRlcmFsQ29udGVudCksXG4gICAgICAgICAgbnVtYmVyU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LmZyb21TaWduaWZpY2FudFRva2VuVHlwZShzaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgb3B0aW9uYWxOdW1iZXJTaWduaWZpY2FudFRva2VuVHlwZVBhcnRQYXJ0ID0gT3B0aW9uYWxQYXJ0UGFydC5mcm9tUGFydChudW1iZXJTaWduaWZpY2FudFRva2VuVHlwZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb3BlbkJyYWNrZXRTdHJpbmdMaXRlcmFsUGFydCxcbiAgICAgICAgICAgIG9wdGlvbmFsTnVtYmVyU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0UGFydCxcbiAgICAgICAgICAgIGNsb3NlQnJhY2tldFN0cmluZ0xpdGVyYWxQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBwcmVjZWRlbmNlRGVmaW5pdGlvbiA9IG5ldyBQcmVjZWRlbmNlRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gcHJlY2VkZW5jZURlZmluaXRpb247XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJQcmVjZWRlbmNlRGVmaW5pdGlvbiIsIm51bWJlclR5cGUiLCJ0eXBlcyIsIm9wZW5CcmFja2V0IiwiY2xvc2VCcmFja2V0Iiwic3BlY2lhbFN5bWJvbHMiLCJEZWZpbml0aW9uIiwiZnJvbU5vdGhpbmciLCJzaWduaWZpY2FudFRva2VuVHlwZSIsIm9wZW5CcmFja2V0U3RyaW5nTGl0ZXJhbENvbnRlbnQiLCJjbG9zZUJyYWNrZXRTdHJpbmdMaXRlcmFsQ29udGVudCIsIm9wZW5CcmFja2V0U3RyaW5nTGl0ZXJhbFBhcnQiLCJTdHJpbmdMaXRlcmFsUGFydCIsImZyb21Db250ZW50IiwiY2xvc2VCcmFja2V0U3RyaW5nTGl0ZXJhbFBhcnQiLCJudW1iZXJTaWduaWZpY2FudFRva2VuVHlwZVBhcnQiLCJTaWduaWZpY2FudFRva2VuVHlwZVBhcnQiLCJmcm9tU2lnbmlmaWNhbnRUb2tlblR5cGUiLCJvcHRpb25hbE51bWJlclNpZ25pZmljYW50VG9rZW5UeXBlUGFydFBhcnQiLCJPcHRpb25hbFBhcnRQYXJ0IiwiZnJvbVBhcnQiLCJwYXJ0cyIsInByZWNlZGVuY2UiLCJwcmVjZWRlbmNlRGVmaW5pdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBWUE7OztlQUFxQkE7Ozs2QkFWaUI7bUVBRWY7cUVBQ007c0VBQ0M7NkVBQ087Ozs7OztBQUVyQyxNQUFNLEVBQUVDLFVBQVUsRUFBRSxHQUFHQyxrQkFBSyxFQUN0QixFQUFFQyxXQUFXLEVBQUVDLFlBQVksRUFBRSxHQUFHQywyQkFBYztBQUVyQyxNQUFNTCw2QkFBNkJNLG1CQUFVO0lBQzFELE9BQU9DLGNBQWM7UUFDbkIsTUFBTUMsdUJBQXVCUCxZQUN2QlEsa0NBQWtDTixhQUNsQ08sbUNBQW1DTixjQUNuQ08sK0JBQStCQyxzQkFBaUIsQ0FBQ0MsV0FBVyxDQUFDSixrQ0FDN0RLLGdDQUFnQ0Ysc0JBQWlCLENBQUNDLFdBQVcsQ0FBQ0gsbUNBQzlESyxpQ0FBaUNDLDZCQUF3QixDQUFDQyx3QkFBd0IsQ0FBQ1QsdUJBQ25GVSw2Q0FBNkNDLHFCQUFnQixDQUFDQyxRQUFRLENBQUNMLGlDQUN2RU0sUUFBUTtZQUNOVjtZQUNBTztZQUNBSjtTQUNELEVBQ0RRLGFBQWEsTUFDYkMsdUJBQXVCLElBQUl2QixxQkFBcUJxQixPQUFPQztRQUU3RCxPQUFPQztJQUNUO0FBQ0YifQ==
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWZpbml0aW9uL3ByZWNlZGVuY2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzLCBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IFN0cmluZ0xpdGVyYWxQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3N0cmluZ0xpdGVyYWxcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuY29uc3QgeyBpbnRlZ2VyVHlwZSB9ID0gdHlwZXMsXG4gICAgICB7IG9wZW5CcmFja2V0LCBjbG9zZUJyYWNrZXQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcmVjZWRlbmNlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBpbnRlZ2VyVHlwZSwgIC8vL1xuICAgICAgICAgIG9wZW5CcmFja2V0U3RyaW5nTGl0ZXJhbENvbnRlbnQgPSBvcGVuQnJhY2tldCwgLy8vXG4gICAgICAgICAgY2xvc2VCcmFja2V0U3RyaW5nTGl0ZXJhbENvbnRlbnQgPSBjbG9zZUJyYWNrZXQsIC8vL1xuICAgICAgICAgIG9wZW5CcmFja2V0U3RyaW5nTGl0ZXJhbFBhcnQgPSBTdHJpbmdMaXRlcmFsUGFydC5mcm9tQ29udGVudChvcGVuQnJhY2tldFN0cmluZ0xpdGVyYWxDb250ZW50KSxcbiAgICAgICAgICBjbG9zZUJyYWNrZXRTdHJpbmdMaXRlcmFsUGFydCA9IFN0cmluZ0xpdGVyYWxQYXJ0LmZyb21Db250ZW50KGNsb3NlQnJhY2tldFN0cmluZ0xpdGVyYWxDb250ZW50KSxcbiAgICAgICAgICBudW1iZXJTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgPSBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQuZnJvbVNpZ25pZmljYW50VG9rZW5UeXBlKHNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBvcHRpb25hbE51bWJlclNpZ25pZmljYW50VG9rZW5UeXBlUGFydFBhcnQgPSBPcHRpb25hbFBhcnRQYXJ0LmZyb21QYXJ0KG51bWJlclNpZ25pZmljYW50VG9rZW5UeXBlUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvcGVuQnJhY2tldFN0cmluZ0xpdGVyYWxQYXJ0LFxuICAgICAgICAgICAgb3B0aW9uYWxOdW1iZXJTaWduaWZpY2FudFRva2VuVHlwZVBhcnRQYXJ0LFxuICAgICAgICAgICAgY2xvc2VCcmFja2V0U3RyaW5nTGl0ZXJhbFBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIHByZWNlZGVuY2VEZWZpbml0aW9uID0gbmV3IFByZWNlZGVuY2VEZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBwcmVjZWRlbmNlRGVmaW5pdGlvbjtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlByZWNlZGVuY2VEZWZpbml0aW9uIiwiaW50ZWdlclR5cGUiLCJ0eXBlcyIsIm9wZW5CcmFja2V0IiwiY2xvc2VCcmFja2V0Iiwic3BlY2lhbFN5bWJvbHMiLCJEZWZpbml0aW9uIiwiZnJvbU5vdGhpbmciLCJzaWduaWZpY2FudFRva2VuVHlwZSIsIm9wZW5CcmFja2V0U3RyaW5nTGl0ZXJhbENvbnRlbnQiLCJjbG9zZUJyYWNrZXRTdHJpbmdMaXRlcmFsQ29udGVudCIsIm9wZW5CcmFja2V0U3RyaW5nTGl0ZXJhbFBhcnQiLCJTdHJpbmdMaXRlcmFsUGFydCIsImZyb21Db250ZW50IiwiY2xvc2VCcmFja2V0U3RyaW5nTGl0ZXJhbFBhcnQiLCJudW1iZXJTaWduaWZpY2FudFRva2VuVHlwZVBhcnQiLCJTaWduaWZpY2FudFRva2VuVHlwZVBhcnQiLCJmcm9tU2lnbmlmaWNhbnRUb2tlblR5cGUiLCJvcHRpb25hbE51bWJlclNpZ25pZmljYW50VG9rZW5UeXBlUGFydFBhcnQiLCJPcHRpb25hbFBhcnRQYXJ0IiwiZnJvbVBhcnQiLCJwYXJ0cyIsInByZWNlZGVuY2UiLCJwcmVjZWRlbmNlRGVmaW5pdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBWUE7OztlQUFxQkE7Ozs2QkFWaUI7bUVBRWY7cUVBQ007c0VBQ0M7NkVBQ087Ozs7OztBQUVyQyxNQUFNLEVBQUVDLFdBQVcsRUFBRSxHQUFHQyxrQkFBSyxFQUN2QixFQUFFQyxXQUFXLEVBQUVDLFlBQVksRUFBRSxHQUFHQywyQkFBYztBQUVyQyxNQUFNTCw2QkFBNkJNLG1CQUFVO0lBQzFELE9BQU9DLGNBQWM7UUFDbkIsTUFBTUMsdUJBQXVCUCxhQUN2QlEsa0NBQWtDTixhQUNsQ08sbUNBQW1DTixjQUNuQ08sK0JBQStCQyxzQkFBaUIsQ0FBQ0MsV0FBVyxDQUFDSixrQ0FDN0RLLGdDQUFnQ0Ysc0JBQWlCLENBQUNDLFdBQVcsQ0FBQ0gsbUNBQzlESyxpQ0FBaUNDLDZCQUF3QixDQUFDQyx3QkFBd0IsQ0FBQ1QsdUJBQ25GVSw2Q0FBNkNDLHFCQUFnQixDQUFDQyxRQUFRLENBQUNMLGlDQUN2RU0sUUFBUTtZQUNOVjtZQUNBTztZQUNBSjtTQUNELEVBQ0RRLGFBQWEsTUFDYkMsdUJBQXVCLElBQUl2QixxQkFBcUJxQixPQUFPQztRQUU3RCxPQUFPQztJQUNUO0FBQ0YifQ==
@@ -137,9 +137,10 @@ class NonTerminalNode {
137
137
  }
138
138
  isUnprecedented() {
139
139
  let unprecedented = false;
140
- if (this.precedence !== null) {
141
- unprecedented = this.childNodes.some((childNode)=>{
142
- const childNodeLowerPrecedence = childNode.isLowerPrecedence(this.ruleName, this.precedence);
140
+ if (this.precedence !== null && this.precedence !== Infinity) {
141
+ const length = this.childNodes.length, lastIndex = length - 1, firstIndex = 0, strength = Math.abs(this.precedence), associativity = Math.sign(this.precedence);
142
+ unprecedented = this.childNodes.some((childNode, index)=>{
143
+ const last = index === lastIndex, first = index === firstIndex, childNodeLowerPrecedence = childNode.isLowerPrecedence(associativity, strength, first, last);
143
144
  if (childNodeLowerPrecedence) {
144
145
  return true;
145
146
  }
@@ -147,7 +148,7 @@ class NonTerminalNode {
147
148
  }
148
149
  return unprecedented;
149
150
  }
150
- isLowerPrecedence(ruleName, precedence) {
151
+ isLowerPrecedence(associativity, strength, first, last) {
151
152
  let lowerPrecedence;
152
153
  if (false) {
153
154
  ///
@@ -155,13 +156,23 @@ class NonTerminalNode {
155
156
  lowerPrecedence = false;
156
157
  } else if (this.precedence === Infinity) {
157
158
  lowerPrecedence = this.childNodes.some((childNode)=>{
158
- const childNodeLowerPrecedence = childNode.isLowerPrecedence(ruleName, precedence);
159
+ const childNodeLowerPrecedence = childNode.isLowerPrecedence(associativity, strength, first, last);
159
160
  if (childNodeLowerPrecedence) {
160
161
  return true;
161
162
  }
162
163
  });
163
164
  } else {
164
- lowerPrecedence = this.ruleName === ruleName && this.precedence < precedence;
165
+ const parentStrength = strength, parentAssociativity = associativity; ///
166
+ strength = Math.abs(this.precedence);
167
+ if (false) {
168
+ ///
169
+ } else if (first) {
170
+ lowerPrecedence = parentAssociativity < 0 ? strength < parentStrength : strength <= parentStrength;
171
+ } else if (last) {
172
+ lowerPrecedence = parentAssociativity < 0 ? strength <= parentStrength : strength < parentStrength;
173
+ } else {
174
+ lowerPrecedence = strength < parentStrength;
175
+ }
165
176
  }
166
177
  return lowerPrecedence;
167
178
  }
@@ -235,4 +246,4 @@ function cloneChildNodes(childNodes) {
235
246
  return childNodes;
236
247
  }
237
248
 
238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL25vblRlcm1pbmFsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgbm9kZU1peGlucyBmcm9tIFwiLi4vbWl4aW5zL25vZGVcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS9ub25UZXJtaW5hbE5vZGVcIjtcblxuY29uc3QgeyBtYXRjaCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IG9wYXF1ZTogb3BhcXVlU3BlY2lhbFN5bWJvbCAsIHNlbWlPcGFxdWU6IHNlbWlPcGFxdWVTcGVjaWFsU3ltYm9sIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIHByZWNlZGVuY2UpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzO1xuICAgIHRoaXMub3BhY2l0eSA9IG9wYWNpdHk7XG4gICAgdGhpcy5wcmVjZWRlbmNlID0gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVOYW1lO1xuICB9XG5cbiAgZ2V0UGFyZW50Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnROb2RlO1xuICB9XG5cbiAgZ2V0Q2hpbGROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzO1xuICB9XG5cbiAgZ2V0T3BhY2l0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcGFjaXR5O1xuICB9XG5cbiAgZ2V0UHJlY2VkZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlO1xuICB9XG5cbiAgc2V0UnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gIH1cblxuICBzZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICB9XG5cbiAgc2V0Q2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IDAsXG4gICAgICAgICAgZGVsZXRlQ291bnQgPSBJbmZpbml0eSxcbiAgICAgICAgICBhZGRlZENoaWxkTm9kZXMgPSBjaGlsZE5vZGVzOyAgLy8vXG5cbiAgICB0aGlzLnNwbGljZUNoaWxkTm9kZXMoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQsIGFkZGVkQ2hpbGROb2Rlcyk7XG4gIH1cblxuICBzZXRPcGFjaXR5KG9wYWNpdHkpIHtcbiAgICB0aGlzLm9wYWNpdHkgPSBvcGFjaXR5O1xuICB9XG5cbiAgc2V0UHJlY2VkZW5jZShwcmVjZWRlbmNlKSB7XG4gICAgdGhpcy5wcmVjZWRlbmNlID0gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIG51bGxpZnlQcmVjZWRlbmNlKCkge1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IG51bGw7XG4gIH1cblxuICBpc09wYXF1ZSgpIHtcbiAgICBjb25zdCBvcGFxdWUgPSAodGhpcy5vcGFjaXR5ID09PSBvcGFxdWVTcGVjaWFsU3ltYm9sKTtcblxuICAgIHJldHVybiBvcGFxdWU7XG4gIH1cblxuICBpc1NlbWlPcGFxdWUoKSB7XG4gICAgY29uc3Qgc2VtaU9wYXF1ZSA9ICh0aGlzLm9wYWNpdHkgPT09IHNlbWlPcGFxdWVTcGVjaWFsU3ltYm9sKTtcblxuICAgIHJldHVybiBzZW1pT3BhcXVlO1xuICB9XG5cbiAgaXNUcmFuc3BhcmVudCgpIHtcbiAgICBjb25zdCBzZW1pT3BhcXVlID0gKHRoaXMub3BhY2l0eSA9PT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc2VtaU9wYXF1ZTtcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0RGVzY2VuZGFudE5vZGVzKGRlc2NlbmRhbnROb2Rlcykge1xuICAgIHJldHVybiBkZXNjZW5kYW50Tm9kZXM7XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpIHtcbiAgICBsZXQgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG5cbiAgICB0aGlzLmZvcndhcmRzU29tZUNoaWxkTm9kZSgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjb25zdCBub2RlID0gY2hpbGROb2RlOyAvLy9cblxuICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub2RlLmdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2Vucyk7XG5cbiAgICAgIGlmIChmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleDtcbiAgfVxuXG4gIGdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKSB7XG4gICAgbGV0IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG5cbiAgICB0aGlzLmJhY2t3YXJkc1NvbWVDaGlsZE5vZGUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IGNoaWxkTm9kZTsgLy8vXG5cbiAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKTtcblxuICAgICAgaWYgKGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleDtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW5zKHNpZ25pZmljYW50VG9rZW5zID0gW10pIHtcbiAgICB0aGlzLmNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjaGlsZE5vZGUuZ2V0U2lnbmlmaWNhbnRUb2tlbnMoc2lnbmlmaWNhbnRUb2tlbnMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5zO1xuICB9XG5cbiAgZ2V0TXVsdGlwbGljaXR5KCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXNMZW5ndGggPSB0aGlzLmNoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICAgIG11bHRpcGxpY2l0eSA9IGNoaWxkTm9kZXNMZW5ndGg7ICAvLy9cblxuICAgIHJldHVybiBtdWx0aXBsaWNpdHk7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIGNvbnN0IG11bHRpcGxpY2l0eSA9IHRoaXMuZ2V0TXVsdGlwbGljaXR5KCksXG4gICAgICAgICAgZW1wdHkgPSAobXVsdGlwbGljaXR5ID09PSAwKTtcblxuICAgIHJldHVybiBlbXB0eTtcbiAgfVxuXG4gIGlzU2luZ3VsYXIoKSB7XG4gICAgY29uc3QgbXVsdGlwbGljaXR5ID0gdGhpcy5nZXRNdWx0aXBsaWNpdHkoKSxcbiAgICAgICAgICBzaW5ndWxhciA9IChtdWx0aXBsaWNpdHkgPT09IDEpO1xuXG4gICAgcmV0dXJuIHNpbmd1bGFyO1xuICB9XG5cbiAgaXNQYWxhdGFibGUoKSB7XG4gICAgY29uc3QgdW5wYWxhdGFibGUgPSB0aGlzLmlzVW5wYWxhdGFibGUoKSxcbiAgICAgICAgICBwYWxhdGFibGUgPSAhdW5wYWxhdGFibGU7XG5cbiAgICByZXR1cm4gcGFsYXRhYmxlO1xuICB9XG5cbiAgaXNVbnBhbGF0YWJsZSgpIHtcbiAgICBsZXQgdW5wYWxhdGFibGUgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5pc0VtcHR5KCksXG4gICAgICAgICAgdW5wcmVjZWRlbnRlZCA9IHRoaXMuaXNVbnByZWNlZGVudGVkKCk7XG5cbiAgICBpZiAoZW1wdHkgfHwgdW5wcmVjZWRlbnRlZCkge1xuICAgICAgdW5wYWxhdGFibGUgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB1bnBhbGF0YWJsZTtcbiAgfVxuXG4gIGlzVW5wcmVjZWRlbnRlZCgpIHtcbiAgICBsZXQgdW5wcmVjZWRlbnRlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMucHJlY2VkZW5jZSAhPT0gbnVsbCkge1xuICAgICAgdW5wcmVjZWRlbnRlZCA9IHRoaXMuY2hpbGROb2Rlcy5zb21lKChjaGlsZE5vZGUpID0+IHsgIC8vL1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVMb3dlclByZWNlZGVuY2UgPSBjaGlsZE5vZGUuaXNMb3dlclByZWNlZGVuY2UodGhpcy5ydWxlTmFtZSwgdGhpcy5wcmVjZWRlbmNlKTtcblxuICAgICAgICBpZiAoY2hpbGROb2RlTG93ZXJQcmVjZWRlbmNlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB1bnByZWNlZGVudGVkO1xuICB9XG5cbiAgaXNMb3dlclByZWNlZGVuY2UocnVsZU5hbWUsIHByZWNlZGVuY2UpIHtcbiAgICBsZXQgbG93ZXJQcmVjZWRlbmNlO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHRoaXMucHJlY2VkZW5jZSA9PT0gbnVsbCkge1xuICAgICAgbG93ZXJQcmVjZWRlbmNlID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByZWNlZGVuY2UgPT09IEluZmluaXR5KSB7XG4gICAgICBsb3dlclByZWNlZGVuY2UgPSB0aGlzLmNoaWxkTm9kZXMuc29tZSgoY2hpbGROb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZUxvd2VyUHJlY2VkZW5jZSA9IGNoaWxkTm9kZS5pc0xvd2VyUHJlY2VkZW5jZShydWxlTmFtZSwgcHJlY2VkZW5jZSk7XG5cbiAgICAgICAgaWYgKGNoaWxkTm9kZUxvd2VyUHJlY2VkZW5jZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG93ZXJQcmVjZWRlbmNlID0gKCh0aGlzLnJ1bGVOYW1lID09PSBydWxlTmFtZSkgJiYgKHRoaXMucHJlY2VkZW5jZSA8IHByZWNlZGVuY2UpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbG93ZXJQcmVjZWRlbmNlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdGhpcywgIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZS5mcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBtYXRjaChub2RlLCBkZXB0aCA9IEluZmluaXR5LCBleGFjdGx5ID0gZmFsc2UpIHtcbiAgICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgbm9kZU5vblRlcm1pbmFsTm9kZSA9IG5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCk7XG5cbiAgICAgIGlmICh0aGlzLnJ1bGVOYW1lID09PSBub25UZXJtaW5hbE5vZGVSdWxlTmFtZSkge1xuICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGVPcGFjaXR5ID0gbm9uVGVybWluYWxOb2RlLmdldE9wYWNpdHkoKTtcblxuICAgICAgICBpZiAodGhpcy5vcGFjaXR5ID09PSBub25UZXJtaW5hbE5vZGVPcGFjaXR5KSB7XG4gICAgICAgICAgY29uc3QgcHJlY2VkZW5jZSA9IHRoaXMuZ2V0UHJlY2VkZW5jZSgpLFxuICAgICAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVByZWNlZGVuY2UgPSBub25UZXJtaW5hbE5vZGUuZ2V0UHJlY2VkZW5jZSgpO1xuXG4gICAgICAgICAgaWYgKHByZWNlZGVuY2UgPT09IG5vblRlcm1pbmFsTm9kZVByZWNlZGVuY2UpIHtcbiAgICAgICAgICAgIGRlcHRoLS07XG5cbiAgICAgICAgICAgIGlmIChkZXB0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBtYXRjaGVzID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgICAgICAgICAgIG1hdGNoZXMgPSBtYXRjaCh0aGlzLmNoaWxkTm9kZXMsIG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMsIChjaGlsZE5vZGUsIG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZU1hdGNoZXNOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGUgPSBjaGlsZE5vZGUubWF0Y2gobm9uVGVybWluYWxOb2RlQ2hpbGROb2RlLCBkZXB0aCwgZXhhY3RseSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlTWF0Y2hlc05vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIHJld3JpdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHJld3JpdHRlbk5vblRlcm1pbmFsTm9kZSA9IHRoaXM7ICAvLy9cblxuICAgIHJldHVybiByZXdyaXR0ZW5Ob25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuZm9yRWFjaENoaWxkTm9kZSgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjaGlsZE5vZGUuZGVzdHJveSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5wYXJlbnROb2RlID0gbnVsbDtcblxuICAgIHRoaXMuY2hpbGROb2RlcyA9IG51bGw7XG4gIH1cblxuICBjbG9uZSguLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCBDbGFzcyA9IHRoaXMuY29uc3RydWN0b3IsXG4gICAgICAgICAgcGFyZW50Tm9kZSA9IG51bGwsXG4gICAgICAgICAgcnVsZU5hbWUgPSB0aGlzLnJ1bGVOYW1lLFxuICAgICAgICAgIGNoaWxkTm9kZXMgPSBjbG9uZUNoaWxkTm9kZXModGhpcy5jaGlsZE5vZGVzKSxcbiAgICAgICAgICBvcGFjaXR5ID0gdGhpcy5vcGFjaXR5LFxuICAgICAgICAgIHByZWNlZGVuY2UgPSB0aGlzLnByZWNlZGVuY2UsXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gbmV3IENsYXNzKHJ1bGVOYW1lLCBwYXJlbnROb2RlLCBjaGlsZE5vZGVzLCBvcGFjaXR5LCBwcmVjZWRlbmNlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgbm9uVGVybWluYWxOb2RlLnNldENoaWxkTm9kZXNQYXJlbnROb2RlKCk7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNPcGFjaXR5QW5kUHJlY2VkZW5jZShDbGFzcywgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIHByZWNlZGVuY2UsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGlmIChwcmVjZWRlbmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHByZWNlZGVuY2UgPSBvcGFjaXR5OyAvLy9cblxuICAgICAgb3BhY2l0eSA9IGNoaWxkTm9kZXM7IC8vL1xuXG4gICAgICBjaGlsZE5vZGVzID0gcnVsZU5hbWU7ICAvLy9cblxuICAgICAgcnVsZU5hbWUgPSBDbGFzczsgLy8vXG5cbiAgICAgIENsYXNzID0gTm9uVGVybWluYWxOb2RlOyAgLy8vXG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IG51bGwsXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gbmV3IENsYXNzKHJ1bGVOYW1lLCBwYXJlbnROb2RlLCBjaGlsZE5vZGVzLCBvcGFjaXR5LCBwcmVjZWRlbmNlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgbm9uVGVybWluYWxOb2RlLnNldENoaWxkTm9kZXNQYXJlbnROb2RlKCk7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oTm9uVGVybWluYWxOb2RlLnByb3RvdHlwZSwgbm9kZU1peGlucyk7XG5cbmZ1bmN0aW9uIGNsb25lQ2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG4gIGNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzLm1hcCgoY2hpbGROb2RlKSA9PiB7ICAvLy9cbiAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUuY2xvbmUoKTsgIC8vL1xuXG4gICAgcmV0dXJuIGNoaWxkTm9kZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNoaWxkTm9kZXM7XG59XG4iXSwibmFtZXMiOlsiTm9uVGVybWluYWxOb2RlIiwibWF0Y2giLCJhcnJheVV0aWxpdGllcyIsIm9wYXF1ZSIsIm9wYXF1ZVNwZWNpYWxTeW1ib2wiLCJzZW1pT3BhcXVlIiwic2VtaU9wYXF1ZVNwZWNpYWxTeW1ib2wiLCJzcGVjaWFsU3ltYm9scyIsInJ1bGVOYW1lIiwicGFyZW50Tm9kZSIsImNoaWxkTm9kZXMiLCJvcGFjaXR5IiwicHJlY2VkZW5jZSIsImdldFJ1bGVOYW1lIiwiZ2V0UGFyZW50Tm9kZSIsImdldENoaWxkTm9kZXMiLCJnZXRPcGFjaXR5IiwiZ2V0UHJlY2VkZW5jZSIsInNldFJ1bGVOYW1lIiwic2V0UGFyZW50Tm9kZSIsInNldENoaWxkTm9kZXMiLCJzdGFydEluZGV4IiwiZGVsZXRlQ291bnQiLCJJbmZpbml0eSIsImFkZGVkQ2hpbGROb2RlcyIsInNwbGljZUNoaWxkTm9kZXMiLCJzZXRPcGFjaXR5Iiwic2V0UHJlY2VkZW5jZSIsIm51bGxpZnlQcmVjZWRlbmNlIiwiaXNPcGFxdWUiLCJpc1NlbWlPcGFxdWUiLCJpc1RyYW5zcGFyZW50IiwiaXNUZXJtaW5hbE5vZGUiLCJ0ZXJtaW5hbE5vZGUiLCJpc05vblRlcm1pbmFsTm9kZSIsIm5vblRlcm1pbmFsTm9kZSIsImdldERlc2NlbmRhbnROb2RlcyIsImRlc2NlbmRhbnROb2RlcyIsImdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4IiwidG9rZW5zIiwiZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgiLCJmb3J3YXJkc1NvbWVDaGlsZE5vZGUiLCJjaGlsZE5vZGUiLCJub2RlIiwiZ2V0TGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCIsImxhc3RTaWduaWZpY2FudFRva2VuSW5kZXgiLCJiYWNrd2FyZHNTb21lQ2hpbGROb2RlIiwiZ2V0U2lnbmlmaWNhbnRUb2tlbnMiLCJzaWduaWZpY2FudFRva2VucyIsImZvckVhY2giLCJnZXRNdWx0aXBsaWNpdHkiLCJjaGlsZE5vZGVzTGVuZ3RoIiwibGVuZ3RoIiwibXVsdGlwbGljaXR5IiwiaXNFbXB0eSIsImVtcHR5IiwiaXNTaW5ndWxhciIsInNpbmd1bGFyIiwiaXNQYWxhdGFibGUiLCJ1bnBhbGF0YWJsZSIsImlzVW5wYWxhdGFibGUiLCJwYWxhdGFibGUiLCJ1bnByZWNlZGVudGVkIiwiaXNVbnByZWNlZGVudGVkIiwic29tZSIsImNoaWxkTm9kZUxvd2VyUHJlY2VkZW5jZSIsImlzTG93ZXJQcmVjZWRlbmNlIiwibG93ZXJQcmVjZWRlbmNlIiwiYXNQYXJzZVRyZWUiLCJub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUiLCJOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUiLCJmcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zIiwicGFyc2VUcmVlIiwiZGVwdGgiLCJleGFjdGx5IiwibWF0Y2hlcyIsIm5vZGVOb25UZXJtaW5hbE5vZGUiLCJub25UZXJtaW5hbE5vZGVSdWxlTmFtZSIsIm5vblRlcm1pbmFsTm9kZU9wYWNpdHkiLCJub25UZXJtaW5hbE5vZGVQcmVjZWRlbmNlIiwibm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyIsIm5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSIsImNoaWxkTm9kZU1hdGNoZXNOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGUiLCJyZXdyaXRlIiwiY29udGV4dCIsInJld3JpdHRlbk5vblRlcm1pbmFsTm9kZSIsImRlc3Ryb3kiLCJmb3JFYWNoQ2hpbGROb2RlIiwiY2xvbmUiLCJyZW1haW5pbmdBcmd1bWVudHMiLCJDbGFzcyIsImNsb25lQ2hpbGROb2RlcyIsInNldENoaWxkTm9kZXNQYXJlbnROb2RlIiwiZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc09wYWNpdHlBbmRQcmVjZWRlbmNlIiwidW5kZWZpbmVkIiwiT2JqZWN0IiwiYXNzaWduIiwicHJvdG90eXBlIiwibm9kZU1peGlucyIsIm1hcCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBV0E7OztlQUFxQkE7OzsyQkFU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
249
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL25vblRlcm1pbmFsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgbm9kZU1peGlucyBmcm9tIFwiLi4vbWl4aW5zL25vZGVcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS9ub25UZXJtaW5hbE5vZGVcIjtcblxuY29uc3QgeyBtYXRjaCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IG9wYXF1ZTogb3BhcXVlU3BlY2lhbFN5bWJvbCAsIHNlbWlPcGFxdWU6IHNlbWlPcGFxdWVTcGVjaWFsU3ltYm9sIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIHByZWNlZGVuY2UpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzO1xuICAgIHRoaXMub3BhY2l0eSA9IG9wYWNpdHk7XG4gICAgdGhpcy5wcmVjZWRlbmNlID0gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVOYW1lO1xuICB9XG5cbiAgZ2V0UGFyZW50Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnROb2RlO1xuICB9XG5cbiAgZ2V0Q2hpbGROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzO1xuICB9XG5cbiAgZ2V0T3BhY2l0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcGFjaXR5O1xuICB9XG5cbiAgZ2V0UHJlY2VkZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlO1xuICB9XG5cbiAgc2V0UnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gIH1cblxuICBzZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICB9XG5cbiAgc2V0Q2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IDAsXG4gICAgICAgICAgZGVsZXRlQ291bnQgPSBJbmZpbml0eSxcbiAgICAgICAgICBhZGRlZENoaWxkTm9kZXMgPSBjaGlsZE5vZGVzOyAgLy8vXG5cbiAgICB0aGlzLnNwbGljZUNoaWxkTm9kZXMoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQsIGFkZGVkQ2hpbGROb2Rlcyk7XG4gIH1cblxuICBzZXRPcGFjaXR5KG9wYWNpdHkpIHtcbiAgICB0aGlzLm9wYWNpdHkgPSBvcGFjaXR5O1xuICB9XG5cbiAgc2V0UHJlY2VkZW5jZShwcmVjZWRlbmNlKSB7XG4gICAgdGhpcy5wcmVjZWRlbmNlID0gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIG51bGxpZnlQcmVjZWRlbmNlKCkge1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IG51bGw7XG4gIH1cblxuICBpc09wYXF1ZSgpIHtcbiAgICBjb25zdCBvcGFxdWUgPSAodGhpcy5vcGFjaXR5ID09PSBvcGFxdWVTcGVjaWFsU3ltYm9sKTtcblxuICAgIHJldHVybiBvcGFxdWU7XG4gIH1cblxuICBpc1NlbWlPcGFxdWUoKSB7XG4gICAgY29uc3Qgc2VtaU9wYXF1ZSA9ICh0aGlzLm9wYWNpdHkgPT09IHNlbWlPcGFxdWVTcGVjaWFsU3ltYm9sKTtcblxuICAgIHJldHVybiBzZW1pT3BhcXVlO1xuICB9XG5cbiAgaXNUcmFuc3BhcmVudCgpIHtcbiAgICBjb25zdCBzZW1pT3BhcXVlID0gKHRoaXMub3BhY2l0eSA9PT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc2VtaU9wYXF1ZTtcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0RGVzY2VuZGFudE5vZGVzKGRlc2NlbmRhbnROb2Rlcykge1xuICAgIHJldHVybiBkZXNjZW5kYW50Tm9kZXM7XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpIHtcbiAgICBsZXQgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG5cbiAgICB0aGlzLmZvcndhcmRzU29tZUNoaWxkTm9kZSgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjb25zdCBub2RlID0gY2hpbGROb2RlOyAvLy9cblxuICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub2RlLmdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2Vucyk7XG5cbiAgICAgIGlmIChmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleDtcbiAgfVxuXG4gIGdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKSB7XG4gICAgbGV0IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG5cbiAgICB0aGlzLmJhY2t3YXJkc1NvbWVDaGlsZE5vZGUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IGNoaWxkTm9kZTsgLy8vXG5cbiAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKTtcblxuICAgICAgaWYgKGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleDtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW5zKHNpZ25pZmljYW50VG9rZW5zID0gW10pIHtcbiAgICB0aGlzLmNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjaGlsZE5vZGUuZ2V0U2lnbmlmaWNhbnRUb2tlbnMoc2lnbmlmaWNhbnRUb2tlbnMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5zO1xuICB9XG5cbiAgZ2V0TXVsdGlwbGljaXR5KCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXNMZW5ndGggPSB0aGlzLmNoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICAgIG11bHRpcGxpY2l0eSA9IGNoaWxkTm9kZXNMZW5ndGg7ICAvLy9cblxuICAgIHJldHVybiBtdWx0aXBsaWNpdHk7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIGNvbnN0IG11bHRpcGxpY2l0eSA9IHRoaXMuZ2V0TXVsdGlwbGljaXR5KCksXG4gICAgICAgICAgZW1wdHkgPSAobXVsdGlwbGljaXR5ID09PSAwKTtcblxuICAgIHJldHVybiBlbXB0eTtcbiAgfVxuXG4gIGlzU2luZ3VsYXIoKSB7XG4gICAgY29uc3QgbXVsdGlwbGljaXR5ID0gdGhpcy5nZXRNdWx0aXBsaWNpdHkoKSxcbiAgICAgICAgICBzaW5ndWxhciA9IChtdWx0aXBsaWNpdHkgPT09IDEpO1xuXG4gICAgcmV0dXJuIHNpbmd1bGFyO1xuICB9XG5cbiAgaXNQYWxhdGFibGUoKSB7XG4gICAgY29uc3QgdW5wYWxhdGFibGUgPSB0aGlzLmlzVW5wYWxhdGFibGUoKSxcbiAgICAgICAgICBwYWxhdGFibGUgPSAhdW5wYWxhdGFibGU7XG5cbiAgICByZXR1cm4gcGFsYXRhYmxlO1xuICB9XG5cbiAgaXNVbnBhbGF0YWJsZSgpIHtcbiAgICBsZXQgdW5wYWxhdGFibGUgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5pc0VtcHR5KCksXG4gICAgICAgICAgdW5wcmVjZWRlbnRlZCA9IHRoaXMuaXNVbnByZWNlZGVudGVkKCk7XG5cbiAgICBpZiAoZW1wdHkgfHwgdW5wcmVjZWRlbnRlZCkge1xuICAgICAgdW5wYWxhdGFibGUgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB1bnBhbGF0YWJsZTtcbiAgfVxuXG4gIGlzVW5wcmVjZWRlbnRlZCgpIHtcbiAgICBsZXQgdW5wcmVjZWRlbnRlZCA9IGZhbHNlO1xuXG4gICAgaWYgKCh0aGlzLnByZWNlZGVuY2UgIT09IG51bGwpICYmICh0aGlzLnByZWNlZGVuY2UgIT09IEluZmluaXR5KSl7XG4gICAgICBjb25zdCBsZW5ndGggPSB0aGlzLmNoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICAgICAgbGFzdEluZGV4ID0gKGxlbmd0aCAtIDEpLFxuICAgICAgICAgICAgZmlyc3RJbmRleCA9IDAsXG4gICAgICAgICAgICBzdHJlbmd0aCA9IE1hdGguYWJzKHRoaXMucHJlY2VkZW5jZSksXG4gICAgICAgICAgICBhc3NvY2lhdGl2aXR5ID0gTWF0aC5zaWduKHRoaXMucHJlY2VkZW5jZSk7XG5cbiAgICAgIHVucHJlY2VkZW50ZWQgPSB0aGlzLmNoaWxkTm9kZXMuc29tZSgoY2hpbGROb2RlLCBpbmRleCkgPT4geyAgLy8vXG4gICAgICAgIGNvbnN0IGxhc3QgPSAoaW5kZXggPT09IGxhc3RJbmRleCksXG4gICAgICAgICAgICAgIGZpcnN0ID0gKGluZGV4ID09PSBmaXJzdEluZGV4KSxcbiAgICAgICAgICAgICAgY2hpbGROb2RlTG93ZXJQcmVjZWRlbmNlID0gY2hpbGROb2RlLmlzTG93ZXJQcmVjZWRlbmNlKGFzc29jaWF0aXZpdHksIHN0cmVuZ3RoLCBmaXJzdCwgbGFzdCk7XG5cbiAgICAgICAgaWYgKGNoaWxkTm9kZUxvd2VyUHJlY2VkZW5jZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5wcmVjZWRlbnRlZDtcbiAgfVxuXG4gIGlzTG93ZXJQcmVjZWRlbmNlKGFzc29jaWF0aXZpdHksIHN0cmVuZ3RoLCBmaXJzdCwgbGFzdCkge1xuICAgIGxldCBsb3dlclByZWNlZGVuY2U7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcmVjZWRlbmNlID09PSBudWxsKSB7XG4gICAgICBsb3dlclByZWNlZGVuY2UgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJlY2VkZW5jZSA9PT0gSW5maW5pdHkpIHtcbiAgICAgIGxvd2VyUHJlY2VkZW5jZSA9IHRoaXMuY2hpbGROb2Rlcy5zb21lKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlTG93ZXJQcmVjZWRlbmNlID0gY2hpbGROb2RlLmlzTG93ZXJQcmVjZWRlbmNlKGFzc29jaWF0aXZpdHksIHN0cmVuZ3RoLCBmaXJzdCwgbGFzdCk7XG5cbiAgICAgICAgaWYgKGNoaWxkTm9kZUxvd2VyUHJlY2VkZW5jZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGFyZW50U3RyZW5ndGggPSBzdHJlbmd0aCwgIC8vL1xuICAgICAgICAgICAgcGFyZW50QXNzb2NpYXRpdml0eSA9IGFzc29jaWF0aXZpdHk7ICAvLy9cblxuICAgICAgc3RyZW5ndGggPSBNYXRoLmFicyh0aGlzLnByZWNlZGVuY2UpO1xuXG4gICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgLy8vXG4gICAgICB9IGVsc2UgaWYgKGZpcnN0KSB7XG4gICAgICAgIGxvd2VyUHJlY2VkZW5jZSA9IChwYXJlbnRBc3NvY2lhdGl2aXR5IDwgMCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJlbmd0aCA8IHBhcmVudFN0cmVuZ3RoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyZW5ndGggPD0gcGFyZW50U3RyZW5ndGgpO1xuICAgICAgfSBlbHNlIGlmIChsYXN0KSB7XG4gICAgICAgIGxvd2VyUHJlY2VkZW5jZSA9IChwYXJlbnRBc3NvY2lhdGl2aXR5IDwgMCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJlbmd0aCA8PSBwYXJlbnRTdHJlbmd0aCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmVuZ3RoIDwgcGFyZW50U3RyZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG93ZXJQcmVjZWRlbmNlID0gKHN0cmVuZ3RoIDwgcGFyZW50U3RyZW5ndGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsb3dlclByZWNlZGVuY2U7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlID0gTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmZyb21Ob25UZXJtaW5hbE5vZGVBbmRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIG1hdGNoKG5vZGUsIGRlcHRoID0gSW5maW5pdHksIGV4YWN0bHkgPSBmYWxzZSkge1xuICAgIGxldCBtYXRjaGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgICAgaWYgKHRoaXMucnVsZU5hbWUgPT09IG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZU9wYWNpdHkgPSBub25UZXJtaW5hbE5vZGUuZ2V0T3BhY2l0eSgpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wYWNpdHkgPT09IG5vblRlcm1pbmFsTm9kZU9wYWNpdHkpIHtcbiAgICAgICAgICBjb25zdCBwcmVjZWRlbmNlID0gdGhpcy5nZXRQcmVjZWRlbmNlKCksXG4gICAgICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUHJlY2VkZW5jZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRQcmVjZWRlbmNlKCk7XG5cbiAgICAgICAgICBpZiAocHJlY2VkZW5jZSA9PT0gbm9uVGVybWluYWxOb2RlUHJlY2VkZW5jZSkge1xuICAgICAgICAgICAgZGVwdGgtLTtcblxuICAgICAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgICAgIG1hdGNoZXMgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICAgICAgICAgICAgbWF0Y2hlcyA9IG1hdGNoKHRoaXMuY2hpbGROb2Rlcywgbm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcywgKGNoaWxkTm9kZSwgbm9uVGVybWluYWxOb2RlQ2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlTWF0Y2hlc05vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSA9IGNoaWxkTm9kZS5tYXRjaChub25UZXJtaW5hbE5vZGVDaGlsZE5vZGUsIGRlcHRoLCBleGFjdGx5KTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGVNYXRjaGVzTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgcmV3cml0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgcmV3cml0dGVuTm9uVGVybWluYWxOb2RlID0gdGhpczsgIC8vL1xuXG4gICAgcmV0dXJuIHJld3JpdHRlbk5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5mb3JFYWNoQ2hpbGROb2RlKChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGNoaWxkTm9kZS5kZXN0cm95KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnBhcmVudE5vZGUgPSBudWxsO1xuXG4gICAgdGhpcy5jaGlsZE5vZGVzID0gbnVsbDtcbiAgfVxuXG4gIGNsb25lKC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGNvbnN0IENsYXNzID0gdGhpcy5jb25zdHJ1Y3RvcixcbiAgICAgICAgICBwYXJlbnROb2RlID0gbnVsbCxcbiAgICAgICAgICBydWxlTmFtZSA9IHRoaXMucnVsZU5hbWUsXG4gICAgICAgICAgY2hpbGROb2RlcyA9IGNsb25lQ2hpbGROb2Rlcyh0aGlzLmNoaWxkTm9kZXMpLFxuICAgICAgICAgIG9wYWNpdHkgPSB0aGlzLm9wYWNpdHksXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IHRoaXMucHJlY2VkZW5jZSxcbiAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBuZXcgQ2xhc3MocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIHByZWNlZGVuY2UsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICBub25UZXJtaW5hbE5vZGUuc2V0Q2hpbGROb2Rlc1BhcmVudE5vZGUoKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc09wYWNpdHlBbmRQcmVjZWRlbmNlKENsYXNzLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSwgcHJlY2VkZW5jZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKHByZWNlZGVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJlY2VkZW5jZSA9IG9wYWNpdHk7IC8vL1xuXG4gICAgICBvcGFjaXR5ID0gY2hpbGROb2RlczsgLy8vXG5cbiAgICAgIGNoaWxkTm9kZXMgPSBydWxlTmFtZTsgIC8vL1xuXG4gICAgICBydWxlTmFtZSA9IENsYXNzOyAvLy9cblxuICAgICAgQ2xhc3MgPSBOb25UZXJtaW5hbE5vZGU7ICAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnROb2RlID0gbnVsbCxcbiAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBuZXcgQ2xhc3MocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIHByZWNlZGVuY2UsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICBub25UZXJtaW5hbE5vZGUuc2V0Q2hpbGROb2Rlc1BhcmVudE5vZGUoKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihOb25UZXJtaW5hbE5vZGUucHJvdG90eXBlLCBub2RlTWl4aW5zKTtcblxuZnVuY3Rpb24gY2xvbmVDaGlsZE5vZGVzKGNoaWxkTm9kZXMpIHtcbiAgY2hpbGROb2RlcyA9IGNoaWxkTm9kZXMubWFwKChjaGlsZE5vZGUpID0+IHsgIC8vL1xuICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5jbG9uZSgpOyAgLy8vXG5cbiAgICByZXR1cm4gY2hpbGROb2RlO1xuICB9KTtcblxuICByZXR1cm4gY2hpbGROb2Rlcztcbn1cbiJdLCJuYW1lcyI6WyJOb25UZXJtaW5hbE5vZGUiLCJtYXRjaCIsImFycmF5VXRpbGl0aWVzIiwib3BhcXVlIiwib3BhcXVlU3BlY2lhbFN5bWJvbCIsInNlbWlPcGFxdWUiLCJzZW1pT3BhcXVlU3BlY2lhbFN5bWJvbCIsInNwZWNpYWxTeW1ib2xzIiwicnVsZU5hbWUiLCJwYXJlbnROb2RlIiwiY2hpbGROb2RlcyIsIm9wYWNpdHkiLCJwcmVjZWRlbmNlIiwiZ2V0UnVsZU5hbWUiLCJnZXRQYXJlbnROb2RlIiwiZ2V0Q2hpbGROb2RlcyIsImdldE9wYWNpdHkiLCJnZXRQcmVjZWRlbmNlIiwic2V0UnVsZU5hbWUiLCJzZXRQYXJlbnROb2RlIiwic2V0Q2hpbGROb2RlcyIsInN0YXJ0SW5kZXgiLCJkZWxldGVDb3VudCIsIkluZmluaXR5IiwiYWRkZWRDaGlsZE5vZGVzIiwic3BsaWNlQ2hpbGROb2RlcyIsInNldE9wYWNpdHkiLCJzZXRQcmVjZWRlbmNlIiwibnVsbGlmeVByZWNlZGVuY2UiLCJpc09wYXF1ZSIsImlzU2VtaU9wYXF1ZSIsImlzVHJhbnNwYXJlbnQiLCJpc1Rlcm1pbmFsTm9kZSIsInRlcm1pbmFsTm9kZSIsImlzTm9uVGVybWluYWxOb2RlIiwibm9uVGVybWluYWxOb2RlIiwiZ2V0RGVzY2VuZGFudE5vZGVzIiwiZGVzY2VuZGFudE5vZGVzIiwiZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgiLCJ0b2tlbnMiLCJmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCIsImZvcndhcmRzU29tZUNoaWxkTm9kZSIsImNoaWxkTm9kZSIsIm5vZGUiLCJnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4IiwibGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCIsImJhY2t3YXJkc1NvbWVDaGlsZE5vZGUiLCJnZXRTaWduaWZpY2FudFRva2VucyIsInNpZ25pZmljYW50VG9rZW5zIiwiZm9yRWFjaCIsImdldE11bHRpcGxpY2l0eSIsImNoaWxkTm9kZXNMZW5ndGgiLCJsZW5ndGgiLCJtdWx0aXBsaWNpdHkiLCJpc0VtcHR5IiwiZW1wdHkiLCJpc1Npbmd1bGFyIiwic2luZ3VsYXIiLCJpc1BhbGF0YWJsZSIsInVucGFsYXRhYmxlIiwiaXNVbnBhbGF0YWJsZSIsInBhbGF0YWJsZSIsInVucHJlY2VkZW50ZWQiLCJpc1VucHJlY2VkZW50ZWQiLCJsYXN0SW5kZXgiLCJmaXJzdEluZGV4Iiwic3RyZW5ndGgiLCJNYXRoIiwiYWJzIiwiYXNzb2NpYXRpdml0eSIsInNpZ24iLCJzb21lIiwiaW5kZXgiLCJsYXN0IiwiZmlyc3QiLCJjaGlsZE5vZGVMb3dlclByZWNlZGVuY2UiLCJpc0xvd2VyUHJlY2VkZW5jZSIsImxvd2VyUHJlY2VkZW5jZSIsInBhcmVudFN0cmVuZ3RoIiwicGFyZW50QXNzb2NpYXRpdml0eSIsImFzUGFyc2VUcmVlIiwibm9uVGVybWluYWxOb2RlUGFyc2VUcmVlIiwiTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlIiwiZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2VucyIsInBhcnNlVHJlZSIsImRlcHRoIiwiZXhhY3RseSIsIm1hdGNoZXMiLCJub2RlTm9uVGVybWluYWxOb2RlIiwibm9uVGVybWluYWxOb2RlUnVsZU5hbWUiLCJub25UZXJtaW5hbE5vZGVPcGFjaXR5Iiwibm9uVGVybWluYWxOb2RlUHJlY2VkZW5jZSIsIm5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMiLCJub25UZXJtaW5hbE5vZGVDaGlsZE5vZGUiLCJjaGlsZE5vZGVNYXRjaGVzTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlIiwicmV3cml0ZSIsImNvbnRleHQiLCJyZXdyaXR0ZW5Ob25UZXJtaW5hbE5vZGUiLCJkZXN0cm95IiwiZm9yRWFjaENoaWxkTm9kZSIsImNsb25lIiwicmVtYWluaW5nQXJndW1lbnRzIiwiQ2xhc3MiLCJjbG9uZUNoaWxkTm9kZXMiLCJzZXRDaGlsZE5vZGVzUGFyZW50Tm9kZSIsImZyb21SdWxlTmFtZUNoaWxkTm9kZXNPcGFjaXR5QW5kUHJlY2VkZW5jZSIsInVuZGVmaW5lZCIsIk9iamVjdCIsImFzc2lnbiIsInByb3RvdHlwZSIsIm5vZGVNaXhpbnMiLCJtYXAiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVdBOzs7ZUFBcUJBOzs7MkJBVFU7NkJBQ0E7NkRBRVI7d0VBQ2M7Ozs7OztBQUVyQyxNQUFNLEVBQUVDLEtBQUssRUFBRSxHQUFHQyx5QkFBYyxFQUMxQixFQUFFQyxRQUFRQyxtQkFBbUIsRUFBR0MsWUFBWUMsdUJBQXVCLEVBQUUsR0FBR0MsMkJBQWM7QUFFN0UsTUFBTVA7SUFDbkIsWUFBWVEsUUFBUSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsT0FBTyxFQUFFQyxVQUFVLENBQUU7UUFDakUsSUFBSSxDQUFDSixRQUFRLEdBQUdBO1FBQ2hCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFDbEIsSUFBSSxDQUFDQyxPQUFPLEdBQUdBO1FBQ2YsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO0lBQ3BCO0lBRUFDLGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQ0wsUUFBUTtJQUN0QjtJQUVBTSxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQ0wsVUFBVTtJQUN4QjtJQUVBTSxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQ0wsVUFBVTtJQUN4QjtJQUVBTSxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUNMLE9BQU87SUFDckI7SUFFQU0sZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUNMLFVBQVU7SUFDeEI7SUFFQU0sWUFBWVYsUUFBUSxFQUFFO1FBQ3BCLElBQUksQ0FBQ0EsUUFBUSxHQUFHQTtJQUNsQjtJQUVBVyxjQUFjVixVQUFVLEVBQUU7UUFDeEIsSUFBSSxDQUFDQSxVQUFVLEdBQUdBO0lBQ3BCO0lBRUFXLGNBQWNWLFVB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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-parsers",
3
3
  "author": "James Smith",
4
- "version": "23.3.13",
4
+ "version": "23.3.16",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-parsers",
7
7
  "description": "Occam's parsers.",
@@ -11,7 +11,7 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "necessary": "^17.7.2",
14
- "occam-lexers": "^23.3.1",
14
+ "occam-lexers": "^23.3.13",
15
15
  "occam-parsers": "^23.1.152"
16
16
  },
17
17
  "devDependencies": {
package/src/bnf/bnf.js CHANGED
@@ -64,7 +64,7 @@ const bnf = `
64
64
 
65
65
  stringLiteral ::= [string-literal] ;
66
66
 
67
- precedence ::= "(" [number]? ")" ;
67
+ precedence ::= "(" [integer]? ")" ;
68
68
 
69
69
  endOfLine ::= "<END_OF_LINE>" ;
70
70
 
@@ -7,12 +7,12 @@ import OptionalPartPart from "../part/nonTerminal/optionalPart";
7
7
  import StringLiteralPart from "../part/terminal/stringLiteral";
8
8
  import SignificantTokenTypePart from "../part/terminal/significantTokenType";
9
9
 
10
- const { numberType } = types,
10
+ const { integerType } = types,
11
11
  { openBracket, closeBracket } = specialSymbols;
12
12
 
13
13
  export default class PrecedenceDefinition extends Definition {
14
14
  static fromNothing() {
15
- const significantTokenType = numberType, ///
15
+ const significantTokenType = integerType, ///
16
16
  openBracketStringLiteralContent = openBracket, ///
17
17
  closeBracketStringLiteralContent = closeBracket, ///
18
18
  openBracketStringLiteralPart = StringLiteralPart.fromContent(openBracketStringLiteralContent),
@@ -184,9 +184,17 @@ export default class NonTerminalNode {
184
184
  isUnprecedented() {
185
185
  let unprecedented = false;
186
186
 
187
- if (this.precedence !== null) {
188
- unprecedented = this.childNodes.some((childNode) => { ///
189
- const childNodeLowerPrecedence = childNode.isLowerPrecedence(this.ruleName, this.precedence);
187
+ if ((this.precedence !== null) && (this.precedence !== Infinity)){
188
+ const length = this.childNodes.length,
189
+ lastIndex = (length - 1),
190
+ firstIndex = 0,
191
+ strength = Math.abs(this.precedence),
192
+ associativity = Math.sign(this.precedence);
193
+
194
+ unprecedented = this.childNodes.some((childNode, index) => { ///
195
+ const last = (index === lastIndex),
196
+ first = (index === firstIndex),
197
+ childNodeLowerPrecedence = childNode.isLowerPrecedence(associativity, strength, first, last);
190
198
 
191
199
  if (childNodeLowerPrecedence) {
192
200
  return true;
@@ -197,7 +205,7 @@ export default class NonTerminalNode {
197
205
  return unprecedented;
198
206
  }
199
207
 
200
- isLowerPrecedence(ruleName, precedence) {
208
+ isLowerPrecedence(associativity, strength, first, last) {
201
209
  let lowerPrecedence;
202
210
 
203
211
  if (false) {
@@ -206,14 +214,31 @@ export default class NonTerminalNode {
206
214
  lowerPrecedence = false;
207
215
  } else if (this.precedence === Infinity) {
208
216
  lowerPrecedence = this.childNodes.some((childNode) => {
209
- const childNodeLowerPrecedence = childNode.isLowerPrecedence(ruleName, precedence);
217
+ const childNodeLowerPrecedence = childNode.isLowerPrecedence(associativity, strength, first, last);
210
218
 
211
219
  if (childNodeLowerPrecedence) {
212
220
  return true;
213
221
  }
214
222
  });
215
223
  } else {
216
- lowerPrecedence = ((this.ruleName === ruleName) && (this.precedence < precedence));
224
+ const parentStrength = strength, ///
225
+ parentAssociativity = associativity; ///
226
+
227
+ strength = Math.abs(this.precedence);
228
+
229
+ if (false) {
230
+ ///
231
+ } else if (first) {
232
+ lowerPrecedence = (parentAssociativity < 0) ?
233
+ (strength < parentStrength) :
234
+ (strength <= parentStrength);
235
+ } else if (last) {
236
+ lowerPrecedence = (parentAssociativity < 0) ?
237
+ (strength <= parentStrength) :
238
+ (strength < parentStrength);
239
+ } else {
240
+ lowerPrecedence = (strength < parentStrength);
241
+ }
217
242
  }
218
243
 
219
244
  return lowerPrecedence;