From 547e267462aadddb491635f657f9f63b883c6da3 Mon Sep 17 00:00:00 2001 From: Philip Blair Date: Thu, 2 Jun 2016 10:52:43 -0400 Subject: [PATCH 1/2] Began work on fixing nested syntax bug --- dist/enforester.js | 5 +- dist/serializer.js | 5 +- dist/shift-reader.js | 334 +++++++++++++----------- dist/sweet.js | 44 ++-- dist/symbol.js | 36 +-- dist/syntax.js | 213 +++++++++------- dist/template-processor.js | 85 ++++--- dist/term-expander.js | 510 ++++++++++++++++++------------------- dist/terms.js | 105 ++++++-- dist/token-expander.js | 202 +++++++-------- dist/transforms.js | 10 +- dist/utils.js | 28 +- src/shift-reader.js | 51 +++- 13 files changed, 912 insertions(+), 716 deletions(-) diff --git a/dist/enforester.js b/dist/enforester.js index 8b9c0f88..4403199b 100644 --- a/dist/enforester.js +++ b/dist/enforester.js @@ -282,6 +282,7 @@ var Enforester = exports.Enforester = function () { if (this.term === null && this.isCompiletimeTransform(lookahead_51)) { this.rest = this.expandMacro().concat(this.rest); lookahead_51 = this.peek(); + this.term = null; } if (this.term === null && this.isBraces(lookahead_51)) { return this.enforestBlockStatement(); @@ -1826,8 +1827,6 @@ var Enforester = exports.Enforester = function () { if (!(a_272 && b_273)) { return false; } - (0, _errors.assert)(a_272 instanceof _syntax2.default, "expecting a syntax object"); - (0, _errors.assert)(b_273 instanceof _syntax2.default, "expecting a syntax object"); return a_272.lineNumber() === b_273.lineNumber(); } }, { @@ -1953,4 +1952,4 @@ var Enforester = exports.Enforester = function () { return Enforester; }(); -//# sourceMappingURL=data:application/json;base64,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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUZXJtIGZyb20gXCIuL3Rlcm1zXCI7XG5pbXBvcnQge0Z1bmN0aW9uRGVjbFRyYW5zZm9ybSwgVmFyaWFibGVEZWNsVHJhbnNmb3JtLCBOZXdUcmFuc2Zvcm0sIExldERlY2xUcmFuc2Zvcm0sIENvbnN0RGVjbFRyYW5zZm9ybSwgU3ludGF4RGVjbFRyYW5zZm9ybSwgU3ludGF4cmVjRGVjbFRyYW5zZm9ybSwgU3ludGF4UXVvdGVUcmFuc2Zvcm0sIFJldHVyblN0YXRlbWVudFRyYW5zZm9ybSwgV2hpbGVUcmFuc2Zvcm0sIElmVHJhbnNmb3JtLCBGb3JUcmFuc2Zvcm0sIFN3aXRjaFRyYW5zZm9ybSwgQnJlYWtUcmFuc2Zvcm0sIENvbnRpbnVlVHJhbnNmb3JtLCBEb1RyYW5zZm9ybSwgRGVidWdnZXJUcmFuc2Zvcm0sIFdpdGhUcmFuc2Zvcm0sIFRyeVRyYW5zZm9ybSwgVGhyb3dUcmFuc2Zvcm0sIENvbXBpbGV0aW1lVHJhbnNmb3JtfSBmcm9tIFwiLi90cmFuc2Zvcm1zXCI7XG5pbXBvcnQge0xpc3R9IGZyb20gXCJpbW11dGFibGVcIjtcbmltcG9ydCB7ZXhwZWN0LCBhc3NlcnR9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IHtpc09wZXJhdG9yLCBpc1VuYXJ5T3BlcmF0b3IsIGdldE9wZXJhdG9yQXNzb2MsIGdldE9wZXJhdG9yUHJlYywgb3BlcmF0b3JMdH0gZnJvbSBcIi4vb3BlcmF0b3JzXCI7XG5pbXBvcnQgU3ludGF4IGZyb20gXCIuL3N5bnRheFwiO1xuaW1wb3J0IHtmcmVzaFNjb3BlfSBmcm9tIFwiLi9zY29wZVwiO1xuaW1wb3J0IHtzYW5pdGl6ZVJlcGxhY2VtZW50VmFsdWVzfSBmcm9tIFwiLi9sb2FkLXN5bnRheFwiO1xuaW1wb3J0IE1hY3JvQ29udGV4dCBmcm9tIFwiLi9tYWNyby1jb250ZXh0XCI7XG5jb25zdCBFWFBSX0xPT1BfT1BFUkFUT1JfMjYgPSB7fTtcbmNvbnN0IEVYUFJfTE9PUF9OT19DSEFOR0VfMjcgPSB7fTtcbmNvbnN0IEVYUFJfTE9PUF9FWFBBTlNJT05fMjggPSB7fTtcbmV4cG9ydCBjbGFzcyBFbmZvcmVzdGVyIHtcbiAgY29uc3RydWN0b3Ioc3R4bF8yOSwgcHJldl8zMCwgY29udGV4dF8zMSkge1xuICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgIGFzc2VydChMaXN0LmlzTGlzdChzdHhsXzI5KSwgXCJleHBlY3RpbmcgYSBsaXN0IG9mIHRlcm1zIHRvIGVuZm9yZXN0XCIpO1xuICAgIGFzc2VydChMaXN0LmlzTGlzdChwcmV2XzMwKSwgXCJleHBlY3RpbmcgYSBsaXN0IG9mIHRlcm1zIHRvIGVuZm9yZXN0XCIpO1xuICAgIGFzc2VydChjb250ZXh0XzMxLCBcImV4cGVjdGluZyBhIGNvbnRleHQgdG8gZW5mb3Jlc3RcIik7XG4gICAgdGhpcy50ZXJtID0gbnVsbDtcbiAgICB0aGlzLnJlc3QgPSBzdHhsXzI5O1xuICAgIHRoaXMucHJldiA9IHByZXZfMzA7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dF8zMTtcbiAgfVxuICBwZWVrKG5fMzIgPSAwKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzdC5nZXQobl8zMik7XG4gIH1cbiAgYWR2YW5jZSgpIHtcbiAgICBsZXQgcmV0XzMzID0gdGhpcy5yZXN0LmZpcnN0KCk7XG4gICAgdGhpcy5yZXN0ID0gdGhpcy5yZXN0LnJlc3QoKTtcbiAgICByZXR1cm4gcmV0XzMzO1xuICB9XG4gIGVuZm9yZXN0KHR5cGVfMzQgPSBcIk1vZHVsZVwiKSB7XG4gICAgdGhpcy50ZXJtID0gbnVsbDtcbiAgICBpZiAodGhpcy5yZXN0LnNpemUgPT09IDApIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy50ZXJtO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0VPRih0aGlzLnBlZWsoKSkpIHtcbiAgICAgIHRoaXMudGVybSA9IG5ldyBUZXJtKFwiRU9GXCIsIHt9KTtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgcmV0dXJuIHRoaXMudGVybTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdF8zNTtcbiAgICBpZiAodHlwZV8zNCA9PT0gXCJleHByZXNzaW9uXCIpIHtcbiAgICAgIHJlc3VsdF8zNSA9IHRoaXMuZW5mb3Jlc3RFeHByZXNzaW9uTG9vcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRfMzUgPSB0aGlzLmVuZm9yZXN0TW9kdWxlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlc3Quc2l6ZSA9PT0gMCkge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdF8zNTtcbiAgfVxuICBlbmZvcmVzdE1vZHVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbmZvcmVzdEJvZHkoKTtcbiAgfVxuICBlbmZvcmVzdEJvZHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RNb2R1bGVJdGVtKCk7XG4gIH1cbiAgZW5mb3Jlc3RNb2R1bGVJdGVtKCkge1xuICAgIGxldCBsb29rYWhlYWRfMzYgPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAodGhpcy5pc0tleXdvcmQobG9va2FoZWFkXzM2LCBcImltcG9ydFwiKSkge1xuICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdEltcG9ydERlY2xhcmF0aW9uKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzS2V5d29yZChsb29rYWhlYWRfMzYsIFwiZXhwb3J0XCIpKSB7XG4gICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0RXhwb3J0RGVjbGFyYXRpb24oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RTdGF0ZW1lbnQoKTtcbiAgfVxuICBlbmZvcmVzdEV4cG9ydERlY2xhcmF0aW9uKCkge1xuICAgIGxldCBsb29rYWhlYWRfMzcgPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAodGhpcy5pc1B1bmN0dWF0b3IobG9va2FoZWFkXzM3LCBcIipcIikpIHtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgbGV0IG1vZHVsZVNwZWNpZmllciA9IHRoaXMuZW5mb3Jlc3RGcm9tQ2xhdXNlKCk7XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJFeHBvcnRBbGxGcm9tXCIsIHttb2R1bGVTcGVjaWZpZXI6IG1vZHVsZVNwZWNpZmllcn0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0JyYWNlcyhsb29rYWhlYWRfMzcpKSB7XG4gICAgICBsZXQgbmFtZWRFeHBvcnRzID0gdGhpcy5lbmZvcmVzdEV4cG9ydENsYXVzZSgpO1xuICAgICAgbGV0IG1vZHVsZVNwZWNpZmllciA9IG51bGw7XG4gICAgICBpZiAodGhpcy5pc0lkZW50aWZpZXIodGhpcy5wZWVrKCksIFwiZnJvbVwiKSkge1xuICAgICAgICBtb2R1bGVTcGVjaWZpZXIgPSB0aGlzLmVuZm9yZXN0RnJvbUNsYXVzZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiRXhwb3J0RnJvbVwiLCB7bmFtZWRFeHBvcnRzOiBuYW1lZEV4cG9ydHMsIG1vZHVsZVNwZWNpZmllcjogbW9kdWxlU3BlY2lmaWVyfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzS2V5d29yZChsb29rYWhlYWRfMzcsIFwiY2xhc3NcIikpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIkV4cG9ydFwiLCB7ZGVjbGFyYXRpb246IHRoaXMuZW5mb3Jlc3RDbGFzcyh7aXNFeHByOiBmYWxzZX0pfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzRm5EZWNsVHJhbnNmb3JtKGxvb2thaGVhZF8zNykpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIkV4cG9ydFwiLCB7ZGVjbGFyYXRpb246IHRoaXMuZW5mb3Jlc3RGdW5jdGlvbih7aXNFeHByOiBmYWxzZSwgaW5EZWZhdWx0OiBmYWxzZX0pfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzS2V5d29yZChsb29rYWhlYWRfMzcsIFwiZGVmYXVsdFwiKSkge1xuICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICBpZiAodGhpcy5pc0ZuRGVjbFRyYW5zZm9ybSh0aGlzLnBlZWsoKSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiRXhwb3J0RGVmYXVsdFwiLCB7Ym9keTogdGhpcy5lbmZvcmVzdEZ1bmN0aW9uKHtpc0V4cHI6IGZhbHNlLCBpbkRlZmF1bHQ6IHRydWV9KX0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzS2V5d29yZCh0aGlzLnBlZWsoKSwgXCJjbGFzc1wiKSkge1xuICAgICAgICByZXR1cm4gbmV3IFRlcm0oXCJFeHBvcnREZWZhdWx0XCIsIHtib2R5OiB0aGlzLmVuZm9yZXN0Q2xhc3Moe2lzRXhwcjogZmFsc2UsIGluRGVmYXVsdDogdHJ1ZX0pfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgYm9keSA9IHRoaXMuZW5mb3Jlc3RFeHByZXNzaW9uTG9vcCgpO1xuICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiRXhwb3J0RGVmYXVsdFwiLCB7Ym9keTogYm9keX0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5pc1ZhckRlY2xUcmFuc2Zvcm0obG9va2FoZWFkXzM3KSB8fCB0aGlzLmlzTGV0RGVjbFRyYW5zZm9ybShsb29rYWhlYWRfMzcpIHx8IHRoaXMuaXNDb25zdERlY2xUcmFuc2Zvcm0obG9va2FoZWFkXzM3KSB8fCB0aGlzLmlzU3ludGF4cmVjRGVjbFRyYW5zZm9ybShsb29rYWhlYWRfMzcpIHx8IHRoaXMuaXNTeW50YXhEZWNsVHJhbnNmb3JtKGxvb2thaGVhZF8zNykpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIkV4cG9ydFwiLCB7ZGVjbGFyYXRpb246IHRoaXMuZW5mb3Jlc3RWYXJpYWJsZURlY2xhcmF0aW9uKCl9KTtcbiAgICB9XG4gICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcihsb29rYWhlYWRfMzcsIFwidW5leHBlY3RlZCBzeW50YXhcIik7XG4gIH1cbiAgZW5mb3Jlc3RFeHBvcnRDbGF1c2UoKSB7XG4gICAgbGV0IGVuZl8zOCA9IG5ldyBFbmZvcmVzdGVyKHRoaXMubWF0Y2hDdXJsaWVzKCksIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgcmVzdWx0XzM5ID0gW107XG4gICAgd2hpbGUgKGVuZl8zOC5yZXN0LnNpemUgIT09IDApIHtcbiAgICAgIHJlc3VsdF8zOS5wdXNoKGVuZl8zOC5lbmZvcmVzdEV4cG9ydFNwZWNpZmllcigpKTtcbiAgICAgIGVuZl8zOC5jb25zdW1lQ29tbWEoKTtcbiAgICB9XG4gICAgcmV0dXJuIExpc3QocmVzdWx0XzM5KTtcbiAgfVxuICBlbmZvcmVzdEV4cG9ydFNwZWNpZmllcigpIHtcbiAgICBsZXQgbmFtZV80MCA9IHRoaXMuZW5mb3Jlc3RJZGVudGlmaWVyKCk7XG4gICAgaWYgKHRoaXMuaXNJZGVudGlmaWVyKHRoaXMucGVlaygpLCBcImFzXCIpKSB7XG4gICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIGxldCBleHBvcnRlZE5hbWUgPSB0aGlzLmVuZm9yZXN0SWRlbnRpZmllcigpO1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiRXhwb3J0U3BlY2lmaWVyXCIsIHtuYW1lOiBuYW1lXzQwLCBleHBvcnRlZE5hbWU6IGV4cG9ydGVkTmFtZX0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0oXCJFeHBvcnRTcGVjaWZpZXJcIiwge25hbWU6IG51bGwsIGV4cG9ydGVkTmFtZTogbmFtZV80MH0pO1xuICB9XG4gIGVuZm9yZXN0SW1wb3J0RGVjbGFyYXRpb24oKSB7XG4gICAgbGV0IGxvb2thaGVhZF80MSA9IHRoaXMucGVlaygpO1xuICAgIGxldCBkZWZhdWx0QmluZGluZ180MiA9IG51bGw7XG4gICAgbGV0IG5hbWVkSW1wb3J0c180MyA9IExpc3QoKTtcbiAgICBsZXQgZm9yU3ludGF4XzQ0ID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNTdHJpbmdMaXRlcmFsKGxvb2thaGVhZF80MSkpIHtcbiAgICAgIGxldCBtb2R1bGVTcGVjaWZpZXIgPSB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpO1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiSW1wb3J0XCIsIHtkZWZhdWx0QmluZGluZzogZGVmYXVsdEJpbmRpbmdfNDIsIG5hbWVkSW1wb3J0czogbmFtZWRJbXBvcnRzXzQzLCBtb2R1bGVTcGVjaWZpZXI6IG1vZHVsZVNwZWNpZmllcn0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0lkZW50aWZpZXIobG9va2FoZWFkXzQxKSB8fCB0aGlzLmlzS2V5d29yZChsb29rYWhlYWRfNDEpKSB7XG4gICAgICBkZWZhdWx0QmluZGluZ180MiA9IHRoaXMuZW5mb3Jlc3RCaW5kaW5nSWRlbnRpZmllcigpO1xuICAgICAgaWYgKCF0aGlzLmlzUHVuY3R1YXRvcih0aGlzLnBlZWsoKSwgXCIsXCIpKSB7XG4gICAgICAgIGxldCBtb2R1bGVTcGVjaWZpZXIgPSB0aGlzLmVuZm9yZXN0RnJvbUNsYXVzZSgpO1xuICAgICAgICBpZiAodGhpcy5pc0tleXdvcmQodGhpcy5wZWVrKCksIFwiZm9yXCIpICYmIHRoaXMuaXNJZGVudGlmaWVyKHRoaXMucGVlaygxKSwgXCJzeW50YXhcIikpIHtcbiAgICAgICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgICAgICBmb3JTeW50YXhfNDQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVGVybShcIkltcG9ydFwiLCB7ZGVmYXVsdEJpbmRpbmc6IGRlZmF1bHRCaW5kaW5nXzQyLCBtb2R1bGVTcGVjaWZpZXI6IG1vZHVsZVNwZWNpZmllciwgbmFtZWRJbXBvcnRzOiBMaXN0KCksIGZvclN5bnRheDogZm9yU3ludGF4XzQ0fSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY29uc3VtZUNvbW1hKCk7XG4gICAgbG9va2FoZWFkXzQxID0gdGhpcy5wZWVrKCk7XG4gICAgaWYgKHRoaXMuaXNCcmFjZXMobG9va2FoZWFkXzQxKSkge1xuICAgICAgbGV0IGltcG9ydHMgPSB0aGlzLmVuZm9yZXN0TmFtZWRJbXBvcnRzKCk7XG4gICAgICBsZXQgZnJvbUNsYXVzZSA9IHRoaXMuZW5mb3Jlc3RGcm9tQ2xhdXNlKCk7XG4gICAgICBpZiAodGhpcy5pc0tleXdvcmQodGhpcy5wZWVrKCksIFwiZm9yXCIpICYmIHRoaXMuaXNJZGVudGlmaWVyKHRoaXMucGVlaygxKSwgXCJzeW50YXhcIikpIHtcbiAgICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgICBmb3JTeW50YXhfNDQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiSW1wb3J0XCIsIHtkZWZhdWx0QmluZGluZzogZGVmYXVsdEJpbmRpbmdfNDIsIGZvclN5bnRheDogZm9yU3ludGF4XzQ0LCBuYW1lZEltcG9ydHM6IGltcG9ydHMsIG1vZHVsZVNwZWNpZmllcjogZnJvbUNsYXVzZX0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc1B1bmN0dWF0b3IobG9va2FoZWFkXzQxLCBcIipcIikpIHtcbiAgICAgIGxldCBuYW1lc3BhY2VCaW5kaW5nID0gdGhpcy5lbmZvcmVzdE5hbWVzcGFjZUJpbmRpbmcoKTtcbiAgICAgIGxldCBtb2R1bGVTcGVjaWZpZXIgPSB0aGlzLmVuZm9yZXN0RnJvbUNsYXVzZSgpO1xuICAgICAgaWYgKHRoaXMuaXNLZXl3b3JkKHRoaXMucGVlaygpLCBcImZvclwiKSAmJiB0aGlzLmlzSWRlbnRpZmllcih0aGlzLnBlZWsoMSksIFwic3ludGF4XCIpKSB7XG4gICAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgICAgZm9yU3ludGF4XzQ0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgVGVybShcIkltcG9ydE5hbWVzcGFjZVwiLCB7ZGVmYXVsdEJpbmRpbmc6IGRlZmF1bHRCaW5kaW5nXzQyLCBmb3JTeW50YXg6IGZvclN5bnRheF80NCwgbmFtZXNwYWNlQmluZGluZzogbmFtZXNwYWNlQmluZGluZywgbW9kdWxlU3BlY2lmaWVyOiBtb2R1bGVTcGVjaWZpZXJ9KTtcbiAgICB9XG4gICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcihsb29rYWhlYWRfNDEsIFwidW5leHBlY3RlZCBzeW50YXhcIik7XG4gIH1cbiAgZW5mb3Jlc3ROYW1lc3BhY2VCaW5kaW5nKCkge1xuICAgIHRoaXMubWF0Y2hQdW5jdHVhdG9yKFwiKlwiKTtcbiAgICB0aGlzLm1hdGNoSWRlbnRpZmllcihcImFzXCIpO1xuICAgIHJldHVybiB0aGlzLmVuZm9yZXN0QmluZGluZ0lkZW50aWZpZXIoKTtcbiAgfVxuICBlbmZvcmVzdE5hbWVkSW1wb3J0cygpIHtcbiAgICBsZXQgZW5mXzQ1ID0gbmV3IEVuZm9yZXN0ZXIodGhpcy5tYXRjaEN1cmxpZXMoKSwgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgIGxldCByZXN1bHRfNDYgPSBbXTtcbiAgICB3aGlsZSAoZW5mXzQ1LnJlc3Quc2l6ZSAhPT0gMCkge1xuICAgICAgcmVzdWx0XzQ2LnB1c2goZW5mXzQ1LmVuZm9yZXN0SW1wb3J0U3BlY2lmaWVycygpKTtcbiAgICAgIGVuZl80NS5jb25zdW1lQ29tbWEoKTtcbiAgICB9XG4gICAgcmV0dXJuIExpc3QocmVzdWx0XzQ2KTtcbiAgfVxuICBlbmZvcmVzdEltcG9ydFNwZWNpZmllcnMoKSB7XG4gICAgbGV0IGxvb2thaGVhZF80NyA9IHRoaXMucGVlaygpO1xuICAgIGxldCBuYW1lXzQ4O1xuICAgIGlmICh0aGlzLmlzSWRlbnRpZmllcihsb29rYWhlYWRfNDcpIHx8IHRoaXMuaXNLZXl3b3JkKGxvb2thaGVhZF80NykpIHtcbiAgICAgIG5hbWVfNDggPSB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIGlmICghdGhpcy5pc0lkZW50aWZpZXIodGhpcy5wZWVrKCksIFwiYXNcIikpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiSW1wb3J0U3BlY2lmaWVyXCIsIHtuYW1lOiBudWxsLCBiaW5kaW5nOiBuZXcgVGVybShcIkJpbmRpbmdJZGVudGlmaWVyXCIsIHtuYW1lOiBuYW1lXzQ4fSl9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWF0Y2hJZGVudGlmaWVyKFwiYXNcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IHRoaXMuY3JlYXRlRXJyb3IobG9va2FoZWFkXzQ3LCBcInVuZXhwZWN0ZWQgdG9rZW4gaW4gaW1wb3J0IHNwZWNpZmllclwiKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiSW1wb3J0U3BlY2lmaWVyXCIsIHtuYW1lOiBuYW1lXzQ4LCBiaW5kaW5nOiB0aGlzLmVuZm9yZXN0QmluZGluZ0lkZW50aWZpZXIoKX0pO1xuICB9XG4gIGVuZm9yZXN0RnJvbUNsYXVzZSgpIHtcbiAgICB0aGlzLm1hdGNoSWRlbnRpZmllcihcImZyb21cIik7XG4gICAgbGV0IGxvb2thaGVhZF80OSA9IHRoaXMubWF0Y2hTdHJpbmdMaXRlcmFsKCk7XG4gICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgcmV0dXJuIGxvb2thaGVhZF80OTtcbiAgfVxuICBlbmZvcmVzdFN0YXRlbWVudExpc3RJdGVtKCkge1xuICAgIGxldCBsb29rYWhlYWRfNTAgPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAodGhpcy5pc0ZuRGVjbFRyYW5zZm9ybShsb29rYWhlYWRfNTApKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdEZ1bmN0aW9uRGVjbGFyYXRpb24oe2lzRXhwcjogZmFsc2V9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNLZXl3b3JkKGxvb2thaGVhZF81MCwgXCJjbGFzc1wiKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RDbGFzcyh7aXNFeHByOiBmYWxzZX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdFN0YXRlbWVudCgpO1xuICAgIH1cbiAgfVxuICBlbmZvcmVzdFN0YXRlbWVudCgpIHtcbiAgICBsZXQgbG9va2FoZWFkXzUxID0gdGhpcy5wZWVrKCk7XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzQ29tcGlsZXRpbWVUcmFuc2Zvcm0obG9va2FoZWFkXzUxKSkge1xuICAgICAgdGhpcy5yZXN0ID0gdGhpcy5leHBhbmRNYWNybygpLmNvbmNhdCh0aGlzLnJlc3QpO1xuICAgICAgbG9va2FoZWFkXzUxID0gdGhpcy5wZWVrKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgdGhpcy5pc0JyYWNlcyhsb29rYWhlYWRfNTEpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdEJsb2NrU3RhdGVtZW50KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgdGhpcy5pc1doaWxlVHJhbnNmb3JtKGxvb2thaGVhZF81MSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0V2hpbGVTdGF0ZW1lbnQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzSWZUcmFuc2Zvcm0obG9va2FoZWFkXzUxKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RJZlN0YXRlbWVudCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNGb3JUcmFuc2Zvcm0obG9va2FoZWFkXzUxKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RGb3JTdGF0ZW1lbnQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzU3dpdGNoVHJhbnNmb3JtKGxvb2thaGVhZF81MSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0U3dpdGNoU3RhdGVtZW50KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgdGhpcy5pc0JyZWFrVHJhbnNmb3JtKGxvb2thaGVhZF81MSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0QnJlYWtTdGF0ZW1lbnQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzQ29udGludWVUcmFuc2Zvcm0obG9va2FoZWFkXzUxKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RDb250aW51ZVN0YXRlbWVudCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNEb1RyYW5zZm9ybShsb29rYWhlYWRfNTEpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdERvU3RhdGVtZW50KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgdGhpcy5pc0RlYnVnZ2VyVHJhbnNmb3JtKGxvb2thaGVhZF81MSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0RGVidWdnZXJTdGF0ZW1lbnQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzV2l0aFRyYW5zZm9ybShsb29rYWhlYWRfNTEpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdFdpdGhTdGF0ZW1lbnQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzVHJ5VHJhbnNmb3JtKGxvb2thaGVhZF81MSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0VHJ5U3RhdGVtZW50KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgdGhpcy5pc1Rocm93VHJhbnNmb3JtKGxvb2thaGVhZF81MSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0VGhyb3dTdGF0ZW1lbnQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzS2V5d29yZChsb29rYWhlYWRfNTEsIFwiY2xhc3NcIikpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0Q2xhc3Moe2lzRXhwcjogZmFsc2V9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzRm5EZWNsVHJhbnNmb3JtKGxvb2thaGVhZF81MSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0RnVuY3Rpb25EZWNsYXJhdGlvbigpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNJZGVudGlmaWVyKGxvb2thaGVhZF81MSkgJiYgdGhpcy5pc1B1bmN0dWF0b3IodGhpcy5wZWVrKDEpLCBcIjpcIikpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0TGFiZWxlZFN0YXRlbWVudCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmICh0aGlzLmlzVmFyRGVjbFRyYW5zZm9ybShsb29rYWhlYWRfNTEpIHx8IHRoaXMuaXNMZXREZWNsVHJhbnNmb3JtKGxvb2thaGVhZF81MSkgfHwgdGhpcy5pc0NvbnN0RGVjbFRyYW5zZm9ybShsb29rYWhlYWRfNTEpIHx8IHRoaXMuaXNTeW50YXhyZWNEZWNsVHJhbnNmb3JtKGxvb2thaGVhZF81MSkgfHwgdGhpcy5pc1N5bnRheERlY2xUcmFuc2Zvcm0obG9va2FoZWFkXzUxKSkpIHtcbiAgICAgIGxldCBzdG10ID0gbmV3IFRlcm0oXCJWYXJpYWJsZURlY2xhcmF0aW9uU3RhdGVtZW50XCIsIHtkZWNsYXJhdGlvbjogdGhpcy5lbmZvcmVzdFZhcmlhYmxlRGVjbGFyYXRpb24oKX0pO1xuICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgICByZXR1cm4gc3RtdDtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzUmV0dXJuU3RtdFRyYW5zZm9ybShsb29rYWhlYWRfNTEpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdFJldHVyblN0YXRlbWVudCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNQdW5jdHVhdG9yKGxvb2thaGVhZF81MSwgXCI7XCIpKSB7XG4gICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIkVtcHR5U3RhdGVtZW50XCIsIHt9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RFeHByZXNzaW9uU3RhdGVtZW50KCk7XG4gIH1cbiAgZW5mb3Jlc3RMYWJlbGVkU3RhdGVtZW50KCkge1xuICAgIGxldCBsYWJlbF81MiA9IHRoaXMubWF0Y2hJZGVudGlmaWVyKCk7XG4gICAgbGV0IHB1bmNfNTMgPSB0aGlzLm1hdGNoUHVuY3R1YXRvcihcIjpcIik7XG4gICAgbGV0IHN0bXRfNTQgPSB0aGlzLmVuZm9yZXN0U3RhdGVtZW50KCk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiTGFiZWxlZFN0YXRlbWVudFwiLCB7bGFiZWw6IGxhYmVsXzUyLCBib2R5OiBzdG10XzU0fSk7XG4gIH1cbiAgZW5mb3Jlc3RCcmVha1N0YXRlbWVudCgpIHtcbiAgICB0aGlzLm1hdGNoS2V5d29yZChcImJyZWFrXCIpO1xuICAgIGxldCBsb29rYWhlYWRfNTUgPSB0aGlzLnBlZWsoKTtcbiAgICBsZXQgbGFiZWxfNTYgPSBudWxsO1xuICAgIGlmICh0aGlzLnJlc3Quc2l6ZSA9PT0gMCB8fCB0aGlzLmlzUHVuY3R1YXRvcihsb29rYWhlYWRfNTUsIFwiO1wiKSkge1xuICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJCcmVha1N0YXRlbWVudFwiLCB7bGFiZWw6IGxhYmVsXzU2fSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzSWRlbnRpZmllcihsb29rYWhlYWRfNTUpIHx8IHRoaXMuaXNLZXl3b3JkKGxvb2thaGVhZF81NSwgXCJ5aWVsZFwiKSB8fCB0aGlzLmlzS2V5d29yZChsb29rYWhlYWRfNTUsIFwibGV0XCIpKSB7XG4gICAgICBsYWJlbF81NiA9IHRoaXMuZW5mb3Jlc3RJZGVudGlmaWVyKCk7XG4gICAgfVxuICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpO1xuICAgIHJldHVybiBuZXcgVGVybShcIkJyZWFrU3RhdGVtZW50XCIsIHtsYWJlbDogbGFiZWxfNTZ9KTtcbiAgfVxuICBlbmZvcmVzdFRyeVN0YXRlbWVudCgpIHtcbiAgICB0aGlzLm1hdGNoS2V5d29yZChcInRyeVwiKTtcbiAgICBsZXQgYm9keV81NyA9IHRoaXMuZW5mb3Jlc3RCbG9jaygpO1xuICAgIGlmICh0aGlzLmlzS2V5d29yZCh0aGlzLnBlZWsoKSwgXCJjYXRjaFwiKSkge1xuICAgICAgbGV0IGNhdGNoQ2xhdXNlID0gdGhpcy5lbmZvcmVzdENhdGNoQ2xhdXNlKCk7XG4gICAgICBpZiAodGhpcy5pc0tleXdvcmQodGhpcy5wZWVrKCksIFwiZmluYWxseVwiKSkge1xuICAgICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgICAgbGV0IGZpbmFsaXplciA9IHRoaXMuZW5mb3Jlc3RCbG9jaygpO1xuICAgICAgICByZXR1cm4gbmV3IFRlcm0oXCJUcnlGaW5hbGx5U3RhdGVtZW50XCIsIHtib2R5OiBib2R5XzU3LCBjYXRjaENsYXVzZTogY2F0Y2hDbGF1c2UsIGZpbmFsaXplcjogZmluYWxpemVyfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJUcnlDYXRjaFN0YXRlbWVudFwiLCB7Ym9keTogYm9keV81NywgY2F0Y2hDbGF1c2U6IGNhdGNoQ2xhdXNlfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzS2V5d29yZCh0aGlzLnBlZWsoKSwgXCJmaW5hbGx5XCIpKSB7XG4gICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIGxldCBmaW5hbGl6ZXIgPSB0aGlzLmVuZm9yZXN0QmxvY2soKTtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIlRyeUZpbmFsbHlTdGF0ZW1lbnRcIiwge2JvZHk6IGJvZHlfNTcsIGNhdGNoQ2xhdXNlOiBudWxsLCBmaW5hbGl6ZXI6IGZpbmFsaXplcn0pO1xuICAgIH1cbiAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKHRoaXMucGVlaygpLCBcInRyeSB3aXRoIG5vIGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gIH1cbiAgZW5mb3Jlc3RDYXRjaENsYXVzZSgpIHtcbiAgICB0aGlzLm1hdGNoS2V5d29yZChcImNhdGNoXCIpO1xuICAgIGxldCBiaW5kaW5nUGFyZW5zXzU4ID0gdGhpcy5tYXRjaFBhcmVucygpO1xuICAgIGxldCBlbmZfNTkgPSBuZXcgRW5mb3Jlc3RlcihiaW5kaW5nUGFyZW5zXzU4LCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IGJpbmRpbmdfNjAgPSBlbmZfNTkuZW5mb3Jlc3RCaW5kaW5nVGFyZ2V0KCk7XG4gICAgbGV0IGJvZHlfNjEgPSB0aGlzLmVuZm9yZXN0QmxvY2soKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDYXRjaENsYXVzZVwiLCB7YmluZGluZzogYmluZGluZ182MCwgYm9keTogYm9keV82MX0pO1xuICB9XG4gIGVuZm9yZXN0VGhyb3dTdGF0ZW1lbnQoKSB7XG4gICAgdGhpcy5tYXRjaEtleXdvcmQoXCJ0aHJvd1wiKTtcbiAgICBsZXQgZXhwcmVzc2lvbl82MiA9IHRoaXMuZW5mb3Jlc3RFeHByZXNzaW9uKCk7XG4gICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiVGhyb3dTdGF0ZW1lbnRcIiwge2V4cHJlc3Npb246IGV4cHJlc3Npb25fNjJ9KTtcbiAgfVxuICBlbmZvcmVzdFdpdGhTdGF0ZW1lbnQoKSB7XG4gICAgdGhpcy5tYXRjaEtleXdvcmQoXCJ3aXRoXCIpO1xuICAgIGxldCBvYmpQYXJlbnNfNjMgPSB0aGlzLm1hdGNoUGFyZW5zKCk7XG4gICAgbGV0IGVuZl82NCA9IG5ldyBFbmZvcmVzdGVyKG9ialBhcmVuc182MywgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgIGxldCBvYmplY3RfNjUgPSBlbmZfNjQuZW5mb3Jlc3RFeHByZXNzaW9uKCk7XG4gICAgbGV0IGJvZHlfNjYgPSB0aGlzLmVuZm9yZXN0U3RhdGVtZW50KCk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiV2l0aFN0YXRlbWVudFwiLCB7b2JqZWN0OiBvYmplY3RfNjUsIGJvZHk6IGJvZHlfNjZ9KTtcbiAgfVxuICBlbmZvcmVzdERlYnVnZ2VyU3RhdGVtZW50KCkge1xuICAgIHRoaXMubWF0Y2hLZXl3b3JkKFwiZGVidWdnZXJcIik7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRGVidWdnZXJTdGF0ZW1lbnRcIiwge30pO1xuICB9XG4gIGVuZm9yZXN0RG9TdGF0ZW1lbnQoKSB7XG4gICAgdGhpcy5tYXRjaEtleXdvcmQoXCJkb1wiKTtcbiAgICBsZXQgYm9keV82NyA9IHRoaXMuZW5mb3Jlc3RTdGF0ZW1lbnQoKTtcbiAgICB0aGlzLm1hdGNoS2V5d29yZChcIndoaWxlXCIpO1xuICAgIGxldCB0ZXN0Qm9keV82OCA9IHRoaXMubWF0Y2hQYXJlbnMoKTtcbiAgICBsZXQgZW5mXzY5ID0gbmV3IEVuZm9yZXN0ZXIodGVzdEJvZHlfNjgsIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgdGVzdF83MCA9IGVuZl82OS5lbmZvcmVzdEV4cHJlc3Npb24oKTtcbiAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJEb1doaWxlU3RhdGVtZW50XCIsIHtib2R5OiBib2R5XzY3LCB0ZXN0OiB0ZXN0XzcwfSk7XG4gIH1cbiAgZW5mb3Jlc3RDb250aW51ZVN0YXRlbWVudCgpIHtcbiAgICBsZXQga3dkXzcxID0gdGhpcy5tYXRjaEtleXdvcmQoXCJjb250aW51ZVwiKTtcbiAgICBsZXQgbG9va2FoZWFkXzcyID0gdGhpcy5wZWVrKCk7XG4gICAgbGV0IGxhYmVsXzczID0gbnVsbDtcbiAgICBpZiAodGhpcy5yZXN0LnNpemUgPT09IDAgfHwgdGhpcy5pc1B1bmN0dWF0b3IobG9va2FoZWFkXzcyLCBcIjtcIikpIHtcbiAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpO1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29udGludWVTdGF0ZW1lbnRcIiwge2xhYmVsOiBsYWJlbF83M30pO1xuICAgIH1cbiAgICBpZiAodGhpcy5saW5lTnVtYmVyRXEoa3dkXzcxLCBsb29rYWhlYWRfNzIpICYmICh0aGlzLmlzSWRlbnRpZmllcihsb29rYWhlYWRfNzIpIHx8IHRoaXMuaXNLZXl3b3JkKGxvb2thaGVhZF83MiwgXCJ5aWVsZFwiKSB8fCB0aGlzLmlzS2V5d29yZChsb29rYWhlYWRfNzIsIFwibGV0XCIpKSkge1xuICAgICAgbGFiZWxfNzMgPSB0aGlzLmVuZm9yZXN0SWRlbnRpZmllcigpO1xuICAgIH1cbiAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDb250aW51ZVN0YXRlbWVudFwiLCB7bGFiZWw6IGxhYmVsXzczfSk7XG4gIH1cbiAgZW5mb3Jlc3RTd2l0Y2hTdGF0ZW1lbnQoKSB7XG4gICAgdGhpcy5tYXRjaEtleXdvcmQoXCJzd2l0Y2hcIik7XG4gICAgbGV0IGNvbmRfNzQgPSB0aGlzLm1hdGNoUGFyZW5zKCk7XG4gICAgbGV0IGVuZl83NSA9IG5ldyBFbmZvcmVzdGVyKGNvbmRfNzQsIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgZGlzY3JpbWluYW50Xzc2ID0gZW5mXzc1LmVuZm9yZXN0RXhwcmVzc2lvbigpO1xuICAgIGxldCBib2R5Xzc3ID0gdGhpcy5tYXRjaEN1cmxpZXMoKTtcbiAgICBpZiAoYm9keV83Ny5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJTd2l0Y2hTdGF0ZW1lbnRcIiwge2Rpc2NyaW1pbmFudDogZGlzY3JpbWluYW50Xzc2LCBjYXNlczogTGlzdCgpfSk7XG4gICAgfVxuICAgIGVuZl83NSA9IG5ldyBFbmZvcmVzdGVyKGJvZHlfNzcsIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgY2FzZXNfNzggPSBlbmZfNzUuZW5mb3Jlc3RTd2l0Y2hDYXNlcygpO1xuICAgIGxldCBsb29rYWhlYWRfNzkgPSBlbmZfNzUucGVlaygpO1xuICAgIGlmIChlbmZfNzUuaXNLZXl3b3JkKGxvb2thaGVhZF83OSwgXCJkZWZhdWx0XCIpKSB7XG4gICAgICBsZXQgZGVmYXVsdENhc2UgPSBlbmZfNzUuZW5mb3Jlc3RTd2l0Y2hEZWZhdWx0KCk7XG4gICAgICBsZXQgcG9zdERlZmF1bHRDYXNlcyA9IGVuZl83NS5lbmZvcmVzdFN3aXRjaENhc2VzKCk7XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJTd2l0Y2hTdGF0ZW1lbnRXaXRoRGVmYXVsdFwiLCB7ZGlzY3JpbWluYW50OiBkaXNjcmltaW5hbnRfNzYsIHByZURlZmF1bHRDYXNlczogY2FzZXNfNzgsIGRlZmF1bHRDYXNlOiBkZWZhdWx0Q2FzZSwgcG9zdERlZmF1bHRDYXNlczogcG9zdERlZmF1bHRDYXNlc30pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0oXCJTd2l0Y2hTdGF0ZW1lbnRcIiwge2Rpc2NyaW1pbmFudDogZGlzY3JpbWluYW50Xzc2LCBjYXNlczogY2FzZXNfNzh9KTtcbiAgfVxuICBlbmZvcmVzdFN3aXRjaENhc2VzKCkge1xuICAgIGxldCBjYXNlc184MCA9IFtdO1xuICAgIHdoaWxlICghKHRoaXMucmVzdC5zaXplID09PSAwIHx8IHRoaXMuaXNLZXl3b3JkKHRoaXMucGVlaygpLCBcImRlZmF1bHRcIikpKSB7XG4gICAgICBjYXNlc184MC5wdXNoKHRoaXMuZW5mb3Jlc3RTd2l0Y2hDYXNlKCkpO1xuICAgIH1cbiAgICByZXR1cm4gTGlzdChjYXNlc184MCk7XG4gIH1cbiAgZW5mb3Jlc3RTd2l0Y2hDYXNlKCkge1xuICAgIHRoaXMubWF0Y2hLZXl3b3JkKFwiY2FzZVwiKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJTd2l0Y2hDYXNlXCIsIHt0ZXN0OiB0aGlzLmVuZm9yZXN0RXhwcmVzc2lvbigpLCBjb25zZXF1ZW50OiB0aGlzLmVuZm9yZXN0U3dpdGNoQ2FzZUJvZHkoKX0pO1xuICB9XG4gIGVuZm9yZXN0U3dpdGNoQ2FzZUJvZHkoKSB7XG4gICAgdGhpcy5tYXRjaFB1bmN0dWF0b3IoXCI6XCIpO1xuICAgIHJldHVybiB0aGlzLmVuZm9yZXN0U3RhdGVtZW50TGlzdEluU3dpdGNoQ2FzZUJvZHkoKTtcbiAgfVxuICBlbmZvcmVzdFN0YXRlbWVudExpc3RJblN3aXRjaENhc2VCb2R5KCkge1xuICAgIGxldCByZXN1bHRfODEgPSBbXTtcbiAgICB3aGlsZSAoISh0aGlzLnJlc3Quc2l6ZSA9PT0gMCB8fCB0aGlzLmlzS2V5d29yZCh0aGlzLnBlZWsoKSwgXCJkZWZhdWx0XCIpIHx8IHRoaXMuaXNLZXl3b3JkKHRoaXMucGVlaygpLCBcImNhc2VcIikpKSB7XG4gICAgICByZXN1bHRfODEucHVzaCh0aGlzLmVuZm9yZXN0U3RhdGVtZW50TGlzdEl0ZW0oKSk7XG4gICAgfVxuICAgIHJldHVybiBMaXN0KHJlc3VsdF84MSk7XG4gIH1cbiAgZW5mb3Jlc3RTd2l0Y2hEZWZhdWx0KCkge1xuICAgIHRoaXMubWF0Y2hLZXl3b3JkKFwiZGVmYXVsdFwiKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJTd2l0Y2hEZWZhdWx0XCIsIHtjb25zZXF1ZW50OiB0aGlzLmVuZm9yZXN0U3dpdGNoQ2FzZUJvZHkoKX0pO1xuICB9XG4gIGVuZm9yZXN0Rm9yU3RhdGVtZW50KCkge1xuICAgIHRoaXMubWF0Y2hLZXl3b3JkKFwiZm9yXCIpO1xuICAgIGxldCBjb25kXzgyID0gdGhpcy5tYXRjaFBhcmVucygpO1xuICAgIGxldCBlbmZfODMgPSBuZXcgRW5mb3Jlc3Rlcihjb25kXzgyLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IGxvb2thaGVhZF84NCwgdGVzdF84NSwgaW5pdF84NiwgcmlnaHRfODcsIHR5cGVfODgsIGxlZnRfODksIHVwZGF0ZV85MDtcbiAgICBpZiAoZW5mXzgzLmlzUHVuY3R1YXRvcihlbmZfODMucGVlaygpLCBcIjtcIikpIHtcbiAgICAgIGVuZl84My5hZHZhbmNlKCk7XG4gICAgICBpZiAoIWVuZl84My5pc1B1bmN0dWF0b3IoZW5mXzgzLnBlZWsoKSwgXCI7XCIpKSB7XG4gICAgICAgIHRlc3RfODUgPSBlbmZfODMuZW5mb3Jlc3RFeHByZXNzaW9uKCk7XG4gICAgICB9XG4gICAgICBlbmZfODMubWF0Y2hQdW5jdHVhdG9yKFwiO1wiKTtcbiAgICAgIGlmIChlbmZfODMucmVzdC5zaXplICE9PSAwKSB7XG4gICAgICAgIHJpZ2h0Xzg3ID0gZW5mXzgzLmVuZm9yZXN0RXhwcmVzc2lvbigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiRm9yU3RhdGVtZW50XCIsIHtpbml0OiBudWxsLCB0ZXN0OiB0ZXN0Xzg1LCB1cGRhdGU6IHJpZ2h0Xzg3LCBib2R5OiB0aGlzLmVuZm9yZXN0U3RhdGVtZW50KCl9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9va2FoZWFkXzg0ID0gZW5mXzgzLnBlZWsoKTtcbiAgICAgIGlmIChlbmZfODMuaXNWYXJEZWNsVHJhbnNmb3JtKGxvb2thaGVhZF84NCkgfHwgZW5mXzgzLmlzTGV0RGVjbFRyYW5zZm9ybShsb29rYWhlYWRfODQpIHx8IGVuZl84My5pc0NvbnN0RGVjbFRyYW5zZm9ybShsb29rYWhlYWRfODQpKSB7XG4gICAgICAgIGluaXRfODYgPSBlbmZfODMuZW5mb3Jlc3RWYXJpYWJsZURlY2xhcmF0aW9uKCk7XG4gICAgICAgIGxvb2thaGVhZF84NCA9IGVuZl84My5wZWVrKCk7XG4gICAgICAgIGlmICh0aGlzLmlzS2V5d29yZChsb29rYWhlYWRfODQsIFwiaW5cIikgfHwgdGhpcy5pc0lkZW50aWZpZXIobG9va2FoZWFkXzg0LCBcIm9mXCIpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNLZXl3b3JkKGxvb2thaGVhZF84NCwgXCJpblwiKSkge1xuICAgICAgICAgICAgZW5mXzgzLmFkdmFuY2UoKTtcbiAgICAgICAgICAgIHJpZ2h0Xzg3ID0gZW5mXzgzLmVuZm9yZXN0RXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgdHlwZV84OCA9IFwiRm9ySW5TdGF0ZW1lbnRcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNJZGVudGlmaWVyKGxvb2thaGVhZF84NCwgXCJvZlwiKSkge1xuICAgICAgICAgICAgZW5mXzgzLmFkdmFuY2UoKTtcbiAgICAgICAgICAgIHJpZ2h0Xzg3ID0gZW5mXzgzLmVuZm9yZXN0RXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgdHlwZV84OCA9IFwiRm9yT2ZTdGF0ZW1lbnRcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBUZXJtKHR5cGVfODgsIHtsZWZ0OiBpbml0Xzg2LCByaWdodDogcmlnaHRfODcsIGJvZHk6IHRoaXMuZW5mb3Jlc3RTdGF0ZW1lbnQoKX0pO1xuICAgICAgICB9XG4gICAgICAgIGVuZl84My5tYXRjaFB1bmN0dWF0b3IoXCI7XCIpO1xuICAgICAgICBpZiAoZW5mXzgzLmlzUHVuY3R1YXRvcihlbmZfODMucGVlaygpLCBcIjtcIikpIHtcbiAgICAgICAgICBlbmZfODMuYWR2YW5jZSgpO1xuICAgICAgICAgIHRlc3RfODUgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRlc3RfODUgPSBlbmZfODMuZW5mb3Jlc3RFeHByZXNzaW9uKCk7XG4gICAgICAgICAgZW5mXzgzLm1hdGNoUHVuY3R1YXRvcihcIjtcIik7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXzkwID0gZW5mXzgzLmVuZm9yZXN0RXhwcmVzc2lvbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuaXNLZXl3b3JkKGVuZl84My5wZWVrKDEpLCBcImluXCIpIHx8IHRoaXMuaXNJZGVudGlmaWVyKGVuZl84My5wZWVrKDEpLCBcIm9mXCIpKSB7XG4gICAgICAgICAgbGVmdF84OSA9IGVuZl84My5lbmZvcmVzdEJpbmRpbmdJZGVudGlmaWVyKCk7XG4gICAgICAgICAgbGV0IGtpbmQgPSBlbmZfODMuYWR2YW5jZSgpO1xuICAgICAgICAgIGlmICh0aGlzLmlzS2V5d29yZChraW5kLCBcImluXCIpKSB7XG4gICAgICAgICAgICB0eXBlXzg4ID0gXCJGb3JJblN0YXRlbWVudFwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0eXBlXzg4ID0gXCJGb3JPZlN0YXRlbWVudFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICByaWdodF84NyA9IGVuZl84My5lbmZvcmVzdEV4cHJlc3Npb24oKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFRlcm0odHlwZV84OCwge2xlZnQ6IGxlZnRfODksIHJpZ2h0OiByaWdodF84NywgYm9keTogdGhpcy5lbmZvcmVzdFN0YXRlbWVudCgpfSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5pdF84NiA9IGVuZl84My5lbmZvcmVzdEV4cHJlc3Npb24oKTtcbiAgICAgICAgZW5mXzgzLm1hdGNoUHVuY3R1YXRvcihcIjtcIik7XG4gICAgICAgIGlmIChlbmZfODMuaXNQdW5jdHVhdG9yKGVuZl84My5wZWVrKCksIFwiO1wiKSkge1xuICAgICAgICAgIGVuZl84My5hZHZhbmNlKCk7XG4gICAgICAgICAgdGVzdF84NSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGVzdF84NSA9IGVuZl84My5lbmZvcmVzdEV4cHJlc3Npb24oKTtcbiAgICAgICAgICBlbmZfODMubWF0Y2hQdW5jdHVhdG9yKFwiO1wiKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfOTAgPSBlbmZfODMuZW5mb3Jlc3RFeHByZXNzaW9uKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJGb3JTdGF0ZW1lbnRcIiwge2luaXQ6IGluaXRfODYsIHRlc3Q6IHRlc3RfODUsIHVwZGF0ZTogdXBkYXRlXzkwLCBib2R5OiB0aGlzLmVuZm9yZXN0U3RhdGVtZW50KCl9KTtcbiAgICB9XG4gIH1cbiAgZW5mb3Jlc3RJZlN0YXRlbWVudCgpIHtcbiAgICB0aGlzLm1hdGNoS2V5d29yZChcImlmXCIpO1xuICAgIGxldCBjb25kXzkxID0gdGhpcy5tYXRjaFBhcmVucygpO1xuICAgIGxldCBlbmZfOTIgPSBuZXcgRW5mb3Jlc3Rlcihjb25kXzkxLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IGxvb2thaGVhZF85MyA9IGVuZl85Mi5wZWVrKCk7XG4gICAgbGV0IHRlc3RfOTQgPSBlbmZfOTIuZW5mb3Jlc3RFeHByZXNzaW9uKCk7XG4gICAgaWYgKHRlc3RfOTQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IGVuZl85Mi5jcmVhdGVFcnJvcihsb29rYWhlYWRfOTMsIFwiZXhwZWN0aW5nIGFuIGV4cHJlc3Npb25cIik7XG4gICAgfVxuICAgIGxldCBjb25zZXF1ZW50Xzk1ID0gdGhpcy5lbmZvcmVzdFN0YXRlbWVudCgpO1xuICAgIGxldCBhbHRlcm5hdGVfOTYgPSBudWxsO1xuICAgIGlmICh0aGlzLmlzS2V5d29yZCh0aGlzLnBlZWsoKSwgXCJlbHNlXCIpKSB7XG4gICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIGFsdGVybmF0ZV85NiA9IHRoaXMuZW5mb3Jlc3RTdGF0ZW1lbnQoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiSWZTdGF0ZW1lbnRcIiwge3Rlc3Q6IHRlc3RfOTQsIGNvbnNlcXVlbnQ6IGNvbnNlcXVlbnRfOTUsIGFsdGVybmF0ZTogYWx0ZXJuYXRlXzk2fSk7XG4gIH1cbiAgZW5mb3Jlc3RXaGlsZVN0YXRlbWVudCgpIHtcbiAgICB0aGlzLm1hdGNoS2V5d29yZChcIndoaWxlXCIpO1xuICAgIGxldCBjb25kXzk3ID0gdGhpcy5tYXRjaFBhcmVucygpO1xuICAgIGxldCBlbmZfOTggPSBuZXcgRW5mb3Jlc3Rlcihjb25kXzk3LCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IGxvb2thaGVhZF85OSA9IGVuZl85OC5wZWVrKCk7XG4gICAgbGV0IHRlc3RfMTAwID0gZW5mXzk4LmVuZm9yZXN0RXhwcmVzc2lvbigpO1xuICAgIGlmICh0ZXN0XzEwMCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgZW5mXzk4LmNyZWF0ZUVycm9yKGxvb2thaGVhZF85OSwgXCJleHBlY3RpbmcgYW4gZXhwcmVzc2lvblwiKTtcbiAgICB9XG4gICAgbGV0IGJvZHlfMTAxID0gdGhpcy5lbmZvcmVzdFN0YXRlbWVudCgpO1xuICAgIHJldHVybiBuZXcgVGVybShcIldoaWxlU3RhdGVtZW50XCIsIHt0ZXN0OiB0ZXN0XzEwMCwgYm9keTogYm9keV8xMDF9KTtcbiAgfVxuICBlbmZvcmVzdEJsb2NrU3RhdGVtZW50KCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkJsb2NrU3RhdGVtZW50XCIsIHtibG9jazogdGhpcy5lbmZvcmVzdEJsb2NrKCl9KTtcbiAgfVxuICBlbmZvcmVzdEJsb2NrKCkge1xuICAgIGxldCBiXzEwMiA9IHRoaXMubWF0Y2hDdXJsaWVzKCk7XG4gICAgbGV0IGJvZHlfMTAzID0gW107XG4gICAgbGV0IGVuZl8xMDQgPSBuZXcgRW5mb3Jlc3RlcihiXzEwMiwgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgIHdoaWxlIChlbmZfMTA0LnJlc3Quc2l6ZSAhPT0gMCkge1xuICAgICAgbGV0IGxvb2thaGVhZCA9IGVuZl8xMDQucGVlaygpO1xuICAgICAgbGV0IHN0bXQgPSBlbmZfMTA0LmVuZm9yZXN0U3RhdGVtZW50KCk7XG4gICAgICBpZiAoc3RtdCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IGVuZl8xMDQuY3JlYXRlRXJyb3IobG9va2FoZWFkLCBcIm5vdCBhIHN0YXRlbWVudFwiKTtcbiAgICAgIH1cbiAgICAgIGJvZHlfMTAzLnB1c2goc3RtdCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGVybShcIkJsb2NrXCIsIHtzdGF0ZW1lbnRzOiBMaXN0KGJvZHlfMTAzKX0pO1xuICB9XG4gIGVuZm9yZXN0Q2xhc3Moe2lzRXhwciwgaW5EZWZhdWx0fSkge1xuICAgIGxldCBrd18xMDUgPSB0aGlzLmFkdmFuY2UoKTtcbiAgICBsZXQgbmFtZV8xMDYgPSBudWxsLCBzdXByXzEwNyA9IG51bGw7XG4gICAgbGV0IHR5cGVfMTA4ID0gaXNFeHByID8gXCJDbGFzc0V4cHJlc3Npb25cIiA6IFwiQ2xhc3NEZWNsYXJhdGlvblwiO1xuICAgIGlmICh0aGlzLmlzSWRlbnRpZmllcih0aGlzLnBlZWsoKSkpIHtcbiAgICAgIG5hbWVfMTA2ID0gdGhpcy5lbmZvcmVzdEJpbmRpbmdJZGVudGlmaWVyKCk7XG4gICAgfSBlbHNlIGlmICghaXNFeHByKSB7XG4gICAgICBpZiAoaW5EZWZhdWx0KSB7XG4gICAgICAgIG5hbWVfMTA2ID0gbmV3IFRlcm0oXCJCaW5kaW5nSWRlbnRpZmllclwiLCB7bmFtZTogU3ludGF4LmZyb21JZGVudGlmaWVyKFwiX2RlZmF1bHRcIiwga3dfMTA1KX0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcih0aGlzLnBlZWsoKSwgXCJ1bmV4cGVjdGVkIHN5bnRheFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuaXNLZXl3b3JkKHRoaXMucGVlaygpLCBcImV4dGVuZHNcIikpIHtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgc3Vwcl8xMDcgPSB0aGlzLmVuZm9yZXN0RXhwcmVzc2lvbkxvb3AoKTtcbiAgICB9XG4gICAgbGV0IGVsZW1lbnRzXzEwOSA9IFtdO1xuICAgIGxldCBlbmZfMTEwID0gbmV3IEVuZm9yZXN0ZXIodGhpcy5tYXRjaEN1cmxpZXMoKSwgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgIHdoaWxlIChlbmZfMTEwLnJlc3Quc2l6ZSAhPT0gMCkge1xuICAgICAgaWYgKGVuZl8xMTAuaXNQdW5jdHVhdG9yKGVuZl8xMTAucGVlaygpLCBcIjtcIikpIHtcbiAgICAgICAgZW5mXzExMC5hZHZhbmNlKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IGlzU3RhdGljID0gZmFsc2U7XG4gICAgICBsZXQge21ldGhvZE9yS2V5LCBraW5kfSA9IGVuZl8xMTAuZW5mb3Jlc3RNZXRob2REZWZpbml0aW9uKCk7XG4gICAgICBpZiAoa2luZCA9PT0gXCJpZGVudGlmaWVyXCIgJiYgbWV0aG9kT3JLZXkudmFsdWUudmFsKCkgPT09IFwic3RhdGljXCIpIHtcbiAgICAgICAgaXNTdGF0aWMgPSB0cnVlO1xuICAgICAgICAoe21ldGhvZE9yS2V5LCBraW5kfSA9IGVuZl8xMTAuZW5mb3Jlc3RNZXRob2REZWZpbml0aW9uKCkpO1xuICAgICAgfVxuICAgICAgaWYgKGtpbmQgPT09IFwibWV0aG9kXCIpIHtcbiAgICAgICAgZWxlbWVudHNfMTA5LnB1c2gobmV3IFRlcm0oXCJDbGFzc0VsZW1lbnRcIiwge2lzU3RhdGljOiBpc1N0YXRpYywgbWV0aG9kOiBtZXRob2RPcktleX0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuY3JlYXRlRXJyb3IoZW5mXzExMC5wZWVrKCksIFwiT25seSBtZXRob2RzIGFyZSBhbGxvd2VkIGluIGNsYXNzZXNcIik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGVybSh0eXBlXzEwOCwge25hbWU6IG5hbWVfMTA2LCBzdXBlcjogc3Vwcl8xMDcsIGVsZW1lbnRzOiBMaXN0KGVsZW1lbnRzXzEwOSl9KTtcbiAgfVxuICBlbmZvcmVzdEJpbmRpbmdUYXJnZXQoe2FsbG93UHVuY3R1YXRvcn0gPSB7fSkge1xuICAgIGxldCBsb29rYWhlYWRfMTExID0gdGhpcy5wZWVrKCk7XG4gICAgaWYgKHRoaXMuaXNJZGVudGlmaWVyKGxvb2thaGVhZF8xMTEpIHx8IHRoaXMuaXNLZXl3b3JkKGxvb2thaGVhZF8xMTEpIHx8IGFsbG93UHVuY3R1YXRvciAmJiB0aGlzLmlzUHVuY3R1YXRvcihsb29rYWhlYWRfMTExKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RCaW5kaW5nSWRlbnRpZmllcih7YWxsb3dQdW5jdHVhdG9yOiBhbGxvd1B1bmN0dWF0b3J9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNCcmFja2V0cyhsb29rYWhlYWRfMTExKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RBcnJheUJpbmRpbmcoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNCcmFjZXMobG9va2FoZWFkXzExMSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0T2JqZWN0QmluZGluZygpO1xuICAgIH1cbiAgICBhc3NlcnQoZmFsc2UsIFwibm90IGltcGxlbWVudGVkIHlldFwiKTtcbiAgfVxuICBlbmZvcmVzdE9iamVjdEJpbmRpbmcoKSB7XG4gICAgbGV0IGVuZl8xMTIgPSBuZXcgRW5mb3Jlc3Rlcih0aGlzLm1hdGNoQ3VybGllcygpLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IHByb3BlcnRpZXNfMTEzID0gW107XG4gICAgd2hpbGUgKGVuZl8xMTIucmVzdC5zaXplICE9PSAwKSB7XG4gICAgICBwcm9wZXJ0aWVzXzExMy5wdXNoKGVuZl8xMTIuZW5mb3Jlc3RCaW5kaW5nUHJvcGVydHkoKSk7XG4gICAgICBlbmZfMTEyLmNvbnN1bWVDb21tYSgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0oXCJPYmplY3RCaW5kaW5nXCIsIHtwcm9wZXJ0aWVzOiBMaXN0KHByb3BlcnRpZXNfMTEzKX0pO1xuICB9XG4gIGVuZm9yZXN0QmluZGluZ1Byb3BlcnR5KCkge1xuICAgIGxldCBsb29rYWhlYWRfMTE0ID0gdGhpcy5wZWVrKCk7XG4gICAgbGV0IHtuYW1lLCBiaW5kaW5nfSA9IHRoaXMuZW5mb3Jlc3RQcm9wZXJ0eU5hbWUoKTtcbiAgICBpZiAodGhpcy5pc0lkZW50aWZpZXIobG9va2FoZWFkXzExNCkgfHwgdGhpcy5pc0tleXdvcmQobG9va2FoZWFkXzExNCwgXCJsZXRcIikgfHwgdGhpcy5pc0tleXdvcmQobG9va2FoZWFkXzExNCwgXCJ5aWVsZFwiKSkge1xuICAgICAgaWYgKCF0aGlzLmlzUHVuY3R1YXRvcih0aGlzLnBlZWsoKSwgXCI6XCIpKSB7XG4gICAgICAgIGxldCBkZWZhdWx0VmFsdWUgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5pc0Fzc2lnbih0aGlzLnBlZWsoKSkpIHtcbiAgICAgICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgICAgICBsZXQgZXhwciA9IHRoaXMuZW5mb3Jlc3RFeHByZXNzaW9uTG9vcCgpO1xuICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IGV4cHI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiQmluZGluZ1Byb3BlcnR5SWRlbnRpZmllclwiLCB7YmluZGluZzogYmluZGluZywgaW5pdDogZGVmYXVsdFZhbHVlfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubWF0Y2hQdW5jdHVhdG9yKFwiOlwiKTtcbiAgICBiaW5kaW5nID0gdGhpcy5lbmZvcmVzdEJpbmRpbmdFbGVtZW50KCk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQmluZGluZ1Byb3BlcnR5UHJvcGVydHlcIiwge25hbWU6IG5hbWUsIGJpbmRpbmc6IGJpbmRpbmd9KTtcbiAgfVxuICBlbmZvcmVzdEFycmF5QmluZGluZygpIHtcbiAgICBsZXQgYnJhY2tldF8xMTUgPSB0aGlzLm1hdGNoU3F1YXJlcygpO1xuICAgIGxldCBlbmZfMTE2ID0gbmV3IEVuZm9yZXN0ZXIoYnJhY2tldF8xMTUsIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgZWxlbWVudHNfMTE3ID0gW10sIHJlc3RFbGVtZW50XzExOCA9IG51bGw7XG4gICAgd2hpbGUgKGVuZl8xMTYucmVzdC5zaXplICE9PSAwKSB7XG4gICAgICBsZXQgZWw7XG4gICAgICBpZiAoZW5mXzExNi5pc1B1bmN0dWF0b3IoZW5mXzExNi5wZWVrKCksIFwiLFwiKSkge1xuICAgICAgICBlbmZfMTE2LmNvbnN1bWVDb21tYSgpO1xuICAgICAgICBlbCA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZW5mXzExNi5pc1B1bmN0dWF0b3IoZW5mXzExNi5wZWVrKCksIFwiLi4uXCIpKSB7XG4gICAgICAgICAgZW5mXzExNi5hZHZhbmNlKCk7XG4gICAgICAgICAgcmVzdEVsZW1lbnRfMTE4ID0gZW5mXzExNi5lbmZvcmVzdEJpbmRpbmdUYXJnZXQoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbCA9IGVuZl8xMTYuZW5mb3Jlc3RCaW5kaW5nRWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgICAgIGVuZl8xMTYuY29uc3VtZUNvbW1hKCk7XG4gICAgICB9XG4gICAgICBlbGVtZW50c18xMTcucHVzaChlbCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGVybShcIkFycmF5QmluZGluZ1wiLCB7ZWxlbWVudHM6IExpc3QoZWxlbWVudHNfMTE3KSwgcmVzdEVsZW1lbnQ6IHJlc3RFbGVtZW50XzExOH0pO1xuICB9XG4gIGVuZm9yZXN0QmluZGluZ0VsZW1lbnQoKSB7XG4gICAgbGV0IGJpbmRpbmdfMTE5ID0gdGhpcy5lbmZvcmVzdEJpbmRpbmdUYXJnZXQoKTtcbiAgICBpZiAodGhpcy5pc0Fzc2lnbih0aGlzLnBlZWsoKSkpIHtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgbGV0IGluaXQgPSB0aGlzLmVuZm9yZXN0RXhwcmVzc2lvbkxvb3AoKTtcbiAgICAgIGJpbmRpbmdfMTE5ID0gbmV3IFRlcm0oXCJCaW5kaW5nV2l0aERlZmF1bHRcIiwge2JpbmRpbmc6IGJpbmRpbmdfMTE5LCBpbml0OiBpbml0fSk7XG4gICAgfVxuICAgIHJldHVybiBiaW5kaW5nXzExOTtcbiAgfVxuICBlbmZvcmVzdEJpbmRpbmdJZGVudGlmaWVyKHthbGxvd1B1bmN0dWF0b3J9ID0ge30pIHtcbiAgICBsZXQgbmFtZV8xMjA7XG4gICAgaWYgKGFsbG93UHVuY3R1YXRvciAmJiB0aGlzLmlzUHVuY3R1YXRvcih0aGlzLnBlZWsoKSkpIHtcbiAgICAgIG5hbWVfMTIwID0gdGhpcy5lbmZvcmVzdFB1bmN0dWF0b3IoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZV8xMjAgPSB0aGlzLmVuZm9yZXN0SWRlbnRpZmllcigpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nSWRlbnRpZmllclwiLCB7bmFtZTogbmFtZV8xMjB9KTtcbiAgfVxuICBlbmZvcmVzdFB1bmN0dWF0b3IoKSB7XG4gICAgbGV0IGxvb2thaGVhZF8xMjEgPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAodGhpcy5pc1B1bmN0dWF0b3IobG9va2FoZWFkXzEyMSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmFkdmFuY2UoKTtcbiAgICB9XG4gICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcihsb29rYWhlYWRfMTIxLCBcImV4cGVjdGluZyBhIHB1bmN0dWF0b3JcIik7XG4gIH1cbiAgZW5mb3Jlc3RJZGVudGlmaWVyKCkge1xuICAgIGxldCBsb29rYWhlYWRfMTIyID0gdGhpcy5wZWVrKCk7XG4gICAgaWYgKHRoaXMuaXNJZGVudGlmaWVyKGxvb2thaGVhZF8xMjIpIHx8IHRoaXMuaXNLZXl3b3JkKGxvb2thaGVhZF8xMjIpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hZHZhbmNlKCk7XG4gICAgfVxuICAgIHRocm93IHRoaXMuY3JlYXRlRXJyb3IobG9va2FoZWFkXzEyMiwgXCJleHBlY3RpbmcgYW4gaWRlbnRpZmllclwiKTtcbiAgfVxuICBlbmZvcmVzdFJldHVyblN0YXRlbWVudCgpIHtcbiAgICBsZXQga3dfMTIzID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgbGV0IGxvb2thaGVhZF8xMjQgPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAodGhpcy5yZXN0LnNpemUgPT09IDAgfHwgbG9va2FoZWFkXzEyNCAmJiAhdGhpcy5saW5lTnVtYmVyRXEoa3dfMTIzLCBsb29rYWhlYWRfMTI0KSkge1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiUmV0dXJuU3RhdGVtZW50XCIsIHtleHByZXNzaW9uOiBudWxsfSk7XG4gICAgfVxuICAgIGxldCB0ZXJtXzEyNSA9IG51bGw7XG4gICAgaWYgKCF0aGlzLmlzUHVuY3R1YXRvcihsb29rYWhlYWRfMTI0LCBcIjtcIikpIHtcbiAgICAgIHRlcm1fMTI1ID0gdGhpcy5lbmZvcmVzdEV4cHJlc3Npb24oKTtcbiAgICAgIGV4cGVjdCh0ZXJtXzEyNSAhPSBudWxsLCBcIkV4cGVjdGluZyBhbiBleHByZXNzaW9uIHRvIGZvbGxvdyByZXR1cm4ga2V5d29yZFwiLCBsb29rYWhlYWRfMTI0LCB0aGlzLnJlc3QpO1xuICAgIH1cbiAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJSZXR1cm5TdGF0ZW1lbnRcIiwge2V4cHJlc3Npb246IHRlcm1fMTI1fSk7XG4gIH1cbiAgZW5mb3Jlc3RWYXJpYWJsZURlY2xhcmF0aW9uKCkge1xuICAgIGxldCBraW5kXzEyNjtcbiAgICBsZXQgbG9va2FoZWFkXzEyNyA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIGxldCBraW5kU3luXzEyOCA9IGxvb2thaGVhZF8xMjc7XG4gICAgaWYgKGtpbmRTeW5fMTI4ICYmIHRoaXMuY29udGV4dC5lbnYuZ2V0KGtpbmRTeW5fMTI4LnJlc29sdmUoKSkgPT09IFZhcmlhYmxlRGVjbFRyYW5zZm9ybSkge1xuICAgICAga2luZF8xMjYgPSBcInZhclwiO1xuICAgIH0gZWxzZSBpZiAoa2luZFN5bl8xMjggJiYgdGhpcy5jb250ZXh0LmVudi5nZXQoa2luZFN5bl8xMjgucmVzb2x2ZSgpKSA9PT0gTGV0RGVjbFRyYW5zZm9ybSkge1xuICAgICAga2luZF8xMjYgPSBcImxldFwiO1xuICAgIH0gZWxzZSBpZiAoa2luZFN5bl8xMjggJiYgdGhpcy5jb250ZXh0LmVudi5nZXQoa2luZFN5bl8xMjgucmVzb2x2ZSgpKSA9PT0gQ29uc3REZWNsVHJhbnNmb3JtKSB7XG4gICAgICBraW5kXzEyNiA9IFwiY29uc3RcIjtcbiAgICB9IGVsc2UgaWYgKGtpbmRTeW5fMTI4ICYmIHRoaXMuY29udGV4dC5lbnYuZ2V0KGtpbmRTeW5fMTI4LnJlc29sdmUoKSkgPT09IFN5bnRheERlY2xUcmFuc2Zvcm0pIHtcbiAgICAgIGtpbmRfMTI2ID0gXCJzeW50YXhcIjtcbiAgICB9IGVsc2UgaWYgKGtpbmRTeW5fMTI4ICYmIHRoaXMuY29udGV4dC5lbnYuZ2V0KGtpbmRTeW5fMTI4LnJlc29sdmUoKSkgPT09IFN5bnRheHJlY0RlY2xUcmFuc2Zvcm0pIHtcbiAgICAgIGtpbmRfMTI2ID0gXCJzeW50YXhyZWNcIjtcbiAgICB9XG4gICAgbGV0IGRlY2xzXzEyOSA9IExpc3QoKTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgbGV0IHRlcm0gPSB0aGlzLmVuZm9yZXN0VmFyaWFibGVEZWNsYXJhdG9yKHtpc1N5bnRheDoga2luZF8xMjYgPT09IFwic3ludGF4XCIgfHwga2luZF8xMjYgPT09IFwic3ludGF4cmVjXCJ9KTtcbiAgICAgIGxldCBsb29rYWhlYWRfMTI3ID0gdGhpcy5wZWVrKCk7XG4gICAgICBkZWNsc18xMjkgPSBkZWNsc18xMjkuY29uY2F0KHRlcm0pO1xuICAgICAgaWYgKHRoaXMuaXNQdW5jdHVhdG9yKGxvb2thaGVhZF8xMjcsIFwiLFwiKSkge1xuICAgICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0oXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIsIHtraW5kOiBraW5kXzEyNiwgZGVjbGFyYXRvcnM6IGRlY2xzXzEyOX0pO1xuICB9XG4gIGVuZm9yZXN0VmFyaWFibGVEZWNsYXJhdG9yKHtpc1N5bnRheH0pIHtcbiAgICBsZXQgaWRfMTMwID0gdGhpcy5lbmZvcmVzdEJpbmRpbmdUYXJnZXQoe2FsbG93UHVuY3R1YXRvcjogaXNTeW50YXh9KTtcbiAgICBsZXQgbG9va2FoZWFkXzEzMSA9IHRoaXMucGVlaygpO1xuICAgIGxldCBpbml0XzEzMiwgcmVzdF8xMzM7XG4gICAgaWYgKHRoaXMuaXNQdW5jdHVhdG9yKGxvb2thaGVhZF8xMzEsIFwiPVwiKSkge1xuICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICBsZXQgZW5mID0gbmV3IEVuZm9yZXN0ZXIodGhpcy5yZXN0LCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgICBpbml0XzEzMiA9IGVuZi5lbmZvcmVzdChcImV4cHJlc3Npb25cIik7XG4gICAgICB0aGlzLnJlc3QgPSBlbmYucmVzdDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5pdF8xMzIgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0oXCJWYXJpYWJsZURlY2xhcmF0b3JcIiwge2JpbmRpbmc6IGlkXzEzMCwgaW5pdDogaW5pdF8xMzJ9KTtcbiAgfVxuICBlbmZvcmVzdEV4cHJlc3Npb25TdGF0ZW1lbnQoKSB7XG4gICAgbGV0IHN0YXJ0XzEzNCA9IHRoaXMucmVzdC5nZXQoMCk7XG4gICAgbGV0IGV4cHJfMTM1ID0gdGhpcy5lbmZvcmVzdEV4cHJlc3Npb24oKTtcbiAgICBpZiAoZXhwcl8xMzUgPT09IG51bGwpIHtcbiAgICAgIHRocm93IHRoaXMuY3JlYXRlRXJyb3Ioc3RhcnRfMTM0LCBcIm5vdCBhIHZhbGlkIGV4cHJlc3Npb25cIik7XG4gICAgfVxuICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpO1xuICAgIHJldHVybiBuZXcgVGVybShcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiwge2V4cHJlc3Npb246IGV4cHJfMTM1fSk7XG4gIH1cbiAgZW5mb3Jlc3RFeHByZXNzaW9uKCkge1xuICAgIGxldCBsZWZ0XzEzNiA9IHRoaXMuZW5mb3Jlc3RFeHByZXNzaW9uTG9vcCgpO1xuICAgIGxldCBsb29rYWhlYWRfMTM3ID0gdGhpcy5wZWVrKCk7XG4gICAgaWYgKHRoaXMuaXNQdW5jdHVhdG9yKGxvb2thaGVhZF8xMzcsIFwiLFwiKSkge1xuICAgICAgd2hpbGUgKHRoaXMucmVzdC5zaXplICE9PSAwKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1B1bmN0dWF0b3IodGhpcy5wZWVrKCksIFwiLFwiKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvcGVyYXRvciA9IHRoaXMuYWR2YW5jZSgpO1xuICAgICAgICBsZXQgcmlnaHQgPSB0aGlzLmVuZm9yZXN0RXhwcmVzc2lvbkxvb3AoKTtcbiAgICAgICAgbGVmdF8xMzYgPSBuZXcgVGVybShcIkJpbmFyeUV4cHJlc3Npb25cIiwge2xlZnQ6IGxlZnRfMTM2LCBvcGVyYXRvcjogb3BlcmF0b3IsIHJpZ2h0OiByaWdodH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnRlcm0gPSBudWxsO1xuICAgIHJldHVybiBsZWZ0XzEzNjtcbiAgfVxuICBlbmZvcmVzdEV4cHJlc3Npb25Mb29wKCkge1xuICAgIHRoaXMudGVybSA9IG51bGw7XG4gICAgdGhpcy5vcEN0eCA9IHtwcmVjOiAwLCBjb21iaW5lOiB4XzEzOCA9PiB4XzEzOCwgc3RhY2s6IExpc3QoKX07XG4gICAgZG8ge1xuICAgICAgbGV0IHRlcm0gPSB0aGlzLmVuZm9yZXN0QXNzaWdubWVudEV4cHJlc3Npb24oKTtcbiAgICAgIGlmICh0ZXJtID09PSBFWFBSX0xPT1BfTk9fQ0hBTkdFXzI3ICYmIHRoaXMub3BDdHguc3RhY2suc2l6ZSA+IDApIHtcbiAgICAgICAgdGhpcy50ZXJtID0gdGhpcy5vcEN0eC5jb21iaW5lKHRoaXMudGVybSk7XG4gICAgICAgIGxldCB7cHJlYywgY29tYmluZX0gPSB0aGlzLm9wQ3R4LnN0YWNrLmxhc3QoKTtcbiAgICAgICAgdGhpcy5vcEN0eC5wcmVjID0gcHJlYztcbiAgICAgICAgdGhpcy5vcEN0eC5jb21iaW5lID0gY29tYmluZTtcbiAgICAgICAgdGhpcy5vcEN0eC5zdGFjayA9IHRoaXMub3BDdHguc3RhY2sucG9wKCk7XG4gICAgICB9IGVsc2UgaWYgKHRlcm0gPT09IEVYUFJfTE9PUF9OT19DSEFOR0VfMjcpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKHRlcm0gPT09IEVYUFJfTE9PUF9PUEVSQVRPUl8yNiB8fCB0ZXJtID09PSBFWFBSX0xPT1BfRVhQQU5TSU9OXzI4KSB7XG4gICAgICAgIHRoaXMudGVybSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRlcm0gPSB0ZXJtO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKHRydWUpO1xuICAgIHJldHVybiB0aGlzLnRlcm07XG4gIH1cbiAgZW5mb3Jlc3RBc3NpZ25tZW50RXhwcmVzc2lvbigpIHtcbiAgICBsZXQgbG9va2FoZWFkXzEzOSA9IHRoaXMucGVlaygpO1xuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgdGhpcy5pc1Rlcm0obG9va2FoZWFkXzEzOSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmFkdmFuY2UoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzQ29tcGlsZXRpbWVUcmFuc2Zvcm0obG9va2FoZWFkXzEzOSkpIHtcbiAgICAgIGxldCByZXN1bHQgPSB0aGlzLmV4cGFuZE1hY3JvKCk7XG4gICAgICB0aGlzLnJlc3QgPSByZXN1bHQuY29uY2F0KHRoaXMucmVzdCk7XG4gICAgICByZXR1cm4gRVhQUl9MT09QX0VYUEFOU0lPTl8yODtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzS2V5d29yZChsb29rYWhlYWRfMTM5LCBcInlpZWxkXCIpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdFlpZWxkRXhwcmVzc2lvbigpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNLZXl3b3JkKGxvb2thaGVhZF8xMzksIFwiY2xhc3NcIikpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0Q2xhc3Moe2lzRXhwcjogdHJ1ZX0pO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNLZXl3b3JkKGxvb2thaGVhZF8xMzksIFwic3VwZXJcIikpIHtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiU3VwZXJcIiwge30pO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmICh0aGlzLmlzSWRlbnRpZmllcihsb29rYWhlYWRfMTM5KSB8fCB0aGlzLmlzUGFyZW5zKGxvb2thaGVhZF8xMzkpKSAmJiB0aGlzLmlzUHVuY3R1YXRvcih0aGlzLnBlZWsoMSksIFwiPT5cIikgJiYgdGhpcy5saW5lTnVtYmVyRXEobG9va2FoZWFkXzEzOSwgdGhpcy5wZWVrKDEpKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RBcnJvd0V4cHJlc3Npb24oKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzU3ludGF4VGVtcGxhdGUobG9va2FoZWFkXzEzOSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0U3ludGF4VGVtcGxhdGUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzU3ludGF4UXVvdGVUcmFuc2Zvcm0obG9va2FoZWFkXzEzOSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0U3ludGF4UXVvdGUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzTmV3VHJhbnNmb3JtKGxvb2thaGVhZF8xMzkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdE5ld0V4cHJlc3Npb24oKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzS2V5d29yZChsb29rYWhlYWRfMTM5LCBcInRoaXNcIikpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIlRoaXNFeHByZXNzaW9uXCIsIHtzdHg6IHRoaXMuYWR2YW5jZSgpfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgKHRoaXMuaXNJZGVudGlmaWVyKGxvb2thaGVhZF8xMzkpIHx8IHRoaXMuaXNLZXl3b3JkKGxvb2thaGVhZF8xMzksIFwibGV0XCIpIHx8IHRoaXMuaXNLZXl3b3JkKGxvb2thaGVhZF8xMzksIFwieWllbGRcIikpKSB7XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiLCB7bmFtZTogdGhpcy5hZHZhbmNlKCl9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzTnVtZXJpY0xpdGVyYWwobG9va2FoZWFkXzEzOSkpIHtcbiAgICAgIGxldCBudW0gPSB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIGlmIChudW0udmFsKCkgPT09IDEgLyAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgVGVybShcIkxpdGVyYWxJbmZpbml0eUV4cHJlc3Npb25cIiwge30pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiTGl0ZXJhbE51bWVyaWNFeHByZXNzaW9uXCIsIHt2YWx1ZTogbnVtfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgdGhpcy5pc1N0cmluZ0xpdGVyYWwobG9va2FoZWFkXzEzOSkpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIkxpdGVyYWxTdHJpbmdFeHByZXNzaW9uXCIsIHt2YWx1ZTogdGhpcy5hZHZhbmNlKCl9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzVGVtcGxhdGUobG9va2FoZWFkXzEzOSkpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIlRlbXBsYXRlRXhwcmVzc2lvblwiLCB7dGFnOiBudWxsLCBlbGVtZW50czogdGhpcy5lbmZvcmVzdFRlbXBsYXRlRWxlbWVudHMoKX0pO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNCb29sZWFuTGl0ZXJhbChsb29rYWhlYWRfMTM5KSkge1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiTGl0ZXJhbEJvb2xlYW5FeHByZXNzaW9uXCIsIHt2YWx1ZTogdGhpcy5hZHZhbmNlKCl9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzTnVsbExpdGVyYWwobG9va2FoZWFkXzEzOSkpIHtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiTGl0ZXJhbE51bGxFeHByZXNzaW9uXCIsIHt9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzUmVndWxhckV4cHJlc3Npb24obG9va2FoZWFkXzEzOSkpIHtcbiAgICAgIGxldCByZVN0eCA9IHRoaXMuYWR2YW5jZSgpO1xuICAgICAgbGV0IGxhc3RTbGFzaCA9IHJlU3R4LnRva2VuLnZhbHVlLmxhc3RJbmRleE9mKFwiL1wiKTtcbiAgICAgIGxldCBwYXR0ZXJuID0gcmVTdHgudG9rZW4udmFsdWUuc2xpY2UoMSwgbGFzdFNsYXNoKTtcbiAgICAgIGxldCBmbGFncyA9IHJlU3R4LnRva2VuLnZhbHVlLnNsaWNlKGxhc3RTbGFzaCArIDEpO1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiTGl0ZXJhbFJlZ0V4cEV4cHJlc3Npb25cIiwge3BhdHRlcm46IHBhdHRlcm4sIGZsYWdzOiBmbGFnc30pO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNQYXJlbnMobG9va2FoZWFkXzEzOSkpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCIsIHtpbm5lcjogdGhpcy5hZHZhbmNlKCkuaW5uZXIoKX0pO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNGbkRlY2xUcmFuc2Zvcm0obG9va2FoZWFkXzEzOSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0RnVuY3Rpb25FeHByZXNzaW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgdGhpcy5pc0JyYWNlcyhsb29rYWhlYWRfMTM5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RPYmplY3RFeHByZXNzaW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgdGhpcy5pc0JyYWNrZXRzKGxvb2thaGVhZF8xMzkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdEFycmF5RXhwcmVzc2lvbigpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNPcGVyYXRvcihsb29rYWhlYWRfMTM5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RVbmFyeUV4cHJlc3Npb24oKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSAmJiB0aGlzLmlzVXBkYXRlT3BlcmF0b3IobG9va2FoZWFkXzEzOSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0VXBkYXRlRXhwcmVzc2lvbigpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtICYmIHRoaXMuaXNPcGVyYXRvcihsb29rYWhlYWRfMTM5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RCaW5hcnlFeHByZXNzaW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gJiYgdGhpcy5pc1B1bmN0dWF0b3IobG9va2FoZWFkXzEzOSwgXCIuXCIpICYmICh0aGlzLmlzSWRlbnRpZmllcih0aGlzLnBlZWsoMSkpIHx8IHRoaXMuaXNLZXl3b3JkKHRoaXMucGVlaygxKSkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdFN0YXRpY01lbWJlckV4cHJlc3Npb24oKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSAmJiB0aGlzLmlzQnJhY2tldHMobG9va2FoZWFkXzEzOSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0Q29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gJiYgdGhpcy5pc1BhcmVucyhsb29rYWhlYWRfMTM5KSkge1xuICAgICAgbGV0IHBhcmVuID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJDYWxsRXhwcmVzc2lvblwiLCB7Y2FsbGVlOiB0aGlzLnRlcm0sIGFyZ3VtZW50czogcGFyZW4uaW5uZXIoKX0pO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtICYmIHRoaXMuaXNUZW1wbGF0ZShsb29rYWhlYWRfMTM5KSkge1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiVGVtcGxhdGVFeHByZXNzaW9uXCIsIHt0YWc6IHRoaXMudGVybSwgZWxlbWVudHM6IHRoaXMuZW5mb3Jlc3RUZW1wbGF0ZUVsZW1lbnRzKCl9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSAmJiB0aGlzLmlzQXNzaWduKGxvb2thaGVhZF8xMzkpKSB7XG4gICAgICBsZXQgYmluZGluZyA9IHRoaXMudHJhbnNmb3JtRGVzdHJ1Y3R1cmluZyh0aGlzLnRlcm0pO1xuICAgICAgbGV0IG9wID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgICBsZXQgZW5mID0gbmV3IEVuZm9yZXN0ZXIodGhpcy5yZXN0LCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgICBsZXQgaW5pdCA9IGVuZi5lbmZvcmVzdChcImV4cHJlc3Npb25cIik7XG4gICAgICB0aGlzLnJlc3QgPSBlbmYucmVzdDtcbiAgICAgIGlmIChvcC52YWwoKSA9PT0gXCI9XCIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiQXNzaWdubWVudEV4cHJlc3Npb25cIiwge2JpbmRpbmc6IGJpbmRpbmcsIGV4cHJlc3Npb246IGluaXR9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgVGVybShcIkNvbXBvdW5kQXNzaWdubWVudEV4cHJlc3Npb25cIiwge2JpbmRpbmc6IGJpbmRpbmcsIG9wZXJhdG9yOiBvcC52YWwoKSwgZXhwcmVzc2lvbjogaW5pdH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtICYmIHRoaXMuaXNQdW5jdHVhdG9yKGxvb2thaGVhZF8xMzksIFwiP1wiKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RDb25kaXRpb25hbEV4cHJlc3Npb24oKTtcbiAgICB9XG4gICAgcmV0dXJuIEVYUFJfTE9PUF9OT19DSEFOR0VfMjc7XG4gIH1cbiAgZW5mb3Jlc3RBcmd1bWVudExpc3QoKSB7XG4gICAgbGV0IHJlc3VsdF8xNDAgPSBbXTtcbiAgICB3aGlsZSAodGhpcy5yZXN0LnNpemUgPiAwKSB7XG4gICAgICBsZXQgYXJnO1xuICAgICAgaWYgKHRoaXMuaXNQdW5jdHVhdG9yKHRoaXMucGVlaygpLCBcIi4uLlwiKSkge1xuICAgICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgICAgYXJnID0gbmV3IFRlcm0oXCJTcHJlYWRFbGVtZW50XCIsIHtleHByZXNzaW9uOiB0aGlzLmVuZm9yZXN0RXhwcmVzc2lvbkxvb3AoKX0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXJnID0gdGhpcy5lbmZvcmVzdEV4cHJlc3Npb25Mb29wKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yZXN0LnNpemUgPiAwKSB7XG4gICAgICAgIHRoaXMubWF0Y2hQdW5jdHVhdG9yKFwiLFwiKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdF8xNDAucHVzaChhcmcpO1xuICAgIH1cbiAgICByZXR1cm4gTGlzdChyZXN1bHRfMTQwKTtcbiAgfVxuICBlbmZvcmVzdE5ld0V4cHJlc3Npb24oKSB7XG4gICAgdGhpcy5tYXRjaEtleXdvcmQoXCJuZXdcIik7XG4gICAgbGV0IGNhbGxlZV8xNDE7XG4gICAgaWYgKHRoaXMuaXNLZXl3b3JkKHRoaXMucGVlaygpLCBcIm5ld1wiKSkge1xuICAgICAgY2FsbGVlXzE0MSA9IHRoaXMuZW5mb3Jlc3ROZXdFeHByZXNzaW9uKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzS2V5d29yZCh0aGlzLnBlZWsoKSwgXCJzdXBlclwiKSkge1xuICAgICAgY2FsbGVlXzE0MSA9IHRoaXMuZW5mb3Jlc3RFeHByZXNzaW9uTG9vcCgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc1B1bmN0dWF0b3IodGhpcy5wZWVrKCksIFwiLlwiKSAmJiB0aGlzLmlzSWRlbnRpZmllcih0aGlzLnBlZWsoMSksIFwidGFyZ2V0XCIpKSB7XG4gICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiTmV3VGFyZ2V0RXhwcmVzc2lvblwiLCB7fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxlZV8xNDEgPSBuZXcgVGVybShcIklkZW50aWZpZXJFeHByZXNzaW9uXCIsIHtuYW1lOiB0aGlzLmVuZm9yZXN0SWRlbnRpZmllcigpfSk7XG4gICAgfVxuICAgIGxldCBhcmdzXzE0MjtcbiAgICBpZiAodGhpcy5pc1BhcmVucyh0aGlzLnBlZWsoKSkpIHtcbiAgICAgIGFyZ3NfMTQyID0gdGhpcy5tYXRjaFBhcmVucygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzXzE0MiA9IExpc3QoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiTmV3RXhwcmVzc2lvblwiLCB7Y2FsbGVlOiBjYWxsZWVfMTQxLCBhcmd1bWVudHM6IGFyZ3NfMTQyfSk7XG4gIH1cbiAgZW5mb3Jlc3RDb21wdXRlZE1lbWJlckV4cHJlc3Npb24oKSB7XG4gICAgbGV0IGVuZl8xNDMgPSBuZXcgRW5mb3Jlc3Rlcih0aGlzLm1hdGNoU3F1YXJlcygpLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uXCIsIHtvYmplY3Q6IHRoaXMudGVybSwgZXhwcmVzc2lvbjogZW5mXzE0My5lbmZvcmVzdEV4cHJlc3Npb24oKX0pO1xuICB9XG4gIHRyYW5zZm9ybURlc3RydWN0dXJpbmcodGVybV8xNDQpIHtcbiAgICBzd2l0Y2ggKHRlcm1fMTQ0LnR5cGUpIHtcbiAgICAgIGNhc2UgXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiOlxuICAgICAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nSWRlbnRpZmllclwiLCB7bmFtZTogdGVybV8xNDQubmFtZX0pO1xuICAgICAgY2FzZSBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCI6XG4gICAgICAgIGlmICh0ZXJtXzE0NC5pbm5lci5zaXplID09PSAxICYmIHRoaXMuaXNJZGVudGlmaWVyKHRlcm1fMTQ0LmlubmVyLmdldCgwKSkpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nSWRlbnRpZmllclwiLCB7bmFtZTogdGVybV8xNDQuaW5uZXIuZ2V0KDApfSk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJEYXRhUHJvcGVydHlcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiQmluZGluZ1Byb3BlcnR5UHJvcGVydHlcIiwge25hbWU6IHRlcm1fMTQ0Lm5hbWUsIGJpbmRpbmc6IHRoaXMudHJhbnNmb3JtRGVzdHJ1Y3R1cmluZ1dpdGhEZWZhdWx0KHRlcm1fMTQ0LmV4cHJlc3Npb24pfSk7XG4gICAgICBjYXNlIFwiU2hvcnRoYW5kUHJvcGVydHlcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiQmluZGluZ1Byb3BlcnR5SWRlbnRpZmllclwiLCB7YmluZGluZzogbmV3IFRlcm0oXCJCaW5kaW5nSWRlbnRpZmllclwiLCB7bmFtZTogdGVybV8xNDQubmFtZX0pLCBpbml0OiBudWxsfSk7XG4gICAgICBjYXNlIFwiT2JqZWN0RXhwcmVzc2lvblwiOlxuICAgICAgICByZXR1cm4gbmV3IFRlcm0oXCJPYmplY3RCaW5kaW5nXCIsIHtwcm9wZXJ0aWVzOiB0ZXJtXzE0NC5wcm9wZXJ0aWVzLm1hcCh0XzE0NSA9PiB0aGlzLnRyYW5zZm9ybURlc3RydWN0dXJpbmcodF8xNDUpKX0pO1xuICAgICAgY2FzZSBcIkFycmF5RXhwcmVzc2lvblwiOlxuICAgICAgICBsZXQgbGFzdCA9IHRlcm1fMTQ0LmVsZW1lbnRzLmxhc3QoKTtcbiAgICAgICAgaWYgKGxhc3QgIT0gbnVsbCAmJiBsYXN0LnR5cGUgPT09IFwiU3ByZWFkRWxlbWVudFwiKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiQXJyYXlCaW5kaW5nXCIsIHtlbGVtZW50czogdGVybV8xNDQuZWxlbWVudHMuc2xpY2UoMCwgLTEpLm1hcCh0XzE0NiA9PiB0XzE0NiAmJiB0aGlzLnRyYW5zZm9ybURlc3RydWN0dXJpbmdXaXRoRGVmYXVsdCh0XzE0NikpLCByZXN0RWxlbWVudDogdGhpcy50cmFuc2Zvcm1EZXN0cnVjdHVyaW5nV2l0aERlZmF1bHQobGFzdC5leHByZXNzaW9uKX0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBuZXcgVGVybShcIkFycmF5QmluZGluZ1wiLCB7ZWxlbWVudHM6IHRlcm1fMTQ0LmVsZW1lbnRzLm1hcCh0XzE0NyA9PiB0XzE0NyAmJiB0aGlzLnRyYW5zZm9ybURlc3RydWN0dXJpbmdXaXRoRGVmYXVsdCh0XzE0NykpLCByZXN0RWxlbWVudDogbnVsbH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVGVybShcIkFycmF5QmluZGluZ1wiLCB7ZWxlbWVudHM6IHRlcm1fMTQ0LmVsZW1lbnRzLm1hcCh0XzE0OCA9PiB0XzE0OCAmJiB0aGlzLnRyYW5zZm9ybURlc3RydWN0dXJpbmcodF8xNDgpKSwgcmVzdEVsZW1lbnQ6IG51bGx9KTtcbiAgICAgIGNhc2UgXCJTdGF0aWNQcm9wZXJ0eU5hbWVcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiQmluZGluZ0lkZW50aWZpZXJcIiwge25hbWU6IHRlcm1fMTQ0LnZhbHVlfSk7XG4gICAgICBjYXNlIFwiQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uXCI6XG4gICAgICBjYXNlIFwiU3RhdGljTWVtYmVyRXhwcmVzc2lvblwiOlxuICAgICAgY2FzZSBcIkFycmF5QmluZGluZ1wiOlxuICAgICAgY2FzZSBcIkJpbmRpbmdJZGVudGlmaWVyXCI6XG4gICAgICBjYXNlIFwiQmluZGluZ1Byb3BlcnR5SWRlbnRpZmllclwiOlxuICAgICAgY2FzZSBcIkJpbmRpbmdQcm9wZXJ0eVByb3BlcnR5XCI6XG4gICAgICBjYXNlIFwiQmluZGluZ1dpdGhEZWZhdWx0XCI6XG4gICAgICBjYXNlIFwiT2JqZWN0QmluZGluZ1wiOlxuICAgICAgICByZXR1cm4gdGVybV8xNDQ7XG4gICAgfVxuICAgIGFzc2VydChmYWxzZSwgXCJub3QgaW1wbGVtZW50ZWQgeWV0IGZvciBcIiArIHRlcm1fMTQ0LnR5cGUpO1xuICB9XG4gIHRyYW5zZm9ybURlc3RydWN0dXJpbmdXaXRoRGVmYXVsdCh0ZXJtXzE0OSkge1xuICAgIHN3aXRjaCAodGVybV8xNDkudHlwZSkge1xuICAgICAgY2FzZSBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCI6XG4gICAgICAgIHJldHVybiBuZXcgVGVybShcIkJpbmRpbmdXaXRoRGVmYXVsdFwiLCB7YmluZGluZzogdGhpcy50cmFuc2Zvcm1EZXN0cnVjdHVyaW5nKHRlcm1fMTQ5LmJpbmRpbmcpLCBpbml0OiB0ZXJtXzE0OS5leHByZXNzaW9ufSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybURlc3RydWN0dXJpbmcodGVybV8xNDkpO1xuICB9XG4gIGVuZm9yZXN0QXJyb3dFeHByZXNzaW9uKCkge1xuICAgIGxldCBlbmZfMTUwO1xuICAgIGlmICh0aGlzLmlzSWRlbnRpZmllcih0aGlzLnBlZWsoKSkpIHtcbiAgICAgIGVuZl8xNTAgPSBuZXcgRW5mb3Jlc3RlcihMaXN0Lm9mKHRoaXMuYWR2YW5jZSgpKSwgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcCA9IHRoaXMubWF0Y2hQYXJlbnMoKTtcbiAgICAgIGVuZl8xNTAgPSBuZXcgRW5mb3Jlc3RlcihwLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgfVxuICAgIGxldCBwYXJhbXNfMTUxID0gZW5mXzE1MC5lbmZvcmVzdEZvcm1hbFBhcmFtZXRlcnMoKTtcbiAgICB0aGlzLm1hdGNoUHVuY3R1YXRvcihcIj0+XCIpO1xuICAgIGxldCBib2R5XzE1MjtcbiAgICBpZiAodGhpcy5pc0JyYWNlcyh0aGlzLnBlZWsoKSkpIHtcbiAgICAgIGJvZHlfMTUyID0gdGhpcy5tYXRjaEN1cmxpZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5mXzE1MCA9IG5ldyBFbmZvcmVzdGVyKHRoaXMucmVzdCwgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgICAgYm9keV8xNTIgPSBlbmZfMTUwLmVuZm9yZXN0RXhwcmVzc2lvbkxvb3AoKTtcbiAgICAgIHRoaXMucmVzdCA9IGVuZl8xNTAucmVzdDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQXJyb3dFeHByZXNzaW9uXCIsIHtwYXJhbXM6IHBhcmFtc18xNTEsIGJvZHk6IGJvZHlfMTUyfSk7XG4gIH1cbiAgZW5mb3Jlc3RZaWVsZEV4cHJlc3Npb24oKSB7XG4gICAgbGV0IGt3ZF8xNTMgPSB0aGlzLm1hdGNoS2V5d29yZChcInlpZWxkXCIpO1xuICAgIGxldCBsb29rYWhlYWRfMTU0ID0gdGhpcy5wZWVrKCk7XG4gICAgaWYgKHRoaXMucmVzdC5zaXplID09PSAwIHx8IGxvb2thaGVhZF8xNTQgJiYgIXRoaXMubGluZU51bWJlckVxKGt3ZF8xNTMsIGxvb2thaGVhZF8xNTQpKSB7XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJZaWVsZEV4cHJlc3Npb25cIiwge2V4cHJlc3Npb246IG51bGx9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGlzR2VuZXJhdG9yID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5pc1B1bmN0dWF0b3IodGhpcy5wZWVrKCksIFwiKlwiKSkge1xuICAgICAgICBpc0dlbmVyYXRvciA9IHRydWU7XG4gICAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgfVxuICAgICAgbGV0IGV4cHIgPSB0aGlzLmVuZm9yZXN0RXhwcmVzc2lvbigpO1xuICAgICAgbGV0IHR5cGUgPSBpc0dlbmVyYXRvciA/IFwiWWllbGRHZW5lcmF0b3JFeHByZXNzaW9uXCIgOiBcIllpZWxkRXhwcmVzc2lvblwiO1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKHR5cGUsIHtleHByZXNzaW9uOiBleHByfSk7XG4gICAgfVxuICB9XG4gIGVuZm9yZXN0U3ludGF4VGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiU3ludGF4VGVtcGxhdGVcIiwge3RlbXBsYXRlOiB0aGlzLmFkdmFuY2UoKX0pO1xuICB9XG4gIGVuZm9yZXN0U3ludGF4UXVvdGUoKSB7XG4gICAgbGV0IG5hbWVfMTU1ID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiU3ludGF4UXVvdGVcIiwge25hbWU6IG5hbWVfMTU1LCB0ZW1wbGF0ZTogbmV3IFRlcm0oXCJUZW1wbGF0ZUV4cHJlc3Npb25cIiwge3RhZzogbmV3IFRlcm0oXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiLCB7bmFtZTogbmFtZV8xNTV9KSwgZWxlbWVudHM6IHRoaXMuZW5mb3Jlc3RUZW1wbGF0ZUVsZW1lbnRzKCl9KX0pO1xuICB9XG4gIGVuZm9yZXN0U3RhdGljTWVtYmVyRXhwcmVzc2lvbigpIHtcbiAgICBsZXQgb2JqZWN0XzE1NiA9IHRoaXMudGVybTtcbiAgICBsZXQgZG90XzE1NyA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIGxldCBwcm9wZXJ0eV8xNTggPSB0aGlzLmFkdmFuY2UoKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJTdGF0aWNNZW1iZXJFeHByZXNzaW9uXCIsIHtvYmplY3Q6IG9iamVjdF8xNTYsIHByb3BlcnR5OiBwcm9wZXJ0eV8xNTh9KTtcbiAgfVxuICBlbmZvcmVzdEFycmF5RXhwcmVzc2lvbigpIHtcbiAgICBsZXQgYXJyXzE1OSA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIGxldCBlbGVtZW50c18xNjAgPSBbXTtcbiAgICBsZXQgZW5mXzE2MSA9IG5ldyBFbmZvcmVzdGVyKGFycl8xNTkuaW5uZXIoKSwgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgIHdoaWxlIChlbmZfMTYxLnJlc3Quc2l6ZSA+IDApIHtcbiAgICAgIGxldCBsb29rYWhlYWQgPSBlbmZfMTYxLnBlZWsoKTtcbiAgICAgIGlmIChlbmZfMTYxLmlzUHVuY3R1YXRvcihsb29rYWhlYWQsIFwiLFwiKSkge1xuICAgICAgICBlbmZfMTYxLmFkdmFuY2UoKTtcbiAgICAgICAgZWxlbWVudHNfMTYwLnB1c2gobnVsbCk7XG4gICAgICB9IGVsc2UgaWYgKGVuZl8xNjEuaXNQdW5jdHVhdG9yKGxvb2thaGVhZCwgXCIuLi5cIikpIHtcbiAgICAgICAgZW5mXzE2MS5hZHZhbmNlKCk7XG4gICAgICAgIGxldCBleHByZXNzaW9uID0gZW5mXzE2MS5lbmZvcmVzdEV4cHJlc3Npb25Mb29wKCk7XG4gICAgICAgIGlmIChleHByZXNzaW9uID09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBlbmZfMTYxLmNyZWF0ZUVycm9yKGxvb2thaGVhZCwgXCJleHBlY3RpbmcgZXhwcmVzc2lvblwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50c18xNjAucHVzaChuZXcgVGVybShcIlNwcmVhZEVsZW1lbnRcIiwge2V4cHJlc3Npb246IGV4cHJlc3Npb259KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgdGVybSA9IGVuZl8xNjEuZW5mb3Jlc3RFeHByZXNzaW9uTG9vcCgpO1xuICAgICAgICBpZiAodGVybSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgZW5mXzE2MS5jcmVhdGVFcnJvcihsb29rYWhlYWQsIFwiZXhwZWN0ZWQgZXhwcmVzc2lvblwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50c18xNjAucHVzaCh0ZXJtKTtcbiAgICAgICAgZW5mXzE2MS5jb25zdW1lQ29tbWEoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQXJyYXlFeHByZXNzaW9uXCIsIHtlbGVtZW50czogTGlzdChlbGVtZW50c18xNjApfSk7XG4gIH1cbiAgZW5mb3Jlc3RPYmplY3RFeHByZXNzaW9uKCkge1xuICAgIGxldCBvYmpfMTYyID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgbGV0IHByb3BlcnRpZXNfMTYzID0gTGlzdCgpO1xuICAgIGxldCBlbmZfMTY0ID0gbmV3IEVuZm9yZXN0ZXIob2JqXzE2Mi5pbm5lcigpLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IGxhc3RQcm9wXzE2NSA9IG51bGw7XG4gICAgd2hpbGUgKGVuZl8xNjQucmVzdC5zaXplID4gMCkge1xuICAgICAgbGV0IHByb3AgPSBlbmZfMTY0LmVuZm9yZXN0UHJvcGVydHlEZWZpbml0aW9uKCk7XG4gICAgICBlbmZfMTY0LmNvbnN1bWVDb21tYSgpO1xuICAgICAgcHJvcGVydGllc18xNjMgPSBwcm9wZXJ0aWVzXzE2My5jb25jYXQocHJvcCk7XG4gICAgICBpZiAobGFzdFByb3BfMTY1ID09PSBwcm9wKSB7XG4gICAgICAgIHRocm93IGVuZl8xNjQuY3JlYXRlRXJyb3IocHJvcCwgXCJpbnZhbGlkIHN5bnRheCBpbiBvYmplY3RcIik7XG4gICAgICB9XG4gICAgICBsYXN0UHJvcF8xNjUgPSBwcm9wO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0oXCJPYmplY3RFeHByZXNzaW9uXCIsIHtwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzXzE2M30pO1xuICB9XG4gIGVuZm9yZXN0UHJvcGVydHlEZWZpbml0aW9uKCkge1xuICAgIGxldCB7bWV0aG9kT3JLZXksIGtpbmR9ID0gdGhpcy5lbmZvcmVzdE1ldGhvZERlZmluaXRpb24oKTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgXCJtZXRob2RcIjpcbiAgICAgICAgcmV0dXJuIG1ldGhvZE9yS2V5O1xuICAgICAgY2FzZSBcImlkZW50aWZpZXJcIjpcbiAgICAgICAgaWYgKHRoaXMuaXNBc3NpZ24odGhpcy5wZWVrKCkpKSB7XG4gICAgICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICAgICAgbGV0IGluaXQgPSB0aGlzLmVuZm9yZXN0RXhwcmVzc2lvbkxvb3AoKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyXCIsIHtpbml0OiBpbml0LCBiaW5kaW5nOiB0aGlzLnRyYW5zZm9ybURlc3RydWN0dXJpbmcobWV0aG9kT3JLZXkpfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNQdW5jdHVhdG9yKHRoaXMucGVlaygpLCBcIjpcIikpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFRlcm0oXCJTaG9ydGhhbmRQcm9wZXJ0eVwiLCB7bmFtZTogbWV0aG9kT3JLZXkudmFsdWV9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm1hdGNoUHVuY3R1YXRvcihcIjpcIik7XG4gICAgbGV0IGV4cHJfMTY2ID0gdGhpcy5lbmZvcmVzdEV4cHJlc3Npb25Mb29wKCk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRGF0YVByb3BlcnR5XCIsIHtuYW1lOiBtZXRob2RPcktleSwgZXhwcmVzc2lvbjogZXhwcl8xNjZ9KTtcbiAgfVxuICBlbmZvcmVzdE1ldGhvZERlZmluaXRpb24oKSB7XG4gICAgbGV0IGxvb2thaGVhZF8xNjcgPSB0aGlzLnBlZWsoKTtcbiAgICBsZXQgaXNHZW5lcmF0b3JfMTY4ID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNQdW5jdHVhdG9yKGxvb2thaGVhZF8xNjcsIFwiKlwiKSkge1xuICAgICAgaXNHZW5lcmF0b3JfMTY4ID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0lkZW50aWZpZXIobG9va2FoZWFkXzE2NywgXCJnZXRcIikgJiYgdGhpcy5pc1Byb3BlcnR5TmFtZSh0aGlzLnBlZWsoMSkpKSB7XG4gICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIGxldCB7bmFtZX0gPSB0aGlzLmVuZm9yZXN0UHJvcGVydHlOYW1lKCk7XG4gICAgICB0aGlzLm1hdGNoUGFyZW5zKCk7XG4gICAgICBsZXQgYm9keSA9IHRoaXMubWF0Y2hDdXJsaWVzKCk7XG4gICAgICByZXR1cm4ge21ldGhvZE9yS2V5OiBuZXcgVGVybShcIkdldHRlclwiLCB7bmFtZTogbmFtZSwgYm9keTogYm9keX0pLCBraW5kOiBcIm1ldGhvZFwifTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNJZGVudGlmaWVyKGxvb2thaGVhZF8xNjcsIFwic2V0XCIpICYmIHRoaXMuaXNQcm9wZXJ0eU5hbWUodGhpcy5wZWVrKDEpKSkge1xuICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICBsZXQge25hbWV9ID0gdGhpcy5lbmZvcmVzdFByb3BlcnR5TmFtZSgpO1xuICAgICAgbGV0IGVuZiA9IG5ldyBFbmZvcmVzdGVyKHRoaXMubWF0Y2hQYXJlbnMoKSwgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgICAgbGV0IHBhcmFtID0gZW5mLmVuZm9yZXN0QmluZGluZ0VsZW1lbnQoKTtcbiAgICAgIGxldCBib2R5ID0gdGhpcy5tYXRjaEN1cmxpZXMoKTtcbiAgICAgIHJldHVybiB7bWV0aG9kT3JLZXk6IG5ldyBUZXJtKFwiU2V0dGVyXCIsIHtuYW1lOiBuYW1lLCBwYXJhbTogcGFyYW0sIGJvZHk6IGJvZHl9KSwga2luZDogXCJtZXRob2RcIn07XG4gICAgfVxuICAgIGxldCB7bmFtZX0gPSB0aGlzLmVuZm9yZXN0UHJvcGVydHlOYW1lKCk7XG4gICAgaWYgKHRoaXMuaXNQYXJlbnModGhpcy5wZWVrKCkpKSB7XG4gICAgICBsZXQgcGFyYW1zID0gdGhpcy5tYXRjaFBhcmVucygpO1xuICAgICAgbGV0IGVuZiA9IG5ldyBFbmZvcmVzdGVyKHBhcmFtcywgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgICAgbGV0IGZvcm1hbFBhcmFtcyA9IGVuZi5lbmZvcmVzdEZvcm1hbFBhcmFtZXRlcnMoKTtcbiAgICAgIGxldCBib2R5ID0gdGhpcy5tYXRjaEN1cmxpZXMoKTtcbiAgICAgIHJldHVybiB7bWV0aG9kT3JLZXk6IG5ldyBUZXJtKFwiTWV0aG9kXCIsIHtpc0dlbmVyYXRvcjogaXNHZW5lcmF0b3JfMTY4LCBuYW1lOiBuYW1lLCBwYXJhbXM6IGZvcm1hbFBhcmFtcywgYm9keTogYm9keX0pLCBraW5kOiBcIm1ldGhvZFwifTtcbiAgICB9XG4gICAgcmV0dXJuIHttZXRob2RPcktleTogbmFtZSwga2luZDogdGhpcy5pc0lkZW50aWZpZXIobG9va2FoZWFkXzE2NykgfHwgdGhpcy5pc0tleXdvcmQobG9va2FoZWFkXzE2NykgPyBcImlkZW50aWZpZXJcIiA6IFwicHJvcGVydHlcIn07XG4gIH1cbiAgZW5mb3Jlc3RQcm9wZXJ0eU5hbWUoKSB7XG4gICAgbGV0IGxvb2thaGVhZF8xNjkgPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAodGhpcy5pc1N0cmluZ0xpdGVyYWwobG9va2FoZWFkXzE2OSkgfHwgdGhpcy5pc051bWVyaWNMaXRlcmFsKGxvb2thaGVhZF8xNjkpKSB7XG4gICAgICByZXR1cm4ge25hbWU6IG5ldyBUZXJtKFwiU3RhdGljUHJvcGVydHlOYW1lXCIsIHt2YWx1ZTogdGhpcy5hZHZhbmNlKCl9KSwgYmluZGluZzogbnVsbH07XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzQnJhY2tldHMobG9va2FoZWFkXzE2OSkpIHtcbiAgICAgIGxldCBlbmYgPSBuZXcgRW5mb3Jlc3Rlcih0aGlzLm1hdGNoU3F1YXJlcygpLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgICBsZXQgZXhwciA9IGVuZi5lbmZvcmVzdEV4cHJlc3Npb25Mb29wKCk7XG4gICAgICByZXR1cm4ge25hbWU6IG5ldyBUZXJtKFwiQ29tcHV0ZWRQcm9wZXJ0eU5hbWVcIiwge2V4cHJlc3Npb246IGV4cHJ9KSwgYmluZGluZzogbnVsbH07XG4gICAgfVxuICAgIGxldCBuYW1lXzE3MCA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIHJldHVybiB7bmFtZTogbmV3IFRlcm0oXCJTdGF0aWNQcm9wZXJ0eU5hbWVcIiwge3ZhbHVlOiBuYW1lXzE3MH0pLCBiaW5kaW5nOiBuZXcgVGVybShcIkJpbmRpbmdJZGVudGlmaWVyXCIsIHtuYW1lOiBuYW1lXzE3MH0pfTtcbiAgfVxuICBlbmZvcmVzdEZ1bmN0aW9uKHtpc0V4cHIsIGluRGVmYXVsdCwgYWxsb3dHZW5lcmF0b3J9KSB7XG4gICAgbGV0IG5hbWVfMTcxID0gbnVsbCwgcGFyYW1zXzE3MiwgYm9keV8xNzMsIHJlc3RfMTc0O1xuICAgIGxldCBpc0dlbmVyYXRvcl8xNzUgPSBmYWxzZTtcbiAgICBsZXQgZm5LZXl3b3JkXzE3NiA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIGxldCBsb29rYWhlYWRfMTc3ID0gdGhpcy5wZWVrKCk7XG4gICAgbGV0IHR5cGVfMTc4ID0gaXNFeHByID8gXCJGdW5jdGlvbkV4cHJlc3Npb25cIiA6IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiO1xuICAgIGlmICh0aGlzLmlzUHVuY3R1YXRvcihsb29rYWhlYWRfMTc3LCBcIipcIikpIHtcbiAgICAgIGlzR2VuZXJhdG9yXzE3NSA9IHRydWU7XG4gICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIGxvb2thaGVhZF8xNzcgPSB0aGlzLnBlZWsoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzUGFyZW5zKGxvb2thaGVhZF8xNzcpKSB7XG4gICAgICBuYW1lXzE3MSA9IHRoaXMuZW5mb3Jlc3RCaW5kaW5nSWRlbnRpZmllcigpO1xuICAgIH0gZWxzZSBpZiAoaW5EZWZhdWx0KSB7XG4gICAgICBuYW1lXzE3MSA9IG5ldyBUZXJtKFwiQmluZGluZ0lkZW50aWZpZXJcIiwge25hbWU6IFN5bnRheC5mcm9tSWRlbnRpZmllcihcIipkZWZhdWx0KlwiLCBmbktleXdvcmRfMTc2KX0pO1xuICAgIH1cbiAgICBwYXJhbXNfMTcyID0gdGhpcy5tYXRjaFBhcmVucygpO1xuICAgIGJvZHlfMTczID0gdGhpcy5tYXRjaEN1cmxpZXMoKTtcbiAgICBsZXQgZW5mXzE3OSA9IG5ldyBFbmZvcmVzdGVyKHBhcmFtc18xNzIsIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgZm9ybWFsUGFyYW1zXzE4MCA9IGVuZl8xNzkuZW5mb3Jlc3RGb3JtYWxQYXJhbWV0ZXJzKCk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKHR5cGVfMTc4LCB7bmFtZTogbmFtZV8xNzEsIGlzR2VuZXJhdG9yOiBpc0dlbmVyYXRvcl8xNzUsIHBhcmFtczogZm9ybWFsUGFyYW1zXzE4MCwgYm9keTogYm9keV8xNzN9KTtcbiAgfVxuICBlbmZvcmVzdEZ1bmN0aW9uRXhwcmVzc2lvbigpIHtcbiAgICBsZXQgbmFtZV8xODEgPSBudWxsLCBwYXJhbXNfMTgyLCBib2R5XzE4MywgcmVzdF8xODQ7XG4gICAgbGV0IGlzR2VuZXJhdG9yXzE4NSA9IGZhbHNlO1xuICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgIGxldCBsb29rYWhlYWRfMTg2ID0gdGhpcy5wZWVrKCk7XG4gICAgaWYgKHRoaXMuaXNQdW5jdHVhdG9yKGxvb2thaGVhZF8xODYsIFwiKlwiKSkge1xuICAgICAgaXNHZW5lcmF0b3JfMTg1ID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgbG9va2FoZWFkXzE4NiA9IHRoaXMucGVlaygpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNQYXJlbnMobG9va2FoZWFkXzE4NikpIHtcbiAgICAgIG5hbWVfMTgxID0gdGhpcy5lbmZvcmVzdEJpbmRpbmdJZGVudGlmaWVyKCk7XG4gICAgfVxuICAgIHBhcmFtc18xODIgPSB0aGlzLm1hdGNoUGFyZW5zKCk7XG4gICAgYm9keV8xODMgPSB0aGlzLm1hdGNoQ3VybGllcygpO1xuICAgIGxldCBlbmZfMTg3ID0gbmV3IEVuZm9yZXN0ZXIocGFyYW1zXzE4MiwgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgIGxldCBmb3JtYWxQYXJhbXNfMTg4ID0gZW5mXzE4Ny5lbmZvcmVzdEZvcm1hbFBhcmFtZXRlcnMoKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJGdW5jdGlvbkV4cHJlc3Npb25cIiwge25hbWU6IG5hbWVfMTgxLCBpc0dlbmVyYXRvcjogaXNHZW5lcmF0b3JfMTg1LCBwYXJhbXM6IGZvcm1hbFBhcmFtc18xODgsIGJvZHk6IGJvZHlfMTgzfSk7XG4gIH1cbiAgZW5mb3Jlc3RGdW5jdGlvbkRlY2xhcmF0aW9uKCkge1xuICAgIGxldCBuYW1lXzE4OSwgcGFyYW1zXzE5MCwgYm9keV8xOTEsIHJlc3RfMTkyO1xuICAgIGxldCBpc0dlbmVyYXRvcl8xOTMgPSBmYWxzZTtcbiAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICBsZXQgbG9va2FoZWFkXzE5NCA9IHRoaXMucGVlaygpO1xuICAgIGlmICh0aGlzLmlzUHVuY3R1YXRvcihsb29rYWhlYWRfMTk0LCBcIipcIikpIHtcbiAgICAgIGlzR2VuZXJhdG9yXzE5MyA9IHRydWU7XG4gICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICB9XG4gICAgbmFtZV8xODkgPSB0aGlzLmVuZm9yZXN0QmluZGluZ0lkZW50aWZpZXIoKTtcbiAgICBwYXJhbXNfMTkwID0gdGhpcy5tYXRjaFBhcmVucygpO1xuICAgIGJvZHlfMTkxID0gdGhpcy5tYXRjaEN1cmxpZXMoKTtcbiAgICBsZXQgZW5mXzE5NSA9IG5ldyBFbmZvcmVzdGVyKHBhcmFtc18xOTAsIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgZm9ybWFsUGFyYW1zXzE5NiA9IGVuZl8xOTUuZW5mb3Jlc3RGb3JtYWxQYXJhbWV0ZXJzKCk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiLCB7bmFtZTogbmFtZV8xODksIGlzR2VuZXJhdG9yOiBpc0dlbmVyYXRvcl8xOTMsIHBhcmFtczogZm9ybWFsUGFyYW1zXzE5NiwgYm9keTogYm9keV8xOTF9KTtcbiAgfVxuICBlbmZvcmVzdEZvcm1hbFBhcmFtZXRlcnMoKSB7XG4gICAgbGV0IGl0ZW1zXzE5NyA9IFtdO1xuICAgIGxldCByZXN0XzE5OCA9IG51bGw7XG4gICAgd2hpbGUgKHRoaXMucmVzdC5zaXplICE9PSAwKSB7XG4gICAgICBsZXQgbG9va2FoZWFkID0gdGhpcy5wZWVrKCk7XG4gICAgICBpZiAodGhpcy5pc1B1bmN0dWF0b3IobG9va2FoZWFkLCBcIi4uLlwiKSkge1xuICAgICAgICB0aGlzLm1hdGNoUHVuY3R1YXRvcihcIi4uLlwiKTtcbiAgICAgICAgcmVzdF8xOTggPSB0aGlzLmVuZm9yZXN0QmluZGluZ0lkZW50aWZpZXIoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpdGVtc18xOTcucHVzaCh0aGlzLmVuZm9yZXN0UGFyYW0oKSk7XG4gICAgICB0aGlzLmNvbnN1bWVDb21tYSgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0oXCJGb3JtYWxQYXJhbWV0ZXJzXCIsIHtpdGVtczogTGlzdChpdGVtc18xOTcpLCByZXN0OiByZXN0XzE5OH0pO1xuICB9XG4gIGVuZm9yZXN0UGFyYW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RCaW5kaW5nRWxlbWVudCgpO1xuICB9XG4gIGVuZm9yZXN0VXBkYXRlRXhwcmVzc2lvbigpIHtcbiAgICBsZXQgb3BlcmF0b3JfMTk5ID0gdGhpcy5tYXRjaFVuYXJ5T3BlcmF0b3IoKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJVcGRhdGVFeHByZXNzaW9uXCIsIHtpc1ByZWZpeDogZmFsc2UsIG9wZXJhdG9yOiBvcGVyYXRvcl8xOTkudmFsKCksIG9wZXJhbmQ6IHRoaXMudHJhbnNmb3JtRGVzdHJ1Y3R1cmluZyh0aGlzLnRlcm0pfSk7XG4gIH1cbiAgZW5mb3Jlc3RVbmFyeUV4cHJlc3Npb24oKSB7XG4gICAgbGV0IG9wZXJhdG9yXzIwMCA9IHRoaXMubWF0Y2hVbmFyeU9wZXJhdG9yKCk7XG4gICAgdGhpcy5vcEN0eC5zdGFjayA9IHRoaXMub3BDdHguc3RhY2sucHVzaCh7cHJlYzogdGhpcy5vcEN0eC5wcmVjLCBjb21iaW5lOiB0aGlzLm9wQ3R4LmNvbWJpbmV9KTtcbiAgICB0aGlzLm9wQ3R4LnByZWMgPSAxNDtcbiAgICB0aGlzLm9wQ3R4LmNvbWJpbmUgPSByaWdodFRlcm1fMjAxID0+IHtcbiAgICAgIGxldCB0eXBlXzIwMiwgdGVybV8yMDMsIGlzUHJlZml4XzIwNDtcbiAgICAgIGlmIChvcGVyYXRvcl8yMDAudmFsKCkgPT09IFwiKytcIiB8fCBvcGVyYXRvcl8yMDAudmFsKCkgPT09IFwiLS1cIikge1xuICAgICAgICB0eXBlXzIwMiA9IFwiVXBkYXRlRXhwcmVzc2lvblwiO1xuICAgICAgICB0ZXJtXzIwMyA9IHRoaXMudHJhbnNmb3JtRGVzdHJ1Y3R1cmluZyhyaWdodFRlcm1fMjAxKTtcbiAgICAgICAgaXNQcmVmaXhfMjA0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHR5cGVfMjAyID0gXCJVbmFyeUV4cHJlc3Npb25cIjtcbiAgICAgICAgaXNQcmVmaXhfMjA0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0ZXJtXzIwMyA9IHJpZ2h0VGVybV8yMDE7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFRlcm0odHlwZV8yMDIsIHtvcGVyYXRvcjogb3BlcmF0b3JfMjAwLnZhbCgpLCBvcGVyYW5kOiB0ZXJtXzIwMywgaXNQcmVmaXg6IGlzUHJlZml4XzIwNH0pO1xuICAgIH07XG4gICAgcmV0dXJuIEVYUFJfTE9PUF9PUEVSQVRPUl8yNjtcbiAgfVxuICBlbmZvcmVzdENvbmRpdGlvbmFsRXhwcmVzc2lvbigpIHtcbiAgICBsZXQgdGVzdF8yMDUgPSB0aGlzLm9wQ3R4LmNvbWJpbmUodGhpcy50ZXJtKTtcbiAgICBpZiAodGhpcy5vcEN0eC5zdGFjay5zaXplID4gMCkge1xuICAgICAgbGV0IHtwcmVjLCBjb21iaW5lfSA9IHRoaXMub3BDdHguc3RhY2subGFzdCgpO1xuICAgICAgdGhpcy5vcEN0eC5zdGFjayA9IHRoaXMub3BDdHguc3RhY2sucG9wKCk7XG4gICAgICB0aGlzLm9wQ3R4LnByZWMgPSBwcmVjO1xuICAgICAgdGhpcy5vcEN0eC5jb21iaW5lID0gY29tYmluZTtcbiAgICB9XG4gICAgdGhpcy5tYXRjaFB1bmN0dWF0b3IoXCI/XCIpO1xuICAgIGxldCBlbmZfMjA2ID0gbmV3IEVuZm9yZXN0ZXIodGhpcy5yZXN0LCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IGNvbnNlcXVlbnRfMjA3ID0gZW5mXzIwNi5lbmZvcmVzdEV4cHJlc3Npb25Mb29wKCk7XG4gICAgZW5mXzIwNi5tYXRjaFB1bmN0dWF0b3IoXCI6XCIpO1xuICAgIGVuZl8yMDYgPSBuZXcgRW5mb3Jlc3RlcihlbmZfMjA2LnJlc3QsIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgYWx0ZXJuYXRlXzIwOCA9IGVuZl8yMDYuZW5mb3Jlc3RFeHByZXNzaW9uTG9vcCgpO1xuICAgIHRoaXMucmVzdCA9IGVuZl8yMDYucmVzdDtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIiwge3Rlc3Q6IHRlc3RfMjA1LCBjb25zZXF1ZW50OiBjb25zZXF1ZW50XzIwNywgYWx0ZXJuYXRlOiBhbHRlcm5hdGVfMjA4fSk7XG4gIH1cbiAgZW5mb3Jlc3RCaW5hcnlFeHByZXNzaW9uKCkge1xuICAgIGxldCBsZWZ0VGVybV8yMDkgPSB0aGlzLnRlcm07XG4gICAgbGV0IG9wU3R4XzIxMCA9IHRoaXMucGVlaygpO1xuICAgIGxldCBvcF8yMTEgPSBvcFN0eF8yMTAudmFsKCk7XG4gICAgbGV0IG9wUHJlY18yMTIgPSBnZXRPcGVyYXRvclByZWMob3BfMjExKTtcbiAgICBsZXQgb3BBc3NvY18yMTMgPSBnZXRPcGVyYXRvckFzc29jKG9wXzIxMSk7XG4gICAgaWYgKG9wZXJhdG9yTHQodGhpcy5vcEN0eC5wcmVjLCBvcFByZWNfMjEyLCBvcEFzc29jXzIxMykpIHtcbiAgICAgIHRoaXMub3BDdHguc3RhY2sgPSB0aGlzLm9wQ3R4LnN0YWNrLnB1c2goe3ByZWM6IHRoaXMub3BDdHgucHJlYywgY29tYmluZTogdGhpcy5vcEN0eC5jb21iaW5lfSk7XG4gICAgICB0aGlzLm9wQ3R4LnByZWMgPSBvcFByZWNfMjEyO1xuICAgICAgdGhpcy5vcEN0eC5jb21iaW5lID0gcmlnaHRUZXJtXzIxNCA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgVGVybShcIkJpbmFyeUV4cHJlc3Npb25cIiwge2xlZnQ6IGxlZnRUZXJtXzIwOSwgb3BlcmF0b3I6IG9wU3R4XzIxMCwgcmlnaHQ6IHJpZ2h0VGVybV8yMTR9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIHJldHVybiBFWFBSX0xPT1BfT1BFUkFUT1JfMjY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB0ZXJtID0gdGhpcy5vcEN0eC5jb21iaW5lKGxlZnRUZXJtXzIwOSk7XG4gICAgICBsZXQge3ByZWMsIGNvbWJpbmV9ID0gdGhpcy5vcEN0eC5zdGFjay5sYXN0KCk7XG4gICAgICB0aGlzLm9wQ3R4LnN0YWNrID0gdGhpcy5vcEN0eC5zdGFjay5wb3AoKTtcbiAgICAgIHRoaXMub3BDdHgucHJlYyA9IHByZWM7XG4gICAgICB0aGlzLm9wQ3R4LmNvbWJpbmUgPSBjb21iaW5lO1xuICAgICAgcmV0dXJuIHRlcm07XG4gICAgfVxuICB9XG4gIGVuZm9yZXN0VGVtcGxhdGVFbGVtZW50cygpIHtcbiAgICBsZXQgbG9va2FoZWFkXzIxNSA9IHRoaXMubWF0Y2hUZW1wbGF0ZSgpO1xuICAgIGxldCBlbGVtZW50c18yMTYgPSBsb29rYWhlYWRfMjE1LnRva2VuLml0ZW1zLm1hcChpdF8yMTcgPT4ge1xuICAgICAgaWYgKGl0XzIxNyBpbnN0YW5jZW9mIFN5bnRheCAmJiBpdF8yMTcuaXNEZWxpbWl0ZXIoKSkge1xuICAgICAgICBsZXQgZW5mID0gbmV3IEVuZm9yZXN0ZXIoaXRfMjE3LmlubmVyKCksIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIGVuZi5lbmZvcmVzdChcImV4cHJlc3Npb25cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJUZW1wbGF0ZUVsZW1lbnRcIiwge3Jhd1ZhbHVlOiBpdF8yMTcuc2xpY2UudGV4dH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBlbGVtZW50c18yMTY7XG4gIH1cbiAgZXhwYW5kTWFjcm8oZW5mb3Jlc3RUeXBlXzIxOCkge1xuICAgIGxldCBuYW1lXzIxOSA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIGxldCBzeW50YXhUcmFuc2Zvcm1fMjIwID0gdGhpcy5nZXRDb21waWxldGltZVRyYW5zZm9ybShuYW1lXzIxOSk7XG4gICAgaWYgKHN5bnRheFRyYW5zZm9ybV8yMjAgPT0gbnVsbCB8fCB0eXBlb2Ygc3ludGF4VHJhbnNmb3JtXzIyMC52YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKG5hbWVfMjE5LCBcInRoZSBtYWNybyBuYW1lIHdhcyBub3QgYm91bmQgdG8gYSB2YWx1ZSB0aGF0IGNvdWxkIGJlIGludm9rZWRcIik7XG4gICAgfVxuICAgIGxldCB1c2VTaXRlU2NvcGVfMjIxID0gZnJlc2hTY29wZShcInVcIik7XG4gICAgbGV0IGludHJvZHVjZWRTY29wZV8yMjIgPSBmcmVzaFNjb3BlKFwiaVwiKTtcbiAgICB0aGlzLmNvbnRleHQudXNlU2NvcGUgPSB1c2VTaXRlU2NvcGVfMjIxO1xuICAgIGxldCBjdHhfMjIzID0gbmV3IE1hY3JvQ29udGV4dCh0aGlzLCBuYW1lXzIxOSwgdGhpcy5jb250ZXh0LCB1c2VTaXRlU2NvcGVfMjIxLCBpbnRyb2R1Y2VkU2NvcGVfMjIyKTtcbiAgICBsZXQgcmVzdWx0XzIyNCA9IHNhbml0aXplUmVwbGFjZW1lbnRWYWx1ZXMoc3ludGF4VHJhbnNmb3JtXzIyMC52YWx1ZS5jYWxsKG51bGwsIGN0eF8yMjMpKTtcbiAgICBpZiAoIUxpc3QuaXNMaXN0KHJlc3VsdF8yMjQpKSB7XG4gICAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKG5hbWVfMjE5LCBcIm1hY3JvIG11c3QgcmV0dXJuIGEgbGlzdCBidXQgZ290OiBcIiArIHJlc3VsdF8yMjQpO1xuICAgIH1cbiAgICByZXN1bHRfMjI0ID0gcmVzdWx0XzIyNC5tYXAoc3R4XzIyNSA9PiB7XG4gICAgICBpZiAoIShzdHhfMjI1ICYmIHR5cGVvZiBzdHhfMjI1LmFkZFNjb3BlID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgICAgIHRocm93IHRoaXMuY3JlYXRlRXJyb3IobmFtZV8yMTksIFwibWFjcm8gbXVzdCByZXR1cm4gc3ludGF4IG9iamVjdHMgb3IgdGVybXMgYnV0IGdvdDogXCIgKyBzdHhfMjI1KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHhfMjI1LmFkZFNjb3BlKGludHJvZHVjZWRTY29wZV8yMjIsIHRoaXMuY29udGV4dC5iaW5kaW5ncywge2ZsaXA6IHRydWV9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0XzIyNDtcbiAgfVxuICBjb25zdW1lU2VtaWNvbG9uKCkge1xuICAgIGxldCBsb29rYWhlYWRfMjI2ID0gdGhpcy5wZWVrKCk7XG4gICAgaWYgKGxvb2thaGVhZF8yMjYgJiYgdGhpcy5pc1B1bmN0dWF0b3IobG9va2FoZWFkXzIyNiwgXCI7XCIpKSB7XG4gICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICB9XG4gIH1cbiAgY29uc3VtZUNvbW1hKCkge1xuICAgIGxldCBsb29rYWhlYWRfMjI3ID0gdGhpcy5wZWVrKCk7XG4gICAgaWYgKGxvb2thaGVhZF8yMjcgJiYgdGhpcy5pc1B1bmN0dWF0b3IobG9va2FoZWFkXzIyNywgXCIsXCIpKSB7XG4gICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICB9XG4gIH1cbiAgaXNUZXJtKHRlcm1fMjI4KSB7XG4gICAgcmV0dXJuIHRlcm1fMjI4ICYmIHRlcm1fMjI4IGluc3RhbmNlb2YgVGVybTtcbiAgfVxuICBpc0VPRih0ZXJtXzIyOSkge1xuICAgIHJldHVybiB0ZXJtXzIyOSAmJiB0ZXJtXzIyOSBpbnN0YW5jZW9mIFN5bnRheCAmJiB0ZXJtXzIyOS5pc0VPRigpO1xuICB9XG4gIGlzSWRlbnRpZmllcih0ZXJtXzIzMCwgdmFsXzIzMSA9IG51bGwpIHtcbiAgICByZXR1cm4gdGVybV8yMzAgJiYgdGVybV8yMzAgaW5zdGFuY2VvZiBTeW50YXggJiYgdGVybV8yMzAuaXNJZGVudGlmaWVyKCkgJiYgKHZhbF8yMzEgPT09IG51bGwgfHwgdGVybV8yMzAudmFsKCkgPT09IHZhbF8yMzEpO1xuICB9XG4gIGlzUHJvcGVydHlOYW1lKHRlcm1fMjMyKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNJZGVudGlmaWVyKHRlcm1fMjMyKSB8fCB0aGlzLmlzS2V5d29yZCh0ZXJtXzIzMikgfHwgdGhpcy5pc051bWVyaWNMaXRlcmFsKHRlcm1fMjMyKSB8fCB0aGlzLmlzU3RyaW5nTGl0ZXJhbCh0ZXJtXzIzMikgfHwgdGhpcy5pc0JyYWNrZXRzKHRlcm1fMjMyKTtcbiAgfVxuICBpc051bWVyaWNMaXRlcmFsKHRlcm1fMjMzKSB7XG4gICAgcmV0dXJuIHRlcm1fMjMzICYmIHRlcm1fMjMzIGluc3RhbmNlb2YgU3ludGF4ICYmIHRlcm1fMjMzLmlzTnVtZXJpY0xpdGVyYWwoKTtcbiAgfVxuICBpc1N0cmluZ0xpdGVyYWwodGVybV8yMzQpIHtcbiAgICByZXR1cm4gdGVybV8yMzQgJiYgdGVybV8yMzQgaW5zdGFuY2VvZiBTeW50YXggJiYgdGVybV8yMzQuaXNTdHJpbmdMaXRlcmFsKCk7XG4gIH1cbiAgaXNUZW1wbGF0ZSh0ZXJtXzIzNSkge1xuICAgIHJldHVybiB0ZXJtXzIzNSAmJiB0ZXJtXzIzNSBpbnN0YW5jZW9mIFN5bnRheCAmJiB0ZXJtXzIzNS5pc1RlbXBsYXRlKCk7XG4gIH1cbiAgaXNCb29sZWFuTGl0ZXJhbCh0ZXJtXzIzNikge1xuICAgIHJldHVybiB0ZXJtXzIzNiAmJiB0ZXJtXzIzNiBpbnN0YW5jZW9mIFN5bnRheCAmJiB0ZXJtXzIzNi5pc0Jvb2xlYW5MaXRlcmFsKCk7XG4gIH1cbiAgaXNOdWxsTGl0ZXJhbCh0ZXJtXzIzNykge1xuICAgIHJldHVybiB0ZXJtXzIzNyAmJiB0ZXJtXzIzNyBpbnN0YW5jZW9mIFN5bnRheCAmJiB0ZXJtXzIzNy5pc051bGxMaXRlcmFsKCk7XG4gIH1cbiAgaXNSZWd1bGFyRXhwcmVzc2lvbih0ZXJtXzIzOCkge1xuICAgIHJldHVybiB0ZXJtXzIzOCAmJiB0ZXJtXzIzOCBpbnN0YW5jZW9mIFN5bnRheCAmJiB0ZXJtXzIzOC5pc1JlZ3VsYXJFeHByZXNzaW9uKCk7XG4gIH1cbiAgaXNQYXJlbnModGVybV8yMzkpIHtcbiAgICByZXR1cm4gdGVybV8yMzkgJiYgdGVybV8yMzkgaW5zdGFuY2VvZiBTeW50YXggJiYgdGVybV8yMzkuaXNQYXJlbnMoKTtcbiAgfVxuICBpc0JyYWNlcyh0ZXJtXzI0MCkge1xuICAgIHJldHVybiB0ZXJtXzI0MCAmJiB0ZXJtXzI0MCBpbnN0YW5jZW9mIFN5bnRheCAmJiB0ZXJtXzI0MC5pc0JyYWNlcygpO1xuICB9XG4gIGlzQnJhY2tldHModGVybV8yNDEpIHtcbiAgICByZXR1cm4gdGVybV8yNDEgJiYgdGVybV8yNDEgaW5zdGFuY2VvZiBTeW50YXggJiYgdGVybV8yNDEuaXNCcmFja2V0cygpO1xuICB9XG4gIGlzQXNzaWduKHRlcm1fMjQyKSB7XG4gICAgaWYgKHRoaXMuaXNQdW5jdHVhdG9yKHRlcm1fMjQyKSkge1xuICAgICAgc3dpdGNoICh0ZXJtXzI0Mi52YWwoKSkge1xuICAgICAgICBjYXNlIFwiPVwiOlxuICAgICAgICBjYXNlIFwifD1cIjpcbiAgICAgICAgY2FzZSBcIl49XCI6XG4gICAgICAgIGNhc2UgXCImPVwiOlxuICAgICAgICBjYXNlIFwiPDw9XCI6XG4gICAgICAgIGNhc2UgXCI+Pj1cIjpcbiAgICAgICAgY2FzZSBcIj4+Pj1cIjpcbiAgICAgICAgY2FzZSBcIis9XCI6XG4gICAgICAgIGNhc2UgXCItPVwiOlxuICAgICAgICBjYXNlIFwiKj1cIjpcbiAgICAgICAgY2FzZSBcIi89XCI6XG4gICAgICAgIGNhc2UgXCIlPVwiOlxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlzS2V5d29yZCh0ZXJtXzI0MywgdmFsXzI0NCA9IG51bGwpIHtcbiAgICByZXR1cm4gdGVybV8yNDMgJiYgdGVybV8yNDMgaW5zdGFuY2VvZiBTeW50YXggJiYgdGVybV8yNDMuaXNLZXl3b3JkKCkgJiYgKHZhbF8yNDQgPT09IG51bGwgfHwgdGVybV8yNDMudmFsKCkgPT09IHZhbF8yNDQpO1xuICB9XG4gIGlzUHVuY3R1YXRvcih0ZXJtXzI0NSwgdmFsXzI0NiA9IG51bGwpIHtcbiAgICByZXR1cm4gdGVybV8yNDUgJiYgdGVybV8yNDUgaW5zdGFuY2VvZiBTeW50YXggJiYgdGVybV8yNDUuaXNQdW5jdHVhdG9yKCkgJiYgKHZhbF8yNDYgPT09IG51bGwgfHwgdGVybV8yNDUudmFsKCkgPT09IHZhbF8yNDYpO1xuICB9XG4gIGlzT3BlcmF0b3IodGVybV8yNDcpIHtcbiAgICByZXR1cm4gdGVybV8yNDcgJiYgdGVybV8yNDcgaW5zdGFuY2VvZiBTeW50YXggJiYgaXNPcGVyYXRvcih0ZXJtXzI0Nyk7XG4gIH1cbiAgaXNVcGRhdGVPcGVyYXRvcih0ZXJtXzI0OCkge1xuICAgIHJldHVybiB0ZXJtXzI0OCAmJiB0ZXJtXzI0OCBpbnN0YW5jZW9mIFN5bnRheCAmJiB0ZXJtXzI0OC5pc1B1bmN0dWF0b3IoKSAmJiAodGVybV8yNDgudmFsKCkgPT09IFwiKytcIiB8fCB0ZXJtXzI0OC52YWwoKSA9PT0gXCItLVwiKTtcbiAgfVxuICBpc0ZuRGVjbFRyYW5zZm9ybSh0ZXJtXzI0OSkge1xuICAgIHJldHVybiB0ZXJtXzI0OSAmJiB0ZXJtXzI0OSBpbnN0YW5jZW9mIFN5bnRheCAmJiB0aGlzLmNvbnRleHQuZW52LmdldCh0ZXJtXzI0OS5yZXNvbHZlKCkpID09PSBGdW5jdGlvbkRlY2xUcmFuc2Zvcm07XG4gIH1cbiAgaXNWYXJEZWNsVHJhbnNmb3JtKHRlcm1fMjUwKSB7XG4gICAgcmV0dXJuIHRlcm1fMjUwICYmIHRlcm1fMjUwIGluc3RhbmNlb2YgU3ludGF4ICYmIHRoaXMuY29udGV4dC5lbnYuZ2V0KHRlcm1fMjUwLnJlc29sdmUoKSkgPT09IFZhcmlhYmxlRGVjbFRyYW5zZm9ybTtcbiAgfVxuICBpc0xldERlY2xUcmFuc2Zvcm0odGVybV8yNTEpIHtcbiAgICByZXR1cm4gdGVybV8yNTEgJiYgdGVybV8yNTEgaW5zdGFuY2VvZiBTeW50YXggJiYgdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV8yNTEucmVzb2x2ZSgpKSA9PT0gTGV0RGVjbFRyYW5zZm9ybTtcbiAgfVxuICBpc0NvbnN0RGVjbFRyYW5zZm9ybSh0ZXJtXzI1Mikge1xuICAgIHJldHVybiB0ZXJtXzI1MiAmJiB0ZXJtXzI1MiBpbnN0YW5jZW9mIFN5bnRheCAmJiB0aGlzLmNvbnRleHQuZW52LmdldCh0ZXJtXzI1Mi5yZXNvbHZlKCkpID09PSBDb25zdERlY2xUcmFuc2Zvcm07XG4gIH1cbiAgaXNTeW50YXhEZWNsVHJhbnNmb3JtKHRlcm1fMjUzKSB7XG4gICAgcmV0dXJuIHRlcm1fMjUzICYmIHRlcm1fMjUzIGluc3RhbmNlb2YgU3ludGF4ICYmIHRoaXMuY29udGV4dC5lbnYuZ2V0KHRlcm1fMjUzLnJlc29sdmUoKSkgPT09IFN5bnRheERlY2xUcmFuc2Zvcm07XG4gIH1cbiAgaXNTeW50YXhyZWNEZWNsVHJhbnNmb3JtKHRlcm1fMjU0KSB7XG4gICAgcmV0dXJuIHRlcm1fMjU0ICYmIHRlcm1fMjU0IGluc3RhbmNlb2YgU3ludGF4ICYmIHRoaXMuY29udGV4dC5lbnYuZ2V0KHRlcm1fMjU0LnJlc29sdmUoKSkgPT09IFN5bnRheHJlY0RlY2xUcmFuc2Zvcm07XG4gIH1cbiAgaXNTeW50YXhUZW1wbGF0ZSh0ZXJtXzI1NSkge1xuICAgIHJldHVybiB0ZXJtXzI1NSAmJiB0ZXJtXzI1NSBpbnN0YW5jZW9mIFN5bnRheCAmJiB0ZXJtXzI1NS5pc1N5bnRheFRlbXBsYXRlKCk7XG4gIH1cbiAgaXNTeW50YXhRdW90ZVRyYW5zZm9ybSh0ZXJtXzI1Nikge1xuICAgIHJldHVybiB0ZXJtXzI1NiAmJiB0ZXJtXzI1NiBpbnN0YW5jZW9mIFN5bnRheCAmJiB0aGlzLmNvbnRleHQuZW52LmdldCh0ZXJtXzI1Ni5yZXNvbHZlKCkpID09PSBTeW50YXhRdW90ZVRyYW5zZm9ybTtcbiAgfVxuICBpc1JldHVyblN0bXRUcmFuc2Zvcm0odGVybV8yNTcpIHtcbiAgICByZXR1cm4gdGVybV8yNTcgJiYgdGVybV8yNTcgaW5zdGFuY2VvZiBTeW50YXggJiYgdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV8yNTcucmVzb2x2ZSgpKSA9PT0gUmV0dXJuU3RhdGVtZW50VHJhbnNmb3JtO1xuICB9XG4gIGlzV2hpbGVUcmFuc2Zvcm0odGVybV8yNTgpIHtcbiAgICByZXR1cm4gdGVybV8yNTggJiYgdGVybV8yNTggaW5zdGFuY2VvZiBTeW50YXggJiYgdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV8yNTgucmVzb2x2ZSgpKSA9PT0gV2hpbGVUcmFuc2Zvcm07XG4gIH1cbiAgaXNGb3JUcmFuc2Zvcm0odGVybV8yNTkpIHtcbiAgICByZXR1cm4gdGVybV8yNTkgJiYgdGVybV8yNTkgaW5zdGFuY2VvZiBTeW50YXggJiYgdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV8yNTkucmVzb2x2ZSgpKSA9PT0gRm9yVHJhbnNmb3JtO1xuICB9XG4gIGlzU3dpdGNoVHJhbnNmb3JtKHRlcm1fMjYwKSB7XG4gICAgcmV0dXJuIHRlcm1fMjYwICYmIHRlcm1fMjYwIGluc3RhbmNlb2YgU3ludGF4ICYmIHRoaXMuY29udGV4dC5lbnYuZ2V0KHRlcm1fMjYwLnJlc29sdmUoKSkgPT09IFN3aXRjaFRyYW5zZm9ybTtcbiAgfVxuICBpc0JyZWFrVHJhbnNmb3JtKHRlcm1fMjYxKSB7XG4gICAgcmV0dXJuIHRlcm1fMjYxICYmIHRlcm1fMjYxIGluc3RhbmNlb2YgU3ludGF4ICYmIHRoaXMuY29udGV4dC5lbnYuZ2V0KHRlcm1fMjYxLnJlc29sdmUoKSkgPT09IEJyZWFrVHJhbnNmb3JtO1xuICB9XG4gIGlzQ29udGludWVUcmFuc2Zvcm0odGVybV8yNjIpIHtcbiAgICByZXR1cm4gdGVybV8yNjIgJiYgdGVybV8yNjIgaW5zdGFuY2VvZiBTeW50YXggJiYgdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV8yNjIucmVzb2x2ZSgpKSA9PT0gQ29udGludWVUcmFuc2Zvcm07XG4gIH1cbiAgaXNEb1RyYW5zZm9ybSh0ZXJtXzI2Mykge1xuICAgIHJldHVybiB0ZXJtXzI2MyAmJiB0ZXJtXzI2MyBpbnN0YW5jZW9mIFN5bnRheCAmJiB0aGlzLmNvbnRleHQuZW52LmdldCh0ZXJtXzI2My5yZXNvbHZlKCkpID09PSBEb1RyYW5zZm9ybTtcbiAgfVxuICBpc0RlYnVnZ2VyVHJhbnNmb3JtKHRlcm1fMjY0KSB7XG4gICAgcmV0dXJuIHRlcm1fMjY0ICYmIHRlcm1fMjY0IGluc3RhbmNlb2YgU3ludGF4ICYmIHRoaXMuY29udGV4dC5lbnYuZ2V0KHRlcm1fMjY0LnJlc29sdmUoKSkgPT09IERlYnVnZ2VyVHJhbnNmb3JtO1xuICB9XG4gIGlzV2l0aFRyYW5zZm9ybSh0ZXJtXzI2NSkge1xuICAgIHJldHVybiB0ZXJtXzI2NSAmJiB0ZXJtXzI2NSBpbnN0YW5jZW9mIFN5bnRheCAmJiB0aGlzLmNvbnRleHQuZW52LmdldCh0ZXJtXzI2NS5yZXNvbHZlKCkpID09PSBXaXRoVHJhbnNmb3JtO1xuICB9XG4gIGlzVHJ5VHJhbnNmb3JtKHRlcm1fMjY2KSB7XG4gICAgcmV0dXJuIHRlcm1fMjY2ICYmIHRlcm1fMjY2IGluc3RhbmNlb2YgU3ludGF4ICYmIHRoaXMuY29udGV4dC5lbnYuZ2V0KHRlcm1fMjY2LnJlc29sdmUoKSkgPT09IFRyeVRyYW5zZm9ybTtcbiAgfVxuICBpc1Rocm93VHJhbnNmb3JtKHRlcm1fMjY3KSB7XG4gICAgcmV0dXJuIHRlcm1fMjY3ICYmIHRlcm1fMjY3IGluc3RhbmNlb2YgU3ludGF4ICYmIHRoaXMuY29udGV4dC5lbnYuZ2V0KHRlcm1fMjY3LnJlc29sdmUoKSkgPT09IFRocm93VHJhbnNmb3JtO1xuICB9XG4gIGlzSWZUcmFuc2Zvcm0odGVybV8yNjgpIHtcbiAgICByZXR1cm4gdGVybV8yNjggJiYgdGVybV8yNjggaW5zdGFuY2VvZiBTeW50YXggJiYgdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV8yNjgucmVzb2x2ZSgpKSA9PT0gSWZUcmFuc2Zvcm07XG4gIH1cbiAgaXNOZXdUcmFuc2Zvcm0odGVybV8yNjkpIHtcbiAgICByZXR1cm4gdGVybV8yNjkgJiYgdGVybV8yNjkgaW5zdGFuY2VvZiBTeW50YXggJiYgdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV8yNjkucmVzb2x2ZSgpKSA9PT0gTmV3VHJhbnNmb3JtO1xuICB9XG4gIGlzQ29tcGlsZXRpbWVUcmFuc2Zvcm0odGVybV8yNzApIHtcbiAgICByZXR1cm4gdGVybV8yNzAgJiYgdGVybV8yNzAgaW5zdGFuY2VvZiBTeW50YXggJiYgKHRoaXMuY29udGV4dC5lbnYuZ2V0KHRlcm1fMjcwLnJlc29sdmUoKSkgaW5zdGFuY2VvZiBDb21waWxldGltZVRyYW5zZm9ybSB8fCB0aGlzLmNvbnRleHQuc3RvcmUuZ2V0KHRlcm1fMjcwLnJlc29sdmUoKSkgaW5zdGFuY2VvZiBDb21waWxldGltZVRyYW5zZm9ybSk7XG4gIH1cbiAgZ2V0Q29tcGlsZXRpbWVUcmFuc2Zvcm0odGVybV8yNzEpIHtcbiAgICBpZiAodGhpcy5jb250ZXh0LmVudi5oYXModGVybV8yNzEucmVzb2x2ZSgpKSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5lbnYuZ2V0KHRlcm1fMjcxLnJlc29sdmUoKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbnRleHQuc3RvcmUuZ2V0KHRlcm1fMjcxLnJlc29sdmUoKSk7XG4gIH1cbiAgbGluZU51bWJlckVxKGFfMjcyLCBiXzI3Mykge1xuICAgIGlmICghKGFfMjcyICYmIGJfMjczKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhc3NlcnQoYV8yNzIgaW5zdGFuY2VvZiBTeW50YXgsIFwiZXhwZWN0aW5nIGEgc3ludGF4IG9iamVjdFwiKTtcbiAgICBhc3NlcnQoYl8yNzMgaW5zdGFuY2VvZiBTeW50YXgsIFwiZXhwZWN0aW5nIGEgc3ludGF4IG9iamVjdFwiKTtcbiAgICByZXR1cm4gYV8yNzIubGluZU51bWJlcigpID09PSBiXzI3My5saW5lTnVtYmVyKCk7XG4gIH1cbiAgbWF0Y2hJZGVudGlmaWVyKHZhbF8yNzQpIHtcbiAgICBsZXQgbG9va2FoZWFkXzI3NSA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIGlmICh0aGlzLmlzSWRlbnRpZmllcihsb29rYWhlYWRfMjc1KSkge1xuICAgICAgcmV0dXJuIGxvb2thaGVhZF8yNzU7XG4gICAgfVxuICAgIHRocm93IHRoaXMuY3JlYXRlRXJyb3IobG9va2FoZWFkXzI3NSwgXCJleHBlY3RpbmcgYW4gaWRlbnRpZmllclwiKTtcbiAgfVxuICBtYXRjaEtleXdvcmQodmFsXzI3Nikge1xuICAgIGxldCBsb29rYWhlYWRfMjc3ID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgaWYgKHRoaXMuaXNLZXl3b3JkKGxvb2thaGVhZF8yNzcsIHZhbF8yNzYpKSB7XG4gICAgICByZXR1cm4gbG9va2FoZWFkXzI3NztcbiAgICB9XG4gICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcihsb29rYWhlYWRfMjc3LCBcImV4cGVjdGluZyBcIiArIHZhbF8yNzYpO1xuICB9XG4gIG1hdGNoTGl0ZXJhbCgpIHtcbiAgICBsZXQgbG9va2FoZWFkXzI3OCA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIGlmICh0aGlzLmlzTnVtZXJpY0xpdGVyYWwobG9va2FoZWFkXzI3OCkgfHwgdGhpcy5pc1N0cmluZ0xpdGVyYWwobG9va2FoZWFkXzI3OCkgfHwgdGhpcy5pc0Jvb2xlYW5MaXRlcmFsKGxvb2thaGVhZF8yNzgpIHx8IHRoaXMuaXNOdWxsTGl0ZXJhbChsb29rYWhlYWRfMjc4KSB8fCB0aGlzLmlzVGVtcGxhdGUobG9va2FoZWFkXzI3OCkgfHwgdGhpcy5pc1JlZ3VsYXJFeHByZXNzaW9uKGxvb2thaGVhZF8yNzgpKSB7XG4gICAgICByZXR1cm4gbG9va2FoZWFkXzI3ODtcbiAgICB9XG4gICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcihsb29rYWhlYWRfMjc4LCBcImV4cGVjdGluZyBhIGxpdGVyYWxcIik7XG4gIH1cbiAgbWF0Y2hTdHJpbmdMaXRlcmFsKCkge1xuICAgIGxldCBsb29rYWhlYWRfMjc5ID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgaWYgKHRoaXMuaXNTdHJpbmdMaXRlcmFsKGxvb2thaGVhZF8yNzkpKSB7XG4gICAgICByZXR1cm4gbG9va2FoZWFkXzI3OTtcbiAgICB9XG4gICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcihsb29rYWhlYWRfMjc5LCBcImV4cGVjdGluZyBhIHN0cmluZyBsaXRlcmFsXCIpO1xuICB9XG4gIG1hdGNoVGVtcGxhdGUoKSB7XG4gICAgbGV0IGxvb2thaGVhZF8yODAgPSB0aGlzLmFkdmFuY2UoKTtcbiAgICBpZiAodGhpcy5pc1RlbXBsYXRlKGxvb2thaGVhZF8yODApKSB7XG4gICAgICByZXR1cm4gbG9va2FoZWFkXzI4MDtcbiAgICB9XG4gICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcihsb29rYWhlYWRfMjgwLCBcImV4cGVjdGluZyBhIHRlbXBsYXRlIGxpdGVyYWxcIik7XG4gIH1cbiAgbWF0Y2hQYXJlbnMoKSB7XG4gICAgbGV0IGxvb2thaGVhZF8yODEgPSB0aGlzLmFkdmFuY2UoKTtcbiAgICBpZiAodGhpcy5pc1BhcmVucyhsb29rYWhlYWRfMjgxKSkge1xuICAgICAgcmV0dXJuIGxvb2thaGVhZF8yODEuaW5uZXIoKTtcbiAgICB9XG4gICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcihsb29rYWhlYWRfMjgxLCBcImV4cGVjdGluZyBwYXJlbnNcIik7XG4gIH1cbiAgbWF0Y2hDdXJsaWVzKCkge1xuICAgIGxldCBsb29rYWhlYWRfMjgyID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgaWYgKHRoaXMuaXNCcmFjZXMobG9va2FoZWFkXzI4MikpIHtcbiAgICAgIHJldHVybiBsb29rYWhlYWRfMjgyLmlubmVyKCk7XG4gICAgfVxuICAgIHRocm93IHRoaXMuY3JlYXRlRXJyb3IobG9va2FoZWFkXzI4MiwgXCJleHBlY3RpbmcgY3VybHkgYnJhY2VzXCIpO1xuICB9XG4gIG1hdGNoU3F1YXJlcygpIHtcbiAgICBsZXQgbG9va2FoZWFkXzI4MyA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIGlmICh0aGlzLmlzQnJhY2tldHMobG9va2FoZWFkXzI4MykpIHtcbiAgICAgIHJldHVybiBsb29rYWhlYWRfMjgzLmlubmVyKCk7XG4gICAgfVxuICAgIHRocm93IHRoaXMuY3JlYXRlRXJyb3IobG9va2FoZWFkXzI4MywgXCJleHBlY3Rpbmcgc3FhdXJlIGJyYWNlc1wiKTtcbiAgfVxuICBtYXRjaFVuYXJ5T3BlcmF0b3IoKSB7XG4gICAgbGV0IGxvb2thaGVhZF8yODQgPSB0aGlzLmFkdmFuY2UoKTtcbiAgICBpZiAoaXNVbmFyeU9wZXJhdG9yKGxvb2thaGVhZF8yODQpKSB7XG4gICAgICByZXR1cm4gbG9va2FoZWFkXzI4NDtcbiAgICB9XG4gICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcihsb29rYWhlYWRfMjg0LCBcImV4cGVjdGluZyBhIHVuYXJ5IG9wZXJhdG9yXCIpO1xuICB9XG4gIG1hdGNoUHVuY3R1YXRvcih2YWxfMjg1KSB7XG4gICAgbGV0IGxvb2thaGVhZF8yODYgPSB0aGlzLmFkdmFuY2UoKTtcbiAgICBpZiAodGhpcy5pc1B1bmN0dWF0b3IobG9va2FoZWFkXzI4NikpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsXzI4NSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAobG9va2FoZWFkXzI4Ni52YWwoKSA9PT0gdmFsXzI4NSkge1xuICAgICAgICAgIHJldHVybiBsb29rYWhlYWRfMjg2O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IHRoaXMuY3JlYXRlRXJyb3IobG9va2FoZWFkXzI4NiwgXCJleHBlY3RpbmcgYSBcIiArIHZhbF8yODUgKyBcIiBwdW5jdHVhdG9yXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbG9va2FoZWFkXzI4NjtcbiAgICB9XG4gICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcihsb29rYWhlYWRfMjg2LCBcImV4cGVjdGluZyBhIHB1bmN0dWF0b3JcIik7XG4gIH1cbiAgY3JlYXRlRXJyb3Ioc3R4XzI4NywgbWVzc2FnZV8yODgpIHtcbiAgICBsZXQgY3R4XzI4OSA9IFwiXCI7XG4gICAgbGV0IG9mZmVuZGluZ18yOTAgPSBzdHhfMjg3O1xuICAgIGlmICh0aGlzLnJlc3Quc2l6ZSA+IDApIHtcbiAgICAgIGN0eF8yODkgPSB0aGlzLnJlc3Quc2xpY2UoMCwgMjApLm1hcCh0ZXJtXzI5MSA9PiB7XG4gICAgICAgIGlmICh0ZXJtXzI5MS5pc0RlbGltaXRlcigpKSB7XG4gICAgICAgICAgcmV0dXJuIHRlcm1fMjkxLmlubmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIExpc3Qub2YodGVybV8yOTEpO1xuICAgICAgfSkuZmxhdHRlbigpLm1hcChzXzI5MiA9PiB7XG4gICAgICAgIGlmIChzXzI5MiA9PT0gb2ZmZW5kaW5nXzI5MCkge1xuICAgICAgICAgIHJldHVybiBcIl9fXCIgKyBzXzI5Mi52YWwoKSArIFwiX19cIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc18yOTIudmFsKCk7XG4gICAgICB9KS5qb2luKFwiIFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3R4XzI4OSA9IG9mZmVuZGluZ18yOTAudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBFcnJvcihtZXNzYWdlXzI4OCArIFwiXFxuXCIgKyBjdHhfMjg5KTtcbiAgfVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,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IFwiLi90ZXJtc1wiO1xuaW1wb3J0IHtGdW5jdGlvbkRlY2xUcmFuc2Zvcm0sIFZhcmlhYmxlRGVjbFRyYW5zZm9ybSwgTmV3VHJhbnNmb3JtLCBMZXREZWNsVHJhbnNmb3JtLCBDb25zdERlY2xUcmFuc2Zvcm0sIFN5bnRheERlY2xUcmFuc2Zvcm0sIFN5bnRheHJlY0RlY2xUcmFuc2Zvcm0sIFN5bnRheFF1b3RlVHJhbnNmb3JtLCBSZXR1cm5TdGF0ZW1lbnRUcmFuc2Zvcm0sIFdoaWxlVHJhbnNmb3JtLCBJZlRyYW5zZm9ybSwgRm9yVHJhbnNmb3JtLCBTd2l0Y2hUcmFuc2Zvcm0sIEJyZWFrVHJhbnNmb3JtLCBDb250aW51ZVRyYW5zZm9ybSwgRG9UcmFuc2Zvcm0sIERlYnVnZ2VyVHJhbnNmb3JtLCBXaXRoVHJhbnNmb3JtLCBUcnlUcmFuc2Zvcm0sIFRocm93VHJhbnNmb3JtLCBDb21waWxldGltZVRyYW5zZm9ybX0gZnJvbSBcIi4vdHJhbnNmb3Jtc1wiO1xuaW1wb3J0IHtMaXN0fSBmcm9tIFwiaW1tdXRhYmxlXCI7XG5pbXBvcnQge2V4cGVjdCwgYXNzZXJ0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7aXNPcGVyYXRvciwgaXNVbmFyeU9wZXJhdG9yLCBnZXRPcGVyYXRvckFzc29jLCBnZXRPcGVyYXRvclByZWMsIG9wZXJhdG9yTHR9IGZyb20gXCIuL29wZXJhdG9yc1wiO1xuaW1wb3J0IFN5bnRheCBmcm9tIFwiLi9zeW50YXhcIjtcbmltcG9ydCB7ZnJlc2hTY29wZX0gZnJvbSBcIi4vc2NvcGVcIjtcbmltcG9ydCB7c2FuaXRpemVSZXBsYWNlbWVudFZhbHVlc30gZnJvbSBcIi4vbG9hZC1zeW50YXhcIjtcbmltcG9ydCBNYWNyb0NvbnRleHQgZnJvbSBcIi4vbWFjcm8tY29udGV4dFwiO1xuY29uc3QgRVhQUl9MT09QX09QRVJBVE9SXzI2ID0ge307XG5jb25zdCBFWFBSX0xPT1BfTk9fQ0hBTkdFXzI3ID0ge307XG5jb25zdCBFWFBSX0xPT1BfRVhQQU5TSU9OXzI4ID0ge307XG5leHBvcnQgY2xhc3MgRW5mb3Jlc3RlciB7XG4gIGNvbnN0cnVjdG9yKHN0eGxfMjksIHByZXZfMzAsIGNvbnRleHRfMzEpIHtcbiAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICBhc3NlcnQoTGlzdC5pc0xpc3Qoc3R4bF8yOSksIFwiZXhwZWN0aW5nIGEgbGlzdCBvZiB0ZXJtcyB0byBlbmZvcmVzdFwiKTtcbiAgICBhc3NlcnQoTGlzdC5pc0xpc3QocHJldl8zMCksIFwiZXhwZWN0aW5nIGEgbGlzdCBvZiB0ZXJtcyB0byBlbmZvcmVzdFwiKTtcbiAgICBhc3NlcnQoY29udGV4dF8zMSwgXCJleHBlY3RpbmcgYSBjb250ZXh0IHRvIGVuZm9yZXN0XCIpO1xuICAgIHRoaXMudGVybSA9IG51bGw7XG4gICAgdGhpcy5yZXN0ID0gc3R4bF8yOTtcbiAgICB0aGlzLnByZXYgPSBwcmV2XzMwO1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRfMzE7XG4gIH1cbiAgcGVlayhuXzMyID0gMCkge1xuICAgIHJldHVybiB0aGlzLnJlc3QuZ2V0KG5fMzIpO1xuICB9XG4gIGFkdmFuY2UoKSB7XG4gICAgbGV0IHJldF8zMyA9IHRoaXMucmVzdC5maXJzdCgpO1xuICAgIHRoaXMucmVzdCA9IHRoaXMucmVzdC5yZXN0KCk7XG4gICAgcmV0dXJuIHJldF8zMztcbiAgfVxuICBlbmZvcmVzdCh0eXBlXzM0ID0gXCJNb2R1bGVcIikge1xuICAgIHRoaXMudGVybSA9IG51bGw7XG4gICAgaWYgKHRoaXMucmVzdC5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMudGVybTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNFT0YodGhpcy5wZWVrKCkpKSB7XG4gICAgICB0aGlzLnRlcm0gPSBuZXcgVGVybShcIkVPRlwiLCB7fSk7XG4gICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIHJldHVybiB0aGlzLnRlcm07XG4gICAgfVxuICAgIGxldCByZXN1bHRfMzU7XG4gICAgaWYgKHR5cGVfMzQgPT09IFwiZXhwcmVzc2lvblwiKSB7XG4gICAgICByZXN1bHRfMzUgPSB0aGlzLmVuZm9yZXN0RXhwcmVzc2lvbkxvb3AoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0XzM1ID0gdGhpcy5lbmZvcmVzdE1vZHVsZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZXN0LnNpemUgPT09IDApIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRfMzU7XG4gIH1cbiAgZW5mb3Jlc3RNb2R1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RCb2R5KCk7XG4gIH1cbiAgZW5mb3Jlc3RCb2R5KCkge1xuICAgIHJldHVybiB0aGlzLmVuZm9yZXN0TW9kdWxlSXRlbSgpO1xuICB9XG4gIGVuZm9yZXN0TW9kdWxlSXRlbSgpIHtcbiAgICBsZXQgbG9va2FoZWFkXzM2ID0gdGhpcy5wZWVrKCk7XG4gICAgaWYgKHRoaXMuaXNLZXl3b3JkKGxvb2thaGVhZF8zNiwgXCJpbXBvcnRcIikpIHtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RJbXBvcnREZWNsYXJhdGlvbigpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0tleXdvcmQobG9va2FoZWFkXzM2LCBcImV4cG9ydFwiKSkge1xuICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdEV4cG9ydERlY2xhcmF0aW9uKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVuZm9yZXN0U3RhdGVtZW50KCk7XG4gIH1cbiAgZW5mb3Jlc3RFeHBvcnREZWNsYXJhdGlvbigpIHtcbiAgICBsZXQgbG9va2FoZWFkXzM3ID0gdGhpcy5wZWVrKCk7XG4gICAgaWYgKHRoaXMuaXNQdW5jdHVhdG9yKGxvb2thaGVhZF8zNywgXCIqXCIpKSB7XG4gICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIGxldCBtb2R1bGVTcGVjaWZpZXIgPSB0aGlzLmVuZm9yZXN0RnJvbUNsYXVzZSgpO1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiRXhwb3J0QWxsRnJvbVwiLCB7bW9kdWxlU3BlY2lmaWVyOiBtb2R1bGVTcGVjaWZpZXJ9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNCcmFjZXMobG9va2FoZWFkXzM3KSkge1xuICAgICAgbGV0IG5hbWVkRXhwb3J0cyA9IHRoaXMuZW5mb3Jlc3RFeHBvcnRDbGF1c2UoKTtcbiAgICAgIGxldCBtb2R1bGVTcGVjaWZpZXIgPSBudWxsO1xuICAgICAgaWYgKHRoaXMuaXNJZGVudGlmaWVyKHRoaXMucGVlaygpLCBcImZyb21cIikpIHtcbiAgICAgICAgbW9kdWxlU3BlY2lmaWVyID0gdGhpcy5lbmZvcmVzdEZyb21DbGF1c2UoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgVGVybShcIkV4cG9ydEZyb21cIiwge25hbWVkRXhwb3J0czogbmFtZWRFeHBvcnRzLCBtb2R1bGVTcGVjaWZpZXI6IG1vZHVsZVNwZWNpZmllcn0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0tleXdvcmQobG9va2FoZWFkXzM3LCBcImNsYXNzXCIpKSB7XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJFeHBvcnRcIiwge2RlY2xhcmF0aW9uOiB0aGlzLmVuZm9yZXN0Q2xhc3Moe2lzRXhwcjogZmFsc2V9KX0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0ZuRGVjbFRyYW5zZm9ybShsb29rYWhlYWRfMzcpKSB7XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJFeHBvcnRcIiwge2RlY2xhcmF0aW9uOiB0aGlzLmVuZm9yZXN0RnVuY3Rpb24oe2lzRXhwcjogZmFsc2UsIGluRGVmYXVsdDogZmFsc2V9KX0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0tleXdvcmQobG9va2FoZWFkXzM3LCBcImRlZmF1bHRcIikpIHtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgaWYgKHRoaXMuaXNGbkRlY2xUcmFuc2Zvcm0odGhpcy5wZWVrKCkpKSB7XG4gICAgICAgIHJldHVybiBuZXcgVGVybShcIkV4cG9ydERlZmF1bHRcIiwge2JvZHk6IHRoaXMuZW5mb3Jlc3RGdW5jdGlvbih7aXNFeHByOiBmYWxzZSwgaW5EZWZhdWx0OiB0cnVlfSl9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0tleXdvcmQodGhpcy5wZWVrKCksIFwiY2xhc3NcIikpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiRXhwb3J0RGVmYXVsdFwiLCB7Ym9keTogdGhpcy5lbmZvcmVzdENsYXNzKHtpc0V4cHI6IGZhbHNlLCBpbkRlZmF1bHQ6IHRydWV9KX0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGJvZHkgPSB0aGlzLmVuZm9yZXN0RXhwcmVzc2lvbkxvb3AoKTtcbiAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgICAgIHJldHVybiBuZXcgVGVybShcIkV4cG9ydERlZmF1bHRcIiwge2JvZHk6IGJvZHl9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNWYXJEZWNsVHJhbnNmb3JtKGxvb2thaGVhZF8zNykgfHwgdGhpcy5pc0xldERlY2xUcmFuc2Zvcm0obG9va2FoZWFkXzM3KSB8fCB0aGlzLmlzQ29uc3REZWNsVHJhbnNmb3JtKGxvb2thaGVhZF8zNykgfHwgdGhpcy5pc1N5bnRheHJlY0RlY2xUcmFuc2Zvcm0obG9va2FoZWFkXzM3KSB8fCB0aGlzLmlzU3ludGF4RGVjbFRyYW5zZm9ybShsb29rYWhlYWRfMzcpKSB7XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJFeHBvcnRcIiwge2RlY2xhcmF0aW9uOiB0aGlzLmVuZm9yZXN0VmFyaWFibGVEZWNsYXJhdGlvbigpfSk7XG4gICAgfVxuICAgIHRocm93IHRoaXMuY3JlYXRlRXJyb3IobG9va2FoZWFkXzM3LCBcInVuZXhwZWN0ZWQgc3ludGF4XCIpO1xuICB9XG4gIGVuZm9yZXN0RXhwb3J0Q2xhdXNlKCkge1xuICAgIGxldCBlbmZfMzggPSBuZXcgRW5mb3Jlc3Rlcih0aGlzLm1hdGNoQ3VybGllcygpLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IHJlc3VsdF8zOSA9IFtdO1xuICAgIHdoaWxlIChlbmZfMzgucmVzdC5zaXplICE9PSAwKSB7XG4gICAgICByZXN1bHRfMzkucHVzaChlbmZfMzguZW5mb3Jlc3RFeHBvcnRTcGVjaWZpZXIoKSk7XG4gICAgICBlbmZfMzguY29uc3VtZUNvbW1hKCk7XG4gICAgfVxuICAgIHJldHVybiBMaXN0KHJlc3VsdF8zOSk7XG4gIH1cbiAgZW5mb3Jlc3RFeHBvcnRTcGVjaWZpZXIoKSB7XG4gICAgbGV0IG5hbWVfNDAgPSB0aGlzLmVuZm9yZXN0SWRlbnRpZmllcigpO1xuICAgIGlmICh0aGlzLmlzSWRlbnRpZmllcih0aGlzLnBlZWsoKSwgXCJhc1wiKSkge1xuICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICBsZXQgZXhwb3J0ZWROYW1lID0gdGhpcy5lbmZvcmVzdElkZW50aWZpZXIoKTtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIkV4cG9ydFNwZWNpZmllclwiLCB7bmFtZTogbmFtZV80MCwgZXhwb3J0ZWROYW1lOiBleHBvcnRlZE5hbWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRXhwb3J0U3BlY2lmaWVyXCIsIHtuYW1lOiBudWxsLCBleHBvcnRlZE5hbWU6IG5hbWVfNDB9KTtcbiAgfVxuICBlbmZvcmVzdEltcG9ydERlY2xhcmF0aW9uKCkge1xuICAgIGxldCBsb29rYWhlYWRfNDEgPSB0aGlzLnBlZWsoKTtcbiAgICBsZXQgZGVmYXVsdEJpbmRpbmdfNDIgPSBudWxsO1xuICAgIGxldCBuYW1lZEltcG9ydHNfNDMgPSBMaXN0KCk7XG4gICAgbGV0IGZvclN5bnRheF80NCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmlzU3RyaW5nTGl0ZXJhbChsb29rYWhlYWRfNDEpKSB7XG4gICAgICBsZXQgbW9kdWxlU3BlY2lmaWVyID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIkltcG9ydFwiLCB7ZGVmYXVsdEJpbmRpbmc6IGRlZmF1bHRCaW5kaW5nXzQyLCBuYW1lZEltcG9ydHM6IG5hbWVkSW1wb3J0c180MywgbW9kdWxlU3BlY2lmaWVyOiBtb2R1bGVTcGVjaWZpZXJ9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNJZGVudGlmaWVyKGxvb2thaGVhZF80MSkgfHwgdGhpcy5pc0tleXdvcmQobG9va2FoZWFkXzQxKSkge1xuICAgICAgZGVmYXVsdEJpbmRpbmdfNDIgPSB0aGlzLmVuZm9yZXN0QmluZGluZ0lkZW50aWZpZXIoKTtcbiAgICAgIGlmICghdGhpcy5pc1B1bmN0dWF0b3IodGhpcy5wZWVrKCksIFwiLFwiKSkge1xuICAgICAgICBsZXQgbW9kdWxlU3BlY2lmaWVyID0gdGhpcy5lbmZvcmVzdEZyb21DbGF1c2UoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNLZXl3b3JkKHRoaXMucGVlaygpLCBcImZvclwiKSAmJiB0aGlzLmlzSWRlbnRpZmllcih0aGlzLnBlZWsoMSksIFwic3ludGF4XCIpKSB7XG4gICAgICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICAgICAgZm9yU3ludGF4XzQ0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFRlcm0oXCJJbXBvcnRcIiwge2RlZmF1bHRCaW5kaW5nOiBkZWZhdWx0QmluZGluZ180MiwgbW9kdWxlU3BlY2lmaWVyOiBtb2R1bGVTcGVjaWZpZXIsIG5hbWVkSW1wb3J0czogTGlzdCgpLCBmb3JTeW50YXg6IGZvclN5bnRheF80NH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNvbnN1bWVDb21tYSgpO1xuICAgIGxvb2thaGVhZF80MSA9IHRoaXMucGVlaygpO1xuICAgIGlmICh0aGlzLmlzQnJhY2VzKGxvb2thaGVhZF80MSkpIHtcbiAgICAgIGxldCBpbXBvcnRzID0gdGhpcy5lbmZvcmVzdE5hbWVkSW1wb3J0cygpO1xuICAgICAgbGV0IGZyb21DbGF1c2UgPSB0aGlzLmVuZm9yZXN0RnJvbUNsYXVzZSgpO1xuICAgICAgaWYgKHRoaXMuaXNLZXl3b3JkKHRoaXMucGVlaygpLCBcImZvclwiKSAmJiB0aGlzLmlzSWRlbnRpZmllcih0aGlzLnBlZWsoMSksIFwic3ludGF4XCIpKSB7XG4gICAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgICAgZm9yU3ludGF4XzQ0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgVGVybShcIkltcG9ydFwiLCB7ZGVmYXVsdEJpbmRpbmc6IGRlZmF1bHRCaW5kaW5nXzQyLCBmb3JTeW50YXg6IGZvclN5bnRheF80NCwgbmFtZWRJbXBvcnRzOiBpbXBvcnRzLCBtb2R1bGVTcGVjaWZpZXI6IGZyb21DbGF1c2V9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNQdW5jdHVhdG9yKGxvb2thaGVhZF80MSwgXCIqXCIpKSB7XG4gICAgICBsZXQgbmFtZXNwYWNlQmluZGluZyA9IHRoaXMuZW5mb3Jlc3ROYW1lc3BhY2VCaW5kaW5nKCk7XG4gICAgICBsZXQgbW9kdWxlU3BlY2lmaWVyID0gdGhpcy5lbmZvcmVzdEZyb21DbGF1c2UoKTtcbiAgICAgIGlmICh0aGlzLmlzS2V5d29yZCh0aGlzLnBlZWsoKSwgXCJmb3JcIikgJiYgdGhpcy5pc0lkZW50aWZpZXIodGhpcy5wZWVrKDEpLCBcInN5bnRheFwiKSkge1xuICAgICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICAgIGZvclN5bnRheF80NCA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJJbXBvcnROYW1lc3BhY2VcIiwge2RlZmF1bHRCaW5kaW5nOiBkZWZhdWx0QmluZGluZ180MiwgZm9yU3ludGF4OiBmb3JTeW50YXhfNDQsIG5hbWVzcGFjZUJpbmRpbmc6IG5hbWVzcGFjZUJpbmRpbmcsIG1vZHVsZVNwZWNpZmllcjogbW9kdWxlU3BlY2lmaWVyfSk7XG4gICAgfVxuICAgIHRocm93IHRoaXMuY3JlYXRlRXJyb3IobG9va2FoZWFkXzQxLCBcInVuZXhwZWN0ZWQgc3ludGF4XCIpO1xuICB9XG4gIGVuZm9yZXN0TmFtZXNwYWNlQmluZGluZygpIHtcbiAgICB0aGlzLm1hdGNoUHVuY3R1YXRvcihcIipcIik7XG4gICAgdGhpcy5tYXRjaElkZW50aWZpZXIoXCJhc1wiKTtcbiAgICByZXR1cm4gdGhpcy5lbmZvcmVzdEJpbmRpbmdJZGVudGlmaWVyKCk7XG4gIH1cbiAgZW5mb3Jlc3ROYW1lZEltcG9ydHMoKSB7XG4gICAgbGV0IGVuZl80NSA9IG5ldyBFbmZvcmVzdGVyKHRoaXMubWF0Y2hDdXJsaWVzKCksIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgcmVzdWx0XzQ2ID0gW107XG4gICAgd2hpbGUgKGVuZl80NS5yZXN0LnNpemUgIT09IDApIHtcbiAgICAgIHJlc3VsdF80Ni5wdXNoKGVuZl80NS5lbmZvcmVzdEltcG9ydFNwZWNpZmllcnMoKSk7XG4gICAgICBlbmZfNDUuY29uc3VtZUNvbW1hKCk7XG4gICAgfVxuICAgIHJldHVybiBMaXN0KHJlc3VsdF80Nik7XG4gIH1cbiAgZW5mb3Jlc3RJbXBvcnRTcGVjaWZpZXJzKCkge1xuICAgIGxldCBsb29rYWhlYWRfNDcgPSB0aGlzLnBlZWsoKTtcbiAgICBsZXQgbmFtZV80ODtcbiAgICBpZiAodGhpcy5pc0lkZW50aWZpZXIobG9va2FoZWFkXzQ3KSB8fCB0aGlzLmlzS2V5d29yZChsb29rYWhlYWRfNDcpKSB7XG4gICAgICBuYW1lXzQ4ID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgICBpZiAoIXRoaXMuaXNJZGVudGlmaWVyKHRoaXMucGVlaygpLCBcImFzXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgVGVybShcIkltcG9ydFNwZWNpZmllclwiLCB7bmFtZTogbnVsbCwgYmluZGluZzogbmV3IFRlcm0oXCJCaW5kaW5nSWRlbnRpZmllclwiLCB7bmFtZTogbmFtZV80OH0pfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1hdGNoSWRlbnRpZmllcihcImFzXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKGxvb2thaGVhZF80NywgXCJ1bmV4cGVjdGVkIHRva2VuIGluIGltcG9ydCBzcGVjaWZpZXJcIik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGVybShcIkltcG9ydFNwZWNpZmllclwiLCB7bmFtZTogbmFtZV80OCwgYmluZGluZzogdGhpcy5lbmZvcmVzdEJpbmRpbmdJZGVudGlmaWVyKCl9KTtcbiAgfVxuICBlbmZvcmVzdEZyb21DbGF1c2UoKSB7XG4gICAgdGhpcy5tYXRjaElkZW50aWZpZXIoXCJmcm9tXCIpO1xuICAgIGxldCBsb29rYWhlYWRfNDkgPSB0aGlzLm1hdGNoU3RyaW5nTGl0ZXJhbCgpO1xuICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpO1xuICAgIHJldHVybiBsb29rYWhlYWRfNDk7XG4gIH1cbiAgZW5mb3Jlc3RTdGF0ZW1lbnRMaXN0SXRlbSgpIHtcbiAgICBsZXQgbG9va2FoZWFkXzUwID0gdGhpcy5wZWVrKCk7XG4gICAgaWYgKHRoaXMuaXNGbkRlY2xUcmFuc2Zvcm0obG9va2FoZWFkXzUwKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RGdW5jdGlvbkRlY2xhcmF0aW9uKHtpc0V4cHI6IGZhbHNlfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzS2V5d29yZChsb29rYWhlYWRfNTAsIFwiY2xhc3NcIikpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0Q2xhc3Moe2lzRXhwcjogZmFsc2V9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RTdGF0ZW1lbnQoKTtcbiAgICB9XG4gIH1cbiAgZW5mb3Jlc3RTdGF0ZW1lbnQoKSB7XG4gICAgbGV0IGxvb2thaGVhZF81MSA9IHRoaXMucGVlaygpO1xuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgdGhpcy5pc0NvbXBpbGV0aW1lVHJhbnNmb3JtKGxvb2thaGVhZF81MSkpIHtcbiAgICAgIHRoaXMucmVzdCA9IHRoaXMuZXhwYW5kTWFjcm8oKS5jb25jYXQodGhpcy5yZXN0KTtcbiAgICAgIGxvb2thaGVhZF81MSA9IHRoaXMucGVlaygpO1xuICAgICAgdGhpcy50ZXJtID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzQnJhY2VzKGxvb2thaGVhZF81MSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0QmxvY2tTdGF0ZW1lbnQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzV2hpbGVUcmFuc2Zvcm0obG9va2FoZWFkXzUxKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RXaGlsZVN0YXRlbWVudCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNJZlRyYW5zZm9ybShsb29rYWhlYWRfNTEpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdElmU3RhdGVtZW50KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgdGhpcy5pc0ZvclRyYW5zZm9ybShsb29rYWhlYWRfNTEpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdEZvclN0YXRlbWVudCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNTd2l0Y2hUcmFuc2Zvcm0obG9va2FoZWFkXzUxKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RTd2l0Y2hTdGF0ZW1lbnQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzQnJlYWtUcmFuc2Zvcm0obG9va2FoZWFkXzUxKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RCcmVha1N0YXRlbWVudCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNDb250aW51ZVRyYW5zZm9ybShsb29rYWhlYWRfNTEpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdENvbnRpbnVlU3RhdGVtZW50KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgdGhpcy5pc0RvVHJhbnNmb3JtKGxvb2thaGVhZF81MSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0RG9TdGF0ZW1lbnQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzRGVidWdnZXJUcmFuc2Zvcm0obG9va2FoZWFkXzUxKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3REZWJ1Z2dlclN0YXRlbWVudCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNXaXRoVHJhbnNmb3JtKGxvb2thaGVhZF81MSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0V2l0aFN0YXRlbWVudCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNUcnlUcmFuc2Zvcm0obG9va2FoZWFkXzUxKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RUcnlTdGF0ZW1lbnQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzVGhyb3dUcmFuc2Zvcm0obG9va2FoZWFkXzUxKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RUaHJvd1N0YXRlbWVudCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNLZXl3b3JkKGxvb2thaGVhZF81MSwgXCJjbGFzc1wiKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RDbGFzcyh7aXNFeHByOiBmYWxzZX0pO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNGbkRlY2xUcmFuc2Zvcm0obG9va2FoZWFkXzUxKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RGdW5jdGlvbkRlY2xhcmF0aW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgdGhpcy5pc0lkZW50aWZpZXIobG9va2FoZWFkXzUxKSAmJiB0aGlzLmlzUHVuY3R1YXRvcih0aGlzLnBlZWsoMSksIFwiOlwiKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RMYWJlbGVkU3RhdGVtZW50KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgKHRoaXMuaXNWYXJEZWNsVHJhbnNmb3JtKGxvb2thaGVhZF81MSkgfHwgdGhpcy5pc0xldERlY2xUcmFuc2Zvcm0obG9va2FoZWFkXzUxKSB8fCB0aGlzLmlzQ29uc3REZWNsVHJhbnNmb3JtKGxvb2thaGVhZF81MSkgfHwgdGhpcy5pc1N5bnRheHJlY0RlY2xUcmFuc2Zvcm0obG9va2FoZWFkXzUxKSB8fCB0aGlzLmlzU3ludGF4RGVjbFRyYW5zZm9ybShsb29rYWhlYWRfNTEpKSkge1xuICAgICAgbGV0IHN0bXQgPSBuZXcgVGVybShcIlZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnRcIiwge2RlY2xhcmF0aW9uOiB0aGlzLmVuZm9yZXN0VmFyaWFibGVEZWNsYXJhdGlvbigpfSk7XG4gICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTtcbiAgICAgIHJldHVybiBzdG10O1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNSZXR1cm5TdG10VHJhbnNmb3JtKGxvb2thaGVhZF81MSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0UmV0dXJuU3RhdGVtZW50KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgdGhpcy5pc1B1bmN0dWF0b3IobG9va2FoZWFkXzUxLCBcIjtcIikpIHtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiRW1wdHlTdGF0ZW1lbnRcIiwge30pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lbmZvcmVzdEV4cHJlc3Npb25TdGF0ZW1lbnQoKTtcbiAgfVxuICBlbmZvcmVzdExhYmVsZWRTdGF0ZW1lbnQoKSB7XG4gICAgbGV0IGxhYmVsXzUyID0gdGhpcy5tYXRjaElkZW50aWZpZXIoKTtcbiAgICBsZXQgcHVuY181MyA9IHRoaXMubWF0Y2hQdW5jdHVhdG9yKFwiOlwiKTtcbiAgICBsZXQgc3RtdF81NCA9IHRoaXMuZW5mb3Jlc3RTdGF0ZW1lbnQoKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJMYWJlbGVkU3RhdGVtZW50XCIsIHtsYWJlbDogbGFiZWxfNTIsIGJvZHk6IHN0bXRfNTR9KTtcbiAgfVxuICBlbmZvcmVzdEJyZWFrU3RhdGVtZW50KCkge1xuICAgIHRoaXMubWF0Y2hLZXl3b3JkKFwiYnJlYWtcIik7XG4gICAgbGV0IGxvb2thaGVhZF81NSA9IHRoaXMucGVlaygpO1xuICAgIGxldCBsYWJlbF81NiA9IG51bGw7XG4gICAgaWYgKHRoaXMucmVzdC5zaXplID09PSAwIHx8IHRoaXMuaXNQdW5jdHVhdG9yKGxvb2thaGVhZF81NSwgXCI7XCIpKSB7XG4gICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIkJyZWFrU3RhdGVtZW50XCIsIHtsYWJlbDogbGFiZWxfNTZ9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNJZGVudGlmaWVyKGxvb2thaGVhZF81NSkgfHwgdGhpcy5pc0tleXdvcmQobG9va2FoZWFkXzU1LCBcInlpZWxkXCIpIHx8IHRoaXMuaXNLZXl3b3JkKGxvb2thaGVhZF81NSwgXCJsZXRcIikpIHtcbiAgICAgIGxhYmVsXzU2ID0gdGhpcy5lbmZvcmVzdElkZW50aWZpZXIoKTtcbiAgICB9XG4gICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQnJlYWtTdGF0ZW1lbnRcIiwge2xhYmVsOiBsYWJlbF81Nn0pO1xuICB9XG4gIGVuZm9yZXN0VHJ5U3RhdGVtZW50KCkge1xuICAgIHRoaXMubWF0Y2hLZXl3b3JkKFwidHJ5XCIpO1xuICAgIGxldCBib2R5XzU3ID0gdGhpcy5lbmZvcmVzdEJsb2NrKCk7XG4gICAgaWYgKHRoaXMuaXNLZXl3b3JkKHRoaXMucGVlaygpLCBcImNhdGNoXCIpKSB7XG4gICAgICBsZXQgY2F0Y2hDbGF1c2UgPSB0aGlzLmVuZm9yZXN0Q2F0Y2hDbGF1c2UoKTtcbiAgICAgIGlmICh0aGlzLmlzS2V5d29yZCh0aGlzLnBlZWsoKSwgXCJmaW5hbGx5XCIpKSB7XG4gICAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgICBsZXQgZmluYWxpemVyID0gdGhpcy5lbmZvcmVzdEJsb2NrKCk7XG4gICAgICAgIHJldHVybiBuZXcgVGVybShcIlRyeUZpbmFsbHlTdGF0ZW1lbnRcIiwge2JvZHk6IGJvZHlfNTcsIGNhdGNoQ2xhdXNlOiBjYXRjaENsYXVzZSwgZmluYWxpemVyOiBmaW5hbGl6ZXJ9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgVGVybShcIlRyeUNhdGNoU3RhdGVtZW50XCIsIHtib2R5OiBib2R5XzU3LCBjYXRjaENsYXVzZTogY2F0Y2hDbGF1c2V9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNLZXl3b3JkKHRoaXMucGVlaygpLCBcImZpbmFsbHlcIikpIHtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgbGV0IGZpbmFsaXplciA9IHRoaXMuZW5mb3Jlc3RCbG9jaygpO1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiVHJ5RmluYWxseVN0YXRlbWVudFwiLCB7Ym9keTogYm9keV81NywgY2F0Y2hDbGF1c2U6IG51bGwsIGZpbmFsaXplcjogZmluYWxpemVyfSk7XG4gICAgfVxuICAgIHRocm93IHRoaXMuY3JlYXRlRXJyb3IodGhpcy5wZWVrKCksIFwidHJ5IHdpdGggbm8gY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgfVxuICBlbmZvcmVzdENhdGNoQ2xhdXNlKCkge1xuICAgIHRoaXMubWF0Y2hLZXl3b3JkKFwiY2F0Y2hcIik7XG4gICAgbGV0IGJpbmRpbmdQYXJlbnNfNTggPSB0aGlzLm1hdGNoUGFyZW5zKCk7XG4gICAgbGV0IGVuZl81OSA9IG5ldyBFbmZvcmVzdGVyKGJpbmRpbmdQYXJlbnNfNTgsIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgYmluZGluZ182MCA9IGVuZl81OS5lbmZvcmVzdEJpbmRpbmdUYXJnZXQoKTtcbiAgICBsZXQgYm9keV82MSA9IHRoaXMuZW5mb3Jlc3RCbG9jaygpO1xuICAgIHJldHVybiBuZXcgVGVybShcIkNhdGNoQ2xhdXNlXCIsIHtiaW5kaW5nOiBiaW5kaW5nXzYwLCBib2R5OiBib2R5XzYxfSk7XG4gIH1cbiAgZW5mb3Jlc3RUaHJvd1N0YXRlbWVudCgpIHtcbiAgICB0aGlzLm1hdGNoS2V5d29yZChcInRocm93XCIpO1xuICAgIGxldCBleHByZXNzaW9uXzYyID0gdGhpcy5lbmZvcmVzdEV4cHJlc3Npb24oKTtcbiAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJUaHJvd1N0YXRlbWVudFwiLCB7ZXhwcmVzc2lvbjogZXhwcmVzc2lvbl82Mn0pO1xuICB9XG4gIGVuZm9yZXN0V2l0aFN0YXRlbWVudCgpIHtcbiAgICB0aGlzLm1hdGNoS2V5d29yZChcIndpdGhcIik7XG4gICAgbGV0IG9ialBhcmVuc182MyA9IHRoaXMubWF0Y2hQYXJlbnMoKTtcbiAgICBsZXQgZW5mXzY0ID0gbmV3IEVuZm9yZXN0ZXIob2JqUGFyZW5zXzYzLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IG9iamVjdF82NSA9IGVuZl82NC5lbmZvcmVzdEV4cHJlc3Npb24oKTtcbiAgICBsZXQgYm9keV82NiA9IHRoaXMuZW5mb3Jlc3RTdGF0ZW1lbnQoKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJXaXRoU3RhdGVtZW50XCIsIHtvYmplY3Q6IG9iamVjdF82NSwgYm9keTogYm9keV82Nn0pO1xuICB9XG4gIGVuZm9yZXN0RGVidWdnZXJTdGF0ZW1lbnQoKSB7XG4gICAgdGhpcy5tYXRjaEtleXdvcmQoXCJkZWJ1Z2dlclwiKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJEZWJ1Z2dlclN0YXRlbWVudFwiLCB7fSk7XG4gIH1cbiAgZW5mb3Jlc3REb1N0YXRlbWVudCgpIHtcbiAgICB0aGlzLm1hdGNoS2V5d29yZChcImRvXCIpO1xuICAgIGxldCBib2R5XzY3ID0gdGhpcy5lbmZvcmVzdFN0YXRlbWVudCgpO1xuICAgIHRoaXMubWF0Y2hLZXl3b3JkKFwid2hpbGVcIik7XG4gICAgbGV0IHRlc3RCb2R5XzY4ID0gdGhpcy5tYXRjaFBhcmVucygpO1xuICAgIGxldCBlbmZfNjkgPSBuZXcgRW5mb3Jlc3Rlcih0ZXN0Qm9keV82OCwgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgIGxldCB0ZXN0XzcwID0gZW5mXzY5LmVuZm9yZXN0RXhwcmVzc2lvbigpO1xuICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpO1xuICAgIHJldHVybiBuZXcgVGVybShcIkRvV2hpbGVTdGF0ZW1lbnRcIiwge2JvZHk6IGJvZHlfNjcsIHRlc3Q6IHRlc3RfNzB9KTtcbiAgfVxuICBlbmZvcmVzdENvbnRpbnVlU3RhdGVtZW50KCkge1xuICAgIGxldCBrd2RfNzEgPSB0aGlzLm1hdGNoS2V5d29yZChcImNvbnRpbnVlXCIpO1xuICAgIGxldCBsb29rYWhlYWRfNzIgPSB0aGlzLnBlZWsoKTtcbiAgICBsZXQgbGFiZWxfNzMgPSBudWxsO1xuICAgIGlmICh0aGlzLnJlc3Quc2l6ZSA9PT0gMCB8fCB0aGlzLmlzUHVuY3R1YXRvcihsb29rYWhlYWRfNzIsIFwiO1wiKSkge1xuICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJDb250aW51ZVN0YXRlbWVudFwiLCB7bGFiZWw6IGxhYmVsXzczfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmxpbmVOdW1iZXJFcShrd2RfNzEsIGxvb2thaGVhZF83MikgJiYgKHRoaXMuaXNJZGVudGlmaWVyKGxvb2thaGVhZF83MikgfHwgdGhpcy5pc0tleXdvcmQobG9va2FoZWFkXzcyLCBcInlpZWxkXCIpIHx8IHRoaXMuaXNLZXl3b3JkKGxvb2thaGVhZF83MiwgXCJsZXRcIikpKSB7XG4gICAgICBsYWJlbF83MyA9IHRoaXMuZW5mb3Jlc3RJZGVudGlmaWVyKCk7XG4gICAgfVxuICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpO1xuICAgIHJldHVybiBuZXcgVGVybShcIkNvbnRpbnVlU3RhdGVtZW50XCIsIHtsYWJlbDogbGFiZWxfNzN9KTtcbiAgfVxuICBlbmZvcmVzdFN3aXRjaFN0YXRlbWVudCgpIHtcbiAgICB0aGlzLm1hdGNoS2V5d29yZChcInN3aXRjaFwiKTtcbiAgICBsZXQgY29uZF83NCA9IHRoaXMubWF0Y2hQYXJlbnMoKTtcbiAgICBsZXQgZW5mXzc1ID0gbmV3IEVuZm9yZXN0ZXIoY29uZF83NCwgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgIGxldCBkaXNjcmltaW5hbnRfNzYgPSBlbmZfNzUuZW5mb3Jlc3RFeHByZXNzaW9uKCk7XG4gICAgbGV0IGJvZHlfNzcgPSB0aGlzLm1hdGNoQ3VybGllcygpO1xuICAgIGlmIChib2R5Xzc3LnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIlN3aXRjaFN0YXRlbWVudFwiLCB7ZGlzY3JpbWluYW50OiBkaXNjcmltaW5hbnRfNzYsIGNhc2VzOiBMaXN0KCl9KTtcbiAgICB9XG4gICAgZW5mXzc1ID0gbmV3IEVuZm9yZXN0ZXIoYm9keV83NywgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgIGxldCBjYXNlc183OCA9IGVuZl83NS5lbmZvcmVzdFN3aXRjaENhc2VzKCk7XG4gICAgbGV0IGxvb2thaGVhZF83OSA9IGVuZl83NS5wZWVrKCk7XG4gICAgaWYgKGVuZl83NS5pc0tleXdvcmQobG9va2FoZWFkXzc5LCBcImRlZmF1bHRcIikpIHtcbiAgICAgIGxldCBkZWZhdWx0Q2FzZSA9IGVuZl83NS5lbmZvcmVzdFN3aXRjaERlZmF1bHQoKTtcbiAgICAgIGxldCBwb3N0RGVmYXVsdENhc2VzID0gZW5mXzc1LmVuZm9yZXN0U3dpdGNoQ2FzZXMoKTtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIlN3aXRjaFN0YXRlbWVudFdpdGhEZWZhdWx0XCIsIHtkaXNjcmltaW5hbnQ6IGRpc2NyaW1pbmFudF83NiwgcHJlRGVmYXVsdENhc2VzOiBjYXNlc183OCwgZGVmYXVsdENhc2U6IGRlZmF1bHRDYXNlLCBwb3N0RGVmYXVsdENhc2VzOiBwb3N0RGVmYXVsdENhc2VzfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGVybShcIlN3aXRjaFN0YXRlbWVudFwiLCB7ZGlzY3JpbWluYW50OiBkaXNjcmltaW5hbnRfNzYsIGNhc2VzOiBjYXNlc183OH0pO1xuICB9XG4gIGVuZm9yZXN0U3dpdGNoQ2FzZXMoKSB7XG4gICAgbGV0IGNhc2VzXzgwID0gW107XG4gICAgd2hpbGUgKCEodGhpcy5yZXN0LnNpemUgPT09IDAgfHwgdGhpcy5pc0tleXdvcmQodGhpcy5wZWVrKCksIFwiZGVmYXVsdFwiKSkpIHtcbiAgICAgIGNhc2VzXzgwLnB1c2godGhpcy5lbmZvcmVzdFN3aXRjaENhc2UoKSk7XG4gICAgfVxuICAgIHJldHVybiBMaXN0KGNhc2VzXzgwKTtcbiAgfVxuICBlbmZvcmVzdFN3aXRjaENhc2UoKSB7XG4gICAgdGhpcy5tYXRjaEtleXdvcmQoXCJjYXNlXCIpO1xuICAgIHJldHVybiBuZXcgVGVybShcIlN3aXRjaENhc2VcIiwge3Rlc3Q6IHRoaXMuZW5mb3Jlc3RFeHByZXNzaW9uKCksIGNvbnNlcXVlbnQ6IHRoaXMuZW5mb3Jlc3RTd2l0Y2hDYXNlQm9keSgpfSk7XG4gIH1cbiAgZW5mb3Jlc3RTd2l0Y2hDYXNlQm9keSgpIHtcbiAgICB0aGlzLm1hdGNoUHVuY3R1YXRvcihcIjpcIik7XG4gICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RTdGF0ZW1lbnRMaXN0SW5Td2l0Y2hDYXNlQm9keSgpO1xuICB9XG4gIGVuZm9yZXN0U3RhdGVtZW50TGlzdEluU3dpdGNoQ2FzZUJvZHkoKSB7XG4gICAgbGV0IHJlc3VsdF84MSA9IFtdO1xuICAgIHdoaWxlICghKHRoaXMucmVzdC5zaXplID09PSAwIHx8IHRoaXMuaXNLZXl3b3JkKHRoaXMucGVlaygpLCBcImRlZmF1bHRcIikgfHwgdGhpcy5pc0tleXdvcmQodGhpcy5wZWVrKCksIFwiY2FzZVwiKSkpIHtcbiAgICAgIHJlc3VsdF84MS5wdXNoKHRoaXMuZW5mb3Jlc3RTdGF0ZW1lbnRMaXN0SXRlbSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIExpc3QocmVzdWx0XzgxKTtcbiAgfVxuICBlbmZvcmVzdFN3aXRjaERlZmF1bHQoKSB7XG4gICAgdGhpcy5tYXRjaEtleXdvcmQoXCJkZWZhdWx0XCIpO1xuICAgIHJldHVybiBuZXcgVGVybShcIlN3aXRjaERlZmF1bHRcIiwge2NvbnNlcXVlbnQ6IHRoaXMuZW5mb3Jlc3RTd2l0Y2hDYXNlQm9keSgpfSk7XG4gIH1cbiAgZW5mb3Jlc3RGb3JTdGF0ZW1lbnQoKSB7XG4gICAgdGhpcy5tYXRjaEtleXdvcmQoXCJmb3JcIik7XG4gICAgbGV0IGNvbmRfODIgPSB0aGlzLm1hdGNoUGFyZW5zKCk7XG4gICAgbGV0IGVuZl84MyA9IG5ldyBFbmZvcmVzdGVyKGNvbmRfODIsIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgbG9va2FoZWFkXzg0LCB0ZXN0Xzg1LCBpbml0Xzg2LCByaWdodF84NywgdHlwZV84OCwgbGVmdF84OSwgdXBkYXRlXzkwO1xuICAgIGlmIChlbmZfODMuaXNQdW5jdHVhdG9yKGVuZl84My5wZWVrKCksIFwiO1wiKSkge1xuICAgICAgZW5mXzgzLmFkdmFuY2UoKTtcbiAgICAgIGlmICghZW5mXzgzLmlzUHVuY3R1YXRvcihlbmZfODMucGVlaygpLCBcIjtcIikpIHtcbiAgICAgICAgdGVzdF84NSA9IGVuZl84My5lbmZvcmVzdEV4cHJlc3Npb24oKTtcbiAgICAgIH1cbiAgICAgIGVuZl84My5tYXRjaFB1bmN0dWF0b3IoXCI7XCIpO1xuICAgICAgaWYgKGVuZl84My5yZXN0LnNpemUgIT09IDApIHtcbiAgICAgICAgcmlnaHRfODcgPSBlbmZfODMuZW5mb3Jlc3RFeHByZXNzaW9uKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJGb3JTdGF0ZW1lbnRcIiwge2luaXQ6IG51bGwsIHRlc3Q6IHRlc3RfODUsIHVwZGF0ZTogcmlnaHRfODcsIGJvZHk6IHRoaXMuZW5mb3Jlc3RTdGF0ZW1lbnQoKX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb29rYWhlYWRfODQgPSBlbmZfODMucGVlaygpO1xuICAgICAgaWYgKGVuZl84My5pc1ZhckRlY2xUcmFuc2Zvcm0obG9va2FoZWFkXzg0KSB8fCBlbmZfODMuaXNMZXREZWNsVHJhbnNmb3JtKGxvb2thaGVhZF84NCkgfHwgZW5mXzgzLmlzQ29uc3REZWNsVHJhbnNmb3JtKGxvb2thaGVhZF84NCkpIHtcbiAgICAgICAgaW5pdF84NiA9IGVuZl84My5lbmZvcmVzdFZhcmlhYmxlRGVjbGFyYXRpb24oKTtcbiAgICAgICAgbG9va2FoZWFkXzg0ID0gZW5mXzgzLnBlZWsoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNLZXl3b3JkKGxvb2thaGVhZF84NCwgXCJpblwiKSB8fCB0aGlzLmlzSWRlbnRpZmllcihsb29rYWhlYWRfODQsIFwib2ZcIikpIHtcbiAgICAgICAgICBpZiAodGhpcy5pc0tleXdvcmQobG9va2FoZWFkXzg0LCBcImluXCIpKSB7XG4gICAgICAgICAgICBlbmZfODMuYWR2YW5jZSgpO1xuICAgICAgICAgICAgcmlnaHRfODcgPSBlbmZfODMuZW5mb3Jlc3RFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICB0eXBlXzg4ID0gXCJGb3JJblN0YXRlbWVudFwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0lkZW50aWZpZXIobG9va2FoZWFkXzg0LCBcIm9mXCIpKSB7XG4gICAgICAgICAgICBlbmZfODMuYWR2YW5jZSgpO1xuICAgICAgICAgICAgcmlnaHRfODcgPSBlbmZfODMuZW5mb3Jlc3RFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICB0eXBlXzg4ID0gXCJGb3JPZlN0YXRlbWVudFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFRlcm0odHlwZV84OCwge2xlZnQ6IGluaXRfODYsIHJpZ2h0OiByaWdodF84NywgYm9keTogdGhpcy5lbmZvcmVzdFN0YXRlbWVudCgpfSk7XG4gICAgICAgIH1cbiAgICAgICAgZW5mXzgzLm1hdGNoUHVuY3R1YXRvcihcIjtcIik7XG4gICAgICAgIGlmIChlbmZfODMuaXNQdW5jdHVhdG9yKGVuZl84My5wZWVrKCksIFwiO1wiKSkge1xuICAgICAgICAgIGVuZl84My5hZHZhbmNlKCk7XG4gICAgICAgICAgdGVzdF84NSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGVzdF84NSA9IGVuZl84My5lbmZvcmVzdEV4cHJlc3Npb24oKTtcbiAgICAgICAgICBlbmZfODMubWF0Y2hQdW5jdHVhdG9yKFwiO1wiKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfOTAgPSBlbmZfODMuZW5mb3Jlc3RFeHByZXNzaW9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5pc0tleXdvcmQoZW5mXzgzLnBlZWsoMSksIFwiaW5cIikgfHwgdGhpcy5pc0lkZW50aWZpZXIoZW5mXzgzLnBlZWsoMSksIFwib2ZcIikpIHtcbiAgICAgICAgICBsZWZ0Xzg5ID0gZW5mXzgzLmVuZm9yZXN0QmluZGluZ0lkZW50aWZpZXIoKTtcbiAgICAgICAgICBsZXQga2luZCA9IGVuZl84My5hZHZhbmNlKCk7XG4gICAgICAgICAgaWYgKHRoaXMuaXNLZXl3b3JkKGtpbmQsIFwiaW5cIikpIHtcbiAgICAgICAgICAgIHR5cGVfODggPSBcIkZvckluU3RhdGVtZW50XCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHR5cGVfODggPSBcIkZvck9mU3RhdGVtZW50XCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJpZ2h0Xzg3ID0gZW5mXzgzLmVuZm9yZXN0RXhwcmVzc2lvbigpO1xuICAgICAgICAgIHJldHVybiBuZXcgVGVybSh0eXBlXzg4LCB7bGVmdDogbGVmdF84OSwgcmlnaHQ6IHJpZ2h0Xzg3LCBib2R5OiB0aGlzLmVuZm9yZXN0U3RhdGVtZW50KCl9KTtcbiAgICAgICAgfVxuICAgICAgICBpbml0Xzg2ID0gZW5mXzgzLmVuZm9yZXN0RXhwcmVzc2lvbigpO1xuICAgICAgICBlbmZfODMubWF0Y2hQdW5jdHVhdG9yKFwiO1wiKTtcbiAgICAgICAgaWYgKGVuZl84My5pc1B1bmN0dWF0b3IoZW5mXzgzLnBlZWsoKSwgXCI7XCIpKSB7XG4gICAgICAgICAgZW5mXzgzLmFkdmFuY2UoKTtcbiAgICAgICAgICB0ZXN0Xzg1ID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXN0Xzg1ID0gZW5mXzgzLmVuZm9yZXN0RXhwcmVzc2lvbigpO1xuICAgICAgICAgIGVuZl84My5tYXRjaFB1bmN0dWF0b3IoXCI7XCIpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV85MCA9IGVuZl84My5lbmZvcmVzdEV4cHJlc3Npb24oKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgVGVybShcIkZvclN0YXRlbWVudFwiLCB7aW5pdDogaW5pdF84NiwgdGVzdDogdGVzdF84NSwgdXBkYXRlOiB1cGRhdGVfOTAsIGJvZHk6IHRoaXMuZW5mb3Jlc3RTdGF0ZW1lbnQoKX0pO1xuICAgIH1cbiAgfVxuICBlbmZvcmVzdElmU3RhdGVtZW50KCkge1xuICAgIHRoaXMubWF0Y2hLZXl3b3JkKFwiaWZcIik7XG4gICAgbGV0IGNvbmRfOTEgPSB0aGlzLm1hdGNoUGFyZW5zKCk7XG4gICAgbGV0IGVuZl85MiA9IG5ldyBFbmZvcmVzdGVyKGNvbmRfOTEsIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgbG9va2FoZWFkXzkzID0gZW5mXzkyLnBlZWsoKTtcbiAgICBsZXQgdGVzdF85NCA9IGVuZl85Mi5lbmZvcmVzdEV4cHJlc3Npb24oKTtcbiAgICBpZiAodGVzdF85NCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgZW5mXzkyLmNyZWF0ZUVycm9yKGxvb2thaGVhZF85MywgXCJleHBlY3RpbmcgYW4gZXhwcmVzc2lvblwiKTtcbiAgICB9XG4gICAgbGV0IGNvbnNlcXVlbnRfOTUgPSB0aGlzLmVuZm9yZXN0U3RhdGVtZW50KCk7XG4gICAgbGV0IGFsdGVybmF0ZV85NiA9IG51bGw7XG4gICAgaWYgKHRoaXMuaXNLZXl3b3JkKHRoaXMucGVlaygpLCBcImVsc2VcIikpIHtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgYWx0ZXJuYXRlXzk2ID0gdGhpcy5lbmZvcmVzdFN0YXRlbWVudCgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0oXCJJZlN0YXRlbWVudFwiLCB7dGVzdDogdGVzdF85NCwgY29uc2VxdWVudDogY29uc2VxdWVudF85NSwgYWx0ZXJuYXRlOiBhbHRlcm5hdGVfOTZ9KTtcbiAgfVxuICBlbmZvcmVzdFdoaWxlU3RhdGVtZW50KCkge1xuICAgIHRoaXMubWF0Y2hLZXl3b3JkKFwid2hpbGVcIik7XG4gICAgbGV0IGNvbmRfOTcgPSB0aGlzLm1hdGNoUGFyZW5zKCk7XG4gICAgbGV0IGVuZl85OCA9IG5ldyBFbmZvcmVzdGVyKGNvbmRfOTcsIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgbG9va2FoZWFkXzk5ID0gZW5mXzk4LnBlZWsoKTtcbiAgICBsZXQgdGVzdF8xMDAgPSBlbmZfOTguZW5mb3Jlc3RFeHByZXNzaW9uKCk7XG4gICAgaWYgKHRlc3RfMTAwID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBlbmZfOTguY3JlYXRlRXJyb3IobG9va2FoZWFkXzk5LCBcImV4cGVjdGluZyBhbiBleHByZXNzaW9uXCIpO1xuICAgIH1cbiAgICBsZXQgYm9keV8xMDEgPSB0aGlzLmVuZm9yZXN0U3RhdGVtZW50KCk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiV2hpbGVTdGF0ZW1lbnRcIiwge3Rlc3Q6IHRlc3RfMTAwLCBib2R5OiBib2R5XzEwMX0pO1xuICB9XG4gIGVuZm9yZXN0QmxvY2tTdGF0ZW1lbnQoKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQmxvY2tTdGF0ZW1lbnRcIiwge2Jsb2NrOiB0aGlzLmVuZm9yZXN0QmxvY2soKX0pO1xuICB9XG4gIGVuZm9yZXN0QmxvY2soKSB7XG4gICAgbGV0IGJfMTAyID0gdGhpcy5tYXRjaEN1cmxpZXMoKTtcbiAgICBsZXQgYm9keV8xMDMgPSBbXTtcbiAgICBsZXQgZW5mXzEwNCA9IG5ldyBFbmZvcmVzdGVyKGJfMTAyLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgd2hpbGUgKGVuZl8xMDQucmVzdC5zaXplICE9PSAwKSB7XG4gICAgICBsZXQgbG9va2FoZWFkID0gZW5mXzEwNC5wZWVrKCk7XG4gICAgICBsZXQgc3RtdCA9IGVuZl8xMDQuZW5mb3Jlc3RTdGF0ZW1lbnQoKTtcbiAgICAgIGlmIChzdG10ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgZW5mXzEwNC5jcmVhdGVFcnJvcihsb29rYWhlYWQsIFwibm90IGEgc3RhdGVtZW50XCIpO1xuICAgICAgfVxuICAgICAgYm9keV8xMDMucHVzaChzdG10KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQmxvY2tcIiwge3N0YXRlbWVudHM6IExpc3QoYm9keV8xMDMpfSk7XG4gIH1cbiAgZW5mb3Jlc3RDbGFzcyh7aXNFeHByLCBpbkRlZmF1bHR9KSB7XG4gICAgbGV0IGt3XzEwNSA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIGxldCBuYW1lXzEwNiA9IG51bGwsIHN1cHJfMTA3ID0gbnVsbDtcbiAgICBsZXQgdHlwZV8xMDggPSBpc0V4cHIgPyBcIkNsYXNzRXhwcmVzc2lvblwiIDogXCJDbGFzc0RlY2xhcmF0aW9uXCI7XG4gICAgaWYgKHRoaXMuaXNJZGVudGlmaWVyKHRoaXMucGVlaygpKSkge1xuICAgICAgbmFtZV8xMDYgPSB0aGlzLmVuZm9yZXN0QmluZGluZ0lkZW50aWZpZXIoKTtcbiAgICB9IGVsc2UgaWYgKCFpc0V4cHIpIHtcbiAgICAgIGlmIChpbkRlZmF1bHQpIHtcbiAgICAgICAgbmFtZV8xMDYgPSBuZXcgVGVybShcIkJpbmRpbmdJZGVudGlmaWVyXCIsIHtuYW1lOiBTeW50YXguZnJvbUlkZW50aWZpZXIoXCJfZGVmYXVsdFwiLCBrd18xMDUpfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKHRoaXMucGVlaygpLCBcInVuZXhwZWN0ZWQgc3ludGF4XCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5pc0tleXdvcmQodGhpcy5wZWVrKCksIFwiZXh0ZW5kc1wiKSkge1xuICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICBzdXByXzEwNyA9IHRoaXMuZW5mb3Jlc3RFeHByZXNzaW9uTG9vcCgpO1xuICAgIH1cbiAgICBsZXQgZWxlbWVudHNfMTA5ID0gW107XG4gICAgbGV0IGVuZl8xMTAgPSBuZXcgRW5mb3Jlc3Rlcih0aGlzLm1hdGNoQ3VybGllcygpLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgd2hpbGUgKGVuZl8xMTAucmVzdC5zaXplICE9PSAwKSB7XG4gICAgICBpZiAoZW5mXzExMC5pc1B1bmN0dWF0b3IoZW5mXzExMC5wZWVrKCksIFwiO1wiKSkge1xuICAgICAgICBlbmZfMTEwLmFkdmFuY2UoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsZXQgaXNTdGF0aWMgPSBmYWxzZTtcbiAgICAgIGxldCB7bWV0aG9kT3JLZXksIGtpbmR9ID0gZW5mXzExMC5lbmZvcmVzdE1ldGhvZERlZmluaXRpb24oKTtcbiAgICAgIGlmIChraW5kID09PSBcImlkZW50aWZpZXJcIiAmJiBtZXRob2RPcktleS52YWx1ZS52YWwoKSA9PT0gXCJzdGF0aWNcIikge1xuICAgICAgICBpc1N0YXRpYyA9IHRydWU7XG4gICAgICAgICh7bWV0aG9kT3JLZXksIGtpbmR9ID0gZW5mXzExMC5lbmZvcmVzdE1ldGhvZERlZmluaXRpb24oKSk7XG4gICAgICB9XG4gICAgICBpZiAoa2luZCA9PT0gXCJtZXRob2RcIikge1xuICAgICAgICBlbGVtZW50c18xMDkucHVzaChuZXcgVGVybShcIkNsYXNzRWxlbWVudFwiLCB7aXNTdGF0aWM6IGlzU3RhdGljLCBtZXRob2Q6IG1ldGhvZE9yS2V5fSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcihlbmZfMTEwLnBlZWsoKSwgXCJPbmx5IG1ldGhvZHMgYXJlIGFsbG93ZWQgaW4gY2xhc3Nlc1wiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZXJtKHR5cGVfMTA4LCB7bmFtZTogbmFtZV8xMDYsIHN1cGVyOiBzdXByXzEwNywgZWxlbWVudHM6IExpc3QoZWxlbWVudHNfMTA5KX0pO1xuICB9XG4gIGVuZm9yZXN0QmluZGluZ1RhcmdldCh7YWxsb3dQdW5jdHVhdG9yfSA9IHt9KSB7XG4gICAgbGV0IGxvb2thaGVhZF8xMTEgPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAodGhpcy5pc0lkZW50aWZpZXIobG9va2FoZWFkXzExMSkgfHwgdGhpcy5pc0tleXdvcmQobG9va2FoZWFkXzExMSkgfHwgYWxsb3dQdW5jdHVhdG9yICYmIHRoaXMuaXNQdW5jdHVhdG9yKGxvb2thaGVhZF8xMTEpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdEJpbmRpbmdJZGVudGlmaWVyKHthbGxvd1B1bmN0dWF0b3I6IGFsbG93UHVuY3R1YXRvcn0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0JyYWNrZXRzKGxvb2thaGVhZF8xMTEpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdEFycmF5QmluZGluZygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0JyYWNlcyhsb29rYWhlYWRfMTExKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RPYmplY3RCaW5kaW5nKCk7XG4gICAgfVxuICAgIGFzc2VydChmYWxzZSwgXCJub3QgaW1wbGVtZW50ZWQgeWV0XCIpO1xuICB9XG4gIGVuZm9yZXN0T2JqZWN0QmluZGluZygpIHtcbiAgICBsZXQgZW5mXzExMiA9IG5ldyBFbmZvcmVzdGVyKHRoaXMubWF0Y2hDdXJsaWVzKCksIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgcHJvcGVydGllc18xMTMgPSBbXTtcbiAgICB3aGlsZSAoZW5mXzExMi5yZXN0LnNpemUgIT09IDApIHtcbiAgICAgIHByb3BlcnRpZXNfMTEzLnB1c2goZW5mXzExMi5lbmZvcmVzdEJpbmRpbmdQcm9wZXJ0eSgpKTtcbiAgICAgIGVuZl8xMTIuY29uc3VtZUNvbW1hKCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGVybShcIk9iamVjdEJpbmRpbmdcIiwge3Byb3BlcnRpZXM6IExpc3QocHJvcGVydGllc18xMTMpfSk7XG4gIH1cbiAgZW5mb3Jlc3RCaW5kaW5nUHJvcGVydHkoKSB7XG4gICAgbGV0IGxvb2thaGVhZF8xMTQgPSB0aGlzLnBlZWsoKTtcbiAgICBsZXQge25hbWUsIGJpbmRpbmd9ID0gdGhpcy5lbmZvcmVzdFByb3BlcnR5TmFtZSgpO1xuICAgIGlmICh0aGlzLmlzSWRlbnRpZmllcihsb29rYWhlYWRfMTE0KSB8fCB0aGlzLmlzS2V5d29yZChsb29rYWhlYWRfMTE0LCBcImxldFwiKSB8fCB0aGlzLmlzS2V5d29yZChsb29rYWhlYWRfMTE0LCBcInlpZWxkXCIpKSB7XG4gICAgICBpZiAoIXRoaXMuaXNQdW5jdHVhdG9yKHRoaXMucGVlaygpLCBcIjpcIikpIHtcbiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZSA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmlzQXNzaWduKHRoaXMucGVlaygpKSkge1xuICAgICAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgICAgIGxldCBleHByID0gdGhpcy5lbmZvcmVzdEV4cHJlc3Npb25Mb29wKCk7XG4gICAgICAgICAgZGVmYXVsdFZhbHVlID0gZXhwcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyXCIsIHtiaW5kaW5nOiBiaW5kaW5nLCBpbml0OiBkZWZhdWx0VmFsdWV9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5tYXRjaFB1bmN0dWF0b3IoXCI6XCIpO1xuICAgIGJpbmRpbmcgPSB0aGlzLmVuZm9yZXN0QmluZGluZ0VsZW1lbnQoKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eVwiLCB7bmFtZTogbmFtZSwgYmluZGluZzogYmluZGluZ30pO1xuICB9XG4gIGVuZm9yZXN0QXJyYXlCaW5kaW5nKCkge1xuICAgIGxldCBicmFja2V0XzExNSA9IHRoaXMubWF0Y2hTcXVhcmVzKCk7XG4gICAgbGV0IGVuZl8xMTYgPSBuZXcgRW5mb3Jlc3RlcihicmFja2V0XzExNSwgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgIGxldCBlbGVtZW50c18xMTcgPSBbXSwgcmVzdEVsZW1lbnRfMTE4ID0gbnVsbDtcbiAgICB3aGlsZSAoZW5mXzExNi5yZXN0LnNpemUgIT09IDApIHtcbiAgICAgIGxldCBlbDtcbiAgICAgIGlmIChlbmZfMTE2LmlzUHVuY3R1YXRvcihlbmZfMTE2LnBlZWsoKSwgXCIsXCIpKSB7XG4gICAgICAgIGVuZl8xMTYuY29uc3VtZUNvbW1hKCk7XG4gICAgICAgIGVsID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChlbmZfMTE2LmlzUHVuY3R1YXRvcihlbmZfMTE2LnBlZWsoKSwgXCIuLi5cIikpIHtcbiAgICAgICAgICBlbmZfMTE2LmFkdmFuY2UoKTtcbiAgICAgICAgICByZXN0RWxlbWVudF8xMTggPSBlbmZfMTE2LmVuZm9yZXN0QmluZGluZ1RhcmdldCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsID0gZW5mXzExNi5lbmZvcmVzdEJpbmRpbmdFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgZW5mXzExNi5jb25zdW1lQ29tbWEoKTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnRzXzExNy5wdXNoKGVsKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQXJyYXlCaW5kaW5nXCIsIHtlbGVtZW50czogTGlzdChlbGVtZW50c18xMTcpLCByZXN0RWxlbWVudDogcmVzdEVsZW1lbnRfMTE4fSk7XG4gIH1cbiAgZW5mb3Jlc3RCaW5kaW5nRWxlbWVudCgpIHtcbiAgICBsZXQgYmluZGluZ18xMTkgPSB0aGlzLmVuZm9yZXN0QmluZGluZ1RhcmdldCgpO1xuICAgIGlmICh0aGlzLmlzQXNzaWduKHRoaXMucGVlaygpKSkge1xuICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICBsZXQgaW5pdCA9IHRoaXMuZW5mb3Jlc3RFeHByZXNzaW9uTG9vcCgpO1xuICAgICAgYmluZGluZ18xMTkgPSBuZXcgVGVybShcIkJpbmRpbmdXaXRoRGVmYXVsdFwiLCB7YmluZGluZzogYmluZGluZ18xMTksIGluaXQ6IGluaXR9KTtcbiAgICB9XG4gICAgcmV0dXJuIGJpbmRpbmdfMTE5O1xuICB9XG4gIGVuZm9yZXN0QmluZGluZ0lkZW50aWZpZXIoe2FsbG93UHVuY3R1YXRvcn0gPSB7fSkge1xuICAgIGxldCBuYW1lXzEyMDtcbiAgICBpZiAoYWxsb3dQdW5jdHVhdG9yICYmIHRoaXMuaXNQdW5jdHVhdG9yKHRoaXMucGVlaygpKSkge1xuICAgICAgbmFtZV8xMjAgPSB0aGlzLmVuZm9yZXN0UHVuY3R1YXRvcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYW1lXzEyMCA9IHRoaXMuZW5mb3Jlc3RJZGVudGlmaWVyKCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGVybShcIkJpbmRpbmdJZGVudGlmaWVyXCIsIHtuYW1lOiBuYW1lXzEyMH0pO1xuICB9XG4gIGVuZm9yZXN0UHVuY3R1YXRvcigpIHtcbiAgICBsZXQgbG9va2FoZWFkXzEyMSA9IHRoaXMucGVlaygpO1xuICAgIGlmICh0aGlzLmlzUHVuY3R1YXRvcihsb29rYWhlYWRfMTIxKSkge1xuICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZSgpO1xuICAgIH1cbiAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKGxvb2thaGVhZF8xMjEsIFwiZXhwZWN0aW5nIGEgcHVuY3R1YXRvclwiKTtcbiAgfVxuICBlbmZvcmVzdElkZW50aWZpZXIoKSB7XG4gICAgbGV0IGxvb2thaGVhZF8xMjIgPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAodGhpcy5pc0lkZW50aWZpZXIobG9va2FoZWFkXzEyMikgfHwgdGhpcy5pc0tleXdvcmQobG9va2FoZWFkXzEyMikpIHtcbiAgICAgIHJldHVybiB0aGlzLmFkdmFuY2UoKTtcbiAgICB9XG4gICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcihsb29rYWhlYWRfMTIyLCBcImV4cGVjdGluZyBhbiBpZGVudGlmaWVyXCIpO1xuICB9XG4gIGVuZm9yZXN0UmV0dXJuU3RhdGVtZW50KCkge1xuICAgIGxldCBrd18xMjMgPSB0aGlzLmFkdmFuY2UoKTtcbiAgICBsZXQgbG9va2FoZWFkXzEyNCA9IHRoaXMucGVlaygpO1xuICAgIGlmICh0aGlzLnJlc3Quc2l6ZSA9PT0gMCB8fCBsb29rYWhlYWRfMTI0ICYmICF0aGlzLmxpbmVOdW1iZXJFcShrd18xMjMsIGxvb2thaGVhZF8xMjQpKSB7XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJSZXR1cm5TdGF0ZW1lbnRcIiwge2V4cHJlc3Npb246IG51bGx9KTtcbiAgICB9XG4gICAgbGV0IHRlcm1fMTI1ID0gbnVsbDtcbiAgICBpZiAoIXRoaXMuaXNQdW5jdHVhdG9yKGxvb2thaGVhZF8xMjQsIFwiO1wiKSkge1xuICAgICAgdGVybV8xMjUgPSB0aGlzLmVuZm9yZXN0RXhwcmVzc2lvbigpO1xuICAgICAgZXhwZWN0KHRlcm1fMTI1ICE9IG51bGwsIFwiRXhwZWN0aW5nIGFuIGV4cHJlc3Npb24gdG8gZm9sbG93IHJldHVybiBrZXl3b3JkXCIsIGxvb2thaGVhZF8xMjQsIHRoaXMucmVzdCk7XG4gICAgfVxuICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpO1xuICAgIHJldHVybiBuZXcgVGVybShcIlJldHVyblN0YXRlbWVudFwiLCB7ZXhwcmVzc2lvbjogdGVybV8xMjV9KTtcbiAgfVxuICBlbmZvcmVzdFZhcmlhYmxlRGVjbGFyYXRpb24oKSB7XG4gICAgbGV0IGtpbmRfMTI2O1xuICAgIGxldCBsb29rYWhlYWRfMTI3ID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgbGV0IGtpbmRTeW5fMTI4ID0gbG9va2FoZWFkXzEyNztcbiAgICBpZiAoa2luZFN5bl8xMjggJiYgdGhpcy5jb250ZXh0LmVudi5nZXQoa2luZFN5bl8xMjgucmVzb2x2ZSgpKSA9PT0gVmFyaWFibGVEZWNsVHJhbnNmb3JtKSB7XG4gICAgICBraW5kXzEyNiA9IFwidmFyXCI7XG4gICAgfSBlbHNlIGlmIChraW5kU3luXzEyOCAmJiB0aGlzLmNvbnRleHQuZW52LmdldChraW5kU3luXzEyOC5yZXNvbHZlKCkpID09PSBMZXREZWNsVHJhbnNmb3JtKSB7XG4gICAgICBraW5kXzEyNiA9IFwibGV0XCI7XG4gICAgfSBlbHNlIGlmIChraW5kU3luXzEyOCAmJiB0aGlzLmNvbnRleHQuZW52LmdldChraW5kU3luXzEyOC5yZXNvbHZlKCkpID09PSBDb25zdERlY2xUcmFuc2Zvcm0pIHtcbiAgICAgIGtpbmRfMTI2ID0gXCJjb25zdFwiO1xuICAgIH0gZWxzZSBpZiAoa2luZFN5bl8xMjggJiYgdGhpcy5jb250ZXh0LmVudi5nZXQoa2luZFN5bl8xMjgucmVzb2x2ZSgpKSA9PT0gU3ludGF4RGVjbFRyYW5zZm9ybSkge1xuICAgICAga2luZF8xMjYgPSBcInN5bnRheFwiO1xuICAgIH0gZWxzZSBpZiAoa2luZFN5bl8xMjggJiYgdGhpcy5jb250ZXh0LmVudi5nZXQoa2luZFN5bl8xMjgucmVzb2x2ZSgpKSA9PT0gU3ludGF4cmVjRGVjbFRyYW5zZm9ybSkge1xuICAgICAga2luZF8xMjYgPSBcInN5bnRheHJlY1wiO1xuICAgIH1cbiAgICBsZXQgZGVjbHNfMTI5ID0gTGlzdCgpO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBsZXQgdGVybSA9IHRoaXMuZW5mb3Jlc3RWYXJpYWJsZURlY2xhcmF0b3Ioe2lzU3ludGF4OiBraW5kXzEyNiA9PT0gXCJzeW50YXhcIiB8fCBraW5kXzEyNiA9PT0gXCJzeW50YXhyZWNcIn0pO1xuICAgICAgbGV0IGxvb2thaGVhZF8xMjcgPSB0aGlzLnBlZWsoKTtcbiAgICAgIGRlY2xzXzEyOSA9IGRlY2xzXzEyOS5jb25jYXQodGVybSk7XG4gICAgICBpZiAodGhpcy5pc1B1bmN0dWF0b3IobG9va2FoZWFkXzEyNywgXCIsXCIpKSB7XG4gICAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGVybShcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiwge2tpbmQ6IGtpbmRfMTI2LCBkZWNsYXJhdG9yczogZGVjbHNfMTI5fSk7XG4gIH1cbiAgZW5mb3Jlc3RWYXJpYWJsZURlY2xhcmF0b3Ioe2lzU3ludGF4fSkge1xuICAgIGxldCBpZF8xMzAgPSB0aGlzLmVuZm9yZXN0QmluZGluZ1RhcmdldCh7YWxsb3dQdW5jdHVhdG9yOiBpc1N5bnRheH0pO1xuICAgIGxldCBsb29rYWhlYWRfMTMxID0gdGhpcy5wZWVrKCk7XG4gICAgbGV0IGluaXRfMTMyLCByZXN0XzEzMztcbiAgICBpZiAodGhpcy5pc1B1bmN0dWF0b3IobG9va2FoZWFkXzEzMSwgXCI9XCIpKSB7XG4gICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIGxldCBlbmYgPSBuZXcgRW5mb3Jlc3Rlcih0aGlzLnJlc3QsIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICAgIGluaXRfMTMyID0gZW5mLmVuZm9yZXN0KFwiZXhwcmVzc2lvblwiKTtcbiAgICAgIHRoaXMucmVzdCA9IGVuZi5yZXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbml0XzEzMiA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGVybShcIlZhcmlhYmxlRGVjbGFyYXRvclwiLCB7YmluZGluZzogaWRfMTMwLCBpbml0OiBpbml0XzEzMn0pO1xuICB9XG4gIGVuZm9yZXN0RXhwcmVzc2lvblN0YXRlbWVudCgpIHtcbiAgICBsZXQgc3RhcnRfMTM0ID0gdGhpcy5yZXN0LmdldCgwKTtcbiAgICBsZXQgZXhwcl8xMzUgPSB0aGlzLmVuZm9yZXN0RXhwcmVzc2lvbigpO1xuICAgIGlmIChleHByXzEzNSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcihzdGFydF8xMzQsIFwibm90IGEgdmFsaWQgZXhwcmVzc2lvblwiKTtcbiAgICB9XG4gICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRXhwcmVzc2lvblN0YXRlbWVudFwiLCB7ZXhwcmVzc2lvbjogZXhwcl8xMzV9KTtcbiAgfVxuICBlbmZvcmVzdEV4cHJlc3Npb24oKSB7XG4gICAgbGV0IGxlZnRfMTM2ID0gdGhpcy5lbmZvcmVzdEV4cHJlc3Npb25Mb29wKCk7XG4gICAgbGV0IGxvb2thaGVhZF8xMzcgPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAodGhpcy5pc1B1bmN0dWF0b3IobG9va2FoZWFkXzEzNywgXCIsXCIpKSB7XG4gICAgICB3aGlsZSAodGhpcy5yZXN0LnNpemUgIT09IDApIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzUHVuY3R1YXRvcih0aGlzLnBlZWsoKSwgXCIsXCIpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG9wZXJhdG9yID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgICAgIGxldCByaWdodCA9IHRoaXMuZW5mb3Jlc3RFeHByZXNzaW9uTG9vcCgpO1xuICAgICAgICBsZWZ0XzEzNiA9IG5ldyBUZXJtKFwiQmluYXJ5RXhwcmVzc2lvblwiLCB7bGVmdDogbGVmdF8xMzYsIG9wZXJhdG9yOiBvcGVyYXRvciwgcmlnaHQ6IHJpZ2h0fSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudGVybSA9IG51bGw7XG4gICAgcmV0dXJuIGxlZnRfMTM2O1xuICB9XG4gIGVuZm9yZXN0RXhwcmVzc2lvbkxvb3AoKSB7XG4gICAgdGhpcy50ZXJtID0gbnVsbDtcbiAgICB0aGlzLm9wQ3R4ID0ge3ByZWM6IDAsIGNvbWJpbmU6IHhfMTM4ID0+IHhfMTM4LCBzdGFjazogTGlzdCgpfTtcbiAgICBkbyB7XG4gICAgICBsZXQgdGVybSA9IHRoaXMuZW5mb3Jlc3RBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgaWYgKHRlcm0gPT09IEVYUFJfTE9PUF9OT19DSEFOR0VfMjcgJiYgdGhpcy5vcEN0eC5zdGFjay5zaXplID4gMCkge1xuICAgICAgICB0aGlzLnRlcm0gPSB0aGlzLm9wQ3R4LmNvbWJpbmUodGhpcy50ZXJtKTtcbiAgICAgICAgbGV0IHtwcmVjLCBjb21iaW5lfSA9IHRoaXMub3BDdHguc3RhY2subGFzdCgpO1xuICAgICAgICB0aGlzLm9wQ3R4LnByZWMgPSBwcmVjO1xuICAgICAgICB0aGlzLm9wQ3R4LmNvbWJpbmUgPSBjb21iaW5lO1xuICAgICAgICB0aGlzLm9wQ3R4LnN0YWNrID0gdGhpcy5vcEN0eC5zdGFjay5wb3AoKTtcbiAgICAgIH0gZWxzZSBpZiAodGVybSA9PT0gRVhQUl9MT09QX05PX0NIQU5HRV8yNykge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAodGVybSA9PT0gRVhQUl9MT09QX09QRVJBVE9SXzI2IHx8IHRlcm0gPT09IEVYUFJfTE9PUF9FWFBBTlNJT05fMjgpIHtcbiAgICAgICAgdGhpcy50ZXJtID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGVybSA9IHRlcm07XG4gICAgICB9XG4gICAgfSB3aGlsZSAodHJ1ZSk7XG4gICAgcmV0dXJuIHRoaXMudGVybTtcbiAgfVxuICBlbmZvcmVzdEFzc2lnbm1lbnRFeHByZXNzaW9uKCkge1xuICAgIGxldCBsb29rYWhlYWRfMTM5ID0gdGhpcy5wZWVrKCk7XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzVGVybShsb29rYWhlYWRfMTM5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNDb21waWxldGltZVRyYW5zZm9ybShsb29rYWhlYWRfMTM5KSkge1xuICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuZXhwYW5kTWFjcm8oKTtcbiAgICAgIHRoaXMucmVzdCA9IHJlc3VsdC5jb25jYXQodGhpcy5yZXN0KTtcbiAgICAgIHJldHVybiBFWFBSX0xPT1BfRVhQQU5TSU9OXzI4O1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNLZXl3b3JkKGxvb2thaGVhZF8xMzksIFwieWllbGRcIikpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0WWllbGRFeHByZXNzaW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgdGhpcy5pc0tleXdvcmQobG9va2FoZWFkXzEzOSwgXCJjbGFzc1wiKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RDbGFzcyh7aXNFeHByOiB0cnVlfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgdGhpcy5pc0tleXdvcmQobG9va2FoZWFkXzEzOSwgXCJzdXBlclwiKSkge1xuICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJTdXBlclwiLCB7fSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgKHRoaXMuaXNJZGVudGlmaWVyKGxvb2thaGVhZF8xMzkpIHx8IHRoaXMuaXNQYXJlbnMobG9va2FoZWFkXzEzOSkpICYmIHRoaXMuaXNQdW5jdHVhdG9yKHRoaXMucGVlaygxKSwgXCI9PlwiKSAmJiB0aGlzLmxpbmVOdW1iZXJFcShsb29rYWhlYWRfMTM5LCB0aGlzLnBlZWsoMSkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdEFycm93RXhwcmVzc2lvbigpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNTeW50YXhUZW1wbGF0ZShsb29rYWhlYWRfMTM5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RTeW50YXhUZW1wbGF0ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNTeW50YXhRdW90ZVRyYW5zZm9ybShsb29rYWhlYWRfMTM5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RTeW50YXhRdW90ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNOZXdUcmFuc2Zvcm0obG9va2FoZWFkXzEzOSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0TmV3RXhwcmVzc2lvbigpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNLZXl3b3JkKGxvb2thaGVhZF8xMzksIFwidGhpc1wiKSkge1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiVGhpc0V4cHJlc3Npb25cIiwge3N0eDogdGhpcy5hZHZhbmNlKCl9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiAodGhpcy5pc0lkZW50aWZpZXIobG9va2FoZWFkXzEzOSkgfHwgdGhpcy5pc0tleXdvcmQobG9va2FoZWFkXzEzOSwgXCJsZXRcIikgfHwgdGhpcy5pc0tleXdvcmQobG9va2FoZWFkXzEzOSwgXCJ5aWVsZFwiKSkpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIklkZW50aWZpZXJFeHByZXNzaW9uXCIsIHtuYW1lOiB0aGlzLmFkdmFuY2UoKX0pO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNOdW1lcmljTGl0ZXJhbChsb29rYWhlYWRfMTM5KSkge1xuICAgICAgbGV0IG51bSA9IHRoaXMuYWR2YW5jZSgpO1xuICAgICAgaWYgKG51bS52YWwoKSA9PT0gMSAvIDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiTGl0ZXJhbEluZmluaXR5RXhwcmVzc2lvblwiLCB7fSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJMaXRlcmFsTnVtZXJpY0V4cHJlc3Npb25cIiwge3ZhbHVlOiBudW19KTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzU3RyaW5nTGl0ZXJhbChsb29rYWhlYWRfMTM5KSkge1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb25cIiwge3ZhbHVlOiB0aGlzLmFkdmFuY2UoKX0pO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNUZW1wbGF0ZShsb29rYWhlYWRfMTM5KSkge1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiVGVtcGxhdGVFeHByZXNzaW9uXCIsIHt0YWc6IG51bGwsIGVsZW1lbnRzOiB0aGlzLmVuZm9yZXN0VGVtcGxhdGVFbGVtZW50cygpfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgdGhpcy5pc0Jvb2xlYW5MaXRlcmFsKGxvb2thaGVhZF8xMzkpKSB7XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJMaXRlcmFsQm9vbGVhbkV4cHJlc3Npb25cIiwge3ZhbHVlOiB0aGlzLmFkdmFuY2UoKX0pO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNOdWxsTGl0ZXJhbChsb29rYWhlYWRfMTM5KSkge1xuICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJMaXRlcmFsTnVsbEV4cHJlc3Npb25cIiwge30pO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsICYmIHRoaXMuaXNSZWd1bGFyRXhwcmVzc2lvbihsb29rYWhlYWRfMTM5KSkge1xuICAgICAgbGV0IHJlU3R4ID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgICBsZXQgbGFzdFNsYXNoID0gcmVTdHgudG9rZW4udmFsdWUubGFzdEluZGV4T2YoXCIvXCIpO1xuICAgICAgbGV0IHBhdHRlcm4gPSByZVN0eC50b2tlbi52YWx1ZS5zbGljZSgxLCBsYXN0U2xhc2gpO1xuICAgICAgbGV0IGZsYWdzID0gcmVTdHgudG9rZW4udmFsdWUuc2xpY2UobGFzdFNsYXNoICsgMSk7XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJMaXRlcmFsUmVnRXhwRXhwcmVzc2lvblwiLCB7cGF0dGVybjogcGF0dGVybiwgZmxhZ3M6IGZsYWdzfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgdGhpcy5pc1BhcmVucyhsb29rYWhlYWRfMTM5KSkge1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIiwge2lubmVyOiB0aGlzLmFkdmFuY2UoKS5pbm5lcigpfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgdGhpcy5pc0ZuRGVjbFRyYW5zZm9ybShsb29rYWhlYWRfMTM5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RGdW5jdGlvbkV4cHJlc3Npb24oKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzQnJhY2VzKGxvb2thaGVhZF8xMzkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdE9iamVjdEV4cHJlc3Npb24oKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCAmJiB0aGlzLmlzQnJhY2tldHMobG9va2FoZWFkXzEzOSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0QXJyYXlFeHByZXNzaW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwgJiYgdGhpcy5pc09wZXJhdG9yKGxvb2thaGVhZF8xMzkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdFVuYXJ5RXhwcmVzc2lvbigpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtICYmIHRoaXMuaXNVcGRhdGVPcGVyYXRvcihsb29rYWhlYWRfMTM5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RVcGRhdGVFeHByZXNzaW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gJiYgdGhpcy5pc09wZXJhdG9yKGxvb2thaGVhZF8xMzkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdEJpbmFyeUV4cHJlc3Npb24oKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSAmJiB0aGlzLmlzUHVuY3R1YXRvcihsb29rYWhlYWRfMTM5LCBcIi5cIikgJiYgKHRoaXMuaXNJZGVudGlmaWVyKHRoaXMucGVlaygxKSkgfHwgdGhpcy5pc0tleXdvcmQodGhpcy5wZWVrKDEpKSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZm9yZXN0U3RhdGljTWVtYmVyRXhwcmVzc2lvbigpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtICYmIHRoaXMuaXNCcmFja2V0cyhsb29rYWhlYWRfMTM5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5mb3Jlc3RDb21wdXRlZE1lbWJlckV4cHJlc3Npb24oKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSAmJiB0aGlzLmlzUGFyZW5zKGxvb2thaGVhZF8xMzkpKSB7XG4gICAgICBsZXQgcGFyZW4gPSB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIkNhbGxFeHByZXNzaW9uXCIsIHtjYWxsZWU6IHRoaXMudGVybSwgYXJndW1lbnRzOiBwYXJlbi5pbm5lcigpfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gJiYgdGhpcy5pc1RlbXBsYXRlKGxvb2thaGVhZF8xMzkpKSB7XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJUZW1wbGF0ZUV4cHJlc3Npb25cIiwge3RhZzogdGhpcy50ZXJtLCBlbGVtZW50czogdGhpcy5lbmZvcmVzdFRlbXBsYXRlRWxlbWVudHMoKX0pO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXJtICYmIHRoaXMuaXNBc3NpZ24obG9va2FoZWFkXzEzOSkpIHtcbiAgICAgIGxldCBiaW5kaW5nID0gdGhpcy50cmFuc2Zvcm1EZXN0cnVjdHVyaW5nKHRoaXMudGVybSk7XG4gICAgICBsZXQgb3AgPSB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIGxldCBlbmYgPSBuZXcgRW5mb3Jlc3Rlcih0aGlzLnJlc3QsIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICAgIGxldCBpbml0ID0gZW5mLmVuZm9yZXN0KFwiZXhwcmVzc2lvblwiKTtcbiAgICAgIHRoaXMucmVzdCA9IGVuZi5yZXN0O1xuICAgICAgaWYgKG9wLnZhbCgpID09PSBcIj1cIikge1xuICAgICAgICByZXR1cm4gbmV3IFRlcm0oXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiLCB7YmluZGluZzogYmluZGluZywgZXhwcmVzc2lvbjogaW5pdH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29tcG91bmRBc3NpZ25tZW50RXhwcmVzc2lvblwiLCB7YmluZGluZzogYmluZGluZywgb3BlcmF0b3I6IG9wLnZhbCgpLCBleHByZXNzaW9uOiBpbml0fSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0gJiYgdGhpcy5pc1B1bmN0dWF0b3IobG9va2FoZWFkXzEzOSwgXCI/XCIpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmZvcmVzdENvbmRpdGlvbmFsRXhwcmVzc2lvbigpO1xuICAgIH1cbiAgICByZXR1cm4gRVhQUl9MT09QX05PX0NIQU5HRV8yNztcbiAgfVxuICBlbmZvcmVzdEFyZ3VtZW50TGlzdCgpIHtcbiAgICBsZXQgcmVzdWx0XzE0MCA9IFtdO1xuICAgIHdoaWxlICh0aGlzLnJlc3Quc2l6ZSA+IDApIHtcbiAgICAgIGxldCBhcmc7XG4gICAgICBpZiAodGhpcy5pc1B1bmN0dWF0b3IodGhpcy5wZWVrKCksIFwiLi4uXCIpKSB7XG4gICAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgICBhcmcgPSBuZXcgVGVybShcIlNwcmVhZEVsZW1lbnRcIiwge2V4cHJlc3Npb246IHRoaXMuZW5mb3Jlc3RFeHByZXNzaW9uTG9vcCgpfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcmcgPSB0aGlzLmVuZm9yZXN0RXhwcmVzc2lvbkxvb3AoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJlc3Quc2l6ZSA+IDApIHtcbiAgICAgICAgdGhpcy5tYXRjaFB1bmN0dWF0b3IoXCIsXCIpO1xuICAgICAgfVxuICAgICAgcmVzdWx0XzE0MC5wdXNoKGFyZyk7XG4gICAgfVxuICAgIHJldHVybiBMaXN0KHJlc3VsdF8xNDApO1xuICB9XG4gIGVuZm9yZXN0TmV3RXhwcmVzc2lvbigpIHtcbiAgICB0aGlzLm1hdGNoS2V5d29yZChcIm5ld1wiKTtcbiAgICBsZXQgY2FsbGVlXzE0MTtcbiAgICBpZiAodGhpcy5pc0tleXdvcmQodGhpcy5wZWVrKCksIFwibmV3XCIpKSB7XG4gICAgICBjYWxsZWVfMTQxID0gdGhpcy5lbmZvcmVzdE5ld0V4cHJlc3Npb24oKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNLZXl3b3JkKHRoaXMucGVlaygpLCBcInN1cGVyXCIpKSB7XG4gICAgICBjYWxsZWVfMTQxID0gdGhpcy5lbmZvcmVzdEV4cHJlc3Npb25Mb29wKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzUHVuY3R1YXRvcih0aGlzLnBlZWsoKSwgXCIuXCIpICYmIHRoaXMuaXNJZGVudGlmaWVyKHRoaXMucGVlaygxKSwgXCJ0YXJnZXRcIikpIHtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICByZXR1cm4gbmV3IFRlcm0oXCJOZXdUYXJnZXRFeHByZXNzaW9uXCIsIHt9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGVlXzE0MSA9IG5ldyBUZXJtKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiwge25hbWU6IHRoaXMuZW5mb3Jlc3RJZGVudGlmaWVyKCl9KTtcbiAgICB9XG4gICAgbGV0IGFyZ3NfMTQyO1xuICAgIGlmICh0aGlzLmlzUGFyZW5zKHRoaXMucGVlaygpKSkge1xuICAgICAgYXJnc18xNDIgPSB0aGlzLm1hdGNoUGFyZW5zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3NfMTQyID0gTGlzdCgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0oXCJOZXdFeHByZXNzaW9uXCIsIHtjYWxsZWU6IGNhbGxlZV8xNDEsIGFyZ3VtZW50czogYXJnc18xNDJ9KTtcbiAgfVxuICBlbmZvcmVzdENvbXB1dGVkTWVtYmVyRXhwcmVzc2lvbigpIHtcbiAgICBsZXQgZW5mXzE0MyA9IG5ldyBFbmZvcmVzdGVyKHRoaXMubWF0Y2hTcXVhcmVzKCksIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDb21wdXRlZE1lbWJlckV4cHJlc3Npb25cIiwge29iamVjdDogdGhpcy50ZXJtLCBleHByZXNzaW9uOiBlbmZfMTQzLmVuZm9yZXN0RXhwcmVzc2lvbigpfSk7XG4gIH1cbiAgdHJhbnNmb3JtRGVzdHJ1Y3R1cmluZyh0ZXJtXzE0NCkge1xuICAgIHN3aXRjaCAodGVybV8xNDQudHlwZSkge1xuICAgICAgY2FzZSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCI6XG4gICAgICAgIHJldHVybiBuZXcgVGVybShcIkJpbmRpbmdJZGVudGlmaWVyXCIsIHtuYW1lOiB0ZXJtXzE0NC5uYW1lfSk7XG4gICAgICBjYXNlIFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIjpcbiAgICAgICAgaWYgKHRlcm1fMTQ0LmlubmVyLnNpemUgPT09IDEgJiYgdGhpcy5pc0lkZW50aWZpZXIodGVybV8xNDQuaW5uZXIuZ2V0KDApKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgVGVybShcIkJpbmRpbmdJZGVudGlmaWVyXCIsIHtuYW1lOiB0ZXJtXzE0NC5pbm5lci5nZXQoMCl9KTtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcIkRhdGFQcm9wZXJ0eVwiOlxuICAgICAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eVwiLCB7bmFtZTogdGVybV8xNDQubmFtZSwgYmluZGluZzogdGhpcy50cmFuc2Zvcm1EZXN0cnVjdHVyaW5nV2l0aERlZmF1bHQodGVybV8xNDQuZXhwcmVzc2lvbil9KTtcbiAgICAgIGNhc2UgXCJTaG9ydGhhbmRQcm9wZXJ0eVwiOlxuICAgICAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyXCIsIHtiaW5kaW5nOiBuZXcgVGVybShcIkJpbmRpbmdJZGVudGlmaWVyXCIsIHtuYW1lOiB0ZXJtXzE0NC5uYW1lfSksIGluaXQ6IG51bGx9KTtcbiAgICAgIGNhc2UgXCJPYmplY3RFeHByZXNzaW9uXCI6XG4gICAgICAgIHJldHVybiBuZXcgVGVybShcIk9iamVjdEJpbmRpbmdcIiwge3Byb3BlcnRpZXM6IHRlcm1fMTQ0LnByb3BlcnRpZXMubWFwKHRfMTQ1ID0+IHRoaXMudHJhbnNmb3JtRGVzdHJ1Y3R1cmluZyh0XzE0NSkpfSk7XG4gICAgICBjYXNlIFwiQXJyYXlFeHByZXNzaW9uXCI6XG4gICAgICAgIGxldCBsYXN0ID0gdGVybV8xNDQuZWxlbWVudHMubGFzdCgpO1xuICAgICAgICBpZiAobGFzdCAhPSBudWxsICYmIGxhc3QudHlwZSA9PT0gXCJTcHJlYWRFbGVtZW50XCIpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFRlcm0oXCJBcnJheUJpbmRpbmdcIiwge2VsZW1lbnRzOiB0ZXJtXzE0NC5lbGVtZW50cy5zbGljZSgwLCAtMSkubWFwKHRfMTQ2ID0+IHRfMTQ2ICYmIHRoaXMudHJhbnNmb3JtRGVzdHJ1Y3R1cmluZ1dpdGhEZWZhdWx0KHRfMTQ2KSksIHJlc3RFbGVtZW50OiB0aGlzLnRyYW5zZm9ybURlc3RydWN0dXJpbmdXaXRoRGVmYXVsdChsYXN0LmV4cHJlc3Npb24pfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiQXJyYXlCaW5kaW5nXCIsIHtlbGVtZW50czogdGVybV8xNDQuZWxlbWVudHMubWFwKHRfMTQ3ID0+IHRfMTQ3ICYmIHRoaXMudHJhbnNmb3JtRGVzdHJ1Y3R1cmluZ1dpdGhEZWZhdWx0KHRfMTQ3KSksIHJlc3RFbGVtZW50OiBudWxsfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiQXJyYXlCaW5kaW5nXCIsIHtlbGVtZW50czogdGVybV8xNDQuZWxlbWVudHMubWFwKHRfMTQ4ID0+IHRfMTQ4ICYmIHRoaXMudHJhbnNmb3JtRGVzdHJ1Y3R1cmluZyh0XzE0OCkpLCByZXN0RWxlbWVudDogbnVsbH0pO1xuICAgICAgY2FzZSBcIlN0YXRpY1Byb3BlcnR5TmFtZVwiOlxuICAgICAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nSWRlbnRpZmllclwiLCB7bmFtZTogdGVybV8xNDQudmFsdWV9KTtcbiAgICAgIGNhc2UgXCJDb21wdXRlZE1lbWJlckV4cHJlc3Npb25cIjpcbiAgICAgIGNhc2UgXCJTdGF0aWNNZW1iZXJFeHByZXNzaW9uXCI6XG4gICAgICBjYXNlIFwiQXJyYXlCaW5kaW5nXCI6XG4gICAgICBjYXNlIFwiQmluZGluZ0lkZW50aWZpZXJcIjpcbiAgICAgIGNhc2UgXCJCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyXCI6XG4gICAgICBjYXNlIFwiQmluZGluZ1Byb3BlcnR5UHJvcGVydHlcIjpcbiAgICAgIGNhc2UgXCJCaW5kaW5nV2l0aERlZmF1bHRcIjpcbiAgICAgIGNhc2UgXCJPYmplY3RCaW5kaW5nXCI6XG4gICAgICAgIHJldHVybiB0ZXJtXzE0NDtcbiAgICB9XG4gICAgYXNzZXJ0KGZhbHNlLCBcIm5vdCBpbXBsZW1lbnRlZCB5ZXQgZm9yIFwiICsgdGVybV8xNDQudHlwZSk7XG4gIH1cbiAgdHJhbnNmb3JtRGVzdHJ1Y3R1cmluZ1dpdGhEZWZhdWx0KHRlcm1fMTQ5KSB7XG4gICAgc3dpdGNoICh0ZXJtXzE0OS50eXBlKSB7XG4gICAgICBjYXNlIFwiQXNzaWdubWVudEV4cHJlc3Npb25cIjpcbiAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiQmluZGluZ1dpdGhEZWZhdWx0XCIsIHtiaW5kaW5nOiB0aGlzLnRyYW5zZm9ybURlc3RydWN0dXJpbmcodGVybV8xNDkuYmluZGluZyksIGluaXQ6IHRlcm1fMTQ5LmV4cHJlc3Npb259KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtRGVzdHJ1Y3R1cmluZyh0ZXJtXzE0OSk7XG4gIH1cbiAgZW5mb3Jlc3RBcnJvd0V4cHJlc3Npb24oKSB7XG4gICAgbGV0IGVuZl8xNTA7XG4gICAgaWYgKHRoaXMuaXNJZGVudGlmaWVyKHRoaXMucGVlaygpKSkge1xuICAgICAgZW5mXzE1MCA9IG5ldyBFbmZvcmVzdGVyKExpc3Qub2YodGhpcy5hZHZhbmNlKCkpLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBwID0gdGhpcy5tYXRjaFBhcmVucygpO1xuICAgICAgZW5mXzE1MCA9IG5ldyBFbmZvcmVzdGVyKHAsIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICB9XG4gICAgbGV0IHBhcmFtc18xNTEgPSBlbmZfMTUwLmVuZm9yZXN0Rm9ybWFsUGFyYW1ldGVycygpO1xuICAgIHRoaXMubWF0Y2hQdW5jdHVhdG9yKFwiPT5cIik7XG4gICAgbGV0IGJvZHlfMTUyO1xuICAgIGlmICh0aGlzLmlzQnJhY2VzKHRoaXMucGVlaygpKSkge1xuICAgICAgYm9keV8xNTIgPSB0aGlzLm1hdGNoQ3VybGllcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmZfMTUwID0gbmV3IEVuZm9yZXN0ZXIodGhpcy5yZXN0LCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgICBib2R5XzE1MiA9IGVuZl8xNTAuZW5mb3Jlc3RFeHByZXNzaW9uTG9vcCgpO1xuICAgICAgdGhpcy5yZXN0ID0gZW5mXzE1MC5yZXN0O1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0oXCJBcnJvd0V4cHJlc3Npb25cIiwge3BhcmFtczogcGFyYW1zXzE1MSwgYm9keTogYm9keV8xNTJ9KTtcbiAgfVxuICBlbmZvcmVzdFlpZWxkRXhwcmVzc2lvbigpIHtcbiAgICBsZXQga3dkXzE1MyA9IHRoaXMubWF0Y2hLZXl3b3JkKFwieWllbGRcIik7XG4gICAgbGV0IGxvb2thaGVhZF8xNTQgPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAodGhpcy5yZXN0LnNpemUgPT09IDAgfHwgbG9va2FoZWFkXzE1NCAmJiAhdGhpcy5saW5lTnVtYmVyRXEoa3dkXzE1MywgbG9va2FoZWFkXzE1NCkpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIllpZWxkRXhwcmVzc2lvblwiLCB7ZXhwcmVzc2lvbjogbnVsbH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgaXNHZW5lcmF0b3IgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLmlzUHVuY3R1YXRvcih0aGlzLnBlZWsoKSwgXCIqXCIpKSB7XG4gICAgICAgIGlzR2VuZXJhdG9yID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICB9XG4gICAgICBsZXQgZXhwciA9IHRoaXMuZW5mb3Jlc3RFeHByZXNzaW9uKCk7XG4gICAgICBsZXQgdHlwZSA9IGlzR2VuZXJhdG9yID8gXCJZaWVsZEdlbmVyYXRvckV4cHJlc3Npb25cIiA6IFwiWWllbGRFeHByZXNzaW9uXCI7XG4gICAgICByZXR1cm4gbmV3IFRlcm0odHlwZSwge2V4cHJlc3Npb246IGV4cHJ9KTtcbiAgICB9XG4gIH1cbiAgZW5mb3Jlc3RTeW50YXhUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJTeW50YXhUZW1wbGF0ZVwiLCB7dGVtcGxhdGU6IHRoaXMuYWR2YW5jZSgpfSk7XG4gIH1cbiAgZW5mb3Jlc3RTeW50YXhRdW90ZSgpIHtcbiAgICBsZXQgbmFtZV8xNTUgPSB0aGlzLmFkdmFuY2UoKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJTeW50YXhRdW90ZVwiLCB7bmFtZTogbmFtZV8xNTUsIHRlbXBsYXRlOiBuZXcgVGVybShcIlRlbXBsYXRlRXhwcmVzc2lvblwiLCB7dGFnOiBuZXcgVGVybShcIklkZW50aWZpZXJFeHByZXNzaW9uXCIsIHtuYW1lOiBuYW1lXzE1NX0pLCBlbGVtZW50czogdGhpcy5lbmZvcmVzdFRlbXBsYXRlRWxlbWVudHMoKX0pfSk7XG4gIH1cbiAgZW5mb3Jlc3RTdGF0aWNNZW1iZXJFeHByZXNzaW9uKCkge1xuICAgIGxldCBvYmplY3RfMTU2ID0gdGhpcy50ZXJtO1xuICAgIGxldCBkb3RfMTU3ID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgbGV0IHByb3BlcnR5XzE1OCA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIHJldHVybiBuZXcgVGVybShcIlN0YXRpY01lbWJlckV4cHJlc3Npb25cIiwge29iamVjdDogb2JqZWN0XzE1NiwgcHJvcGVydHk6IHByb3BlcnR5XzE1OH0pO1xuICB9XG4gIGVuZm9yZXN0QXJyYXlFeHByZXNzaW9uKCkge1xuICAgIGxldCBhcnJfMTU5ID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgbGV0IGVsZW1lbnRzXzE2MCA9IFtdO1xuICAgIGxldCBlbmZfMTYxID0gbmV3IEVuZm9yZXN0ZXIoYXJyXzE1OS5pbm5lcigpLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgd2hpbGUgKGVuZl8xNjEucmVzdC5zaXplID4gMCkge1xuICAgICAgbGV0IGxvb2thaGVhZCA9IGVuZl8xNjEucGVlaygpO1xuICAgICAgaWYgKGVuZl8xNjEuaXNQdW5jdHVhdG9yKGxvb2thaGVhZCwgXCIsXCIpKSB7XG4gICAgICAgIGVuZl8xNjEuYWR2YW5jZSgpO1xuICAgICAgICBlbGVtZW50c18xNjAucHVzaChudWxsKTtcbiAgICAgIH0gZWxzZSBpZiAoZW5mXzE2MS5pc1B1bmN0dWF0b3IobG9va2FoZWFkLCBcIi4uLlwiKSkge1xuICAgICAgICBlbmZfMTYxLmFkdmFuY2UoKTtcbiAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBlbmZfMTYxLmVuZm9yZXN0RXhwcmVzc2lvbkxvb3AoKTtcbiAgICAgICAgaWYgKGV4cHJlc3Npb24gPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IGVuZl8xNjEuY3JlYXRlRXJyb3IobG9va2FoZWFkLCBcImV4cGVjdGluZyBleHByZXNzaW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRzXzE2MC5wdXNoKG5ldyBUZXJtKFwiU3ByZWFkRWxlbWVudFwiLCB7ZXhwcmVzc2lvbjogZXhwcmVzc2lvbn0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB0ZXJtID0gZW5mXzE2MS5lbmZvcmVzdEV4cHJlc3Npb25Mb29wKCk7XG4gICAgICAgIGlmICh0ZXJtID09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBlbmZfMTYxLmNyZWF0ZUVycm9yKGxvb2thaGVhZCwgXCJleHBlY3RlZCBleHByZXNzaW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRzXzE2MC5wdXNoKHRlcm0pO1xuICAgICAgICBlbmZfMTYxLmNvbnN1bWVDb21tYSgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0oXCJBcnJheUV4cHJlc3Npb25cIiwge2VsZW1lbnRzOiBMaXN0KGVsZW1lbnRzXzE2MCl9KTtcbiAgfVxuICBlbmZvcmVzdE9iamVjdEV4cHJlc3Npb24oKSB7XG4gICAgbGV0IG9ial8xNjIgPSB0aGlzLmFkdmFuY2UoKTtcbiAgICBsZXQgcHJvcGVydGllc18xNjMgPSBMaXN0KCk7XG4gICAgbGV0IGVuZl8xNjQgPSBuZXcgRW5mb3Jlc3RlcihvYmpfMTYyLmlubmVyKCksIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgbGFzdFByb3BfMTY1ID0gbnVsbDtcbiAgICB3aGlsZSAoZW5mXzE2NC5yZXN0LnNpemUgPiAwKSB7XG4gICAgICBsZXQgcHJvcCA9IGVuZl8xNjQuZW5mb3Jlc3RQcm9wZXJ0eURlZmluaXRpb24oKTtcbiAgICAgIGVuZl8xNjQuY29uc3VtZUNvbW1hKCk7XG4gICAgICBwcm9wZXJ0aWVzXzE2MyA9IHByb3BlcnRpZXNfMTYzLmNvbmNhdChwcm9wKTtcbiAgICAgIGlmIChsYXN0UHJvcF8xNjUgPT09IHByb3ApIHtcbiAgICAgICAgdGhyb3cgZW5mXzE2NC5jcmVhdGVFcnJvcihwcm9wLCBcImludmFsaWQgc3ludGF4IGluIG9iamVjdFwiKTtcbiAgICAgIH1cbiAgICAgIGxhc3RQcm9wXzE2NSA9IHByb3A7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGVybShcIk9iamVjdEV4cHJlc3Npb25cIiwge3Byb3BlcnRpZXM6IHByb3BlcnRpZXNfMTYzfSk7XG4gIH1cbiAgZW5mb3Jlc3RQcm9wZXJ0eURlZmluaXRpb24oKSB7XG4gICAgbGV0IHttZXRob2RPcktleSwga2luZH0gPSB0aGlzLmVuZm9yZXN0TWV0aG9kRGVmaW5pdGlvbigpO1xuICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgY2FzZSBcIm1ldGhvZFwiOlxuICAgICAgICByZXR1cm4gbWV0aG9kT3JLZXk7XG4gICAgICBjYXNlIFwiaWRlbnRpZmllclwiOlxuICAgICAgICBpZiAodGhpcy5pc0Fzc2lnbih0aGlzLnBlZWsoKSkpIHtcbiAgICAgICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgICAgICBsZXQgaW5pdCA9IHRoaXMuZW5mb3Jlc3RFeHByZXNzaW9uTG9vcCgpO1xuICAgICAgICAgIHJldHVybiBuZXcgVGVybShcIkJpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXJcIiwge2luaXQ6IGluaXQsIGJpbmRpbmc6IHRoaXMudHJhbnNmb3JtRGVzdHJ1Y3R1cmluZyhtZXRob2RPcktleSl9KTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pc1B1bmN0dWF0b3IodGhpcy5wZWVrKCksIFwiOlwiKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgVGVybShcIlNob3J0aGFuZFByb3BlcnR5XCIsIHtuYW1lOiBtZXRob2RPcktleS52YWx1ZX0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMubWF0Y2hQdW5jdHVhdG9yKFwiOlwiKTtcbiAgICBsZXQgZXhwcl8xNjYgPSB0aGlzLmVuZm9yZXN0RXhwcmVzc2lvbkxvb3AoKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJEYXRhUHJvcGVydHlcIiwge25hbWU6IG1ldGhvZE9yS2V5LCBleHByZXNzaW9uOiBleHByXzE2Nn0pO1xuICB9XG4gIGVuZm9yZXN0TWV0aG9kRGVmaW5pdGlvbigpIHtcbiAgICBsZXQgbG9va2FoZWFkXzE2NyA9IHRoaXMucGVlaygpO1xuICAgIGxldCBpc0dlbmVyYXRvcl8xNjggPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pc1B1bmN0dWF0b3IobG9va2FoZWFkXzE2NywgXCIqXCIpKSB7XG4gICAgICBpc0dlbmVyYXRvcl8xNjggPSB0cnVlO1xuICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzSWRlbnRpZmllcihsb29rYWhlYWRfMTY3LCBcImdldFwiKSAmJiB0aGlzLmlzUHJvcGVydHlOYW1lKHRoaXMucGVlaygxKSkpIHtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgbGV0IHtuYW1lfSA9IHRoaXMuZW5mb3Jlc3RQcm9wZXJ0eU5hbWUoKTtcbiAgICAgIHRoaXMubWF0Y2hQYXJlbnMoKTtcbiAgICAgIGxldCBib2R5ID0gdGhpcy5tYXRjaEN1cmxpZXMoKTtcbiAgICAgIHJldHVybiB7bWV0aG9kT3JLZXk6IG5ldyBUZXJtKFwiR2V0dGVyXCIsIHtuYW1lOiBuYW1lLCBib2R5OiBib2R5fSksIGtpbmQ6IFwibWV0aG9kXCJ9O1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0lkZW50aWZpZXIobG9va2FoZWFkXzE2NywgXCJzZXRcIikgJiYgdGhpcy5pc1Byb3BlcnR5TmFtZSh0aGlzLnBlZWsoMSkpKSB7XG4gICAgICB0aGlzLmFkdmFuY2UoKTtcbiAgICAgIGxldCB7bmFtZX0gPSB0aGlzLmVuZm9yZXN0UHJvcGVydHlOYW1lKCk7XG4gICAgICBsZXQgZW5mID0gbmV3IEVuZm9yZXN0ZXIodGhpcy5tYXRjaFBhcmVucygpLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgICBsZXQgcGFyYW0gPSBlbmYuZW5mb3Jlc3RCaW5kaW5nRWxlbWVudCgpO1xuICAgICAgbGV0IGJvZHkgPSB0aGlzLm1hdGNoQ3VybGllcygpO1xuICAgICAgcmV0dXJuIHttZXRob2RPcktleTogbmV3IFRlcm0oXCJTZXR0ZXJcIiwge25hbWU6IG5hbWUsIHBhcmFtOiBwYXJhbSwgYm9keTogYm9keX0pLCBraW5kOiBcIm1ldGhvZFwifTtcbiAgICB9XG4gICAgbGV0IHtuYW1lfSA9IHRoaXMuZW5mb3Jlc3RQcm9wZXJ0eU5hbWUoKTtcbiAgICBpZiAodGhpcy5pc1BhcmVucyh0aGlzLnBlZWsoKSkpIHtcbiAgICAgIGxldCBwYXJhbXMgPSB0aGlzLm1hdGNoUGFyZW5zKCk7XG4gICAgICBsZXQgZW5mID0gbmV3IEVuZm9yZXN0ZXIocGFyYW1zLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgICBsZXQgZm9ybWFsUGFyYW1zID0gZW5mLmVuZm9yZXN0Rm9ybWFsUGFyYW1ldGVycygpO1xuICAgICAgbGV0IGJvZHkgPSB0aGlzLm1hdGNoQ3VybGllcygpO1xuICAgICAgcmV0dXJuIHttZXRob2RPcktleTogbmV3IFRlcm0oXCJNZXRob2RcIiwge2lzR2VuZXJhdG9yOiBpc0dlbmVyYXRvcl8xNjgsIG5hbWU6IG5hbWUsIHBhcmFtczogZm9ybWFsUGFyYW1zLCBib2R5OiBib2R5fSksIGtpbmQ6IFwibWV0aG9kXCJ9O1xuICAgIH1cbiAgICByZXR1cm4ge21ldGhvZE9yS2V5OiBuYW1lLCBraW5kOiB0aGlzLmlzSWRlbnRpZmllcihsb29rYWhlYWRfMTY3KSB8fCB0aGlzLmlzS2V5d29yZChsb29rYWhlYWRfMTY3KSA/IFwiaWRlbnRpZmllclwiIDogXCJwcm9wZXJ0eVwifTtcbiAgfVxuICBlbmZvcmVzdFByb3BlcnR5TmFtZSgpIHtcbiAgICBsZXQgbG9va2FoZWFkXzE2OSA9IHRoaXMucGVlaygpO1xuICAgIGlmICh0aGlzLmlzU3RyaW5nTGl0ZXJhbChsb29rYWhlYWRfMTY5KSB8fCB0aGlzLmlzTnVtZXJpY0xpdGVyYWwobG9va2FoZWFkXzE2OSkpIHtcbiAgICAgIHJldHVybiB7bmFtZTogbmV3IFRlcm0oXCJTdGF0aWNQcm9wZXJ0eU5hbWVcIiwge3ZhbHVlOiB0aGlzLmFkdmFuY2UoKX0pLCBiaW5kaW5nOiBudWxsfTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNCcmFja2V0cyhsb29rYWhlYWRfMTY5KSkge1xuICAgICAgbGV0IGVuZiA9IG5ldyBFbmZvcmVzdGVyKHRoaXMubWF0Y2hTcXVhcmVzKCksIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICAgIGxldCBleHByID0gZW5mLmVuZm9yZXN0RXhwcmVzc2lvbkxvb3AoKTtcbiAgICAgIHJldHVybiB7bmFtZTogbmV3IFRlcm0oXCJDb21wdXRlZFByb3BlcnR5TmFtZVwiLCB7ZXhwcmVzc2lvbjogZXhwcn0pLCBiaW5kaW5nOiBudWxsfTtcbiAgICB9XG4gICAgbGV0IG5hbWVfMTcwID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgcmV0dXJuIHtuYW1lOiBuZXcgVGVybShcIlN0YXRpY1Byb3BlcnR5TmFtZVwiLCB7dmFsdWU6IG5hbWVfMTcwfSksIGJpbmRpbmc6IG5ldyBUZXJtKFwiQmluZGluZ0lkZW50aWZpZXJcIiwge25hbWU6IG5hbWVfMTcwfSl9O1xuICB9XG4gIGVuZm9yZXN0RnVuY3Rpb24oe2lzRXhwciwgaW5EZWZhdWx0LCBhbGxvd0dlbmVyYXRvcn0pIHtcbiAgICBsZXQgbmFtZV8xNzEgPSBudWxsLCBwYXJhbXNfMTcyLCBib2R5XzE3MywgcmVzdF8xNzQ7XG4gICAgbGV0IGlzR2VuZXJhdG9yXzE3NSA9IGZhbHNlO1xuICAgIGxldCBmbktleXdvcmRfMTc2ID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgbGV0IGxvb2thaGVhZF8xNzcgPSB0aGlzLnBlZWsoKTtcbiAgICBsZXQgdHlwZV8xNzggPSBpc0V4cHIgPyBcIkZ1bmN0aW9uRXhwcmVzc2lvblwiIDogXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCI7XG4gICAgaWYgKHRoaXMuaXNQdW5jdHVhdG9yKGxvb2thaGVhZF8xNzcsIFwiKlwiKSkge1xuICAgICAgaXNHZW5lcmF0b3JfMTc1ID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgbG9va2FoZWFkXzE3NyA9IHRoaXMucGVlaygpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNQYXJlbnMobG9va2FoZWFkXzE3NykpIHtcbiAgICAgIG5hbWVfMTcxID0gdGhpcy5lbmZvcmVzdEJpbmRpbmdJZGVudGlmaWVyKCk7XG4gICAgfSBlbHNlIGlmIChpbkRlZmF1bHQpIHtcbiAgICAgIG5hbWVfMTcxID0gbmV3IFRlcm0oXCJCaW5kaW5nSWRlbnRpZmllclwiLCB7bmFtZTogU3ludGF4LmZyb21JZGVudGlmaWVyKFwiKmRlZmF1bHQqXCIsIGZuS2V5d29yZF8xNzYpfSk7XG4gICAgfVxuICAgIHBhcmFtc18xNzIgPSB0aGlzLm1hdGNoUGFyZW5zKCk7XG4gICAgYm9keV8xNzMgPSB0aGlzLm1hdGNoQ3VybGllcygpO1xuICAgIGxldCBlbmZfMTc5ID0gbmV3IEVuZm9yZXN0ZXIocGFyYW1zXzE3MiwgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgIGxldCBmb3JtYWxQYXJhbXNfMTgwID0gZW5mXzE3OS5lbmZvcmVzdEZvcm1hbFBhcmFtZXRlcnMoKTtcbiAgICByZXR1cm4gbmV3IFRlcm0odHlwZV8xNzgsIHtuYW1lOiBuYW1lXzE3MSwgaXNHZW5lcmF0b3I6IGlzR2VuZXJhdG9yXzE3NSwgcGFyYW1zOiBmb3JtYWxQYXJhbXNfMTgwLCBib2R5OiBib2R5XzE3M30pO1xuICB9XG4gIGVuZm9yZXN0RnVuY3Rpb25FeHByZXNzaW9uKCkge1xuICAgIGxldCBuYW1lXzE4MSA9IG51bGwsIHBhcmFtc18xODIsIGJvZHlfMTgzLCByZXN0XzE4NDtcbiAgICBsZXQgaXNHZW5lcmF0b3JfMTg1ID0gZmFsc2U7XG4gICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgbGV0IGxvb2thaGVhZF8xODYgPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAodGhpcy5pc1B1bmN0dWF0b3IobG9va2FoZWFkXzE4NiwgXCIqXCIpKSB7XG4gICAgICBpc0dlbmVyYXRvcl8xODUgPSB0cnVlO1xuICAgICAgdGhpcy5hZHZhbmNlKCk7XG4gICAgICBsb29rYWhlYWRfMTg2ID0gdGhpcy5wZWVrKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1BhcmVucyhsb29rYWhlYWRfMTg2KSkge1xuICAgICAgbmFtZV8xODEgPSB0aGlzLmVuZm9yZXN0QmluZGluZ0lkZW50aWZpZXIoKTtcbiAgICB9XG4gICAgcGFyYW1zXzE4MiA9IHRoaXMubWF0Y2hQYXJlbnMoKTtcbiAgICBib2R5XzE4MyA9IHRoaXMubWF0Y2hDdXJsaWVzKCk7XG4gICAgbGV0IGVuZl8xODcgPSBuZXcgRW5mb3Jlc3RlcihwYXJhbXNfMTgyLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IGZvcm1hbFBhcmFtc18xODggPSBlbmZfMTg3LmVuZm9yZXN0Rm9ybWFsUGFyYW1ldGVycygpO1xuICAgIHJldHVybiBuZXcgVGVybShcIkZ1bmN0aW9uRXhwcmVzc2lvblwiLCB7bmFtZTogbmFtZV8xODEsIGlzR2VuZXJhdG9yOiBpc0dlbmVyYXRvcl8xODUsIHBhcmFtczogZm9ybWFsUGFyYW1zXzE4OCwgYm9keTogYm9keV8xODN9KTtcbiAgfVxuICBlbmZvcmVzdEZ1bmN0aW9uRGVjbGFyYXRpb24oKSB7XG4gICAgbGV0IG5hbWVfMTg5LCBwYXJhbXNfMTkwLCBib2R5XzE5MSwgcmVzdF8xOTI7XG4gICAgbGV0IGlzR2VuZXJhdG9yXzE5MyA9IGZhbHNlO1xuICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgIGxldCBsb29rYWhlYWRfMTk0ID0gdGhpcy5wZWVrKCk7XG4gICAgaWYgKHRoaXMuaXNQdW5jdHVhdG9yKGxvb2thaGVhZF8xOTQsIFwiKlwiKSkge1xuICAgICAgaXNHZW5lcmF0b3JfMTkzID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgIH1cbiAgICBuYW1lXzE4OSA9IHRoaXMuZW5mb3Jlc3RCaW5kaW5nSWRlbnRpZmllcigpO1xuICAgIHBhcmFtc18xOTAgPSB0aGlzLm1hdGNoUGFyZW5zKCk7XG4gICAgYm9keV8xOTEgPSB0aGlzLm1hdGNoQ3VybGllcygpO1xuICAgIGxldCBlbmZfMTk1ID0gbmV3IEVuZm9yZXN0ZXIocGFyYW1zXzE5MCwgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgIGxldCBmb3JtYWxQYXJhbXNfMTk2ID0gZW5mXzE5NS5lbmZvcmVzdEZvcm1hbFBhcmFtZXRlcnMoKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIsIHtuYW1lOiBuYW1lXzE4OSwgaXNHZW5lcmF0b3I6IGlzR2VuZXJhdG9yXzE5MywgcGFyYW1zOiBmb3JtYWxQYXJhbXNfMTk2LCBib2R5OiBib2R5XzE5MX0pO1xuICB9XG4gIGVuZm9yZXN0Rm9ybWFsUGFyYW1ldGVycygpIHtcbiAgICBsZXQgaXRlbXNfMTk3ID0gW107XG4gICAgbGV0IHJlc3RfMTk4ID0gbnVsbDtcbiAgICB3aGlsZSAodGhpcy5yZXN0LnNpemUgIT09IDApIHtcbiAgICAgIGxldCBsb29rYWhlYWQgPSB0aGlzLnBlZWsoKTtcbiAgICAgIGlmICh0aGlzLmlzUHVuY3R1YXRvcihsb29rYWhlYWQsIFwiLi4uXCIpKSB7XG4gICAgICAgIHRoaXMubWF0Y2hQdW5jdHVhdG9yKFwiLi4uXCIpO1xuICAgICAgICByZXN0XzE5OCA9IHRoaXMuZW5mb3Jlc3RCaW5kaW5nSWRlbnRpZmllcigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGl0ZW1zXzE5Ny5wdXNoKHRoaXMuZW5mb3Jlc3RQYXJhbSgpKTtcbiAgICAgIHRoaXMuY29uc3VtZUNvbW1hKCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGVybShcIkZvcm1hbFBhcmFtZXRlcnNcIiwge2l0ZW1zOiBMaXN0KGl0ZW1zXzE5NyksIHJlc3Q6IHJlc3RfMTk4fSk7XG4gIH1cbiAgZW5mb3Jlc3RQYXJhbSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbmZvcmVzdEJpbmRpbmdFbGVtZW50KCk7XG4gIH1cbiAgZW5mb3Jlc3RVcGRhdGVFeHByZXNzaW9uKCkge1xuICAgIGxldCBvcGVyYXRvcl8xOTkgPSB0aGlzLm1hdGNoVW5hcnlPcGVyYXRvcigpO1xuICAgIHJldHVybiBuZXcgVGVybShcIlVwZGF0ZUV4cHJlc3Npb25cIiwge2lzUHJlZml4OiBmYWxzZSwgb3BlcmF0b3I6IG9wZXJhdG9yXzE5OS52YWwoKSwgb3BlcmFuZDogdGhpcy50cmFuc2Zvcm1EZXN0cnVjdHVyaW5nKHRoaXMudGVybSl9KTtcbiAgfVxuICBlbmZvcmVzdFVuYXJ5RXhwcmVzc2lvbigpIHtcbiAgICBsZXQgb3BlcmF0b3JfMjAwID0gdGhpcy5tYXRjaFVuYXJ5T3BlcmF0b3IoKTtcbiAgICB0aGlzLm9wQ3R4LnN0YWNrID0gdGhpcy5vcEN0eC5zdGFjay5wdXNoKHtwcmVjOiB0aGlzLm9wQ3R4LnByZWMsIGNvbWJpbmU6IHRoaXMub3BDdHguY29tYmluZX0pO1xuICAgIHRoaXMub3BDdHgucHJlYyA9IDE0O1xuICAgIHRoaXMub3BDdHguY29tYmluZSA9IHJpZ2h0VGVybV8yMDEgPT4ge1xuICAgICAgbGV0IHR5cGVfMjAyLCB0ZXJtXzIwMywgaXNQcmVmaXhfMjA0O1xuICAgICAgaWYgKG9wZXJhdG9yXzIwMC52YWwoKSA9PT0gXCIrK1wiIHx8IG9wZXJhdG9yXzIwMC52YWwoKSA9PT0gXCItLVwiKSB7XG4gICAgICAgIHR5cGVfMjAyID0gXCJVcGRhdGVFeHByZXNzaW9uXCI7XG4gICAgICAgIHRlcm1fMjAzID0gdGhpcy50cmFuc2Zvcm1EZXN0cnVjdHVyaW5nKHJpZ2h0VGVybV8yMDEpO1xuICAgICAgICBpc1ByZWZpeF8yMDQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHlwZV8yMDIgPSBcIlVuYXJ5RXhwcmVzc2lvblwiO1xuICAgICAgICBpc1ByZWZpeF8yMDQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRlcm1fMjAzID0gcmlnaHRUZXJtXzIwMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgVGVybSh0eXBlXzIwMiwge29wZXJhdG9yOiBvcGVyYXRvcl8yMDAudmFsKCksIG9wZXJhbmQ6IHRlcm1fMjAzLCBpc1ByZWZpeDogaXNQcmVmaXhfMjA0fSk7XG4gICAgfTtcbiAgICByZXR1cm4gRVhQUl9MT09QX09QRVJBVE9SXzI2O1xuICB9XG4gIGVuZm9yZXN0Q29uZGl0aW9uYWxFeHByZXNzaW9uKCkge1xuICAgIGxldCB0ZXN0XzIwNSA9IHRoaXMub3BDdHguY29tYmluZSh0aGlzLnRlcm0pO1xuICAgIGlmICh0aGlzLm9wQ3R4LnN0YWNrLnNpemUgPiAwKSB7XG4gICAgICBsZXQge3ByZWMsIGNvbWJpbmV9ID0gdGhpcy5vcEN0eC5zdGFjay5sYXN0KCk7XG4gICAgICB0aGlzLm9wQ3R4LnN0YWNrID0gdGhpcy5vcEN0eC5zdGFjay5wb3AoKTtcbiAgICAgIHRoaXMub3BDdHgucHJlYyA9IHByZWM7XG4gICAgICB0aGlzLm9wQ3R4LmNvbWJpbmUgPSBjb21iaW5lO1xuICAgIH1cbiAgICB0aGlzLm1hdGNoUHVuY3R1YXRvcihcIj9cIik7XG4gICAgbGV0IGVuZl8yMDYgPSBuZXcgRW5mb3Jlc3Rlcih0aGlzLnJlc3QsIExpc3QoKSwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgY29uc2VxdWVudF8yMDcgPSBlbmZfMjA2LmVuZm9yZXN0RXhwcmVzc2lvbkxvb3AoKTtcbiAgICBlbmZfMjA2Lm1hdGNoUHVuY3R1YXRvcihcIjpcIik7XG4gICAgZW5mXzIwNiA9IG5ldyBFbmZvcmVzdGVyKGVuZl8yMDYucmVzdCwgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgIGxldCBhbHRlcm5hdGVfMjA4ID0gZW5mXzIwNi5lbmZvcmVzdEV4cHJlc3Npb25Mb29wKCk7XG4gICAgdGhpcy5yZXN0ID0gZW5mXzIwNi5yZXN0O1xuICAgIHJldHVybiBuZXcgVGVybShcIkNvbmRpdGlvbmFsRXhwcmVzc2lvblwiLCB7dGVzdDogdGVzdF8yMDUsIGNvbnNlcXVlbnQ6IGNvbnNlcXVlbnRfMjA3LCBhbHRlcm5hdGU6IGFsdGVybmF0ZV8yMDh9KTtcbiAgfVxuICBlbmZvcmVzdEJpbmFyeUV4cHJlc3Npb24oKSB7XG4gICAgbGV0IGxlZnRUZXJtXzIwOSA9IHRoaXMudGVybTtcbiAgICBsZXQgb3BTdHhfMjEwID0gdGhpcy5wZWVrKCk7XG4gICAgbGV0IG9wXzIxMSA9IG9wU3R4XzIxMC52YWwoKTtcbiAgICBsZXQgb3BQcmVjXzIxMiA9IGdldE9wZXJhdG9yUHJlYyhvcF8yMTEpO1xuICAgIGxldCBvcEFzc29jXzIxMyA9IGdldE9wZXJhdG9yQXNzb2Mob3BfMjExKTtcbiAgICBpZiAob3BlcmF0b3JMdCh0aGlzLm9wQ3R4LnByZWMsIG9wUHJlY18yMTIsIG9wQXNzb2NfMjEzKSkge1xuICAgICAgdGhpcy5vcEN0eC5zdGFjayA9IHRoaXMub3BDdHguc3RhY2sucHVzaCh7cHJlYzogdGhpcy5vcEN0eC5wcmVjLCBjb21iaW5lOiB0aGlzLm9wQ3R4LmNvbWJpbmV9KTtcbiAgICAgIHRoaXMub3BDdHgucHJlYyA9IG9wUHJlY18yMTI7XG4gICAgICB0aGlzLm9wQ3R4LmNvbWJpbmUgPSByaWdodFRlcm1fMjE0ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiQmluYXJ5RXhwcmVzc2lvblwiLCB7bGVmdDogbGVmdFRlcm1fMjA5LCBvcGVyYXRvcjogb3BTdHhfMjEwLCByaWdodDogcmlnaHRUZXJtXzIxNH0pO1xuICAgICAgfTtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgcmV0dXJuIEVYUFJfTE9PUF9PUEVSQVRPUl8yNjtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHRlcm0gPSB0aGlzLm9wQ3R4LmNvbWJpbmUobGVmdFRlcm1fMjA5KTtcbiAgICAgIGxldCB7cHJlYywgY29tYmluZX0gPSB0aGlzLm9wQ3R4LnN0YWNrLmxhc3QoKTtcbiAgICAgIHRoaXMub3BDdHguc3RhY2sgPSB0aGlzLm9wQ3R4LnN0YWNrLnBvcCgpO1xuICAgICAgdGhpcy5vcEN0eC5wcmVjID0gcHJlYztcbiAgICAgIHRoaXMub3BDdHguY29tYmluZSA9IGNvbWJpbmU7XG4gICAgICByZXR1cm4gdGVybTtcbiAgICB9XG4gIH1cbiAgZW5mb3Jlc3RUZW1wbGF0ZUVsZW1lbnRzKCkge1xuICAgIGxldCBsb29rYWhlYWRfMjE1ID0gdGhpcy5tYXRjaFRlbXBsYXRlKCk7XG4gICAgbGV0IGVsZW1lbnRzXzIxNiA9IGxvb2thaGVhZF8yMTUudG9rZW4uaXRlbXMubWFwKGl0XzIxNyA9PiB7XG4gICAgICBpZiAoaXRfMjE3IGluc3RhbmNlb2YgU3ludGF4ICYmIGl0XzIxNy5pc0RlbGltaXRlcigpKSB7XG4gICAgICAgIGxldCBlbmYgPSBuZXcgRW5mb3Jlc3RlcihpdF8yMTcuaW5uZXIoKSwgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgICAgICByZXR1cm4gZW5mLmVuZm9yZXN0KFwiZXhwcmVzc2lvblwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgVGVybShcIlRlbXBsYXRlRWxlbWVudFwiLCB7cmF3VmFsdWU6IGl0XzIxNy5zbGljZS50ZXh0fSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGVsZW1lbnRzXzIxNjtcbiAgfVxuICBleHBhbmRNYWNybyhlbmZvcmVzdFR5cGVfMjE4KSB7XG4gICAgbGV0IG5hbWVfMjE5ID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgbGV0IHN5bnRheFRyYW5zZm9ybV8yMjAgPSB0aGlzLmdldENvbXBpbGV0aW1lVHJhbnNmb3JtKG5hbWVfMjE5KTtcbiAgICBpZiAoc3ludGF4VHJhbnNmb3JtXzIyMCA9PSBudWxsIHx8IHR5cGVvZiBzeW50YXhUcmFuc2Zvcm1fMjIwLnZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRocm93IHRoaXMuY3JlYXRlRXJyb3IobmFtZV8yMTksIFwidGhlIG1hY3JvIG5hbWUgd2FzIG5vdCBib3VuZCB0byBhIHZhbHVlIHRoYXQgY291bGQgYmUgaW52b2tlZFwiKTtcbiAgICB9XG4gICAgbGV0IHVzZVNpdGVTY29wZV8yMjEgPSBmcmVzaFNjb3BlKFwidVwiKTtcbiAgICBsZXQgaW50cm9kdWNlZFNjb3BlXzIyMiA9IGZyZXNoU2NvcGUoXCJpXCIpO1xuICAgIHRoaXMuY29udGV4dC51c2VTY29wZSA9IHVzZVNpdGVTY29wZV8yMjE7XG4gICAgbGV0IGN0eF8yMjMgPSBuZXcgTWFjcm9Db250ZXh0KHRoaXMsIG5hbWVfMjE5LCB0aGlzLmNvbnRleHQsIHVzZVNpdGVTY29wZV8yMjEsIGludHJvZHVjZWRTY29wZV8yMjIpO1xuICAgIGxldCByZXN1bHRfMjI0ID0gc2FuaXRpemVSZXBsYWNlbWVudFZhbHVlcyhzeW50YXhUcmFuc2Zvcm1fMjIwLnZhbHVlLmNhbGwobnVsbCwgY3R4XzIyMykpO1xuICAgIGlmICghTGlzdC5pc0xpc3QocmVzdWx0XzIyNCkpIHtcbiAgICAgIHRocm93IHRoaXMuY3JlYXRlRXJyb3IobmFtZV8yMTksIFwibWFjcm8gbXVzdCByZXR1cm4gYSBsaXN0IGJ1dCBnb3Q6IFwiICsgcmVzdWx0XzIyNCk7XG4gICAgfVxuICAgIHJlc3VsdF8yMjQgPSByZXN1bHRfMjI0Lm1hcChzdHhfMjI1ID0+IHtcbiAgICAgIGlmICghKHN0eF8yMjUgJiYgdHlwZW9mIHN0eF8yMjUuYWRkU2NvcGUgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcihuYW1lXzIxOSwgXCJtYWNybyBtdXN0IHJldHVybiBzeW50YXggb2JqZWN0cyBvciB0ZXJtcyBidXQgZ290OiBcIiArIHN0eF8yMjUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eF8yMjUuYWRkU2NvcGUoaW50cm9kdWNlZFNjb3BlXzIyMiwgdGhpcy5jb250ZXh0LmJpbmRpbmdzLCB7ZmxpcDogdHJ1ZX0pO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRfMjI0O1xuICB9XG4gIGNvbnN1bWVTZW1pY29sb24oKSB7XG4gICAgbGV0IGxvb2thaGVhZF8yMjYgPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAobG9va2FoZWFkXzIyNiAmJiB0aGlzLmlzUHVuY3R1YXRvcihsb29rYWhlYWRfMjI2LCBcIjtcIikpIHtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgIH1cbiAgfVxuICBjb25zdW1lQ29tbWEoKSB7XG4gICAgbGV0IGxvb2thaGVhZF8yMjcgPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAobG9va2FoZWFkXzIyNyAmJiB0aGlzLmlzUHVuY3R1YXRvcihsb29rYWhlYWRfMjI3LCBcIixcIikpIHtcbiAgICAgIHRoaXMuYWR2YW5jZSgpO1xuICAgIH1cbiAgfVxuICBpc1Rlcm0odGVybV8yMjgpIHtcbiAgICByZXR1cm4gdGVybV8yMjggJiYgdGVybV8yMjggaW5zdGFuY2VvZiBUZXJtO1xuICB9XG4gIGlzRU9GKHRlcm1fMjI5KSB7XG4gICAgcmV0dXJuIHRlcm1fMjI5ICYmIHRlcm1fMjI5IGluc3RhbmNlb2YgU3ludGF4ICYmIHRlcm1fMjI5LmlzRU9GKCk7XG4gIH1cbiAgaXNJZGVudGlmaWVyKHRlcm1fMjMwLCB2YWxfMjMxID0gbnVsbCkge1xuICAgIHJldHVybiB0ZXJtXzIzMCAmJiB0ZXJtXzIzMCBpbnN0YW5jZW9mIFN5bnRheCAmJiB0ZXJtXzIzMC5pc0lkZW50aWZpZXIoKSAmJiAodmFsXzIzMSA9PT0gbnVsbCB8fCB0ZXJtXzIzMC52YWwoKSA9PT0gdmFsXzIzMSk7XG4gIH1cbiAgaXNQcm9wZXJ0eU5hbWUodGVybV8yMzIpIHtcbiAgICByZXR1cm4gdGhpcy5pc0lkZW50aWZpZXIodGVybV8yMzIpIHx8IHRoaXMuaXNLZXl3b3JkKHRlcm1fMjMyKSB8fCB0aGlzLmlzTnVtZXJpY0xpdGVyYWwodGVybV8yMzIpIHx8IHRoaXMuaXNTdHJpbmdMaXRlcmFsKHRlcm1fMjMyKSB8fCB0aGlzLmlzQnJhY2tldHModGVybV8yMzIpO1xuICB9XG4gIGlzTnVtZXJpY0xpdGVyYWwodGVybV8yMzMpIHtcbiAgICByZXR1cm4gdGVybV8yMzMgJiYgdGVybV8yMzMgaW5zdGFuY2VvZiBTeW50YXggJiYgdGVybV8yMzMuaXNOdW1lcmljTGl0ZXJhbCgpO1xuICB9XG4gIGlzU3RyaW5nTGl0ZXJhbCh0ZXJtXzIzNCkge1xuICAgIHJldHVybiB0ZXJtXzIzNCAmJiB0ZXJtXzIzNCBpbnN0YW5jZW9mIFN5bnRheCAmJiB0ZXJtXzIzNC5pc1N0cmluZ0xpdGVyYWwoKTtcbiAgfVxuICBpc1RlbXBsYXRlKHRlcm1fMjM1KSB7XG4gICAgcmV0dXJuIHRlcm1fMjM1ICYmIHRlcm1fMjM1IGluc3RhbmNlb2YgU3ludGF4ICYmIHRlcm1fMjM1LmlzVGVtcGxhdGUoKTtcbiAgfVxuICBpc0Jvb2xlYW5MaXRlcmFsKHRlcm1fMjM2KSB7XG4gICAgcmV0dXJuIHRlcm1fMjM2ICYmIHRlcm1fMjM2IGluc3RhbmNlb2YgU3ludGF4ICYmIHRlcm1fMjM2LmlzQm9vbGVhbkxpdGVyYWwoKTtcbiAgfVxuICBpc051bGxMaXRlcmFsKHRlcm1fMjM3KSB7XG4gICAgcmV0dXJuIHRlcm1fMjM3ICYmIHRlcm1fMjM3IGluc3RhbmNlb2YgU3ludGF4ICYmIHRlcm1fMjM3LmlzTnVsbExpdGVyYWwoKTtcbiAgfVxuICBpc1JlZ3VsYXJFeHByZXNzaW9uKHRlcm1fMjM4KSB7XG4gICAgcmV0dXJuIHRlcm1fMjM4ICYmIHRlcm1fMjM4IGluc3RhbmNlb2YgU3ludGF4ICYmIHRlcm1fMjM4LmlzUmVndWxhckV4cHJlc3Npb24oKTtcbiAgfVxuICBpc1BhcmVucyh0ZXJtXzIzOSkge1xuICAgIHJldHVybiB0ZXJtXzIzOSAmJiB0ZXJtXzIzOSBpbnN0YW5jZW9mIFN5bnRheCAmJiB0ZXJtXzIzOS5pc1BhcmVucygpO1xuICB9XG4gIGlzQnJhY2VzKHRlcm1fMjQwKSB7XG4gICAgcmV0dXJuIHRlcm1fMjQwICYmIHRlcm1fMjQwIGluc3RhbmNlb2YgU3ludGF4ICYmIHRlcm1fMjQwLmlzQnJhY2VzKCk7XG4gIH1cbiAgaXNCcmFja2V0cyh0ZXJtXzI0MSkge1xuICAgIHJldHVybiB0ZXJtXzI0MSAmJiB0ZXJtXzI0MSBpbnN0YW5jZW9mIFN5bnRheCAmJiB0ZXJtXzI0MS5pc0JyYWNrZXRzKCk7XG4gIH1cbiAgaXNBc3NpZ24odGVybV8yNDIpIHtcbiAgICBpZiAodGhpcy5pc1B1bmN0dWF0b3IodGVybV8yNDIpKSB7XG4gICAgICBzd2l0Y2ggKHRlcm1fMjQyLnZhbCgpKSB7XG4gICAgICAgIGNhc2UgXCI9XCI6XG4gICAgICAgIGNhc2UgXCJ8PVwiOlxuICAgICAgICBjYXNlIFwiXj1cIjpcbiAgICAgICAgY2FzZSBcIiY9XCI6XG4gICAgICAgIGNhc2UgXCI8PD1cIjpcbiAgICAgICAgY2FzZSBcIj4+PVwiOlxuICAgICAgICBjYXNlIFwiPj4+PVwiOlxuICAgICAgICBjYXNlIFwiKz1cIjpcbiAgICAgICAgY2FzZSBcIi09XCI6XG4gICAgICAgIGNhc2UgXCIqPVwiOlxuICAgICAgICBjYXNlIFwiLz1cIjpcbiAgICAgICAgY2FzZSBcIiU9XCI6XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaXNLZXl3b3JkKHRlcm1fMjQzLCB2YWxfMjQ0ID0gbnVsbCkge1xuICAgIHJldHVybiB0ZXJtXzI0MyAmJiB0ZXJtXzI0MyBpbnN0YW5jZW9mIFN5bnRheCAmJiB0ZXJtXzI0My5pc0tleXdvcmQoKSAmJiAodmFsXzI0NCA9PT0gbnVsbCB8fCB0ZXJtXzI0My52YWwoKSA9PT0gdmFsXzI0NCk7XG4gIH1cbiAgaXNQdW5jdHVhdG9yKHRlcm1fMjQ1LCB2YWxfMjQ2ID0gbnVsbCkge1xuICAgIHJldHVybiB0ZXJtXzI0NSAmJiB0ZXJtXzI0NSBpbnN0YW5jZW9mIFN5bnRheCAmJiB0ZXJtXzI0NS5pc1B1bmN0dWF0b3IoKSAmJiAodmFsXzI0NiA9PT0gbnVsbCB8fCB0ZXJtXzI0NS52YWwoKSA9PT0gdmFsXzI0Nik7XG4gIH1cbiAgaXNPcGVyYXRvcih0ZXJtXzI0Nykge1xuICAgIHJldHVybiB0ZXJtXzI0NyAmJiB0ZXJtXzI0NyBpbnN0YW5jZW9mIFN5bnRheCAmJiBpc09wZXJhdG9yKHRlcm1fMjQ3KTtcbiAgfVxuICBpc1VwZGF0ZU9wZXJhdG9yKHRlcm1fMjQ4KSB7XG4gICAgcmV0dXJuIHRlcm1fMjQ4ICYmIHRlcm1fMjQ4IGluc3RhbmNlb2YgU3ludGF4ICYmIHRlcm1fMjQ4LmlzUHVuY3R1YXRvcigpICYmICh0ZXJtXzI0OC52YWwoKSA9PT0gXCIrK1wiIHx8IHRlcm1fMjQ4LnZhbCgpID09PSBcIi0tXCIpO1xuICB9XG4gIGlzRm5EZWNsVHJhbnNmb3JtKHRlcm1fMjQ5KSB7XG4gICAgcmV0dXJuIHRlcm1fMjQ5ICYmIHRlcm1fMjQ5IGluc3RhbmNlb2YgU3ludGF4ICYmIHRoaXMuY29udGV4dC5lbnYuZ2V0KHRlcm1fMjQ5LnJlc29sdmUoKSkgPT09IEZ1bmN0aW9uRGVjbFRyYW5zZm9ybTtcbiAgfVxuICBpc1ZhckRlY2xUcmFuc2Zvcm0odGVybV8yNTApIHtcbiAgICByZXR1cm4gdGVybV8yNTAgJiYgdGVybV8yNTAgaW5zdGFuY2VvZiBTeW50YXggJiYgdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV8yNTAucmVzb2x2ZSgpKSA9PT0gVmFyaWFibGVEZWNsVHJhbnNmb3JtO1xuICB9XG4gIGlzTGV0RGVjbFRyYW5zZm9ybSh0ZXJtXzI1MSkge1xuICAgIHJldHVybiB0ZXJtXzI1MSAmJiB0ZXJtXzI1MSBpbnN0YW5jZW9mIFN5bnRheCAmJiB0aGlzLmNvbnRleHQuZW52LmdldCh0ZXJtXzI1MS5yZXNvbHZlKCkpID09PSBMZXREZWNsVHJhbnNmb3JtO1xuICB9XG4gIGlzQ29uc3REZWNsVHJhbnNmb3JtKHRlcm1fMjUyKSB7XG4gICAgcmV0dXJuIHRlcm1fMjUyICYmIHRlcm1fMjUyIGluc3RhbmNlb2YgU3ludGF4ICYmIHRoaXMuY29udGV4dC5lbnYuZ2V0KHRlcm1fMjUyLnJlc29sdmUoKSkgPT09IENvbnN0RGVjbFRyYW5zZm9ybTtcbiAgfVxuICBpc1N5bnRheERlY2xUcmFuc2Zvcm0odGVybV8yNTMpIHtcbiAgICByZXR1cm4gdGVybV8yNTMgJiYgdGVybV8yNTMgaW5zdGFuY2VvZiBTeW50YXggJiYgdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV8yNTMucmVzb2x2ZSgpKSA9PT0gU3ludGF4RGVjbFRyYW5zZm9ybTtcbiAgfVxuICBpc1N5bnRheHJlY0RlY2xUcmFuc2Zvcm0odGVybV8yNTQpIHtcbiAgICByZXR1cm4gdGVybV8yNTQgJiYgdGVybV8yNTQgaW5zdGFuY2VvZiBTeW50YXggJiYgdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV8yNTQucmVzb2x2ZSgpKSA9PT0gU3ludGF4cmVjRGVjbFRyYW5zZm9ybTtcbiAgfVxuICBpc1N5bnRheFRlbXBsYXRlKHRlcm1fMjU1KSB7XG4gICAgcmV0dXJuIHRlcm1fMjU1ICYmIHRlcm1fMjU1IGluc3RhbmNlb2YgU3ludGF4ICYmIHRlcm1fMjU1LmlzU3ludGF4VGVtcGxhdGUoKTtcbiAgfVxuICBpc1N5bnRheFF1b3RlVHJhbnNmb3JtKHRlcm1fMjU2KSB7XG4gICAgcmV0dXJuIHRlcm1fMjU2ICYmIHRlcm1fMjU2IGluc3RhbmNlb2YgU3ludGF4ICYmIHRoaXMuY29udGV4dC5lbnYuZ2V0KHRlcm1fMjU2LnJlc29sdmUoKSkgPT09IFN5bnRheFF1b3RlVHJhbnNmb3JtO1xuICB9XG4gIGlzUmV0dXJuU3RtdFRyYW5zZm9ybSh0ZXJtXzI1Nykge1xuICAgIHJldHVybiB0ZXJtXzI1NyAmJiB0ZXJtXzI1NyBpbnN0YW5jZW9mIFN5bnRheCAmJiB0aGlzLmNvbnRleHQuZW52LmdldCh0ZXJtXzI1Ny5yZXNvbHZlKCkpID09PSBSZXR1cm5TdGF0ZW1lbnRUcmFuc2Zvcm07XG4gIH1cbiAgaXNXaGlsZVRyYW5zZm9ybSh0ZXJtXzI1OCkge1xuICAgIHJldHVybiB0ZXJtXzI1OCAmJiB0ZXJtXzI1OCBpbnN0YW5jZW9mIFN5bnRheCAmJiB0aGlzLmNvbnRleHQuZW52LmdldCh0ZXJtXzI1OC5yZXNvbHZlKCkpID09PSBXaGlsZVRyYW5zZm9ybTtcbiAgfVxuICBpc0ZvclRyYW5zZm9ybSh0ZXJtXzI1OSkge1xuICAgIHJldHVybiB0ZXJtXzI1OSAmJiB0ZXJtXzI1OSBpbnN0YW5jZW9mIFN5bnRheCAmJiB0aGlzLmNvbnRleHQuZW52LmdldCh0ZXJtXzI1OS5yZXNvbHZlKCkpID09PSBGb3JUcmFuc2Zvcm07XG4gIH1cbiAgaXNTd2l0Y2hUcmFuc2Zvcm0odGVybV8yNjApIHtcbiAgICByZXR1cm4gdGVybV8yNjAgJiYgdGVybV8yNjAgaW5zdGFuY2VvZiBTeW50YXggJiYgdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV8yNjAucmVzb2x2ZSgpKSA9PT0gU3dpdGNoVHJhbnNmb3JtO1xuICB9XG4gIGlzQnJlYWtUcmFuc2Zvcm0odGVybV8yNjEpIHtcbiAgICByZXR1cm4gdGVybV8yNjEgJiYgdGVybV8yNjEgaW5zdGFuY2VvZiBTeW50YXggJiYgdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV8yNjEucmVzb2x2ZSgpKSA9PT0gQnJlYWtUcmFuc2Zvcm07XG4gIH1cbiAgaXNDb250aW51ZVRyYW5zZm9ybSh0ZXJtXzI2Mikge1xuICAgIHJldHVybiB0ZXJtXzI2MiAmJiB0ZXJtXzI2MiBpbnN0YW5jZW9mIFN5bnRheCAmJiB0aGlzLmNvbnRleHQuZW52LmdldCh0ZXJtXzI2Mi5yZXNvbHZlKCkpID09PSBDb250aW51ZVRyYW5zZm9ybTtcbiAgfVxuICBpc0RvVHJhbnNmb3JtKHRlcm1fMjYzKSB7XG4gICAgcmV0dXJuIHRlcm1fMjYzICYmIHRlcm1fMjYzIGluc3RhbmNlb2YgU3ludGF4ICYmIHRoaXMuY29udGV4dC5lbnYuZ2V0KHRlcm1fMjYzLnJlc29sdmUoKSkgPT09IERvVHJhbnNmb3JtO1xuICB9XG4gIGlzRGVidWdnZXJUcmFuc2Zvcm0odGVybV8yNjQpIHtcbiAgICByZXR1cm4gdGVybV8yNjQgJiYgdGVybV8yNjQgaW5zdGFuY2VvZiBTeW50YXggJiYgdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV8yNjQucmVzb2x2ZSgpKSA9PT0gRGVidWdnZXJUcmFuc2Zvcm07XG4gIH1cbiAgaXNXaXRoVHJhbnNmb3JtKHRlcm1fMjY1KSB7XG4gICAgcmV0dXJuIHRlcm1fMjY1ICYmIHRlcm1fMjY1IGluc3RhbmNlb2YgU3ludGF4ICYmIHRoaXMuY29udGV4dC5lbnYuZ2V0KHRlcm1fMjY1LnJlc29sdmUoKSkgPT09IFdpdGhUcmFuc2Zvcm07XG4gIH1cbiAgaXNUcnlUcmFuc2Zvcm0odGVybV8yNjYpIHtcbiAgICByZXR1cm4gdGVybV8yNjYgJiYgdGVybV8yNjYgaW5zdGFuY2VvZiBTeW50YXggJiYgdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV8yNjYucmVzb2x2ZSgpKSA9PT0gVHJ5VHJhbnNmb3JtO1xuICB9XG4gIGlzVGhyb3dUcmFuc2Zvcm0odGVybV8yNjcpIHtcbiAgICByZXR1cm4gdGVybV8yNjcgJiYgdGVybV8yNjcgaW5zdGFuY2VvZiBTeW50YXggJiYgdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV8yNjcucmVzb2x2ZSgpKSA9PT0gVGhyb3dUcmFuc2Zvcm07XG4gIH1cbiAgaXNJZlRyYW5zZm9ybSh0ZXJtXzI2OCkge1xuICAgIHJldHVybiB0ZXJtXzI2OCAmJiB0ZXJtXzI2OCBpbnN0YW5jZW9mIFN5bnRheCAmJiB0aGlzLmNvbnRleHQuZW52LmdldCh0ZXJtXzI2OC5yZXNvbHZlKCkpID09PSBJZlRyYW5zZm9ybTtcbiAgfVxuICBpc05ld1RyYW5zZm9ybSh0ZXJtXzI2OSkge1xuICAgIHJldHVybiB0ZXJtXzI2OSAmJiB0ZXJtXzI2OSBpbnN0YW5jZW9mIFN5bnRheCAmJiB0aGlzLmNvbnRleHQuZW52LmdldCh0ZXJtXzI2OS5yZXNvbHZlKCkpID09PSBOZXdUcmFuc2Zvcm07XG4gIH1cbiAgaXNDb21waWxldGltZVRyYW5zZm9ybSh0ZXJtXzI3MCkge1xuICAgIHJldHVybiB0ZXJtXzI3MCAmJiB0ZXJtXzI3MCBpbnN0YW5jZW9mIFN5bnRheCAmJiAodGhpcy5jb250ZXh0LmVudi5nZXQodGVybV8yNzAucmVzb2x2ZSgpKSBpbnN0YW5jZW9mIENvbXBpbGV0aW1lVHJhbnNmb3JtIHx8IHRoaXMuY29udGV4dC5zdG9yZS5nZXQodGVybV8yNzAucmVzb2x2ZSgpKSBpbnN0YW5jZW9mIENvbXBpbGV0aW1lVHJhbnNmb3JtKTtcbiAgfVxuICBnZXRDb21waWxldGltZVRyYW5zZm9ybSh0ZXJtXzI3MSkge1xuICAgIGlmICh0aGlzLmNvbnRleHQuZW52Lmhhcyh0ZXJtXzI3MS5yZXNvbHZlKCkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV8yNzEucmVzb2x2ZSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC5zdG9yZS5nZXQodGVybV8yNzEucmVzb2x2ZSgpKTtcbiAgfVxuICBsaW5lTnVtYmVyRXEoYV8yNzIsIGJfMjczKSB7XG4gICAgaWYgKCEoYV8yNzIgJiYgYl8yNzMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBhXzI3Mi5saW5lTnVtYmVyKCkgPT09IGJfMjczLmxpbmVOdW1iZXIoKTtcbiAgfVxuICBtYXRjaElkZW50aWZpZXIodmFsXzI3NCkge1xuICAgIGxldCBsb29rYWhlYWRfMjc1ID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgaWYgKHRoaXMuaXNJZGVudGlmaWVyKGxvb2thaGVhZF8yNzUpKSB7XG4gICAgICByZXR1cm4gbG9va2FoZWFkXzI3NTtcbiAgICB9XG4gICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcihsb29rYWhlYWRfMjc1LCBcImV4cGVjdGluZyBhbiBpZGVudGlmaWVyXCIpO1xuICB9XG4gIG1hdGNoS2V5d29yZCh2YWxfMjc2KSB7XG4gICAgbGV0IGxvb2thaGVhZF8yNzcgPSB0aGlzLmFkdmFuY2UoKTtcbiAgICBpZiAodGhpcy5pc0tleXdvcmQobG9va2FoZWFkXzI3NywgdmFsXzI3NikpIHtcbiAgICAgIHJldHVybiBsb29rYWhlYWRfMjc3O1xuICAgIH1cbiAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKGxvb2thaGVhZF8yNzcsIFwiZXhwZWN0aW5nIFwiICsgdmFsXzI3Nik7XG4gIH1cbiAgbWF0Y2hMaXRlcmFsKCkge1xuICAgIGxldCBsb29rYWhlYWRfMjc4ID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgaWYgKHRoaXMuaXNOdW1lcmljTGl0ZXJhbChsb29rYWhlYWRfMjc4KSB8fCB0aGlzLmlzU3RyaW5nTGl0ZXJhbChsb29rYWhlYWRfMjc4KSB8fCB0aGlzLmlzQm9vbGVhbkxpdGVyYWwobG9va2FoZWFkXzI3OCkgfHwgdGhpcy5pc051bGxMaXRlcmFsKGxvb2thaGVhZF8yNzgpIHx8IHRoaXMuaXNUZW1wbGF0ZShsb29rYWhlYWRfMjc4KSB8fCB0aGlzLmlzUmVndWxhckV4cHJlc3Npb24obG9va2FoZWFkXzI3OCkpIHtcbiAgICAgIHJldHVybiBsb29rYWhlYWRfMjc4O1xuICAgIH1cbiAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKGxvb2thaGVhZF8yNzgsIFwiZXhwZWN0aW5nIGEgbGl0ZXJhbFwiKTtcbiAgfVxuICBtYXRjaFN0cmluZ0xpdGVyYWwoKSB7XG4gICAgbGV0IGxvb2thaGVhZF8yNzkgPSB0aGlzLmFkdmFuY2UoKTtcbiAgICBpZiAodGhpcy5pc1N0cmluZ0xpdGVyYWwobG9va2FoZWFkXzI3OSkpIHtcbiAgICAgIHJldHVybiBsb29rYWhlYWRfMjc5O1xuICAgIH1cbiAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKGxvb2thaGVhZF8yNzksIFwiZXhwZWN0aW5nIGEgc3RyaW5nIGxpdGVyYWxcIik7XG4gIH1cbiAgbWF0Y2hUZW1wbGF0ZSgpIHtcbiAgICBsZXQgbG9va2FoZWFkXzI4MCA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIGlmICh0aGlzLmlzVGVtcGxhdGUobG9va2FoZWFkXzI4MCkpIHtcbiAgICAgIHJldHVybiBsb29rYWhlYWRfMjgwO1xuICAgIH1cbiAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKGxvb2thaGVhZF8yODAsIFwiZXhwZWN0aW5nIGEgdGVtcGxhdGUgbGl0ZXJhbFwiKTtcbiAgfVxuICBtYXRjaFBhcmVucygpIHtcbiAgICBsZXQgbG9va2FoZWFkXzI4MSA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIGlmICh0aGlzLmlzUGFyZW5zKGxvb2thaGVhZF8yODEpKSB7XG4gICAgICByZXR1cm4gbG9va2FoZWFkXzI4MS5pbm5lcigpO1xuICAgIH1cbiAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKGxvb2thaGVhZF8yODEsIFwiZXhwZWN0aW5nIHBhcmVuc1wiKTtcbiAgfVxuICBtYXRjaEN1cmxpZXMoKSB7XG4gICAgbGV0IGxvb2thaGVhZF8yODIgPSB0aGlzLmFkdmFuY2UoKTtcbiAgICBpZiAodGhpcy5pc0JyYWNlcyhsb29rYWhlYWRfMjgyKSkge1xuICAgICAgcmV0dXJuIGxvb2thaGVhZF8yODIuaW5uZXIoKTtcbiAgICB9XG4gICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcihsb29rYWhlYWRfMjgyLCBcImV4cGVjdGluZyBjdXJseSBicmFjZXNcIik7XG4gIH1cbiAgbWF0Y2hTcXVhcmVzKCkge1xuICAgIGxldCBsb29rYWhlYWRfMjgzID0gdGhpcy5hZHZhbmNlKCk7XG4gICAgaWYgKHRoaXMuaXNCcmFja2V0cyhsb29rYWhlYWRfMjgzKSkge1xuICAgICAgcmV0dXJuIGxvb2thaGVhZF8yODMuaW5uZXIoKTtcbiAgICB9XG4gICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcihsb29rYWhlYWRfMjgzLCBcImV4cGVjdGluZyBzcWF1cmUgYnJhY2VzXCIpO1xuICB9XG4gIG1hdGNoVW5hcnlPcGVyYXRvcigpIHtcbiAgICBsZXQgbG9va2FoZWFkXzI4NCA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIGlmIChpc1VuYXJ5T3BlcmF0b3IobG9va2FoZWFkXzI4NCkpIHtcbiAgICAgIHJldHVybiBsb29rYWhlYWRfMjg0O1xuICAgIH1cbiAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKGxvb2thaGVhZF8yODQsIFwiZXhwZWN0aW5nIGEgdW5hcnkgb3BlcmF0b3JcIik7XG4gIH1cbiAgbWF0Y2hQdW5jdHVhdG9yKHZhbF8yODUpIHtcbiAgICBsZXQgbG9va2FoZWFkXzI4NiA9IHRoaXMuYWR2YW5jZSgpO1xuICAgIGlmICh0aGlzLmlzUHVuY3R1YXRvcihsb29rYWhlYWRfMjg2KSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWxfMjg1ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmIChsb29rYWhlYWRfMjg2LnZhbCgpID09PSB2YWxfMjg1KSB7XG4gICAgICAgICAgcmV0dXJuIGxvb2thaGVhZF8yODY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcihsb29rYWhlYWRfMjg2LCBcImV4cGVjdGluZyBhIFwiICsgdmFsXzI4NSArIFwiIHB1bmN0dWF0b3JcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsb29rYWhlYWRfMjg2O1xuICAgIH1cbiAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKGxvb2thaGVhZF8yODYsIFwiZXhwZWN0aW5nIGEgcHVuY3R1YXRvclwiKTtcbiAgfVxuICBjcmVhdGVFcnJvcihzdHhfMjg3LCBtZXNzYWdlXzI4OCkge1xuICAgIGxldCBjdHhfMjg5ID0gXCJcIjtcbiAgICBsZXQgb2ZmZW5kaW5nXzI5MCA9IHN0eF8yODc7XG4gICAgaWYgKHRoaXMucmVzdC5zaXplID4gMCkge1xuICAgICAgY3R4XzI4OSA9IHRoaXMucmVzdC5zbGljZSgwLCAyMCkubWFwKHRlcm1fMjkxID0+IHtcbiAgICAgICAgaWYgKHRlcm1fMjkxLmlzRGVsaW1pdGVyKCkpIHtcbiAgICAgICAgICByZXR1cm4gdGVybV8yOTEuaW5uZXIoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTGlzdC5vZih0ZXJtXzI5MSk7XG4gICAgICB9KS5mbGF0dGVuKCkubWFwKHNfMjkyID0+IHtcbiAgICAgICAgaWYgKHNfMjkyID09PSBvZmZlbmRpbmdfMjkwKSB7XG4gICAgICAgICAgcmV0dXJuIFwiX19cIiArIHNfMjkyLnZhbCgpICsgXCJfX1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzXzI5Mi52YWwoKTtcbiAgICAgIH0pLmpvaW4oXCIgXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdHhfMjg5ID0gb2ZmZW5kaW5nXzI5MC50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEVycm9yKG1lc3NhZ2VfMjg4ICsgXCJcXG5cIiArIGN0eF8yODkpO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/serializer.js b/dist/serializer.js index 1f227d36..5f308a8c 100644 --- a/dist/serializer.js +++ b/dist/serializer.js @@ -61,6 +61,9 @@ function makeReader_474(bindings_478) { var _token = _transitJs2.default.mapToObject(rep_487[0]); _token.type = typeMap_469[rep_487[0].get("type")]; _token.slice = rep_487[0].has("slice") ? _transitJs2.default.mapToObject(rep_487[0].get("slice")) : undefined; + if (_token.slice) { + _token.slice.startLocation = _transitJs2.default.mapToObject(_token.slice.startLocation); + } return new _syntax2.default(_token, { bindings: bindings_478, scopeset: rep_487[1] }); } }, symb: function symb(rep_488) { @@ -69,4 +72,4 @@ function makeReader_474(bindings_478) { } exports.makeDeserializer = makeReader_474; exports.serializer = writer_473; -//# sourceMappingURL=data:application/json;base64,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R0FBeUUsU0FBdkY7QUFDQSxpQkFBTyxxQkFBVyxNQUFYLEVBQWtCLEVBQUMsVUFBVSxZQUFYLEVBQXlCLFVBQVUsUUFBUSxDQUFSLENBQW5DLEVBQWxCLENBQVA7QUFDRDtBQUNGLE9BVm1RLEVBVWpRLE1BQU0sdUJBQVc7QUFDbEIsZUFBTyxvQkFBTyxRQUFRLENBQVIsQ0FBUCxDQUFQO0FBQ0QsT0FabVEsRUFBdE8sRUFBdkIsQ0FBUDtBQWFEO1FBQ3lCLGdCLEdBQWxCLGM7UUFBa0QsVSxHQUFkLFUiLCJmaWxlIjoic2VyaWFsaXplci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0cmFuc2l0IGZyb20gXCJ0cmFuc2l0LWpzXCI7XG5pbXBvcnQge0xpc3R9IGZyb20gXCJpbW11dGFibGVcIjtcbmltcG9ydCBTeW50YXggZnJvbSBcIi4vc3ludGF4XCI7XG5pbXBvcnQge1N5bWJvbCwgZ2Vuc3ltLCBTeW1ib2xDbGFzc30gZnJvbSBcIi4vc3ltYm9sXCI7XG5pbXBvcnQge1Rva2VuQ2xhc3MsIFRva2VuVHlwZX0gZnJvbSBcInNoaWZ0LXBhcnNlci9kaXN0L3Rva2VuaXplclwiO1xubGV0IHR5cGVNYXBfNDY5ID0gW1Rva2VuVHlwZS5TVFJJTkcsIFRva2VuVHlwZS5FT1MsIFRva2VuVHlwZS5MUEFSRU4sIFRva2VuVHlwZS5SUEFSRU4sIFRva2VuVHlwZS5MQlJBQ0ssIFRva2VuVHlwZS5SQlJBQ0ssIFRva2VuVHlwZS5MQlJBQ0UsIFRva2VuVHlwZS5SQlJBQ0UsIFRva2VuVHlwZS5DT0xPTiwgVG9rZW5UeXBlLlNFTUlDT0xPTiwgVG9rZW5UeXBlLlBFUklPRCwgVG9rZW5UeXBlLkVMTElQU0lTLCBUb2tlblR5cGUuQVJST1csIFRva2VuVHlwZS5DT05ESVRJT05BTCwgVG9rZW5UeXBlLklOQywgVG9rZW5UeXBlLkRFQywgVG9rZW5UeXBlLkFTU0lHTiwgVG9rZW5UeXBlLkFTU0lHTl9CSVRfT1IsIFRva2VuVHlwZS5BU1NJR05fQklUX1hPUiwgVG9rZW5UeXBlLkFTU0lHTl9CSVRfQU5ELCBUb2tlblR5cGUuQVNTSUdOX1NITCwgVG9rZW5UeXBlLkFTU0lHTl9TSFIsIFRva2VuVHlwZS5BU1NJR05fU0hSX1VOU0lHTkVELCBUb2tlblR5cGUuQVNTSUdOX0FERCwgVG9rZW5UeXBlLkFTU0lHTl9TVUIsIFRva2VuVHlwZS5BU1NJR05fTVVMLCBUb2tlblR5cGUuQVNTSUdOX0RJViwgVG9rZW5UeXBlLkFTU0lHTl9NT0QsIFRva2VuVHlwZS5DT01NQSwgVG9rZW5UeXBlLk9SLCBUb2tlblR5cGUuQU5ELCBUb2tlblR5cGUuQklUX09SLCBUb2tlblR5cGUuQklUX1hPUiwgVG9rZW5UeXBlLkJJVF9BTkQsIFRva2VuVHlwZS5TSEwsIFRva2VuVHlwZS5TSFIsIFRva2VuVHlwZS5TSFJfVU5TSUdORUQsIFRva2VuVHlwZS5BREQsIFRva2VuVHlwZS5TVUIsIFRva2VuVHlwZS5NVUwsIFRva2VuVHlwZS5ESVYsIFRva2VuVHlwZS5NT0QsIFRva2VuVHlwZS5FUSwgVG9rZW5UeXBlLk5FLCBUb2tlblR5cGUuRVFfU1RSSUNULCBUb2tlblR5cGUuTkVfU1RSSUNULCBUb2tlblR5cGUuTFQsIFRva2VuVHlwZS5HVCwgVG9rZW5UeXBlLkxURSwgVG9rZW5UeXBlLkdURSwgVG9rZW5UeXBlLklOU1RBTkNFT0YsIFRva2VuVHlwZS5JTiwgVG9rZW5UeXBlLk5PVCwgVG9rZW5UeXBlLkJJVF9OT1QsIFRva2VuVHlwZS5BV0FJVCwgVG9rZW5UeXBlLkRFTEVURSwgVG9rZW5UeXBlLlRZUEVPRiwgVG9rZW5UeXBlLlZPSUQsIFRva2VuVHlwZS5CUkVBSywgVG9rZW5UeXBlLkNBU0UsIFRva2VuVHlwZS5DQVRDSCwgVG9rZW5UeXBlLkNMQVNTLCBUb2tlblR5cGUuQ09OVElOVUUsIFRva2VuVHlwZS5ERUJVR0dFUiwgVG9rZW5UeXBlLkRFRkFVTFQsIFRva2VuVHlwZS5ETywgVG9rZW5UeXBlLkVMU0UsIFRva2VuVHlwZS5FWFBPUlQsIFRva2VuVHlwZS5FWFRFTkRTLCBUb2tlblR5cGUuRklOQUxMWSwgVG9rZW5UeXBlLkZPUiwgVG9rZW5UeXBlLkZVTkNUSU9OLCBUb2tlblR5cGUuSUYsIFRva2VuVHlwZS5JTVBPUlQsIFRva2VuVHlwZS5MRVQsIFRva2VuVHlwZS5ORVcsIFRva2VuVHlwZS5SRVRVUk4sIFRva2VuVHlwZS5TVVBFUiwgVG9rZW5UeXBlLlNXSVRDSCwgVG9rZW5UeXBlLlRISVMsIFRva2VuVHlwZS5USFJPVywgVG9rZW5UeXBlLlRSWSwgVG9rZW5UeXBlLlZBUiwgVG9rZW5UeXBlLldISUxFLCBUb2tlblR5cGUuV0lUSCwgVG9rZW5UeXBlLk5VTEwsIFRva2VuVHlwZS5UUlVFLCBUb2tlblR5cGUuRkFMU0UsIFRva2VuVHlwZS5ZSUVMRCwgVG9rZW5UeXBlLk5VTUJFUiwgVG9rZW5UeXBlLlNUUklORywgVG9rZW5UeXBlLlJFR0VYUCwgVG9rZW5UeXBlLklERU5USUZJRVIsIFRva2VuVHlwZS5DT05TVCwgVG9rZW5UeXBlLlRFTVBMQVRFLCBUb2tlblR5cGUuSUxMRUdBTF07XG5sZXQgTGlzdEhhbmRsZXJfNDcwID0gdHJhbnNpdC5tYWtlV3JpdGVIYW5kbGVyKHt0YWc6ICgpID0+IFwiYXJyYXlcIiwgcmVwOiB2XzQ3NSA9PiB2XzQ3NX0pO1xubGV0IFN5bnRheEhhbmRsZXJfNDcxID0gdHJhbnNpdC5tYWtlV3JpdGVIYW5kbGVyKHt0YWc6ICgpID0+IFwic3R4XCIsIHJlcDogdl80NzYgPT4ge1xuICBpZiAoTGlzdC5pc0xpc3Qodl80NzYudG9rZW4pKSB7XG4gICAgcmV0dXJuIFt2XzQ3Ni50b2tlbiwgdl80NzYuY29udGV4dC5zY29wZXNldF07XG4gIH0gZWxzZSB7XG4gICAgbGV0IHQgPSB0cmFuc2l0Lm9iamVjdFRvTWFwKHZfNDc2LnRva2VuKTtcbiAgICB0LnNldChcInR5cGVcIiwgdHlwZU1hcF80NjkuaW5kZXhPZih2XzQ3Ni50b2tlbi50eXBlKSk7XG4gICAgcmV0dXJuIFt0LCB2XzQ3Ni5jb250ZXh0LnNjb3Blc2V0XTtcbiAgfVxufX0pO1xubGV0IFN5bWJvbEhhbmRsZXJfNDcyID0gdHJhbnNpdC5tYWtlV3JpdGVIYW5kbGVyKHt0YWc6ICgpID0+IFwic3ltYlwiLCByZXA6IHZfNDc3ID0+IFt2XzQ3Ny5uYW1lXX0pO1xubGV0IHdyaXRlcl80NzMgPSB0cmFuc2l0LndyaXRlcihcImpzb25cIiwge2hhbmRsZXJzOiB0cmFuc2l0Lm1hcChbTGlzdCwgTGlzdEhhbmRsZXJfNDcwLCBTeW50YXgsIFN5bnRheEhhbmRsZXJfNDcxLCBTeW1ib2xDbGFzcywgU3ltYm9sSGFuZGxlcl80NzJdKX0pO1xuZnVuY3Rpb24gbWFrZVJlYWRlcl80NzQoYmluZGluZ3NfNDc4KSB7XG4gIHJldHVybiB0cmFuc2l0LnJlYWRlcihcImpzb25cIiwge2FycmF5QnVpbGRlcjoge2luaXQ6IG5vZGVfNDc5ID0+IExpc3QoKS5hc011dGFibGUoKSwgYWRkOiAocmV0XzQ4MCwgdmFsXzQ4MSwgbm9kZV80ODIpID0+IHJldF80ODAucHVzaCh2YWxfNDgxKSwgZmluYWxpemU6IChyZXRfNDgzLCBub2RlXzQ4NCkgPT4gcmV0XzQ4My5hc0ltbXV0YWJsZSgpLCBmcm9tQXJyYXk6IChhcnJfNDg1LCBub2RlXzQ4NikgPT4gTGlzdChhcnJfNDg1KX0sIGhhbmRsZXJzOiB7c3R4OiByZXBfNDg3ID0+IHtcbiAgICBpZiAoTGlzdC5pc0xpc3QocmVwXzQ4N1swXSkpIHtcbiAgICAgIGxldCB0b2tlbiA9IHJlcF80ODdbMF07XG4gICAgICByZXR1cm4gbmV3IFN5bnRheCh0b2tlbiwge2JpbmRpbmdzOiBiaW5kaW5nc180NzgsIHNjb3Blc2V0OiByZXBfNDg3WzFdfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB0b2tlbiA9IHRyYW5zaXQubWFwVG9PYmplY3QocmVwXzQ4N1swXSk7XG4gICAgICB0b2tlbi50eXBlID0gdHlwZU1hcF80NjlbcmVwXzQ4N1swXS5nZXQoXCJ0eXBlXCIpXTtcbiAgICAgIHRva2VuLnNsaWNlID0gcmVwXzQ4N1swXS5oYXMoXCJzbGljZVwiKSA/IHRyYW5zaXQubWFwVG9PYmplY3QocmVwXzQ4N1swXS5nZXQoXCJzbGljZVwiKSkgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gbmV3IFN5bnRheCh0b2tlbiwge2JpbmRpbmdzOiBiaW5kaW5nc180NzgsIHNjb3Blc2V0OiByZXBfNDg3WzFdfSk7XG4gICAgfVxuICB9LCBzeW1iOiByZXBfNDg4ID0+IHtcbiAgICByZXR1cm4gU3ltYm9sKHJlcF80ODhbMF0pO1xuICB9fX0pO1xufVxuZXhwb3J0IHttYWtlUmVhZGVyXzQ3NCBhcyBtYWtlRGVzZXJpYWxpemVyLCB3cml0ZXJfNDczIGFzIHNlcmlhbGl6ZXJ9O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,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R0FBeUUsU0FBdkY7QUFDQSxjQUFJLE9BQU0sS0FBVixFQUFpQjtBQUNmLG1CQUFNLEtBQU4sQ0FBWSxhQUFaLEdBQTRCLG9CQUFRLFdBQVIsQ0FBb0IsT0FBTSxLQUFOLENBQVksYUFBaEMsQ0FBNUI7QUFDRDtBQUNELGlCQUFPLHFCQUFXLE1BQVgsRUFBa0IsRUFBQyxVQUFVLFlBQVgsRUFBeUIsVUFBVSxRQUFRLENBQVIsQ0FBbkMsRUFBbEIsQ0FBUDtBQUNEO0FBQ0YsT0FibVEsRUFhalEsTUFBTSx1QkFBVztBQUNsQixlQUFPLG9CQUFPLFFBQVEsQ0FBUixDQUFQLENBQVA7QUFDRCxPQWZtUSxFQUF0TyxFQUF2QixDQUFQO0FBZ0JEO1FBQ3lCLGdCLEdBQWxCLGM7UUFBa0QsVSxHQUFkLFUiLCJmaWxlIjoic2VyaWFsaXplci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0cmFuc2l0IGZyb20gXCJ0cmFuc2l0LWpzXCI7XG5pbXBvcnQge0xpc3R9IGZyb20gXCJpbW11dGFibGVcIjtcbmltcG9ydCBTeW50YXggZnJvbSBcIi4vc3ludGF4XCI7XG5pbXBvcnQge1N5bWJvbCwgZ2Vuc3ltLCBTeW1ib2xDbGFzc30gZnJvbSBcIi4vc3ltYm9sXCI7XG5pbXBvcnQge1Rva2VuQ2xhc3MsIFRva2VuVHlwZX0gZnJvbSBcInNoaWZ0LXBhcnNlci9kaXN0L3Rva2VuaXplclwiO1xubGV0IHR5cGVNYXBfNDY5ID0gW1Rva2VuVHlwZS5TVFJJTkcsIFRva2VuVHlwZS5FT1MsIFRva2VuVHlwZS5MUEFSRU4sIFRva2VuVHlwZS5SUEFSRU4sIFRva2VuVHlwZS5MQlJBQ0ssIFRva2VuVHlwZS5SQlJBQ0ssIFRva2VuVHlwZS5MQlJBQ0UsIFRva2VuVHlwZS5SQlJBQ0UsIFRva2VuVHlwZS5DT0xPTiwgVG9rZW5UeXBlLlNFTUlDT0xPTiwgVG9rZW5UeXBlLlBFUklPRCwgVG9rZW5UeXBlLkVMTElQU0lTLCBUb2tlblR5cGUuQVJST1csIFRva2VuVHlwZS5DT05ESVRJT05BTCwgVG9rZW5UeXBlLklOQywgVG9rZW5UeXBlLkRFQywgVG9rZW5UeXBlLkFTU0lHTiwgVG9rZW5UeXBlLkFTU0lHTl9CSVRfT1IsIFRva2VuVHlwZS5BU1NJR05fQklUX1hPUiwgVG9rZW5UeXBlLkFTU0lHTl9CSVRfQU5ELCBUb2tlblR5cGUuQVNTSUdOX1NITCwgVG9rZW5UeXBlLkFTU0lHTl9TSFIsIFRva2VuVHlwZS5BU1NJR05fU0hSX1VOU0lHTkVELCBUb2tlblR5cGUuQVNTSUdOX0FERCwgVG9rZW5UeXBlLkFTU0lHTl9TVUIsIFRva2VuVHlwZS5BU1NJR05fTVVMLCBUb2tlblR5cGUuQVNTSUdOX0RJViwgVG9rZW5UeXBlLkFTU0lHTl9NT0QsIFRva2VuVHlwZS5DT01NQSwgVG9rZW5UeXBlLk9SLCBUb2tlblR5cGUuQU5ELCBUb2tlblR5cGUuQklUX09SLCBUb2tlblR5cGUuQklUX1hPUiwgVG9rZW5UeXBlLkJJVF9BTkQsIFRva2VuVHlwZS5TSEwsIFRva2VuVHlwZS5TSFIsIFRva2VuVHlwZS5TSFJfVU5TSUdORUQsIFRva2VuVHlwZS5BREQsIFRva2VuVHlwZS5TVUIsIFRva2VuVHlwZS5NVUwsIFRva2VuVHlwZS5ESVYsIFRva2VuVHlwZS5NT0QsIFRva2VuVHlwZS5FUSwgVG9rZW5UeXBlLk5FLCBUb2tlblR5cGUuRVFfU1RSSUNULCBUb2tlblR5cGUuTkVfU1RSSUNULCBUb2tlblR5cGUuTFQsIFRva2VuVHlwZS5HVCwgVG9rZW5UeXBlLkxURSwgVG9rZW5UeXBlLkdURSwgVG9rZW5UeXBlLklOU1RBTkNFT0YsIFRva2VuVHlwZS5JTiwgVG9rZW5UeXBlLk5PVCwgVG9rZW5UeXBlLkJJVF9OT1QsIFRva2VuVHlwZS5BV0FJVCwgVG9rZW5UeXBlLkRFTEVURSwgVG9rZW5UeXBlLlRZUEVPRiwgVG9rZW5UeXBlLlZPSUQsIFRva2VuVHlwZS5CUkVBSywgVG9rZW5UeXBlLkNBU0UsIFRva2VuVHlwZS5DQVRDSCwgVG9rZW5UeXBlLkNMQVNTLCBUb2tlblR5cGUuQ09OVElOVUUsIFRva2VuVHlwZS5ERUJVR0dFUiwgVG9rZW5UeXBlLkRFRkFVTFQsIFRva2VuVHlwZS5ETywgVG9rZW5UeXBlLkVMU0UsIFRva2VuVHlwZS5FWFBPUlQsIFRva2VuVHlwZS5FWFRFTkRTLCBUb2tlblR5cGUuRklOQUxMWSwgVG9rZW5UeXBlLkZPUiwgVG9rZW5UeXBlLkZVTkNUSU9OLCBUb2tlblR5cGUuSUYsIFRva2VuVHlwZS5JTVBPUlQsIFRva2VuVHlwZS5MRVQsIFRva2VuVHlwZS5ORVcsIFRva2VuVHlwZS5SRVRVUk4sIFRva2VuVHlwZS5TVVBFUiwgVG9rZW5UeXBlLlNXSVRDSCwgVG9rZW5UeXBlLlRISVMsIFRva2VuVHlwZS5USFJPVywgVG9rZW5UeXBlLlRSWSwgVG9rZW5UeXBlLlZBUiwgVG9rZW5UeXBlLldISUxFLCBUb2tlblR5cGUuV0lUSCwgVG9rZW5UeXBlLk5VTEwsIFRva2VuVHlwZS5UUlVFLCBUb2tlblR5cGUuRkFMU0UsIFRva2VuVHlwZS5ZSUVMRCwgVG9rZW5UeXBlLk5VTUJFUiwgVG9rZW5UeXBlLlNUUklORywgVG9rZW5UeXBlLlJFR0VYUCwgVG9rZW5UeXBlLklERU5USUZJRVIsIFRva2VuVHlwZS5DT05TVCwgVG9rZW5UeXBlLlRFTVBMQVRFLCBUb2tlblR5cGUuSUxMRUdBTF07XG5sZXQgTGlzdEhhbmRsZXJfNDcwID0gdHJhbnNpdC5tYWtlV3JpdGVIYW5kbGVyKHt0YWc6ICgpID0+IFwiYXJyYXlcIiwgcmVwOiB2XzQ3NSA9PiB2XzQ3NX0pO1xubGV0IFN5bnRheEhhbmRsZXJfNDcxID0gdHJhbnNpdC5tYWtlV3JpdGVIYW5kbGVyKHt0YWc6ICgpID0+IFwic3R4XCIsIHJlcDogdl80NzYgPT4ge1xuICBpZiAoTGlzdC5pc0xpc3Qodl80NzYudG9rZW4pKSB7XG4gICAgcmV0dXJuIFt2XzQ3Ni50b2tlbiwgdl80NzYuY29udGV4dC5zY29wZXNldF07XG4gIH0gZWxzZSB7XG4gICAgbGV0IHQgPSB0cmFuc2l0Lm9iamVjdFRvTWFwKHZfNDc2LnRva2VuKTtcbiAgICB0LnNldChcInR5cGVcIiwgdHlwZU1hcF80NjkuaW5kZXhPZih2XzQ3Ni50b2tlbi50eXBlKSk7XG4gICAgcmV0dXJuIFt0LCB2XzQ3Ni5jb250ZXh0LnNjb3Blc2V0XTtcbiAgfVxufX0pO1xubGV0IFN5bWJvbEhhbmRsZXJfNDcyID0gdHJhbnNpdC5tYWtlV3JpdGVIYW5kbGVyKHt0YWc6ICgpID0+IFwic3ltYlwiLCByZXA6IHZfNDc3ID0+IFt2XzQ3Ny5uYW1lXX0pO1xubGV0IHdyaXRlcl80NzMgPSB0cmFuc2l0LndyaXRlcihcImpzb25cIiwge2hhbmRsZXJzOiB0cmFuc2l0Lm1hcChbTGlzdCwgTGlzdEhhbmRsZXJfNDcwLCBTeW50YXgsIFN5bnRheEhhbmRsZXJfNDcxLCBTeW1ib2xDbGFzcywgU3ltYm9sSGFuZGxlcl80NzJdKX0pO1xuZnVuY3Rpb24gbWFrZVJlYWRlcl80NzQoYmluZGluZ3NfNDc4KSB7XG4gIHJldHVybiB0cmFuc2l0LnJlYWRlcihcImpzb25cIiwge2FycmF5QnVpbGRlcjoge2luaXQ6IG5vZGVfNDc5ID0+IExpc3QoKS5hc011dGFibGUoKSwgYWRkOiAocmV0XzQ4MCwgdmFsXzQ4MSwgbm9kZV80ODIpID0+IHJldF80ODAucHVzaCh2YWxfNDgxKSwgZmluYWxpemU6IChyZXRfNDgzLCBub2RlXzQ4NCkgPT4gcmV0XzQ4My5hc0ltbXV0YWJsZSgpLCBmcm9tQXJyYXk6IChhcnJfNDg1LCBub2RlXzQ4NikgPT4gTGlzdChhcnJfNDg1KX0sIGhhbmRsZXJzOiB7c3R4OiByZXBfNDg3ID0+IHtcbiAgICBpZiAoTGlzdC5pc0xpc3QocmVwXzQ4N1swXSkpIHtcbiAgICAgIGxldCB0b2tlbiA9IHJlcF80ODdbMF07XG4gICAgICByZXR1cm4gbmV3IFN5bnRheCh0b2tlbiwge2JpbmRpbmdzOiBiaW5kaW5nc180NzgsIHNjb3Blc2V0OiByZXBfNDg3WzFdfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB0b2tlbiA9IHRyYW5zaXQubWFwVG9PYmplY3QocmVwXzQ4N1swXSk7XG4gICAgICB0b2tlbi50eXBlID0gdHlwZU1hcF80NjlbcmVwXzQ4N1swXS5nZXQoXCJ0eXBlXCIpXTtcbiAgICAgIHRva2VuLnNsaWNlID0gcmVwXzQ4N1swXS5oYXMoXCJzbGljZVwiKSA/IHRyYW5zaXQubWFwVG9PYmplY3QocmVwXzQ4N1swXS5nZXQoXCJzbGljZVwiKSkgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAodG9rZW4uc2xpY2UpIHtcbiAgICAgICAgdG9rZW4uc2xpY2Uuc3RhcnRMb2NhdGlvbiA9IHRyYW5zaXQubWFwVG9PYmplY3QodG9rZW4uc2xpY2Uuc3RhcnRMb2NhdGlvbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFN5bnRheCh0b2tlbiwge2JpbmRpbmdzOiBiaW5kaW5nc180NzgsIHNjb3Blc2V0OiByZXBfNDg3WzFdfSk7XG4gICAgfVxuICB9LCBzeW1iOiByZXBfNDg4ID0+IHtcbiAgICByZXR1cm4gU3ltYm9sKHJlcF80ODhbMF0pO1xuICB9fX0pO1xufVxuZXhwb3J0IHttYWtlUmVhZGVyXzQ3NCBhcyBtYWtlRGVzZXJpYWxpemVyLCB3cml0ZXJfNDczIGFzIHNlcmlhbGl6ZXJ9O1xuIl19 \ No newline at end of file diff --git a/dist/shift-reader.js b/dist/shift-reader.js index 0c36e55f..991d9a0d 100644 --- a/dist/shift-reader.js +++ b/dist/shift-reader.js @@ -59,158 +59,172 @@ var isLeftSyntax_503 = R.whereEq({ type: LSYNTAX_491 }); var isRightSyntax_504 = R.whereEq({ type: RSYNTAX_492 }); var isLeftDelimiter_505 = R.anyPass([isLeftBracket_495, isLeftBrace_496, isLeftParen_497, isLeftSyntax_503]); var isRightDelimiter_506 = R.anyPass([isRightBracket_498, isRightBrace_499, isRightParen_500, isRightSyntax_504]); -var isMatchingDelimiters_507 = R.cond([[isLeftBracket_495, function (__548, b_549) { - return isRightBracket_498(b_549); -}], [isLeftBrace_496, function (__550, b_551) { - return isRightBrace_499(b_551); -}], [isLeftParen_497, function (__552, b_553) { - return isRightParen_500(b_553); -}], [isLeftSyntax_503, function (__554, b_555) { - return isRightSyntax_504(b_555); +var isMatchingDelimiters_507 = R.cond([[isLeftBracket_495, function (__551, b_552) { + return isRightBracket_498(b_552); +}], [isLeftBrace_496, function (__553, b_554) { + return isRightBrace_499(b_554); +}], [isLeftParen_497, function (__555, b_556) { + return isRightParen_500(b_556); +}], [isLeftSyntax_503, function (__557, b_558) { + return isRightSyntax_504(b_558); }], [R.T, R.F]]); var assignOps_508 = ["=", "+=", "-=", "*=", "/=", "%=", "<<=", ">>=", ">>>=", "&=", "|=", "^=", ","]; var binaryOps_509 = ["+", "-", "*", "/", "%", "<<", ">>", ">>>", "&", "|", "^", "&&", "||", "?", ":", "===", "==", ">=", "<=", "<", ">", "!=", "!==", "instanceof"]; var unaryOps_510 = ["++", "--", "~", "!", "delete", "void", "typeof", "yield", "throw", "new"]; -var isEmpty_511 = R.whereEq({ size: 0 }); -var isPunctuator_512 = function isPunctuator_512(s_556) { - return s_556.isPunctuator(); +var isNotFalse_511 = R.compose(R.not, R.curry(R.equals)(false)); +var isEmpty_512 = R.whereEq({ size: 0 }); +var isPunctuator_513 = function isPunctuator_513(s_559) { + return s_559.isPunctuator(); }; -var isKeyword_513 = function isKeyword_513(s_557) { - return s_557.isKeyword(); +var isKeyword_514 = function isKeyword_514(s_560) { + return s_560.isKeyword(); }; -var isDelimiter_514 = function isDelimiter_514(s_558) { - return s_558.isDelimiter(); +var isDelimiter_515 = function isDelimiter_515(s_561) { + return s_561.isDelimiter(); }; -var isParens_515 = function isParens_515(s_559) { - return s_559.isParens(); +var isParens_516 = function isParens_516(s_562) { + return s_562.isParens(); }; -var isBraces_516 = function isBraces_516(s_560) { - return s_560.isBraces(); +var isBraces_517 = function isBraces_517(s_563) { + return s_563.isBraces(); }; -var isBrackets_517 = function isBrackets_517(s_561) { - return s_561.isBrackets(); +var isBrackets_518 = function isBrackets_518(s_564) { + return s_564.isBrackets(); }; -var isIdentifier_518 = function isIdentifier_518(s_562) { - return s_562.isIdentifier(); +var isIdentifier_519 = function isIdentifier_519(s_565) { + return s_565.isIdentifier(); }; -var val_519 = function val_519(s_563) { - return s_563.val(); +var val_520 = function val_520(s_566) { + return s_566.val(); }; -var isVal_520 = R.curry(function (v_564, s_565) { - return s_565.val() === v_564; +var isVal_521 = R.curry(function (v_567, s_568) { + return s_568.val() === v_567; }); -var isDot_521 = R.allPass([isPunctuator_512, isVal_520(".")]); -var isColon_522 = R.allPass([isPunctuator_512, isVal_520(":")]); -var isFunctionKeyword_523 = R.allPass([isKeyword_513, isVal_520("function")]); -var isOperator_524 = function isOperator_524(s_566) { - return (s_566.isPunctuator() || s_566.isKeyword()) && R.any(R.equals(s_566.val()), assignOps_508.concat(binaryOps_509).concat(unaryOps_510)); +var isDot_522 = R.allPass([isPunctuator_513, isVal_521(".")]); +var isColon_523 = R.allPass([isPunctuator_513, isVal_521(":")]); +var isFunctionKeyword_524 = R.allPass([isKeyword_514, isVal_521("function")]); +var isOperator_525 = function isOperator_525(s_569) { + return (s_569.isPunctuator() || s_569.isKeyword()) && R.any(R.equals(s_569.val()), assignOps_508.concat(binaryOps_509).concat(unaryOps_510)); }; -var isNonLiteralKeyword_525 = R.allPass([isKeyword_513, function (s_567) { - return R.none(R.equals(s_567.val()), literalKeywords_494); +var isNonLiteralKeyword_526 = R.allPass([isKeyword_514, function (s_570) { + return R.none(R.equals(s_570.val()), literalKeywords_494); }]); -var isKeywordExprPrefix_526 = R.allPass([isKeyword_513, function (s_568) { - return R.any(R.equals(s_568.val()), ["instanceof", "typeof", "delete", "void", "yield", "throw", "new", "case"]); +var isKeywordExprPrefix_527 = R.allPass([isKeyword_514, function (s_571) { + return R.any(R.equals(s_571.val()), ["instanceof", "typeof", "delete", "void", "yield", "throw", "new", "case"]); }]); -var last_527 = function last_527(p_569) { - return p_569.last(); +var last_528 = function last_528(p_572) { + return p_572.last(); }; -var safeLast_528 = R.pipe(R.cond([[isEmpty_511, R.always(Nothing_490())], [R.T, R.compose(_ramdaFantasy.Maybe.of, last_527)]])); -var stuffTrue_529 = R.curry(function (p_570, b_571) { - return b_571 ? Just_489(p_570) : Nothing_490(); +var safeLast_529 = R.pipe(R.cond([[isEmpty_512, R.always(Nothing_490())], [R.T, R.compose(_ramdaFantasy.Maybe.of, last_528)]])); +var stuffTrue_530 = R.curry(function (p_573, b_574) { + return b_574 ? Just_489(p_573) : Nothing_490(); }); -var stuffFalse_530 = R.curry(function (p_572, b_573) { - return !b_573 ? Just_489(p_572) : Nothing_490(); +var stuffFalse_531 = R.curry(function (p_575, b_576) { + return !b_576 ? Just_489(p_575) : Nothing_490(); }); -var isTopColon_531 = R.pipe(safeLast_528, R.map(isColon_522), _ramdaFantasy.Maybe.maybe(false, R.identity)); -var isTopPunctuator_532 = R.pipe(safeLast_528, R.map(isPunctuator_512), _ramdaFantasy.Maybe.maybe(false, R.identity)); -var isExprReturn_533 = R.curry(function (l_574, p_575) { - var retKwd_576 = safeLast_528(p_575); - var maybeDot_577 = pop_544(p_575).chain(safeLast_528); - if (maybeDot_577.map(isDot_521).getOrElse(false)) { +var isTopColon_532 = R.pipe(safeLast_529, R.map(isColon_523), _ramdaFantasy.Maybe.maybe(false, R.identity)); +var isTopPunctuator_533 = R.pipe(safeLast_529, R.map(isPunctuator_513), _ramdaFantasy.Maybe.maybe(false, R.identity)); +var isExprReturn_534 = R.curry(function (l_577, p_578) { + var retKwd_579 = safeLast_529(p_578); + var maybeDot_580 = pop_545(p_578).chain(safeLast_529); + if (maybeDot_580.map(isDot_522).getOrElse(false)) { return true; } - return retKwd_576.map(function (s_578) { - return s_578.isKeyword() && s_578.val() === "return" && s_578.lineNumber() === l_574; + return retKwd_579.map(function (s_581) { + return s_581.isKeyword() && s_581.val() === "return" && s_581.lineNumber() === l_577; }).getOrElse(false); }); -var isTopOperator_534 = R.pipe(safeLast_528, R.map(isOperator_524), _ramdaFantasy.Maybe.maybe(false, R.identity)); -var isTopKeywordExprPrefix_535 = R.pipe(safeLast_528, R.map(isKeywordExprPrefix_526), _ramdaFantasy.Maybe.maybe(false, R.identity)); -var isExprPrefix_536 = R.curry(function (l_579, b_580) { - return R.cond([[isEmpty_511, R.always(b_580)], [isTopColon_531, R.always(b_580)], [isTopKeywordExprPrefix_535, R.T], [isTopOperator_534, R.T], [isTopPunctuator_532, R.always(b_580)], [isExprReturn_533(l_579), R.T], [R.T, R.F]]); +var isTopOperator_535 = R.pipe(safeLast_529, R.map(isOperator_525), _ramdaFantasy.Maybe.maybe(false, R.identity)); +var isTopKeywordExprPrefix_536 = R.pipe(safeLast_529, R.map(isKeywordExprPrefix_527), _ramdaFantasy.Maybe.maybe(false, R.identity)); +var isExprPrefix_537 = R.curry(function (l_582, b_583) { + return R.cond([[isEmpty_512, R.always(b_583)], [isTopColon_532, R.always(b_583)], [isTopKeywordExprPrefix_536, R.T], [isTopOperator_535, R.T], [isTopPunctuator_533, R.always(b_583)], [isExprReturn_534(l_582), R.T], [R.T, R.F]]); }); -var curly_537 = function curly_537(p_581) { - return safeLast_528(p_581).map(isBraces_516).chain(stuffTrue_529(p_581)); +var curly_538 = function curly_538(p_584) { + return safeLast_529(p_584).map(isBraces_517).chain(stuffTrue_530(p_584)); }; -var paren_538 = function paren_538(p_582) { - return safeLast_528(p_582).map(isParens_515).chain(stuffTrue_529(p_582)); +var paren_539 = function paren_539(p_585) { + return safeLast_529(p_585).map(isParens_516).chain(stuffTrue_530(p_585)); }; -var func_539 = function func_539(p_583) { - return safeLast_528(p_583).map(isFunctionKeyword_523).chain(stuffTrue_529(p_583)); +var func_540 = function func_540(p_586) { + return safeLast_529(p_586).map(isFunctionKeyword_524).chain(stuffTrue_530(p_586)); }; -var ident_540 = function ident_540(p_584) { - return safeLast_528(p_584).map(isIdentifier_518).chain(stuffTrue_529(p_584)); +var ident_541 = function ident_541(p_587) { + return safeLast_529(p_587).map(isIdentifier_519).chain(stuffTrue_530(p_587)); }; -var nonLiteralKeyword_541 = function nonLiteralKeyword_541(p_585) { - return safeLast_528(p_585).map(isNonLiteralKeyword_525).chain(stuffTrue_529(p_585)); +var nonLiteralKeyword_542 = function nonLiteralKeyword_542(p_588) { + return safeLast_529(p_588).map(isNonLiteralKeyword_526).chain(stuffTrue_530(p_588)); }; -var opt_542 = R.curry(function (a_586, b_587, p_588) { - var result_589 = R.pipeK(a_586, b_587)(_ramdaFantasy.Maybe.of(p_588)); - return _ramdaFantasy.Maybe.isJust(result_589) ? result_589 : _ramdaFantasy.Maybe.of(p_588); +var opt_543 = R.curry(function (a_589, b_590, p_591) { + var result_592 = R.pipeK(a_589, b_590)(_ramdaFantasy.Maybe.of(p_591)); + return _ramdaFantasy.Maybe.isJust(result_592) ? result_592 : _ramdaFantasy.Maybe.of(p_591); }); -var notDot_543 = R.ifElse(R.whereEq({ size: 0 }), Just_489, function (p_590) { - return safeLast_528(p_590).map(function (s_591) { - return !(s_591.isPunctuator() && s_591.val() === "."); - }).chain(stuffTrue_529(p_590)); +var notDot_544 = R.ifElse(R.whereEq({ size: 0 }), Just_489, function (p_593) { + return safeLast_529(p_593).map(function (s_594) { + return !(s_594.isPunctuator() && s_594.val() === "."); + }).chain(stuffTrue_530(p_593)); }); -var pop_544 = R.compose(Just_489, function (p_592) { - return p_592.pop(); +var pop_545 = R.compose(Just_489, function (p_595) { + return p_595.pop(); }); -var functionPrefix_545 = R.pipeK(curly_537, pop_544, paren_538, pop_544, opt_542(ident_540, pop_544), func_539); -var isRegexPrefix_546 = function isRegexPrefix_546(b_593) { - return R.anyPass([isEmpty_511, isTopPunctuator_532, R.pipe(_ramdaFantasy.Maybe.of, R.pipeK(nonLiteralKeyword_541, pop_544, notDot_543), _ramdaFantasy.Maybe.isJust), R.pipe(_ramdaFantasy.Maybe.of, R.pipeK(paren_538, pop_544, nonLiteralKeyword_541, pop_544, notDot_543), _ramdaFantasy.Maybe.isJust), R.pipe(_ramdaFantasy.Maybe.of, functionPrefix_545, R.chain(function (p_594) { - return safeLast_528(p_594).map(function (s_595) { - return s_595.lineNumber(); - }).chain(function (fnLine_596) { - return pop_544(p_594).map(isExprPrefix_536(fnLine_596, b_593)); - }).chain(stuffFalse_530(p_594)); - }), _ramdaFantasy.Maybe.isJust), function (p_597) { - var isCurly_598 = _ramdaFantasy.Maybe.isJust(safeLast_528(p_597).map(isBraces_516)); - var alreadyCheckedFunction_599 = R.pipe(_ramdaFantasy.Maybe.of, functionPrefix_545, _ramdaFantasy.Maybe.isJust)(p_597); - if (alreadyCheckedFunction_599) { +var functionPrefix_546 = R.pipeK(curly_538, pop_545, paren_539, pop_545, opt_543(ident_541, pop_545), func_540); +var isRegexPrefix_547 = function isRegexPrefix_547(b_596) { + return R.anyPass([isEmpty_512, isTopPunctuator_533, R.pipe(_ramdaFantasy.Maybe.of, R.pipeK(nonLiteralKeyword_542, pop_545, notDot_544), _ramdaFantasy.Maybe.isJust), R.pipe(_ramdaFantasy.Maybe.of, R.pipeK(paren_539, pop_545, nonLiteralKeyword_542, pop_545, notDot_544), _ramdaFantasy.Maybe.isJust), R.pipe(_ramdaFantasy.Maybe.of, functionPrefix_546, R.chain(function (p_597) { + return safeLast_529(p_597).map(function (s_598) { + return s_598.lineNumber(); + }).chain(function (fnLine_599) { + return pop_545(p_597).map(isExprPrefix_537(fnLine_599, b_596)); + }).chain(stuffFalse_531(p_597)); + }), _ramdaFantasy.Maybe.isJust), function (p_600) { + var isCurly_601 = _ramdaFantasy.Maybe.isJust(safeLast_529(p_600).map(isBraces_517)); + var alreadyCheckedFunction_602 = R.pipe(_ramdaFantasy.Maybe.of, functionPrefix_546, _ramdaFantasy.Maybe.isJust)(p_600); + if (alreadyCheckedFunction_602) { return false; } - return R.pipe(_ramdaFantasy.Maybe.of, R.chain(curly_537), R.chain(function (p_600) { - return safeLast_528(p_600).map(function (s_601) { - return s_601.lineNumber(); - }).chain(function (curlyLine_602) { - return pop_544(p_600).map(isExprPrefix_536(curlyLine_602, b_593)); - }).chain(stuffFalse_530(p_600)); - }), _ramdaFantasy.Maybe.isJust)(p_597); + return R.pipe(_ramdaFantasy.Maybe.of, R.chain(curly_538), R.chain(function (p_603) { + return safeLast_529(p_603).map(function (s_604) { + return s_604.lineNumber(); + }).chain(function (curlyLine_605) { + return pop_545(p_603).map(isExprPrefix_537(curlyLine_605, b_596)); + }).chain(stuffFalse_531(p_603)); + }), _ramdaFantasy.Maybe.isJust)(p_600); }]); }; -function lastEl_547(l_603) { - return l_603[l_603.length - 1]; +function lastEl_548(l_606) { + return l_606[l_606.length - 1]; } +function countSlashes_549(reader_607) { + var index_608 = reader_607.index; + var onSlash_609 = function onSlash_609() { + return reader_607.source.charCodeAt(index_608) === 92; + }; + var length_610 = reader_607.source.length; + var count_611 = onSlash_609() ? 1 : 0; + while (++index_608 < length_610 && onSlash_609()) { + ++count_611; + } + return count_611; +} +var calcDepth_550 = R.compose(Math.log2, R.inc); var Reader = function (_Tokenizer) { _inherits(Reader, _Tokenizer); - function Reader(strings_604, context_605, replacements_606) { + function Reader(strings_612, context_613, replacements_614) { _classCallCheck(this, Reader); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Reader).call(this, Array.isArray(strings_604) ? strings_604.join("") : strings_604)); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Reader).call(this, Array.isArray(strings_612) ? strings_612.join("") : strings_612)); _this.delimStack = new Map(); - _this.insideSyntaxTemplate = [false]; - _this.context = context_605; - if (Array.isArray(strings_604)) { + _this.syntaxNestingDepth = 0; + _this.context = context_613; + if (Array.isArray(strings_612)) { (function () { var totalIndex = 0; - _this.replacementIndex = R.reduce(function (acc_607, strRep_608) { - acc_607.push({ index: totalIndex + strRep_608[0].length, replacement: strRep_608[1] }); - totalIndex += strRep_608[0].length; - return acc_607; - }, [], R.zip(strings_604, replacements_606)); + _this.replacementIndex = R.reduce(function (acc_615, strRep_616) { + acc_615.push({ index: totalIndex + strRep_616[0].length, replacement: strRep_616[1] }); + totalIndex += strRep_616[0].length; + return acc_615; + }, [], R.zip(strings_612, replacements_614)); })(); } return _this; @@ -219,66 +233,66 @@ var Reader = function (_Tokenizer) { _createClass(Reader, [{ key: "read", value: function read() { - var stack_609 = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0]; - var b_610 = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; - var singleDelimiter_611 = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; + var stack_617 = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0]; + var b_618 = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; + var singleDelimiter_619 = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; - var prefix_612 = (0, _immutable.List)(); + var prefix_620 = (0, _immutable.List)(); while (true) { - var tok = this.advance(prefix_612, b_610); + var tok = this.advance(prefix_620, b_618); if (tok instanceof _syntax2.default || tok instanceof _terms2.default) { - stack_609.push(tok); + stack_617.push(tok); continue; } if (Array.isArray(tok)) { - Array.prototype.push.apply(stack_609, tok); + Array.prototype.push.apply(stack_617, tok); continue; } if (_immutable.List.isList(tok)) { - Array.prototype.push.apply(stack_609, tok.toArray()); + Array.prototype.push.apply(stack_617, tok.toArray()); continue; } if (isEOS_501(tok)) { - if (stack_609[0] && isLeftDelimiter_505(stack_609[0].token)) { + if (stack_617[0] && isLeftDelimiter_505(stack_617[0].token)) { throw this.createUnexpected(tok); } break; } if (isLeftDelimiter_505(tok)) { if (isLeftSyntax_503(tok)) { - this.insideSyntaxTemplate.push(true); + this.syntaxNestingDepth++; } var line = tok.slice.startLocation.line; - var innerB = isLeftBrace_496(tok) ? isExprPrefix_536(line, b_610)(prefix_612) : true; + var innerB = isLeftBrace_496(tok) ? isExprPrefix_537(line, b_618)(prefix_620) : true; var inner = this.read([new _syntax2.default(tok)], innerB, false); var stx = new _syntax2.default(inner, this.context); - prefix_612 = prefix_612.concat(stx); - stack_609.push(stx); - if (singleDelimiter_611) { + prefix_620 = prefix_620.concat(stx); + stack_617.push(stx); + if (singleDelimiter_619) { break; } } else if (isRightDelimiter_506(tok)) { - if (stack_609[0] && !isMatchingDelimiters_507(stack_609[0].token, tok)) { + if (stack_617[0] && !isMatchingDelimiters_507(stack_617[0].token, tok)) { throw this.createUnexpected(tok); } var _stx = new _syntax2.default(tok, this.context); - stack_609.push(_stx); - if (lastEl_547(this.insideSyntaxTemplate) && isRightSyntax_504(tok)) { - this.insideSyntaxTemplate.pop(); + stack_617.push(_stx); + if (this.syntaxNestingDepth && isRightSyntax_504(tok)) { + this.syntaxNestingDepth--; } break; } else { var _stx2 = new _syntax2.default(tok, this.context); - prefix_612 = prefix_612.concat(_stx2); - stack_609.push(_stx2); + prefix_620 = prefix_620.concat(_stx2); + stack_617.push(_stx2); } } - return (0, _immutable.List)(stack_609); + return (0, _immutable.List)(stack_617); } }, { key: "advance", - value: function advance(prefix_613, b_614) { - var startLocation_615 = this.getLocation(); + value: function advance(prefix_621, b_622) { + var startLocation_623 = this.getLocation(); this.lastIndex = this.index; this.lastLine = this.line; this.lastLineStart = this.lineStart; @@ -291,14 +305,14 @@ var Reader = function (_Tokenizer) { this.replacementIndex.shift(); return rep; } - var charCode_616 = this.source.charCodeAt(this.index); - if (charCode_616 === 96) { + var charCode_624 = this.source.charCodeAt(this.index); + if (charCode_624 === 96) { var element = void 0, items = []; var _startLocation_ = this.getLocation(); var start = this.index; this.index++; - if (lastEl_547(this.insideSyntaxTemplate)) { + if (this.syntaxNestingDepth === 1) { var slice = this.getSlice(start, _startLocation_); return { type: RSYNTAX_492, value: "`", slice: slice }; } @@ -312,46 +326,64 @@ var Reader = function (_Tokenizer) { } } while (!element.tail); return { type: _tokenizer.TokenType.TEMPLATE, items: (0, _immutable.List)(items) }; - } else if (charCode_616 === 35) { - var _startLocation_2 = this.getLocation(); - var _start = this.index; - var _slice = this.getSlice(_start, _startLocation_2); - this.index++; - if (this.source.charCodeAt(this.index) === 96) { - this.index++; - return { type: LSYNTAX_491, value: "#`", slice: _slice }; + } else if (this.syntaxNestingDepth && charCode_624 === 92) { + var numSlashes = countSlashes_549(this); + var depth = calcDepth_550(numSlashes); + if (this.source.charCodeAt(this.index + numSlashes) === 96) { + if (depth > this.syntaxNestingDepth) { + this.index += Math.pow(2, this.syntaxNestingDepth) - 1; + throw this.createILLEGAL(); + } else if (depth < this.syntaxNestingDepth - 1) { + this.index += numSlashes; + throw this.createILLEGAL(); + } + var isClosing = depth === this.syntaxNestingDepth - 1; + var _startLocation_2 = this.getLocation(); + var _start = this.index; + var _slice = this.getSlice(_start, _startLocation_2); + this.index += numSlashes + 1; + return { type: isClosing ? RSYNTAX_492 : LSYNTAX_491, value: "\\".repeat(numSlashes).concat("'"), slice: _slice }; } - return { type: _tokenizer.TokenType.IDENTIFIER, value: "#", slice: _slice }; - } else if (charCode_616 === 64) { + } else if (charCode_624 === 35) { var _startLocation_3 = this.getLocation(); var _start2 = this.index; var _slice2 = this.getSlice(_start2, _startLocation_3); this.index++; - return { type: AT_493, value: "@", slice: _slice2 }; + if (this.source.charCodeAt(this.index) === 96) { + this.index++; + return { type: LSYNTAX_491, value: "#`", slice: _slice2 }; + } + return { type: _tokenizer.TokenType.IDENTIFIER, value: "#", slice: _slice2 }; + } else if (charCode_624 === 64) { + var _startLocation_4 = this.getLocation(); + var _start3 = this.index; + var _slice3 = this.getSlice(_start3, _startLocation_4); + this.index++; + return { type: AT_493, value: "@", slice: _slice3 }; } - var lookahead_617 = _get(Object.getPrototypeOf(Reader.prototype), "advance", this).call(this); - if (lookahead_617.type === _tokenizer.TokenType.DIV && isRegexPrefix_546(b_614)(prefix_613)) { + var lookahead_625 = _get(Object.getPrototypeOf(Reader.prototype), "advance", this).call(this); + if (lookahead_625.type === _tokenizer.TokenType.DIV && isRegexPrefix_547(b_622)(prefix_621)) { return _get(Object.getPrototypeOf(Reader.prototype), "scanRegExp", this).call(this, "/"); } - return lookahead_617; + return lookahead_625; } }, { key: "scanTemplateElement", value: function scanTemplateElement() { - var startLocation_618 = this.getLocation(); - var start_619 = this.index; + var startLocation_626 = this.getLocation(); + var start_627 = this.index; while (this.index < this.source.length) { var ch = this.source.charCodeAt(this.index); switch (ch) { case 96: - var slice = this.getSlice(start_619, startLocation_618); + var slice = this.getSlice(start_627, startLocation_626); this.index++; return { type: _tokenizer.TokenType.TEMPLATE, tail: true, interp: false, slice: slice }; case 36: if (this.source.charCodeAt(this.index + 1) === 123) { - var _slice3 = this.getSlice(start_619, startLocation_618); + var _slice4 = this.getSlice(start_627, startLocation_626); this.index += 1; - return { type: _tokenizer.TokenType.TEMPLATE, tail: false, interp: true, slice: _slice3 }; + return { type: _tokenizer.TokenType.TEMPLATE, tail: false, interp: true, slice: _slice4 }; } this.index++; break; @@ -375,4 +407,4 @@ var Reader = function (_Tokenizer) { }(_tokenizer2.default); exports.default = Reader; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3NoaWZ0LXJlYWRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7Ozs7QUFFQTs7QUFDQTs7OztBQUNBOztJQUFhLEM7O0FBQ2I7O0FBQ0E7O0FBR0E7Ozs7Ozs7Ozs7Ozs7O0FBRkEsSUFBTSxXQUFXLG9CQUFNLElBQXZCO0FBQ0EsSUFBTSxjQUFjLG9CQUFNLE9BQTFCOztBQUVBLElBQU0sY0FBYyxFQUFDLE1BQU0sYUFBUCxFQUFwQjtBQUNBLElBQU0sY0FBYyxFQUFDLE1BQU0sY0FBUCxFQUFwQjtBQUNBLElBQU0sU0FBUyxFQUFDLE9BQU8sc0JBQVcsVUFBbkIsRUFBK0IsTUFBTSxHQUFyQyxFQUFmO0FBQ0EsSUFBTSxzQkFBc0IsQ0FBQyxNQUFELEVBQVMsTUFBVCxFQUFpQixNQUFqQixFQUF5QixPQUF6QixDQUE1QjtBQUNBLElBQU0sb0JBQW9CLEVBQUUsT0FBRixDQUFVLEVBQUMsTUFBTSxxQkFBVSxNQUFqQixFQUFWLENBQTFCO0FBQ0EsSUFBTSxrQkFBa0IsRUFBRSxPQUFGLENBQVUsRUFBQyxNQUFNLHFCQUFVLE1BQWpCLEVBQVYsQ0FBeEI7QUFDQSxJQUFNLGtCQUFrQixFQUFFLE9BQUYsQ0FBVSxFQUFDLE1BQU0scUJBQVUsTUFBakIsRUFBVixDQUF4QjtBQUNBLElBQU0scUJBQXFCLEVBQUUsT0FBRixDQUFVLEVBQUMsTUFBTSxxQkFBVSxNQUFqQixFQUFWLENBQTNCO0FBQ0EsSUFBTSxtQkFBbUIsRUFBRSxPQUFGLENBQVUsRUFBQyxNQUFNLHFCQUFVLE1BQWpCLEVBQVYsQ0FBekI7QUFDQSxJQUFNLG1CQUFtQixFQUFFLE9BQUYsQ0FBVSxFQUFDLE1BQU0scUJBQVUsTUFBakIsRUFBVixDQUF6QjtBQUNBLElBQU0sWUFBWSxFQUFFLE9BQUYsQ0FBVSxFQUFDLE1BQU0scUJBQVUsR0FBakIsRUFBVixDQUFsQjtBQUNBLElBQU0sYUFBYSxFQUFFLE9BQUYsQ0FBVSxFQUFDLE1BQU0scUJB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QVosQ0FBdUIsS0FBSyxLQUE1QixDQUFUO0FBQ0EsZ0JBQVEsRUFBUjtBQUNFLGVBQUssRUFBTDtBQUNFLGdCQUFJLFFBQVEsS0FBSyxRQUFMLENBQWMsU0FBZCxFQUF5QixpQkFBekIsQ0FBWjtBQUNBLGlCQUFLLEtBQUw7QUFDQSxtQkFBTyxFQUFDLE1BQU0scUJBQVUsUUFBakIsRUFBMkIsTUFBTSxJQUFqQyxFQUF1QyxRQUFRLEtBQS9DLEVBQXNELE9BQU8sS0FBN0QsRUFBUDtBQUNGLGVBQUssRUFBTDtBQUNFLGdCQUFJLEtBQUssTUFBTCxDQUFZLFVBQVosQ0FBdUIsS0FBSyxLQUFMLEdBQWEsQ0FBcEMsTUFBMkMsR0FBL0MsRUFBb0Q7QUFDbEQsa0JBQUksVUFBUSxLQUFLLFFBQUwsQ0FBYyxTQUFkLEVBQXlCLGlCQUF6QixDQUFaO0FBQ0EsbUJBQUssS0FBTCxJQUFjLENBQWQ7QUFDQSxxQkFBTyxFQUFDLE1BQU0scUJBQVUsUUFBakIsRUFBMkIsTUFBTSxLQUFqQyxFQUF3QyxRQUFRLElBQWhELEVBQXNELE9BQU8sT0FBN0QsRUFBUDtBQUNEO0FBQ0QsaUJBQUssS0FBTDtBQUNBO0FBQ0YsZUFBSyxFQUFMO0FBQ0U7QUFDRSxrQkFBSSxRQUFRLEtBQUssZ0JBQUwsQ0FBc0IsRUFBdEIsRUFBMEIsSUFBMUIsRUFBZ0MsQ0FBaEMsQ0FBWjtBQUNBLGtCQUFJLFNBQVMsSUFBYixFQUFtQjtBQUNqQixzQkFBTSxLQUFLLGFBQUwsRUFBTjtBQUNEO0FBQ0Q7QUFDRDtBQUNIO0FBQ0UsaUJBQUssS0FBTDtBQXRCSjtBQXdCRDtBQUNELFlBQU0sS0FBSyxhQUFMLEVBQU47QUFDRDs7Ozs7O2tCQTVKa0IsTSIsImZpbGUiOiJzaGlmdC1yZWFkZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVG9rZW5pemVyIGZyb20gXCJzaGlmdC1wYXJzZXIvZGlzdC90b2tlbml6ZXJcIjtcbmltcG9ydCB7VG9rZW5DbGFzcywgVG9rZW5UeXBlfSBmcm9tIFwic2hpZnQtcGFyc2VyL2Rpc3QvdG9rZW5pemVyXCI7XG5pbXBvcnQge0xpc3R9IGZyb20gXCJpbW11dGFibGVcIjtcbmltcG9ydCBTeW50YXggZnJvbSBcIi4vc3ludGF4XCI7XG5pbXBvcnQgICogYXMgUiBmcm9tIFwicmFtZGFcIjtcbmltcG9ydCB7TWF5YmV9IGZyb20gXCJyYW1kYS1mYW50YXN5XCI7XG5pbXBvcnQge2Fzc2VydH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5jb25zdCBKdXN0XzQ4OSA9IE1heWJlLkp1c3Q7XG5jb25zdCBOb3RoaW5nXzQ5MCA9IE1heWJlLk5vdGhpbmc7XG5pbXBvcnQgVGVybSBmcm9tIFwiLi90ZXJtc1wiO1xuY29uc3QgTFNZTlRBWF80OTEgPSB7bmFtZTogXCJsZWZ0LXN5bnRheFwifTtcbmNvbnN0IFJTWU5UQVhfNDkyID0ge25hbWU6IFwicmlnaHQtc3ludGF4XCJ9O1xuY29uc3QgQVRfNDkzID0ge2tsYXNzOiBUb2tlbkNsYXNzLlB1bmN0dWF0b3IsIG5hbWU6IFwiQFwifTtcbmNvbnN0IGxpdGVyYWxLZXl3b3Jkc180OTQgPSBbXCJ0aGlzXCIsIFwibnVsbFwiLCBcInRydWVcIiwgXCJmYWxzZVwiXTtcbmNvbnN0IGlzTGVmdEJyYWNrZXRfNDk1ID0gUi53aGVyZUVxKHt0eXBlOiBUb2tlblR5cGUuTEJSQUNLfSk7XG5jb25zdCBpc0xlZnRCcmFjZV80OTYgPSBSLndoZXJlRXEoe3R5cGU6IFRva2VuVHlwZS5MQlJBQ0V9KTtcbmNvbnN0IGlzTGVmdFBhcmVuXzQ5NyA9IFIud2hlcmVFcSh7dHlwZTogVG9rZW5UeXBlLkxQQVJFTn0pO1xuY29uc3QgaXNSaWdodEJyYWNrZXRfNDk4ID0gUi53aGVyZUVxKHt0eXBlOiBUb2tlblR5cGUuUkJSQUNLfSk7XG5jb25zdCBpc1JpZ2h0QnJhY2VfNDk5ID0gUi53aGVyZUVxKHt0eXBlOiBUb2tlblR5cGUuUkJSQUNFfSk7XG5jb25zdCBpc1JpZ2h0UGFyZW5fNTAwID0gUi53aGVyZUVxKHt0eXBlOiBUb2tlblR5cGUuUlBBUkVOfSk7XG5jb25zdCBpc0VPU181MDEgPSBSLndoZXJlRXEoe3R5cGU6IFRva2VuVHlwZS5FT1N9KTtcbmNvbnN0IGlzSGFzaF81MDIgPSBSLndoZXJlRXEoe3R5cGU6IFRva2VuVHlwZS5JREVOVElGSUVSLCB2YWx1ZTogXCIjXCJ9KTtcbmNvbnN0IGlzTGVmdFN5bnRheF81MDMgPSBSLndoZXJlRXEoe3R5cGU6IExTWU5UQVhfNDkxfSk7XG5jb25zdCBpc1JpZ2h0U3ludGF4XzUwNCA9IFIud2hlcmVFcSh7dHlwZTogUlNZTlRBWF80OTJ9KTtcbmNvbnN0IGlzTGVmdERlbGltaXRlcl81MDUgPSBSLmFueVBhc3MoW2lzTGVmdEJyYWNrZXRfNDk1LCBpc0xlZnRCcmFjZV80OTYsIGlzTGVmdFBhcmVuXzQ5NywgaXNMZWZ0U3ludGF4XzUwM10pO1xuY29uc3QgaXNSaWdodERlbGltaXRlcl81MDYgPSBSLmFueVBhc3MoW2lzUmlnaHRCcmFja2V0XzQ5OCwgaXNSaWdodEJyYWNlXzQ5OSwgaXNSaWdodFBhcmVuXzUwMCwgaXNSaWdodFN5bnRheF81MDRdKTtcbmNvbnN0IGlzTWF0Y2hpbmdEZWxpbWl0ZXJzXzUwNyA9IFIuY29uZChbW2lzTGVmdEJyYWNrZXRfNDk1LCAoX181NDgsIGJfNTQ5KSA9PiBpc1JpZ2h0QnJhY2tldF80OTgoYl81NDkpXSwgW2lzTGVmdEJyYWNlXzQ5NiwgKF9fNTUwLCBiXzU1MSkgPT4gaXNSaWdodEJyYWNlXzQ5OShiXzU1MSldLCBbaXNMZWZ0UGFyZW5fNDk3LCAoX181NTIsIGJfNTUzKSA9PiBpc1JpZ2h0UGFyZW5fNTAwKGJfNTUzKV0sIFtpc0xlZnRTeW50YXhfNTAzLCAoX181NTQsIGJfNTU1KSA9PiBpc1JpZ2h0U3ludGF4XzUwNChiXzU1NSldLCBbUi5ULCBSLkZdXSk7XG5jb25zdCBhc3NpZ25PcHNfNTA4ID0gW1wiPVwiLCBcIis9XCIsIFwiLT1cIiwgXCIqPVwiLCBcIi89XCIsIFwiJT1cIiwgXCI8PD1cIiwgXCI+Pj1cIiwgXCI+Pj49XCIsIFwiJj1cIiwgXCJ8PVwiLCBcIl49XCIsIFwiLFwiXTtcbmNvbnN0IGJpbmFyeU9wc181MDkgPSBbXCIrXCIsIFwiLVwiLCBcIipcIiwgXCIvXCIsIFwiJVwiLCBcIjw8XCIsIFwiPj5cIiwgXCI+Pj5cIiwgXCImXCIsIFwifFwiLCBcIl5cIiwgXCImJlwiLCBcInx8XCIsIFwiP1wiLCBcIjpcIiwgXCI9PT1cIiwgXCI9PVwiLCBcIj49XCIsIFwiPD1cIiwgXCI8XCIsIFwiPlwiLCBcIiE9XCIsIFwiIT09XCIsIFwiaW5zdGFuY2VvZlwiXTtcbmNvbnN0IHVuYXJ5T3BzXzUxMCA9IFtcIisrXCIsIFwiLS1cIiwgXCJ+XCIsIFwiIVwiLCBcImRlbGV0ZVwiLCBcInZvaWRcIiwgXCJ0eXBlb2ZcIiwgXCJ5aWVsZFwiLCBcInRocm93XCIsIFwibmV3XCJdO1xuY29uc3QgaXNFbXB0eV81MTEgPSBSLndoZXJlRXEoe3NpemU6IDB9KTtcbmNvbnN0IGlzUHVuY3R1YXRvcl81MTIgPSBzXzU1NiA9PiBzXzU1Ni5pc1B1bmN0dWF0b3IoKTtcbmNvbnN0IGlzS2V5d29yZF81MTMgPSBzXzU1NyA9PiBzXzU1Ny5pc0tleXdvcmQoKTtcbmNvbnN0IGlzRGVsaW1pdGVyXzUxNCA9IHNfNTU4ID0+IHNfNTU4LmlzRGVsaW1pdGVyKCk7XG5jb25zdCBpc1BhcmVuc181MTUgPSBzXzU1OSA9PiBzXzU1OS5pc1BhcmVucygpO1xuY29uc3QgaXNCcmFjZXNfNTE2ID0gc181NjAgPT4gc181NjAuaXNCcmFjZXMoKTtcbmNvbnN0IGlzQnJhY2tldHNfNTE3ID0gc181NjEgPT4gc181NjEuaXNCcmFja2V0cygpO1xuY29uc3QgaXNJZGVudGlmaWVyXzUxOCA9IHNfNTYyID0+IHNfNTYyLmlzSWRlbnRpZmllcigpO1xuY29uc3QgdmFsXzUxOSA9IHNfNTYzID0+IHNfNTYzLnZhbCgpO1xuY29uc3QgaXNWYWxfNTIwID0gUi5jdXJyeSgodl81NjQsIHNfNTY1KSA9PiBzXzU2NS52YWwoKSA9PT0gdl81NjQpO1xuY29uc3QgaXNEb3RfNTIxID0gUi5hbGxQYXNzKFtpc1B1bmN0dWF0b3JfNTEyLCBpc1ZhbF81MjAoXCIuXCIpXSk7XG5jb25zdCBpc0NvbG9uXzUyMiA9IFIuYWxsUGFzcyhbaXNQdW5jdHVhdG9yXzUxMiwgaXNWYWxfNTIwKFwiOlwiKV0pO1xuY29uc3QgaXNGdW5jdGlvbktleXdvcmRfNTIzID0gUi5hbGxQYXNzKFtpc0tleXdvcmRfNTEzLCBpc1ZhbF81MjAoXCJmdW5jdGlvblwiKV0pO1xuY29uc3QgaXNPcGVyYXRvcl81MjQgPSBzXzU2NiA9PiAoc181NjYuaXNQdW5jdHVhdG9yKCkgfHwgc181NjYuaXNLZXl3b3JkKCkpICYmIFIuYW55KFIuZXF1YWxzKHNfNTY2LnZhbCgpKSwgYXNzaWduT3BzXzUwOC5jb25jYXQoYmluYXJ5T3BzXzUwOSkuY29uY2F0KHVuYXJ5T3BzXzUxMCkpO1xuY29uc3QgaXNOb25MaXRlcmFsS2V5d29yZF81MjUgPSBSLmFsbFBhc3MoW2lzS2V5d29yZF81MTMsIHNfNTY3ID0+IFIubm9uZShSLmVxdWFscyhzXzU2Ny52YWwoKSksIGxpdGVyYWxLZXl3b3Jkc180OTQpXSk7XG5jb25zdCBpc0tleXdvcmRFeHByUHJlZml4XzUyNiA9IFIuYWxsUGFzcyhbaXNLZXl3b3JkXzUxMywgc181NjggPT4gUi5hbnkoUi5lcXVhbHMoc181NjgudmFsKCkpLCBbXCJpbnN0YW5jZW9mXCIsIFwidHlwZW9mXCIsIFwiZGVsZXRlXCIsIFwidm9pZFwiLCBcInlpZWxkXCIsIFwidGhyb3dcIiwgXCJuZXdcIiwgXCJjYXNlXCJdKV0pO1xubGV0IGxhc3RfNTI3ID0gcF81NjkgPT4gcF81NjkubGFzdCgpO1xubGV0IHNhZmVMYXN0XzUyOCA9IFIucGlwZShSLmNvbmQoW1tpc0VtcHR5XzUxMSwgUi5hbHdheXMoTm90aGluZ180OTAoKSldLCBbUi5ULCBSLmNvbXBvc2UoTWF5YmUub2YsIGxhc3RfNTI3KV1dKSk7XG5sZXQgc3R1ZmZUcnVlXzUyOSA9IFIuY3VycnkoKHBfNTcwLCBiXzU3MSkgPT4gYl81NzEgPyBKdXN0XzQ4OShwXzU3MCkgOiBOb3RoaW5nXzQ5MCgpKTtcbmxldCBzdHVmZkZhbHNlXzUzMCA9IFIuY3VycnkoKHBfNTcyLCBiXzU3MykgPT4gIWJfNTczID8gSnVzdF80ODkocF81NzIpIDogTm90aGluZ180OTAoKSk7XG5sZXQgaXNUb3BDb2xvbl81MzEgPSBSLnBpcGUoc2FmZUxhc3RfNTI4LCBSLm1hcChpc0NvbG9uXzUyMiksIE1heWJlLm1heWJlKGZhbHNlLCBSLmlkZW50aXR5KSk7XG5sZXQgaXNUb3BQdW5jdHVhdG9yXzUzMiA9IFIucGlwZShzYWZlTGFzdF81MjgsIFIubWFwKGlzUHVuY3R1YXRvcl81MTIpLCBNYXliZS5tYXliZShmYWxzZSwgUi5pZGVudGl0eSkpO1xubGV0IGlzRXhwclJldHVybl81MzMgPSBSLmN1cnJ5KChsXzU3NCwgcF81NzUpID0+IHtcbiAgbGV0IHJldEt3ZF81NzYgPSBzYWZlTGFzdF81MjgocF81NzUpO1xuICBsZXQgbWF5YmVEb3RfNTc3ID0gcG9wXzU0NChwXzU3NSkuY2hhaW4oc2FmZUxhc3RfNTI4KTtcbiAgaWYgKG1heWJlRG90XzU3Ny5tYXAoaXNEb3RfNTIxKS5nZXRPckVsc2UoZmFsc2UpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJldEt3ZF81NzYubWFwKHNfNTc4ID0+IHtcbiAgICByZXR1cm4gc181NzguaXNLZXl3b3JkKCkgJiYgc181NzgudmFsKCkgPT09IFwicmV0dXJuXCIgJiYgc181NzgubGluZU51bWJlcigpID09PSBsXzU3NDtcbiAgfSkuZ2V0T3JFbHNlKGZhbHNlKTtcbn0pO1xuY29uc3QgaXNUb3BPcGVyYXRvcl81MzQgPSBSLnBpcGUoc2FmZUxhc3RfNTI4LCBSLm1hcChpc09wZXJhdG9yXzUyNCksIE1heWJlLm1heWJlKGZhbHNlLCBSLmlkZW50aXR5KSk7XG5jb25zdCBpc1RvcEtleXdvcmRFeHByUHJlZml4XzUzNSA9IFIucGlwZShzYWZlTGFzdF81MjgsIFIubWFwKGlzS2V5d29yZEV4cHJQcmVmaXhfNTI2KSwgTWF5YmUubWF5YmUoZmFsc2UsIFIuaWRlbnRpdHkpKTtcbmxldCBpc0V4cHJQcmVmaXhfNTM2ID0gUi5jdXJyeSgobF81NzksIGJfNTgwKSA9PiBSLmNvbmQoW1tpc0VtcHR5XzUxMSwgUi5hbHdheXMoYl81ODApXSwgW2lzVG9wQ29sb25fNTMxLCBSLmFsd2F5cyhiXzU4MCldLCBbaXNUb3BLZXl3b3JkRXhwclByZWZpeF81MzUsIFIuVF0sIFtpc1RvcE9wZXJhdG9yXzUzNCwgUi5UXSwgW2lzVG9wUHVuY3R1YXRvcl81MzIsIFIuYWx3YXlzKGJfNTgwKV0sIFtpc0V4cHJSZXR1cm5fNTMzKGxfNTc5KSwgUi5UXSwgW1IuVCwgUi5GXV0pKTtcbmxldCBjdXJseV81MzcgPSBwXzU4MSA9PiBzYWZlTGFzdF81MjgocF81ODEpLm1hcChpc0JyYWNlc181MTYpLmNoYWluKHN0dWZmVHJ1ZV81MjkocF81ODEpKTtcbmxldCBwYXJlbl81MzggPSBwXzU4MiA9PiBzYWZlTGFzdF81MjgocF81ODIpLm1hcChpc1BhcmVuc181MTUpLmNoYWluKHN0dWZmVHJ1ZV81MjkocF81ODIpKTtcbmxldCBmdW5jXzUzOSA9IHBfNTgzID0+IHNhZmVMYXN0XzUyOChwXzU4MykubWFwKGlzRnVuY3Rpb25LZXl3b3JkXzUyMykuY2hhaW4oc3R1ZmZUcnVlXzUyOShwXzU4MykpO1xubGV0IGlkZW50XzU0MCA9IHBfNTg0ID0+IHNhZmVMYXN0XzUyOChwXzU4NCkubWFwKGlzSWRlbnRpZmllcl81MTgpLmNoYWluKHN0dWZmVHJ1ZV81MjkocF81ODQpKTtcbmxldCBub25MaXRlcmFsS2V5d29yZF81NDEgPSBwXzU4NSA9PiBzYWZlTGFzdF81MjgocF81ODUpLm1hcChpc05vbkxpdGVyYWxLZXl3b3JkXzUyNSkuY2hhaW4oc3R1ZmZUcnVlXzUyOShwXzU4NSkpO1xubGV0IG9wdF81NDIgPSBSLmN1cnJ5KChhXzU4NiwgYl81ODcsIHBfNTg4KSA9PiB7XG4gIGxldCByZXN1bHRfNTg5ID0gUi5waXBlSyhhXzU4NiwgYl81ODcpKE1heWJlLm9mKHBfNTg4KSk7XG4gIHJldHVybiBNYXliZS5pc0p1c3QocmVzdWx0XzU4OSkgPyByZXN1bHRfNTg5IDogTWF5YmUub2YocF81ODgpO1xufSk7XG5sZXQgbm90RG90XzU0MyA9IFIuaWZFbHNlKFIud2hlcmVFcSh7c2l6ZTogMH0pLCBKdXN0XzQ4OSwgcF81OTAgPT4gc2FmZUxhc3RfNTI4KHBfNTkwKS5tYXAoc181OTEgPT4gIShzXzU5MS5pc1B1bmN0dWF0b3IoKSAmJiBzXzU5MS52YWwoKSA9PT0gXCIuXCIpKS5jaGFpbihzdHVmZlRydWVfNTI5KHBfNTkwKSkpO1xubGV0IHBvcF81NDQgPSBSLmNvbXBvc2UoSnVzdF80ODksIHBfNTkyID0+IHBfNTkyLnBvcCgpKTtcbmNvbnN0IGZ1bmN0aW9uUHJlZml4XzU0NSA9IFIucGlwZUsoY3VybHlfNTM3LCBwb3BfNTQ0LCBwYXJlbl81MzgsIHBvcF81NDQsIG9wdF81NDIoaWRlbnRfNTQwLCBwb3BfNTQ0KSwgZnVuY181MzkpO1xuY29uc3QgaXNSZWdleFByZWZpeF81NDYgPSBiXzU5MyA9PiBSLmFueVBhc3MoW2lzRW1wdHlfNTExLCBpc1RvcFB1bmN0dWF0b3JfNTMyLCBSLnBpcGUoTWF5YmUub2YsIFIucGlwZUsobm9uTGl0ZXJhbEtleXdvcmRfNTQxLCBwb3BfNTQ0LCBub3REb3RfNTQzKSwgTWF5YmUuaXNKdXN0KSwgUi5waXBlKE1heWJlLm9mLCBSLnBpcGVLKHBhcmVuXzUzOCwgcG9wXzU0NCwgbm9uTGl0ZXJhbEtleXdvcmRfNTQxLCBwb3BfNTQ0LCBub3REb3RfNTQzKSwgTWF5YmUuaXNKdXN0KSwgUi5waXBlKE1heWJlLm9mLCBmdW5jdGlvblByZWZpeF81NDUsIFIuY2hhaW4ocF81OTQgPT4ge1xuICByZXR1cm4gc2FmZUxhc3RfNTI4KHBfNTk0KS5tYXAoc181OTUgPT4gc181OTUubGluZU51bWJlcigpKS5jaGFpbihmbkxpbmVfNTk2ID0+IHtcbiAgICByZXR1cm4gcG9wXzU0NChwXzU5NCkubWFwKGlzRXhwclByZWZpeF81MzYoZm5MaW5lXzU5NiwgYl81OTMpKTtcbiAgfSkuY2hhaW4oc3R1ZmZGYWxzZV81MzAocF81OTQpKTtcbn0pLCBNYXliZS5pc0p1c3QpLCBwXzU5NyA9PiB7XG4gIGxldCBpc0N1cmx5XzU5OCA9IE1heWJlLmlzSnVzdChzYWZlTGFzdF81MjgocF81OTcpLm1hcChpc0JyYWNlc181MTYpKTtcbiAgbGV0IGFscmVhZHlDaGVja2VkRnVuY3Rpb25fNTk5ID0gUi5waXBlKE1heWJlLm9mLCBmdW5jdGlvblByZWZpeF81NDUsIE1heWJlLmlzSnVzdCkocF81OTcpO1xuICBpZiAoYWxyZWFkeUNoZWNrZWRGdW5jdGlvbl81OTkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIFIucGlwZShNYXliZS5vZiwgUi5jaGFpbihjdXJseV81MzcpLCBSLmNoYWluKHBfNjAwID0+IHtcbiAgICByZXR1cm4gc2FmZUxhc3RfNTI4KHBfNjAwKS5tYXAoc182MDEgPT4gc182MDEubGluZU51bWJlcigpKS5jaGFpbihjdXJseUxpbmVfNjAyID0+IHtcbiAgICAgIHJldHVybiBwb3BfNTQ0KHBfNjAwKS5tYXAoaXNFeHByUHJlZml4XzUzNihjdXJseUxpbmVfNjAyLCBiXzU5MykpO1xuICAgIH0pLmNoYWluKHN0dWZmRmFsc2VfNTMwKHBfNjAwKSk7XG4gIH0pLCBNYXliZS5pc0p1c3QpKHBfNTk3KTtcbn1dKTtcbmZ1bmN0aW9uIGxhc3RFbF81NDcobF82MDMpIHtcbiAgcmV0dXJuIGxfNjAzW2xfNjAzLmxlbmd0aCAtIDFdO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhZGVyIGV4dGVuZHMgVG9rZW5pemVyIHtcbiAgY29uc3RydWN0b3Ioc3RyaW5nc182MDQsIGNvbnRleHRfNjA1LCByZXBsYWNlbWVudHNfNjA2KSB7XG4gICAgc3VwZXIoQXJyYXkuaXNBcnJheShzdHJpbmdzXzYwNCkgPyBzdHJpbmdzXzYwNC5qb2luKFwiXCIpIDogc3RyaW5nc182MDQpO1xuICAgIHRoaXMuZGVsaW1TdGFjayA9IG5ldyBNYXA7XG4gICAgdGhpcy5pbnNpZGVTeW50YXhUZW1wbGF0ZSA9IFtmYWxzZV07XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dF82MDU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3RyaW5nc182MDQpKSB7XG4gICAgICBsZXQgdG90YWxJbmRleCA9IDA7XG4gICAgICB0aGlzLnJlcGxhY2VtZW50SW5kZXggPSBSLnJlZHVjZSgoYWNjXzYwNywgc3RyUmVwXzYwOCkgPT4ge1xuICAgICAgICBhY2NfNjA3LnB1c2goe2luZGV4OiB0b3RhbEluZGV4ICsgc3RyUmVwXzYwOFswXS5sZW5ndGgsIHJlcGxhY2VtZW50OiBzdHJSZXBfNjA4WzFdfSk7XG4gICAgICAgIHRvdGFsSW5kZXggKz0gc3RyUmVwXzYwOFswXS5sZW5ndGg7XG4gICAgICAgIHJldHVybiBhY2NfNjA3O1xuICAgICAgfSwgW10sIFIuemlwKHN0cmluZ3NfNjA0LCByZXBsYWNlbWVudHNfNjA2KSk7XG4gICAgfVxuICB9XG4gIHJlYWQoc3RhY2tfNjA5ID0gW10sIGJfNjEwID0gZmFsc2UsIHNpbmdsZURlbGltaXRlcl82MTEgPSBmYWxzZSkge1xuICAgIGxldCBwcmVmaXhfNjEyID0gTGlzdCgpO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBsZXQgdG9rID0gdGhpcy5hZHZhbmNlKHByZWZpeF82MTIsIGJfNjEwKTtcbiAgICAgIGlmICh0b2sgaW5zdGFuY2VvZiBTeW50YXggfHwgdG9rIGluc3RhbmNlb2YgVGVybSkge1xuICAgICAgICBzdGFja182MDkucHVzaCh0b2spO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRvaykpIHtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoc3RhY2tfNjA5LCB0b2spO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChMaXN0LmlzTGlzdCh0b2spKSB7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHN0YWNrXzYwOSwgdG9rLnRvQXJyYXkoKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzRU9TXzUwMSh0b2spKSB7XG4gICAgICAgIGlmIChzdGFja182MDlbMF0gJiYgaXNMZWZ0RGVsaW1pdGVyXzUwNShzdGFja182MDlbMF0udG9rZW4pKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5jcmVhdGVVbmV4cGVjdGVkKHRvayk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaXNMZWZ0RGVsaW1pdGVyXzUwNSh0b2spKSB7XG4gICAgICAgIGlmIChpc0xlZnRTeW50YXhfNTAzKHRvaykpIHtcbiAgICAgICAgICB0aGlzLmluc2lkZVN5bnRheFRlbXBsYXRlLnB1c2godHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxpbmUgPSB0b2suc2xpY2Uuc3RhcnRMb2NhdGlvbi5saW5lO1xuICAgICAgICBsZXQgaW5uZXJCID0gaXNMZWZ0QnJhY2VfNDk2KHRvaykgPyBpc0V4cHJQcmVmaXhfNTM2KGxpbmUsIGJfNjEwKShwcmVmaXhfNjEyKSA6IHRydWU7XG4gICAgICAgIGxldCBpbm5lciA9IHRoaXMucmVhZChbbmV3IFN5bnRheCh0b2spXSwgaW5uZXJCLCBmYWxzZSk7XG4gICAgICAgIGxldCBzdHggPSBuZXcgU3ludGF4KGlubmVyLCB0aGlzLmNvbnRleHQpO1xuICAgICAgICBwcmVmaXhfNjEyID0gcHJlZml4XzYxMi5jb25jYXQoc3R4KTtcbiAgICAgICAgc3RhY2tfNjA5LnB1c2goc3R4KTtcbiAgICAgICAgaWYgKHNpbmdsZURlbGltaXRlcl82MTEpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1JpZ2h0RGVsaW1pdGVyXzUwNih0b2spKSB7XG4gICAgICAgIGlmIChzdGFja182MDlbMF0gJiYgIWlzTWF0Y2hpbmdEZWxpbWl0ZXJzXzUwNyhzdGFja182MDlbMF0udG9rZW4sIHRvaykpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmNyZWF0ZVVuZXhwZWN0ZWQodG9rKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3R4ID0gbmV3IFN5bnRheCh0b2ssIHRoaXMuY29udGV4dCk7XG4gICAgICAgIHN0YWNrXzYwOS5wdXNoKHN0eCk7XG4gICAgICAgIGlmIChsYXN0RWxfNTQ3KHRoaXMuaW5zaWRlU3ludGF4VGVtcGxhdGUpICYmIGlzUmlnaHRTeW50YXhfNTA0KHRvaykpIHtcbiAgICAgICAgICB0aGlzLmluc2lkZVN5bnRheFRlbXBsYXRlLnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHN0eCA9IG5ldyBTeW50YXgodG9rLCB0aGlzLmNvbnRleHQpO1xuICAgICAgICBwcmVmaXhfNjEyID0gcHJlZml4XzYxMi5jb25jYXQoc3R4KTtcbiAgICAgICAgc3RhY2tfNjA5LnB1c2goc3R4KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIExpc3Qoc3RhY2tfNjA5KTtcbiAgfVxuICBhZHZhbmNlKHByZWZpeF82MTMsIGJfNjE0KSB7XG4gICAgbGV0IHN0YXJ0TG9jYXRpb25fNjE1ID0gdGhpcy5nZXRMb2NhdGlvbigpO1xuICAgIHRoaXMubGFzdEluZGV4ID0gdGhpcy5pbmRleDtcbiAgICB0aGlzLmxhc3RMaW5lID0gdGhpcy5saW5lO1xuICAgIHRoaXMubGFzdExpbmVTdGFydCA9IHRoaXMubGluZVN0YXJ0O1xuICAgIHRoaXMuc2tpcENvbW1lbnQoKTtcbiAgICB0aGlzLnN0YXJ0SW5kZXggPSB0aGlzLmluZGV4O1xuICAgIHRoaXMuc3RhcnRMaW5lID0gdGhpcy5saW5lO1xuICAgIHRoaXMuc3RhcnRMaW5lU3RhcnQgPSB0aGlzLmxpbmVTdGFydDtcbiAgICBpZiAodGhpcy5yZXBsYWNlbWVudEluZGV4ICYmIHRoaXMucmVwbGFjZW1lbnRJbmRleFswXSAmJiB0aGlzLmluZGV4ID49IHRoaXMucmVwbGFjZW1lbnRJbmRleFswXS5pbmRleCkge1xuICAgICAgbGV0IHJlcCA9IHRoaXMucmVwbGFjZW1lbnRJbmRleFswXS5yZXBsYWNlbWVudDtcbiAgICAgIHRoaXMucmVwbGFjZW1lbnRJbmRleC5zaGlmdCgpO1xuICAgICAgcmV0dXJuIHJlcDtcbiAgICB9XG4gICAgbGV0IGNoYXJDb2RlXzYxNiA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7XG4gICAgaWYgKGNoYXJDb2RlXzYxNiA9PT0gOTYpIHtcbiAgICAgIGxldCBlbGVtZW50LCBpdGVtcyA9IFtdO1xuICAgICAgbGV0IHN0YXJ0TG9jYXRpb25fNjE1ID0gdGhpcy5nZXRMb2NhdGlvbigpO1xuICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5pbmRleDtcbiAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgIGlmIChsYXN0RWxfNTQ3KHRoaXMuaW5zaWRlU3ludGF4VGVtcGxhdGUpKSB7XG4gICAgICAgIGxldCBzbGljZSA9IHRoaXMuZ2V0U2xpY2Uoc3RhcnQsIHN0YXJ0TG9jYXRpb25fNjE1KTtcbiAgICAgICAgcmV0dXJuIHt0eXBlOiBSU1lOVEFYXzQ5MiwgdmFsdWU6IFwiYFwiLCBzbGljZTogc2xpY2V9O1xuICAgICAgfVxuICAgICAgZG8ge1xuICAgICAgICBlbGVtZW50ID0gdGhpcy5zY2FuVGVtcGxhdGVFbGVtZW50KCk7XG4gICAgICAgIGl0ZW1zLnB1c2goZWxlbWVudCk7XG4gICAgICAgIGlmIChlbGVtZW50LmludGVycCkge1xuICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLnJlYWQoW10sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICBhc3NlcnQoZWxlbWVudC5zaXplID09PSAxLCBcInNob3VsZCBvbmx5IGhhdmUgcmVhZCBhIHNpbmdsZSBkZWxpbWl0ZXIgaW5zaWRlIGEgdGVtcGxhdGVcIik7XG4gICAgICAgICAgaXRlbXMucHVzaChlbGVtZW50LmdldCgwKSk7XG4gICAgICAgIH1cbiAgICAgIH0gd2hpbGUgKCFlbGVtZW50LnRhaWwpO1xuICAgICAgcmV0dXJuIHt0eXBlOiBUb2tlblR5cGUuVEVNUExBVEUsIGl0ZW1zOiBMaXN0KGl0ZW1zKX07XG4gICAgfSBlbHNlIGlmIChjaGFyQ29kZV82MTYgPT09IDM1KSB7XG4gICAgICBsZXQgc3RhcnRMb2NhdGlvbl82MTUgPSB0aGlzLmdldExvY2F0aW9uKCk7XG4gICAgICBsZXQgc3RhcnQgPSB0aGlzLmluZGV4O1xuICAgICAgbGV0IHNsaWNlID0gdGhpcy5nZXRTbGljZShzdGFydCwgc3RhcnRMb2NhdGlvbl82MTUpO1xuICAgICAgdGhpcy5pbmRleCsrO1xuICAgICAgaWYgKHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkgPT09IDk2KSB7XG4gICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgICAgcmV0dXJuIHt0eXBlOiBMU1lOVEFYXzQ5MSwgdmFsdWU6IFwiI2BcIiwgc2xpY2U6IHNsaWNlfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7dHlwZTogVG9rZW5UeXBlLklERU5USUZJRVIsIHZhbHVlOiBcIiNcIiwgc2xpY2U6IHNsaWNlfTtcbiAgICB9IGVsc2UgaWYgKGNoYXJDb2RlXzYxNiA9PT0gNjQpIHtcbiAgICAgIGxldCBzdGFydExvY2F0aW9uXzYxNSA9IHRoaXMuZ2V0TG9jYXRpb24oKTtcbiAgICAgIGxldCBzdGFydCA9IHRoaXMuaW5kZXg7XG4gICAgICBsZXQgc2xpY2UgPSB0aGlzLmdldFNsaWNlKHN0YXJ0LCBzdGFydExvY2F0aW9uXzYxNSk7XG4gICAgICB0aGlzLmluZGV4Kys7XG4gICAgICByZXR1cm4ge3R5cGU6IEFUXzQ5MywgdmFsdWU6IFwiQFwiLCBzbGljZTogc2xpY2V9O1xuICAgIH1cbiAgICBsZXQgbG9va2FoZWFkXzYxNyA9IHN1cGVyLmFkdmFuY2UoKTtcbiAgICBpZiAobG9va2FoZWFkXzYxNy50eXBlID09PSBUb2tlblR5cGUuRElWICYmIGlzUmVnZXhQcmVmaXhfNTQ2KGJfNjE0KShwcmVmaXhfNjEzKSkge1xuICAgICAgcmV0dXJuIHN1cGVyLnNjYW5SZWdFeHAoXCIvXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbG9va2FoZWFkXzYxNztcbiAgfVxuICBzY2FuVGVtcGxhdGVFbGVtZW50KCkge1xuICAgIGxldCBzdGFydExvY2F0aW9uXzYxOCA9IHRoaXMuZ2V0TG9jYXRpb24oKTtcbiAgICBsZXQgc3RhcnRfNjE5ID0gdGhpcy5pbmRleDtcbiAgICB3aGlsZSAodGhpcy5pbmRleCA8IHRoaXMuc291cmNlLmxlbmd0aCkge1xuICAgICAgbGV0IGNoID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KTtcbiAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgY2FzZSA5NjpcbiAgICAgICAgICBsZXQgc2xpY2UgPSB0aGlzLmdldFNsaWNlKHN0YXJ0XzYxOSwgc3RhcnRMb2NhdGlvbl82MTgpO1xuICAgICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgICAgICByZXR1cm4ge3R5cGU6IFRva2VuVHlwZS5URU1QTEFURSwgdGFpbDogdHJ1ZSwgaW50ZXJwOiBmYWxzZSwgc2xpY2U6IHNsaWNlfTtcbiAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICBpZiAodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMSkgPT09IDEyMykge1xuICAgICAgICAgICAgbGV0IHNsaWNlID0gdGhpcy5nZXRTbGljZShzdGFydF82MTksIHN0YXJ0TG9jYXRpb25fNjE4KTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMTtcbiAgICAgICAgICAgIHJldHVybiB7dHlwZTogVG9rZW5UeXBlLlRFTVBMQVRFLCB0YWlsOiBmYWxzZSwgaW50ZXJwOiB0cnVlLCBzbGljZTogc2xpY2V9O1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmluZGV4Kys7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOTI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgbGV0IG9jdGFsID0gdGhpcy5zY2FuU3RyaW5nRXNjYXBlKFwiXCIsIG51bGwpWzFdO1xuICAgICAgICAgICAgaWYgKG9jdGFsICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgdGhyb3cgdGhpcy5jcmVhdGVJTExFR0FMKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy5pbmRleCsrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyB0aGlzLmNyZWF0ZUlMTEVHQUwoKTtcbiAgfVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3NoaWZ0LXJlYWRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7Ozs7QUFFQTs7QUFDQTs7OztBQUNBOztJQUFhLEM7O0FBQ2I7O0FBQ0E7O0FBR0E7Ozs7Ozs7Ozs7Ozs7O0FBRkEsSUFBTSxXQUFXLG9CQUFNLElBQXZCO0FBQ0EsSUFBTSxjQUFjLG9CQUFNLE9BQTFCOztBQUVBLElBQU0sY0FBYyxFQUFDLE1BQU0sYUFBUCxFQUFwQjtBQUNBLElBQU0sY0FBYyxFQUFDLE1BQU0sY0FBUCxFQUFwQjtBQUNBLElBQU0sU0FBUyxFQUFDLE9BQU8sc0JBQVcsVUFBbkIsRUFBK0IsTUFBTSxHQUFyQyxFQUFmO0FBQ0EsSUFBTSxzQkFBc0IsQ0FBQyxNQUFELEVBQVMsTUFBVCxFQUFpQixNQUFqQixFQUF5QixPQUF6QixDQUE1QjtBQUNBLElBQU0sb0JBQW9CLEVBQUUsT0FBRixDQUFVLEVBQUMsTUFBTSxxQkFBVSxNQUFqQixFQUFWLENBQTFCO0FBQ0EsSUFBTSxrQkFBa0IsRUFBRSxPQUFGLENBQVUsRUFBQyxNQUFNLHFCQUFVLE1BQWpCLEVBQVYsQ0FBeEI7QUFDQSxJQUFNLGtCQUFrQixFQUFFLE9BQUYsQ0FBVSxFQUFDLE1BQU0scUJBQVUsTUFBakIsRUFBVixDQUF4QjtBQUNBLElBQU0scUJBQXFCLEVBQUUsT0FBRixDQUFVLEVBQUMsTUFBTSxxQkFBVSxNQUFqQixFQUFWLENBQTNCO0FBQ0EsSUFBTSxtQkFBbUIsRUFBRSxPQUFGLENBQVUsRUFBQyxNQUFNLHFCQUFVLE1BQWpCLEVBQVYsQ0FBekI7QUFDQSxJQUFNLG1CQUFtQixFQUFFLE9BQUYsQ0FBVSxFQUFDLE1BQU0scUJBQVUsTUFBakIsRUFBVixDQUF6QjtBQUNBLElBQU0sWUFBWSxFQUFFLE9BQUYsQ0FBVSxFQUFDLE1BQU0scUJBQVUsR0FBakIsRUFBVixDQUFsQjtBQUNBLElBQU0sYUFBYSxFQUFFLE9BQUYsQ0FBVSxFQUFDLE1BQU0scUJB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QUFtQjtBQUNqQixzQkFBTSxLQUFLLGFBQUwsRUFBTjtBQUNEO0FBQ0Q7QUFDRDtBQUNIO0FBQ0UsaUJBQUssS0FBTDtBQXRCSjtBQXdCRDtBQUNELFlBQU0sS0FBSyxhQUFMLEVBQU47QUFDRDs7Ozs7O2tCQTlLa0IsTSIsImZpbGUiOiJzaGlmdC1yZWFkZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVG9rZW5pemVyIGZyb20gXCJzaGlmdC1wYXJzZXIvZGlzdC90b2tlbml6ZXJcIjtcbmltcG9ydCB7VG9rZW5DbGFzcywgVG9rZW5UeXBlfSBmcm9tIFwic2hpZnQtcGFyc2VyL2Rpc3QvdG9rZW5pemVyXCI7XG5pbXBvcnQge0xpc3R9IGZyb20gXCJpbW11dGFibGVcIjtcbmltcG9ydCBTeW50YXggZnJvbSBcIi4vc3ludGF4XCI7XG5pbXBvcnQgICogYXMgUiBmcm9tIFwicmFtZGFcIjtcbmltcG9ydCB7TWF5YmV9IGZyb20gXCJyYW1kYS1mYW50YXN5XCI7XG5pbXBvcnQge2Fzc2VydH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5jb25zdCBKdXN0XzQ4OSA9IE1heWJlLkp1c3Q7XG5jb25zdCBOb3RoaW5nXzQ5MCA9IE1heWJlLk5vdGhpbmc7XG5pbXBvcnQgVGVybSBmcm9tIFwiLi90ZXJtc1wiO1xuY29uc3QgTFNZTlRBWF80OTEgPSB7bmFtZTogXCJsZWZ0LXN5bnRheFwifTtcbmNvbnN0IFJTWU5UQVhfNDkyID0ge25hbWU6IFwicmlnaHQtc3ludGF4XCJ9O1xuY29uc3QgQVRfNDkzID0ge2tsYXNzOiBUb2tlbkNsYXNzLlB1bmN0dWF0b3IsIG5hbWU6IFwiQFwifTtcbmNvbnN0IGxpdGVyYWxLZXl3b3Jkc180OTQgPSBbXCJ0aGlzXCIsIFwibnVsbFwiLCBcInRydWVcIiwgXCJmYWxzZVwiXTtcbmNvbnN0IGlzTGVmdEJyYWNrZXRfNDk1ID0gUi53aGVyZUVxKHt0eXBlOiBUb2tlblR5cGUuTEJSQUNLfSk7XG5jb25zdCBpc0xlZnRCcmFjZV80OTYgPSBSLndoZXJlRXEoe3R5cGU6IFRva2VuVHlwZS5MQlJBQ0V9KTtcbmNvbnN0IGlzTGVmdFBhcmVuXzQ5NyA9IFIud2hlcmVFcSh7dHlwZTogVG9rZW5UeXBlLkxQQVJFTn0pO1xuY29uc3QgaXNSaWdodEJyYWNrZXRfNDk4ID0gUi53aGVyZUVxKHt0eXBlOiBUb2tlblR5cGUuUkJSQUNLfSk7XG5jb25zdCBpc1JpZ2h0QnJhY2VfNDk5ID0gUi53aGVyZUVxKHt0eXBlOiBUb2tlblR5cGUuUkJSQUNFfSk7XG5jb25zdCBpc1JpZ2h0UGFyZW5fNTAwID0gUi53aGVyZUVxKHt0eXBlOiBUb2tlblR5cGUuUlBBUkVOfSk7XG5jb25zdCBpc0VPU181MDEgPSBSLndoZXJlRXEoe3R5cGU6IFRva2VuVHlwZS5FT1N9KTtcbmNvbnN0IGlzSGFzaF81MDIgPSBSLndoZXJlRXEoe3R5cGU6IFRva2VuVHlwZS5JREVOVElGSUVSLCB2YWx1ZTogXCIjXCJ9KTtcbmNvbnN0IGlzTGVmdFN5bnRheF81MDMgPSBSLndoZXJlRXEoe3R5cGU6IExTWU5UQVhfNDkxfSk7XG5jb25zdCBpc1JpZ2h0U3ludGF4XzUwNCA9IFIud2hlcmVFcSh7dHlwZTogUlNZTlRBWF80OTJ9KTtcbmNvbnN0IGlzTGVmdERlbGltaXRlcl81MDUgPSBSLmFueVBhc3MoW2lzTGVmdEJyYWNrZXRfNDk1LCBpc0xlZnRCcmFjZV80OTYsIGlzTGVmdFBhcmVuXzQ5NywgaXNMZWZ0U3ludGF4XzUwM10pO1xuY29uc3QgaXNSaWdodERlbGltaXRlcl81MDYgPSBSLmFueVBhc3MoW2lzUmlnaHRCcmFja2V0XzQ5OCwgaXNSaWdodEJyYWNlXzQ5OSwgaXNSaWdodFBhcmVuXzUwMCwgaXNSaWdodFN5bnRheF81MDRdKTtcbmNvbnN0IGlzTWF0Y2hpbmdEZWxpbWl0ZXJzXzUwNyA9IFIuY29uZChbW2lzTGVmdEJyYWNrZXRfNDk1LCAoX181NTEsIGJfNTUyKSA9PiBpc1JpZ2h0QnJhY2tldF80OTgoYl81NTIpXSwgW2lzTGVmdEJyYWNlXzQ5NiwgKF9fNTUzLCBiXzU1NCkgPT4gaXNSaWdodEJyYWNlXzQ5OShiXzU1NCldLCBbaXNMZWZ0UGFyZW5fNDk3LCAoX181NTUsIGJfNTU2KSA9PiBpc1JpZ2h0UGFyZW5fNTAwKGJfNTU2KV0sIFtpc0xlZnRTeW50YXhfNTAzLCAoX181NTcsIGJfNTU4KSA9PiBpc1JpZ2h0U3ludGF4XzUwNChiXzU1OCldLCBbUi5ULCBSLkZdXSk7XG5jb25zdCBhc3NpZ25PcHNfNTA4ID0gW1wiPVwiLCBcIis9XCIsIFwiLT1cIiwgXCIqPVwiLCBcIi89XCIsIFwiJT1cIiwgXCI8PD1cIiwgXCI+Pj1cIiwgXCI+Pj49XCIsIFwiJj1cIiwgXCJ8PVwiLCBcIl49XCIsIFwiLFwiXTtcbmNvbnN0IGJpbmFyeU9wc181MDkgPSBbXCIrXCIsIFwiLVwiLCBcIipcIiwgXCIvXCIsIFwiJVwiLCBcIjw8XCIsIFwiPj5cIiwgXCI+Pj5cIiwgXCImXCIsIFwifFwiLCBcIl5cIiwgXCImJlwiLCBcInx8XCIsIFwiP1wiLCBcIjpcIiwgXCI9PT1cIiwgXCI9PVwiLCBcIj49XCIsIFwiPD1cIiwgXCI8XCIsIFwiPlwiLCBcIiE9XCIsIFwiIT09XCIsIFwiaW5zdGFuY2VvZlwiXTtcbmNvbnN0IHVuYXJ5T3BzXzUxMCA9IFtcIisrXCIsIFwiLS1cIiwgXCJ+XCIsIFwiIVwiLCBcImRlbGV0ZVwiLCBcInZvaWRcIiwgXCJ0eXBlb2ZcIiwgXCJ5aWVsZFwiLCBcInRocm93XCIsIFwibmV3XCJdO1xuY29uc3QgaXNOb3RGYWxzZV81MTEgPSBSLmNvbXBvc2UoUi5ub3QsIFIuY3VycnkoUi5lcXVhbHMpKGZhbHNlKSk7XG5jb25zdCBpc0VtcHR5XzUxMiA9IFIud2hlcmVFcSh7c2l6ZTogMH0pO1xuY29uc3QgaXNQdW5jdHVhdG9yXzUxMyA9IHNfNTU5ID0+IHNfNTU5LmlzUHVuY3R1YXRvcigpO1xuY29uc3QgaXNLZXl3b3JkXzUxNCA9IHNfNTYwID0+IHNfNTYwLmlzS2V5d29yZCgpO1xuY29uc3QgaXNEZWxpbWl0ZXJfNTE1ID0gc181NjEgPT4gc181NjEuaXNEZWxpbWl0ZXIoKTtcbmNvbnN0IGlzUGFyZW5zXzUxNiA9IHNfNTYyID0+IHNfNTYyLmlzUGFyZW5zKCk7XG5jb25zdCBpc0JyYWNlc181MTcgPSBzXzU2MyA9PiBzXzU2My5pc0JyYWNlcygpO1xuY29uc3QgaXNCcmFja2V0c181MTggPSBzXzU2NCA9PiBzXzU2NC5pc0JyYWNrZXRzKCk7XG5jb25zdCBpc0lkZW50aWZpZXJfNTE5ID0gc181NjUgPT4gc181NjUuaXNJZGVudGlmaWVyKCk7XG5jb25zdCB2YWxfNTIwID0gc181NjYgPT4gc181NjYudmFsKCk7XG5jb25zdCBpc1ZhbF81MjEgPSBSLmN1cnJ5KCh2XzU2Nywgc181NjgpID0+IHNfNTY4LnZhbCgpID09PSB2XzU2Nyk7XG5jb25zdCBpc0RvdF81MjIgPSBSLmFsbFBhc3MoW2lzUHVuY3R1YXRvcl81MTMsIGlzVmFsXzUyMShcIi5cIildKTtcbmNvbnN0IGlzQ29sb25fNTIzID0gUi5hbGxQYXNzKFtpc1B1bmN0dWF0b3JfNTEzLCBpc1ZhbF81MjEoXCI6XCIpXSk7XG5jb25zdCBpc0Z1bmN0aW9uS2V5d29yZF81MjQgPSBSLmFsbFBhc3MoW2lzS2V5d29yZF81MTQsIGlzVmFsXzUyMShcImZ1bmN0aW9uXCIpXSk7XG5jb25zdCBpc09wZXJhdG9yXzUyNSA9IHNfNTY5ID0+IChzXzU2OS5pc1B1bmN0dWF0b3IoKSB8fCBzXzU2OS5pc0tleXdvcmQoKSkgJiYgUi5hbnkoUi5lcXVhbHMoc181NjkudmFsKCkpLCBhc3NpZ25PcHNfNTA4LmNvbmNhdChiaW5hcnlPcHNfNTA5KS5jb25jYXQodW5hcnlPcHNfNTEwKSk7XG5jb25zdCBpc05vbkxpdGVyYWxLZXl3b3JkXzUyNiA9IFIuYWxsUGFzcyhbaXNLZXl3b3JkXzUxNCwgc181NzAgPT4gUi5ub25lKFIuZXF1YWxzKHNfNTcwLnZhbCgpKSwgbGl0ZXJhbEtleXdvcmRzXzQ5NCldKTtcbmNvbnN0IGlzS2V5d29yZEV4cHJQcmVmaXhfNTI3ID0gUi5hbGxQYXNzKFtpc0tleXdvcmRfNTE0LCBzXzU3MSA9PiBSLmFueShSLmVxdWFscyhzXzU3MS52YWwoKSksIFtcImluc3RhbmNlb2ZcIiwgXCJ0eXBlb2ZcIiwgXCJkZWxldGVcIiwgXCJ2b2lkXCIsIFwieWllbGRcIiwgXCJ0aHJvd1wiLCBcIm5ld1wiLCBcImNhc2VcIl0pXSk7XG5sZXQgbGFzdF81MjggPSBwXzU3MiA9PiBwXzU3Mi5sYXN0KCk7XG5sZXQgc2FmZUxhc3RfNTI5ID0gUi5waXBlKFIuY29uZChbW2lzRW1wdHlfNTEyLCBSLmFsd2F5cyhOb3RoaW5nXzQ5MCgpKV0sIFtSLlQsIFIuY29tcG9zZShNYXliZS5vZiwgbGFzdF81MjgpXV0pKTtcbmxldCBzdHVmZlRydWVfNTMwID0gUi5jdXJyeSgocF81NzMsIGJfNTc0KSA9PiBiXzU3NCA/IEp1c3RfNDg5KHBfNTczKSA6IE5vdGhpbmdfNDkwKCkpO1xubGV0IHN0dWZmRmFsc2VfNTMxID0gUi5jdXJyeSgocF81NzUsIGJfNTc2KSA9PiAhYl81NzYgPyBKdXN0XzQ4OShwXzU3NSkgOiBOb3RoaW5nXzQ5MCgpKTtcbmxldCBpc1RvcENvbG9uXzUzMiA9IFIucGlwZShzYWZlTGFzdF81MjksIFIubWFwKGlzQ29sb25fNTIzKSwgTWF5YmUubWF5YmUoZmFsc2UsIFIuaWRlbnRpdHkpKTtcbmxldCBpc1RvcFB1bmN0dWF0b3JfNTMzID0gUi5waXBlKHNhZmVMYXN0XzUyOSwgUi5tYXAoaXNQdW5jdHVhdG9yXzUxMyksIE1heWJlLm1heWJlKGZhbHNlLCBSLmlkZW50aXR5KSk7XG5sZXQgaXNFeHByUmV0dXJuXzUzNCA9IFIuY3VycnkoKGxfNTc3LCBwXzU3OCkgPT4ge1xuICBsZXQgcmV0S3dkXzU3OSA9IHNhZmVMYXN0XzUyOShwXzU3OCk7XG4gIGxldCBtYXliZURvdF81ODAgPSBwb3BfNTQ1KHBfNTc4KS5jaGFpbihzYWZlTGFzdF81MjkpO1xuICBpZiAobWF5YmVEb3RfNTgwLm1hcChpc0RvdF81MjIpLmdldE9yRWxzZShmYWxzZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gcmV0S3dkXzU3OS5tYXAoc181ODEgPT4ge1xuICAgIHJldHVybiBzXzU4MS5pc0tleXdvcmQoKSAmJiBzXzU4MS52YWwoKSA9PT0gXCJyZXR1cm5cIiAmJiBzXzU4MS5saW5lTnVtYmVyKCkgPT09IGxfNTc3O1xuICB9KS5nZXRPckVsc2UoZmFsc2UpO1xufSk7XG5jb25zdCBpc1RvcE9wZXJhdG9yXzUzNSA9IFIucGlwZShzYWZlTGFzdF81MjksIFIubWFwKGlzT3BlcmF0b3JfNTI1KSwgTWF5YmUubWF5YmUoZmFsc2UsIFIuaWRlbnRpdHkpKTtcbmNvbnN0IGlzVG9wS2V5d29yZEV4cHJQcmVmaXhfNTM2ID0gUi5waXBlKHNhZmVMYXN0XzUyOSwgUi5tYXAoaXNLZXl3b3JkRXhwclByZWZpeF81MjcpLCBNYXliZS5tYXliZShmYWxzZSwgUi5pZGVudGl0eSkpO1xubGV0IGlzRXhwclByZWZpeF81MzcgPSBSLmN1cnJ5KChsXzU4MiwgYl81ODMpID0+IFIuY29uZChbW2lzRW1wdHlfNTEyLCBSLmFsd2F5cyhiXzU4MyldLCBbaXNUb3BDb2xvbl81MzIsIFIuYWx3YXlzKGJfNTgzKV0sIFtpc1RvcEtleXdvcmRFeHByUHJlZml4XzUzNiwgUi5UXSwgW2lzVG9wT3BlcmF0b3JfNTM1LCBSLlRdLCBbaXNUb3BQdW5jdHVhdG9yXzUzMywgUi5hbHdheXMoYl81ODMpXSwgW2lzRXhwclJldHVybl81MzQobF81ODIpLCBSLlRdLCBbUi5ULCBSLkZdXSkpO1xubGV0IGN1cmx5XzUzOCA9IHBfNTg0ID0+IHNhZmVMYXN0XzUyOShwXzU4NCkubWFwKGlzQnJhY2VzXzUxNykuY2hhaW4oc3R1ZmZUcnVlXzUzMChwXzU4NCkpO1xubGV0IHBhcmVuXzUzOSA9IHBfNTg1ID0+IHNhZmVMYXN0XzUyOShwXzU4NSkubWFwKGlzUGFyZW5zXzUxNikuY2hhaW4oc3R1ZmZUcnVlXzUzMChwXzU4NSkpO1xubGV0IGZ1bmNfNTQwID0gcF81ODYgPT4gc2FmZUxhc3RfNTI5KHBfNTg2KS5tYXAoaXNGdW5jdGlvbktleXdvcmRfNTI0KS5jaGFpbihzdHVmZlRydWVfNTMwKHBfNTg2KSk7XG5sZXQgaWRlbnRfNTQxID0gcF81ODcgPT4gc2FmZUxhc3RfNTI5KHBfNTg3KS5tYXAoaXNJZGVudGlmaWVyXzUxOSkuY2hhaW4oc3R1ZmZUcnVlXzUzMChwXzU4NykpO1xubGV0IG5vbkxpdGVyYWxLZXl3b3JkXzU0MiA9IHBfNTg4ID0+IHNhZmVMYXN0XzUyOShwXzU4OCkubWFwKGlzTm9uTGl0ZXJhbEtleXdvcmRfNTI2KS5jaGFpbihzdHVmZlRydWVfNTMwKHBfNTg4KSk7XG5sZXQgb3B0XzU0MyA9IFIuY3VycnkoKGFfNTg5LCBiXzU5MCwgcF81OTEpID0+IHtcbiAgbGV0IHJlc3VsdF81OTIgPSBSLnBpcGVLKGFfNTg5LCBiXzU5MCkoTWF5YmUub2YocF81OTEpKTtcbiAgcmV0dXJuIE1heWJlLmlzSnVzdChyZXN1bHRfNTkyKSA/IHJlc3VsdF81OTIgOiBNYXliZS5vZihwXzU5MSk7XG59KTtcbmxldCBub3REb3RfNTQ0ID0gUi5pZkVsc2UoUi53aGVyZUVxKHtzaXplOiAwfSksIEp1c3RfNDg5LCBwXzU5MyA9PiBzYWZlTGFzdF81MjkocF81OTMpLm1hcChzXzU5NCA9PiAhKHNfNTk0LmlzUHVuY3R1YXRvcigpICYmIHNfNTk0LnZhbCgpID09PSBcIi5cIikpLmNoYWluKHN0dWZmVHJ1ZV81MzAocF81OTMpKSk7XG5sZXQgcG9wXzU0NSA9IFIuY29tcG9zZShKdXN0XzQ4OSwgcF81OTUgPT4gcF81OTUucG9wKCkpO1xuY29uc3QgZnVuY3Rpb25QcmVmaXhfNTQ2ID0gUi5waXBlSyhjdXJseV81MzgsIHBvcF81NDUsIHBhcmVuXzUzOSwgcG9wXzU0NSwgb3B0XzU0MyhpZGVudF81NDEsIHBvcF81NDUpLCBmdW5jXzU0MCk7XG5jb25zdCBpc1JlZ2V4UHJlZml4XzU0NyA9IGJfNTk2ID0+IFIuYW55UGFzcyhbaXNFbXB0eV81MTIsIGlzVG9wUHVuY3R1YXRvcl81MzMsIFIucGlwZShNYXliZS5vZiwgUi5waXBlSyhub25MaXRlcmFsS2V5d29yZF81NDIsIHBvcF81NDUsIG5vdERvdF81NDQpLCBNYXliZS5pc0p1c3QpLCBSLnBpcGUoTWF5YmUub2YsIFIucGlwZUsocGFyZW5fNTM5LCBwb3BfNTQ1LCBub25MaXRlcmFsS2V5d29yZF81NDIsIHBvcF81NDUsIG5vdERvdF81NDQpLCBNYXliZS5pc0p1c3QpLCBSLnBpcGUoTWF5YmUub2YsIGZ1bmN0aW9uUHJlZml4XzU0NiwgUi5jaGFpbihwXzU5NyA9PiB7XG4gIHJldHVybiBzYWZlTGFzdF81MjkocF81OTcpLm1hcChzXzU5OCA9PiBzXzU5OC5saW5lTnVtYmVyKCkpLmNoYWluKGZuTGluZV81OTkgPT4ge1xuICAgIHJldHVybiBwb3BfNTQ1KHBfNTk3KS5tYXAoaXNFeHByUHJlZml4XzUzNyhmbkxpbmVfNTk5LCBiXzU5NikpO1xuICB9KS5jaGFpbihzdHVmZkZhbHNlXzUzMShwXzU5NykpO1xufSksIE1heWJlLmlzSnVzdCksIHBfNjAwID0+IHtcbiAgbGV0IGlzQ3VybHlfNjAxID0gTWF5YmUuaXNKdXN0KHNhZmVMYXN0XzUyOShwXzYwMCkubWFwKGlzQnJhY2VzXzUxNykpO1xuICBsZXQgYWxyZWFkeUNoZWNrZWRGdW5jdGlvbl82MDIgPSBSLnBpcGUoTWF5YmUub2YsIGZ1bmN0aW9uUHJlZml4XzU0NiwgTWF5YmUuaXNKdXN0KShwXzYwMCk7XG4gIGlmIChhbHJlYWR5Q2hlY2tlZEZ1bmN0aW9uXzYwMikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gUi5waXBlKE1heWJlLm9mLCBSLmNoYWluKGN1cmx5XzUzOCksIFIuY2hhaW4ocF82MDMgPT4ge1xuICAgIHJldHVybiBzYWZlTGFzdF81MjkocF82MDMpLm1hcChzXzYwNCA9PiBzXzYwNC5saW5lTnVtYmVyKCkpLmNoYWluKGN1cmx5TGluZV82MDUgPT4ge1xuICAgICAgcmV0dXJuIHBvcF81NDUocF82MDMpLm1hcChpc0V4cHJQcmVmaXhfNTM3KGN1cmx5TGluZV82MDUsIGJfNTk2KSk7XG4gICAgfSkuY2hhaW4oc3R1ZmZGYWxzZV81MzEocF82MDMpKTtcbiAgfSksIE1heWJlLmlzSnVzdCkocF82MDApO1xufV0pO1xuZnVuY3Rpb24gbGFzdEVsXzU0OChsXzYwNikge1xuICByZXR1cm4gbF82MDZbbF82MDYubGVuZ3RoIC0gMV07XG59XG5mdW5jdGlvbiBjb3VudFNsYXNoZXNfNTQ5KHJlYWRlcl82MDcpIHtcbiAgbGV0IGluZGV4XzYwOCA9IHJlYWRlcl82MDcuaW5kZXg7XG4gIGxldCBvblNsYXNoXzYwOSA9ICgpID0+IHJlYWRlcl82MDcuc291cmNlLmNoYXJDb2RlQXQoaW5kZXhfNjA4KSA9PT0gOTI7XG4gIGxldCBsZW5ndGhfNjEwID0gcmVhZGVyXzYwNy5zb3VyY2UubGVuZ3RoO1xuICBsZXQgY291bnRfNjExID0gb25TbGFzaF82MDkoKSA/IDEgOiAwO1xuICB3aGlsZSAoKytpbmRleF82MDggPCBsZW5ndGhfNjEwICYmIG9uU2xhc2hfNjA5KCkpIHtcbiAgICArK2NvdW50XzYxMTtcbiAgfVxuICByZXR1cm4gY291bnRfNjExO1xufVxuY29uc3QgY2FsY0RlcHRoXzU1MCA9IFIuY29tcG9zZShNYXRoLmxvZzIsIFIuaW5jKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRlciBleHRlbmRzIFRva2VuaXplciB7XG4gIGNvbnN0cnVjdG9yKHN0cmluZ3NfNjEyLCBjb250ZXh0XzYxMywgcmVwbGFjZW1lbnRzXzYxNCkge1xuICAgIHN1cGVyKEFycmF5LmlzQXJyYXkoc3RyaW5nc182MTIpID8gc3RyaW5nc182MTIuam9pbihcIlwiKSA6IHN0cmluZ3NfNjEyKTtcbiAgICB0aGlzLmRlbGltU3RhY2sgPSBuZXcgTWFwO1xuICAgIHRoaXMuc3ludGF4TmVzdGluZ0RlcHRoID0gMDtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XzYxMztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzdHJpbmdzXzYxMikpIHtcbiAgICAgIGxldCB0b3RhbEluZGV4ID0gMDtcbiAgICAgIHRoaXMucmVwbGFjZW1lbnRJbmRleCA9IFIucmVkdWNlKChhY2NfNjE1LCBzdHJSZXBfNjE2KSA9PiB7XG4gICAgICAgIGFjY182MTUucHVzaCh7aW5kZXg6IHRvdGFsSW5kZXggKyBzdHJSZXBfNjE2WzBdLmxlbmd0aCwgcmVwbGFjZW1lbnQ6IHN0clJlcF82MTZbMV19KTtcbiAgICAgICAgdG90YWxJbmRleCArPSBzdHJSZXBfNjE2WzBdLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGFjY182MTU7XG4gICAgICB9LCBbXSwgUi56aXAoc3RyaW5nc182MTIsIHJlcGxhY2VtZW50c182MTQpKTtcbiAgICB9XG4gIH1cbiAgcmVhZChzdGFja182MTcgPSBbXSwgYl82MTggPSBmYWxzZSwgc2luZ2xlRGVsaW1pdGVyXzYxOSA9IGZhbHNlKSB7XG4gICAgbGV0IHByZWZpeF82MjAgPSBMaXN0KCk7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGxldCB0b2sgPSB0aGlzLmFkdmFuY2UocHJlZml4XzYyMCwgYl82MTgpO1xuICAgICAgaWYgKHRvayBpbnN0YW5jZW9mIFN5bnRheCB8fCB0b2sgaW5zdGFuY2VvZiBUZXJtKSB7XG4gICAgICAgIHN0YWNrXzYxNy5wdXNoKHRvayk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodG9rKSkge1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShzdGFja182MTcsIHRvayk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKExpc3QuaXNMaXN0KHRvaykpIHtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoc3RhY2tfNjE3LCB0b2sudG9BcnJheSgpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNFT1NfNTAxKHRvaykpIHtcbiAgICAgICAgaWYgKHN0YWNrXzYxN1swXSAmJiBpc0xlZnREZWxpbWl0ZXJfNTA1KHN0YWNrXzYxN1swXS50b2tlbikpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmNyZWF0ZVVuZXhwZWN0ZWQodG9rKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChpc0xlZnREZWxpbWl0ZXJfNTA1KHRvaykpIHtcbiAgICAgICAgaWYgKGlzTGVmdFN5bnRheF81MDModG9rKSkge1xuICAgICAgICAgIHRoaXMuc3ludGF4TmVzdGluZ0RlcHRoKys7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxpbmUgPSB0b2suc2xpY2Uuc3RhcnRMb2NhdGlvbi5saW5lO1xuICAgICAgICBsZXQgaW5uZXJCID0gaXNMZWZ0QnJhY2VfNDk2KHRvaykgPyBpc0V4cHJQcmVmaXhfNTM3KGxpbmUsIGJfNjE4KShwcmVmaXhfNjIwKSA6IHRydWU7XG4gICAgICAgIGxldCBpbm5lciA9IHRoaXMucmVhZChbbmV3IFN5bnRheCh0b2spXSwgaW5uZXJCLCBmYWxzZSk7XG4gICAgICAgIGxldCBzdHggPSBuZXcgU3ludGF4KGlubmVyLCB0aGlzLmNvbnRleHQpO1xuICAgICAgICBwcmVmaXhfNjIwID0gcHJlZml4XzYyMC5jb25jYXQoc3R4KTtcbiAgICAgICAgc3RhY2tfNjE3LnB1c2goc3R4KTtcbiAgICAgICAgaWYgKHNpbmdsZURlbGltaXRlcl82MTkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1JpZ2h0RGVsaW1pdGVyXzUwNih0b2spKSB7XG4gICAgICAgIGlmIChzdGFja182MTdbMF0gJiYgIWlzTWF0Y2hpbmdEZWxpbWl0ZXJzXzUwNyhzdGFja182MTdbMF0udG9rZW4sIHRvaykpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmNyZWF0ZVVuZXhwZWN0ZWQodG9rKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3R4ID0gbmV3IFN5bnRheCh0b2ssIHRoaXMuY29udGV4dCk7XG4gICAgICAgIHN0YWNrXzYxNy5wdXNoKHN0eCk7XG4gICAgICAgIGlmICh0aGlzLnN5bnRheE5lc3RpbmdEZXB0aCAmJiBpc1JpZ2h0U3ludGF4XzUwNCh0b2spKSB7XG4gICAgICAgICAgdGhpcy5zeW50YXhOZXN0aW5nRGVwdGgtLTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBzdHggPSBuZXcgU3ludGF4KHRvaywgdGhpcy5jb250ZXh0KTtcbiAgICAgICAgcHJlZml4XzYyMCA9IHByZWZpeF82MjAuY29uY2F0KHN0eCk7XG4gICAgICAgIHN0YWNrXzYxNy5wdXNoKHN0eCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBMaXN0KHN0YWNrXzYxNyk7XG4gIH1cbiAgYWR2YW5jZShwcmVmaXhfNjIxLCBiXzYyMikge1xuICAgIGxldCBzdGFydExvY2F0aW9uXzYyMyA9IHRoaXMuZ2V0TG9jYXRpb24oKTtcbiAgICB0aGlzLmxhc3RJbmRleCA9IHRoaXMuaW5kZXg7XG4gICAgdGhpcy5sYXN0TGluZSA9IHRoaXMubGluZTtcbiAgICB0aGlzLmxhc3RMaW5lU3RhcnQgPSB0aGlzLmxpbmVTdGFydDtcbiAgICB0aGlzLnNraXBDb21tZW50KCk7XG4gICAgdGhpcy5zdGFydEluZGV4ID0gdGhpcy5pbmRleDtcbiAgICB0aGlzLnN0YXJ0TGluZSA9IHRoaXMubGluZTtcbiAgICB0aGlzLnN0YXJ0TGluZVN0YXJ0ID0gdGhpcy5saW5lU3RhcnQ7XG4gICAgaWYgKHRoaXMucmVwbGFjZW1lbnRJbmRleCAmJiB0aGlzLnJlcGxhY2VtZW50SW5kZXhbMF0gJiYgdGhpcy5pbmRleCA+PSB0aGlzLnJlcGxhY2VtZW50SW5kZXhbMF0uaW5kZXgpIHtcbiAgICAgIGxldCByZXAgPSB0aGlzLnJlcGxhY2VtZW50SW5kZXhbMF0ucmVwbGFjZW1lbnQ7XG4gICAgICB0aGlzLnJlcGxhY2VtZW50SW5kZXguc2hpZnQoKTtcbiAgICAgIHJldHVybiByZXA7XG4gICAgfVxuICAgIGxldCBjaGFyQ29kZV82MjQgPSB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpO1xuICAgIGlmIChjaGFyQ29kZV82MjQgPT09IDk2KSB7XG4gICAgICBsZXQgZWxlbWVudCwgaXRlbXMgPSBbXTtcbiAgICAgIGxldCBzdGFydExvY2F0aW9uXzYyMyA9IHRoaXMuZ2V0TG9jYXRpb24oKTtcbiAgICAgIGxldCBzdGFydCA9IHRoaXMuaW5kZXg7XG4gICAgICB0aGlzLmluZGV4Kys7XG4gICAgICBpZiAodGhpcy5zeW50YXhOZXN0aW5nRGVwdGggPT09IDEpIHtcbiAgICAgICAgbGV0IHNsaWNlID0gdGhpcy5nZXRTbGljZShzdGFydCwgc3RhcnRMb2NhdGlvbl82MjMpO1xuICAgICAgICByZXR1cm4ge3R5cGU6IFJTWU5UQVhfNDkyLCB2YWx1ZTogXCJgXCIsIHNsaWNlOiBzbGljZX07XG4gICAgICB9XG4gICAgICBkbyB7XG4gICAgICAgIGVsZW1lbnQgPSB0aGlzLnNjYW5UZW1wbGF0ZUVsZW1lbnQoKTtcbiAgICAgICAgaXRlbXMucHVzaChlbGVtZW50KTtcbiAgICAgICAgaWYgKGVsZW1lbnQuaW50ZXJwKSB7XG4gICAgICAgICAgZWxlbWVudCA9IHRoaXMucmVhZChbXSwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgIGFzc2VydChlbGVtZW50LnNpemUgPT09IDEsIFwic2hvdWxkIG9ubHkgaGF2ZSByZWFkIGEgc2luZ2xlIGRlbGltaXRlciBpbnNpZGUgYSB0ZW1wbGF0ZVwiKTtcbiAgICAgICAgICBpdGVtcy5wdXNoKGVsZW1lbnQuZ2V0KDApKTtcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAoIWVsZW1lbnQudGFpbCk7XG4gICAgICByZXR1cm4ge3R5cGU6IFRva2VuVHlwZS5URU1QTEFURSwgaXRlbXM6IExpc3QoaXRlbXMpfTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3ludGF4TmVzdGluZ0RlcHRoICYmIGNoYXJDb2RlXzYyNCA9PT0gOTIpIHtcbiAgICAgIGxldCBudW1TbGFzaGVzID0gY291bnRTbGFzaGVzXzU0OSh0aGlzKTtcbiAgICAgIGxldCBkZXB0aCA9IGNhbGNEZXB0aF81NTAobnVtU2xhc2hlcyk7XG4gICAgICBpZiAodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgbnVtU2xhc2hlcykgPT09IDk2KSB7XG4gICAgICAgIGlmIChkZXB0aCA+IHRoaXMuc3ludGF4TmVzdGluZ0RlcHRoKSB7XG4gICAgICAgICAgdGhpcy5pbmRleCArPSBNYXRoLnBvdygyLCB0aGlzLnN5bnRheE5lc3RpbmdEZXB0aCkgLSAxO1xuICAgICAgICAgIHRocm93IHRoaXMuY3JlYXRlSUxMRUdBTCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRlcHRoIDwgdGhpcy5zeW50YXhOZXN0aW5nRGVwdGggLSAxKSB7XG4gICAgICAgICAgdGhpcy5pbmRleCArPSBudW1TbGFzaGVzO1xuICAgICAgICAgIHRocm93IHRoaXMuY3JlYXRlSUxMRUdBTCgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpc0Nsb3NpbmcgPSBkZXB0aCA9PT0gdGhpcy5zeW50YXhOZXN0aW5nRGVwdGggLSAxO1xuICAgICAgICBsZXQgc3RhcnRMb2NhdGlvbl82MjMgPSB0aGlzLmdldExvY2F0aW9uKCk7XG4gICAgICAgIGxldCBzdGFydCA9IHRoaXMuaW5kZXg7XG4gICAgICAgIGxldCBzbGljZSA9IHRoaXMuZ2V0U2xpY2Uoc3RhcnQsIHN0YXJ0TG9jYXRpb25fNjIzKTtcbiAgICAgICAgdGhpcy5pbmRleCArPSBudW1TbGFzaGVzICsgMTtcbiAgICAgICAgcmV0dXJuIHt0eXBlOiBpc0Nsb3NpbmcgPyBSU1lOVEFYXzQ5MiA6IExTWU5UQVhfNDkxLCB2YWx1ZTogXCJcXFxcXCIucmVwZWF0KG51bVNsYXNoZXMpLmNvbmNhdChcIidcIiksIHNsaWNlOiBzbGljZX07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaGFyQ29kZV82MjQgPT09IDM1KSB7XG4gICAgICBsZXQgc3RhcnRMb2NhdGlvbl82MjMgPSB0aGlzLmdldExvY2F0aW9uKCk7XG4gICAgICBsZXQgc3RhcnQgPSB0aGlzLmluZGV4O1xuICAgICAgbGV0IHNsaWNlID0gdGhpcy5nZXRTbGljZShzdGFydCwgc3RhcnRMb2NhdGlvbl82MjMpO1xuICAgICAgdGhpcy5pbmRleCsrO1xuICAgICAgaWYgKHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkgPT09IDk2KSB7XG4gICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgICAgcmV0dXJuIHt0eXBlOiBMU1lOVEFYXzQ5MSwgdmFsdWU6IFwiI2BcIiwgc2xpY2U6IHNsaWNlfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7dHlwZTogVG9rZW5UeXBlLklERU5USUZJRVIsIHZhbHVlOiBcIiNcIiwgc2xpY2U6IHNsaWNlfTtcbiAgICB9IGVsc2UgaWYgKGNoYXJDb2RlXzYyNCA9PT0gNjQpIHtcbiAgICAgIGxldCBzdGFydExvY2F0aW9uXzYyMyA9IHRoaXMuZ2V0TG9jYXRpb24oKTtcbiAgICAgIGxldCBzdGFydCA9IHRoaXMuaW5kZXg7XG4gICAgICBsZXQgc2xpY2UgPSB0aGlzLmdldFNsaWNlKHN0YXJ0LCBzdGFydExvY2F0aW9uXzYyMyk7XG4gICAgICB0aGlzLmluZGV4Kys7XG4gICAgICByZXR1cm4ge3R5cGU6IEFUXzQ5MywgdmFsdWU6IFwiQFwiLCBzbGljZTogc2xpY2V9O1xuICAgIH1cbiAgICBsZXQgbG9va2FoZWFkXzYyNSA9IHN1cGVyLmFkdmFuY2UoKTtcbiAgICBpZiAobG9va2FoZWFkXzYyNS50eXBlID09PSBUb2tlblR5cGUuRElWICYmIGlzUmVnZXhQcmVmaXhfNTQ3KGJfNjIyKShwcmVmaXhfNjIxKSkge1xuICAgICAgcmV0dXJuIHN1cGVyLnNjYW5SZWdFeHAoXCIvXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbG9va2FoZWFkXzYyNTtcbiAgfVxuICBzY2FuVGVtcGxhdGVFbGVtZW50KCkge1xuICAgIGxldCBzdGFydExvY2F0aW9uXzYyNiA9IHRoaXMuZ2V0TG9jYXRpb24oKTtcbiAgICBsZXQgc3RhcnRfNjI3ID0gdGhpcy5pbmRleDtcbiAgICB3aGlsZSAodGhpcy5pbmRleCA8IHRoaXMuc291cmNlLmxlbmd0aCkge1xuICAgICAgbGV0IGNoID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KTtcbiAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgY2FzZSA5NjpcbiAgICAgICAgICBsZXQgc2xpY2UgPSB0aGlzLmdldFNsaWNlKHN0YXJ0XzYyNywgc3RhcnRMb2NhdGlvbl82MjYpO1xuICAgICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgICAgICByZXR1cm4ge3R5cGU6IFRva2VuVHlwZS5URU1QTEFURSwgdGFpbDogdHJ1ZSwgaW50ZXJwOiBmYWxzZSwgc2xpY2U6IHNsaWNlfTtcbiAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICBpZiAodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMSkgPT09IDEyMykge1xuICAgICAgICAgICAgbGV0IHNsaWNlID0gdGhpcy5nZXRTbGljZShzdGFydF82MjcsIHN0YXJ0TG9jYXRpb25fNjI2KTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMTtcbiAgICAgICAgICAgIHJldHVybiB7dHlwZTogVG9rZW5UeXBlLlRFTVBMQVRFLCB0YWlsOiBmYWxzZSwgaW50ZXJwOiB0cnVlLCBzbGljZTogc2xpY2V9O1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmluZGV4Kys7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOTI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgbGV0IG9jdGFsID0gdGhpcy5zY2FuU3RyaW5nRXNjYXBlKFwiXCIsIG51bGwpWzFdO1xuICAgICAgICAgICAgaWYgKG9jdGFsICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgdGhyb3cgdGhpcy5jcmVhdGVJTExFR0FMKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy5pbmRleCsrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyB0aGlzLmNyZWF0ZUlMTEVHQUwoKTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sweet.js b/dist/sweet.js index c0d8ec72..2b413f6c 100644 --- a/dist/sweet.js +++ b/dist/sweet.js @@ -51,31 +51,31 @@ var _modules = require("./modules"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -function expand(source_620) { - var options_621 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var reader_622 = new _shiftReader2.default(source_620); - var stxl_623 = reader_622.read(); - var scope_624 = (0, _scope.freshScope)("top"); - var bindings_625 = new _bindingMap2.default(); - var expander_626 = new _expander2.default({ env: new _env2.default(), store: new _env2.default(), bindings: bindings_625, cwd: options_621.cwd, filename: options_621.filename, modules: new _modules.Modules(), currentScope: [scope_624], transform: options_621.transform ? options_621.transform : function (x_628) { - return { code: x_628 }; - }, moduleResolver: options_621.moduleResolver, moduleLoader: options_621.moduleLoader }); - var exStxl_627 = expander_626.expand(stxl_623.map(function (s_629) { - return s_629.addScope(scope_624, bindings_625); +function expand(source_628) { + var options_629 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + var reader_630 = new _shiftReader2.default(source_628); + var stxl_631 = reader_630.read(); + var scope_632 = (0, _scope.freshScope)("top"); + var bindings_633 = new _bindingMap2.default(); + var expander_634 = new _expander2.default({ env: new _env2.default(), store: new _env2.default(), bindings: bindings_633, cwd: options_629.cwd, filename: options_629.filename, modules: new _modules.Modules(), currentScope: [scope_632], transform: options_629.transform ? options_629.transform : function (x_636) { + return { code: x_636 }; + }, moduleResolver: options_629.moduleResolver, moduleLoader: options_629.moduleLoader }); + var exStxl_635 = expander_634.expand(stxl_631.map(function (s_637) { + return s_637.addScope(scope_632, bindings_633); })); - return new _terms2.default("Module", { directives: (0, _immutable.List)(), items: exStxl_627 }); + return new _terms2.default("Module", { directives: (0, _immutable.List)(), items: exStxl_635 }); } -function parse(source_630) { - var options_631 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; +function parse(source_638) { + var options_639 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return (0, _shiftReducer2.default)(new _parseReducer2.default(), expand(source_630, options_631)); + return (0, _shiftReducer2.default)(new _parseReducer2.default(), expand(source_638, options_639)); } -function compile(source_632) { - var options_633 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; +function compile(source_640) { + var options_641 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var ast_634 = parse(source_632, options_633); - var gen_635 = (0, _shiftCodegen2.default)(ast_634, new _shiftCodegen.FormattedCodeGen()); - return options_633.transform && !options_633.noBabel ? options_633.transform(gen_635, { babelrc: true, filename: options_633.filename }) : { code: gen_635 }; + var ast_642 = parse(source_640, options_641); + var gen_643 = (0, _shiftCodegen2.default)(ast_642, new _shiftCodegen.FormattedCodeGen()); + return options_641.transform && !options_641.noBabel ? options_641.transform(gen_643, { babelrc: true, filename: options_641.filename }) : { code: gen_643 }; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3N3ZWV0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O1FBWWdCLE0sR0FBQSxNO1FBV0EsSyxHQUFBLEs7UUFHQSxPLEdBQUEsTzs7QUExQmhCOzs7O0FBQ0E7Ozs7QUFDQTs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ08sU0FBUyxNQUFULENBQWdCLFVBQWhCLEVBQThDO0FBQUEsTUFBbEIsV0FBa0IseURBQUosRUFBSTs7QUFDbkQsTUFBSSxhQUFhLDBCQUFXLFVBQVgsQ0FBakI7QUFDQSxNQUFJLFdBQVcsV0FBVyxJQUFYLEVBQWY7QUFDQSxNQUFJLFlBQVksdUJBQVcsS0FBWCxDQUFoQjtBQUNBLE1BQUksZUFBZSwwQkFBbkI7QUFDQSxNQUFJLGVBQWUsdUJBQWEsRUFBQyxLQUFLLG1CQUFOLEVBQWUsT0FBTyxtQkFBdEIsRUFBK0IsVUFBVSxZQUF6QyxFQUF1RCxLQUFLLFlBQVksR0FBeEUsRUFBNkUsVUFBVSxZQUFZLFFBQW5HLEVBQTZHLFNBQVMsc0JBQXRILEVBQW1JLGNBQWMsQ0FBQyxTQUFELENBQWpKLEVBQThKLFdBQVcsWUFBWSxTQUFaLEdBQXdCLFlBQVksU0FBcEMsR0FBZ0QsVUFBVSxLQUFWLEVBQWlCO0FBQ3hRLGFBQU8sRUFBQyxNQUFNLEtBQVAsRUFBUDtBQUNELEtBRitCLEVBRTdCLGdCQUFnQixZQUFZLGNBRkMsRUFFZSxjQUFjLFlBQVksWUFGekMsRUFBYixDQUFuQjtBQUdBLE1BQUksYUFBYSxhQUFhLE1BQWIsQ0FBb0IsU0FBUyxHQUFULENBQWE7QUFBQSxXQUFTLE1BQU0sUUFBTixDQUFlLFNBQWYsRUFBMEIsWUFBMUIsQ0FBVDtBQUFBLEdBQWIsQ0FBcEIsQ0FBakI7QUFDQSxTQUFPLG9CQUFTLFFBQVQsRUFBbUIsRUFBQyxZQUFZLHNCQUFiLEVBQXFCLE9BQU8sVUFBNUIsRUFBbkIsQ0FBUDtBQUNEO0FBQ00sU0FBUyxLQUFULENBQWUsVUFBZixFQUE2QztBQUFBLE1BQWxCLFdBQWtCLHlEQUFKLEVBQUk7O0FBQ2xELFNBQU8sNEJBQU8sNEJBQVAsRUFBeUIsT0FBTyxVQUFQLEVBQW1CLFdBQW5CLENBQXpCLENBQVA7QUFDRDtBQUNNLFNBQVMsT0FBVCxDQUFpQixVQUFqQixFQUErQztBQUFBLE1BQWxCLFdBQWtCLHlEQUFKLEVBQUk7O0FBQ3BELE1BQUksVUFBVSxNQUFNLFVBQU4sRUFBa0IsV0FBbEIsQ0FBZDtBQUNBLE1BQUksVUFBVSw0QkFBUSxPQUFSLEVBQWlCLG9DQUFqQixDQUFkO0FBQ0EsU0FBTyxZQUFZLFNBQVosSUFBeUIsQ0FBQyxZQUFZLE9BQXRDLEdBQWdELFlBQVksU0FBWixDQUFzQixPQUF0QixFQUErQixFQUFDLFNBQVMsSUFBVixFQUFnQixVQUFVLFlBQVksUUFBdEMsRUFBL0IsQ0FBaEQsR0FBa0ksRUFBQyxNQUFNLE9BQVAsRUFBekk7QUFDRCIsImZpbGUiOiJzd2VldC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFkZXIgZnJvbSBcIi4vc2hpZnQtcmVhZGVyXCI7XG5pbXBvcnQgRXhwYW5kZXIgZnJvbSBcIi4vZXhwYW5kZXJcIjtcbmltcG9ydCB7TGlzdH0gZnJvbSBcImltbXV0YWJsZVwiO1xuaW1wb3J0IFN5bnRheCBmcm9tIFwiLi9zeW50YXhcIjtcbmltcG9ydCBFbnYgZnJvbSBcIi4vZW52XCI7XG5pbXBvcnQgcmVkdWNlIGZyb20gXCJzaGlmdC1yZWR1Y2VyXCI7XG5pbXBvcnQgUGFyc2VSZWR1Y2VyIGZyb20gXCIuL3BhcnNlLXJlZHVjZXJcIjtcbmltcG9ydCBjb2RlZ2VuLCB7Rm9ybWF0dGVkQ29kZUdlbn0gZnJvbSBcInNoaWZ0LWNvZGVnZW5cIjtcbmltcG9ydCB7U2NvcGUsIGZyZXNoU2NvcGV9IGZyb20gXCIuL3Njb3BlXCI7XG5pbXBvcnQgQmluZGluZ01hcCBmcm9tIFwiLi9iaW5kaW5nLW1hcC5qc1wiO1xuaW1wb3J0IFRlcm0gZnJvbSBcIi4vdGVybXNcIjtcbmltcG9ydCB7TW9kdWxlc30gZnJvbSBcIi4vbW9kdWxlc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZChzb3VyY2VfNjIwLCBvcHRpb25zXzYyMSA9IHt9KSB7XG4gIGxldCByZWFkZXJfNjIyID0gbmV3IFJlYWRlcihzb3VyY2VfNjIwKTtcbiAgbGV0IHN0eGxfNjIzID0gcmVhZGVyXzYyMi5yZWFkKCk7XG4gIGxldCBzY29wZV82MjQgPSBmcmVzaFNjb3BlKFwidG9wXCIpO1xuICBsZXQgYmluZGluZ3NfNjI1ID0gbmV3IEJpbmRpbmdNYXA7XG4gIGxldCBleHBhbmRlcl82MjYgPSBuZXcgRXhwYW5kZXIoe2VudjogbmV3IEVudiwgc3RvcmU6IG5ldyBFbnYsIGJpbmRpbmdzOiBiaW5kaW5nc182MjUsIGN3ZDogb3B0aW9uc182MjEuY3dkLCBmaWxlbmFtZTogb3B0aW9uc182MjEuZmlsZW5hbWUsIG1vZHVsZXM6IG5ldyBNb2R1bGVzLCBjdXJyZW50U2NvcGU6IFtzY29wZV82MjRdLCB0cmFuc2Zvcm06IG9wdGlvbnNfNjIxLnRyYW5zZm9ybSA/IG9wdGlvbnNfNjIxLnRyYW5zZm9ybSA6IGZ1bmN0aW9uICh4XzYyOCkge1xuICAgIHJldHVybiB7Y29kZTogeF82Mjh9O1xuICB9LCBtb2R1bGVSZXNvbHZlcjogb3B0aW9uc182MjEubW9kdWxlUmVzb2x2ZXIsIG1vZHVsZUxvYWRlcjogb3B0aW9uc182MjEubW9kdWxlTG9hZGVyfSk7XG4gIGxldCBleFN0eGxfNjI3ID0gZXhwYW5kZXJfNjI2LmV4cGFuZChzdHhsXzYyMy5tYXAoc182MjkgPT4gc182MjkuYWRkU2NvcGUoc2NvcGVfNjI0LCBiaW5kaW5nc182MjUpKSk7XG4gIHJldHVybiBuZXcgVGVybShcIk1vZHVsZVwiLCB7ZGlyZWN0aXZlczogTGlzdCgpLCBpdGVtczogZXhTdHhsXzYyN30pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHNvdXJjZV82MzAsIG9wdGlvbnNfNjMxID0ge30pIHtcbiAgcmV0dXJuIHJlZHVjZShuZXcgUGFyc2VSZWR1Y2VyLCBleHBhbmQoc291cmNlXzYzMCwgb3B0aW9uc182MzEpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlKHNvdXJjZV82MzIsIG9wdGlvbnNfNjMzID0ge30pIHtcbiAgbGV0IGFzdF82MzQgPSBwYXJzZShzb3VyY2VfNjMyLCBvcHRpb25zXzYzMyk7XG4gIGxldCBnZW5fNjM1ID0gY29kZWdlbihhc3RfNjM0LCBuZXcgRm9ybWF0dGVkQ29kZUdlbik7XG4gIHJldHVybiBvcHRpb25zXzYzMy50cmFuc2Zvcm0gJiYgIW9wdGlvbnNfNjMzLm5vQmFiZWwgPyBvcHRpb25zXzYzMy50cmFuc2Zvcm0oZ2VuXzYzNSwge2JhYmVscmM6IHRydWUsIGZpbGVuYW1lOiBvcHRpb25zXzYzMy5maWxlbmFtZX0pIDoge2NvZGU6IGdlbl82MzV9O1xufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3N3ZWV0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O1FBWWdCLE0sR0FBQSxNO1FBV0EsSyxHQUFBLEs7UUFHQSxPLEdBQUEsTzs7QUExQmhCOzs7O0FBQ0E7Ozs7QUFDQTs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ08sU0FBUyxNQUFULENBQWdCLFVBQWhCLEVBQThDO0FBQUEsTUFBbEIsV0FBa0IseURBQUosRUFBSTs7QUFDbkQsTUFBSSxhQUFhLDBCQUFXLFVBQVgsQ0FBakI7QUFDQSxNQUFJLFdBQVcsV0FBVyxJQUFYLEVBQWY7QUFDQSxNQUFJLFlBQVksdUJBQVcsS0FBWCxDQUFoQjtBQUNBLE1BQUksZUFBZSwwQkFBbkI7QUFDQSxNQUFJLGVBQWUsdUJBQWEsRUFBQyxLQUFLLG1CQUFOLEVBQWUsT0FBTyxtQkFBdEIsRUFBK0IsVUFBVSxZQUF6QyxFQUF1RCxLQUFLLFlBQVksR0FBeEUsRUFBNkUsVUFBVSxZQUFZLFFBQW5HLEVBQTZHLFNBQVMsc0JBQXRILEVBQW1JLGNBQWMsQ0FBQyxTQUFELENBQWpKLEVBQThKLFdBQVcsWUFBWSxTQUFaLEdBQXdCLFlBQVksU0FBcEMsR0FBZ0QsVUFBVSxLQUFWLEVBQWlCO0FBQ3hRLGFBQU8sRUFBQyxNQUFNLEtBQVAsRUFBUDtBQUNELEtBRitCLEVBRTdCLGdCQUFnQixZQUFZLGNBRkMsRUFFZSxjQUFjLFlBQVksWUFGekMsRUFBYixDQUFuQjtBQUdBLE1BQUksYUFBYSxhQUFhLE1BQWIsQ0FBb0IsU0FBUyxHQUFULENBQWE7QUFBQSxXQUFTLE1BQU0sUUFBTixDQUFlLFNBQWYsRUFBMEIsWUFBMUIsQ0FBVDtBQUFBLEdBQWIsQ0FBcEIsQ0FBakI7QUFDQSxTQUFPLG9CQUFTLFFBQVQsRUFBbUIsRUFBQyxZQUFZLHNCQUFiLEVBQXFCLE9BQU8sVUFBNUIsRUFBbkIsQ0FBUDtBQUNEO0FBQ00sU0FBUyxLQUFULENBQWUsVUFBZixFQUE2QztBQUFBLE1BQWxCLFdBQWtCLHlEQUFKLEVBQUk7O0FBQ2xELFNBQU8sNEJBQU8sNEJBQVAsRUFBeUIsT0FBTyxVQUFQLEVBQW1CLFdBQW5CLENBQXpCLENBQVA7QUFDRDtBQUNNLFNBQVMsT0FBVCxDQUFpQixVQUFqQixFQUErQztBQUFBLE1BQWxCLFdBQWtCLHlEQUFKLEVBQUk7O0FBQ3BELE1BQUksVUFBVSxNQUFNLFVBQU4sRUFBa0IsV0FBbEIsQ0FBZDtBQUNBLE1BQUksVUFBVSw0QkFBUSxPQUFSLEVBQWlCLG9DQUFqQixDQUFkO0FBQ0EsU0FBTyxZQUFZLFNBQVosSUFBeUIsQ0FBQyxZQUFZLE9BQXRDLEdBQWdELFlBQVksU0FBWixDQUFzQixPQUF0QixFQUErQixFQUFDLFNBQVMsSUFBVixFQUFnQixVQUFVLFlBQVksUUFBdEMsRUFBL0IsQ0FBaEQsR0FBa0ksRUFBQyxNQUFNLE9BQVAsRUFBekk7QUFDRCIsImZpbGUiOiJzd2VldC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFkZXIgZnJvbSBcIi4vc2hpZnQtcmVhZGVyXCI7XG5pbXBvcnQgRXhwYW5kZXIgZnJvbSBcIi4vZXhwYW5kZXJcIjtcbmltcG9ydCB7TGlzdH0gZnJvbSBcImltbXV0YWJsZVwiO1xuaW1wb3J0IFN5bnRheCBmcm9tIFwiLi9zeW50YXhcIjtcbmltcG9ydCBFbnYgZnJvbSBcIi4vZW52XCI7XG5pbXBvcnQgcmVkdWNlIGZyb20gXCJzaGlmdC1yZWR1Y2VyXCI7XG5pbXBvcnQgUGFyc2VSZWR1Y2VyIGZyb20gXCIuL3BhcnNlLXJlZHVjZXJcIjtcbmltcG9ydCBjb2RlZ2VuLCB7Rm9ybWF0dGVkQ29kZUdlbn0gZnJvbSBcInNoaWZ0LWNvZGVnZW5cIjtcbmltcG9ydCB7U2NvcGUsIGZyZXNoU2NvcGV9IGZyb20gXCIuL3Njb3BlXCI7XG5pbXBvcnQgQmluZGluZ01hcCBmcm9tIFwiLi9iaW5kaW5nLW1hcC5qc1wiO1xuaW1wb3J0IFRlcm0gZnJvbSBcIi4vdGVybXNcIjtcbmltcG9ydCB7TW9kdWxlc30gZnJvbSBcIi4vbW9kdWxlc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZChzb3VyY2VfNjI4LCBvcHRpb25zXzYyOSA9IHt9KSB7XG4gIGxldCByZWFkZXJfNjMwID0gbmV3IFJlYWRlcihzb3VyY2VfNjI4KTtcbiAgbGV0IHN0eGxfNjMxID0gcmVhZGVyXzYzMC5yZWFkKCk7XG4gIGxldCBzY29wZV82MzIgPSBmcmVzaFNjb3BlKFwidG9wXCIpO1xuICBsZXQgYmluZGluZ3NfNjMzID0gbmV3IEJpbmRpbmdNYXA7XG4gIGxldCBleHBhbmRlcl82MzQgPSBuZXcgRXhwYW5kZXIoe2VudjogbmV3IEVudiwgc3RvcmU6IG5ldyBFbnYsIGJpbmRpbmdzOiBiaW5kaW5nc182MzMsIGN3ZDogb3B0aW9uc182MjkuY3dkLCBmaWxlbmFtZTogb3B0aW9uc182MjkuZmlsZW5hbWUsIG1vZHVsZXM6IG5ldyBNb2R1bGVzLCBjdXJyZW50U2NvcGU6IFtzY29wZV82MzJdLCB0cmFuc2Zvcm06IG9wdGlvbnNfNjI5LnRyYW5zZm9ybSA/IG9wdGlvbnNfNjI5LnRyYW5zZm9ybSA6IGZ1bmN0aW9uICh4XzYzNikge1xuICAgIHJldHVybiB7Y29kZTogeF82MzZ9O1xuICB9LCBtb2R1bGVSZXNvbHZlcjogb3B0aW9uc182MjkubW9kdWxlUmVzb2x2ZXIsIG1vZHVsZUxvYWRlcjogb3B0aW9uc182MjkubW9kdWxlTG9hZGVyfSk7XG4gIGxldCBleFN0eGxfNjM1ID0gZXhwYW5kZXJfNjM0LmV4cGFuZChzdHhsXzYzMS5tYXAoc182MzcgPT4gc182MzcuYWRkU2NvcGUoc2NvcGVfNjMyLCBiaW5kaW5nc182MzMpKSk7XG4gIHJldHVybiBuZXcgVGVybShcIk1vZHVsZVwiLCB7ZGlyZWN0aXZlczogTGlzdCgpLCBpdGVtczogZXhTdHhsXzYzNX0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHNvdXJjZV82MzgsIG9wdGlvbnNfNjM5ID0ge30pIHtcbiAgcmV0dXJuIHJlZHVjZShuZXcgUGFyc2VSZWR1Y2VyLCBleHBhbmQoc291cmNlXzYzOCwgb3B0aW9uc182MzkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlKHNvdXJjZV82NDAsIG9wdGlvbnNfNjQxID0ge30pIHtcbiAgbGV0IGFzdF82NDIgPSBwYXJzZShzb3VyY2VfNjQwLCBvcHRpb25zXzY0MSk7XG4gIGxldCBnZW5fNjQzID0gY29kZWdlbihhc3RfNjQyLCBuZXcgRm9ybWF0dGVkQ29kZUdlbik7XG4gIHJldHVybiBvcHRpb25zXzY0MS50cmFuc2Zvcm0gJiYgIW9wdGlvbnNfNjQxLm5vQmFiZWwgPyBvcHRpb25zXzY0MS50cmFuc2Zvcm0oZ2VuXzY0Mywge2JhYmVscmM6IHRydWUsIGZpbGVuYW1lOiBvcHRpb25zXzY0MS5maWxlbmFtZX0pIDoge2NvZGU6IGdlbl82NDN9O1xufVxuIl19 \ No newline at end of file diff --git a/dist/symbol.js b/dist/symbol.js index 82675348..486fae2a 100644 --- a/dist/symbol.js +++ b/dist/symbol.js @@ -4,29 +4,29 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.gensym = gensym; -var internedMap_636 = new Map(); -var counter_637 = 0; -function gensym(name_640) { - var prefix_641 = name_640 == null ? "s_" : name_640 + "_"; - var sym_642 = new Symbol_638(prefix_641 + counter_637); - counter_637++; - return sym_642; +var internedMap_644 = new Map(); +var counter_645 = 0; +function gensym(name_648) { + var prefix_649 = name_648 == null ? "s_" : name_648 + "_"; + var sym_650 = new Symbol_646(prefix_649 + counter_645); + counter_645++; + return sym_650; } -function Symbol_638(name_643) { - this.name = name_643; +function Symbol_646(name_651) { + this.name = name_651; } -Symbol_638.prototype.toString = function () { +Symbol_646.prototype.toString = function () { return this.name; }; -function makeSymbol_639(name_644) { - if (internedMap_636.has(name_644)) { - return internedMap_636.get(name_644); +function makeSymbol_647(name_652) { + if (internedMap_644.has(name_652)) { + return internedMap_644.get(name_652); } else { - var sym = new Symbol_638(name_644); - internedMap_636.set(name_644, sym); + var sym = new Symbol_646(name_652); + internedMap_644.set(name_652, sym); return sym; } } -exports.Symbol = makeSymbol_639; -exports.SymbolClass = Symbol_638; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3N5bWJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztRQUVnQixNLEdBQUEsTTtBQUZoQixJQUFJLGtCQUFrQixJQUFJLEdBQUosRUFBdEI7QUFDQSxJQUFJLGNBQWMsQ0FBbEI7QUFDTyxTQUFTLE1BQVQsQ0FBZ0IsUUFBaEIsRUFBMEI7QUFDL0IsTUFBSSxhQUFhLFlBQVksSUFBWixHQUFtQixJQUFuQixHQUEwQixXQUFXLEdBQXREO0FBQ0EsTUFBSSxVQUFVLElBQUksVUFBSixDQUFlLGFBQWEsV0FBNUIsQ0FBZDtBQUNBO0FBQ0EsU0FBTyxPQUFQO0FBQ0Q7QUFDRCxTQUFTLFVBQVQsQ0FBb0IsUUFBcEIsRUFBOEI7QUFDNUIsT0FBSyxJQUFMLEdBQVksUUFBWjtBQUNEO0FBQ0QsV0FBVyxTQUFYLENBQXFCLFFBQXJCLEdBQWdDLFlBQVk7QUFDMUMsU0FBTyxLQUFLLElBQVo7QUFDRCxDQUZEO0FBR0EsU0FBUyxjQUFULENBQXdCLFFBQXhCLEVBQWtDO0FBQ2hDLE1BQUksZ0JBQWdCLEdBQWhCLENBQW9CLFFBQXBCLENBQUosRUFBbUM7QUFDakMsV0FBTyxnQkFBZ0IsR0FBaEIsQ0FBb0IsUUFBcEIsQ0FBUDtBQUNELEdBRkQsTUFFTztBQUNMLFFBQUksTUFBTSxJQUFJLFVBQUosQ0FBZSxRQUFmLENBQVY7QUFDQSxvQkFBZ0IsR0FBaEIsQ0FBb0IsUUFBcEIsRUFBOEIsR0FBOUI7QUFDQSxXQUFPLEdBQVA7QUFDRDtBQUNGO1FBQ3lCLE0sR0FBbEIsYztRQUF3QyxXLEdBQWQsVSIsImZpbGUiOiJzeW1ib2wuanMiLCJzb3VyY2VzQ29udGVudCI6WyJsZXQgaW50ZXJuZWRNYXBfNjM2ID0gbmV3IE1hcDtcbmxldCBjb3VudGVyXzYzNyA9IDA7XG5leHBvcnQgZnVuY3Rpb24gZ2Vuc3ltKG5hbWVfNjQwKSB7XG4gIGxldCBwcmVmaXhfNjQxID0gbmFtZV82NDAgPT0gbnVsbCA/IFwic19cIiA6IG5hbWVfNjQwICsgXCJfXCI7XG4gIGxldCBzeW1fNjQyID0gbmV3IFN5bWJvbF82MzgocHJlZml4XzY0MSArIGNvdW50ZXJfNjM3KTtcbiAgY291bnRlcl82MzcrKztcbiAgcmV0dXJuIHN5bV82NDI7XG59XG5mdW5jdGlvbiBTeW1ib2xfNjM4KG5hbWVfNjQzKSB7XG4gIHRoaXMubmFtZSA9IG5hbWVfNjQzO1xufVxuU3ltYm9sXzYzOC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5hbWU7XG59O1xuZnVuY3Rpb24gbWFrZVN5bWJvbF82MzkobmFtZV82NDQpIHtcbiAgaWYgKGludGVybmVkTWFwXzYzNi5oYXMobmFtZV82NDQpKSB7XG4gICAgcmV0dXJuIGludGVybmVkTWFwXzYzNi5nZXQobmFtZV82NDQpO1xuICB9IGVsc2Uge1xuICAgIGxldCBzeW0gPSBuZXcgU3ltYm9sXzYzOChuYW1lXzY0NCk7XG4gICAgaW50ZXJuZWRNYXBfNjM2LnNldChuYW1lXzY0NCwgc3ltKTtcbiAgICByZXR1cm4gc3ltO1xuICB9XG59XG5leHBvcnQge21ha2VTeW1ib2xfNjM5IGFzIFN5bWJvbCwgU3ltYm9sXzYzOCBhcyBTeW1ib2xDbGFzc307XG4iXX0= \ No newline at end of file +exports.Symbol = makeSymbol_647; +exports.SymbolClass = Symbol_646; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3N5bWJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztRQUVnQixNLEdBQUEsTTtBQUZoQixJQUFJLGtCQUFrQixJQUFJLEdBQUosRUFBdEI7QUFDQSxJQUFJLGNBQWMsQ0FBbEI7QUFDTyxTQUFTLE1BQVQsQ0FBZ0IsUUFBaEIsRUFBMEI7QUFDL0IsTUFBSSxhQUFhLFlBQVksSUFBWixHQUFtQixJQUFuQixHQUEwQixXQUFXLEdBQXREO0FBQ0EsTUFBSSxVQUFVLElBQUksVUFBSixDQUFlLGFBQWEsV0FBNUIsQ0FBZDtBQUNBO0FBQ0EsU0FBTyxPQUFQO0FBQ0Q7QUFDRCxTQUFTLFVBQVQsQ0FBb0IsUUFBcEIsRUFBOEI7QUFDNUIsT0FBSyxJQUFMLEdBQVksUUFBWjtBQUNEO0FBQ0QsV0FBVyxTQUFYLENBQXFCLFFBQXJCLEdBQWdDLFlBQVk7QUFDMUMsU0FBTyxLQUFLLElBQVo7QUFDRCxDQUZEO0FBR0EsU0FBUyxjQUFULENBQXdCLFFBQXhCLEVBQWtDO0FBQ2hDLE1BQUksZ0JBQWdCLEdBQWhCLENBQW9CLFFBQXBCLENBQUosRUFBbUM7QUFDakMsV0FBTyxnQkFBZ0IsR0FBaEIsQ0FBb0IsUUFBcEIsQ0FBUDtBQUNELEdBRkQsTUFFTztBQUNMLFFBQUksTUFBTSxJQUFJLFVBQUosQ0FBZSxRQUFmLENBQVY7QUFDQSxvQkFBZ0IsR0FBaEIsQ0FBb0IsUUFBcEIsRUFBOEIsR0FBOUI7QUFDQSxXQUFPLEdBQVA7QUFDRDtBQUNGO1FBQ3lCLE0sR0FBbEIsYztRQUF3QyxXLEdBQWQsVSIsImZpbGUiOiJzeW1ib2wuanMiLCJzb3VyY2VzQ29udGVudCI6WyJsZXQgaW50ZXJuZWRNYXBfNjQ0ID0gbmV3IE1hcDtcbmxldCBjb3VudGVyXzY0NSA9IDA7XG5leHBvcnQgZnVuY3Rpb24gZ2Vuc3ltKG5hbWVfNjQ4KSB7XG4gIGxldCBwcmVmaXhfNjQ5ID0gbmFtZV82NDggPT0gbnVsbCA/IFwic19cIiA6IG5hbWVfNjQ4ICsgXCJfXCI7XG4gIGxldCBzeW1fNjUwID0gbmV3IFN5bWJvbF82NDYocHJlZml4XzY0OSArIGNvdW50ZXJfNjQ1KTtcbiAgY291bnRlcl82NDUrKztcbiAgcmV0dXJuIHN5bV82NTA7XG59XG5mdW5jdGlvbiBTeW1ib2xfNjQ2KG5hbWVfNjUxKSB7XG4gIHRoaXMubmFtZSA9IG5hbWVfNjUxO1xufVxuU3ltYm9sXzY0Ni5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5hbWU7XG59O1xuZnVuY3Rpb24gbWFrZVN5bWJvbF82NDcobmFtZV82NTIpIHtcbiAgaWYgKGludGVybmVkTWFwXzY0NC5oYXMobmFtZV82NTIpKSB7XG4gICAgcmV0dXJuIGludGVybmVkTWFwXzY0NC5nZXQobmFtZV82NTIpO1xuICB9IGVsc2Uge1xuICAgIGxldCBzeW0gPSBuZXcgU3ltYm9sXzY0NihuYW1lXzY1Mik7XG4gICAgaW50ZXJuZWRNYXBfNjQ0LnNldChuYW1lXzY1Miwgc3ltKTtcbiAgICByZXR1cm4gc3ltO1xuICB9XG59XG5leHBvcnQge21ha2VTeW1ib2xfNjQ3IGFzIFN5bWJvbCwgU3ltYm9sXzY0NiBhcyBTeW1ib2xDbGFzc307XG4iXX0= \ No newline at end of file diff --git a/dist/syntax.js b/dist/syntax.js index f30c7201..c282532b 100644 --- a/dist/syntax.js +++ b/dist/syntax.js @@ -28,13 +28,13 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var Just_645 = _ramdaFantasy.Maybe.Just; -var Nothing_646 = _ramdaFantasy.Maybe.Nothing; +var Just_653 = _ramdaFantasy.Maybe.Just; +var Nothing_654 = _ramdaFantasy.Maybe.Nothing; -function sizeDecending_647(a_648, b_649) { - if (a_648.scopes.size > b_649.scopes.size) { +function sizeDecending_655(a_656, b_657) { + if (a_656.scopes.size > b_657.scopes.size) { return -1; - } else if (b_649.scopes.size > a_648.scopes.size) { + } else if (b_657.scopes.size > a_656.scopes.size) { return 1; } else { return 0; @@ -42,13 +42,13 @@ function sizeDecending_647(a_648, b_649) { } var Syntax = function () { - function Syntax(token_650) { - var context_651 = arguments.length <= 1 || arguments[1] === undefined ? { bindings: new _bindingMap2.default(), scopeset: (0, _immutable.List)() } : arguments[1]; + function Syntax(token_658) { + var context_659 = arguments.length <= 1 || arguments[1] === undefined ? { bindings: new _bindingMap2.default(), scopeset: (0, _immutable.List)() } : arguments[1]; _classCallCheck(this, Syntax); - this.token = token_650; - this.context = { bindings: context_651.bindings, scopeset: context_651.scopeset }; + this.token = token_658; + this.context = { bindings: context_659.bindings, scopeset: context_659.scopeset }; Object.freeze(this.context); Object.freeze(this); } @@ -59,27 +59,27 @@ var Syntax = function () { if (this.context.scopeset.size === 0 || !(this.isIdentifier() || this.isKeyword())) { return this.token.value; } - var scope_679 = this.context.scopeset.last(); - var stxScopes_680 = this.context.scopeset; - var bindings_681 = this.context.bindings; - if (scope_679) { - var scopesetBindingList = bindings_681.get(this); + var scope_687 = this.context.scopeset.last(); + var stxScopes_688 = this.context.scopeset; + var bindings_689 = this.context.bindings; + if (scope_687) { + var scopesetBindingList = bindings_689.get(this); if (scopesetBindingList) { var biggestBindingPair = scopesetBindingList.filter(function (_ref) { var scopes = _ref.scopes; var binding = _ref.binding; - return scopes.isSubset(stxScopes_680); - }).sort(sizeDecending_647); + return scopes.isSubset(stxScopes_688); + }).sort(sizeDecending_655); if (biggestBindingPair.size >= 2 && biggestBindingPair.get(0).scopes.size === biggestBindingPair.get(1).scopes.size) { - var debugBase = "{" + stxScopes_680.map(function (s_682) { - return s_682.toString(); + var debugBase = "{" + stxScopes_688.map(function (s_690) { + return s_690.toString(); }).join(", ") + "}"; var debugAmbigousScopesets = biggestBindingPair.map(function (_ref2) { var scopes = _ref2.scopes; - return "{" + scopes.map(function (s_683) { - return s_683.toString(); + return "{" + scopes.map(function (s_691) { + return s_691.toString(); }).join(", ") + "}"; }).join(", "); throw new Error("Scopeset " + debugBase + " has ambiguous subsets " + debugAmbigousScopesets); @@ -102,11 +102,11 @@ var Syntax = function () { return this.token.str; } if (this.isTemplate()) { - return this.token.items.map(function (el_684) { - if (el_684 instanceof Syntax && el_684.isDelimiter()) { + return this.token.items.map(function (el_692) { + if (el_692 instanceof Syntax && el_692.isDelimiter()) { return "${...}"; } - return el_684.slice.text; + return el_692.slice.text; }).join(""); } return this.token.value; @@ -120,6 +120,45 @@ var Syntax = function () { return this.token.get(0).lineNumber(); } } + }, { + key: "setLineNumber", + value: function setLineNumber(line_693) { + var newTok_694 = {}; + if (this.isDelimiter()) { + newTok_694 = this.token.map(function (s_695) { + return s_695.setLineNumber(line_693); + }); + } else { + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = Object.keys(this.token)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var key = _step.value; + + newTok_694[key] = this.token[key]; + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + (0, _errors.assert)(newTok_694.slice && newTok_694.slice.startLocation, "all tokens must have line info"); + newTok_694.slice.startLocation.line = line_693; + } + return new Syntax(newTok_694, this.context); + } }, { key: "inner", value: function inner() { @@ -128,45 +167,45 @@ var Syntax = function () { } }, { key: "addScope", - value: function addScope(scope_685, bindings_686) { - var options_687 = arguments.length <= 2 || arguments[2] === undefined ? { flip: false } : arguments[2]; + value: function addScope(scope_696, bindings_697) { + var options_698 = arguments.length <= 2 || arguments[2] === undefined ? { flip: false } : arguments[2]; - var token_688 = this.isDelimiter() ? this.token.map(function (s_690) { - return s_690.addScope(scope_685, bindings_686, options_687); + var token_699 = this.isDelimiter() ? this.token.map(function (s_701) { + return s_701.addScope(scope_696, bindings_697, options_698); }) : this.token; if (this.isTemplate()) { - token_688 = { type: this.token.type, items: token_688.items.map(function (it_691) { - if (it_691 instanceof Syntax && it_691.isDelimiter()) { - return it_691.addScope(scope_685, bindings_686, options_687); + token_699 = { type: this.token.type, items: token_699.items.map(function (it_702) { + if (it_702 instanceof Syntax && it_702.isDelimiter()) { + return it_702.addScope(scope_696, bindings_697, options_698); } - return it_691; + return it_702; }) }; } - var newScopeset_689 = void 0; - if (options_687.flip) { - var index = this.context.scopeset.indexOf(scope_685); + var newScopeset_700 = void 0; + if (options_698.flip) { + var index = this.context.scopeset.indexOf(scope_696); if (index !== -1) { - newScopeset_689 = this.context.scopeset.remove(index); + newScopeset_700 = this.context.scopeset.remove(index); } else { - newScopeset_689 = this.context.scopeset.push(scope_685); + newScopeset_700 = this.context.scopeset.push(scope_696); } } else { - newScopeset_689 = this.context.scopeset.push(scope_685); + newScopeset_700 = this.context.scopeset.push(scope_696); } - return new Syntax(token_688, { bindings: bindings_686, scopeset: newScopeset_689 }); + return new Syntax(token_699, { bindings: bindings_697, scopeset: newScopeset_700 }); } }, { key: "removeScope", - value: function removeScope(scope_692) { - var token_693 = this.isDelimiter() ? this.token.map(function (s_696) { - return s_696.removeScope(scope_692); + value: function removeScope(scope_703) { + var token_704 = this.isDelimiter() ? this.token.map(function (s_707) { + return s_707.removeScope(scope_703); }) : this.token; - var newScopeset_694 = this.context.scopeset; - var index_695 = this.context.scopeset.indexOf(scope_692); - if (index_695 !== -1) { - newScopeset_694 = this.context.scopeset.remove(index_695); + var newScopeset_705 = this.context.scopeset; + var index_706 = this.context.scopeset.indexOf(scope_703); + if (index_706 !== -1) { + newScopeset_705 = this.context.scopeset.remove(index_706); } - return new Syntax(token_693, { bindings: this.context.bindings, scopeset: newScopeset_694 }); + return new Syntax(token_704, { bindings: this.context.bindings, scopeset: newScopeset_705 }); } }, { key: "isIdentifier", @@ -252,8 +291,8 @@ var Syntax = function () { key: "toString", value: function toString() { if (this.isDelimiter()) { - return this.token.map(function (s_697) { - return s_697.toString(); + return this.token.map(function (s_708) { + return s_708.toString(); }).join(" "); } if (this.isStringLiteral()) { @@ -266,86 +305,86 @@ var Syntax = function () { } }], [{ key: "of", - value: function of(token_652) { - var stx_653 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function of(token_660) { + var stx_661 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax(token_652, stx_653.context); + return new Syntax(token_660, stx_661.context); } }, { key: "fromNull", value: function fromNull() { - var stx_654 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + var stx_662 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - return new Syntax({ type: _tokenizer.TokenType.NULL, value: null }, stx_654.context); + return new Syntax({ type: _tokenizer.TokenType.NULL, value: null }, stx_662.context); } }, { key: "fromNumber", - value: function fromNumber(value_655) { - var stx_656 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromNumber(value_663) { + var stx_664 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax({ type: _tokenizer.TokenType.NUMBER, value: value_655 }, stx_656.context); + return new Syntax({ type: _tokenizer.TokenType.NUMBER, value: value_663 }, stx_664.context); } }, { key: "fromString", - value: function fromString(value_657) { - var stx_658 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromString(value_665) { + var stx_666 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax({ type: _tokenizer.TokenType.STRING, str: value_657 }, stx_658.context); + return new Syntax({ type: _tokenizer.TokenType.STRING, str: value_665 }, stx_666.context); } }, { key: "fromPunctuator", - value: function fromPunctuator(value_659) { - var stx_660 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromPunctuator(value_667) { + var stx_668 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax({ type: { klass: _tokenizer.TokenClass.Punctuator, name: value_659 }, value: value_659 }, stx_660.context); + return new Syntax({ type: { klass: _tokenizer.TokenClass.Punctuator, name: value_667 }, value: value_667 }, stx_668.context); } }, { key: "fromKeyword", - value: function fromKeyword(value_661) { - var stx_662 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromKeyword(value_669) { + var stx_670 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax({ type: { klass: _tokenizer.TokenClass.Keyword, name: value_661 }, value: value_661 }, stx_662.context); + return new Syntax({ type: { klass: _tokenizer.TokenClass.Keyword, name: value_669 }, value: value_669 }, stx_670.context); } }, { key: "fromIdentifier", - value: function fromIdentifier(value_663) { - var stx_664 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromIdentifier(value_671) { + var stx_672 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax({ type: _tokenizer.TokenType.IDENTIFIER, value: value_663 }, stx_664.context); + return new Syntax({ type: _tokenizer.TokenType.IDENTIFIER, value: value_671 }, stx_672.context); } }, { key: "fromRegularExpression", - value: function fromRegularExpression(value_665) { - var stx_666 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromRegularExpression(value_673) { + var stx_674 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax({ type: _tokenizer.TokenType.REGEXP, value: value_665 }, stx_666.context); + return new Syntax({ type: _tokenizer.TokenType.REGEXP, value: value_673 }, stx_674.context); } }, { key: "fromBraces", - value: function fromBraces(inner_667) { - var stx_668 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromBraces(inner_675) { + var stx_676 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var left_669 = new Syntax({ type: _tokenizer.TokenType.LBRACE, value: "{" }); - var right_670 = new Syntax({ type: _tokenizer.TokenType.RBRACE, value: "}" }); - return new Syntax(_immutable.List.of(left_669).concat(inner_667).push(right_670), stx_668.context); + var left_677 = new Syntax({ type: _tokenizer.TokenType.LBRACE, value: "{" }); + var right_678 = new Syntax({ type: _tokenizer.TokenType.RBRACE, value: "}" }); + return new Syntax(_immutable.List.of(left_677).concat(inner_675).push(right_678), stx_676.context); } }, { key: "fromBrackets", - value: function fromBrackets(inner_671) { - var stx_672 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromBrackets(inner_679) { + var stx_680 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var left_673 = new Syntax({ type: _tokenizer.TokenType.LBRACK, value: "[" }); - var right_674 = new Syntax({ type: _tokenizer.TokenType.RBRACK, value: "]" }); - return new Syntax(_immutable.List.of(left_673).concat(inner_671).push(right_674), stx_672.context); + var left_681 = new Syntax({ type: _tokenizer.TokenType.LBRACK, value: "[" }); + var right_682 = new Syntax({ type: _tokenizer.TokenType.RBRACK, value: "]" }); + return new Syntax(_immutable.List.of(left_681).concat(inner_679).push(right_682), stx_680.context); } }, { key: "fromParens", - value: function fromParens(inner_675) { - var stx_676 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromParens(inner_683) { + var stx_684 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var left_677 = new Syntax({ type: _tokenizer.TokenType.LPAREN, value: "(" }); - var right_678 = new Syntax({ type: _tokenizer.TokenType.RPAREN, value: ")" }); - return new Syntax(_immutable.List.of(left_677).concat(inner_675).push(right_678), stx_676.context); + var left_685 = new Syntax({ type: _tokenizer.TokenType.LPAREN, value: "(" }); + var right_686 = new Syntax({ type: _tokenizer.TokenType.RPAREN, value: ")" }); + return new Syntax(_immutable.List.of(left_685).concat(inner_683).push(right_686), stx_684.context); } }]); @@ -353,4 +392,4 @@ var Syntax = function () { }(); exports.default = Syntax; -//# sourceMappingURL=data:application/json;base64,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QUosQ0FBVyxFQUFDLE1BQU0scUJBQVUsTUFBakIsRUFBeUIsT0FBTyxHQUFoQyxFQUFYLENBQWhCO0FBQ0EsYUFBTyxJQUFJLE1BQUosQ0FBVyxnQkFBSyxFQUFMLENBQVEsUUFBUixFQUFrQixNQUFsQixDQUF5QixTQUF6QixFQUFvQyxJQUFwQyxDQUF5QyxTQUF6QyxDQUFYLEVBQWdFLFFBQVEsT0FBeEUsQ0FBUDtBQUNEOzs7Ozs7a0JBN0NrQixNIiwiZmlsZSI6InN5bnRheC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TGlzdH0gZnJvbSBcImltbXV0YWJsZVwiO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IEJpbmRpbmdNYXAgZnJvbSBcIi4vYmluZGluZy1tYXBcIjtcbmltcG9ydCB7TWF5YmV9IGZyb20gXCJyYW1kYS1mYW50YXN5XCI7XG5pbXBvcnQgICogYXMgXyBmcm9tIFwicmFtZGFcIjtcbmNvbnN0IEp1c3RfNjQ1ID0gTWF5YmUuSnVzdDtcbmNvbnN0IE5vdGhpbmdfNjQ2ID0gTWF5YmUuTm90aGluZztcbmltcG9ydCB7VG9rZW5UeXBlLCBUb2tlbkNsYXNzfSBmcm9tIFwic2hpZnQtcGFyc2VyL2Rpc3QvdG9rZW5pemVyXCI7XG5mdW5jdGlvbiBzaXplRGVjZW5kaW5nXzY0NyhhXzY0OCwgYl82NDkpIHtcbiAgaWYgKGFfNjQ4LnNjb3Blcy5zaXplID4gYl82NDkuc2NvcGVzLnNpemUpIHtcbiAgICByZXR1cm4gLTE7XG4gIH0gZWxzZSBpZiAoYl82NDkuc2NvcGVzLnNpemUgPiBhXzY0OC5zY29wZXMuc2l6ZSkge1xuICAgIHJldHVybiAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTeW50YXgge1xuICBjb25zdHJ1Y3Rvcih0b2tlbl82NTAsIGNvbnRleHRfNjUxID0ge2JpbmRpbmdzOiBuZXcgQmluZGluZ01hcCwgc2NvcGVzZXQ6IExpc3QoKX0pIHtcbiAgICB0aGlzLnRva2VuID0gdG9rZW5fNjUwO1xuICAgIHRoaXMuY29udGV4dCA9IHtiaW5kaW5nczogY29udGV4dF82NTEuYmluZGluZ3MsIHNjb3Blc2V0OiBjb250ZXh0XzY1MS5zY29wZXNldH07XG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzLmNvbnRleHQpO1xuICAgIE9iamVjdC5mcmVlemUodGhpcyk7XG4gIH1cbiAgc3RhdGljIG9mKHRva2VuXzY1Miwgc3R4XzY1MyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgodG9rZW5fNjUyLCBzdHhfNjUzLmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tTnVsbChzdHhfNjU0ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLk5VTEwsIHZhbHVlOiBudWxsfSwgc3R4XzY1NC5jb250ZXh0KTtcbiAgfVxuICBzdGF0aWMgZnJvbU51bWJlcih2YWx1ZV82NTUsIHN0eF82NTYgPSB7fSkge1xuICAgIHJldHVybiBuZXcgU3ludGF4KHt0eXBlOiBUb2tlblR5cGUuTlVNQkVSLCB2YWx1ZTogdmFsdWVfNjU1fSwgc3R4XzY1Ni5jb250ZXh0KTtcbiAgfVxuICBzdGF0aWMgZnJvbVN0cmluZyh2YWx1ZV82NTcsIHN0eF82NTggPSB7fSkge1xuICAgIHJldHVybiBuZXcgU3ludGF4KHt0eXBlOiBUb2tlblR5cGUuU1RSSU5HLCBzdHI6IHZhbHVlXzY1N30sIHN0eF82NTguY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21QdW5jdHVhdG9yKHZhbHVlXzY1OSwgc3R4XzY2MCA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoe3R5cGU6IHtrbGFzczogVG9rZW5DbGFzcy5QdW5jdHVhdG9yLCBuYW1lOiB2YWx1ZV82NTl9LCB2YWx1ZTogdmFsdWVfNjU5fSwgc3R4XzY2MC5jb250ZXh0KTtcbiAgfVxuICBzdGF0aWMgZnJvbUtleXdvcmQodmFsdWVfNjYxLCBzdHhfNjYyID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZToge2tsYXNzOiBUb2tlbkNsYXNzLktleXdvcmQsIG5hbWU6IHZhbHVlXzY2MX0sIHZhbHVlOiB2YWx1ZV82NjF9LCBzdHhfNjYyLmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tSWRlbnRpZmllcih2YWx1ZV82NjMsIHN0eF82NjQgPSB7fSkge1xuICAgIHJldHVybiBuZXcgU3ludGF4KHt0eXBlOiBUb2tlblR5cGUuSURFTlRJRklFUiwgdmFsdWU6IHZhbHVlXzY2M30sIHN0eF82NjQuY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21SZWd1bGFyRXhwcmVzc2lvbih2YWx1ZV82NjUsIHN0eF82NjYgPSB7fSkge1xuICAgIHJldHVybiBuZXcgU3ludGF4KHt0eXBlOiBUb2tlblR5cGUuUkVHRVhQLCB2YWx1ZTogdmFsdWVfNjY1fSwgc3R4XzY2Ni5jb250ZXh0KTtcbiAgfVxuICBzdGF0aWMgZnJvbUJyYWNlcyhpbm5lcl82NjcsIHN0eF82NjggPSB7fSkge1xuICAgIGxldCBsZWZ0XzY2OSA9IG5ldyBTeW50YXgoe3R5cGU6IFRva2VuVHlwZS5MQlJBQ0UsIHZhbHVlOiBcIntcIn0pO1xuICAgIGxldCByaWdodF82NzAgPSBuZXcgU3ludGF4KHt0eXBlOiBUb2tlblR5cGUuUkJSQUNFLCB2YWx1ZTogXCJ9XCJ9KTtcbiAgICByZXR1cm4gbmV3IFN5bnRheChMaXN0Lm9mKGxlZnRfNjY5KS5jb25jYXQoaW5uZXJfNjY3KS5wdXNoKHJpZ2h0XzY3MCksIHN0eF82NjguY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21CcmFja2V0cyhpbm5lcl82NzEsIHN0eF82NzIgPSB7fSkge1xuICAgIGxldCBsZWZ0XzY3MyA9IG5ldyBTeW50YXgoe3R5cGU6IFRva2VuVHlwZS5MQlJBQ0ssIHZhbHVlOiBcIltcIn0pO1xuICAgIGxldCByaWdodF82NzQgPSBuZXcgU3ludGF4KHt0eXBlOiBUb2tlblR5cGUuUkJSQUNLLCB2YWx1ZTogXCJdXCJ9KTtcbiAgICByZXR1cm4gbmV3IFN5bnRheChMaXN0Lm9mKGxlZnRfNjczKS5jb25jYXQoaW5uZXJfNjcxKS5wdXNoKHJpZ2h0XzY3NCksIHN0eF82NzIuY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21QYXJlbnMoaW5uZXJfNjc1LCBzdHhfNjc2ID0ge30pIHtcbiAgICBsZXQgbGVmdF82NzcgPSBuZXcgU3ludGF4KHt0eXBlOiBUb2tlblR5cGUuTFBBUkVOLCB2YWx1ZTogXCIoXCJ9KTtcbiAgICBsZXQgcmlnaHRfNjc4ID0gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlJQQVJFTiwgdmFsdWU6IFwiKVwifSk7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoTGlzdC5vZihsZWZ0XzY3NykuY29uY2F0KGlubmVyXzY3NSkucHVzaChyaWdodF82NzgpLCBzdHhfNjc2LmNvbnRleHQpO1xuICB9XG4gIHJlc29sdmUoKSB7XG4gICAgaWYgKHRoaXMuY29udGV4dC5zY29wZXNldC5zaXplID09PSAwIHx8ICEodGhpcy5pc0lkZW50aWZpZXIoKSB8fCB0aGlzLmlzS2V5d29yZCgpKSkge1xuICAgICAgcmV0dXJuIHRoaXMudG9rZW4udmFsdWU7XG4gICAgfVxuICAgIGxldCBzY29wZV82NzkgPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQubGFzdCgpO1xuICAgIGxldCBzdHhTY29wZXNfNjgwID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0O1xuICAgIGxldCBiaW5kaW5nc182ODEgPSB0aGlzLmNvbnRleHQuYmluZGluZ3M7XG4gICAgaWYgKHNjb3BlXzY3OSkge1xuICAgICAgbGV0IHNjb3Blc2V0QmluZGluZ0xpc3QgPSBiaW5kaW5nc182ODEuZ2V0KHRoaXMpO1xuICAgICAgaWYgKHNjb3Blc2V0QmluZGluZ0xpc3QpIHtcbiAgICAgICAgbGV0IGJpZ2dlc3RCaW5kaW5nUGFpciA9IHNjb3Blc2V0QmluZGluZ0xpc3QuZmlsdGVyKCh7c2NvcGVzLCBiaW5kaW5nfSkgPT4ge1xuICAgICAgICAgIHJldHVybiBzY29wZXMuaXNTdWJzZXQoc3R4U2NvcGVzXzY4MCk7XG4gICAgICAgIH0pLnNvcnQoc2l6ZURlY2VuZGluZ182NDcpO1xuICAgICAgICBpZiAoYmlnZ2VzdEJpbmRpbmdQYWlyLnNpemUgPj0gMiAmJiBiaWdnZXN0QmluZGluZ1BhaXIuZ2V0KDApLnNjb3Blcy5zaXplID09PSBiaWdnZXN0QmluZGluZ1BhaXIuZ2V0KDEpLnNjb3Blcy5zaXplKSB7XG4gICAgICAgICAgbGV0IGRlYnVnQmFzZSA9IFwie1wiICsgc3R4U2NvcGVzXzY4MC5tYXAoc182ODIgPT4gc182ODIudG9TdHJpbmcoKSkuam9pbihcIiwgXCIpICsgXCJ9XCI7XG4gICAgICAgICAgbGV0IGRlYnVnQW1iaWdvdXNTY29wZXNldHMgPSBiaWdnZXN0QmluZGluZ1BhaXIubWFwKCh7c2NvcGVzfSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFwie1wiICsgc2NvcGVzLm1hcChzXzY4MyA9PiBzXzY4My50b1N0cmluZygpKS5qb2luKFwiLCBcIikgKyBcIn1cIjtcbiAgICAgICAgICB9KS5qb2luKFwiLCBcIik7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2NvcGVzZXQgXCIgKyBkZWJ1Z0Jhc2UgKyBcIiBoYXMgYW1iaWd1b3VzIHN1YnNldHMgXCIgKyBkZWJ1Z0FtYmlnb3VzU2NvcGVzZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChiaWdnZXN0QmluZGluZ1BhaXIuc2l6ZSAhPT0gMCkge1xuICAgICAgICAgIGxldCBiaW5kaW5nU3RyID0gYmlnZ2VzdEJpbmRpbmdQYWlyLmdldCgwKS5iaW5kaW5nLnRvU3RyaW5nKCk7XG4gICAgICAgICAgaWYgKE1heWJlLmlzSnVzdChiaWdnZXN0QmluZGluZ1BhaXIuZ2V0KDApLmFsaWFzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGJpZ2dlc3RCaW5kaW5nUGFpci5nZXQoMCkuYWxpYXMuZ2V0T3JFbHNlKG51bGwpLnJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJpbmRpbmdTdHI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudG9rZW4udmFsdWU7XG4gIH1cbiAgdmFsKCkge1xuICAgIGFzc2VydCghdGhpcy5pc0RlbGltaXRlcigpLCBcImNhbm5vdCBnZXQgdGhlIHZhbCBvZiBhIGRlbGltaXRlclwiKTtcbiAgICBpZiAodGhpcy5pc1N0cmluZ0xpdGVyYWwoKSkge1xuICAgICAgcmV0dXJuIHRoaXMudG9rZW4uc3RyO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1RlbXBsYXRlKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLml0ZW1zLm1hcChlbF82ODQgPT4ge1xuICAgICAgICBpZiAoZWxfNjg0IGluc3RhbmNlb2YgU3ludGF4ICYmIGVsXzY4NC5pc0RlbGltaXRlcigpKSB7XG4gICAgICAgICAgcmV0dXJuIFwiJHsuLi59XCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsXzY4NC5zbGljZS50ZXh0O1xuICAgICAgfSkuam9pbihcIlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudG9rZW4udmFsdWU7XG4gIH1cbiAgbGluZU51bWJlcigpIHtcbiAgICBpZiAoIXRoaXMuaXNEZWxpbWl0ZXIoKSkge1xuICAgICAgcmV0dXJuIHRoaXMudG9rZW4uc2xpY2Uuc3RhcnRMb2NhdGlvbi5saW5lO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy50b2tlbi5nZXQoMCkubGluZU51bWJlcigpO1xuICAgIH1cbiAgfVxuICBpbm5lcigpIHtcbiAgICBhc3NlcnQodGhpcy5pc0RlbGltaXRlcigpLCBcImNhbiBvbmx5IGdldCB0aGUgaW5uZXIgb2YgYSBkZWxpbWl0ZXJcIik7XG4gICAgcmV0dXJuIHRoaXMudG9rZW4uc2xpY2UoMSwgdGhpcy50b2tlbi5zaXplIC0gMSk7XG4gIH1cbiAgYWRkU2NvcGUoc2NvcGVfNjg1LCBiaW5kaW5nc182ODYsIG9wdGlvbnNfNjg3ID0ge2ZsaXA6IGZhbHNlfSkge1xuICAgIGxldCB0b2tlbl82ODggPSB0aGlzLmlzRGVsaW1pdGVyKCkgPyB0aGlzLnRva2VuLm1hcChzXzY5MCA9PiBzXzY5MC5hZGRTY29wZShzY29wZV82ODUsIGJpbmRpbmdzXzY4Niwgb3B0aW9uc182ODcpKSA6IHRoaXMudG9rZW47XG4gICAgaWYgKHRoaXMuaXNUZW1wbGF0ZSgpKSB7XG4gICAgICB0b2tlbl82ODggPSB7dHlwZTogdGhpcy50b2tlbi50eXBlLCBpdGVtczogdG9rZW5fNjg4Lml0ZW1zLm1hcChpdF82OTEgPT4ge1xuICAgICAgICBpZiAoaXRfNjkxIGluc3RhbmNlb2YgU3ludGF4ICYmIGl0XzY5MS5pc0RlbGltaXRlcigpKSB7XG4gICAgICAgICAgcmV0dXJuIGl0XzY5MS5hZGRTY29wZShzY29wZV82ODUsIGJpbmRpbmdzXzY4Niwgb3B0aW9uc182ODcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdF82OTE7XG4gICAgICB9KX07XG4gICAgfVxuICAgIGxldCBuZXdTY29wZXNldF82ODk7XG4gICAgaWYgKG9wdGlvbnNfNjg3LmZsaXApIHtcbiAgICAgIGxldCBpbmRleCA9IHRoaXMuY29udGV4dC5zY29wZXNldC5pbmRleE9mKHNjb3BlXzY4NSk7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIG5ld1Njb3Blc2V0XzY4OSA9IHRoaXMuY29udGV4dC5zY29wZXNldC5yZW1vdmUoaW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U2NvcGVzZXRfNjg5ID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0LnB1c2goc2NvcGVfNjg1KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3U2NvcGVzZXRfNjg5ID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0LnB1c2goc2NvcGVfNjg1KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBTeW50YXgodG9rZW5fNjg4LCB7YmluZGluZ3M6IGJpbmRpbmdzXzY4Niwgc2NvcGVzZXQ6IG5ld1Njb3Blc2V0XzY4OX0pO1xuICB9XG4gIHJlbW92ZVNjb3BlKHNjb3BlXzY5Mikge1xuICAgIGxldCB0b2tlbl82OTMgPSB0aGlzLmlzRGVsaW1pdGVyKCkgPyB0aGlzLnRva2VuLm1hcChzXzY5NiA9PiBzXzY5Ni5yZW1vdmVTY29wZShzY29wZV82OTIpKSA6IHRoaXMudG9rZW47XG4gICAgbGV0IG5ld1Njb3Blc2V0XzY5NCA9IHRoaXMuY29udGV4dC5zY29wZXNldDtcbiAgICBsZXQgaW5kZXhfNjk1ID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0LmluZGV4T2Yoc2NvcGVfNjkyKTtcbiAgICBpZiAoaW5kZXhfNjk1ICE9PSAtMSkge1xuICAgICAgbmV3U2NvcGVzZXRfNjk0ID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0LnJlbW92ZShpbmRleF82OTUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFN5bnRheCh0b2tlbl82OTMsIHtiaW5kaW5nczogdGhpcy5jb250ZXh0LmJpbmRpbmdzLCBzY29wZXNldDogbmV3U2NvcGVzZXRfNjk0fSk7XG4gIH1cbiAgaXNJZGVudGlmaWVyKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZS5rbGFzcyA9PT0gVG9rZW5DbGFzcy5JZGVudDtcbiAgfVxuICBpc0Fzc2lnbigpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNEZWxpbWl0ZXIoKSAmJiB0aGlzLnRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5BU1NJR047XG4gIH1cbiAgaXNCb29sZWFuTGl0ZXJhbCgpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNEZWxpbWl0ZXIoKSAmJiB0aGlzLnRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5UUlVFIHx8IHRoaXMudG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkZBTFNFO1xuICB9XG4gIGlzS2V5d29yZCgpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNEZWxpbWl0ZXIoKSAmJiB0aGlzLnRva2VuLnR5cGUua2xhc3MgPT09IFRva2VuQ2xhc3MuS2V5d29yZDtcbiAgfVxuICBpc051bGxMaXRlcmFsKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLk5VTEw7XG4gIH1cbiAgaXNOdW1lcmljTGl0ZXJhbCgpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNEZWxpbWl0ZXIoKSAmJiB0aGlzLnRva2VuLnR5cGUua2xhc3MgPT09IFRva2VuQ2xhc3MuTnVtZXJpY0xpdGVyYWw7XG4gIH1cbiAgaXNQdW5jdHVhdG9yKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZS5rbGFzcyA9PT0gVG9rZW5DbGFzcy5QdW5jdHVhdG9yO1xuICB9XG4gIGlzU3RyaW5nTGl0ZXJhbCgpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNEZWxpbWl0ZXIoKSAmJiB0aGlzLnRva2VuLnR5cGUua2xhc3MgPT09IFRva2VuQ2xhc3MuU3RyaW5nTGl0ZXJhbDtcbiAgfVxuICBpc1JlZ3VsYXJFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZS5rbGFzcyA9PT0gVG9rZW5DbGFzcy5SZWd1bGFyRXhwcmVzc2lvbjtcbiAgfVxuICBpc1RlbXBsYXRlKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlRFTVBMQVRFO1xuICB9XG4gIGlzRGVsaW1pdGVyKCkge1xuICAgIHJldHVybiBMaXN0LmlzTGlzdCh0aGlzLnRva2VuKTtcbiAgfVxuICBpc1BhcmVucygpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4uZ2V0KDApLnRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5MUEFSRU47XG4gIH1cbiAgaXNCcmFjZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNEZWxpbWl0ZXIoKSAmJiB0aGlzLnRva2VuLmdldCgwKS50b2tlbi50eXBlID09PSBUb2tlblR5cGUuTEJSQUNFO1xuICB9XG4gIGlzQnJhY2tldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNEZWxpbWl0ZXIoKSAmJiB0aGlzLnRva2VuLmdldCgwKS50b2tlbi50eXBlID09PSBUb2tlblR5cGUuTEJSQUNLO1xuICB9XG4gIGlzU3ludGF4VGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNEZWxpbWl0ZXIoKSAmJiB0aGlzLnRva2VuLmdldCgwKS52YWwoKSA9PT0gXCIjYFwiO1xuICB9XG4gIGlzRU9GKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkVPUztcbiAgfVxuICB0b1N0cmluZygpIHtcbiAgICBpZiAodGhpcy5pc0RlbGltaXRlcigpKSB7XG4gICAgICByZXR1cm4gdGhpcy50b2tlbi5tYXAoc182OTcgPT4gc182OTcudG9TdHJpbmcoKSkuam9pbihcIiBcIik7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU3RyaW5nTGl0ZXJhbCgpKSB7XG4gICAgICByZXR1cm4gXCInXCIgKyB0aGlzLnRva2VuLnN0cjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNUZW1wbGF0ZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWwoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudG9rZW4udmFsdWU7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,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QUFRLFFBQVIsRUFBa0IsTUFBbEIsQ0FBeUIsU0FBekIsRUFBb0MsSUFBcEMsQ0FBeUMsU0FBekMsQ0FBWCxFQUFnRSxRQUFRLE9BQXhFLENBQVA7QUFDRDs7O2lDQUNtQixTLEVBQXlCO0FBQUEsVUFBZCxPQUFjLHlEQUFKLEVBQUk7O0FBQzNDLFVBQUksV0FBVyxJQUFJLE1BQUosQ0FBVyxFQUFDLE1BQU0scUJBQVUsTUFBakIsRUFBeUIsT0FBTyxHQUFoQyxFQUFYLENBQWY7QUFDQSxVQUFJLFlBQVksSUFBSSxNQUFKLENBQVcsRUFBQyxNQUFNLHFCQUFVLE1BQWpCLEVBQXlCLE9BQU8sR0FBaEMsRUFBWCxDQUFoQjtBQUNBLGFBQU8sSUFBSSxNQUFKLENBQVcsZ0JBQUssRUFBTCxDQUFRLFFBQVIsRUFBa0IsTUFBbEIsQ0FBeUIsU0FBekIsRUFBb0MsSUFBcEMsQ0FBeUMsU0FBekMsQ0FBWCxFQUFnRSxRQUFRLE9BQXhFLENBQVA7QUFDRDs7OytCQUNpQixTLEVBQXlCO0FBQUEsVUFBZCxPQUFjLHlEQUFKLEVBQUk7O0FBQ3pDLFVBQUksV0FBVyxJQUFJLE1BQUosQ0FBVyxFQUFDLE1BQU0scUJBQVUsTUFBakIsRUFBeUIsT0FBTyxHQUFoQyxFQUFYLENBQWY7QUFDQSxVQUFJLFlBQVksSUFBSSxNQUFKLENBQVcsRUFBQyxNQUFNLHFCQUFVLE1BQWpCLEVBQXlCLE9BQU8sR0FBaEMsRUFBWCxDQUFoQjtBQUNBLGFBQU8sSUFBSSxNQUFKLENBQVcsZ0JBQUssRUFBTCxDQUFRLFFBQVIsRUFBa0IsTUFBbEIsQ0FBeUIsU0FBekIsRUFBb0MsSUFBcEMsQ0FBeUMsU0FBekMsQ0FBWCxFQUFnRSxRQUFRLE9BQXhFLENBQVA7QUFDRDs7Ozs7O2tCQTdDa0IsTSIsImZpbGUiOiJzeW50YXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xpc3R9IGZyb20gXCJpbW11dGFibGVcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCBCaW5kaW5nTWFwIGZyb20gXCIuL2JpbmRpbmctbWFwXCI7XG5pbXBvcnQge01heWJlfSBmcm9tIFwicmFtZGEtZmFudGFzeVwiO1xuaW1wb3J0ICAqIGFzIF8gZnJvbSBcInJhbWRhXCI7XG5jb25zdCBKdXN0XzY1MyA9IE1heWJlLkp1c3Q7XG5jb25zdCBOb3RoaW5nXzY1NCA9IE1heWJlLk5vdGhpbmc7XG5pbXBvcnQge1Rva2VuVHlwZSwgVG9rZW5DbGFzc30gZnJvbSBcInNoaWZ0LXBhcnNlci9kaXN0L3Rva2VuaXplclwiO1xuZnVuY3Rpb24gc2l6ZURlY2VuZGluZ182NTUoYV82NTYsIGJfNjU3KSB7XG4gIGlmIChhXzY1Ni5zY29wZXMuc2l6ZSA+IGJfNjU3LnNjb3Blcy5zaXplKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9IGVsc2UgaWYgKGJfNjU3LnNjb3Blcy5zaXplID4gYV82NTYuc2NvcGVzLnNpemUpIHtcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ludGF4IHtcbiAgY29uc3RydWN0b3IodG9rZW5fNjU4LCBjb250ZXh0XzY1OSA9IHtiaW5kaW5nczogbmV3IEJpbmRpbmdNYXAsIHNjb3Blc2V0OiBMaXN0KCl9KSB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuXzY1ODtcbiAgICB0aGlzLmNvbnRleHQgPSB7YmluZGluZ3M6IGNvbnRleHRfNjU5LmJpbmRpbmdzLCBzY29wZXNldDogY29udGV4dF82NTkuc2NvcGVzZXR9O1xuICAgIE9iamVjdC5mcmVlemUodGhpcy5jb250ZXh0KTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xuICB9XG4gIHN0YXRpYyBvZih0b2tlbl82NjAsIHN0eF82NjEgPSB7fSkge1xuICAgIHJldHVybiBuZXcgU3ludGF4KHRva2VuXzY2MCwgc3R4XzY2MS5jb250ZXh0KTtcbiAgfVxuICBzdGF0aWMgZnJvbU51bGwoc3R4XzY2MiA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoe3R5cGU6IFRva2VuVHlwZS5OVUxMLCB2YWx1ZTogbnVsbH0sIHN0eF82NjIuY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21OdW1iZXIodmFsdWVfNjYzLCBzdHhfNjY0ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLk5VTUJFUiwgdmFsdWU6IHZhbHVlXzY2M30sIHN0eF82NjQuY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21TdHJpbmcodmFsdWVfNjY1LCBzdHhfNjY2ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlNUUklORywgc3RyOiB2YWx1ZV82NjV9LCBzdHhfNjY2LmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tUHVuY3R1YXRvcih2YWx1ZV82NjcsIHN0eF82NjggPSB7fSkge1xuICAgIHJldHVybiBuZXcgU3ludGF4KHt0eXBlOiB7a2xhc3M6IFRva2VuQ2xhc3MuUHVuY3R1YXRvciwgbmFtZTogdmFsdWVfNjY3fSwgdmFsdWU6IHZhbHVlXzY2N30sIHN0eF82NjguY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21LZXl3b3JkKHZhbHVlXzY2OSwgc3R4XzY3MCA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoe3R5cGU6IHtrbGFzczogVG9rZW5DbGFzcy5LZXl3b3JkLCBuYW1lOiB2YWx1ZV82Njl9LCB2YWx1ZTogdmFsdWVfNjY5fSwgc3R4XzY3MC5jb250ZXh0KTtcbiAgfVxuICBzdGF0aWMgZnJvbUlkZW50aWZpZXIodmFsdWVfNjcxLCBzdHhfNjcyID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLklERU5USUZJRVIsIHZhbHVlOiB2YWx1ZV82NzF9LCBzdHhfNjcyLmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tUmVndWxhckV4cHJlc3Npb24odmFsdWVfNjczLCBzdHhfNjc0ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlJFR0VYUCwgdmFsdWU6IHZhbHVlXzY3M30sIHN0eF82NzQuY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21CcmFjZXMoaW5uZXJfNjc1LCBzdHhfNjc2ID0ge30pIHtcbiAgICBsZXQgbGVmdF82NzcgPSBuZXcgU3ludGF4KHt0eXBlOiBUb2tlblR5cGUuTEJSQUNFLCB2YWx1ZTogXCJ7XCJ9KTtcbiAgICBsZXQgcmlnaHRfNjc4ID0gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlJCUkFDRSwgdmFsdWU6IFwifVwifSk7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoTGlzdC5vZihsZWZ0XzY3NykuY29uY2F0KGlubmVyXzY3NSkucHVzaChyaWdodF82NzgpLCBzdHhfNjc2LmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tQnJhY2tldHMoaW5uZXJfNjc5LCBzdHhfNjgwID0ge30pIHtcbiAgICBsZXQgbGVmdF82ODEgPSBuZXcgU3ludGF4KHt0eXBlOiBUb2tlblR5cGUuTEJSQUNLLCB2YWx1ZTogXCJbXCJ9KTtcbiAgICBsZXQgcmlnaHRfNjgyID0gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlJCUkFDSywgdmFsdWU6IFwiXVwifSk7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoTGlzdC5vZihsZWZ0XzY4MSkuY29uY2F0KGlubmVyXzY3OSkucHVzaChyaWdodF82ODIpLCBzdHhfNjgwLmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tUGFyZW5zKGlubmVyXzY4Mywgc3R4XzY4NCA9IHt9KSB7XG4gICAgbGV0IGxlZnRfNjg1ID0gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLkxQQVJFTiwgdmFsdWU6IFwiKFwifSk7XG4gICAgbGV0IHJpZ2h0XzY4NiA9IG5ldyBTeW50YXgoe3R5cGU6IFRva2VuVHlwZS5SUEFSRU4sIHZhbHVlOiBcIilcIn0pO1xuICAgIHJldHVybiBuZXcgU3ludGF4KExpc3Qub2YobGVmdF82ODUpLmNvbmNhdChpbm5lcl82ODMpLnB1c2gocmlnaHRfNjg2KSwgc3R4XzY4NC5jb250ZXh0KTtcbiAgfVxuICByZXNvbHZlKCkge1xuICAgIGlmICh0aGlzLmNvbnRleHQuc2NvcGVzZXQuc2l6ZSA9PT0gMCB8fCAhKHRoaXMuaXNJZGVudGlmaWVyKCkgfHwgdGhpcy5pc0tleXdvcmQoKSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLnZhbHVlO1xuICAgIH1cbiAgICBsZXQgc2NvcGVfNjg3ID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0Lmxhc3QoKTtcbiAgICBsZXQgc3R4U2NvcGVzXzY4OCA9IHRoaXMuY29udGV4dC5zY29wZXNldDtcbiAgICBsZXQgYmluZGluZ3NfNjg5ID0gdGhpcy5jb250ZXh0LmJpbmRpbmdzO1xuICAgIGlmIChzY29wZV82ODcpIHtcbiAgICAgIGxldCBzY29wZXNldEJpbmRpbmdMaXN0ID0gYmluZGluZ3NfNjg5LmdldCh0aGlzKTtcbiAgICAgIGlmIChzY29wZXNldEJpbmRpbmdMaXN0KSB7XG4gICAgICAgIGxldCBiaWdnZXN0QmluZGluZ1BhaXIgPSBzY29wZXNldEJpbmRpbmdMaXN0LmZpbHRlcigoe3Njb3BlcywgYmluZGluZ30pID0+IHtcbiAgICAgICAgICByZXR1cm4gc2NvcGVzLmlzU3Vic2V0KHN0eFNjb3Blc182ODgpO1xuICAgICAgICB9KS5zb3J0KHNpemVEZWNlbmRpbmdfNjU1KTtcbiAgICAgICAgaWYgKGJpZ2dlc3RCaW5kaW5nUGFpci5zaXplID49IDIgJiYgYmlnZ2VzdEJpbmRpbmdQYWlyLmdldCgwKS5zY29wZXMuc2l6ZSA9PT0gYmlnZ2VzdEJpbmRpbmdQYWlyLmdldCgxKS5zY29wZXMuc2l6ZSkge1xuICAgICAgICAgIGxldCBkZWJ1Z0Jhc2UgPSBcIntcIiArIHN0eFNjb3Blc182ODgubWFwKHNfNjkwID0+IHNfNjkwLnRvU3RyaW5nKCkpLmpvaW4oXCIsIFwiKSArIFwifVwiO1xuICAgICAgICAgIGxldCBkZWJ1Z0FtYmlnb3VzU2NvcGVzZXRzID0gYmlnZ2VzdEJpbmRpbmdQYWlyLm1hcCgoe3Njb3Blc30pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBcIntcIiArIHNjb3Blcy5tYXAoc182OTEgPT4gc182OTEudG9TdHJpbmcoKSkuam9pbihcIiwgXCIpICsgXCJ9XCI7XG4gICAgICAgICAgfSkuam9pbihcIiwgXCIpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNjb3Blc2V0IFwiICsgZGVidWdCYXNlICsgXCIgaGFzIGFtYmlndW91cyBzdWJzZXRzIFwiICsgZGVidWdBbWJpZ291c1Njb3Blc2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoYmlnZ2VzdEJpbmRpbmdQYWlyLnNpemUgIT09IDApIHtcbiAgICAgICAgICBsZXQgYmluZGluZ1N0ciA9IGJpZ2dlc3RCaW5kaW5nUGFpci5nZXQoMCkuYmluZGluZy50b1N0cmluZygpO1xuICAgICAgICAgIGlmIChNYXliZS5pc0p1c3QoYmlnZ2VzdEJpbmRpbmdQYWlyLmdldCgwKS5hbGlhcykpIHtcbiAgICAgICAgICAgIHJldHVybiBiaWdnZXN0QmluZGluZ1BhaXIuZ2V0KDApLmFsaWFzLmdldE9yRWxzZShudWxsKS5yZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiaW5kaW5nU3RyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRva2VuLnZhbHVlO1xuICB9XG4gIHZhbCgpIHtcbiAgICBhc3NlcnQoIXRoaXMuaXNEZWxpbWl0ZXIoKSwgXCJjYW5ub3QgZ2V0IHRoZSB2YWwgb2YgYSBkZWxpbWl0ZXJcIik7XG4gICAgaWYgKHRoaXMuaXNTdHJpbmdMaXRlcmFsKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLnN0cjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNUZW1wbGF0ZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy50b2tlbi5pdGVtcy5tYXAoZWxfNjkyID0+IHtcbiAgICAgICAgaWYgKGVsXzY5MiBpbnN0YW5jZW9mIFN5bnRheCAmJiBlbF82OTIuaXNEZWxpbWl0ZXIoKSkge1xuICAgICAgICAgIHJldHVybiBcIiR7Li4ufVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbF82OTIuc2xpY2UudGV4dDtcbiAgICAgIH0pLmpvaW4oXCJcIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRva2VuLnZhbHVlO1xuICB9XG4gIGxpbmVOdW1iZXIoKSB7XG4gICAgaWYgKCF0aGlzLmlzRGVsaW1pdGVyKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLnNsaWNlLnN0YXJ0TG9jYXRpb24ubGluZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudG9rZW4uZ2V0KDApLmxpbmVOdW1iZXIoKTtcbiAgICB9XG4gIH1cbiAgc2V0TGluZU51bWJlcihsaW5lXzY5Mykge1xuICAgIGxldCBuZXdUb2tfNjk0ID0ge307XG4gICAgaWYgKHRoaXMuaXNEZWxpbWl0ZXIoKSkge1xuICAgICAgbmV3VG9rXzY5NCA9IHRoaXMudG9rZW4ubWFwKHNfNjk1ID0+IHNfNjk1LnNldExpbmVOdW1iZXIobGluZV82OTMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMudG9rZW4pKSB7XG4gICAgICAgIG5ld1Rva182OTRba2V5XSA9IHRoaXMudG9rZW5ba2V5XTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChuZXdUb2tfNjk0LnNsaWNlICYmIG5ld1Rva182OTQuc2xpY2Uuc3RhcnRMb2NhdGlvbiwgXCJhbGwgdG9rZW5zIG11c3QgaGF2ZSBsaW5lIGluZm9cIik7XG4gICAgICBuZXdUb2tfNjk0LnNsaWNlLnN0YXJ0TG9jYXRpb24ubGluZSA9IGxpbmVfNjkzO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFN5bnRheChuZXdUb2tfNjk0LCB0aGlzLmNvbnRleHQpO1xuICB9XG4gIGlubmVyKCkge1xuICAgIGFzc2VydCh0aGlzLmlzRGVsaW1pdGVyKCksIFwiY2FuIG9ubHkgZ2V0IHRoZSBpbm5lciBvZiBhIGRlbGltaXRlclwiKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5zbGljZSgxLCB0aGlzLnRva2VuLnNpemUgLSAxKTtcbiAgfVxuICBhZGRTY29wZShzY29wZV82OTYsIGJpbmRpbmdzXzY5Nywgb3B0aW9uc182OTggPSB7ZmxpcDogZmFsc2V9KSB7XG4gICAgbGV0IHRva2VuXzY5OSA9IHRoaXMuaXNEZWxpbWl0ZXIoKSA/IHRoaXMudG9rZW4ubWFwKHNfNzAxID0+IHNfNzAxLmFkZFNjb3BlKHNjb3BlXzY5NiwgYmluZGluZ3NfNjk3LCBvcHRpb25zXzY5OCkpIDogdGhpcy50b2tlbjtcbiAgICBpZiAodGhpcy5pc1RlbXBsYXRlKCkpIHtcbiAgICAgIHRva2VuXzY5OSA9IHt0eXBlOiB0aGlzLnRva2VuLnR5cGUsIGl0ZW1zOiB0b2tlbl82OTkuaXRlbXMubWFwKGl0XzcwMiA9PiB7XG4gICAgICAgIGlmIChpdF83MDIgaW5zdGFuY2VvZiBTeW50YXggJiYgaXRfNzAyLmlzRGVsaW1pdGVyKCkpIHtcbiAgICAgICAgICByZXR1cm4gaXRfNzAyLmFkZFNjb3BlKHNjb3BlXzY5NiwgYmluZGluZ3NfNjk3LCBvcHRpb25zXzY5OCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0XzcwMjtcbiAgICAgIH0pfTtcbiAgICB9XG4gICAgbGV0IG5ld1Njb3Blc2V0XzcwMDtcbiAgICBpZiAob3B0aW9uc182OTguZmxpcCkge1xuICAgICAgbGV0IGluZGV4ID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0LmluZGV4T2Yoc2NvcGVfNjk2KTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgbmV3U2NvcGVzZXRfNzAwID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0LnJlbW92ZShpbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTY29wZXNldF83MDAgPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQucHVzaChzY29wZV82OTYpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTY29wZXNldF83MDAgPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQucHVzaChzY29wZV82OTYpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFN5bnRheCh0b2tlbl82OTksIHtiaW5kaW5nczogYmluZGluZ3NfNjk3LCBzY29wZXNldDogbmV3U2NvcGVzZXRfNzAwfSk7XG4gIH1cbiAgcmVtb3ZlU2NvcGUoc2NvcGVfNzAzKSB7XG4gICAgbGV0IHRva2VuXzcwNCA9IHRoaXMuaXNEZWxpbWl0ZXIoKSA/IHRoaXMudG9rZW4ubWFwKHNfNzA3ID0+IHNfNzA3LnJlbW92ZVNjb3BlKHNjb3BlXzcwMykpIDogdGhpcy50b2tlbjtcbiAgICBsZXQgbmV3U2NvcGVzZXRfNzA1ID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0O1xuICAgIGxldCBpbmRleF83MDYgPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQuaW5kZXhPZihzY29wZV83MDMpO1xuICAgIGlmIChpbmRleF83MDYgIT09IC0xKSB7XG4gICAgICBuZXdTY29wZXNldF83MDUgPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQucmVtb3ZlKGluZGV4XzcwNik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgU3ludGF4KHRva2VuXzcwNCwge2JpbmRpbmdzOiB0aGlzLmNvbnRleHQuYmluZGluZ3MsIHNjb3Blc2V0OiBuZXdTY29wZXNldF83MDV9KTtcbiAgfVxuICBpc0lkZW50aWZpZXIoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlLmtsYXNzID09PSBUb2tlbkNsYXNzLklkZW50O1xuICB9XG4gIGlzQXNzaWduKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkFTU0lHTjtcbiAgfVxuICBpc0Jvb2xlYW5MaXRlcmFsKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlRSVUUgfHwgdGhpcy50b2tlbi50eXBlID09PSBUb2tlblR5cGUuRkFMU0U7XG4gIH1cbiAgaXNLZXl3b3JkKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZS5rbGFzcyA9PT0gVG9rZW5DbGFzcy5LZXl3b3JkO1xuICB9XG4gIGlzTnVsbExpdGVyYWwoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlID09PSBUb2tlblR5cGUuTlVMTDtcbiAgfVxuICBpc051bWVyaWNMaXRlcmFsKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZS5rbGFzcyA9PT0gVG9rZW5DbGFzcy5OdW1lcmljTGl0ZXJhbDtcbiAgfVxuICBpc1B1bmN0dWF0b3IoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlLmtsYXNzID09PSBUb2tlbkNsYXNzLlB1bmN0dWF0b3I7XG4gIH1cbiAgaXNTdHJpbmdMaXRlcmFsKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZS5rbGFzcyA9PT0gVG9rZW5DbGFzcy5TdHJpbmdMaXRlcmFsO1xuICB9XG4gIGlzUmVndWxhckV4cHJlc3Npb24oKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlLmtsYXNzID09PSBUb2tlbkNsYXNzLlJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG4gIGlzVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlID09PSBUb2tlblR5cGUuVEVNUExBVEU7XG4gIH1cbiAgaXNEZWxpbWl0ZXIoKSB7XG4gICAgcmV0dXJuIExpc3QuaXNMaXN0KHRoaXMudG9rZW4pO1xuICB9XG4gIGlzUGFyZW5zKCkge1xuICAgIHJldHVybiB0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi5nZXQoMCkudG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkxQQVJFTjtcbiAgfVxuICBpc0JyYWNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4uZ2V0KDApLnRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5MQlJBQ0U7XG4gIH1cbiAgaXNCcmFja2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4uZ2V0KDApLnRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5MQlJBQ0s7XG4gIH1cbiAgaXNTeW50YXhUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4uZ2V0KDApLnZhbCgpID09PSBcIiNgXCI7XG4gIH1cbiAgaXNFT0YoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlID09PSBUb2tlblR5cGUuRU9TO1xuICB9XG4gIHRvU3RyaW5nKCkge1xuICAgIGlmICh0aGlzLmlzRGVsaW1pdGVyKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLm1hcChzXzcwOCA9PiBzXzcwOC50b1N0cmluZygpKS5qb2luKFwiIFwiKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTdHJpbmdMaXRlcmFsKCkpIHtcbiAgICAgIHJldHVybiBcIidcIiArIHRoaXMudG9rZW4uc3RyO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1RlbXBsYXRlKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50b2tlbi52YWx1ZTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/template-processor.js b/dist/template-processor.js index 22ec5bc0..a2f2a842 100644 --- a/dist/template-processor.js +++ b/dist/template-processor.js @@ -22,56 +22,65 @@ var _errors = require("./errors"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var isDolar_698 = function isDolar_698(s_706) { - return s_706 && s_706 instanceof _syntax2.default && s_706.isIdentifier() && s_706.val() === "$"; +var isDolar_709 = function isDolar_709(s_718) { + return s_718 && s_718 instanceof _syntax2.default && s_718.isIdentifier() && s_718.val() === "$"; }; -var isDelimiter_699 = function isDelimiter_699(s_707) { - return s_707 && typeof s_707.isDelimiter === "function" && s_707.isDelimiter(); +var isDelimiter_710 = function isDelimiter_710(s_719) { + return s_719 && typeof s_719.isDelimiter === "function" && s_719.isDelimiter(); }; -var isBraces_700 = function isBraces_700(s_708) { - return s_708 && typeof s_708.isBraces === "function" && s_708.isBraces(); +var isBraces_711 = function isBraces_711(s_720) { + return s_720 && typeof s_720.isBraces === "function" && s_720.isBraces(); }; -var isParens_701 = function isParens_701(s_709) { - return s_709 && typeof s_709.isParens === "function" && s_709.isParens(); +var isParens_712 = function isParens_712(s_721) { + return s_721 && typeof s_721.isParens === "function" && s_721.isParens(); }; -var isBrackets_702 = function isBrackets_702(s_710) { - return s_710 && typeof s_710.isBrackets === "function" && s_710.isBrackets(); +var isBrackets_713 = function isBrackets_713(s_722) { + return s_722 && typeof s_722.isBrackets === "function" && s_722.isBrackets(); }; -var insertIntoDelimiter_703 = _ramda2.default.cond([[isBraces_700, function (s_711, r_712) { - return _syntax2.default.fromBraces(r_712, s_711); -}], [isParens_701, function (s_713, r_714) { - return _syntax2.default.fromParens(r_714, s_713); -}], [isBrackets_702, function (s_715, r_716) { - return _syntax2.default.fromBrackets(r_716, s_715); +var insertIntoDelimiter_714 = _ramda2.default.cond([[isBraces_711, function (s_723, r_724) { + return _syntax2.default.fromBraces(r_724, s_723); +}], [isParens_712, function (s_725, r_726) { + return _syntax2.default.fromParens(r_726, s_725); +}], [isBrackets_713, function (s_727, r_728) { + return _syntax2.default.fromBrackets(r_728, s_727); }]]); -var process_704 = function process_704(acc_717, s_718) { - if (isBraces_700(s_718) && isDolar_698(acc_717.template.last())) { - return { template: acc_717.template.push(_syntax2.default.fromBraces(_immutable.List.of(_syntax2.default.fromNumber(acc_717.interp.size)), s_718)), interp: acc_717.interp.push(s_718.inner()) }; - } else if (isDelimiter_699(s_718)) { - var innerResult = processTemplate(s_718.inner(), acc_717.interp); - return { template: acc_717.template.push(insertIntoDelimiter_703(s_718, innerResult.template)), interp: innerResult.interp }; +var process_715 = function process_715(acc_729, s_730) { + if (isBraces_711(s_730) && isDolar_709(acc_729.template.last())) { + return { template: acc_729.template.push(_syntax2.default.fromBraces(_immutable.List.of(_syntax2.default.fromNumber(acc_729.interp.size)), s_730)), interp: acc_729.interp.push(s_730.inner()) }; + } else if (isDelimiter_710(s_730)) { + var innerResult = processTemplate(s_730.inner(), acc_729.interp); + return { template: acc_729.template.push(insertIntoDelimiter_714(s_730, innerResult.template)), interp: innerResult.interp }; } else { - return { template: acc_717.template.push(s_718), interp: acc_717.interp }; + return { template: acc_729.template.push(s_730), interp: acc_729.interp }; } }; -var replace_705 = function replace_705(acc_719, s_720) { - if (isBraces_700(s_720) && isDolar_698(acc_719.template.last())) { - var index = s_720.inner().first().val(); - (0, _errors.assert)(acc_719.rep.size > index, "unknown replacement value"); - return { template: acc_719.template.pop().concat(acc_719.rep.get(index)), rep: acc_719.rep }; - } else if (isDelimiter_699(s_720)) { - var innerResult = replaceTemplate(s_720.inner(), acc_719.rep); - return { template: acc_719.template.push(insertIntoDelimiter_703(s_720, innerResult)), rep: acc_719.rep }; +function cloneLineNumber_716(to_731, from_732) { + if (from_732 && to_731 && typeof to_731.setLineNumber === "function") { + return to_731.setLineNumber(from_732.lineNumber()); + } + return to_731; +} +var replace_717 = function replace_717(acc_733, s_734) { + var last_735 = acc_733.template.get(-1); + var beforeLast_736 = acc_733.template.get(-2); + if (isBraces_711(s_734) && isDolar_709(last_735)) { + var index = s_734.inner().first().val(); + (0, _errors.assert)(acc_733.rep.size > index, "unknown replacement value"); + var replacement = cloneLineNumber_716(acc_733.rep.get(index), beforeLast_736); + return { template: acc_733.template.pop().concat(replacement), rep: acc_733.rep }; + } else if (isDelimiter_710(s_734)) { + var innerResult = replaceTemplate(s_734.inner(), acc_733.rep); + return { template: acc_733.template.push(insertIntoDelimiter_714(s_734, innerResult)), rep: acc_733.rep }; } else { - return { template: acc_719.template.push(s_720), rep: acc_719.rep }; + return { template: acc_733.template.push(s_734), rep: acc_733.rep }; } }; -function processTemplate(temp_721) { - var interp_722 = arguments.length <= 1 || arguments[1] === undefined ? (0, _immutable.List)() : arguments[1]; +function processTemplate(temp_737) { + var interp_738 = arguments.length <= 1 || arguments[1] === undefined ? (0, _immutable.List)() : arguments[1]; - return temp_721.reduce(process_704, { template: (0, _immutable.List)(), interp: interp_722 }); + return temp_737.reduce(process_715, { template: (0, _immutable.List)(), interp: interp_738 }); } -function replaceTemplate(temp_723, rep_724) { - return temp_723.reduce(replace_705, { template: (0, _immutable.List)(), rep: rep_724 }).template; +function replaceTemplate(temp_739, rep_740) { + return temp_739.reduce(replace_717, { template: (0, _immutable.List)(), rep: rep_740 }).template; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3RlbXBsYXRlLXByb2Nlc3Nvci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztRQWlDZ0IsZSxHQUFBLGU7UUFHQSxlLEdBQUEsZTs7QUFwQ2hCOztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBLElBQU0sY0FBYyxTQUFkLFdBQWM7QUFBQSxTQUFTLFNBQVMsaUNBQVQsSUFBb0MsTUFBTSxZQUFOLEVBQXBDLElBQTRELE1BQU0sR0FBTixPQUFnQixHQUFyRjtBQUFBLENBQXBCO0FBQ0EsSUFBTSxrQkFBa0IsU0FBbEIsZUFBa0I7QUFBQSxTQUFTLFNBQVMsT0FBTyxNQUFNLFdBQWIsS0FBNkIsVUFBdEMsSUFBb0QsTUFBTSxXQUFOLEVBQTdEO0FBQUEsQ0FBeEI7QUFDQSxJQUFNLGVBQWUsU0FBZixZQUFlO0FBQUEsU0FBUyxTQUFTLE9BQU8sTUFBTSxRQUFiLEtBQTBCLFVBQW5DLElBQWlELE1BQU0sUUFBTixFQUExRDtBQUFBLENBQXJCO0FBQ0EsSUFBTSxlQUFlLFNBQWYsWUFBZTtBQUFBLFNBQVMsU0FBUyxPQUFPLE1BQU0sUUFBYixLQUEwQixVQUFuQyxJQUFpRCxNQUFNLFFBQU4sRUFBMUQ7QUFBQSxDQUFyQjtBQUNBLElBQU0saUJBQWlCLFNBQWpCLGNBQWlCO0FBQUEsU0FBUyxTQUFTLE9BQU8sTUFBTSxVQUFiLEtBQTRCLFVBQXJDLElBQW1ELE1BQU0sVUFBTixFQUE1RDtBQUFBLENBQXZCO0FBQ0EsSUFBTSwwQkFBMEIsZ0JBQUUsSUFBRixDQUFPLENBQUMsQ0FBQyxZQUFELEVBQWUsVUFBQyxLQUFELEVBQVEsS0FBUjtBQUFBLFNBQWtCLGlCQUFPLFVBQVAsQ0FBa0IsS0FBbEIsRUFBeUIsS0FBekIsQ0FBbEI7QUFBQSxDQUFmLENBQUQsRUFBb0UsQ0FBQyxZQUFELEVBQWUsVUFBQyxLQUFELEVBQVEsS0FBUjtBQUFBLFNBQWtCLGlCQUFPLFVBQVAsQ0FBa0IsS0FBbEIsRUFBeUIsS0FBekIsQ0FB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QUNEIiwiZmlsZSI6InRlbXBsYXRlLXByb2Nlc3Nvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TGlzdH0gZnJvbSBcImltbXV0YWJsZVwiO1xuaW1wb3J0IHtNYXliZX0gZnJvbSBcInJhbWRhLWZhbnRhc3lcIjtcbmltcG9ydCBfIGZyb20gXCJyYW1kYVwiO1xuaW1wb3J0IFN5bnRheCBmcm9tIFwiLi9zeW50YXhcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmNvbnN0IGlzRG9sYXJfNjk4ID0gc183MDYgPT4gc183MDYgJiYgc183MDYgaW5zdGFuY2VvZiBTeW50YXggJiYgc183MDYuaXNJZGVudGlmaWVyKCkgJiYgc183MDYudmFsKCkgPT09IFwiJFwiO1xuY29uc3QgaXNEZWxpbWl0ZXJfNjk5ID0gc183MDcgPT4gc183MDcgJiYgdHlwZW9mIHNfNzA3LmlzRGVsaW1pdGVyID09PSBcImZ1bmN0aW9uXCIgJiYgc183MDcuaXNEZWxpbWl0ZXIoKTtcbmNvbnN0IGlzQnJhY2VzXzcwMCA9IHNfNzA4ID0+IHNfNzA4ICYmIHR5cGVvZiBzXzcwOC5pc0JyYWNlcyA9PT0gXCJmdW5jdGlvblwiICYmIHNfNzA4LmlzQnJhY2VzKCk7XG5jb25zdCBpc1BhcmVuc183MDEgPSBzXzcwOSA9PiBzXzcwOSAmJiB0eXBlb2Ygc183MDkuaXNQYXJlbnMgPT09IFwiZnVuY3Rpb25cIiAmJiBzXzcwOS5pc1BhcmVucygpO1xuY29uc3QgaXNCcmFja2V0c183MDIgPSBzXzcxMCA9PiBzXzcxMCAmJiB0eXBlb2Ygc183MTAuaXNCcmFja2V0cyA9PT0gXCJmdW5jdGlvblwiICYmIHNfNzEwLmlzQnJhY2tldHMoKTtcbmNvbnN0IGluc2VydEludG9EZWxpbWl0ZXJfNzAzID0gXy5jb25kKFtbaXNCcmFjZXNfNzAwLCAoc183MTEsIHJfNzEyKSA9PiBTeW50YXguZnJvbUJyYWNlcyhyXzcxMiwgc183MTEpXSwgW2lzUGFyZW5zXzcwMSwgKHNfNzEzLCByXzcxNCkgPT4gU3ludGF4LmZyb21QYXJlbnMocl83MTQsIHNfNzEzKV0sIFtpc0JyYWNrZXRzXzcwMiwgKHNfNzE1LCByXzcxNikgPT4gU3ludGF4LmZyb21CcmFja2V0cyhyXzcxNiwgc183MTUpXV0pO1xuY29uc3QgcHJvY2Vzc183MDQgPSAoYWNjXzcxNywgc183MTgpID0+IHtcbiAgaWYgKGlzQnJhY2VzXzcwMChzXzcxOCkgJiYgaXNEb2xhcl82OTgoYWNjXzcxNy50ZW1wbGF0ZS5sYXN0KCkpKSB7XG4gICAgcmV0dXJuIHt0ZW1wbGF0ZTogYWNjXzcxNy50ZW1wbGF0ZS5wdXNoKFN5bnRheC5mcm9tQnJhY2VzKExpc3Qub2YoU3ludGF4LmZyb21OdW1iZXIoYWNjXzcxNy5pbnRlcnAuc2l6ZSkpLCBzXzcxOCkpLCBpbnRlcnA6IGFjY183MTcuaW50ZXJwLnB1c2goc183MTguaW5uZXIoKSl9O1xuICB9IGVsc2UgaWYgKGlzRGVsaW1pdGVyXzY5OShzXzcxOCkpIHtcbiAgICBsZXQgaW5uZXJSZXN1bHQgPSBwcm9jZXNzVGVtcGxhdGUoc183MTguaW5uZXIoKSwgYWNjXzcxNy5pbnRlcnApO1xuICAgIHJldHVybiB7dGVtcGxhdGU6IGFjY183MTcudGVtcGxhdGUucHVzaChpbnNlcnRJbnRvRGVsaW1pdGVyXzcwMyhzXzcxOCwgaW5uZXJSZXN1bHQudGVtcGxhdGUpKSwgaW50ZXJwOiBpbm5lclJlc3VsdC5pbnRlcnB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7dGVtcGxhdGU6IGFjY183MTcudGVtcGxhdGUucHVzaChzXzcxOCksIGludGVycDogYWNjXzcxNy5pbnRlcnB9O1xuICB9XG59O1xuY29uc3QgcmVwbGFjZV83MDUgPSAoYWNjXzcxOSwgc183MjApID0+IHtcbiAgaWYgKGlzQnJhY2VzXzcwMChzXzcyMCkgJiYgaXNEb2xhcl82OTgoYWNjXzcxOS50ZW1wbGF0ZS5sYXN0KCkpKSB7XG4gICAgbGV0IGluZGV4ID0gc183MjAuaW5uZXIoKS5maXJzdCgpLnZhbCgpO1xuICAgIGFzc2VydChhY2NfNzE5LnJlcC5zaXplID4gaW5kZXgsIFwidW5rbm93biByZXBsYWNlbWVudCB2YWx1ZVwiKTtcbiAgICByZXR1cm4ge3RlbXBsYXRlOiBhY2NfNzE5LnRlbXBsYXRlLnBvcCgpLmNvbmNhdChhY2NfNzE5LnJlcC5nZXQoaW5kZXgpKSwgcmVwOiBhY2NfNzE5LnJlcH07XG4gIH0gZWxzZSBpZiAoaXNEZWxpbWl0ZXJfNjk5KHNfNzIwKSkge1xuICAgIGxldCBpbm5lclJlc3VsdCA9IHJlcGxhY2VUZW1wbGF0ZShzXzcyMC5pbm5lcigpLCBhY2NfNzE5LnJlcCk7XG4gICAgcmV0dXJuIHt0ZW1wbGF0ZTogYWNjXzcxOS50ZW1wbGF0ZS5wdXNoKGluc2VydEludG9EZWxpbWl0ZXJfNzAzKHNfNzIwLCBpbm5lclJlc3VsdCkpLCByZXA6IGFjY183MTkucmVwfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge3RlbXBsYXRlOiBhY2NfNzE5LnRlbXBsYXRlLnB1c2goc183MjApLCByZXA6IGFjY183MTkucmVwfTtcbiAgfVxufTtcbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzVGVtcGxhdGUodGVtcF83MjEsIGludGVycF83MjIgPSBMaXN0KCkpIHtcbiAgcmV0dXJuIHRlbXBfNzIxLnJlZHVjZShwcm9jZXNzXzcwNCwge3RlbXBsYXRlOiBMaXN0KCksIGludGVycDogaW50ZXJwXzcyMn0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VUZW1wbGF0ZSh0ZW1wXzcyMywgcmVwXzcyNCkge1xuICByZXR1cm4gdGVtcF83MjMucmVkdWNlKHJlcGxhY2VfNzA1LCB7dGVtcGxhdGU6IExpc3QoKSwgcmVwOiByZXBfNzI0fSkudGVtcGxhdGU7XG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3RlbXBsYXRlLXByb2Nlc3Nvci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztRQTBDZ0IsZSxHQUFBLGU7UUFHQSxlLEdBQUEsZTs7QUE3Q2hCOztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBLElBQU0sY0FBYyxTQUFkLFdBQWM7QUFBQSxTQUFTLFNBQVMsaUNBQVQsSUFBb0MsTUFBTSxZQUFOLEVBQXBDLElBQTRELE1BQU0sR0FBTixPQUFnQixHQUFyRjtBQUFBLENBQXBCO0FBQ0EsSUFBTSxrQkFBa0IsU0FBbEIsZUFBa0I7QUFBQSxTQUFTLFNBQVMsT0FBTyxNQUFNLFdBQWIsS0FBNkIsVUFBdEMsSUFBb0QsTUFBTSxXQUFOLEVBQTdEO0FBQUEsQ0FBeEI7QUFDQSxJQUFNLGVBQWUsU0FBZixZQUFlO0FBQUEsU0FBUyxTQUFTLE9BQU8sTUFBTSxRQUFiLEtBQTBCLFVBQW5DLElBQWlELE1BQU0sUUFBTixFQUExRDtBQUFBLENBQXJCO0FBQ0EsSUFBTSxlQUFlLFNBQWYsWUFBZTtBQUFBLFNBQVMsU0FBUyxPQUFPLE1BQU0sUUFBYixLQUEwQixVQUFuQyxJQUFpRCxNQUFNLFFBQU4sRUFBMUQ7QUFBQSxDQUFyQjtBQUNBLElBQU0saUJBQWlCLFNBQWpCLGNBQWlCO0FBQUEsU0FBUyxTQUFTLE9BQU8sTUFBTSxVQUFiLEtBQTRCLFVBQXJDLElBQW1ELE1BQU0sVUFBTixFQUE1RDtBQUFBLENBQXZCO0FBQ0EsSUFBTSwwQkFBMEIsZ0JBQUUsSUFBRixDQUFPLENBQUMsQ0FBQyxZQUFELEVBQWUsVUFBQyxLQUFELEVBQVEsS0FBUjtBQUFBLFNBQWtCLGlCQUFPLFVBQVAsQ0FBa0IsS0FBbEIsRUFBeUIsS0FBekIsQ0FBbEI7QUFBQSxDQUFmLENBQUQsRUFBb0UsQ0FBQyxZQUFELEVBQWUsVUFBQyxLQUFELEVBQVEsS0FBUjtBQUFBLFNBQWtCLGlCQUFPLFVBQVAsQ0FBa0IsS0FBbEIsRUFBeUIsS0FBekIsQ0FB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LEtBQUssUUFBUSxHQUF0RCxFQUFQO0FBQ0Q7QUFDRixDQWREO0FBZU8sU0FBUyxlQUFULENBQXlCLFFBQXpCLEVBQXdEO0FBQUEsTUFBckIsVUFBcUIseURBQVIsc0JBQVE7O0FBQzdELFNBQU8sU0FBUyxNQUFULENBQWdCLFdBQWhCLEVBQTZCLEVBQUMsVUFBVSxzQkFBWCxFQUFtQixRQUFRLFVBQTNCLEVBQTdCLENBQVA7QUFDRDtBQUNNLFNBQVMsZUFBVCxDQUF5QixRQUF6QixFQUFtQyxPQUFuQyxFQUE0QztBQUNqRCxTQUFPLFNBQVMsTUFBVCxDQUFnQixXQUFoQixFQUE2QixFQUFDLFVBQVUsc0JBQVgsRUFBbUIsS0FBSyxPQUF4QixFQUE3QixFQUErRCxRQUF0RTtBQUNEIiwiZmlsZSI6InRlbXBsYXRlLXByb2Nlc3Nvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TGlzdH0gZnJvbSBcImltbXV0YWJsZVwiO1xuaW1wb3J0IHtNYXliZX0gZnJvbSBcInJhbWRhLWZhbnRhc3lcIjtcbmltcG9ydCBfIGZyb20gXCJyYW1kYVwiO1xuaW1wb3J0IFN5bnRheCBmcm9tIFwiLi9zeW50YXhcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmNvbnN0IGlzRG9sYXJfNzA5ID0gc183MTggPT4gc183MTggJiYgc183MTggaW5zdGFuY2VvZiBTeW50YXggJiYgc183MTguaXNJZGVudGlmaWVyKCkgJiYgc183MTgudmFsKCkgPT09IFwiJFwiO1xuY29uc3QgaXNEZWxpbWl0ZXJfNzEwID0gc183MTkgPT4gc183MTkgJiYgdHlwZW9mIHNfNzE5LmlzRGVsaW1pdGVyID09PSBcImZ1bmN0aW9uXCIgJiYgc183MTkuaXNEZWxpbWl0ZXIoKTtcbmNvbnN0IGlzQnJhY2VzXzcxMSA9IHNfNzIwID0+IHNfNzIwICYmIHR5cGVvZiBzXzcyMC5pc0JyYWNlcyA9PT0gXCJmdW5jdGlvblwiICYmIHNfNzIwLmlzQnJhY2VzKCk7XG5jb25zdCBpc1BhcmVuc183MTIgPSBzXzcyMSA9PiBzXzcyMSAmJiB0eXBlb2Ygc183MjEuaXNQYXJlbnMgPT09IFwiZnVuY3Rpb25cIiAmJiBzXzcyMS5pc1BhcmVucygpO1xuY29uc3QgaXNCcmFja2V0c183MTMgPSBzXzcyMiA9PiBzXzcyMiAmJiB0eXBlb2Ygc183MjIuaXNCcmFja2V0cyA9PT0gXCJmdW5jdGlvblwiICYmIHNfNzIyLmlzQnJhY2tldHMoKTtcbmNvbnN0IGluc2VydEludG9EZWxpbWl0ZXJfNzE0ID0gXy5jb25kKFtbaXNCcmFjZXNfNzExLCAoc183MjMsIHJfNzI0KSA9PiBTeW50YXguZnJvbUJyYWNlcyhyXzcyNCwgc183MjMpXSwgW2lzUGFyZW5zXzcxMiwgKHNfNzI1LCByXzcyNikgPT4gU3ludGF4LmZyb21QYXJlbnMocl83MjYsIHNfNzI1KV0sIFtpc0JyYWNrZXRzXzcxMywgKHNfNzI3LCByXzcyOCkgPT4gU3ludGF4LmZyb21CcmFja2V0cyhyXzcyOCwgc183MjcpXV0pO1xuY29uc3QgcHJvY2Vzc183MTUgPSAoYWNjXzcyOSwgc183MzApID0+IHtcbiAgaWYgKGlzQnJhY2VzXzcxMShzXzczMCkgJiYgaXNEb2xhcl83MDkoYWNjXzcyOS50ZW1wbGF0ZS5sYXN0KCkpKSB7XG4gICAgcmV0dXJuIHt0ZW1wbGF0ZTogYWNjXzcyOS50ZW1wbGF0ZS5wdXNoKFN5bnRheC5mcm9tQnJhY2VzKExpc3Qub2YoU3ludGF4LmZyb21OdW1iZXIoYWNjXzcyOS5pbnRlcnAuc2l6ZSkpLCBzXzczMCkpLCBpbnRlcnA6IGFjY183MjkuaW50ZXJwLnB1c2goc183MzAuaW5uZXIoKSl9O1xuICB9IGVsc2UgaWYgKGlzRGVsaW1pdGVyXzcxMChzXzczMCkpIHtcbiAgICBsZXQgaW5uZXJSZXN1bHQgPSBwcm9jZXNzVGVtcGxhdGUoc183MzAuaW5uZXIoKSwgYWNjXzcyOS5pbnRlcnApO1xuICAgIHJldHVybiB7dGVtcGxhdGU6IGFjY183MjkudGVtcGxhdGUucHVzaChpbnNlcnRJbnRvRGVsaW1pdGVyXzcxNChzXzczMCwgaW5uZXJSZXN1bHQudGVtcGxhdGUpKSwgaW50ZXJwOiBpbm5lclJlc3VsdC5pbnRlcnB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7dGVtcGxhdGU6IGFjY183MjkudGVtcGxhdGUucHVzaChzXzczMCksIGludGVycDogYWNjXzcyOS5pbnRlcnB9O1xuICB9XG59O1xuZnVuY3Rpb24gY2xvbmVMaW5lTnVtYmVyXzcxNih0b183MzEsIGZyb21fNzMyKSB7XG4gIGlmIChmcm9tXzczMiAmJiB0b183MzEgJiYgdHlwZW9mIHRvXzczMS5zZXRMaW5lTnVtYmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdG9fNzMxLnNldExpbmVOdW1iZXIoZnJvbV83MzIubGluZU51bWJlcigpKTtcbiAgfVxuICByZXR1cm4gdG9fNzMxO1xufVxuY29uc3QgcmVwbGFjZV83MTcgPSAoYWNjXzczMywgc183MzQpID0+IHtcbiAgbGV0IGxhc3RfNzM1ID0gYWNjXzczMy50ZW1wbGF0ZS5nZXQoLTEpO1xuICBsZXQgYmVmb3JlTGFzdF83MzYgPSBhY2NfNzMzLnRlbXBsYXRlLmdldCgtMik7XG4gIGlmIChpc0JyYWNlc183MTEoc183MzQpICYmIGlzRG9sYXJfNzA5KGxhc3RfNzM1KSkge1xuICAgIGxldCBpbmRleCA9IHNfNzM0LmlubmVyKCkuZmlyc3QoKS52YWwoKTtcbiAgICBhc3NlcnQoYWNjXzczMy5yZXAuc2l6ZSA+IGluZGV4LCBcInVua25vd24gcmVwbGFjZW1lbnQgdmFsdWVcIik7XG4gICAgbGV0IHJlcGxhY2VtZW50ID0gY2xvbmVMaW5lTnVtYmVyXzcxNihhY2NfNzMzLnJlcC5nZXQoaW5kZXgpLCBiZWZvcmVMYXN0XzczNik7XG4gICAgcmV0dXJuIHt0ZW1wbGF0ZTogYWNjXzczMy50ZW1wbGF0ZS5wb3AoKS5jb25jYXQocmVwbGFjZW1lbnQpLCByZXA6IGFjY183MzMucmVwfTtcbiAgfSBlbHNlIGlmIChpc0RlbGltaXRlcl83MTAoc183MzQpKSB7XG4gICAgbGV0IGlubmVyUmVzdWx0ID0gcmVwbGFjZVRlbXBsYXRlKHNfNzM0LmlubmVyKCksIGFjY183MzMucmVwKTtcbiAgICByZXR1cm4ge3RlbXBsYXRlOiBhY2NfNzMzLnRlbXBsYXRlLnB1c2goaW5zZXJ0SW50b0RlbGltaXRlcl83MTQoc183MzQsIGlubmVyUmVzdWx0KSksIHJlcDogYWNjXzczMy5yZXB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7dGVtcGxhdGU6IGFjY183MzMudGVtcGxhdGUucHVzaChzXzczNCksIHJlcDogYWNjXzczMy5yZXB9O1xuICB9XG59O1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NUZW1wbGF0ZSh0ZW1wXzczNywgaW50ZXJwXzczOCA9IExpc3QoKSkge1xuICByZXR1cm4gdGVtcF83MzcucmVkdWNlKHByb2Nlc3NfNzE1LCB7dGVtcGxhdGU6IExpc3QoKSwgaW50ZXJwOiBpbnRlcnBfNzM4fSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVRlbXBsYXRlKHRlbXBfNzM5LCByZXBfNzQwKSB7XG4gIHJldHVybiB0ZW1wXzczOS5yZWR1Y2UocmVwbGFjZV83MTcsIHt0ZW1wbGF0ZTogTGlzdCgpLCByZXA6IHJlcF83NDB9KS50ZW1wbGF0ZTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/term-expander.js b/dist/term-expander.js index c26137f9..0fe79bd9 100644 --- a/dist/term-expander.js +++ b/dist/term-expander.js @@ -43,578 +43,578 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var TermExpander = function () { - function TermExpander(context_725) { + function TermExpander(context_741) { _classCallCheck(this, TermExpander); - this.context = context_725; + this.context = context_741; } _createClass(TermExpander, [{ key: "expand", - value: function expand(term_726) { - var field_727 = "expand" + term_726.type; - if (typeof this[field_727] === "function") { - return this[field_727](term_726); + value: function expand(term_742) { + var field_743 = "expand" + term_742.type; + if (typeof this[field_743] === "function") { + return this[field_743](term_742); } - (0, _errors.assert)(false, "expand not implemented yet for: " + term_726.type); + (0, _errors.assert)(false, "expand not implemented yet for: " + term_742.type); } }, { key: "expandTemplateExpression", - value: function expandTemplateExpression(term_728) { - return new _terms2.default("TemplateExpression", { tag: term_728.tag == null ? null : this.expand(term_728.tag), elements: term_728.elements.toArray() }); + value: function expandTemplateExpression(term_744) { + return new _terms2.default("TemplateExpression", { tag: term_744.tag == null ? null : this.expand(term_744.tag), elements: term_744.elements.toArray() }); } }, { key: "expandBreakStatement", - value: function expandBreakStatement(term_729) { - return new _terms2.default("BreakStatement", { label: term_729.label ? term_729.label.val() : null }); + value: function expandBreakStatement(term_745) { + return new _terms2.default("BreakStatement", { label: term_745.label ? term_745.label.val() : null }); } }, { key: "expandDoWhileStatement", - value: function expandDoWhileStatement(term_730) { - return new _terms2.default("DoWhileStatement", { body: this.expand(term_730.body), test: this.expand(term_730.test) }); + value: function expandDoWhileStatement(term_746) { + return new _terms2.default("DoWhileStatement", { body: this.expand(term_746.body), test: this.expand(term_746.test) }); } }, { key: "expandWithStatement", - value: function expandWithStatement(term_731) { - return new _terms2.default("WithStatement", { body: this.expand(term_731.body), object: this.expand(term_731.object) }); + value: function expandWithStatement(term_747) { + return new _terms2.default("WithStatement", { body: this.expand(term_747.body), object: this.expand(term_747.object) }); } }, { key: "expandDebuggerStatement", - value: function expandDebuggerStatement(term_732) { - return term_732; + value: function expandDebuggerStatement(term_748) { + return term_748; } }, { key: "expandContinueStatement", - value: function expandContinueStatement(term_733) { - return new _terms2.default("ContinueStatement", { label: term_733.label ? term_733.label.val() : null }); + value: function expandContinueStatement(term_749) { + return new _terms2.default("ContinueStatement", { label: term_749.label ? term_749.label.val() : null }); } }, { key: "expandSwitchStatementWithDefault", - value: function expandSwitchStatementWithDefault(term_734) { + value: function expandSwitchStatementWithDefault(term_750) { var _this = this; - return new _terms2.default("SwitchStatementWithDefault", { discriminant: this.expand(term_734.discriminant), preDefaultCases: term_734.preDefaultCases.map(function (c_735) { - return _this.expand(c_735); - }).toArray(), defaultCase: this.expand(term_734.defaultCase), postDefaultCases: term_734.postDefaultCases.map(function (c_736) { - return _this.expand(c_736); + return new _terms2.default("SwitchStatementWithDefault", { discriminant: this.expand(term_750.discriminant), preDefaultCases: term_750.preDefaultCases.map(function (c_751) { + return _this.expand(c_751); + }).toArray(), defaultCase: this.expand(term_750.defaultCase), postDefaultCases: term_750.postDefaultCases.map(function (c_752) { + return _this.expand(c_752); }).toArray() }); } }, { key: "expandComputedMemberExpression", - value: function expandComputedMemberExpression(term_737) { - return new _terms2.default("ComputedMemberExpression", { object: this.expand(term_737.object), expression: this.expand(term_737.expression) }); + value: function expandComputedMemberExpression(term_753) { + return new _terms2.default("ComputedMemberExpression", { object: this.expand(term_753.object), expression: this.expand(term_753.expression) }); } }, { key: "expandSwitchStatement", - value: function expandSwitchStatement(term_738) { + value: function expandSwitchStatement(term_754) { var _this2 = this; - return new _terms2.default("SwitchStatement", { discriminant: this.expand(term_738.discriminant), cases: term_738.cases.map(function (c_739) { - return _this2.expand(c_739); + return new _terms2.default("SwitchStatement", { discriminant: this.expand(term_754.discriminant), cases: term_754.cases.map(function (c_755) { + return _this2.expand(c_755); }).toArray() }); } }, { key: "expandFormalParameters", - value: function expandFormalParameters(term_740) { + value: function expandFormalParameters(term_756) { var _this3 = this; - var rest_741 = term_740.rest == null ? null : this.expand(term_740.rest); - return new _terms2.default("FormalParameters", { items: term_740.items.map(function (i_742) { - return _this3.expand(i_742); - }), rest: rest_741 }); + var rest_757 = term_756.rest == null ? null : this.expand(term_756.rest); + return new _terms2.default("FormalParameters", { items: term_756.items.map(function (i_758) { + return _this3.expand(i_758); + }), rest: rest_757 }); } }, { key: "expandArrowExpression", - value: function expandArrowExpression(term_743) { - return this.doFunctionExpansion(term_743, "ArrowExpression"); + value: function expandArrowExpression(term_759) { + return this.doFunctionExpansion(term_759, "ArrowExpression"); } }, { key: "expandSwitchDefault", - value: function expandSwitchDefault(term_744) { + value: function expandSwitchDefault(term_760) { var _this4 = this; - return new _terms2.default("SwitchDefault", { consequent: term_744.consequent.map(function (c_745) { - return _this4.expand(c_745); + return new _terms2.default("SwitchDefault", { consequent: term_760.consequent.map(function (c_761) { + return _this4.expand(c_761); }).toArray() }); } }, { key: "expandSwitchCase", - value: function expandSwitchCase(term_746) { + value: function expandSwitchCase(term_762) { var _this5 = this; - return new _terms2.default("SwitchCase", { test: this.expand(term_746.test), consequent: term_746.consequent.map(function (c_747) { - return _this5.expand(c_747); + return new _terms2.default("SwitchCase", { test: this.expand(term_762.test), consequent: term_762.consequent.map(function (c_763) { + return _this5.expand(c_763); }).toArray() }); } }, { key: "expandForInStatement", - value: function expandForInStatement(term_748) { - return new _terms2.default("ForInStatement", { left: this.expand(term_748.left), right: this.expand(term_748.right), body: this.expand(term_748.body) }); + value: function expandForInStatement(term_764) { + return new _terms2.default("ForInStatement", { left: this.expand(term_764.left), right: this.expand(term_764.right), body: this.expand(term_764.body) }); } }, { key: "expandTryCatchStatement", - value: function expandTryCatchStatement(term_749) { - return new _terms2.default("TryCatchStatement", { body: this.expand(term_749.body), catchClause: this.expand(term_749.catchClause) }); + value: function expandTryCatchStatement(term_765) { + return new _terms2.default("TryCatchStatement", { body: this.expand(term_765.body), catchClause: this.expand(term_765.catchClause) }); } }, { key: "expandTryFinallyStatement", - value: function expandTryFinallyStatement(term_750) { - var catchClause_751 = term_750.catchClause == null ? null : this.expand(term_750.catchClause); - return new _terms2.default("TryFinallyStatement", { body: this.expand(term_750.body), catchClause: catchClause_751, finalizer: this.expand(term_750.finalizer) }); + value: function expandTryFinallyStatement(term_766) { + var catchClause_767 = term_766.catchClause == null ? null : this.expand(term_766.catchClause); + return new _terms2.default("TryFinallyStatement", { body: this.expand(term_766.body), catchClause: catchClause_767, finalizer: this.expand(term_766.finalizer) }); } }, { key: "expandCatchClause", - value: function expandCatchClause(term_752) { - return new _terms2.default("CatchClause", { binding: this.expand(term_752.binding), body: this.expand(term_752.body) }); + value: function expandCatchClause(term_768) { + return new _terms2.default("CatchClause", { binding: this.expand(term_768.binding), body: this.expand(term_768.body) }); } }, { key: "expandThrowStatement", - value: function expandThrowStatement(term_753) { - return new _terms2.default("ThrowStatement", { expression: this.expand(term_753.expression) }); + value: function expandThrowStatement(term_769) { + return new _terms2.default("ThrowStatement", { expression: this.expand(term_769.expression) }); } }, { key: "expandForOfStatement", - value: function expandForOfStatement(term_754) { - return new _terms2.default("ForOfStatement", { left: this.expand(term_754.left), right: this.expand(term_754.right), body: this.expand(term_754.body) }); + value: function expandForOfStatement(term_770) { + return new _terms2.default("ForOfStatement", { left: this.expand(term_770.left), right: this.expand(term_770.right), body: this.expand(term_770.body) }); } }, { key: "expandBindingIdentifier", - value: function expandBindingIdentifier(term_755) { - return term_755; + value: function expandBindingIdentifier(term_771) { + return term_771; } }, { key: "expandBindingPropertyIdentifier", - value: function expandBindingPropertyIdentifier(term_756) { - return term_756; + value: function expandBindingPropertyIdentifier(term_772) { + return term_772; } }, { key: "expandBindingPropertyProperty", - value: function expandBindingPropertyProperty(term_757) { - return new _terms2.default("BindingPropertyProperty", { name: this.expand(term_757.name), binding: this.expand(term_757.binding) }); + value: function expandBindingPropertyProperty(term_773) { + return new _terms2.default("BindingPropertyProperty", { name: this.expand(term_773.name), binding: this.expand(term_773.binding) }); } }, { key: "expandComputedPropertyName", - value: function expandComputedPropertyName(term_758) { - return new _terms2.default("ComputedPropertyName", { expression: this.expand(term_758.expression) }); + value: function expandComputedPropertyName(term_774) { + return new _terms2.default("ComputedPropertyName", { expression: this.expand(term_774.expression) }); } }, { key: "expandObjectBinding", - value: function expandObjectBinding(term_759) { + value: function expandObjectBinding(term_775) { var _this6 = this; - return new _terms2.default("ObjectBinding", { properties: term_759.properties.map(function (t_760) { - return _this6.expand(t_760); + return new _terms2.default("ObjectBinding", { properties: term_775.properties.map(function (t_776) { + return _this6.expand(t_776); }).toArray() }); } }, { key: "expandArrayBinding", - value: function expandArrayBinding(term_761) { + value: function expandArrayBinding(term_777) { var _this7 = this; - var restElement_762 = term_761.restElement == null ? null : this.expand(term_761.restElement); - return new _terms2.default("ArrayBinding", { elements: term_761.elements.map(function (t_763) { - return t_763 == null ? null : _this7.expand(t_763); - }).toArray(), restElement: restElement_762 }); + var restElement_778 = term_777.restElement == null ? null : this.expand(term_777.restElement); + return new _terms2.default("ArrayBinding", { elements: term_777.elements.map(function (t_779) { + return t_779 == null ? null : _this7.expand(t_779); + }).toArray(), restElement: restElement_778 }); } }, { key: "expandBindingWithDefault", - value: function expandBindingWithDefault(term_764) { - return new _terms2.default("BindingWithDefault", { binding: this.expand(term_764.binding), init: this.expand(term_764.init) }); + value: function expandBindingWithDefault(term_780) { + return new _terms2.default("BindingWithDefault", { binding: this.expand(term_780.binding), init: this.expand(term_780.init) }); } }, { key: "expandShorthandProperty", - value: function expandShorthandProperty(term_765) { - return new _terms2.default("DataProperty", { name: new _terms2.default("StaticPropertyName", { value: term_765.name }), expression: new _terms2.default("IdentifierExpression", { name: term_765.name }) }); + value: function expandShorthandProperty(term_781) { + return new _terms2.default("DataProperty", { name: new _terms2.default("StaticPropertyName", { value: term_781.name }), expression: new _terms2.default("IdentifierExpression", { name: term_781.name }) }); } }, { key: "expandForStatement", - value: function expandForStatement(term_766) { - var init_767 = term_766.init == null ? null : this.expand(term_766.init); - var test_768 = term_766.test == null ? null : this.expand(term_766.test); - var update_769 = term_766.update == null ? null : this.expand(term_766.update); - var body_770 = this.expand(term_766.body); - return new _terms2.default("ForStatement", { init: init_767, test: test_768, update: update_769, body: body_770 }); + value: function expandForStatement(term_782) { + var init_783 = term_782.init == null ? null : this.expand(term_782.init); + var test_784 = term_782.test == null ? null : this.expand(term_782.test); + var update_785 = term_782.update == null ? null : this.expand(term_782.update); + var body_786 = this.expand(term_782.body); + return new _terms2.default("ForStatement", { init: init_783, test: test_784, update: update_785, body: body_786 }); } }, { key: "expandYieldExpression", - value: function expandYieldExpression(term_771) { - var expr_772 = term_771.expression == null ? null : this.expand(term_771.expression); - return new _terms2.default("YieldExpression", { expression: expr_772 }); + value: function expandYieldExpression(term_787) { + var expr_788 = term_787.expression == null ? null : this.expand(term_787.expression); + return new _terms2.default("YieldExpression", { expression: expr_788 }); } }, { key: "expandYieldGeneratorExpression", - value: function expandYieldGeneratorExpression(term_773) { - var expr_774 = term_773.expression == null ? null : this.expand(term_773.expression); - return new _terms2.default("YieldGeneratorExpression", { expression: expr_774 }); + value: function expandYieldGeneratorExpression(term_789) { + var expr_790 = term_789.expression == null ? null : this.expand(term_789.expression); + return new _terms2.default("YieldGeneratorExpression", { expression: expr_790 }); } }, { key: "expandWhileStatement", - value: function expandWhileStatement(term_775) { - return new _terms2.default("WhileStatement", { test: this.expand(term_775.test), body: this.expand(term_775.body) }); + value: function expandWhileStatement(term_791) { + return new _terms2.default("WhileStatement", { test: this.expand(term_791.test), body: this.expand(term_791.body) }); } }, { key: "expandIfStatement", - value: function expandIfStatement(term_776) { - var consequent_777 = term_776.consequent == null ? null : this.expand(term_776.consequent); - var alternate_778 = term_776.alternate == null ? null : this.expand(term_776.alternate); - return new _terms2.default("IfStatement", { test: this.expand(term_776.test), consequent: consequent_777, alternate: alternate_778 }); + value: function expandIfStatement(term_792) { + var consequent_793 = term_792.consequent == null ? null : this.expand(term_792.consequent); + var alternate_794 = term_792.alternate == null ? null : this.expand(term_792.alternate); + return new _terms2.default("IfStatement", { test: this.expand(term_792.test), consequent: consequent_793, alternate: alternate_794 }); } }, { key: "expandBlockStatement", - value: function expandBlockStatement(term_779) { - return new _terms2.default("BlockStatement", { block: this.expand(term_779.block) }); + value: function expandBlockStatement(term_795) { + return new _terms2.default("BlockStatement", { block: this.expand(term_795.block) }); } }, { key: "expandBlock", - value: function expandBlock(term_780) { + value: function expandBlock(term_796) { var _this8 = this; - return new _terms2.default("Block", { statements: term_780.statements.map(function (s_781) { - return _this8.expand(s_781); + return new _terms2.default("Block", { statements: term_796.statements.map(function (s_797) { + return _this8.expand(s_797); }).toArray() }); } }, { key: "expandVariableDeclarationStatement", - value: function expandVariableDeclarationStatement(term_782) { - return new _terms2.default("VariableDeclarationStatement", { declaration: this.expand(term_782.declaration) }); + value: function expandVariableDeclarationStatement(term_798) { + return new _terms2.default("VariableDeclarationStatement", { declaration: this.expand(term_798.declaration) }); } }, { key: "expandReturnStatement", - value: function expandReturnStatement(term_783) { - if (term_783.expression == null) { - return term_783; + value: function expandReturnStatement(term_799) { + if (term_799.expression == null) { + return term_799; } - return new _terms2.default("ReturnStatement", { expression: this.expand(term_783.expression) }); + return new _terms2.default("ReturnStatement", { expression: this.expand(term_799.expression) }); } }, { key: "expandClassDeclaration", - value: function expandClassDeclaration(term_784) { + value: function expandClassDeclaration(term_800) { var _this9 = this; - return new _terms2.default("ClassDeclaration", { name: term_784.name == null ? null : this.expand(term_784.name), super: term_784.super == null ? null : this.expand(term_784.super), elements: term_784.elements.map(function (el_785) { - return _this9.expand(el_785); + return new _terms2.default("ClassDeclaration", { name: term_800.name == null ? null : this.expand(term_800.name), super: term_800.super == null ? null : this.expand(term_800.super), elements: term_800.elements.map(function (el_801) { + return _this9.expand(el_801); }).toArray() }); } }, { key: "expandClassExpression", - value: function expandClassExpression(term_786) { + value: function expandClassExpression(term_802) { var _this10 = this; - return new _terms2.default("ClassExpression", { name: term_786.name == null ? null : this.expand(term_786.name), super: term_786.super == null ? null : this.expand(term_786.super), elements: term_786.elements.map(function (el_787) { - return _this10.expand(el_787); + return new _terms2.default("ClassExpression", { name: term_802.name == null ? null : this.expand(term_802.name), super: term_802.super == null ? null : this.expand(term_802.super), elements: term_802.elements.map(function (el_803) { + return _this10.expand(el_803); }).toArray() }); } }, { key: "expandClassElement", - value: function expandClassElement(term_788) { - return new _terms2.default("ClassElement", { isStatic: term_788.isStatic, method: this.expand(term_788.method) }); + value: function expandClassElement(term_804) { + return new _terms2.default("ClassElement", { isStatic: term_804.isStatic, method: this.expand(term_804.method) }); } }, { key: "expandThisExpression", - value: function expandThisExpression(term_789) { - return term_789; + value: function expandThisExpression(term_805) { + return term_805; } }, { key: "expandSyntaxTemplate", - value: function expandSyntaxTemplate(term_790) { + value: function expandSyntaxTemplate(term_806) { var _this11 = this; - var expander_791 = new _expander2.default(this.context); - var r_792 = (0, _templateProcessor.processTemplate)(term_790.template.inner()); - var str_793 = _syntax2.default.fromString(_serializer.serializer.write(r_792.template)); - var callee_794 = new _terms2.default("IdentifierExpression", { name: _syntax2.default.fromIdentifier("syntaxTemplate") }); - var expandedInterps_795 = r_792.interp.map(function (i_797) { - var enf_798 = new _enforester.Enforester(i_797, (0, _immutable.List)(), _this11.context); - return _this11.expand(enf_798.enforest("expression")); + var expander_807 = new _expander2.default(this.context); + var r_808 = (0, _templateProcessor.processTemplate)(term_806.template.inner()); + var str_809 = _syntax2.default.fromString(_serializer.serializer.write(r_808.template)); + var callee_810 = new _terms2.default("IdentifierExpression", { name: _syntax2.default.fromIdentifier("syntaxTemplate") }); + var expandedInterps_811 = r_808.interp.map(function (i_813) { + var enf_814 = new _enforester.Enforester(i_813, (0, _immutable.List)(), _this11.context); + return _this11.expand(enf_814.enforest("expression")); }); - var args_796 = _immutable.List.of(new _terms2.default("LiteralStringExpression", { value: str_793 })).concat(expandedInterps_795); - return new _terms2.default("CallExpression", { callee: callee_794, arguments: args_796 }); + var args_812 = _immutable.List.of(new _terms2.default("LiteralStringExpression", { value: str_809 })).concat(expandedInterps_811); + return new _terms2.default("CallExpression", { callee: callee_810, arguments: args_812 }); } }, { key: "expandSyntaxQuote", - value: function expandSyntaxQuote(term_799) { - var str_800 = new _terms2.default("LiteralStringExpression", { value: _syntax2.default.fromString(_serializer.serializer.write(term_799.name)) }); - return new _terms2.default("TemplateExpression", { tag: term_799.template.tag, elements: term_799.template.elements.push(str_800).push(new _terms2.default("TemplateElement", { rawValue: "" })).toArray() }); + value: function expandSyntaxQuote(term_815) { + var str_816 = new _terms2.default("LiteralStringExpression", { value: _syntax2.default.fromString(_serializer.serializer.write(term_815.name)) }); + return new _terms2.default("TemplateExpression", { tag: term_815.template.tag, elements: term_815.template.elements.push(str_816).push(new _terms2.default("TemplateElement", { rawValue: "" })).toArray() }); } }, { key: "expandStaticMemberExpression", - value: function expandStaticMemberExpression(term_801) { - return new _terms2.default("StaticMemberExpression", { object: this.expand(term_801.object), property: term_801.property }); + value: function expandStaticMemberExpression(term_817) { + return new _terms2.default("StaticMemberExpression", { object: this.expand(term_817.object), property: term_817.property }); } }, { key: "expandArrayExpression", - value: function expandArrayExpression(term_802) { + value: function expandArrayExpression(term_818) { var _this12 = this; - return new _terms2.default("ArrayExpression", { elements: term_802.elements.map(function (t_803) { - return t_803 == null ? t_803 : _this12.expand(t_803); + return new _terms2.default("ArrayExpression", { elements: term_818.elements.map(function (t_819) { + return t_819 == null ? t_819 : _this12.expand(t_819); }) }); } }, { key: "expandImport", - value: function expandImport(term_804) { - return term_804; + value: function expandImport(term_820) { + return term_820; } }, { key: "expandImportNamespace", - value: function expandImportNamespace(term_805) { - return term_805; + value: function expandImportNamespace(term_821) { + return term_821; } }, { key: "expandExport", - value: function expandExport(term_806) { - return new _terms2.default("Export", { declaration: this.expand(term_806.declaration) }); + value: function expandExport(term_822) { + return new _terms2.default("Export", { declaration: this.expand(term_822.declaration) }); } }, { key: "expandExportDefault", - value: function expandExportDefault(term_807) { - return new _terms2.default("ExportDefault", { body: this.expand(term_807.body) }); + value: function expandExportDefault(term_823) { + return new _terms2.default("ExportDefault", { body: this.expand(term_823.body) }); } }, { key: "expandExportFrom", - value: function expandExportFrom(term_808) { - return term_808; + value: function expandExportFrom(term_824) { + return term_824; } }, { key: "expandExportAllFrom", - value: function expandExportAllFrom(term_809) { - return term_809; + value: function expandExportAllFrom(term_825) { + return term_825; } }, { key: "expandExportSpecifier", - value: function expandExportSpecifier(term_810) { - return term_810; + value: function expandExportSpecifier(term_826) { + return term_826; } }, { key: "expandStaticPropertyName", - value: function expandStaticPropertyName(term_811) { - return term_811; + value: function expandStaticPropertyName(term_827) { + return term_827; } }, { key: "expandDataProperty", - value: function expandDataProperty(term_812) { - return new _terms2.default("DataProperty", { name: this.expand(term_812.name), expression: this.expand(term_812.expression) }); + value: function expandDataProperty(term_828) { + return new _terms2.default("DataProperty", { name: this.expand(term_828.name), expression: this.expand(term_828.expression) }); } }, { key: "expandObjectExpression", - value: function expandObjectExpression(term_813) { + value: function expandObjectExpression(term_829) { var _this13 = this; - return new _terms2.default("ObjectExpression", { properties: term_813.properties.map(function (t_814) { - return _this13.expand(t_814); + return new _terms2.default("ObjectExpression", { properties: term_829.properties.map(function (t_830) { + return _this13.expand(t_830); }) }); } }, { key: "expandVariableDeclarator", - value: function expandVariableDeclarator(term_815) { - var init_816 = term_815.init == null ? null : this.expand(term_815.init); - return new _terms2.default("VariableDeclarator", { binding: this.expand(term_815.binding), init: init_816 }); + value: function expandVariableDeclarator(term_831) { + var init_832 = term_831.init == null ? null : this.expand(term_831.init); + return new _terms2.default("VariableDeclarator", { binding: this.expand(term_831.binding), init: init_832 }); } }, { key: "expandVariableDeclaration", - value: function expandVariableDeclaration(term_817) { + value: function expandVariableDeclaration(term_833) { var _this14 = this; - return new _terms2.default("VariableDeclaration", { kind: term_817.kind, declarators: term_817.declarators.map(function (d_818) { - return _this14.expand(d_818); + return new _terms2.default("VariableDeclaration", { kind: term_833.kind, declarators: term_833.declarators.map(function (d_834) { + return _this14.expand(d_834); }) }); } }, { key: "expandParenthesizedExpression", - value: function expandParenthesizedExpression(term_819) { - if (term_819.inner.size === 0) { + value: function expandParenthesizedExpression(term_835) { + if (term_835.inner.size === 0) { throw new Error("unexpected end of input"); } - var enf_820 = new _enforester.Enforester(term_819.inner, (0, _immutable.List)(), this.context); - var lookahead_821 = enf_820.peek(); - var t_822 = enf_820.enforestExpression(); - if (t_822 == null || enf_820.rest.size > 0) { - throw enf_820.createError(lookahead_821, "unexpected syntax"); + var enf_836 = new _enforester.Enforester(term_835.inner, (0, _immutable.List)(), this.context); + var lookahead_837 = enf_836.peek(); + var t_838 = enf_836.enforestExpression(); + if (t_838 == null || enf_836.rest.size > 0) { + throw enf_836.createError(lookahead_837, "unexpected syntax"); } - return this.expand(t_822); + return this.expand(t_838); } }, { key: "expandUnaryExpression", - value: function expandUnaryExpression(term_823) { - return new _terms2.default("UnaryExpression", { operator: term_823.operator, operand: this.expand(term_823.operand) }); + value: function expandUnaryExpression(term_839) { + return new _terms2.default("UnaryExpression", { operator: term_839.operator, operand: this.expand(term_839.operand) }); } }, { key: "expandUpdateExpression", - value: function expandUpdateExpression(term_824) { - return new _terms2.default("UpdateExpression", { isPrefix: term_824.isPrefix, operator: term_824.operator, operand: this.expand(term_824.operand) }); + value: function expandUpdateExpression(term_840) { + return new _terms2.default("UpdateExpression", { isPrefix: term_840.isPrefix, operator: term_840.operator, operand: this.expand(term_840.operand) }); } }, { key: "expandBinaryExpression", - value: function expandBinaryExpression(term_825) { - var left_826 = this.expand(term_825.left); - var right_827 = this.expand(term_825.right); - return new _terms2.default("BinaryExpression", { left: left_826, operator: term_825.operator, right: right_827 }); + value: function expandBinaryExpression(term_841) { + var left_842 = this.expand(term_841.left); + var right_843 = this.expand(term_841.right); + return new _terms2.default("BinaryExpression", { left: left_842, operator: term_841.operator, right: right_843 }); } }, { key: "expandConditionalExpression", - value: function expandConditionalExpression(term_828) { - return new _terms2.default("ConditionalExpression", { test: this.expand(term_828.test), consequent: this.expand(term_828.consequent), alternate: this.expand(term_828.alternate) }); + value: function expandConditionalExpression(term_844) { + return new _terms2.default("ConditionalExpression", { test: this.expand(term_844.test), consequent: this.expand(term_844.consequent), alternate: this.expand(term_844.alternate) }); } }, { key: "expandNewTargetExpression", - value: function expandNewTargetExpression(term_829) { - return term_829; + value: function expandNewTargetExpression(term_845) { + return term_845; } }, { key: "expandNewExpression", - value: function expandNewExpression(term_830) { + value: function expandNewExpression(term_846) { var _this15 = this; - var callee_831 = this.expand(term_830.callee); - var enf_832 = new _enforester.Enforester(term_830.arguments, (0, _immutable.List)(), this.context); - var args_833 = enf_832.enforestArgumentList().map(function (arg_834) { - return _this15.expand(arg_834); + var callee_847 = this.expand(term_846.callee); + var enf_848 = new _enforester.Enforester(term_846.arguments, (0, _immutable.List)(), this.context); + var args_849 = enf_848.enforestArgumentList().map(function (arg_850) { + return _this15.expand(arg_850); }); - return new _terms2.default("NewExpression", { callee: callee_831, arguments: args_833.toArray() }); + return new _terms2.default("NewExpression", { callee: callee_847, arguments: args_849.toArray() }); } }, { key: "expandSuper", - value: function expandSuper(term_835) { - return term_835; + value: function expandSuper(term_851) { + return term_851; } }, { key: "expandCallExpression", - value: function expandCallExpression(term_836) { + value: function expandCallExpression(term_852) { var _this16 = this; - var callee_837 = this.expand(term_836.callee); - var enf_838 = new _enforester.Enforester(term_836.arguments, (0, _immutable.List)(), this.context); - var args_839 = enf_838.enforestArgumentList().map(function (arg_840) { - return _this16.expand(arg_840); + var callee_853 = this.expand(term_852.callee); + var enf_854 = new _enforester.Enforester(term_852.arguments, (0, _immutable.List)(), this.context); + var args_855 = enf_854.enforestArgumentList().map(function (arg_856) { + return _this16.expand(arg_856); }); - return new _terms2.default("CallExpression", { callee: callee_837, arguments: args_839 }); + return new _terms2.default("CallExpression", { callee: callee_853, arguments: args_855 }); } }, { key: "expandSpreadElement", - value: function expandSpreadElement(term_841) { - return new _terms2.default("SpreadElement", { expression: this.expand(term_841.expression) }); + value: function expandSpreadElement(term_857) { + return new _terms2.default("SpreadElement", { expression: this.expand(term_857.expression) }); } }, { key: "expandExpressionStatement", - value: function expandExpressionStatement(term_842) { - var child_843 = this.expand(term_842.expression); - return new _terms2.default("ExpressionStatement", { expression: child_843 }); + value: function expandExpressionStatement(term_858) { + var child_859 = this.expand(term_858.expression); + return new _terms2.default("ExpressionStatement", { expression: child_859 }); } }, { key: "expandLabeledStatement", - value: function expandLabeledStatement(term_844) { - return new _terms2.default("LabeledStatement", { label: term_844.label.val(), body: this.expand(term_844.body) }); + value: function expandLabeledStatement(term_860) { + return new _terms2.default("LabeledStatement", { label: term_860.label.val(), body: this.expand(term_860.body) }); } }, { key: "doFunctionExpansion", - value: function doFunctionExpansion(term_845, type_846) { + value: function doFunctionExpansion(term_861, type_862) { var _this17 = this; - var scope_847 = (0, _scope.freshScope)("fun"); - var red_848 = new _applyScopeInParamsReducer2.default(scope_847, this.context); - var params_849 = void 0; - if (type_846 !== "Getter" && type_846 !== "Setter") { - params_849 = red_848.transform(term_845.params); - params_849 = this.expand(params_849); + var scope_863 = (0, _scope.freshScope)("fun"); + var red_864 = new _applyScopeInParamsReducer2.default(scope_863, this.context); + var params_865 = void 0; + if (type_862 !== "Getter" && type_862 !== "Setter") { + params_865 = red_864.transform(term_861.params); + params_865 = this.expand(params_865); } - this.context.currentScope.push(scope_847); - var expander_850 = new _expander2.default(this.context); - var markedBody_851 = void 0, - bodyTerm_852 = void 0; - if (term_845.body instanceof _terms2.default) { - bodyTerm_852 = this.expand(term_845.body.addScope(scope_847, this.context.bindings)); + this.context.currentScope.push(scope_863); + var expander_866 = new _expander2.default(this.context); + var markedBody_867 = void 0, + bodyTerm_868 = void 0; + if (term_861.body instanceof _terms2.default) { + bodyTerm_868 = this.expand(term_861.body.addScope(scope_863, this.context.bindings)); } else { - markedBody_851 = term_845.body.map(function (b_853) { - return b_853.addScope(scope_847, _this17.context.bindings); + markedBody_867 = term_861.body.map(function (b_869) { + return b_869.addScope(scope_863, _this17.context.bindings); }); - bodyTerm_852 = new _terms2.default("FunctionBody", { directives: (0, _immutable.List)(), statements: expander_850.expand(markedBody_851) }); + bodyTerm_868 = new _terms2.default("FunctionBody", { directives: (0, _immutable.List)(), statements: expander_866.expand(markedBody_867) }); } this.context.currentScope.pop(); - if (type_846 === "Getter") { - return new _terms2.default(type_846, { name: this.expand(term_845.name), body: bodyTerm_852 }); - } else if (type_846 === "Setter") { - return new _terms2.default(type_846, { name: this.expand(term_845.name), param: term_845.param, body: bodyTerm_852 }); + if (type_862 === "Getter") { + return new _terms2.default(type_862, { name: this.expand(term_861.name), body: bodyTerm_868 }); + } else if (type_862 === "Setter") { + return new _terms2.default(type_862, { name: this.expand(term_861.name), param: term_861.param, body: bodyTerm_868 }); } - return new _terms2.default(type_846, { name: term_845.name, isGenerator: term_845.isGenerator, params: params_849, body: bodyTerm_852 }); + return new _terms2.default(type_862, { name: term_861.name, isGenerator: term_861.isGenerator, params: params_865, body: bodyTerm_868 }); } }, { key: "expandMethod", - value: function expandMethod(term_854) { - return this.doFunctionExpansion(term_854, "Method"); + value: function expandMethod(term_870) { + return this.doFunctionExpansion(term_870, "Method"); } }, { key: "expandSetter", - value: function expandSetter(term_855) { - return this.doFunctionExpansion(term_855, "Setter"); + value: function expandSetter(term_871) { + return this.doFunctionExpansion(term_871, "Setter"); } }, { key: "expandGetter", - value: function expandGetter(term_856) { - return this.doFunctionExpansion(term_856, "Getter"); + value: function expandGetter(term_872) { + return this.doFunctionExpansion(term_872, "Getter"); } }, { key: "expandFunctionDeclaration", - value: function expandFunctionDeclaration(term_857) { - return this.doFunctionExpansion(term_857, "FunctionDeclaration"); + value: function expandFunctionDeclaration(term_873) { + return this.doFunctionExpansion(term_873, "FunctionDeclaration"); } }, { key: "expandFunctionExpression", - value: function expandFunctionExpression(term_858) { - return this.doFunctionExpansion(term_858, "FunctionExpression"); + value: function expandFunctionExpression(term_874) { + return this.doFunctionExpansion(term_874, "FunctionExpression"); } }, { key: "expandCompoundAssignmentExpression", - value: function expandCompoundAssignmentExpression(term_859) { - return new _terms2.default("CompoundAssignmentExpression", { binding: this.expand(term_859.binding), operator: term_859.operator, expression: this.expand(term_859.expression) }); + value: function expandCompoundAssignmentExpression(term_875) { + return new _terms2.default("CompoundAssignmentExpression", { binding: this.expand(term_875.binding), operator: term_875.operator, expression: this.expand(term_875.expression) }); } }, { key: "expandAssignmentExpression", - value: function expandAssignmentExpression(term_860) { - return new _terms2.default("AssignmentExpression", { binding: this.expand(term_860.binding), expression: this.expand(term_860.expression) }); + value: function expandAssignmentExpression(term_876) { + return new _terms2.default("AssignmentExpression", { binding: this.expand(term_876.binding), expression: this.expand(term_876.expression) }); } }, { key: "expandEmptyStatement", - value: function expandEmptyStatement(term_861) { - return term_861; + value: function expandEmptyStatement(term_877) { + return term_877; } }, { key: "expandLiteralBooleanExpression", - value: function expandLiteralBooleanExpression(term_862) { - return term_862; + value: function expandLiteralBooleanExpression(term_878) { + return term_878; } }, { key: "expandLiteralNumericExpression", - value: function expandLiteralNumericExpression(term_863) { - return term_863; + value: function expandLiteralNumericExpression(term_879) { + return term_879; } }, { key: "expandLiteralInfinityExpression", - value: function expandLiteralInfinityExpression(term_864) { - return term_864; + value: function expandLiteralInfinityExpression(term_880) { + return term_880; } }, { key: "expandIdentifierExpression", - value: function expandIdentifierExpression(term_865) { - var trans_866 = this.context.env.get(term_865.name.resolve()); - if (trans_866) { - return new _terms2.default("IdentifierExpression", { name: trans_866.id }); + value: function expandIdentifierExpression(term_881) { + var trans_882 = this.context.env.get(term_881.name.resolve()); + if (trans_882) { + return new _terms2.default("IdentifierExpression", { name: trans_882.id }); } - return term_865; + return term_881; } }, { key: "expandLiteralNullExpression", - value: function expandLiteralNullExpression(term_867) { - return term_867; + value: function expandLiteralNullExpression(term_883) { + return term_883; } }, { key: "expandLiteralStringExpression", - value: function expandLiteralStringExpression(term_868) { - return term_868; + value: function expandLiteralStringExpression(term_884) { + return term_884; } }, { key: "expandLiteralRegExpExpression", - value: function expandLiteralRegExpExpression(term_869) { - return term_869; + value: function expandLiteralRegExpExpression(term_885) { + return term_885; } }]); @@ -622,4 +622,4 @@ var TermExpander = function () { }(); exports.default = TermExpander; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3Rlcm0tZXhwYW5kZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7QUFDQTs7OztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztJQUNxQixZO0FBQ25CLHdCQUFZLFdBQVosRUFBeUI7QUFBQTs7QUFDdkIsU0FBSyxPQUFMLEdBQWUsV0FBZjtBQUNEOzs7OzJCQUNNLFEsRUFBVTtBQUNmLFVBQUksWUFBWSxXQUFXLFNBQVMsSUFBcEM7QUFDQSxVQUFJLE9BQU8sS0FBSyxTQUFMLENBQVAsS0FBMkIsVUFBL0IsRUFBMkM7QUFDekMsZUFBTyxLQUFLLFNBQUwsRUFBZ0IsUUFBaEIsQ0FBUDtBQUNEO0FBQ0QsMEJBQU8sS0FBUCxFQUFjLHFDQUFxQyxTQUFTLElBQTVEO0FBQ0Q7Ozs2Q0FDd0IsUSxFQUFVO0FBQ2pDLGFBQU8sb0JBQVMsb0JBQVQsRUFBK0IsRUFBQyxLQUFLLFNBQVMsR0FBVCxJQUFnQixJQUFoQixHQUF1QixJQUF2QixHQUE4QixLQUFLLE1BQUwsQ0FBWSxTQUFTLEdBQXJCLENBQXBDLEVBQStELFVBQVUsU0FBUyxRQUFULENBQWtCLE9BQWxCLEVBQXpFLEVBQS9CLENBQVA7QUFDRDs7O3lDQUNvQixRLEVBQVU7QUFDN0IsYUFBTyxvQkFBUyxnQkFBVCxFQUEyQixFQUFDLE9BQU8sU0FBUyxLQUFULEdBQWlCLFNBQVMsS0FBVCxDQUFlLEdBQWYsRUFBakIsR0FBd0MsSUFBaEQsRUFBM0IsQ0FBUDtBQUNEOzs7MkNBQ3NCLFEsRUFBVTtBQUMvQixhQUFPLG9CQUFTLGtCQUFULEVBQTZCLEVBQUMsTUFBTSxLQUFLLE1BQUwsQ0FBWSxTQUFTLElBQXJCLENBQVAsRUFBbUMsTUFBTSxLQUFLLE1BQUwsQ0FBWSxTQUFTLElBQXJCLENBQXpDLEVBQTdCLENBQVA7QUFDRDs7O3dDQUNtQixRLEVBQVU7QUFDNUIsYUFBTyxvQkFBUyxl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SyxNQUFMLENBQVksU0FBUyxVQUFyQixDQUFsRixFQUF6QyxDQUFQO0FBQ0Q7OzsrQ0FDMEIsUSxFQUFVO0FBQ25DLGFBQU8sb0JBQVMsc0JBQVQsRUFBaUMsRUFBQyxTQUFTLEtBQUssTUFBTCxDQUFZLFNBQVMsT0FBckIsQ0FBVixFQUF5QyxZQUFZLEtBQUssTUFBTCxDQUFZLFNBQVMsVUFBckIsQ0FBckQsRUFBakMsQ0FBUDtBQUNEOzs7eUNBQ29CLFEsRUFBVTtBQUM3QixhQUFPLFFBQVA7QUFDRDs7O21EQUM4QixRLEVBQVU7QUFDdkMsYUFBTyxRQUFQO0FBQ0Q7OzttREFDOEIsUSxFQUFVO0FBQ3ZDLGFBQU8sUUFBUDtBQUNEOzs7b0RBQytCLFEsRUFBVTtBQUN4QyxhQUFPLFFBQVA7QUFDRDs7OytDQUMwQixRLEVBQVU7QUFDbkMsVUFBSSxZQUFZLEtBQUssT0FBTCxDQUFhLEdBQWIsQ0FBaUIsR0FBakIsQ0FBcUIsU0FBUyxJQUFULENBQWMsT0FBZCxFQUFyQixDQUFoQjtBQUNBLFVBQUksU0FBSixFQUFlO0FBQ2IsZUFBTyxvQkFBUyxzQkFBVCxFQUFpQyxFQUFDLE1BQU0sVUFBVSxFQUFqQixFQUFqQyxDQUFQO0FBQ0Q7QUFDRCxhQUFPLFFBQVA7QUFDRDs7O2dEQUMyQixRLEVBQVU7QUFDcEMsYUFBTyxRQUFQO0FBQ0Q7OztrREFDNkIsUSxFQUFVO0FBQ3RDLGFBQU8sUUFBUDtBQUNEOzs7a0RBQzZCLFEsRUFBVTtBQUN0QyxhQUFPLFFBQVA7QUFDRDs7Ozs7O2tCQTNVa0IsWSIsImZpbGUiOiJ0ZXJtLWV4cGFuZGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMaXN0fSBmcm9tIFwiaW1tdXRhYmxlXCI7XG5pbXBvcnQgVGVybSwge2lzRU9GLCBpc0JpbmRpbmdJZGVudGlmaWVyLCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIGlzRnVuY3Rpb25FeHByZXNzaW9uLCBpc0Z1bmN0aW9uVGVybSwgaXNGdW5jdGlvbldpdGhOYW1lLCBpc1N5bnRheERlY2xhcmF0aW9uLCBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sIGlzVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCwgaXNJbXBvcnQsIGlzRXhwb3J0fSBmcm9tIFwiLi90ZXJtc1wiO1xuaW1wb3J0IHtTY29wZSwgZnJlc2hTY29wZX0gZnJvbSBcIi4vc2NvcGVcIjtcbmltcG9ydCBBcHBseVNjb3BlSW5QYXJhbXNSZWR1Y2VyIGZyb20gXCIuL2FwcGx5LXNjb3BlLWluLXBhcmFtcy1yZWR1Y2VyXCI7XG5pbXBvcnQgcmVkdWNlciwge01vbm9pZGFsUmVkdWNlcn0gZnJvbSBcInNoaWZ0LXJlZHVjZXJcIjtcbmltcG9ydCBFeHBhbmRlciBmcm9tIFwiLi9leHBhbmRlclwiO1xuaW1wb3J0IFN5bnRheCBmcm9tIFwiLi9zeW50YXhcIjtcbmltcG9ydCB7c2VyaWFsaXplciwgbWFrZURlc2VyaWFsaXplcn0gZnJvbSBcIi4vc2VyaWFsaXplclwiO1xuaW1wb3J0IHtlbmZvcmVzdEV4cHIsIEVuZm9yZXN0ZXJ9IGZyb20gXCIuL2VuZm9yZXN0ZXJcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7cHJvY2Vzc1RlbXBsYXRlfSBmcm9tIFwiLi90ZW1wbGF0ZS1wcm9jZXNzb3IuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1FeHBhbmRlciB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHRfNzI1KSB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dF83MjU7XG4gIH1cbiAgZXhwYW5kKHRlcm1fNzI2KSB7XG4gICAgbGV0IGZpZWxkXzcyNyA9IFwiZXhwYW5kXCIgKyB0ZXJtXzcyNi50eXBlO1xuICAgIGlmICh0eXBlb2YgdGhpc1tmaWVsZF83MjddID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiB0aGlzW2ZpZWxkXzcyN10odGVybV83MjYpO1xuICAgIH1cbiAgICBhc3NlcnQoZmFsc2UsIFwiZXhwYW5kIG5vdCBpbXBsZW1lbnRlZCB5ZXQgZm9yOiBcIiArIHRlcm1fNzI2LnR5cGUpO1xuICB9XG4gIGV4cGFuZFRlbXBsYXRlRXhwcmVzc2lvbih0ZXJtXzcyOCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIlRlbXBsYXRlRXhwcmVzc2lvblwiLCB7dGFnOiB0ZXJtXzcyOC50YWcgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzcyOC50YWcpLCBlbGVtZW50czogdGVybV83MjguZWxlbWVudHMudG9BcnJheSgpfSk7XG4gIH1cbiAgZXhwYW5kQnJlYWtTdGF0ZW1lbnQodGVybV83MjkpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCcmVha1N0YXRlbWVudFwiLCB7bGFiZWw6IHRlcm1fNzI5LmxhYmVsID8gdGVybV83MjkubGFiZWwudmFsKCkgOiBudWxsfSk7XG4gIH1cbiAgZXhwYW5kRG9XaGlsZVN0YXRlbWVudCh0ZXJtXzczMCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkRvV2hpbGVTdGF0ZW1lbnRcIiwge2JvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzMwLmJvZHkpLCB0ZXN0OiB0aGlzLmV4cGFuZCh0ZXJtXzczMC50ZXN0KX0pO1xuICB9XG4gIGV4cGFuZFdpdGhTdGF0ZW1lbnQodGVybV83MzEpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJXaXRoU3RhdGVtZW50XCIsIHtib2R5OiB0aGlzLmV4cGFuZCh0ZXJtXzczMS5ib2R5KSwgb2JqZWN0OiB0aGlzLmV4cGFuZCh0ZXJtXzczMS5vYmplY3QpfSk7XG4gIH1cbiAgZXhwYW5kRGVidWdnZXJTdGF0ZW1lbnQodGVybV83MzIpIHtcbiAgICByZXR1cm4gdGVybV83MzI7XG4gIH1cbiAgZXhwYW5kQ29udGludWVTdGF0ZW1lbnQodGVybV83MzMpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDb250aW51ZVN0YXRlbWVudFwiLCB7bGFiZWw6IHRlcm1fNzMzLmxhYmVsID8gdGVybV83MzMubGFiZWwudmFsKCkgOiBudWxsfSk7XG4gIH1cbiAgZXhwYW5kU3dpdGNoU3RhdGVtZW50V2l0aERlZmF1bHQodGVybV83MzQpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJTd2l0Y2hTdGF0ZW1lbnRXaXRoRGVmYXVsdFwiLCB7ZGlzY3JpbWluYW50OiB0aGlzLmV4cGFuZCh0ZXJtXzczNC5kaXNjcmltaW5hbnQpLCBwcmVEZWZhdWx0Q2FzZXM6IHRlcm1fNzM0LnByZURlZmF1bHRDYXNlcy5tYXAoY183MzUgPT4gdGhpcy5leHBhbmQoY183MzUpKS50b0FycmF5KCksIGRlZmF1bHRDYXNlOiB0aGlzLmV4cGFuZCh0ZXJtXzczNC5kZWZhdWx0Q2FzZSksIHBvc3REZWZhdWx0Q2FzZXM6IHRlcm1fNzM0LnBvc3REZWZhdWx0Q2FzZXMubWFwKGNfNzM2ID0+IHRoaXMuZXhwYW5kKGNfNzM2KSkudG9BcnJheSgpfSk7XG4gIH1cbiAgZXhwYW5kQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uKHRlcm1fNzM3KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uXCIsIHtvYmplY3Q6IHRoaXMuZXhwYW5kKHRlcm1fNzM3Lm9iamVjdCksIGV4cHJlc3Npb246IHRoaXMuZXhwYW5kKHRlcm1fNzM3LmV4cHJlc3Npb24pfSk7XG4gIH1cbiAgZXhwYW5kU3dpdGNoU3RhdGVtZW50KHRlcm1fNzM4KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiU3dpdGNoU3RhdGVtZW50XCIsIHtkaXNjcmltaW5hbnQ6IHRoaXMuZXhwYW5kKHRlcm1fNzM4LmRpc2NyaW1pbmFudCksIGNhc2VzOiB0ZXJtXzczOC5jYXNlcy5tYXAoY183MzkgPT4gdGhpcy5leHBhbmQoY183MzkpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRGb3JtYWxQYXJhbWV0ZXJzKHRlcm1fNzQwKSB7XG4gICAgbGV0IHJlc3RfNzQxID0gdGVybV83NDAucmVzdCA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fNzQwLnJlc3QpO1xuICAgIHJldHVybiBuZXcgVGVybShcIkZvcm1hbFBhcmFtZXRlcnNcIiwge2l0ZW1zOiB0ZXJtXzc0MC5pdGVtcy5tYXAoaV83NDIgPT4gdGhpcy5leHBhbmQoaV83NDIpKSwgcmVzdDogcmVzdF83NDF9KTtcbiAgfVxuICBleHBhbmRBcnJvd0V4cHJlc3Npb24odGVybV83NDMpIHtcbiAgICByZXR1cm4gdGhpcy5kb0Z1bmN0aW9uRXhwYW5zaW9uKHRlcm1fNzQzLCBcIkFycm93RXhwcmVzc2lvblwiKTtcbiAgfVxuICBleHBhbmRTd2l0Y2hEZWZhdWx0KHRlcm1fNzQ0KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiU3dpdGNoRGVmYXVsdFwiLCB7Y29uc2VxdWVudDogdGVybV83NDQuY29uc2VxdWVudC5tYXAoY183NDUgPT4gdGhpcy5leHBhbmQoY183NDUpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRTd2l0Y2hDYXNlKHRlcm1fNzQ2KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiU3dpdGNoQ2FzZVwiLCB7dGVzdDogdGhpcy5leHBhbmQodGVybV83NDYudGVzdCksIGNvbnNlcXVlbnQ6IHRlcm1fNzQ2LmNvbnNlcXVlbnQubWFwKGNfNzQ3ID0+IHRoaXMuZXhwYW5kKGNfNzQ3KSkudG9BcnJheSgpfSk7XG4gIH1cbiAgZXhwYW5kRm9ySW5TdGF0ZW1lbnQodGVybV83NDgpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJGb3JJblN0YXRlbWVudFwiLCB7bGVmdDogdGhpcy5leHBhbmQodGVybV83NDgubGVmdCksIHJpZ2h0OiB0aGlzLmV4cGFuZCh0ZXJtXzc0OC5yaWdodCksIGJvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzQ4LmJvZHkpfSk7XG4gIH1cbiAgZXhwYW5kVHJ5Q2F0Y2hTdGF0ZW1lbnQodGVybV83NDkpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJUcnlDYXRjaFN0YXRlbWVudFwiLCB7Ym9keTogdGhpcy5leHBhbmQodGVybV83NDkuYm9keSksIGNhdGNoQ2xhdXNlOiB0aGlzLmV4cGFuZCh0ZXJtXzc0OS5jYXRjaENsYXVzZSl9KTtcbiAgfVxuICBleHBhbmRUcnlGaW5hbGx5U3RhdGVtZW50KHRlcm1fNzUwKSB7XG4gICAgbGV0IGNhdGNoQ2xhdXNlXzc1MSA9IHRlcm1fNzUwLmNhdGNoQ2xhdXNlID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83NTAuY2F0Y2hDbGF1c2UpO1xuICAgIHJldHVybiBuZXcgVGVybShcIlRyeUZpbmFsbHlTdGF0ZW1lbnRcIiwge2JvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzUwLmJvZHkpLCBjYXRjaENsYXVzZTogY2F0Y2hDbGF1c2VfNzUxLCBmaW5hbGl6ZXI6IHRoaXMuZXhwYW5kKHRlcm1fNzUwLmZpbmFsaXplcil9KTtcbiAgfVxuICBleHBhbmRDYXRjaENsYXVzZSh0ZXJtXzc1Mikge1xuICAgIHJldHVybiBuZXcgVGVybShcIkNhdGNoQ2xhdXNlXCIsIHtiaW5kaW5nOiB0aGlzLmV4cGFuZCh0ZXJtXzc1Mi5iaW5kaW5nKSwgYm9keTogdGhpcy5leHBhbmQodGVybV83NTIuYm9keSl9KTtcbiAgfVxuICBleHBhbmRUaHJvd1N0YXRlbWVudCh0ZXJtXzc1Mykge1xuICAgIHJldHVybiBuZXcgVGVybShcIlRocm93U3RhdGVtZW50XCIsIHtleHByZXNzaW9uOiB0aGlzLmV4cGFuZCh0ZXJtXzc1My5leHByZXNzaW9uKX0pO1xuICB9XG4gIGV4cGFuZEZvck9mU3RhdGVtZW50KHRlcm1fNzU0KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRm9yT2ZTdGF0ZW1lbnRcIiwge2xlZnQ6IHRoaXMuZXhwYW5kKHRlcm1fNzU0LmxlZnQpLCByaWdodDogdGhpcy5leHBhbmQodGVybV83NTQucmlnaHQpLCBib2R5OiB0aGlzLmV4cGFuZCh0ZXJtXzc1NC5ib2R5KX0pO1xuICB9XG4gIGV4cGFuZEJpbmRpbmdJZGVudGlmaWVyKHRlcm1fNzU1KSB7XG4gICAgcmV0dXJuIHRlcm1fNzU1O1xuICB9XG4gIGV4cGFuZEJpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXIodGVybV83NTYpIHtcbiAgICByZXR1cm4gdGVybV83NTY7XG4gIH1cbiAgZXhwYW5kQmluZGluZ1Byb3BlcnR5UHJvcGVydHkodGVybV83NTcpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eVwiLCB7bmFtZTogdGhpcy5leHBhbmQodGVybV83NTcubmFtZSksIGJpbmRpbmc6IHRoaXMuZXhwYW5kKHRlcm1fNzU3LmJpbmRpbmcpfSk7XG4gIH1cbiAgZXhwYW5kQ29tcHV0ZWRQcm9wZXJ0eU5hbWUodGVybV83NTgpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDb21wdXRlZFByb3BlcnR5TmFtZVwiLCB7ZXhwcmVzc2lvbjogdGhpcy5leHBhbmQodGVybV83NTguZXhwcmVzc2lvbil9KTtcbiAgfVxuICBleHBhbmRPYmplY3RCaW5kaW5nKHRlcm1fNzU5KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiT2JqZWN0QmluZGluZ1wiLCB7cHJvcGVydGllczogdGVybV83NTkucHJvcGVydGllcy5tYXAodF83NjAgPT4gdGhpcy5leHBhbmQodF83NjApKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRBcnJheUJpbmRpbmcodGVybV83NjEpIHtcbiAgICBsZXQgcmVzdEVsZW1lbnRfNzYyID0gdGVybV83NjEucmVzdEVsZW1lbnQgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc2MS5yZXN0RWxlbWVudCk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQXJyYXlCaW5kaW5nXCIsIHtlbGVtZW50czogdGVybV83NjEuZWxlbWVudHMubWFwKHRfNzYzID0+IHRfNzYzID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodF83NjMpKS50b0FycmF5KCksIHJlc3RFbGVtZW50OiByZXN0RWxlbWVudF83NjJ9KTtcbiAgfVxuICBleHBhbmRCaW5kaW5nV2l0aERlZmF1bHQodGVybV83NjQpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nV2l0aERlZmF1bHRcIiwge2JpbmRpbmc6IHRoaXMuZXhwYW5kKHRlcm1fNzY0LmJpbmRpbmcpLCBpbml0OiB0aGlzLmV4cGFuZCh0ZXJtXzc2NC5pbml0KX0pO1xuICB9XG4gIGV4cGFuZFNob3J0aGFuZFByb3BlcnR5KHRlcm1fNzY1KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRGF0YVByb3BlcnR5XCIsIHtuYW1lOiBuZXcgVGVybShcIlN0YXRpY1Byb3BlcnR5TmFtZVwiLCB7dmFsdWU6IHRlcm1fNzY1Lm5hbWV9KSwgZXhwcmVzc2lvbjogbmV3IFRlcm0oXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiLCB7bmFtZTogdGVybV83NjUubmFtZX0pfSk7XG4gIH1cbiAgZXhwYW5kRm9yU3RhdGVtZW50KHRlcm1fNzY2KSB7XG4gICAgbGV0IGluaXRfNzY3ID0gdGVybV83NjYuaW5pdCA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fNzY2LmluaXQpO1xuICAgIGxldCB0ZXN0Xzc2OCA9IHRlcm1fNzY2LnRlc3QgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc2Ni50ZXN0KTtcbiAgICBsZXQgdXBkYXRlXzc2OSA9IHRlcm1fNzY2LnVwZGF0ZSA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fNzY2LnVwZGF0ZSk7XG4gICAgbGV0IGJvZHlfNzcwID0gdGhpcy5leHBhbmQodGVybV83NjYuYm9keSk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRm9yU3RhdGVtZW50XCIsIHtpbml0OiBpbml0Xzc2NywgdGVzdDogdGVzdF83NjgsIHVwZGF0ZTogdXBkYXRlXzc2OSwgYm9keTogYm9keV83NzB9KTtcbiAgfVxuICBleHBhbmRZaWVsZEV4cHJlc3Npb24odGVybV83NzEpIHtcbiAgICBsZXQgZXhwcl83NzIgPSB0ZXJtXzc3MS5leHByZXNzaW9uID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83NzEuZXhwcmVzc2lvbik7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiWWllbGRFeHByZXNzaW9uXCIsIHtleHByZXNzaW9uOiBleHByXzc3Mn0pO1xuICB9XG4gIGV4cGFuZFlpZWxkR2VuZXJhdG9yRXhwcmVzc2lvbih0ZXJtXzc3Mykge1xuICAgIGxldCBleHByXzc3NCA9IHRlcm1fNzczLmV4cHJlc3Npb24gPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc3My5leHByZXNzaW9uKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJZaWVsZEdlbmVyYXRvckV4cHJlc3Npb25cIiwge2V4cHJlc3Npb246IGV4cHJfNzc0fSk7XG4gIH1cbiAgZXhwYW5kV2hpbGVTdGF0ZW1lbnQodGVybV83NzUpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJXaGlsZVN0YXRlbWVudFwiLCB7dGVzdDogdGhpcy5leHBhbmQodGVybV83NzUudGVzdCksIGJvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzc1LmJvZHkpfSk7XG4gIH1cbiAgZXhwYW5kSWZTdGF0ZW1lbnQodGVybV83NzYpIHtcbiAgICBsZXQgY29uc2VxdWVudF83NzcgPSB0ZXJtXzc3Ni5jb25zZXF1ZW50ID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83NzYuY29uc2VxdWVudCk7XG4gICAgbGV0IGFsdGVybmF0ZV83NzggPSB0ZXJtXzc3Ni5hbHRlcm5hdGUgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc3Ni5hbHRlcm5hdGUpO1xuICAgIHJldHVybiBuZXcgVGVybShcIklmU3RhdGVtZW50XCIsIHt0ZXN0OiB0aGlzLmV4cGFuZCh0ZXJtXzc3Ni50ZXN0KSwgY29uc2VxdWVudDogY29uc2VxdWVudF83NzcsIGFsdGVybmF0ZTogYWx0ZXJuYXRlXzc3OH0pO1xuICB9XG4gIGV4cGFuZEJsb2NrU3RhdGVtZW50KHRlcm1fNzc5KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQmxvY2tTdGF0ZW1lbnRcIiwge2Jsb2NrOiB0aGlzLmV4cGFuZCh0ZXJtXzc3OS5ibG9jayl9KTtcbiAgfVxuICBleHBhbmRCbG9jayh0ZXJtXzc4MCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkJsb2NrXCIsIHtzdGF0ZW1lbnRzOiB0ZXJtXzc4MC5zdGF0ZW1lbnRzLm1hcChzXzc4MSA9PiB0aGlzLmV4cGFuZChzXzc4MSkpLnRvQXJyYXkoKX0pO1xuICB9XG4gIGV4cGFuZFZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnQodGVybV83ODIpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJWYXJpYWJsZURlY2xhcmF0aW9uU3RhdGVtZW50XCIsIHtkZWNsYXJhdGlvbjogdGhpcy5leHBhbmQodGVybV83ODIuZGVjbGFyYXRpb24pfSk7XG4gIH1cbiAgZXhwYW5kUmV0dXJuU3RhdGVtZW50KHRlcm1fNzgzKSB7XG4gICAgaWYgKHRlcm1fNzgzLmV4cHJlc3Npb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRlcm1fNzgzO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0oXCJSZXR1cm5TdGF0ZW1lbnRcIiwge2V4cHJlc3Npb246IHRoaXMuZXhwYW5kKHRlcm1fNzgzLmV4cHJlc3Npb24pfSk7XG4gIH1cbiAgZXhwYW5kQ2xhc3NEZWNsYXJhdGlvbih0ZXJtXzc4NCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkNsYXNzRGVjbGFyYXRpb25cIiwge25hbWU6IHRlcm1fNzg0Lm5hbWUgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc4NC5uYW1lKSwgc3VwZXI6IHRlcm1fNzg0LnN1cGVyID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83ODQuc3VwZXIpLCBlbGVtZW50czogdGVybV83ODQuZWxlbWVudHMubWFwKGVsXzc4NSA9PiB0aGlzLmV4cGFuZChlbF83ODUpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRDbGFzc0V4cHJlc3Npb24odGVybV83ODYpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDbGFzc0V4cHJlc3Npb25cIiwge25hbWU6IHRlcm1fNzg2Lm5hbWUgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc4Ni5uYW1lKSwgc3VwZXI6IHRlcm1fNzg2LnN1cGVyID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83ODYuc3VwZXIpLCBlbGVtZW50czogdGVybV83ODYuZWxlbWVudHMubWFwKGVsXzc4NyA9PiB0aGlzLmV4cGFuZChlbF83ODcpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRDbGFzc0VsZW1lbnQodGVybV83ODgpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDbGFzc0VsZW1lbnRcIiwge2lzU3RhdGljOiB0ZXJtXzc4OC5pc1N0YXRpYywgbWV0aG9kOiB0aGlzLmV4cGFuZCh0ZXJtXzc4OC5tZXRob2QpfSk7XG4gIH1cbiAgZXhwYW5kVGhpc0V4cHJlc3Npb24odGVybV83ODkpIHtcbiAgICByZXR1cm4gdGVybV83ODk7XG4gIH1cbiAgZXhwYW5kU3ludGF4VGVtcGxhdGUodGVybV83OTApIHtcbiAgICBsZXQgZXhwYW5kZXJfNzkxID0gbmV3IEV4cGFuZGVyKHRoaXMuY29udGV4dCk7XG4gICAgbGV0IHJfNzkyID0gcHJvY2Vzc1RlbXBsYXRlKHRlcm1fNzkwLnRlbXBsYXRlLmlubmVyKCkpO1xuICAgIGxldCBzdHJfNzkzID0gU3ludGF4LmZyb21TdHJpbmcoc2VyaWFsaXplci53cml0ZShyXzc5Mi50ZW1wbGF0ZSkpO1xuICAgIGxldCBjYWxsZWVfNzk0ID0gbmV3IFRlcm0oXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiLCB7bmFtZTogU3ludGF4LmZyb21JZGVudGlmaWVyKFwic3ludGF4VGVtcGxhdGVcIil9KTtcbiAgICBsZXQgZXhwYW5kZWRJbnRlcnBzXzc5NSA9IHJfNzkyLmludGVycC5tYXAoaV83OTcgPT4ge1xuICAgICAgbGV0IGVuZl83OTggPSBuZXcgRW5mb3Jlc3RlcihpXzc5NywgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kKGVuZl83OTguZW5mb3Jlc3QoXCJleHByZXNzaW9uXCIpKTtcbiAgICB9KTtcbiAgICBsZXQgYXJnc183OTYgPSBMaXN0Lm9mKG5ldyBUZXJtKFwiTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb25cIiwge3ZhbHVlOiBzdHJfNzkzfSkpLmNvbmNhdChleHBhbmRlZEludGVycHNfNzk1KTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDYWxsRXhwcmVzc2lvblwiLCB7Y2FsbGVlOiBjYWxsZWVfNzk0LCBhcmd1bWVudHM6IGFyZ3NfNzk2fSk7XG4gIH1cbiAgZXhwYW5kU3ludGF4UXVvdGUodGVybV83OTkpIHtcbiAgICBsZXQgc3RyXzgwMCA9IG5ldyBUZXJtKFwiTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb25cIiwge3ZhbHVlOiBTeW50YXguZnJvbVN0cmluZyhzZXJpYWxpemVyLndyaXRlKHRlcm1fNzk5Lm5hbWUpKX0pO1xuICAgIHJldHVybiBuZXcgVGVybShcIlRlbXBsYXRlRXhwcmVzc2lvblwiLCB7dGFnOiB0ZXJtXzc5OS50ZW1wbGF0ZS50YWcsIGVsZW1lbnRzOiB0ZXJtXzc5OS50ZW1wbGF0ZS5lbGVtZW50cy5wdXNoKHN0cl84MDApLnB1c2gobmV3IFRlcm0oXCJUZW1wbGF0ZUVsZW1lbnRcIiwge3Jhd1ZhbHVlOiBcIlwifSkpLnRvQXJyYXkoKX0pO1xuICB9XG4gIGV4cGFuZFN0YXRpY01lbWJlckV4cHJlc3Npb24odGVybV84MDEpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJTdGF0aWNNZW1iZXJFeHByZXNzaW9uXCIsIHtvYmplY3Q6IHRoaXMuZXhwYW5kKHRlcm1fODAxLm9iamVjdCksIHByb3BlcnR5OiB0ZXJtXzgwMS5wcm9wZXJ0eX0pO1xuICB9XG4gIGV4cGFuZEFycmF5RXhwcmVzc2lvbih0ZXJtXzgwMikge1xuICAgIHJldHVybiBuZXcgVGVybShcIkFycmF5RXhwcmVzc2lvblwiLCB7ZWxlbWVudHM6IHRlcm1fODAyLmVsZW1lbnRzLm1hcCh0XzgwMyA9PiB0XzgwMyA9PSBudWxsID8gdF84MDMgOiB0aGlzLmV4cGFuZCh0XzgwMykpfSk7XG4gIH1cbiAgZXhwYW5kSW1wb3J0KHRlcm1fODA0KSB7XG4gICAgcmV0dXJuIHRlcm1fODA0O1xuICB9XG4gIGV4cGFuZEltcG9ydE5hbWVzcGFjZSh0ZXJtXzgwNSkge1xuICAgIHJldHVybiB0ZXJtXzgwNTtcbiAgfVxuICBleHBhbmRFeHBvcnQodGVybV84MDYpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJFeHBvcnRcIiwge2RlY2xhcmF0aW9uOiB0aGlzLmV4cGFuZCh0ZXJtXzgwNi5kZWNsYXJhdGlvbil9KTtcbiAgfVxuICBleHBhbmRFeHBvcnREZWZhdWx0KHRlcm1fODA3KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRXhwb3J0RGVmYXVsdFwiLCB7Ym9keTogdGhpcy5leHBhbmQodGVybV84MDcuYm9keSl9KTtcbiAgfVxuICBleHBhbmRFeHBvcnRGcm9tKHRlcm1fODA4KSB7XG4gICAgcmV0dXJuIHRlcm1fODA4O1xuICB9XG4gIGV4cGFuZEV4cG9ydEFsbEZyb20odGVybV84MDkpIHtcbiAgICByZXR1cm4gdGVybV84MDk7XG4gIH1cbiAgZXhwYW5kRXhwb3J0U3BlY2lmaWVyKHRlcm1fODEwKSB7XG4gICAgcmV0dXJuIHRlcm1fODEwO1xuICB9XG4gIGV4cGFuZFN0YXRpY1Byb3BlcnR5TmFtZSh0ZXJtXzgxMSkge1xuICAgIHJldHVybiB0ZXJtXzgxMTtcbiAgfVxuICBleHBhbmREYXRhUHJvcGVydHkodGVybV84MTIpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJEYXRhUHJvcGVydHlcIiwge25hbWU6IHRoaXMuZXhwYW5kKHRlcm1fODEyLm5hbWUpLCBleHByZXNzaW9uOiB0aGlzLmV4cGFuZCh0ZXJtXzgxMi5leHByZXNzaW9uKX0pO1xuICB9XG4gIGV4cGFuZE9iamVjdEV4cHJlc3Npb24odGVybV84MTMpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJPYmplY3RFeHByZXNzaW9uXCIsIHtwcm9wZXJ0aWVzOiB0ZXJtXzgxMy5wcm9wZXJ0aWVzLm1hcCh0XzgxNCA9PiB0aGlzLmV4cGFuZCh0XzgxNCkpfSk7XG4gIH1cbiAgZXhwYW5kVmFyaWFibGVEZWNsYXJhdG9yKHRlcm1fODE1KSB7XG4gICAgbGV0IGluaXRfODE2ID0gdGVybV84MTUuaW5pdCA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fODE1LmluaXQpO1xuICAgIHJldHVybiBuZXcgVGVybShcIlZhcmlhYmxlRGVjbGFyYXRvclwiLCB7YmluZGluZzogdGhpcy5leHBhbmQodGVybV84MTUuYmluZGluZyksIGluaXQ6IGluaXRfODE2fSk7XG4gIH1cbiAgZXhwYW5kVmFyaWFibGVEZWNsYXJhdGlvbih0ZXJtXzgxNykge1xuICAgIHJldHVybiBuZXcgVGVybShcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiwge2tpbmQ6IHRlcm1fODE3LmtpbmQsIGRlY2xhcmF0b3JzOiB0ZXJtXzgxNy5kZWNsYXJhdG9ycy5tYXAoZF84MTggPT4gdGhpcy5leHBhbmQoZF84MTgpKX0pO1xuICB9XG4gIGV4cGFuZFBhcmVudGhlc2l6ZWRFeHByZXNzaW9uKHRlcm1fODE5KSB7XG4gICAgaWYgKHRlcm1fODE5LmlubmVyLnNpemUgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIpO1xuICAgIH1cbiAgICBsZXQgZW5mXzgyMCA9IG5ldyBFbmZvcmVzdGVyKHRlcm1fODE5LmlubmVyLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IGxvb2thaGVhZF84MjEgPSBlbmZfODIwLnBlZWsoKTtcbiAgICBsZXQgdF84MjIgPSBlbmZfODIwLmVuZm9yZXN0RXhwcmVzc2lvbigpO1xuICAgIGlmICh0XzgyMiA9PSBudWxsIHx8IGVuZl84MjAucmVzdC5zaXplID4gMCkge1xuICAgICAgdGhyb3cgZW5mXzgyMC5jcmVhdGVFcnJvcihsb29rYWhlYWRfODIxLCBcInVuZXhwZWN0ZWQgc3ludGF4XCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5leHBhbmQodF84MjIpO1xuICB9XG4gIGV4cGFuZFVuYXJ5RXhwcmVzc2lvbih0ZXJtXzgyMykge1xuICAgIHJldHVybiBuZXcgVGVybShcIlVuYXJ5RXhwcmVzc2lvblwiLCB7b3BlcmF0b3I6IHRlcm1fODIzLm9wZXJhdG9yLCBvcGVyYW5kOiB0aGlzLmV4cGFuZCh0ZXJtXzgyMy5vcGVyYW5kKX0pO1xuICB9XG4gIGV4cGFuZFVwZGF0ZUV4cHJlc3Npb24odGVybV84MjQpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJVcGRhdGVFeHByZXNzaW9uXCIsIHtpc1ByZWZpeDogdGVybV84MjQuaXNQcmVmaXgsIG9wZXJhdG9yOiB0ZXJtXzgyNC5vcGVyYXRvciwgb3BlcmFuZDogdGhpcy5leHBhbmQodGVybV84MjQub3BlcmFuZCl9KTtcbiAgfVxuICBleHBhbmRCaW5hcnlFeHByZXNzaW9uKHRlcm1fODI1KSB7XG4gICAgbGV0IGxlZnRfODI2ID0gdGhpcy5leHBhbmQodGVybV84MjUubGVmdCk7XG4gICAgbGV0IHJpZ2h0XzgyNyA9IHRoaXMuZXhwYW5kKHRlcm1fODI1LnJpZ2h0KTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5hcnlFeHByZXNzaW9uXCIsIHtsZWZ0OiBsZWZ0XzgyNiwgb3BlcmF0b3I6IHRlcm1fODI1Lm9wZXJhdG9yLCByaWdodDogcmlnaHRfODI3fSk7XG4gIH1cbiAgZXhwYW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uKHRlcm1fODI4KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIsIHt0ZXN0OiB0aGlzLmV4cGFuZCh0ZXJtXzgyOC50ZXN0KSwgY29uc2VxdWVudDogdGhpcy5leHBhbmQodGVybV84MjguY29uc2VxdWVudCksIGFsdGVybmF0ZTogdGhpcy5leHBhbmQodGVybV84MjguYWx0ZXJuYXRlKX0pO1xuICB9XG4gIGV4cGFuZE5ld1RhcmdldEV4cHJlc3Npb24odGVybV84MjkpIHtcbiAgICByZXR1cm4gdGVybV84Mjk7XG4gIH1cbiAgZXhwYW5kTmV3RXhwcmVzc2lvbih0ZXJtXzgzMCkge1xuICAgIGxldCBjYWxsZWVfODMxID0gdGhpcy5leHBhbmQodGVybV84MzAuY2FsbGVlKTtcbiAgICBsZXQgZW5mXzgzMiA9IG5ldyBFbmZvcmVzdGVyKHRlcm1fODMwLmFyZ3VtZW50cywgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgIGxldCBhcmdzXzgzMyA9IGVuZl84MzIuZW5mb3Jlc3RBcmd1bWVudExpc3QoKS5tYXAoYXJnXzgzNCA9PiB0aGlzLmV4cGFuZChhcmdfODM0KSk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiTmV3RXhwcmVzc2lvblwiLCB7Y2FsbGVlOiBjYWxsZWVfODMxLCBhcmd1bWVudHM6IGFyZ3NfODMzLnRvQXJyYXkoKX0pO1xuICB9XG4gIGV4cGFuZFN1cGVyKHRlcm1fODM1KSB7XG4gICAgcmV0dXJuIHRlcm1fODM1O1xuICB9XG4gIGV4cGFuZENhbGxFeHByZXNzaW9uKHRlcm1fODM2KSB7XG4gICAgbGV0IGNhbGxlZV84MzcgPSB0aGlzLmV4cGFuZCh0ZXJtXzgzNi5jYWxsZWUpO1xuICAgIGxldCBlbmZfODM4ID0gbmV3IEVuZm9yZXN0ZXIodGVybV84MzYuYXJndW1lbnRzLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IGFyZ3NfODM5ID0gZW5mXzgzOC5lbmZvcmVzdEFyZ3VtZW50TGlzdCgpLm1hcChhcmdfODQwID0+IHRoaXMuZXhwYW5kKGFyZ184NDApKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDYWxsRXhwcmVzc2lvblwiLCB7Y2FsbGVlOiBjYWxsZWVfODM3LCBhcmd1bWVudHM6IGFyZ3NfODM5fSk7XG4gIH1cbiAgZXhwYW5kU3ByZWFkRWxlbWVudCh0ZXJtXzg0MSkge1xuICAgIHJldHVybiBuZXcgVGVybShcIlNwcmVhZEVsZW1lbnRcIiwge2V4cHJlc3Npb246IHRoaXMuZXhwYW5kKHRlcm1fODQxLmV4cHJlc3Npb24pfSk7XG4gIH1cbiAgZXhwYW5kRXhwcmVzc2lvblN0YXRlbWVudCh0ZXJtXzg0Mikge1xuICAgIGxldCBjaGlsZF84NDMgPSB0aGlzLmV4cGFuZCh0ZXJtXzg0Mi5leHByZXNzaW9uKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJFeHByZXNzaW9uU3RhdGVtZW50XCIsIHtleHByZXNzaW9uOiBjaGlsZF84NDN9KTtcbiAgfVxuICBleHBhbmRMYWJlbGVkU3RhdGVtZW50KHRlcm1fODQ0KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiTGFiZWxlZFN0YXRlbWVudFwiLCB7bGFiZWw6IHRlcm1fODQ0LmxhYmVsLnZhbCgpLCBib2R5OiB0aGlzLmV4cGFuZCh0ZXJtXzg0NC5ib2R5KX0pO1xuICB9XG4gIGRvRnVuY3Rpb25FeHBhbnNpb24odGVybV84NDUsIHR5cGVfODQ2KSB7XG4gICAgbGV0IHNjb3BlXzg0NyA9IGZyZXNoU2NvcGUoXCJmdW5cIik7XG4gICAgbGV0IHJlZF84NDggPSBuZXcgQXBwbHlTY29wZUluUGFyYW1zUmVkdWNlcihzY29wZV84NDcsIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IHBhcmFtc184NDk7XG4gICAgaWYgKHR5cGVfODQ2ICE9PSBcIkdldHRlclwiICYmIHR5cGVfODQ2ICE9PSBcIlNldHRlclwiKSB7XG4gICAgICBwYXJhbXNfODQ5ID0gcmVkXzg0OC50cmFuc2Zvcm0odGVybV84NDUucGFyYW1zKTtcbiAgICAgIHBhcmFtc184NDkgPSB0aGlzLmV4cGFuZChwYXJhbXNfODQ5KTtcbiAgICB9XG4gICAgdGhpcy5jb250ZXh0LmN1cnJlbnRTY29wZS5wdXNoKHNjb3BlXzg0Nyk7XG4gICAgbGV0IGV4cGFuZGVyXzg1MCA9IG5ldyBFeHBhbmRlcih0aGlzLmNvbnRleHQpO1xuICAgIGxldCBtYXJrZWRCb2R5Xzg1MSwgYm9keVRlcm1fODUyO1xuICAgIGlmICh0ZXJtXzg0NS5ib2R5IGluc3RhbmNlb2YgVGVybSkge1xuICAgICAgYm9keVRlcm1fODUyID0gdGhpcy5leHBhbmQodGVybV84NDUuYm9keS5hZGRTY29wZShzY29wZV84NDcsIHRoaXMuY29udGV4dC5iaW5kaW5ncykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXJrZWRCb2R5Xzg1MSA9IHRlcm1fODQ1LmJvZHkubWFwKGJfODUzID0+IGJfODUzLmFkZFNjb3BlKHNjb3BlXzg0NywgdGhpcy5jb250ZXh0LmJpbmRpbmdzKSk7XG4gICAgICBib2R5VGVybV84NTIgPSBuZXcgVGVybShcIkZ1bmN0aW9uQm9keVwiLCB7ZGlyZWN0aXZlczogTGlzdCgpLCBzdGF0ZW1lbnRzOiBleHBhbmRlcl84NTAuZXhwYW5kKG1hcmtlZEJvZHlfODUxKX0pO1xuICAgIH1cbiAgICB0aGlzLmNvbnRleHQuY3VycmVudFNjb3BlLnBvcCgpO1xuICAgIGlmICh0eXBlXzg0NiA9PT0gXCJHZXR0ZXJcIikge1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKHR5cGVfODQ2LCB7bmFtZTogdGhpcy5leHBhbmQodGVybV84NDUubmFtZSksIGJvZHk6IGJvZHlUZXJtXzg1Mn0pO1xuICAgIH0gZWxzZSBpZiAodHlwZV84NDYgPT09IFwiU2V0dGVyXCIpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybSh0eXBlXzg0Niwge25hbWU6IHRoaXMuZXhwYW5kKHRlcm1fODQ1Lm5hbWUpLCBwYXJhbTogdGVybV84NDUucGFyYW0sIGJvZHk6IGJvZHlUZXJtXzg1Mn0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0odHlwZV84NDYsIHtuYW1lOiB0ZXJtXzg0NS5uYW1lLCBpc0dlbmVyYXRvcjogdGVybV84NDUuaXNHZW5lcmF0b3IsIHBhcmFtczogcGFyYW1zXzg0OSwgYm9keTogYm9keVRlcm1fODUyfSk7XG4gIH1cbiAgZXhwYW5kTWV0aG9kKHRlcm1fODU0KSB7XG4gICAgcmV0dXJuIHRoaXMuZG9GdW5jdGlvbkV4cGFuc2lvbih0ZXJtXzg1NCwgXCJNZXRob2RcIik7XG4gIH1cbiAgZXhwYW5kU2V0dGVyKHRlcm1fODU1KSB7XG4gICAgcmV0dXJuIHRoaXMuZG9GdW5jdGlvbkV4cGFuc2lvbih0ZXJtXzg1NSwgXCJTZXR0ZXJcIik7XG4gIH1cbiAgZXhwYW5kR2V0dGVyKHRlcm1fODU2KSB7XG4gICAgcmV0dXJuIHRoaXMuZG9GdW5jdGlvbkV4cGFuc2lvbih0ZXJtXzg1NiwgXCJHZXR0ZXJcIik7XG4gIH1cbiAgZXhwYW5kRnVuY3Rpb25EZWNsYXJhdGlvbih0ZXJtXzg1Nykge1xuICAgIHJldHVybiB0aGlzLmRvRnVuY3Rpb25FeHBhbnNpb24odGVybV84NTcsIFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiKTtcbiAgfVxuICBleHBhbmRGdW5jdGlvbkV4cHJlc3Npb24odGVybV84NTgpIHtcbiAgICByZXR1cm4gdGhpcy5kb0Z1bmN0aW9uRXhwYW5zaW9uKHRlcm1fODU4LCBcIkZ1bmN0aW9uRXhwcmVzc2lvblwiKTtcbiAgfVxuICBleHBhbmRDb21wb3VuZEFzc2lnbm1lbnRFeHByZXNzaW9uKHRlcm1fODU5KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29tcG91bmRBc3NpZ25tZW50RXhwcmVzc2lvblwiLCB7YmluZGluZzogdGhpcy5leHBhbmQodGVybV84NTkuYmluZGluZyksIG9wZXJhdG9yOiB0ZXJtXzg1OS5vcGVyYXRvciwgZXhwcmVzc2lvbjogdGhpcy5leHBhbmQodGVybV84NTkuZXhwcmVzc2lvbil9KTtcbiAgfVxuICBleHBhbmRBc3NpZ25tZW50RXhwcmVzc2lvbih0ZXJtXzg2MCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIsIHtiaW5kaW5nOiB0aGlzLmV4cGFuZCh0ZXJtXzg2MC5iaW5kaW5nKSwgZXhwcmVzc2lvbjogdGhpcy5leHBhbmQodGVybV84NjAuZXhwcmVzc2lvbil9KTtcbiAgfVxuICBleHBhbmRFbXB0eVN0YXRlbWVudCh0ZXJtXzg2MSkge1xuICAgIHJldHVybiB0ZXJtXzg2MTtcbiAgfVxuICBleHBhbmRMaXRlcmFsQm9vbGVhbkV4cHJlc3Npb24odGVybV84NjIpIHtcbiAgICByZXR1cm4gdGVybV84NjI7XG4gIH1cbiAgZXhwYW5kTGl0ZXJhbE51bWVyaWNFeHByZXNzaW9uKHRlcm1fODYzKSB7XG4gICAgcmV0dXJuIHRlcm1fODYzO1xuICB9XG4gIGV4cGFuZExpdGVyYWxJbmZpbml0eUV4cHJlc3Npb24odGVybV84NjQpIHtcbiAgICByZXR1cm4gdGVybV84NjQ7XG4gIH1cbiAgZXhwYW5kSWRlbnRpZmllckV4cHJlc3Npb24odGVybV84NjUpIHtcbiAgICBsZXQgdHJhbnNfODY2ID0gdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV84NjUubmFtZS5yZXNvbHZlKCkpO1xuICAgIGlmICh0cmFuc184NjYpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIklkZW50aWZpZXJFeHByZXNzaW9uXCIsIHtuYW1lOiB0cmFuc184NjYuaWR9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRlcm1fODY1O1xuICB9XG4gIGV4cGFuZExpdGVyYWxOdWxsRXhwcmVzc2lvbih0ZXJtXzg2Nykge1xuICAgIHJldHVybiB0ZXJtXzg2NztcbiAgfVxuICBleHBhbmRMaXRlcmFsU3RyaW5nRXhwcmVzc2lvbih0ZXJtXzg2OCkge1xuICAgIHJldHVybiB0ZXJtXzg2ODtcbiAgfVxuICBleHBhbmRMaXRlcmFsUmVnRXhwRXhwcmVzc2lvbih0ZXJtXzg2OSkge1xuICAgIHJldHVybiB0ZXJtXzg2OTtcbiAgfVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3Rlcm0tZXhwYW5kZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7QUFDQTs7OztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztJQUNxQixZO0FBQ25CLHdCQUFZLFdBQVosRUFBeUI7QUFBQTs7QUFDdkIsU0FBSyxPQUFMLEdBQWUsV0FBZjtBQUNEOzs7OzJCQUNNLFEsRUFBVTtBQUNmLFVBQUksWUFBWSxXQUFXLFNBQVMsSUFBcEM7QUFDQSxVQUFJLE9BQU8sS0FBSyxTQUFMLENBQVAsS0FBMkIsVUFBL0IsRUFBMkM7QUFDekMsZUFBTyxLQUFLLFNBQUwsRUFBZ0IsUUFBaEIsQ0FBUDtBQUNEO0FBQ0QsMEJBQU8sS0FBUCxFQUFjLHFDQUFxQyxTQUFTLElBQTVEO0FBQ0Q7Ozs2Q0FDd0IsUSxFQUFVO0FBQ2pDLGFBQU8sb0JBQVMsb0JBQVQsRUFBK0IsRUFBQyxLQUFLLFNBQVMsR0FBVCxJQUFnQixJQUFoQixHQUF1QixJQUF2QixHQUE4QixLQUFLLE1BQUwsQ0FBWSxTQUFTLEdBQXJCLENBQXBDLEVBQStELFVBQVUsU0FBUyxRQUFULENBQWtCLE9BQWxCLEVBQXpFLEVBQS9CLENBQVA7QUFDRDs7O3lDQUNvQixRLEVBQVU7QUFDN0IsYUFBTyxvQkFBUyxnQkFBVCxFQUEyQixFQUFDLE9BQU8sU0FBUyxLQUFULEdBQWlCLFNBQVMsS0FBVCxDQUFlLEdBQWYsRUFBakIsR0FBd0MsSUFBaEQsRUFBM0IsQ0FBUDtBQUNEOzs7MkNBQ3NCLFEsRUFBVTtBQUMvQixhQUFPLG9CQUFTLGtCQUFULEVBQTZCLEVBQUMsTUFBTSxLQUFLLE1BQUwsQ0FBWSxTQUFTLElBQXJCLENBQVAsRUFBbUMsTUFBTSxLQUFLLE1BQUwsQ0FBWSxTQUFTLElBQXJCLENBQXpDLEVBQTdCLENBQVA7QUFDRDs7O3dDQUNtQixRLEVBQVU7QUFDNUIsYUFBTyxvQkFBUyxl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SyxNQUFMLENBQVksU0FBUyxVQUFyQixDQUFsRixFQUF6QyxDQUFQO0FBQ0Q7OzsrQ0FDMEIsUSxFQUFVO0FBQ25DLGFBQU8sb0JBQVMsc0JBQVQsRUFBaUMsRUFBQyxTQUFTLEtBQUssTUFBTCxDQUFZLFNBQVMsT0FBckIsQ0FBVixFQUF5QyxZQUFZLEtBQUssTUFBTCxDQUFZLFNBQVMsVUFBckIsQ0FBckQsRUFBakMsQ0FBUDtBQUNEOzs7eUNBQ29CLFEsRUFBVTtBQUM3QixhQUFPLFFBQVA7QUFDRDs7O21EQUM4QixRLEVBQVU7QUFDdkMsYUFBTyxRQUFQO0FBQ0Q7OzttREFDOEIsUSxFQUFVO0FBQ3ZDLGFBQU8sUUFBUDtBQUNEOzs7b0RBQytCLFEsRUFBVTtBQUN4QyxhQUFPLFFBQVA7QUFDRDs7OytDQUMwQixRLEVBQVU7QUFDbkMsVUFBSSxZQUFZLEtBQUssT0FBTCxDQUFhLEdBQWIsQ0FBaUIsR0FBakIsQ0FBcUIsU0FBUyxJQUFULENBQWMsT0FBZCxFQUFyQixDQUFoQjtBQUNBLFVBQUksU0FBSixFQUFlO0FBQ2IsZUFBTyxvQkFBUyxzQkFBVCxFQUFpQyxFQUFDLE1BQU0sVUFBVSxFQUFqQixFQUFqQyxDQUFQO0FBQ0Q7QUFDRCxhQUFPLFFBQVA7QUFDRDs7O2dEQUMyQixRLEVBQVU7QUFDcEMsYUFBTyxRQUFQO0FBQ0Q7OztrREFDNkIsUSxFQUFVO0FBQ3RDLGFBQU8sUUFBUDtBQUNEOzs7a0RBQzZCLFEsRUFBVTtBQUN0QyxhQUFPLFFBQVA7QUFDRDs7Ozs7O2tCQTNVa0IsWSIsImZpbGUiOiJ0ZXJtLWV4cGFuZGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMaXN0fSBmcm9tIFwiaW1tdXRhYmxlXCI7XG5pbXBvcnQgVGVybSwge2lzRU9GLCBpc0JpbmRpbmdJZGVudGlmaWVyLCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIGlzRnVuY3Rpb25FeHByZXNzaW9uLCBpc0Z1bmN0aW9uVGVybSwgaXNGdW5jdGlvbldpdGhOYW1lLCBpc1N5bnRheERlY2xhcmF0aW9uLCBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sIGlzVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCwgaXNJbXBvcnQsIGlzRXhwb3J0fSBmcm9tIFwiLi90ZXJtc1wiO1xuaW1wb3J0IHtTY29wZSwgZnJlc2hTY29wZX0gZnJvbSBcIi4vc2NvcGVcIjtcbmltcG9ydCBBcHBseVNjb3BlSW5QYXJhbXNSZWR1Y2VyIGZyb20gXCIuL2FwcGx5LXNjb3BlLWluLXBhcmFtcy1yZWR1Y2VyXCI7XG5pbXBvcnQgcmVkdWNlciwge01vbm9pZGFsUmVkdWNlcn0gZnJvbSBcInNoaWZ0LXJlZHVjZXJcIjtcbmltcG9ydCBFeHBhbmRlciBmcm9tIFwiLi9leHBhbmRlclwiO1xuaW1wb3J0IFN5bnRheCBmcm9tIFwiLi9zeW50YXhcIjtcbmltcG9ydCB7c2VyaWFsaXplciwgbWFrZURlc2VyaWFsaXplcn0gZnJvbSBcIi4vc2VyaWFsaXplclwiO1xuaW1wb3J0IHtlbmZvcmVzdEV4cHIsIEVuZm9yZXN0ZXJ9IGZyb20gXCIuL2VuZm9yZXN0ZXJcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7cHJvY2Vzc1RlbXBsYXRlfSBmcm9tIFwiLi90ZW1wbGF0ZS1wcm9jZXNzb3IuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1FeHBhbmRlciB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHRfNzQxKSB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dF83NDE7XG4gIH1cbiAgZXhwYW5kKHRlcm1fNzQyKSB7XG4gICAgbGV0IGZpZWxkXzc0MyA9IFwiZXhwYW5kXCIgKyB0ZXJtXzc0Mi50eXBlO1xuICAgIGlmICh0eXBlb2YgdGhpc1tmaWVsZF83NDNdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiB0aGlzW2ZpZWxkXzc0M10odGVybV83NDIpO1xuICAgIH1cbiAgICBhc3NlcnQoZmFsc2UsIFwiZXhwYW5kIG5vdCBpbXBsZW1lbnRlZCB5ZXQgZm9yOiBcIiArIHRlcm1fNzQyLnR5cGUpO1xuICB9XG4gIGV4cGFuZFRlbXBsYXRlRXhwcmVzc2lvbih0ZXJtXzc0NCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIlRlbXBsYXRlRXhwcmVzc2lvblwiLCB7dGFnOiB0ZXJtXzc0NC50YWcgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc0NC50YWcpLCBlbGVtZW50czogdGVybV83NDQuZWxlbWVudHMudG9BcnJheSgpfSk7XG4gIH1cbiAgZXhwYW5kQnJlYWtTdGF0ZW1lbnQodGVybV83NDUpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCcmVha1N0YXRlbWVudFwiLCB7bGFiZWw6IHRlcm1fNzQ1LmxhYmVsID8gdGVybV83NDUubGFiZWwudmFsKCkgOiBudWxsfSk7XG4gIH1cbiAgZXhwYW5kRG9XaGlsZVN0YXRlbWVudCh0ZXJtXzc0Nikge1xuICAgIHJldHVybiBuZXcgVGVybShcIkRvV2hpbGVTdGF0ZW1lbnRcIiwge2JvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzQ2LmJvZHkpLCB0ZXN0OiB0aGlzLmV4cGFuZCh0ZXJtXzc0Ni50ZXN0KX0pO1xuICB9XG4gIGV4cGFuZFdpdGhTdGF0ZW1lbnQodGVybV83NDcpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJXaXRoU3RhdGVtZW50XCIsIHtib2R5OiB0aGlzLmV4cGFuZCh0ZXJtXzc0Ny5ib2R5KSwgb2JqZWN0OiB0aGlzLmV4cGFuZCh0ZXJtXzc0Ny5vYmplY3QpfSk7XG4gIH1cbiAgZXhwYW5kRGVidWdnZXJTdGF0ZW1lbnQodGVybV83NDgpIHtcbiAgICByZXR1cm4gdGVybV83NDg7XG4gIH1cbiAgZXhwYW5kQ29udGludWVTdGF0ZW1lbnQodGVybV83NDkpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDb250aW51ZVN0YXRlbWVudFwiLCB7bGFiZWw6IHRlcm1fNzQ5LmxhYmVsID8gdGVybV83NDkubGFiZWwudmFsKCkgOiBudWxsfSk7XG4gIH1cbiAgZXhwYW5kU3dpdGNoU3RhdGVtZW50V2l0aERlZmF1bHQodGVybV83NTApIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJTd2l0Y2hTdGF0ZW1lbnRXaXRoRGVmYXVsdFwiLCB7ZGlzY3JpbWluYW50OiB0aGlzLmV4cGFuZCh0ZXJtXzc1MC5kaXNjcmltaW5hbnQpLCBwcmVEZWZhdWx0Q2FzZXM6IHRlcm1fNzUwLnByZURlZmF1bHRDYXNlcy5tYXAoY183NTEgPT4gdGhpcy5leHBhbmQoY183NTEpKS50b0FycmF5KCksIGRlZmF1bHRDYXNlOiB0aGlzLmV4cGFuZCh0ZXJtXzc1MC5kZWZhdWx0Q2FzZSksIHBvc3REZWZhdWx0Q2FzZXM6IHRlcm1fNzUwLnBvc3REZWZhdWx0Q2FzZXMubWFwKGNfNzUyID0+IHRoaXMuZXhwYW5kKGNfNzUyKSkudG9BcnJheSgpfSk7XG4gIH1cbiAgZXhwYW5kQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uKHRlcm1fNzUzKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uXCIsIHtvYmplY3Q6IHRoaXMuZXhwYW5kKHRlcm1fNzUzLm9iamVjdCksIGV4cHJlc3Npb246IHRoaXMuZXhwYW5kKHRlcm1fNzUzLmV4cHJlc3Npb24pfSk7XG4gIH1cbiAgZXhwYW5kU3dpdGNoU3RhdGVtZW50KHRlcm1fNzU0KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiU3dpdGNoU3RhdGVtZW50XCIsIHtkaXNjcmltaW5hbnQ6IHRoaXMuZXhwYW5kKHRlcm1fNzU0LmRpc2NyaW1pbmFudCksIGNhc2VzOiB0ZXJtXzc1NC5jYXNlcy5tYXAoY183NTUgPT4gdGhpcy5leHBhbmQoY183NTUpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRGb3JtYWxQYXJhbWV0ZXJzKHRlcm1fNzU2KSB7XG4gICAgbGV0IHJlc3RfNzU3ID0gdGVybV83NTYucmVzdCA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fNzU2LnJlc3QpO1xuICAgIHJldHVybiBuZXcgVGVybShcIkZvcm1hbFBhcmFtZXRlcnNcIiwge2l0ZW1zOiB0ZXJtXzc1Ni5pdGVtcy5tYXAoaV83NTggPT4gdGhpcy5leHBhbmQoaV83NTgpKSwgcmVzdDogcmVzdF83NTd9KTtcbiAgfVxuICBleHBhbmRBcnJvd0V4cHJlc3Npb24odGVybV83NTkpIHtcbiAgICByZXR1cm4gdGhpcy5kb0Z1bmN0aW9uRXhwYW5zaW9uKHRlcm1fNzU5LCBcIkFycm93RXhwcmVzc2lvblwiKTtcbiAgfVxuICBleHBhbmRTd2l0Y2hEZWZhdWx0KHRlcm1fNzYwKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiU3dpdGNoRGVmYXVsdFwiLCB7Y29uc2VxdWVudDogdGVybV83NjAuY29uc2VxdWVudC5tYXAoY183NjEgPT4gdGhpcy5leHBhbmQoY183NjEpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRTd2l0Y2hDYXNlKHRlcm1fNzYyKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiU3dpdGNoQ2FzZVwiLCB7dGVzdDogdGhpcy5leHBhbmQodGVybV83NjIudGVzdCksIGNvbnNlcXVlbnQ6IHRlcm1fNzYyLmNvbnNlcXVlbnQubWFwKGNfNzYzID0+IHRoaXMuZXhwYW5kKGNfNzYzKSkudG9BcnJheSgpfSk7XG4gIH1cbiAgZXhwYW5kRm9ySW5TdGF0ZW1lbnQodGVybV83NjQpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJGb3JJblN0YXRlbWVudFwiLCB7bGVmdDogdGhpcy5leHBhbmQodGVybV83NjQubGVmdCksIHJpZ2h0OiB0aGlzLmV4cGFuZCh0ZXJtXzc2NC5yaWdodCksIGJvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzY0LmJvZHkpfSk7XG4gIH1cbiAgZXhwYW5kVHJ5Q2F0Y2hTdGF0ZW1lbnQodGVybV83NjUpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJUcnlDYXRjaFN0YXRlbWVudFwiLCB7Ym9keTogdGhpcy5leHBhbmQodGVybV83NjUuYm9keSksIGNhdGNoQ2xhdXNlOiB0aGlzLmV4cGFuZCh0ZXJtXzc2NS5jYXRjaENsYXVzZSl9KTtcbiAgfVxuICBleHBhbmRUcnlGaW5hbGx5U3RhdGVtZW50KHRlcm1fNzY2KSB7XG4gICAgbGV0IGNhdGNoQ2xhdXNlXzc2NyA9IHRlcm1fNzY2LmNhdGNoQ2xhdXNlID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83NjYuY2F0Y2hDbGF1c2UpO1xuICAgIHJldHVybiBuZXcgVGVybShcIlRyeUZpbmFsbHlTdGF0ZW1lbnRcIiwge2JvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzY2LmJvZHkpLCBjYXRjaENsYXVzZTogY2F0Y2hDbGF1c2VfNzY3LCBmaW5hbGl6ZXI6IHRoaXMuZXhwYW5kKHRlcm1fNzY2LmZpbmFsaXplcil9KTtcbiAgfVxuICBleHBhbmRDYXRjaENsYXVzZSh0ZXJtXzc2OCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkNhdGNoQ2xhdXNlXCIsIHtiaW5kaW5nOiB0aGlzLmV4cGFuZCh0ZXJtXzc2OC5iaW5kaW5nKSwgYm9keTogdGhpcy5leHBhbmQodGVybV83NjguYm9keSl9KTtcbiAgfVxuICBleHBhbmRUaHJvd1N0YXRlbWVudCh0ZXJtXzc2OSkge1xuICAgIHJldHVybiBuZXcgVGVybShcIlRocm93U3RhdGVtZW50XCIsIHtleHByZXNzaW9uOiB0aGlzLmV4cGFuZCh0ZXJtXzc2OS5leHByZXNzaW9uKX0pO1xuICB9XG4gIGV4cGFuZEZvck9mU3RhdGVtZW50KHRlcm1fNzcwKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRm9yT2ZTdGF0ZW1lbnRcIiwge2xlZnQ6IHRoaXMuZXhwYW5kKHRlcm1fNzcwLmxlZnQpLCByaWdodDogdGhpcy5leHBhbmQodGVybV83NzAucmlnaHQpLCBib2R5OiB0aGlzLmV4cGFuZCh0ZXJtXzc3MC5ib2R5KX0pO1xuICB9XG4gIGV4cGFuZEJpbmRpbmdJZGVudGlmaWVyKHRlcm1fNzcxKSB7XG4gICAgcmV0dXJuIHRlcm1fNzcxO1xuICB9XG4gIGV4cGFuZEJpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXIodGVybV83NzIpIHtcbiAgICByZXR1cm4gdGVybV83NzI7XG4gIH1cbiAgZXhwYW5kQmluZGluZ1Byb3BlcnR5UHJvcGVydHkodGVybV83NzMpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eVwiLCB7bmFtZTogdGhpcy5leHBhbmQodGVybV83NzMubmFtZSksIGJpbmRpbmc6IHRoaXMuZXhwYW5kKHRlcm1fNzczLmJpbmRpbmcpfSk7XG4gIH1cbiAgZXhwYW5kQ29tcHV0ZWRQcm9wZXJ0eU5hbWUodGVybV83NzQpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDb21wdXRlZFByb3BlcnR5TmFtZVwiLCB7ZXhwcmVzc2lvbjogdGhpcy5leHBhbmQodGVybV83NzQuZXhwcmVzc2lvbil9KTtcbiAgfVxuICBleHBhbmRPYmplY3RCaW5kaW5nKHRlcm1fNzc1KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiT2JqZWN0QmluZGluZ1wiLCB7cHJvcGVydGllczogdGVybV83NzUucHJvcGVydGllcy5tYXAodF83NzYgPT4gdGhpcy5leHBhbmQodF83NzYpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRBcnJheUJpbmRpbmcodGVybV83NzcpIHtcbiAgICBsZXQgcmVzdEVsZW1lbnRfNzc4ID0gdGVybV83NzcucmVzdEVsZW1lbnQgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc3Ny5yZXN0RWxlbWVudCk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQXJyYXlCaW5kaW5nXCIsIHtlbGVtZW50czogdGVybV83NzcuZWxlbWVudHMubWFwKHRfNzc5ID0+IHRfNzc5ID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodF83NzkpKS50b0FycmF5KCksIHJlc3RFbGVtZW50OiByZXN0RWxlbWVudF83Nzh9KTtcbiAgfVxuICBleHBhbmRCaW5kaW5nV2l0aERlZmF1bHQodGVybV83ODApIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nV2l0aERlZmF1bHRcIiwge2JpbmRpbmc6IHRoaXMuZXhwYW5kKHRlcm1fNzgwLmJpbmRpbmcpLCBpbml0OiB0aGlzLmV4cGFuZCh0ZXJtXzc4MC5pbml0KX0pO1xuICB9XG4gIGV4cGFuZFNob3J0aGFuZFByb3BlcnR5KHRlcm1fNzgxKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRGF0YVByb3BlcnR5XCIsIHtuYW1lOiBuZXcgVGVybShcIlN0YXRpY1Byb3BlcnR5TmFtZVwiLCB7dmFsdWU6IHRlcm1fNzgxLm5hbWV9KSwgZXhwcmVzc2lvbjogbmV3IFRlcm0oXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiLCB7bmFtZTogdGVybV83ODEubmFtZX0pfSk7XG4gIH1cbiAgZXhwYW5kRm9yU3RhdGVtZW50KHRlcm1fNzgyKSB7XG4gICAgbGV0IGluaXRfNzgzID0gdGVybV83ODIuaW5pdCA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fNzgyLmluaXQpO1xuICAgIGxldCB0ZXN0Xzc4NCA9IHRlcm1fNzgyLnRlc3QgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc4Mi50ZXN0KTtcbiAgICBsZXQgdXBkYXRlXzc4NSA9IHRlcm1fNzgyLnVwZGF0ZSA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fNzgyLnVwZGF0ZSk7XG4gICAgbGV0IGJvZHlfNzg2ID0gdGhpcy5leHBhbmQodGVybV83ODIuYm9keSk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRm9yU3RhdGVtZW50XCIsIHtpbml0OiBpbml0Xzc4MywgdGVzdDogdGVzdF83ODQsIHVwZGF0ZTogdXBkYXRlXzc4NSwgYm9keTogYm9keV83ODZ9KTtcbiAgfVxuICBleHBhbmRZaWVsZEV4cHJlc3Npb24odGVybV83ODcpIHtcbiAgICBsZXQgZXhwcl83ODggPSB0ZXJtXzc4Ny5leHByZXNzaW9uID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83ODcuZXhwcmVzc2lvbik7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiWWllbGRFeHByZXNzaW9uXCIsIHtleHByZXNzaW9uOiBleHByXzc4OH0pO1xuICB9XG4gIGV4cGFuZFlpZWxkR2VuZXJhdG9yRXhwcmVzc2lvbih0ZXJtXzc4OSkge1xuICAgIGxldCBleHByXzc5MCA9IHRlcm1fNzg5LmV4cHJlc3Npb24gPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc4OS5leHByZXNzaW9uKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJZaWVsZEdlbmVyYXRvckV4cHJlc3Npb25cIiwge2V4cHJlc3Npb246IGV4cHJfNzkwfSk7XG4gIH1cbiAgZXhwYW5kV2hpbGVTdGF0ZW1lbnQodGVybV83OTEpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJXaGlsZVN0YXRlbWVudFwiLCB7dGVzdDogdGhpcy5leHBhbmQodGVybV83OTEudGVzdCksIGJvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzkxLmJvZHkpfSk7XG4gIH1cbiAgZXhwYW5kSWZTdGF0ZW1lbnQodGVybV83OTIpIHtcbiAgICBsZXQgY29uc2VxdWVudF83OTMgPSB0ZXJtXzc5Mi5jb25zZXF1ZW50ID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83OTIuY29uc2VxdWVudCk7XG4gICAgbGV0IGFsdGVybmF0ZV83OTQgPSB0ZXJtXzc5Mi5hbHRlcm5hdGUgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc5Mi5hbHRlcm5hdGUpO1xuICAgIHJldHVybiBuZXcgVGVybShcIklmU3RhdGVtZW50XCIsIHt0ZXN0OiB0aGlzLmV4cGFuZCh0ZXJtXzc5Mi50ZXN0KSwgY29uc2VxdWVudDogY29uc2VxdWVudF83OTMsIGFsdGVybmF0ZTogYWx0ZXJuYXRlXzc5NH0pO1xuICB9XG4gIGV4cGFuZEJsb2NrU3RhdGVtZW50KHRlcm1fNzk1KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQmxvY2tTdGF0ZW1lbnRcIiwge2Jsb2NrOiB0aGlzLmV4cGFuZCh0ZXJtXzc5NS5ibG9jayl9KTtcbiAgfVxuICBleHBhbmRCbG9jayh0ZXJtXzc5Nikge1xuICAgIHJldHVybiBuZXcgVGVybShcIkJsb2NrXCIsIHtzdGF0ZW1lbnRzOiB0ZXJtXzc5Ni5zdGF0ZW1lbnRzLm1hcChzXzc5NyA9PiB0aGlzLmV4cGFuZChzXzc5NykpLnRvQXJyYXkoKX0pO1xuICB9XG4gIGV4cGFuZFZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnQodGVybV83OTgpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJWYXJpYWJsZURlY2xhcmF0aW9uU3RhdGVtZW50XCIsIHtkZWNsYXJhdGlvbjogdGhpcy5leHBhbmQodGVybV83OTguZGVjbGFyYXRpb24pfSk7XG4gIH1cbiAgZXhwYW5kUmV0dXJuU3RhdGVtZW50KHRlcm1fNzk5KSB7XG4gICAgaWYgKHRlcm1fNzk5LmV4cHJlc3Npb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRlcm1fNzk5O1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0oXCJSZXR1cm5TdGF0ZW1lbnRcIiwge2V4cHJlc3Npb246IHRoaXMuZXhwYW5kKHRlcm1fNzk5LmV4cHJlc3Npb24pfSk7XG4gIH1cbiAgZXhwYW5kQ2xhc3NEZWNsYXJhdGlvbih0ZXJtXzgwMCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkNsYXNzRGVjbGFyYXRpb25cIiwge25hbWU6IHRlcm1fODAwLm5hbWUgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzgwMC5uYW1lKSwgc3VwZXI6IHRlcm1fODAwLnN1cGVyID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV84MDAuc3VwZXIpLCBlbGVtZW50czogdGVybV84MDAuZWxlbWVudHMubWFwKGVsXzgwMSA9PiB0aGlzLmV4cGFuZChlbF84MDEpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRDbGFzc0V4cHJlc3Npb24odGVybV84MDIpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDbGFzc0V4cHJlc3Npb25cIiwge25hbWU6IHRlcm1fODAyLm5hbWUgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzgwMi5uYW1lKSwgc3VwZXI6IHRlcm1fODAyLnN1cGVyID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV84MDIuc3VwZXIpLCBlbGVtZW50czogdGVybV84MDIuZWxlbWVudHMubWFwKGVsXzgwMyA9PiB0aGlzLmV4cGFuZChlbF84MDMpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRDbGFzc0VsZW1lbnQodGVybV84MDQpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDbGFzc0VsZW1lbnRcIiwge2lzU3RhdGljOiB0ZXJtXzgwNC5pc1N0YXRpYywgbWV0aG9kOiB0aGlzLmV4cGFuZCh0ZXJtXzgwNC5tZXRob2QpfSk7XG4gIH1cbiAgZXhwYW5kVGhpc0V4cHJlc3Npb24odGVybV84MDUpIHtcbiAgICByZXR1cm4gdGVybV84MDU7XG4gIH1cbiAgZXhwYW5kU3ludGF4VGVtcGxhdGUodGVybV84MDYpIHtcbiAgICBsZXQgZXhwYW5kZXJfODA3ID0gbmV3IEV4cGFuZGVyKHRoaXMuY29udGV4dCk7XG4gICAgbGV0IHJfODA4ID0gcHJvY2Vzc1RlbXBsYXRlKHRlcm1fODA2LnRlbXBsYXRlLmlubmVyKCkpO1xuICAgIGxldCBzdHJfODA5ID0gU3ludGF4LmZyb21TdHJpbmcoc2VyaWFsaXplci53cml0ZShyXzgwOC50ZW1wbGF0ZSkpO1xuICAgIGxldCBjYWxsZWVfODEwID0gbmV3IFRlcm0oXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiLCB7bmFtZTogU3ludGF4LmZyb21JZGVudGlmaWVyKFwic3ludGF4VGVtcGxhdGVcIil9KTtcbiAgICBsZXQgZXhwYW5kZWRJbnRlcnBzXzgxMSA9IHJfODA4LmludGVycC5tYXAoaV84MTMgPT4ge1xuICAgICAgbGV0IGVuZl84MTQgPSBuZXcgRW5mb3Jlc3RlcihpXzgxMywgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kKGVuZl84MTQuZW5mb3Jlc3QoXCJleHByZXNzaW9uXCIpKTtcbiAgICB9KTtcbiAgICBsZXQgYXJnc184MTIgPSBMaXN0Lm9mKG5ldyBUZXJtKFwiTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb25cIiwge3ZhbHVlOiBzdHJfODA5fSkpLmNvbmNhdChleHBhbmRlZEludGVycHNfODExKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDYWxsRXhwcmVzc2lvblwiLCB7Y2FsbGVlOiBjYWxsZWVfODEwLCBhcmd1bWVudHM6IGFyZ3NfODEyfSk7XG4gIH1cbiAgZXhwYW5kU3ludGF4UXVvdGUodGVybV84MTUpIHtcbiAgICBsZXQgc3RyXzgxNiA9IG5ldyBUZXJtKFwiTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb25cIiwge3ZhbHVlOiBTeW50YXguZnJvbVN0cmluZyhzZXJpYWxpemVyLndyaXRlKHRlcm1fODE1Lm5hbWUpKX0pO1xuICAgIHJldHVybiBuZXcgVGVybShcIlRlbXBsYXRlRXhwcmVzc2lvblwiLCB7dGFnOiB0ZXJtXzgxNS50ZW1wbGF0ZS50YWcsIGVsZW1lbnRzOiB0ZXJtXzgxNS50ZW1wbGF0ZS5lbGVtZW50cy5wdXNoKHN0cl84MTYpLnB1c2gobmV3IFRlcm0oXCJUZW1wbGF0ZUVsZW1lbnRcIiwge3Jhd1ZhbHVlOiBcIlwifSkpLnRvQXJyYXkoKX0pO1xuICB9XG4gIGV4cGFuZFN0YXRpY01lbWJlckV4cHJlc3Npb24odGVybV84MTcpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJTdGF0aWNNZW1iZXJFeHByZXNzaW9uXCIsIHtvYmplY3Q6IHRoaXMuZXhwYW5kKHRlcm1fODE3Lm9iamVjdCksIHByb3BlcnR5OiB0ZXJtXzgxNy5wcm9wZXJ0eX0pO1xuICB9XG4gIGV4cGFuZEFycmF5RXhwcmVzc2lvbih0ZXJtXzgxOCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkFycmF5RXhwcmVzc2lvblwiLCB7ZWxlbWVudHM6IHRlcm1fODE4LmVsZW1lbnRzLm1hcCh0XzgxOSA9PiB0XzgxOSA9PSBudWxsID8gdF84MTkgOiB0aGlzLmV4cGFuZCh0XzgxOSkpfSk7XG4gIH1cbiAgZXhwYW5kSW1wb3J0KHRlcm1fODIwKSB7XG4gICAgcmV0dXJuIHRlcm1fODIwO1xuICB9XG4gIGV4cGFuZEltcG9ydE5hbWVzcGFjZSh0ZXJtXzgyMSkge1xuICAgIHJldHVybiB0ZXJtXzgyMTtcbiAgfVxuICBleHBhbmRFeHBvcnQodGVybV84MjIpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJFeHBvcnRcIiwge2RlY2xhcmF0aW9uOiB0aGlzLmV4cGFuZCh0ZXJtXzgyMi5kZWNsYXJhdGlvbil9KTtcbiAgfVxuICBleHBhbmRFeHBvcnREZWZhdWx0KHRlcm1fODIzKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRXhwb3J0RGVmYXVsdFwiLCB7Ym9keTogdGhpcy5leHBhbmQodGVybV84MjMuYm9keSl9KTtcbiAgfVxuICBleHBhbmRFeHBvcnRGcm9tKHRlcm1fODI0KSB7XG4gICAgcmV0dXJuIHRlcm1fODI0O1xuICB9XG4gIGV4cGFuZEV4cG9ydEFsbEZyb20odGVybV84MjUpIHtcbiAgICByZXR1cm4gdGVybV84MjU7XG4gIH1cbiAgZXhwYW5kRXhwb3J0U3BlY2lmaWVyKHRlcm1fODI2KSB7XG4gICAgcmV0dXJuIHRlcm1fODI2O1xuICB9XG4gIGV4cGFuZFN0YXRpY1Byb3BlcnR5TmFtZSh0ZXJtXzgyNykge1xuICAgIHJldHVybiB0ZXJtXzgyNztcbiAgfVxuICBleHBhbmREYXRhUHJvcGVydHkodGVybV84MjgpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJEYXRhUHJvcGVydHlcIiwge25hbWU6IHRoaXMuZXhwYW5kKHRlcm1fODI4Lm5hbWUpLCBleHByZXNzaW9uOiB0aGlzLmV4cGFuZCh0ZXJtXzgyOC5leHByZXNzaW9uKX0pO1xuICB9XG4gIGV4cGFuZE9iamVjdEV4cHJlc3Npb24odGVybV84MjkpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJPYmplY3RFeHByZXNzaW9uXCIsIHtwcm9wZXJ0aWVzOiB0ZXJtXzgyOS5wcm9wZXJ0aWVzLm1hcCh0XzgzMCA9PiB0aGlzLmV4cGFuZCh0XzgzMCkpfSk7XG4gIH1cbiAgZXhwYW5kVmFyaWFibGVEZWNsYXJhdG9yKHRlcm1fODMxKSB7XG4gICAgbGV0IGluaXRfODMyID0gdGVybV84MzEuaW5pdCA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fODMxLmluaXQpO1xuICAgIHJldHVybiBuZXcgVGVybShcIlZhcmlhYmxlRGVjbGFyYXRvclwiLCB7YmluZGluZzogdGhpcy5leHBhbmQodGVybV84MzEuYmluZGluZyksIGluaXQ6IGluaXRfODMyfSk7XG4gIH1cbiAgZXhwYW5kVmFyaWFibGVEZWNsYXJhdGlvbih0ZXJtXzgzMykge1xuICAgIHJldHVybiBuZXcgVGVybShcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiwge2tpbmQ6IHRlcm1fODMzLmtpbmQsIGRlY2xhcmF0b3JzOiB0ZXJtXzgzMy5kZWNsYXJhdG9ycy5tYXAoZF84MzQgPT4gdGhpcy5leHBhbmQoZF84MzQpKX0pO1xuICB9XG4gIGV4cGFuZFBhcmVudGhlc2l6ZWRFeHByZXNzaW9uKHRlcm1fODM1KSB7XG4gICAgaWYgKHRlcm1fODM1LmlubmVyLnNpemUgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIpO1xuICAgIH1cbiAgICBsZXQgZW5mXzgzNiA9IG5ldyBFbmZvcmVzdGVyKHRlcm1fODM1LmlubmVyLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IGxvb2thaGVhZF84MzcgPSBlbmZfODM2LnBlZWsoKTtcbiAgICBsZXQgdF84MzggPSBlbmZfODM2LmVuZm9yZXN0RXhwcmVzc2lvbigpO1xuICAgIGlmICh0XzgzOCA9PSBudWxsIHx8IGVuZl84MzYucmVzdC5zaXplID4gMCkge1xuICAgICAgdGhyb3cgZW5mXzgzNi5jcmVhdGVFcnJvcihsb29rYWhlYWRfODM3LCBcInVuZXhwZWN0ZWQgc3ludGF4XCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5leHBhbmQodF84MzgpO1xuICB9XG4gIGV4cGFuZFVuYXJ5RXhwcmVzc2lvbih0ZXJtXzgzOSkge1xuICAgIHJldHVybiBuZXcgVGVybShcIlVuYXJ5RXhwcmVzc2lvblwiLCB7b3BlcmF0b3I6IHRlcm1fODM5Lm9wZXJhdG9yLCBvcGVyYW5kOiB0aGlzLmV4cGFuZCh0ZXJtXzgzOS5vcGVyYW5kKX0pO1xuICB9XG4gIGV4cGFuZFVwZGF0ZUV4cHJlc3Npb24odGVybV84NDApIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJVcGRhdGVFeHByZXNzaW9uXCIsIHtpc1ByZWZpeDogdGVybV84NDAuaXNQcmVmaXgsIG9wZXJhdG9yOiB0ZXJtXzg0MC5vcGVyYXRvciwgb3BlcmFuZDogdGhpcy5leHBhbmQodGVybV84NDAub3BlcmFuZCl9KTtcbiAgfVxuICBleHBhbmRCaW5hcnlFeHByZXNzaW9uKHRlcm1fODQxKSB7XG4gICAgbGV0IGxlZnRfODQyID0gdGhpcy5leHBhbmQodGVybV84NDEubGVmdCk7XG4gICAgbGV0IHJpZ2h0Xzg0MyA9IHRoaXMuZXhwYW5kKHRlcm1fODQxLnJpZ2h0KTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5hcnlFeHByZXNzaW9uXCIsIHtsZWZ0OiBsZWZ0Xzg0Miwgb3BlcmF0b3I6IHRlcm1fODQxLm9wZXJhdG9yLCByaWdodDogcmlnaHRfODQzfSk7XG4gIH1cbiAgZXhwYW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uKHRlcm1fODQ0KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIsIHt0ZXN0OiB0aGlzLmV4cGFuZCh0ZXJtXzg0NC50ZXN0KSwgY29uc2VxdWVudDogdGhpcy5leHBhbmQodGVybV84NDQuY29uc2VxdWVudCksIGFsdGVybmF0ZTogdGhpcy5leHBhbmQodGVybV84NDQuYWx0ZXJuYXRlKX0pO1xuICB9XG4gIGV4cGFuZE5ld1RhcmdldEV4cHJlc3Npb24odGVybV84NDUpIHtcbiAgICByZXR1cm4gdGVybV84NDU7XG4gIH1cbiAgZXhwYW5kTmV3RXhwcmVzc2lvbih0ZXJtXzg0Nikge1xuICAgIGxldCBjYWxsZWVfODQ3ID0gdGhpcy5leHBhbmQodGVybV84NDYuY2FsbGVlKTtcbiAgICBsZXQgZW5mXzg0OCA9IG5ldyBFbmZvcmVzdGVyKHRlcm1fODQ2LmFyZ3VtZW50cywgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgIGxldCBhcmdzXzg0OSA9IGVuZl84NDguZW5mb3Jlc3RBcmd1bWVudExpc3QoKS5tYXAoYXJnXzg1MCA9PiB0aGlzLmV4cGFuZChhcmdfODUwKSk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiTmV3RXhwcmVzc2lvblwiLCB7Y2FsbGVlOiBjYWxsZWVfODQ3LCBhcmd1bWVudHM6IGFyZ3NfODQ5LnRvQXJyYXkoKX0pO1xuICB9XG4gIGV4cGFuZFN1cGVyKHRlcm1fODUxKSB7XG4gICAgcmV0dXJuIHRlcm1fODUxO1xuICB9XG4gIGV4cGFuZENhbGxFeHByZXNzaW9uKHRlcm1fODUyKSB7XG4gICAgbGV0IGNhbGxlZV84NTMgPSB0aGlzLmV4cGFuZCh0ZXJtXzg1Mi5jYWxsZWUpO1xuICAgIGxldCBlbmZfODU0ID0gbmV3IEVuZm9yZXN0ZXIodGVybV84NTIuYXJndW1lbnRzLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IGFyZ3NfODU1ID0gZW5mXzg1NC5lbmZvcmVzdEFyZ3VtZW50TGlzdCgpLm1hcChhcmdfODU2ID0+IHRoaXMuZXhwYW5kKGFyZ184NTYpKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDYWxsRXhwcmVzc2lvblwiLCB7Y2FsbGVlOiBjYWxsZWVfODUzLCBhcmd1bWVudHM6IGFyZ3NfODU1fSk7XG4gIH1cbiAgZXhwYW5kU3ByZWFkRWxlbWVudCh0ZXJtXzg1Nykge1xuICAgIHJldHVybiBuZXcgVGVybShcIlNwcmVhZEVsZW1lbnRcIiwge2V4cHJlc3Npb246IHRoaXMuZXhwYW5kKHRlcm1fODU3LmV4cHJlc3Npb24pfSk7XG4gIH1cbiAgZXhwYW5kRXhwcmVzc2lvblN0YXRlbWVudCh0ZXJtXzg1OCkge1xuICAgIGxldCBjaGlsZF84NTkgPSB0aGlzLmV4cGFuZCh0ZXJtXzg1OC5leHByZXNzaW9uKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJFeHByZXNzaW9uU3RhdGVtZW50XCIsIHtleHByZXNzaW9uOiBjaGlsZF84NTl9KTtcbiAgfVxuICBleHBhbmRMYWJlbGVkU3RhdGVtZW50KHRlcm1fODYwKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiTGFiZWxlZFN0YXRlbWVudFwiLCB7bGFiZWw6IHRlcm1fODYwLmxhYmVsLnZhbCgpLCBib2R5OiB0aGlzLmV4cGFuZCh0ZXJtXzg2MC5ib2R5KX0pO1xuICB9XG4gIGRvRnVuY3Rpb25FeHBhbnNpb24odGVybV84NjEsIHR5cGVfODYyKSB7XG4gICAgbGV0IHNjb3BlXzg2MyA9IGZyZXNoU2NvcGUoXCJmdW5cIik7XG4gICAgbGV0IHJlZF84NjQgPSBuZXcgQXBwbHlTY29wZUluUGFyYW1zUmVkdWNlcihzY29wZV84NjMsIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IHBhcmFtc184NjU7XG4gICAgaWYgKHR5cGVfODYyICE9PSBcIkdldHRlclwiICYmIHR5cGVfODYyICE9PSBcIlNldHRlclwiKSB7XG4gICAgICBwYXJhbXNfODY1ID0gcmVkXzg2NC50cmFuc2Zvcm0odGVybV84NjEucGFyYW1zKTtcbiAgICAgIHBhcmFtc184NjUgPSB0aGlzLmV4cGFuZChwYXJhbXNfODY1KTtcbiAgICB9XG4gICAgdGhpcy5jb250ZXh0LmN1cnJlbnRTY29wZS5wdXNoKHNjb3BlXzg2Myk7XG4gICAgbGV0IGV4cGFuZGVyXzg2NiA9IG5ldyBFeHBhbmRlcih0aGlzLmNvbnRleHQpO1xuICAgIGxldCBtYXJrZWRCb2R5Xzg2NywgYm9keVRlcm1fODY4O1xuICAgIGlmICh0ZXJtXzg2MS5ib2R5IGluc3RhbmNlb2YgVGVybSkge1xuICAgICAgYm9keVRlcm1fODY4ID0gdGhpcy5leHBhbmQodGVybV84NjEuYm9keS5hZGRTY29wZShzY29wZV84NjMsIHRoaXMuY29udGV4dC5iaW5kaW5ncykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXJrZWRCb2R5Xzg2NyA9IHRlcm1fODYxLmJvZHkubWFwKGJfODY5ID0+IGJfODY5LmFkZFNjb3BlKHNjb3BlXzg2MywgdGhpcy5jb250ZXh0LmJpbmRpbmdzKSk7XG4gICAgICBib2R5VGVybV84NjggPSBuZXcgVGVybShcIkZ1bmN0aW9uQm9keVwiLCB7ZGlyZWN0aXZlczogTGlzdCgpLCBzdGF0ZW1lbnRzOiBleHBhbmRlcl84NjYuZXhwYW5kKG1hcmtlZEJvZHlfODY3KX0pO1xuICAgIH1cbiAgICB0aGlzLmNvbnRleHQuY3VycmVudFNjb3BlLnBvcCgpO1xuICAgIGlmICh0eXBlXzg2MiA9PT0gXCJHZXR0ZXJcIikge1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKHR5cGVfODYyLCB7bmFtZTogdGhpcy5leHBhbmQodGVybV84NjEubmFtZSksIGJvZHk6IGJvZHlUZXJtXzg2OH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZV84NjIgPT09IFwiU2V0dGVyXCIpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybSh0eXBlXzg2Miwge25hbWU6IHRoaXMuZXhwYW5kKHRlcm1fODYxLm5hbWUpLCBwYXJhbTogdGVybV84NjEucGFyYW0sIGJvZHk6IGJvZHlUZXJtXzg2OH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0odHlwZV84NjIsIHtuYW1lOiB0ZXJtXzg2MS5uYW1lLCBpc0dlbmVyYXRvcjogdGVybV84NjEuaXNHZW5lcmF0b3IsIHBhcmFtczogcGFyYW1zXzg2NSwgYm9keTogYm9keVRlcm1fODY4fSk7XG4gIH1cbiAgZXhwYW5kTWV0aG9kKHRlcm1fODcwKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9GdW5jdGlvbkV4cGFuc2lvbih0ZXJtXzg3MCwgXCJNZXRob2RcIik7XG4gIH1cbiAgZXhwYW5kU2V0dGVyKHRlcm1fODcxKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9GdW5jdGlvbkV4cGFuc2lvbih0ZXJtXzg3MSwgXCJTZXR0ZXJcIik7XG4gIH1cbiAgZXhwYW5kR2V0dGVyKHRlcm1fODcyKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9GdW5jdGlvbkV4cGFuc2lvbih0ZXJtXzg3MiwgXCJHZXR0ZXJcIik7XG4gIH1cbiAgZXhwYW5kRnVuY3Rpb25EZWNsYXJhdGlvbih0ZXJtXzg3Mykge1xuICAgIHJldHVybiB0aGlzLmRvRnVuY3Rpb25FeHBhbnNpb24odGVybV84NzMsIFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiKTtcbiAgfVxuICBleHBhbmRGdW5jdGlvbkV4cHJlc3Npb24odGVybV84NzQpIHtcbiAgICByZXR1cm4gdGhpcy5kb0Z1bmN0aW9uRXhwYW5zaW9uKHRlcm1fODc0LCBcIkZ1bmN0aW9uRXhwcmVzc2lvblwiKTtcbiAgfVxuICBleHBhbmRDb21wb3VuZEFzc2lnbm1lbnRFeHByZXNzaW9uKHRlcm1fODc1KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29tcG91bmRBc3NpZ25tZW50RXhwcmVzc2lvblwiLCB7YmluZGluZzogdGhpcy5leHBhbmQodGVybV84NzUuYmluZGluZyksIG9wZXJhdG9yOiB0ZXJtXzg3NS5vcGVyYXRvciwgZXhwcmVzc2lvbjogdGhpcy5leHBhbmQodGVybV84NzUuZXhwcmVzc2lvbil9KTtcbiAgfVxuICBleHBhbmRBc3NpZ25tZW50RXhwcmVzc2lvbih0ZXJtXzg3Nikge1xuICAgIHJldHVybiBuZXcgVGVybShcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIsIHtiaW5kaW5nOiB0aGlzLmV4cGFuZCh0ZXJtXzg3Ni5iaW5kaW5nKSwgZXhwcmVzc2lvbjogdGhpcy5leHBhbmQodGVybV84NzYuZXhwcmVzc2lvbil9KTtcbiAgfVxuICBleHBhbmRFbXB0eVN0YXRlbWVudCh0ZXJtXzg3Nykge1xuICAgIHJldHVybiB0ZXJtXzg3NztcbiAgfVxuICBleHBhbmRMaXRlcmFsQm9vbGVhbkV4cHJlc3Npb24odGVybV84NzgpIHtcbiAgICByZXR1cm4gdGVybV84Nzg7XG4gIH1cbiAgZXhwYW5kTGl0ZXJhbE51bWVyaWNFeHByZXNzaW9uKHRlcm1fODc5KSB7XG4gICAgcmV0dXJuIHRlcm1fODc5O1xuICB9XG4gIGV4cGFuZExpdGVyYWxJbmZpbml0eUV4cHJlc3Npb24odGVybV84ODApIHtcbiAgICByZXR1cm4gdGVybV84ODA7XG4gIH1cbiAgZXhwYW5kSWRlbnRpZmllckV4cHJlc3Npb24odGVybV84ODEpIHtcbiAgICBsZXQgdHJhbnNfODgyID0gdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV84ODEubmFtZS5yZXNvbHZlKCkpO1xuICAgIGlmICh0cmFuc184ODIpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIklkZW50aWZpZXJFeHByZXNzaW9uXCIsIHtuYW1lOiB0cmFuc184ODIuaWR9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRlcm1fODgxO1xuICB9XG4gIGV4cGFuZExpdGVyYWxOdWxsRXhwcmVzc2lvbih0ZXJtXzg4Mykge1xuICAgIHJldHVybiB0ZXJtXzg4MztcbiAgfVxuICBleHBhbmRMaXRlcmFsU3RyaW5nRXhwcmVzc2lvbih0ZXJtXzg4NCkge1xuICAgIHJldHVybiB0ZXJtXzg4NDtcbiAgfVxuICBleHBhbmRMaXRlcmFsUmVnRXhwRXhwcmVzc2lvbih0ZXJtXzg4NSkge1xuICAgIHJldHVybiB0ZXJtXzg4NTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/terms.js b/dist/terms.js index b080a34d..2458c9de 100644 --- a/dist/terms.js +++ b/dist/terms.js @@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", { }); exports.isParenthesizedExpression = exports.isFunctionWithName = exports.isFunctionTerm = exports.isSyntaxrecDeclaration = exports.isSyntaxDeclaration = exports.isEOF = exports.isVariableDeclarator = exports.isVariableDeclaration = exports.isSyntaxTemplate = exports.isTemplateElement = exports.isSwitchDefault = exports.isSwitchCase = exports.isSuper = exports.isSpreadElement = exports.isScript = exports.isFunctionDeclaration = exports.isFunctionBody = exports.isFormalParameters = exports.isDirective = exports.isCatchClause = exports.isBlock = exports.isWithStatement = exports.isWhileStatement = exports.isVariableDeclarationStatement = exports.isTryFinallyStatement = exports.isTryCatchStatement = exports.isThrowStatement = exports.isSwitchStatementWithDefault = exports.isSwitchStatement = exports.isReturnStatement = exports.isLabeledStatement = exports.isIfStatement = exports.isForStatement = exports.isForOfStatement = exports.isForInStatement = exports.isExpressionStatement = exports.isEmptyStatement = exports.isDoWhileStatement = exports.isDebuggerStatement = exports.isContinueStatement = exports.isBreakStatement = exports.isBlockStatement = exports.isYieldGeneratorExpression = exports.isYieldExpression = exports.isUpdateExpression = exports.isThisExpression = exports.isTemplateExpression = exports.isStaticMemberExpression = exports.isUnaryExpression = exports.isObjectExpression = exports.isNewTargetExpression = exports.isNewExpression = exports.isIdentifierExpression = exports.isFunctionExpression = exports.isConditionalExpression = exports.isComputedMemberExpression = exports.isComputedAssignmentExpression = exports.isCallExpression = exports.isBinaryExpression = exports.isAssignmentExpression = exports.isArrowExpression = exports.isArrayExpression = exports.isLiteralStringExpression = exports.isLiteralRegExpExpression = exports.isLiteralNumericExpression = exports.isLiteralNullExpression = exports.isLiteralInfinityExpression = exports.isLiteralBooleanExpression = exports.isStaticPropertyName = exports.isComputedPropertyName = exports.isShorthandProperty = exports.isDataProperty = exports.isSetter = exports.isGetter = exports.isMethod = exports.isExportSpecifier = exports.isExportDefault = exports.isExport = exports.isExportFrom = exports.isExportAllFrom = exports.isImportSpecifier = exports.isImportNamespace = exports.isImport = exports.isModule = exports.isClassElement = exports.isClassDeclaration = exports.isClassExpression = exports.isBindingPropertyProperty = exports.isBindingPropertyIdentifier = exports.isObjectBinding = exports.isArrayBinding = exports.isBindingIdentifier = exports.isBindingWithDefault = undefined; +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _immutable = require("immutable"); @@ -28,20 +30,20 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Term = function () { - function Term(type_871, props_872) { + function Term(type_887, props_888) { _classCallCheck(this, Term); - this.type = type_871; + this.type = type_887; this.loc = null; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { - for (var _iterator = Object.keys(props_872)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + for (var _iterator = Object.keys(props_888)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var prop = _step.value; - this[prop] = props_872[prop]; + this[prop] = props_888[prop]; } } catch (err) { _didIteratorError = true; @@ -61,26 +63,26 @@ var Term = function () { _createClass(Term, [{ key: "addScope", - value: function addScope(scope_873, bindings_874, options_875) { - var next_876 = {}; + value: function addScope(scope_889, bindings_890, options_891) { + var next_892 = {}; var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { - for (var _iterator2 = fieldsIn_870(this)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + for (var _iterator2 = fieldsIn_886(this)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var field = _step2.value; if (this[field] == null) { - next_876[field] = null; + next_892[field] = null; } else if (typeof this[field].addScope === "function") { - next_876[field] = this[field].addScope(scope_873, bindings_874, options_875); + next_892[field] = this[field].addScope(scope_889, bindings_890, options_891); } else if (_immutable.List.isList(this[field])) { - next_876[field] = this[field].map(function (f_877) { - return f_877.addScope(scope_873, bindings_874, options_875); + next_892[field] = this[field].map(function (f_893) { + return f_893.addScope(scope_889, bindings_890, options_891); }); } else { - next_876[field] = this[field]; + next_892[field] = this[field]; } } } catch (err) { @@ -98,7 +100,78 @@ var Term = function () { } } - return new Term(this.type, next_876); + return new Term(this.type, next_892); + } + }, { + key: "lineNumber", + value: function lineNumber() { + var _iteratorNormalCompletion3 = true; + var _didIteratorError3 = false; + var _iteratorError3 = undefined; + + try { + for (var _iterator3 = fieldsIn_886(this)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + var field = _step3.value; + + if (_typeof(this[field]) && this[field].lineNumber === "function") { + return this[field].lineNumber(); + } + } + } catch (err) { + _didIteratorError3 = true; + _iteratorError3 = err; + } finally { + try { + if (!_iteratorNormalCompletion3 && _iterator3.return) { + _iterator3.return(); + } + } finally { + if (_didIteratorError3) { + throw _iteratorError3; + } + } + } + } + }, { + key: "setLineNumber", + value: function setLineNumber(line_894) { + var next_895 = {}; + var _iteratorNormalCompletion4 = true; + var _didIteratorError4 = false; + var _iteratorError4 = undefined; + + try { + for (var _iterator4 = fieldsIn_886(this)[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { + var field = _step4.value; + + if (this[field] == null) { + next_895[field] = null; + } else if (typeof this[field].setLineNumber === "function") { + next_895[field] = this[field].setLineNumber(line_894); + } else if (_immutable.List.isList(this[field])) { + next_895[field] = this[field].map(function (f_896) { + return f_896.setLineNumber(line_894); + }); + } else { + next_895[field] = this[field]; + } + } + } catch (err) { + _didIteratorError4 = true; + _iteratorError4 = err; + } finally { + try { + if (!_iteratorNormalCompletion4 && _iterator4.return) { + _iterator4.return(); + } + } finally { + if (_didIteratorError4) { + throw _iteratorError4; + } + } + } + + return new Term(this.type, next_895); } }]); @@ -292,7 +365,7 @@ var isFunctionWithName = exports.isFunctionWithName = R.and(isFunctionTerm, R.co ; var isParenthesizedExpression = exports.isParenthesizedExpression = R.whereEq({ type: "ParenthesizedExpression" }); ; -var fieldsIn_870 = R.cond([[isBindingWithDefault, R.always(_immutable.List.of("binding", "init"))], [isBindingIdentifier, R.always(_immutable.List.of("name"))], [isArrayBinding, R.always(_immutable.List.of("elements", "restElement"))], [isObjectBinding, R.always(_immutable.List.of("properties"))], [isBindingPropertyIdentifier, R.always(_immutable.List.of("binding", "init"))], [isBindingPropertyProperty, R.always(_immutable.List.of("name", "binding"))], [isClassExpression, R.always(_immutable.List.of("name", "super", "elements"))], [isClassDeclaration, R.always(_immutable.List.of("name", "super", "elements"))], [isClassElement, R.always(_immutable.List.of("isStatic", "method"))], [isModule, R.always(_immutable.List.of("directives", "items"))], [isImport, R.always(_immutable.List.of("moduleSpecifier", "defaultBinding", "namedImports"))], [isImportNamespace, R.always(_immutable.List.of("moduleSpecifier", "defaultBinding", "namespaceBinding"))], [isImportSpecifier, R.always(_immutable.List.of("name", "binding"))], [isExportAllFrom, R.always(_immutable.List.of("moduleSpecifier"))], [isExportFrom, R.always(_immutable.List.of("namedExports", "moduleSpecifier"))], [isExport, R.always(_immutable.List.of("declaration"))], [isExportDefault, R.always(_immutable.List.of("body"))], [isExportSpecifier, R.always(_immutable.List.of("name", "exportedName"))], [isMethod, R.always(_immutable.List.of("body", "isGenerator", "params"))], [isGetter, R.always(_immutable.List.of("body"))], [isSetter, R.always(_immutable.List.of("body", "param"))], [isDataProperty, R.always(_immutable.List.of("name", "expression"))], [isShorthandProperty, R.always(_immutable.List.of("expression"))], [isStaticPropertyName, R.always(_immutable.List.of("value"))], [isLiteralBooleanExpression, R.always(_immutable.List.of("value"))], [isLiteralInfinityExpression, R.always((0, _immutable.List)())], [isLiteralNullExpression, R.always((0, _immutable.List)())], [isLiteralNumericExpression, R.always(_immutable.List.of("value"))], [isLiteralRegExpExpression, R.always(_immutable.List.of("pattern", "flags"))], [isLiteralStringExpression, R.always(_immutable.List.of("value"))], [isArrayExpression, R.always(_immutable.List.of("elements"))], [isArrowExpression, R.always(_immutable.List.of("params", "body"))], [isAssignmentExpression, R.always(_immutable.List.of("binding", "expression"))], [isBinaryExpression, R.always(_immutable.List.of("operator", "left", "right"))], [isCallExpression, R.always(_immutable.List.of("callee", "arguments"))], [isComputedAssignmentExpression, R.always(_immutable.List.of("operator", "binding", "expression"))], [isComputedMemberExpression, R.always(_immutable.List.of("object", "expression"))], [isConditionalExpression, R.always(_immutable.List.of("test", "consequent", "alternate"))], [isFunctionExpression, R.always(_immutable.List.of("name", "isGenerator", "params", "body"))], [isIdentifierExpression, R.always(_immutable.List.of("name"))], [isNewExpression, R.always(_immutable.List.of("callee", "arguments"))], [isNewTargetExpression, R.always((0, _immutable.List)())], [isObjectExpression, R.always(_immutable.List.of("properties"))], [isUnaryExpression, R.always(_immutable.List.of("operator", "operand"))], [isStaticMemberExpression, R.always(_immutable.List.of("object", "property"))], [isTemplateExpression, R.always(_immutable.List.of("tag", "elements"))], [isThisExpression, R.always((0, _immutable.List)())], [isYieldExpression, R.always(_immutable.List.of("expression"))], [isYieldGeneratorExpression, R.always(_immutable.List.of("expression"))], [isBlockStatement, R.always(_immutable.List.of("block"))], [isBreakStatement, R.always(_immutable.List.of("label"))], [isContinueStatement, R.always(_immutable.List.of("label"))], [isDebuggerStatement, R.always((0, _immutable.List)())], [isDoWhileStatement, R.always(_immutable.List.of("test", "body"))], [isEmptyStatement, R.always((0, _immutable.List)())], [isExpressionStatement, R.always(_immutable.List.of("expression"))], [isForInStatement, R.always(_immutable.List.of("left", "right", "body"))], [isForOfStatement, R.always(_immutable.List.of("left", "right", "body"))], [isForStatement, R.always(_immutable.List.of("init", "test", "update", "body"))], [isLabeledStatement, R.always(_immutable.List.of("label", "body"))], [isReturnStatement, R.always(_immutable.List.of("expression"))], [isSwitchStatementWithDefault, R.always(_immutable.List.of("discriminant", "preDefaultCases", "defaultCase", "postDefaultCases"))], [isThrowStatement, R.always(_immutable.List.of("expression"))], [isTryCatchStatement, R.always(_immutable.List.of("body", "catchClause"))], [isTryFinallyStatement, R.always(_immutable.List.of("body", "catchClause", "finalizer"))], [isVariableDeclarationStatement, R.always(_immutable.List.of("declaration"))], [isWithStatement, R.always(_immutable.List.of("object", "body"))], [isBlock, R.always(_immutable.List.of("statements"))], [isCatchClause, R.always(_immutable.List.of("binding", "body"))], [isDirective, R.always(_immutable.List.of("rawValue"))], [isFormalParameters, R.always(_immutable.List.of("items", "rest"))], [isFunctionBody, R.always(_immutable.List.of("directives", "statements"))], [isFunctionDeclaration, R.always(_immutable.List.of("name", "isGenerator", "params", "body"))], [isScript, R.always(_immutable.List.of("directives", "statements"))], [isSpreadElement, R.always(_immutable.List.of("expression"))], [isSuper, R.always((0, _immutable.List)())], [isSwitchCase, R.always(_immutable.List.of("test", "consequent"))], [isSwitchDefault, R.always(_immutable.List.of("consequent"))], [isTemplateElement, R.always(_immutable.List.of("rawValue"))], [isSyntaxTemplate, R.always(_immutable.List.of("template"))], [isVariableDeclaration, R.always(_immutable.List.of("kind", "declarators"))], [isVariableDeclarator, R.always(_immutable.List.of("binding", "init"))], [isParenthesizedExpression, R.always(_immutable.List.of("inner"))], [R.T, function (type_878) { - return (0, _errors.assert)(false, "Missing case in fields: " + type_878.type); +var fieldsIn_886 = R.cond([[isBindingWithDefault, R.always(_immutable.List.of("binding", "init"))], [isBindingIdentifier, R.always(_immutable.List.of("name"))], [isArrayBinding, R.always(_immutable.List.of("elements", "restElement"))], [isObjectBinding, R.always(_immutable.List.of("properties"))], [isBindingPropertyIdentifier, R.always(_immutable.List.of("binding", "init"))], [isBindingPropertyProperty, R.always(_immutable.List.of("name", "binding"))], [isClassExpression, R.always(_immutable.List.of("name", "super", "elements"))], [isClassDeclaration, R.always(_immutable.List.of("name", "super", "elements"))], [isClassElement, R.always(_immutable.List.of("isStatic", "method"))], [isModule, R.always(_immutable.List.of("directives", "items"))], [isImport, R.always(_immutable.List.of("moduleSpecifier", "defaultBinding", "namedImports"))], [isImportNamespace, R.always(_immutable.List.of("moduleSpecifier", "defaultBinding", "namespaceBinding"))], [isImportSpecifier, R.always(_immutable.List.of("name", "binding"))], [isExportAllFrom, R.always(_immutable.List.of("moduleSpecifier"))], [isExportFrom, R.always(_immutable.List.of("namedExports", "moduleSpecifier"))], [isExport, R.always(_immutable.List.of("declaration"))], [isExportDefault, R.always(_immutable.List.of("body"))], [isExportSpecifier, R.always(_immutable.List.of("name", "exportedName"))], [isMethod, R.always(_immutable.List.of("body", "isGenerator", "params"))], [isGetter, R.always(_immutable.List.of("body"))], [isSetter, R.always(_immutable.List.of("body", "param"))], [isDataProperty, R.always(_immutable.List.of("name", "expression"))], [isShorthandProperty, R.always(_immutable.List.of("expression"))], [isStaticPropertyName, R.always(_immutable.List.of("value"))], [isLiteralBooleanExpression, R.always(_immutable.List.of("value"))], [isLiteralInfinityExpression, R.always((0, _immutable.List)())], [isLiteralNullExpression, R.always((0, _immutable.List)())], [isLiteralNumericExpression, R.always(_immutable.List.of("value"))], [isLiteralRegExpExpression, R.always(_immutable.List.of("pattern", "flags"))], [isLiteralStringExpression, R.always(_immutable.List.of("value"))], [isArrayExpression, R.always(_immutable.List.of("elements"))], [isArrowExpression, R.always(_immutable.List.of("params", "body"))], [isAssignmentExpression, R.always(_immutable.List.of("binding", "expression"))], [isBinaryExpression, R.always(_immutable.List.of("operator", "left", "right"))], [isCallExpression, R.always(_immutable.List.of("callee", "arguments"))], [isComputedAssignmentExpression, R.always(_immutable.List.of("operator", "binding", "expression"))], [isComputedMemberExpression, R.always(_immutable.List.of("object", "expression"))], [isConditionalExpression, R.always(_immutable.List.of("test", "consequent", "alternate"))], [isFunctionExpression, R.always(_immutable.List.of("name", "isGenerator", "params", "body"))], [isIdentifierExpression, R.always(_immutable.List.of("name"))], [isNewExpression, R.always(_immutable.List.of("callee", "arguments"))], [isNewTargetExpression, R.always((0, _immutable.List)())], [isObjectExpression, R.always(_immutable.List.of("properties"))], [isUnaryExpression, R.always(_immutable.List.of("operator", "operand"))], [isStaticMemberExpression, R.always(_immutable.List.of("object", "property"))], [isTemplateExpression, R.always(_immutable.List.of("tag", "elements"))], [isThisExpression, R.always((0, _immutable.List)())], [isYieldExpression, R.always(_immutable.List.of("expression"))], [isYieldGeneratorExpression, R.always(_immutable.List.of("expression"))], [isBlockStatement, R.always(_immutable.List.of("block"))], [isBreakStatement, R.always(_immutable.List.of("label"))], [isContinueStatement, R.always(_immutable.List.of("label"))], [isDebuggerStatement, R.always((0, _immutable.List)())], [isDoWhileStatement, R.always(_immutable.List.of("test", "body"))], [isEmptyStatement, R.always((0, _immutable.List)())], [isExpressionStatement, R.always(_immutable.List.of("expression"))], [isForInStatement, R.always(_immutable.List.of("left", "right", "body"))], [isForOfStatement, R.always(_immutable.List.of("left", "right", "body"))], [isForStatement, R.always(_immutable.List.of("init", "test", "update", "body"))], [isLabeledStatement, R.always(_immutable.List.of("label", "body"))], [isReturnStatement, R.always(_immutable.List.of("expression"))], [isSwitchStatementWithDefault, R.always(_immutable.List.of("discriminant", "preDefaultCases", "defaultCase", "postDefaultCases"))], [isThrowStatement, R.always(_immutable.List.of("expression"))], [isTryCatchStatement, R.always(_immutable.List.of("body", "catchClause"))], [isTryFinallyStatement, R.always(_immutable.List.of("body", "catchClause", "finalizer"))], [isVariableDeclarationStatement, R.always(_immutable.List.of("declaration"))], [isWithStatement, R.always(_immutable.List.of("object", "body"))], [isBlock, R.always(_immutable.List.of("statements"))], [isCatchClause, R.always(_immutable.List.of("binding", "body"))], [isDirective, R.always(_immutable.List.of("rawValue"))], [isFormalParameters, R.always(_immutable.List.of("items", "rest"))], [isFunctionBody, R.always(_immutable.List.of("directives", "statements"))], [isFunctionDeclaration, R.always(_immutable.List.of("name", "isGenerator", "params", "body"))], [isScript, R.always(_immutable.List.of("directives", "statements"))], [isSpreadElement, R.always(_immutable.List.of("expression"))], [isSuper, R.always((0, _immutable.List)())], [isSwitchCase, R.always(_immutable.List.of("test", "consequent"))], [isSwitchDefault, R.always(_immutable.List.of("consequent"))], [isTemplateElement, R.always(_immutable.List.of("rawValue"))], [isSyntaxTemplate, R.always(_immutable.List.of("template"))], [isVariableDeclaration, R.always(_immutable.List.of("kind", "declarators"))], [isVariableDeclarator, R.always(_immutable.List.of("binding", "init"))], [isParenthesizedExpression, R.always(_immutable.List.of("inner"))], [R.T, function (type_897) { + return (0, _errors.assert)(false, "Missing case in fields: " + type_897.type); }]]); -//# sourceMappingURL=data:application/json;base64,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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TGlzdH0gZnJvbSBcImltbXV0YWJsZVwiO1xuaW1wb3J0IHthc3NlcnQsIGV4cGVjdH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5pbXBvcnQge21peGlufSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IFN5bnRheCBmcm9tIFwiLi9zeW50YXhcIjtcbmltcG9ydCAgKiBhcyBSIGZyb20gXCJyYW1kYVwiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybSB7XG4gIGNvbnN0cnVjdG9yKHR5cGVfODcxLCBwcm9wc184NzIpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlXzg3MTtcbiAgICB0aGlzLmxvYyA9IG51bGw7XG4gICAgZm9yIChsZXQgcHJvcCBvZiBPYmplY3Qua2V5cyhwcm9wc184NzIpKSB7XG4gICAgICB0aGlzW3Byb3BdID0gcHJvcHNfODcyW3Byb3BdO1xuICAgIH1cbiAgfVxuICBhZGRTY29wZShzY29wZV84NzMsIGJpbmRpbmdzXzg3NCwgb3B0aW9uc184NzUpIHtcbiAgICBsZXQgbmV4dF84NzYgPSB7fTtcbiAgICBmb3IgKGxldCBmaWVsZCBvZiBmaWVsZHNJbl84NzAodGhpcykpIHtcbiAgICAgIGlmICh0aGlzW2ZpZWxkXSA9PSBudWxsKSB7XG4gICAgICAgIG5leHRfODc2W2ZpZWxkXSA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzW2ZpZWxkXS5hZGRTY29wZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG5leHRfODc2W2ZpZWxkXSA9IHRoaXNbZmllbGRdLmFkZFNjb3BlKHNjb3BlXzg3MywgYmluZGluZ3NfODc0LCBvcHRpb25zXzg3NSk7XG4gICAgICB9IGVsc2UgaWYgKExpc3QuaXNMaXN0KHRoaXNbZmllbGRdKSkge1xuICAgICAgICBuZXh0Xzg3NltmaWVsZF0gPSB0aGlzW2ZpZWxkXS5tYXAoZl84NzcgPT4gZl84NzcuYWRkU2NvcGUoc2NvcGVfODczLCBiaW5kaW5nc184NzQsIG9wdGlvbnNfODc1KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0Xzg3NltmaWVsZF0gPSB0aGlzW2ZpZWxkXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZXJtKHRoaXMudHlwZSwgbmV4dF84NzYpO1xuICB9XG59XG5leHBvcnQgY29uc3QgaXNCaW5kaW5nV2l0aERlZmF1bHQgPSBSLndoZXJlRXEoe3R5cGU6IFwiQmluZGluZ1dpdGhEZWZhdWx0XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0JpbmRpbmdJZGVudGlmaWVyID0gUi53aGVyZUVxKHt0eXBlOiBcIkJpbmRpbmdJZGVudGlmaWVyXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0FycmF5QmluZGluZyA9IFIud2hlcmVFcSh7dHlwZTogXCJBcnJheUJpbmRpbmdcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzT2JqZWN0QmluZGluZyA9IFIud2hlcmVFcSh7dHlwZTogXCJPYmplY3RCaW5kaW5nXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0JpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXIgPSBSLndoZXJlRXEoe3R5cGU6IFwiQmluZGluZ1Byb3BlcnR5SWRlbnRpZmllclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eSA9IFIud2hlcmVFcSh7dHlwZTogXCJCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0NsYXNzRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJDbGFzc0V4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQ2xhc3NEZWNsYXJhdGlvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJDbGFzc0RlY2xhcmF0aW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0NsYXNzRWxlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJDbGFzc0VsZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzTW9kdWxlID0gUi53aGVyZUVxKHt0eXBlOiBcIk1vZHVsZVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNJbXBvcnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiSW1wb3J0XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0ltcG9ydE5hbWVzcGFjZSA9IFIud2hlcmVFcSh7dHlwZTogXCJJbXBvcnROYW1lc3BhY2VcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzSW1wb3J0U3BlY2lmaWVyID0gUi53aGVyZUVxKHt0eXBlOiBcIkltcG9ydFNwZWNpZmllclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFeHBvcnRBbGxGcm9tID0gUi53aGVyZUVxKHt0eXBlOiBcIkV4cG9ydEFsbEZyb21cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRXhwb3J0RnJvbSA9IFIud2hlcmVFcSh7dHlwZTogXCJFeHBvcnRGcm9tXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0V4cG9ydCA9IFIud2hlcmVFcSh7dHlwZTogXCJFeHBvcnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRXhwb3J0RGVmYXVsdCA9IFIud2hlcmVFcSh7dHlwZTogXCJFeHBvcnREZWZhdWx0XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0V4cG9ydFNwZWNpZmllciA9IFIud2hlcmVFcSh7dHlwZTogXCJFeHBvcnRTcGVjaWZpZXJcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzTWV0aG9kID0gUi53aGVyZUVxKHt0eXBlOiBcIk1ldGhvZFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNHZXR0ZXIgPSBSLndoZXJlRXEoe3R5cGU6IFwiR2V0dGVyXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1NldHRlciA9IFIud2hlcmVFcSh7dHlwZTogXCJTZXR0ZXJcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRGF0YVByb3BlcnR5ID0gUi53aGVyZUVxKHt0eXBlOiBcIkRhdGFQcm9wZXJ0eVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTaG9ydGhhbmRQcm9wZXJ0eSA9IFIud2hlcmVFcSh7dHlwZTogXCJTaG9ydGhhbmRQcm9wZXJ0eVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDb21wdXRlZFByb3BlcnR5TmFtZSA9IFIud2hlcmVFcSh7dHlwZTogXCJDb21wdXRlZFByb3BlcnR5TmFtZVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTdGF0aWNQcm9wZXJ0eU5hbWUgPSBSLndoZXJlRXEoe3R5cGU6IFwiU3RhdGljUHJvcGVydHlOYW1lXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0xpdGVyYWxCb29sZWFuRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJMaXRlcmFsQm9vbGVhbkV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzTGl0ZXJhbEluZmluaXR5RXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJMaXRlcmFsSW5maW5pdHlFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0xpdGVyYWxOdWxsRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJMaXRlcmFsTnVsbEV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzTGl0ZXJhbE51bWVyaWNFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkxpdGVyYWxOdW1lcmljRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNMaXRlcmFsUmVnRXhwRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJMaXRlcmFsUmVnRXhwRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNMaXRlcmFsU3RyaW5nRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJMaXRlcmFsU3RyaW5nRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNBcnJheUV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQXJyYXlFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Fycm93RXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJBcnJvd0V4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQXNzaWdubWVudEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQmluYXJ5RXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJCaW5hcnlFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0NhbGxFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkNhbGxFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0NvbXB1dGVkQXNzaWdubWVudEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQ29tcHV0ZWRBc3NpZ25tZW50RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDb21wdXRlZE1lbWJlckV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0NvbmRpdGlvbmFsRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRnVuY3Rpb25FeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkZ1bmN0aW9uRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNJZGVudGlmaWVyRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJJZGVudGlmaWVyRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNOZXdFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIk5ld0V4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzTmV3VGFyZ2V0RXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJOZXdUYXJnZXRFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc09iamVjdEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiT2JqZWN0RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNVbmFyeUV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiVW5hcnlFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N0YXRpY01lbWJlckV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiU3RhdGljTWVtYmVyRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNUZW1wbGF0ZUV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiVGVtcGxhdGVFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1RoaXNFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlRoaXNFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1VwZGF0ZUV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiVXBkYXRlRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNZaWVsZEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiWWllbGRFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1lpZWxkR2VuZXJhdG9yRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJZaWVsZEdlbmVyYXRvckV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQmxvY2tTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiQmxvY2tTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQnJlYWtTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiQnJlYWtTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQ29udGludWVTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiQ29udGludWVTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRGVidWdnZXJTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRGVidWdnZXJTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRG9XaGlsZVN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJEb1doaWxlU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0VtcHR5U3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkVtcHR5U3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0V4cHJlc3Npb25TdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwcmVzc2lvblN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNGb3JJblN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJGb3JJblN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNGb3JPZlN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJGb3JPZlN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNGb3JTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRm9yU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0lmU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIklmU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0xhYmVsZWRTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiTGFiZWxlZFN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNSZXR1cm5TdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiUmV0dXJuU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N3aXRjaFN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJTd2l0Y2hTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzU3dpdGNoU3RhdGVtZW50V2l0aERlZmF1bHQgPSBSLndoZXJlRXEoe3R5cGU6IFwiU3dpdGNoU3RhdGVtZW50V2l0aERlZmF1bHRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVGhyb3dTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiVGhyb3dTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVHJ5Q2F0Y2hTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiVHJ5Q2F0Y2hTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVHJ5RmluYWxseVN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJUcnlGaW5hbGx5U3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1ZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNXaGlsZVN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJXaGlsZVN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNXaXRoU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIldpdGhTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQmxvY2sgPSBSLndoZXJlRXEoe3R5cGU6IFwiQmxvY2tcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQ2F0Y2hDbGF1c2UgPSBSLndoZXJlRXEoe3R5cGU6IFwiQ2F0Y2hDbGF1c2VcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRGlyZWN0aXZlID0gUi53aGVyZUVxKHt0eXBlOiBcIkRpcmVjdGl2ZVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNGb3JtYWxQYXJhbWV0ZXJzID0gUi53aGVyZUVxKHt0eXBlOiBcIkZvcm1hbFBhcmFtZXRlcnNcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRnVuY3Rpb25Cb2R5ID0gUi53aGVyZUVxKHt0eXBlOiBcIkZ1bmN0aW9uQm9keVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNGdW5jdGlvbkRlY2xhcmF0aW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzU2NyaXB0ID0gUi53aGVyZUVxKHt0eXBlOiBcIlNjcmlwdFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTcHJlYWRFbGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlNwcmVhZEVsZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzU3VwZXIgPSBSLndoZXJlRXEoe3R5cGU6IFwiU3VwZXJcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzU3dpdGNoQ2FzZSA9IFIud2hlcmVFcSh7dHlwZTogXCJTd2l0Y2hDYXNlXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N3aXRjaERlZmF1bHQgPSBSLndoZXJlRXEoe3R5cGU6IFwiU3dpdGNoRGVmYXVsdFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNUZW1wbGF0ZUVsZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiVGVtcGxhdGVFbGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N5bnRheFRlbXBsYXRlID0gUi53aGVyZUVxKHt0eXBlOiBcIlN5bnRheFRlbXBsYXRlXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1ZhcmlhYmxlRGVjbGFyYXRpb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiVmFyaWFibGVEZWNsYXJhdGlvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNWYXJpYWJsZURlY2xhcmF0b3IgPSBSLndoZXJlRXEoe3R5cGU6IFwiVmFyaWFibGVEZWNsYXJhdG9yXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0VPRiA9IFIud2hlcmVFcSh7dHlwZTogXCJFT0ZcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzU3ludGF4RGVjbGFyYXRpb24gPSBSLmJvdGgoaXNWYXJpYWJsZURlY2xhcmF0aW9uLCBSLndoZXJlRXEoe2tpbmQ6IFwic3ludGF4XCJ9KSk7XG47XG5leHBvcnQgY29uc3QgaXNTeW50YXhyZWNEZWNsYXJhdGlvbiA9IFIuYm90aChpc1ZhcmlhYmxlRGVjbGFyYXRpb24sIFIud2hlcmVFcSh7a2luZDogXCJzeW50YXhyZWNcIn0pKTtcbjtcbmV4cG9ydCBjb25zdCBpc0Z1bmN0aW9uVGVybSA9IFIuZWl0aGVyKGlzRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXNGdW5jdGlvbkV4cHJlc3Npb24pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRnVuY3Rpb25XaXRoTmFtZSA9IFIuYW5kKGlzRnVuY3Rpb25UZXJtLCBSLmNvbXBsZW1lbnQoUi53aGVyZSh7bmFtZTogUi5pc05pbH0pKSk7XG47XG5leHBvcnQgY29uc3QgaXNQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvblwifSk7XG47XG5jb25zdCBmaWVsZHNJbl84NzAgPSBSLmNvbmQoW1tpc0JpbmRpbmdXaXRoRGVmYXVsdCwgUi5hbHdheXMoTGlzdC5vZihcImJpbmRpbmdcIiwgXCJpbml0XCIpKV0sIFtpc0JpbmRpbmdJZGVudGlmaWVyLCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiKSldLCBbaXNBcnJheUJpbmRpbmcsIFIuYWx3YXlzKExpc3Qub2YoXCJlbGVtZW50c1wiLCBcInJlc3RFbGVtZW50XCIpKV0sIFtpc09iamVjdEJpbmRpbmcsIFIuYWx3YXlzKExpc3Qub2YoXCJwcm9wZXJ0aWVzXCIpKV0sIFtpc0JpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXIsIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiaW5pdFwiKSldLCBbaXNCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eSwgUi5hbHdheXMoTGlzdC5vZihcIm5hbWVcIiwgXCJiaW5kaW5nXCIpKV0sIFtpc0NsYXNzRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcIm5hbWVcIiwgXCJzdXBlclwiLCBcImVsZW1lbnRzXCIpKV0sIFtpc0NsYXNzRGVjbGFyYXRpb24sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwic3VwZXJcIiwgXCJlbGVtZW50c1wiKSldLCBbaXNDbGFzc0VsZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJpc1N0YXRpY1wiLCBcIm1ldGhvZFwiKSldLCBbaXNNb2R1bGUsIFIuYWx3YXlzKExpc3Qub2YoXCJkaXJlY3RpdmVzXCIsIFwiaXRlbXNcIikpXSwgW2lzSW1wb3J0LCBSLmFsd2F5cyhMaXN0Lm9mKFwibW9kdWxlU3BlY2lmaWVyXCIsIFwiZGVmYXVsdEJpbmRpbmdcIiwgXCJuYW1lZEltcG9ydHNcIikpXSwgW2lzSW1wb3J0TmFtZXNwYWNlLCBSLmFsd2F5cyhMaXN0Lm9mKFwibW9kdWxlU3BlY2lmaWVyXCIsIFwiZGVmYXVsdEJpbmRpbmdcIiwgXCJuYW1lc3BhY2VCaW5kaW5nXCIpKV0sIFtpc0ltcG9ydFNwZWNpZmllciwgUi5hbHdheXMoTGlzdC5vZihcIm5hbWVcIiwgXCJiaW5kaW5nXCIpKV0sIFtpc0V4cG9ydEFsbEZyb20sIFIuYWx3YXlzKExpc3Qub2YoXCJtb2R1bGVTcGVjaWZpZXJcIikpXSwgW2lzRXhwb3J0RnJvbSwgUi5hbHdheXMoTGlzdC5vZihcIm5hbWVkRXhwb3J0c1wiLCBcIm1vZHVsZVNwZWNpZmllclwiKSldLCBbaXNFeHBvcnQsIFIuYWx3YXlzKExpc3Qub2YoXCJkZWNsYXJhdGlvblwiKSldLCBbaXNFeHBvcnREZWZhdWx0LCBSLmFsd2F5cyhMaXN0Lm9mKFwiYm9keVwiKSldLCBbaXNFeHBvcnRTcGVjaWZpZXIsIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiZXhwb3J0ZWROYW1lXCIpKV0sIFtpc01ldGhvZCwgUi5hbHdheXMoTGlzdC5vZihcImJvZHlcIiwgXCJpc0dlbmVyYXRvclwiLCBcInBhcmFtc1wiKSldLCBbaXNHZXR0ZXIsIFIuYWx3YXlzKExpc3Qub2YoXCJib2R5XCIpKV0sIFtpc1NldHRlciwgUi5hbHdheXMoTGlzdC5vZihcImJvZHlcIiwgXCJwYXJhbVwiKSldLCBbaXNEYXRhUHJvcGVydHksIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiZXhwcmVzc2lvblwiKSldLCBbaXNTaG9ydGhhbmRQcm9wZXJ0eSwgUi5hbHdheXMoTGlzdC5vZihcImV4cHJlc3Npb25cIikpXSwgW2lzU3RhdGljUHJvcGVydHlOYW1lLCBSLmFsd2F5cyhMaXN0Lm9mKFwidmFsdWVcIikpXSwgW2lzTGl0ZXJhbEJvb2xlYW5FeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwidmFsdWVcIikpXSwgW2lzTGl0ZXJhbEluZmluaXR5RXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdCgpKV0sIFtpc0xpdGVyYWxOdWxsRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdCgpKV0sIFtpc0xpdGVyYWxOdW1lcmljRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInZhbHVlXCIpKV0sIFtpc0xpdGVyYWxSZWdFeHBFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwicGF0dGVyblwiLCBcImZsYWdzXCIpKV0sIFtpc0xpdGVyYWxTdHJpbmdFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwidmFsdWVcIikpXSwgW2lzQXJyYXlFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwiZWxlbWVudHNcIikpXSwgW2lzQXJyb3dFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwicGFyYW1zXCIsIFwiYm9keVwiKSldLCBbaXNBc3NpZ25tZW50RXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcImJpbmRpbmdcIiwgXCJleHByZXNzaW9uXCIpKV0sIFtpc0JpbmFyeUV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJvcGVyYXRvclwiLCBcImxlZnRcIiwgXCJyaWdodFwiKSldLCBbaXNDYWxsRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcImNhbGxlZVwiLCBcImFyZ3VtZW50c1wiKSldLCBbaXNDb21wdXRlZEFzc2lnbm1lbnRFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwib3BlcmF0b3JcIiwgXCJiaW5kaW5nXCIsIFwiZXhwcmVzc2lvblwiKSldLCBbaXNDb21wdXRlZE1lbWJlckV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJvYmplY3RcIiwgXCJleHByZXNzaW9uXCIpKV0sIFtpc0NvbmRpdGlvbmFsRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInRlc3RcIiwgXCJjb25zZXF1ZW50XCIsIFwiYWx0ZXJuYXRlXCIpKV0sIFtpc0Z1bmN0aW9uRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcIm5hbWVcIiwgXCJpc0dlbmVyYXRvclwiLCBcInBhcmFtc1wiLCBcImJvZHlcIikpXSwgW2lzSWRlbnRpZmllckV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIpKV0sIFtpc05ld0V4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJjYWxsZWVcIiwgXCJhcmd1bWVudHNcIikpXSwgW2lzTmV3VGFyZ2V0RXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdCgpKV0sIFtpc09iamVjdEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJwcm9wZXJ0aWVzXCIpKV0sIFtpc1VuYXJ5RXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcIm9wZXJhdG9yXCIsIFwib3BlcmFuZFwiKSldLCBbaXNTdGF0aWNNZW1iZXJFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwib2JqZWN0XCIsIFwicHJvcGVydHlcIikpXSwgW2lzVGVtcGxhdGVFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwidGFnXCIsIFwiZWxlbWVudHNcIikpXSwgW2lzVGhpc0V4cHJlc3Npb24sIFIuYWx3YXlzKExpc3QoKSldLCBbaXNZaWVsZEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc1lpZWxkR2VuZXJhdG9yRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcImV4cHJlc3Npb25cIikpXSwgW2lzQmxvY2tTdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJibG9ja1wiKSldLCBbaXNCcmVha1N0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImxhYmVsXCIpKV0sIFtpc0NvbnRpbnVlU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwibGFiZWxcIikpXSwgW2lzRGVidWdnZXJTdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3QoKSldLCBbaXNEb1doaWxlU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwidGVzdFwiLCBcImJvZHlcIikpXSwgW2lzRW1wdHlTdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3QoKSldLCBbaXNFeHByZXNzaW9uU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiZXhwcmVzc2lvblwiKSldLCBbaXNGb3JJblN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImxlZnRcIiwgXCJyaWdodFwiLCBcImJvZHlcIikpXSwgW2lzRm9yT2ZTdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJib2R5XCIpKV0sIFtpc0ZvclN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImluaXRcIiwgXCJ0ZXN0XCIsIFwidXBkYXRlXCIsIFwiYm9keVwiKSldLCBbaXNMYWJlbGVkU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwibGFiZWxcIiwgXCJib2R5XCIpKV0sIFtpc1JldHVyblN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImV4cHJlc3Npb25cIikpXSwgW2lzU3dpdGNoU3RhdGVtZW50V2l0aERlZmF1bHQsIFIuYWx3YXlzKExpc3Qub2YoXCJkaXNjcmltaW5hbnRcIiwgXCJwcmVEZWZhdWx0Q2FzZXNcIiwgXCJkZWZhdWx0Q2FzZVwiLCBcInBvc3REZWZhdWx0Q2FzZXNcIikpXSwgW2lzVGhyb3dTdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc1RyeUNhdGNoU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiYm9keVwiLCBcImNhdGNoQ2xhdXNlXCIpKV0sIFtpc1RyeUZpbmFsbHlTdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJib2R5XCIsIFwiY2F0Y2hDbGF1c2VcIiwgXCJmaW5hbGl6ZXJcIikpXSwgW2lzVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImRlY2xhcmF0aW9uXCIpKV0sIFtpc1dpdGhTdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJvYmplY3RcIiwgXCJib2R5XCIpKV0sIFtpc0Jsb2NrLCBSLmFsd2F5cyhMaXN0Lm9mKFwic3RhdGVtZW50c1wiKSldLCBbaXNDYXRjaENsYXVzZSwgUi5hbHdheXMoTGlzdC5vZihcImJpbmRpbmdcIiwgXCJib2R5XCIpKV0sIFtpc0RpcmVjdGl2ZSwgUi5hbHdheXMoTGlzdC5vZihcInJhd1ZhbHVlXCIpKV0sIFtpc0Zvcm1hbFBhcmFtZXRlcnMsIFIuYWx3YXlzKExpc3Qub2YoXCJpdGVtc1wiLCBcInJlc3RcIikpXSwgW2lzRnVuY3Rpb25Cb2R5LCBSLmFsd2F5cyhMaXN0Lm9mKFwiZGlyZWN0aXZlc1wiLCBcInN0YXRlbWVudHNcIikpXSwgW2lzRnVuY3Rpb25EZWNsYXJhdGlvbiwgUi5hbHdheXMoTGlzdC5vZihcIm5hbWVcIiwgXCJpc0dlbmVyYXRvclwiLCBcInBhcmFtc1wiLCBcImJvZHlcIikpXSwgW2lzU2NyaXB0LCBSLmFsd2F5cyhMaXN0Lm9mKFwiZGlyZWN0aXZlc1wiLCBcInN0YXRlbWVudHNcIikpXSwgW2lzU3ByZWFkRWxlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImV4cHJlc3Npb25cIikpXSwgW2lzU3VwZXIsIFIuYWx3YXlzKExpc3QoKSldLCBbaXNTd2l0Y2hDYXNlLCBSLmFsd2F5cyhMaXN0Lm9mKFwidGVzdFwiLCBcImNvbnNlcXVlbnRcIikpXSwgW2lzU3dpdGNoRGVmYXVsdCwgUi5hbHdheXMoTGlzdC5vZihcImNvbnNlcXVlbnRcIikpXSwgW2lzVGVtcGxhdGVFbGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwicmF3VmFsdWVcIikpXSwgW2lzU3ludGF4VGVtcGxhdGUsIFIuYWx3YXlzKExpc3Qub2YoXCJ0ZW1wbGF0ZVwiKSldLCBbaXNWYXJpYWJsZURlY2xhcmF0aW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwia2luZFwiLCBcImRlY2xhcmF0b3JzXCIpKV0sIFtpc1ZhcmlhYmxlRGVjbGFyYXRvciwgUi5hbHdheXMoTGlzdC5vZihcImJpbmRpbmdcIiwgXCJpbml0XCIpKV0sIFtpc1BhcmVudGhlc2l6ZWRFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwiaW5uZXJcIikpXSwgW1IuVCwgdHlwZV84NzggPT4gYXNzZXJ0KGZhbHNlLCBcIk1pc3NpbmcgY2FzZSBpbiBmaWVsZHM6IFwiICsgdHlwZV84NzgudHlwZSldXSk7XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,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QSxDQUFOLENBQXAzSixDQUFQLENBQXJCIiwiZmlsZSI6InRlcm1zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMaXN0fSBmcm9tIFwiaW1tdXRhYmxlXCI7XG5pbXBvcnQge2Fzc2VydCwgZXhwZWN0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7bWl4aW59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgU3ludGF4IGZyb20gXCIuL3N5bnRheFwiO1xuaW1wb3J0ICAqIGFzIFIgZnJvbSBcInJhbWRhXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtIHtcbiAgY29uc3RydWN0b3IodHlwZV84ODcsIHByb3BzXzg4OCkge1xuICAgIHRoaXMudHlwZSA9IHR5cGVfODg3O1xuICAgIHRoaXMubG9jID0gbnVsbDtcbiAgICBmb3IgKGxldCBwcm9wIG9mIE9iamVjdC5rZXlzKHByb3BzXzg4OCkpIHtcbiAgICAgIHRoaXNbcHJvcF0gPSBwcm9wc184ODhbcHJvcF07XG4gICAgfVxuICB9XG4gIGFkZFNjb3BlKHNjb3BlXzg4OSwgYmluZGluZ3NfODkwLCBvcHRpb25zXzg5MSkge1xuICAgIGxldCBuZXh0Xzg5MiA9IHt9O1xuICAgIGZvciAobGV0IGZpZWxkIG9mIGZpZWxkc0luXzg4Nih0aGlzKSkge1xuICAgICAgaWYgKHRoaXNbZmllbGRdID09IG51bGwpIHtcbiAgICAgICAgbmV4dF84OTJbZmllbGRdID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXNbZmllbGRdLmFkZFNjb3BlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgbmV4dF84OTJbZmllbGRdID0gdGhpc1tmaWVsZF0uYWRkU2NvcGUoc2NvcGVfODg5LCBiaW5kaW5nc184OTAsIG9wdGlvbnNfODkxKTtcbiAgICAgIH0gZWxzZSBpZiAoTGlzdC5pc0xpc3QodGhpc1tmaWVsZF0pKSB7XG4gICAgICAgIG5leHRfODkyW2ZpZWxkXSA9IHRoaXNbZmllbGRdLm1hcChmXzg5MyA9PiBmXzg5My5hZGRTY29wZShzY29wZV84ODksIGJpbmRpbmdzXzg5MCwgb3B0aW9uc184OTEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRfODkyW2ZpZWxkXSA9IHRoaXNbZmllbGRdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0odGhpcy50eXBlLCBuZXh0Xzg5Mik7XG4gIH1cbiAgbGluZU51bWJlcigpIHtcbiAgICBmb3IgKGxldCBmaWVsZCBvZiBmaWVsZHNJbl84ODYodGhpcykpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpc1tmaWVsZF0gJiYgdGhpc1tmaWVsZF0ubGluZU51bWJlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2ZpZWxkXS5saW5lTnVtYmVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHNldExpbmVOdW1iZXIobGluZV84OTQpIHtcbiAgICBsZXQgbmV4dF84OTUgPSB7fTtcbiAgICBmb3IgKGxldCBmaWVsZCBvZiBmaWVsZHNJbl84ODYodGhpcykpIHtcbiAgICAgIGlmICh0aGlzW2ZpZWxkXSA9PSBudWxsKSB7XG4gICAgICAgIG5leHRfODk1W2ZpZWxkXSA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzW2ZpZWxkXS5zZXRMaW5lTnVtYmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgbmV4dF84OTVbZmllbGRdID0gdGhpc1tmaWVsZF0uc2V0TGluZU51bWJlcihsaW5lXzg5NCk7XG4gICAgICB9IGVsc2UgaWYgKExpc3QuaXNMaXN0KHRoaXNbZmllbGRdKSkge1xuICAgICAgICBuZXh0Xzg5NVtmaWVsZF0gPSB0aGlzW2ZpZWxkXS5tYXAoZl84OTYgPT4gZl84OTYuc2V0TGluZU51bWJlcihsaW5lXzg5NCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dF84OTVbZmllbGRdID0gdGhpc1tmaWVsZF07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGVybSh0aGlzLnR5cGUsIG5leHRfODk1KTtcbiAgfVxufVxuZXhwb3J0IGNvbnN0IGlzQmluZGluZ1dpdGhEZWZhdWx0ID0gUi53aGVyZUVxKHt0eXBlOiBcIkJpbmRpbmdXaXRoRGVmYXVsdFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNCaW5kaW5nSWRlbnRpZmllciA9IFIud2hlcmVFcSh7dHlwZTogXCJCaW5kaW5nSWRlbnRpZmllclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNBcnJheUJpbmRpbmcgPSBSLndoZXJlRXEoe3R5cGU6IFwiQXJyYXlCaW5kaW5nXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc09iamVjdEJpbmRpbmcgPSBSLndoZXJlRXEoe3R5cGU6IFwiT2JqZWN0QmluZGluZ1wifSk7XG47XG5leHBvcnQgY29uc3QgaXNCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyID0gUi53aGVyZUVxKHt0eXBlOiBcIkJpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXJcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQmluZGluZ1Byb3BlcnR5UHJvcGVydHkgPSBSLndoZXJlRXEoe3R5cGU6IFwiQmluZGluZ1Byb3BlcnR5SWRlbnRpZmllclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDbGFzc0V4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQ2xhc3NFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0NsYXNzRGVjbGFyYXRpb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQ2xhc3NEZWNsYXJhdGlvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDbGFzc0VsZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiQ2xhc3NFbGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc01vZHVsZSA9IFIud2hlcmVFcSh7dHlwZTogXCJNb2R1bGVcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzSW1wb3J0ID0gUi53aGVyZUVxKHt0eXBlOiBcIkltcG9ydFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNJbXBvcnROYW1lc3BhY2UgPSBSLndoZXJlRXEoe3R5cGU6IFwiSW1wb3J0TmFtZXNwYWNlXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0ltcG9ydFNwZWNpZmllciA9IFIud2hlcmVFcSh7dHlwZTogXCJJbXBvcnRTcGVjaWZpZXJcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRXhwb3J0QWxsRnJvbSA9IFIud2hlcmVFcSh7dHlwZTogXCJFeHBvcnRBbGxGcm9tXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0V4cG9ydEZyb20gPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwb3J0RnJvbVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFeHBvcnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwb3J0XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0V4cG9ydERlZmF1bHQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwb3J0RGVmYXVsdFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFeHBvcnRTcGVjaWZpZXIgPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwb3J0U3BlY2lmaWVyXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc01ldGhvZCA9IFIud2hlcmVFcSh7dHlwZTogXCJNZXRob2RcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzR2V0dGVyID0gUi53aGVyZUVxKHt0eXBlOiBcIkdldHRlclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTZXR0ZXIgPSBSLndoZXJlRXEoe3R5cGU6IFwiU2V0dGVyXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0RhdGFQcm9wZXJ0eSA9IFIud2hlcmVFcSh7dHlwZTogXCJEYXRhUHJvcGVydHlcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzU2hvcnRoYW5kUHJvcGVydHkgPSBSLndoZXJlRXEoe3R5cGU6IFwiU2hvcnRoYW5kUHJvcGVydHlcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQ29tcHV0ZWRQcm9wZXJ0eU5hbWUgPSBSLndoZXJlRXEoe3R5cGU6IFwiQ29tcHV0ZWRQcm9wZXJ0eU5hbWVcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzU3RhdGljUHJvcGVydHlOYW1lID0gUi53aGVyZUVxKHt0eXBlOiBcIlN0YXRpY1Byb3BlcnR5TmFtZVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNMaXRlcmFsQm9vbGVhbkV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbEJvb2xlYW5FeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0xpdGVyYWxJbmZpbml0eUV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbEluZmluaXR5RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNMaXRlcmFsTnVsbEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbE51bGxFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0xpdGVyYWxOdW1lcmljRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJMaXRlcmFsTnVtZXJpY0V4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzTGl0ZXJhbFJlZ0V4cEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbFJlZ0V4cEV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQXJyYXlFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkFycmF5RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNBcnJvd0V4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQXJyb3dFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Fzc2lnbm1lbnRFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0JpbmFyeUV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQmluYXJ5RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDYWxsRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJDYWxsRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDb21wdXRlZEFzc2lnbm1lbnRFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkNvbXB1dGVkQXNzaWdubWVudEV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkNvbXB1dGVkTWVtYmVyRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDb25kaXRpb25hbEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Z1bmN0aW9uRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJGdW5jdGlvbkV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzSWRlbnRpZmllckV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzTmV3RXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJOZXdFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc05ld1RhcmdldEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTmV3VGFyZ2V0RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNPYmplY3RFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIk9iamVjdEV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVW5hcnlFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlVuYXJ5RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTdGF0aWNNZW1iZXJFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlN0YXRpY01lbWJlckV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVGVtcGxhdGVFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlRlbXBsYXRlRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNUaGlzRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJUaGlzRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNVcGRhdGVFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlVwZGF0ZUV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzWWllbGRFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIllpZWxkRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNZaWVsZEdlbmVyYXRvckV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiWWllbGRHZW5lcmF0b3JFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Jsb2NrU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkJsb2NrU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0JyZWFrU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkJyZWFrU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0NvbnRpbnVlU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkNvbnRpbnVlU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0RlYnVnZ2VyU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkRlYnVnZ2VyU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0RvV2hpbGVTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRG9XaGlsZVN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFbXB0eVN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJFbXB0eVN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFeHByZXNzaW9uU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRm9ySW5TdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRm9ySW5TdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRm9yT2ZTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRm9yT2ZTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRm9yU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkZvclN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNJZlN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJJZlN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNMYWJlbGVkU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkxhYmVsZWRTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzUmV0dXJuU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlJldHVyblN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTd2l0Y2hTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiU3dpdGNoU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N3aXRjaFN0YXRlbWVudFdpdGhEZWZhdWx0ID0gUi53aGVyZUVxKHt0eXBlOiBcIlN3aXRjaFN0YXRlbWVudFdpdGhEZWZhdWx0XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1Rocm93U3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlRocm93U3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1RyeUNhdGNoU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlRyeUNhdGNoU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1RyeUZpbmFsbHlTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiVHJ5RmluYWxseVN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNWYXJpYWJsZURlY2xhcmF0aW9uU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzV2hpbGVTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiV2hpbGVTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzV2l0aFN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJXaXRoU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Jsb2NrID0gUi53aGVyZUVxKHt0eXBlOiBcIkJsb2NrXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0NhdGNoQ2xhdXNlID0gUi53aGVyZUVxKHt0eXBlOiBcIkNhdGNoQ2xhdXNlXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0RpcmVjdGl2ZSA9IFIud2hlcmVFcSh7dHlwZTogXCJEaXJlY3RpdmVcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRm9ybWFsUGFyYW1ldGVycyA9IFIud2hlcmVFcSh7dHlwZTogXCJGb3JtYWxQYXJhbWV0ZXJzXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Z1bmN0aW9uQm9keSA9IFIud2hlcmVFcSh7dHlwZTogXCJGdW5jdGlvbkJvZHlcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRnVuY3Rpb25EZWNsYXJhdGlvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1NjcmlwdCA9IFIud2hlcmVFcSh7dHlwZTogXCJTY3JpcHRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzU3ByZWFkRWxlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJTcHJlYWRFbGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N1cGVyID0gUi53aGVyZUVxKHt0eXBlOiBcIlN1cGVyXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N3aXRjaENhc2UgPSBSLndoZXJlRXEoe3R5cGU6IFwiU3dpdGNoQ2FzZVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTd2l0Y2hEZWZhdWx0ID0gUi53aGVyZUVxKHt0eXBlOiBcIlN3aXRjaERlZmF1bHRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVGVtcGxhdGVFbGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlRlbXBsYXRlRWxlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTeW50YXhUZW1wbGF0ZSA9IFIud2hlcmVFcSh7dHlwZTogXCJTeW50YXhUZW1wbGF0ZVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNWYXJpYWJsZURlY2xhcmF0aW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVmFyaWFibGVEZWNsYXJhdG9yID0gUi53aGVyZUVxKHt0eXBlOiBcIlZhcmlhYmxlRGVjbGFyYXRvclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFT0YgPSBSLndoZXJlRXEoe3R5cGU6IFwiRU9GXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N5bnRheERlY2xhcmF0aW9uID0gUi5ib3RoKGlzVmFyaWFibGVEZWNsYXJhdGlvbiwgUi53aGVyZUVxKHtraW5kOiBcInN5bnRheFwifSkpO1xuO1xuZXhwb3J0IGNvbnN0IGlzU3ludGF4cmVjRGVjbGFyYXRpb24gPSBSLmJvdGgoaXNWYXJpYWJsZURlY2xhcmF0aW9uLCBSLndoZXJlRXEoe2tpbmQ6IFwic3ludGF4cmVjXCJ9KSk7XG47XG5leHBvcnQgY29uc3QgaXNGdW5jdGlvblRlcm0gPSBSLmVpdGhlcihpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIGlzRnVuY3Rpb25FeHByZXNzaW9uKTtcbjtcbmV4cG9ydCBjb25zdCBpc0Z1bmN0aW9uV2l0aE5hbWUgPSBSLmFuZChpc0Z1bmN0aW9uVGVybSwgUi5jb21wbGVtZW50KFIud2hlcmUoe25hbWU6IFIuaXNOaWx9KSkpO1xuO1xuZXhwb3J0IGNvbnN0IGlzUGFyZW50aGVzaXplZEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIn0pO1xuO1xuY29uc3QgZmllbGRzSW5fODg2ID0gUi5jb25kKFtbaXNCaW5kaW5nV2l0aERlZmF1bHQsIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiaW5pdFwiKSldLCBbaXNCaW5kaW5nSWRlbnRpZmllciwgUi5hbHdheXMoTGlzdC5vZihcIm5hbWVcIikpXSwgW2lzQXJyYXlCaW5kaW5nLCBSLmFsd2F5cyhMaXN0Lm9mKFwiZWxlbWVudHNcIiwgXCJyZXN0RWxlbWVudFwiKSldLCBbaXNPYmplY3RCaW5kaW5nLCBSLmFsd2F5cyhMaXN0Lm9mKFwicHJvcGVydGllc1wiKSldLCBbaXNCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyLCBSLmFsd2F5cyhMaXN0Lm9mKFwiYmluZGluZ1wiLCBcImluaXRcIikpXSwgW2lzQmluZGluZ1Byb3BlcnR5UHJvcGVydHksIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiYmluZGluZ1wiKSldLCBbaXNDbGFzc0V4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwic3VwZXJcIiwgXCJlbGVtZW50c1wiKSldLCBbaXNDbGFzc0RlY2xhcmF0aW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiLCBcInN1cGVyXCIsIFwiZWxlbWVudHNcIikpXSwgW2lzQ2xhc3NFbGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiaXNTdGF0aWNcIiwgXCJtZXRob2RcIikpXSwgW2lzTW9kdWxlLCBSLmFsd2F5cyhMaXN0Lm9mKFwiZGlyZWN0aXZlc1wiLCBcIml0ZW1zXCIpKV0sIFtpc0ltcG9ydCwgUi5hbHdheXMoTGlzdC5vZihcIm1vZHVsZVNwZWNpZmllclwiLCBcImRlZmF1bHRCaW5kaW5nXCIsIFwibmFtZWRJbXBvcnRzXCIpKV0sIFtpc0ltcG9ydE5hbWVzcGFjZSwgUi5hbHdheXMoTGlzdC5vZihcIm1vZHVsZVNwZWNpZmllclwiLCBcImRlZmF1bHRCaW5kaW5nXCIsIFwibmFtZXNwYWNlQmluZGluZ1wiKSldLCBbaXNJbXBvcnRTcGVjaWZpZXIsIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiYmluZGluZ1wiKSldLCBbaXNFeHBvcnRBbGxGcm9tLCBSLmFsd2F5cyhMaXN0Lm9mKFwibW9kdWxlU3BlY2lmaWVyXCIpKV0sIFtpc0V4cG9ydEZyb20sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lZEV4cG9ydHNcIiwgXCJtb2R1bGVTcGVjaWZpZXJcIikpXSwgW2lzRXhwb3J0LCBSLmFsd2F5cyhMaXN0Lm9mKFwiZGVjbGFyYXRpb25cIikpXSwgW2lzRXhwb3J0RGVmYXVsdCwgUi5hbHdheXMoTGlzdC5vZihcImJvZHlcIikpXSwgW2lzRXhwb3J0U3BlY2lmaWVyLCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiLCBcImV4cG9ydGVkTmFtZVwiKSldLCBbaXNNZXRob2QsIFIuYWx3YXlzKExpc3Qub2YoXCJib2R5XCIsIFwiaXNHZW5lcmF0b3JcIiwgXCJwYXJhbXNcIikpXSwgW2lzR2V0dGVyLCBSLmFsd2F5cyhMaXN0Lm9mKFwiYm9keVwiKSldLCBbaXNTZXR0ZXIsIFIuYWx3YXlzKExpc3Qub2YoXCJib2R5XCIsIFwicGFyYW1cIikpXSwgW2lzRGF0YVByb3BlcnR5LCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiLCBcImV4cHJlc3Npb25cIikpXSwgW2lzU2hvcnRoYW5kUHJvcGVydHksIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc1N0YXRpY1Byb3BlcnR5TmFtZSwgUi5hbHdheXMoTGlzdC5vZihcInZhbHVlXCIpKV0sIFtpc0xpdGVyYWxCb29sZWFuRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInZhbHVlXCIpKV0sIFtpc0xpdGVyYWxJbmZpbml0eUV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3QoKSldLCBbaXNMaXRlcmFsTnVsbEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3QoKSldLCBbaXNMaXRlcmFsTnVtZXJpY0V4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJ2YWx1ZVwiKSldLCBbaXNMaXRlcmFsUmVnRXhwRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInBhdHRlcm5cIiwgXCJmbGFnc1wiKSldLCBbaXNMaXRlcmFsU3RyaW5nRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInZhbHVlXCIpKV0sIFtpc0FycmF5RXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcImVsZW1lbnRzXCIpKV0sIFtpc0Fycm93RXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInBhcmFtc1wiLCBcImJvZHlcIikpXSwgW2lzQXNzaWdubWVudEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiZXhwcmVzc2lvblwiKSldLCBbaXNCaW5hcnlFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwib3BlcmF0b3JcIiwgXCJsZWZ0XCIsIFwicmlnaHRcIikpXSwgW2lzQ2FsbEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJjYWxsZWVcIiwgXCJhcmd1bWVudHNcIikpXSwgW2lzQ29tcHV0ZWRBc3NpZ25tZW50RXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcIm9wZXJhdG9yXCIsIFwiYmluZGluZ1wiLCBcImV4cHJlc3Npb25cIikpXSwgW2lzQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwib2JqZWN0XCIsIFwiZXhwcmVzc2lvblwiKSldLCBbaXNDb25kaXRpb25hbEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJ0ZXN0XCIsIFwiY29uc2VxdWVudFwiLCBcImFsdGVybmF0ZVwiKSldLCBbaXNGdW5jdGlvbkV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiaXNHZW5lcmF0b3JcIiwgXCJwYXJhbXNcIiwgXCJib2R5XCIpKV0sIFtpc0lkZW50aWZpZXJFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiKSldLCBbaXNOZXdFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwiY2FsbGVlXCIsIFwiYXJndW1lbnRzXCIpKV0sIFtpc05ld1RhcmdldEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3QoKSldLCBbaXNPYmplY3RFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwicHJvcGVydGllc1wiKSldLCBbaXNVbmFyeUV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJvcGVyYXRvclwiLCBcIm9wZXJhbmRcIikpXSwgW2lzU3RhdGljTWVtYmVyRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcIm9iamVjdFwiLCBcInByb3BlcnR5XCIpKV0sIFtpc1RlbXBsYXRlRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInRhZ1wiLCBcImVsZW1lbnRzXCIpKV0sIFtpc1RoaXNFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0KCkpXSwgW2lzWWllbGRFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwiZXhwcmVzc2lvblwiKSldLCBbaXNZaWVsZEdlbmVyYXRvckV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc0Jsb2NrU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiYmxvY2tcIikpXSwgW2lzQnJlYWtTdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJsYWJlbFwiKSldLCBbaXNDb250aW51ZVN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImxhYmVsXCIpKV0sIFtpc0RlYnVnZ2VyU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0KCkpXSwgW2lzRG9XaGlsZVN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcInRlc3RcIiwgXCJib2R5XCIpKV0sIFtpc0VtcHR5U3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0KCkpXSwgW2lzRXhwcmVzc2lvblN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImV4cHJlc3Npb25cIikpXSwgW2lzRm9ySW5TdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJib2R5XCIpKV0sIFtpc0Zvck9mU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwibGVmdFwiLCBcInJpZ2h0XCIsIFwiYm9keVwiKSldLCBbaXNGb3JTdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJpbml0XCIsIFwidGVzdFwiLCBcInVwZGF0ZVwiLCBcImJvZHlcIikpXSwgW2lzTGFiZWxlZFN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImxhYmVsXCIsIFwiYm9keVwiKSldLCBbaXNSZXR1cm5TdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc1N3aXRjaFN0YXRlbWVudFdpdGhEZWZhdWx0LCBSLmFsd2F5cyhMaXN0Lm9mKFwiZGlzY3JpbWluYW50XCIsIFwicHJlRGVmYXVsdENhc2VzXCIsIFwiZGVmYXVsdENhc2VcIiwgXCJwb3N0RGVmYXVsdENhc2VzXCIpKV0sIFtpc1Rocm93U3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiZXhwcmVzc2lvblwiKSldLCBbaXNUcnlDYXRjaFN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImJvZHlcIiwgXCJjYXRjaENsYXVzZVwiKSldLCBbaXNUcnlGaW5hbGx5U3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiYm9keVwiLCBcImNhdGNoQ2xhdXNlXCIsIFwiZmluYWxpemVyXCIpKV0sIFtpc1ZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJkZWNsYXJhdGlvblwiKSldLCBbaXNXaXRoU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwib2JqZWN0XCIsIFwiYm9keVwiKSldLCBbaXNCbG9jaywgUi5hbHdheXMoTGlzdC5vZihcInN0YXRlbWVudHNcIikpXSwgW2lzQ2F0Y2hDbGF1c2UsIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiYm9keVwiKSldLCBbaXNEaXJlY3RpdmUsIFIuYWx3YXlzKExpc3Qub2YoXCJyYXdWYWx1ZVwiKSldLCBbaXNGb3JtYWxQYXJhbWV0ZXJzLCBSLmFsd2F5cyhMaXN0Lm9mKFwiaXRlbXNcIiwgXCJyZXN0XCIpKV0sIFtpc0Z1bmN0aW9uQm9keSwgUi5hbHdheXMoTGlzdC5vZihcImRpcmVjdGl2ZXNcIiwgXCJzdGF0ZW1lbnRzXCIpKV0sIFtpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiaXNHZW5lcmF0b3JcIiwgXCJwYXJhbXNcIiwgXCJib2R5XCIpKV0sIFtpc1NjcmlwdCwgUi5hbHdheXMoTGlzdC5vZihcImRpcmVjdGl2ZXNcIiwgXCJzdGF0ZW1lbnRzXCIpKV0sIFtpc1NwcmVhZEVsZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc1N1cGVyLCBSLmFsd2F5cyhMaXN0KCkpXSwgW2lzU3dpdGNoQ2FzZSwgUi5hbHdheXMoTGlzdC5vZihcInRlc3RcIiwgXCJjb25zZXF1ZW50XCIpKV0sIFtpc1N3aXRjaERlZmF1bHQsIFIuYWx3YXlzKExpc3Qub2YoXCJjb25zZXF1ZW50XCIpKV0sIFtpc1RlbXBsYXRlRWxlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcInJhd1ZhbHVlXCIpKV0sIFtpc1N5bnRheFRlbXBsYXRlLCBSLmFsd2F5cyhMaXN0Lm9mKFwidGVtcGxhdGVcIikpXSwgW2lzVmFyaWFibGVEZWNsYXJhdGlvbiwgUi5hbHdheXMoTGlzdC5vZihcImtpbmRcIiwgXCJkZWNsYXJhdG9yc1wiKSldLCBbaXNWYXJpYWJsZURlY2xhcmF0b3IsIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiaW5pdFwiKSldLCBbaXNQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcImlubmVyXCIpKV0sIFtSLlQsIHR5cGVfODk3ID0+IGFzc2VydChmYWxzZSwgXCJNaXNzaW5nIGNhc2UgaW4gZmllbGRzOiBcIiArIHR5cGVfODk3LnR5cGUpXV0pO1xuIl19 \ No newline at end of file diff --git a/dist/token-expander.js b/dist/token-expander.js index d8cb12e1..aa430f5e 100644 --- a/dist/token-expander.js +++ b/dist/token-expander.js @@ -54,166 +54,166 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var Just_879 = _ramdaFantasy.Maybe.Just; -var Nothing_880 = _ramdaFantasy.Maybe.Nothing; -var registerSyntax_881 = function registerSyntax_881(stx_886, context_887) { - var newBinding_888 = (0, _symbol.gensym)(stx_886.val()); - context_887.env.set(newBinding_888.toString(), new _transforms.VarBindingTransform(stx_886)); - context_887.bindings.add(stx_886, { binding: newBinding_888, phase: 0, skipDup: true }); +var Just_898 = _ramdaFantasy.Maybe.Just; +var Nothing_899 = _ramdaFantasy.Maybe.Nothing; +var registerSyntax_900 = function registerSyntax_900(stx_905, context_906) { + var newBinding_907 = (0, _symbol.gensym)(stx_905.val()); + context_906.env.set(newBinding_907.toString(), new _transforms.VarBindingTransform(stx_905)); + context_906.bindings.add(stx_905, { binding: newBinding_907, phase: 0, skipDup: true }); }; -var registerBindings_882 = _.cond([[_terms.isBindingIdentifier, function (_ref, context_889) { +var registerBindings_901 = _.cond([[_terms.isBindingIdentifier, function (_ref, context_908) { var name = _ref.name; - registerSyntax_881(name, context_889); -}], [_terms.isBindingPropertyIdentifier, function (_ref2, context_890) { + registerSyntax_900(name, context_908); +}], [_terms.isBindingPropertyIdentifier, function (_ref2, context_909) { var binding = _ref2.binding; - registerBindings_882(binding, context_890); -}], [_terms.isBindingPropertyProperty, function (_ref3, context_891) { + registerBindings_901(binding, context_909); +}], [_terms.isBindingPropertyProperty, function (_ref3, context_910) { var binding = _ref3.binding; - registerBindings_882(binding, context_891); -}], [_terms.isArrayBinding, function (_ref4, context_892) { + registerBindings_901(binding, context_910); +}], [_terms.isArrayBinding, function (_ref4, context_911) { var elements = _ref4.elements; var restElement = _ref4.restElement; if (restElement != null) { - registerBindings_882(restElement, context_892); + registerBindings_901(restElement, context_911); } - elements.forEach(function (el_893) { - if (el_893 != null) { - registerBindings_882(el_893, context_892); + elements.forEach(function (el_912) { + if (el_912 != null) { + registerBindings_901(el_912, context_911); } }); -}], [_terms.isObjectBinding, function (_ref5, context_894) { +}], [_terms.isObjectBinding, function (_ref5, context_913) { var properties = _ref5.properties; -}], [_.T, function (binding_895) { - return (0, _errors.assert)(false, "not implemented yet for: " + binding_895.type); +}], [_.T, function (binding_914) { + return (0, _errors.assert)(false, "not implemented yet for: " + binding_914.type); }]]); -var removeScope_883 = _.cond([[_terms.isBindingIdentifier, function (_ref6, scope_896) { +var removeScope_902 = _.cond([[_terms.isBindingIdentifier, function (_ref6, scope_915) { var name = _ref6.name; - return new _terms2.default("BindingIdentifier", { name: name.removeScope(scope_896) }); -}], [_terms.isArrayBinding, function (_ref7, scope_897) { + return new _terms2.default("BindingIdentifier", { name: name.removeScope(scope_915) }); +}], [_terms.isArrayBinding, function (_ref7, scope_916) { var elements = _ref7.elements; var restElement = _ref7.restElement; - return new _terms2.default("ArrayBinding", { elements: elements.map(function (el_898) { - return el_898 == null ? null : removeScope_883(el_898, scope_897); - }), restElement: restElement == null ? null : removeScope_883(restElement, scope_897) }); -}], [_terms.isBindingPropertyIdentifier, function (_ref8, scope_899) { + return new _terms2.default("ArrayBinding", { elements: elements.map(function (el_917) { + return el_917 == null ? null : removeScope_902(el_917, scope_916); + }), restElement: restElement == null ? null : removeScope_902(restElement, scope_916) }); +}], [_terms.isBindingPropertyIdentifier, function (_ref8, scope_918) { var binding = _ref8.binding; var init = _ref8.init; - return new _terms2.default("BindingPropertyIdentifier", { binding: removeScope_883(binding, scope_899), init: init }); -}], [_terms.isBindingPropertyProperty, function (_ref9, scope_900) { + return new _terms2.default("BindingPropertyIdentifier", { binding: removeScope_902(binding, scope_918), init: init }); +}], [_terms.isBindingPropertyProperty, function (_ref9, scope_919) { var binding = _ref9.binding; var name = _ref9.name; - return new _terms2.default("BindingPropertyProperty", { binding: removeScope_883(binding, scope_900), name: name }); -}], [_terms.isObjectBinding, function (_ref10, scope_901) { + return new _terms2.default("BindingPropertyProperty", { binding: removeScope_902(binding, scope_919), name: name }); +}], [_terms.isObjectBinding, function (_ref10, scope_920) { var properties = _ref10.properties; - return new _terms2.default("ObjectBinding", { properties: properties.map(function (prop_902) { - return removeScope_883(prop_902, scope_901); + return new _terms2.default("ObjectBinding", { properties: properties.map(function (prop_921) { + return removeScope_902(prop_921, scope_920); }) }); -}], [_.T, function (binding_903) { - return (0, _errors.assert)(false, "not implemented yet for: " + binding_903.type); +}], [_.T, function (binding_922) { + return (0, _errors.assert)(false, "not implemented yet for: " + binding_922.type); }]]); -function findNameInExports_884(name_904, exp_905) { - var foundNames_906 = exp_905.reduce(function (acc_907, e_908) { - if (e_908.declaration) { - return acc_907.concat(e_908.declaration.declarators.reduce(function (acc_909, decl_910) { - if (decl_910.binding.name.val() === name_904.val()) { - return acc_909.concat(decl_910.binding.name); +function findNameInExports_903(name_923, exp_924) { + var foundNames_925 = exp_924.reduce(function (acc_926, e_927) { + if (e_927.declaration) { + return acc_926.concat(e_927.declaration.declarators.reduce(function (acc_928, decl_929) { + if (decl_929.binding.name.val() === name_923.val()) { + return acc_928.concat(decl_929.binding.name); } - return acc_909; + return acc_928; }, (0, _immutable.List)())); } - return acc_907; + return acc_926; }, (0, _immutable.List)()); - (0, _errors.assert)(foundNames_906.size <= 1, "expecting no more than 1 matching name in exports"); - return foundNames_906.get(0); + (0, _errors.assert)(foundNames_925.size <= 1, "expecting no more than 1 matching name in exports"); + return foundNames_925.get(0); } -function bindImports_885(impTerm_911, exModule_912, context_913) { - var names_914 = []; - impTerm_911.namedImports.forEach(function (specifier_915) { - var name_916 = specifier_915.binding.name; - var exportName_917 = findNameInExports_884(name_916, exModule_912.exportEntries); - if (exportName_917 != null) { - var newBinding = (0, _symbol.gensym)(name_916.val()); - context_913.bindings.addForward(name_916, exportName_917, newBinding); - if (context_913.store.has(exportName_917.resolve())) { - names_914.push(name_916); +function bindImports_904(impTerm_930, exModule_931, context_932) { + var names_933 = []; + impTerm_930.namedImports.forEach(function (specifier_934) { + var name_935 = specifier_934.binding.name; + var exportName_936 = findNameInExports_903(name_935, exModule_931.exportEntries); + if (exportName_936 != null) { + var newBinding = (0, _symbol.gensym)(name_935.val()); + context_932.bindings.addForward(name_935, exportName_936, newBinding); + if (context_932.store.has(exportName_936.resolve())) { + names_933.push(name_935); } } }); - return (0, _immutable.List)(names_914); + return (0, _immutable.List)(names_933); } var TokenExpander = function () { - function TokenExpander(context_918) { + function TokenExpander(context_937) { _classCallCheck(this, TokenExpander); - this.context = context_918; + this.context = context_937; } _createClass(TokenExpander, [{ key: "expand", - value: function expand(stxl_919) { - var result_920 = (0, _immutable.List)(); - if (stxl_919.size === 0) { - return result_920; + value: function expand(stxl_938) { + var result_939 = (0, _immutable.List)(); + if (stxl_938.size === 0) { + return result_939; } - var prev_921 = (0, _immutable.List)(); - var enf_922 = new _enforester.Enforester(stxl_919, prev_921, this.context); - var self_923 = this; - while (!enf_922.done) { - var term = _.pipe(_.bind(enf_922.enforest, enf_922), _.cond([[_terms.isVariableDeclarationStatement, function (term_924) { - term_924.declaration.declarators = term_924.declaration.declarators.map(function (decl_925) { - return new _terms2.default("VariableDeclarator", { binding: removeScope_883(decl_925.binding, self_923.context.useScope), init: decl_925.init }); + var prev_940 = (0, _immutable.List)(); + var enf_941 = new _enforester.Enforester(stxl_938, prev_940, this.context); + var self_942 = this; + while (!enf_941.done) { + var term = _.pipe(_.bind(enf_941.enforest, enf_941), _.cond([[_terms.isVariableDeclarationStatement, function (term_943) { + term_943.declaration.declarators = term_943.declaration.declarators.map(function (decl_944) { + return new _terms2.default("VariableDeclarator", { binding: removeScope_902(decl_944.binding, self_942.context.useScope), init: decl_944.init }); }); - if ((0, _terms.isSyntaxDeclaration)(term_924.declaration)) { + if ((0, _terms.isSyntaxDeclaration)(term_943.declaration)) { (function () { var scope = (0, _scope.freshScope)("nonrec"); - term_924.declaration.declarators.forEach(function (decl_926) { - var name_927 = decl_926.binding.name; - var nameAdded_928 = name_927.addScope(scope); - var nameRemoved_929 = name_927.removeScope(self_923.context.currentScope[self_923.context.currentScope.length - 1]); - var newBinding_930 = (0, _symbol.gensym)(name_927.val()); - self_923.context.bindings.addForward(nameAdded_928, nameRemoved_929, newBinding_930); - decl_926.init = decl_926.init.addScope(scope, self_923.context.bindings); + term_943.declaration.declarators.forEach(function (decl_945) { + var name_946 = decl_945.binding.name; + var nameAdded_947 = name_946.addScope(scope); + var nameRemoved_948 = name_946.removeScope(self_942.context.currentScope[self_942.context.currentScope.length - 1]); + var newBinding_949 = (0, _symbol.gensym)(name_946.val()); + self_942.context.bindings.addForward(nameAdded_947, nameRemoved_948, newBinding_949); + decl_945.init = decl_945.init.addScope(scope, self_942.context.bindings); }); })(); } - if ((0, _terms.isSyntaxDeclaration)(term_924.declaration) || (0, _terms.isSyntaxrecDeclaration)(term_924.declaration)) { - term_924.declaration.declarators.forEach(function (decl_931) { - registerBindings_882(decl_931.binding, self_923.context); - (0, _loadSyntax2.default)(decl_931, self_923.context, self_923.context.env); + if ((0, _terms.isSyntaxDeclaration)(term_943.declaration) || (0, _terms.isSyntaxrecDeclaration)(term_943.declaration)) { + term_943.declaration.declarators.forEach(function (decl_950) { + registerBindings_901(decl_950.binding, self_942.context); + (0, _loadSyntax2.default)(decl_950, self_942.context, self_942.context.env); }); - return Nothing_880(); + return Nothing_899(); } else { - term_924.declaration.declarators.forEach(function (decl_932) { - return registerBindings_882(decl_932.binding, self_923.context); + term_943.declaration.declarators.forEach(function (decl_951) { + return registerBindings_901(decl_951.binding, self_942.context); }); } - return Just_879(term_924); - }], [_terms.isFunctionWithName, function (term_933) { - term_933.name = removeScope_883(term_933.name, self_923.context.useScope); - registerBindings_882(term_933.name, self_923.context); - return Just_879(term_933); - }], [_terms.isImport, function (term_934) { - var mod_935 = self_923.context.modules.load(term_934.moduleSpecifier.val(), self_923.context); - if (term_934.forSyntax) { + return Just_898(term_943); + }], [_terms.isFunctionWithName, function (term_952) { + term_952.name = removeScope_902(term_952.name, self_942.context.useScope); + registerBindings_901(term_952.name, self_942.context); + return Just_898(term_952); + }], [_terms.isImport, function (term_953) { + var mod_954 = self_942.context.modules.load(term_953.moduleSpecifier.val(), self_942.context); + if (term_953.forSyntax) { console.log("import for syntax is not implemented yet"); } else { - mod_935.visit(self_923.context); + mod_954.visit(self_942.context); } - var boundNames_936 = bindImports_885(term_934, mod_935, self_923.context); - if (boundNames_936.size === 0) { - return Just_879(term_934); + var boundNames_955 = bindImports_904(term_953, mod_954, self_942.context); + if (boundNames_955.size === 0) { + return Just_898(term_953); } - return Nothing_880(); - }], [_terms.isEOF, Nothing_880], [_.T, Just_879]]), _ramdaFantasy.Maybe.maybe((0, _immutable.List)(), _.identity))(); - result_920 = result_920.concat(term); + return Nothing_899(); + }], [_terms.isEOF, Nothing_899], [_.T, Just_898]]), _ramdaFantasy.Maybe.maybe((0, _immutable.List)(), _.identity))(); + result_939 = result_939.concat(term); } - return result_920; + return result_939; } }]); @@ -221,4 +221,4 @@ var TokenExpander = function () { }(); exports.default = TokenExpander; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3Rva2VuLWV4cGFuZGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7SUFBYSxDOztBQUNiOzs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7QUFDQSxJQUFNLFdBQVcsb0JBQU0sSUFBdkI7QUFDQSxJQUFNLGNBQWMsb0JBQU0sT0FBMUI7QUFDQSxJQUFNLHFCQUFxQixTQUFyQixrQkFBcUIsQ0FBQyxPQUFELEVBQVUsV0FBVixFQUEwQjtBQUNuRCxNQUFJLGlCQUFpQixvQkFBTyxRQUFRLEdBQVIsRUFBUCxDQUFyQjtBQUNBLGNBQVksR0FBWixDQUFnQixHQUFoQixDQUFvQixlQUFlLFFBQWYsRUFBcEIsRUFBK0Msb0NBQXdCLE9BQXhCLENBQS9DO0FBQ0EsY0FBWSxRQUFaLENBQXFCLEdBQXJCLENBQXlCLE9BQXpCLEVBQWtDLEVBQUMsU0FBUyxjQUFWLEVBQTBCLE9BQU8sQ0FBakMsRUFBb0MsU0FBUyxJQUE3QyxFQUFsQztBQUNELENBSkQ7QUFLQSxJQUFJLHVCQUF1QixFQUFFLElBQUYsQ0FBTyxDQUFDLDZCQUFzQixnQkFBUyxXQUFULEVBQXlCO0FBQUEsTUFBdkIsSUFBdUIsUUFBdkIsSUFBdUI7O0FBQ2hGLHFCQUFtQixJQUFuQixFQUF5QixXQUF6QjtBQUNELENBRmtDLENBQUQsRUFFOUIscUNBQThCLGlCQUFZLFdBQVosRUFBNEI7QUFBQSxNQUExQixPQUEwQixTQUExQixPQUEwQjs7QUFDNUQsdUJBQXFCLE9BQXJCLEVBQThCLFdBQTlCO0FBQ0QsQ0FGRyxDQUY4QixFQUk5QixtQ0FBNEIsaUJBQVksV0FBWixFQUE0QjtBQUFBLE1BQTFCLE9BQTBCLFNBQTFCLE9BQTBCOztBQUMxRCx1QkFBcUIsT0FBckIsRUFBOEIsV0FBOUI7QUFDRCxDQUZHLENBSjhCLEVBTTlCLHdCQUFpQixp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QUE4QixTQUFTLGVBQVQsQ0FBeUIsR0FBekIsRUFBOUIsRUFBOEQsU0FBUyxPQUF2RSxDQUFkO0FBQ0EsY0FBSSxTQUFTLFNBQWIsRUFBd0I7QUFDdEIsb0JBQVEsR0FBUixDQUFZLDBDQUFaO0FBQ0QsV0FGRCxNQUVPO0FBQ0wsb0JBQVEsS0FBUixDQUFjLFNBQVMsT0FBdkI7QUFDRDtBQUNELGNBQUksaUJBQWlCLGdCQUFnQixRQUFoQixFQUEwQixPQUExQixFQUFtQyxTQUFTLE9BQTVDLENBQXJCO0FBQ0EsY0FBSSxlQUFlLElBQWYsS0FBd0IsQ0FBNUIsRUFBK0I7QUFDN0IsbUJBQU8sU0FBUyxRQUFULENBQVA7QUFDRDtBQUNELGlCQUFPLGFBQVA7QUFDRCxTQVpHLENBN0J3RCxFQXlDeEQsZUFBUSxXQUFSLENBekN3RCxFQXlDbEMsQ0FBQyxFQUFFLENBQUgsRUFBTSxRQUFOLENBekNrQyxDQUFQLENBQTFDLEVBeUNrQyxvQkFBTSxLQUFOLENBQVksc0JBQVosRUFBb0IsRUFBRSxRQUF0QixDQXpDbEMsR0FBWDtBQTBDQSxxQkFBYSxXQUFXLE1BQVgsQ0FBa0IsSUFBbEIsQ0FBYjtBQUNEO0FBQ0QsYUFBTyxVQUFQO0FBQ0Q7Ozs7OztrQkExRGtCLGEiLCJmaWxlIjoidG9rZW4tZXhwYW5kZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xpc3R9IGZyb20gXCJpbW11dGFibGVcIjtcbmltcG9ydCB7ZW5mb3Jlc3RFeHByLCBFbmZvcmVzdGVyfSBmcm9tIFwiLi9lbmZvcmVzdGVyXCI7XG5pbXBvcnQgVGVybUV4cGFuZGVyIGZyb20gXCIuL3Rlcm0tZXhwYW5kZXIuanNcIjtcbmltcG9ydCBCaW5kaW5nTWFwIGZyb20gXCIuL2JpbmRpbmctbWFwLmpzXCI7XG5pbXBvcnQgRW52IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IFJlYWRlciBmcm9tIFwiLi9zaGlmdC1yZWFkZXJcIjtcbmltcG9ydCAgKiBhcyBfIGZyb20gXCJyYW1kYVwiO1xuaW1wb3J0IFRlcm0sIHtpc0VPRiwgaXNCaW5kaW5nSWRlbnRpZmllciwgaXNCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eSwgaXNCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyLCBpc09iamVjdEJpbmRpbmcsIGlzQXJyYXlCaW5kaW5nLCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIGlzRnVuY3Rpb25FeHByZXNzaW9uLCBpc0Z1bmN0aW9uVGVybSwgaXNGdW5jdGlvbldpdGhOYW1lLCBpc1N5bnRheERlY2xhcmF0aW9uLCBpc1N5bnRheHJlY0RlY2xhcmF0aW9uLCBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sIGlzVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCwgaXNJbXBvcnQsIGlzRXhwb3J0fSBmcm9tIFwiLi90ZXJtc1wiO1xuaW1wb3J0IHtNYXliZX0gZnJvbSBcInJhbWRhLWZhbnRhc3lcIjtcbmltcG9ydCB7Z2Vuc3ltfSBmcm9tIFwiLi9zeW1ib2xcIjtcbmltcG9ydCB7VmFyQmluZGluZ1RyYW5zZm9ybSwgQ29tcGlsZXRpbWVUcmFuc2Zvcm19IGZyb20gXCIuL3RyYW5zZm9ybXNcIjtcbmltcG9ydCB7ZXhwZWN0LCBhc3NlcnR9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IGxvYWRTeW50YXggZnJvbSBcIi4vbG9hZC1zeW50YXhcIjtcbmltcG9ydCB7U2NvcGUsIGZyZXNoU2NvcGV9IGZyb20gXCIuL3Njb3BlXCI7XG5jb25zdCBKdXN0Xzg3OSA9IE1heWJlLkp1c3Q7XG5jb25zdCBOb3RoaW5nXzg4MCA9IE1heWJlLk5vdGhpbmc7XG5jb25zdCByZWdpc3RlclN5bnRheF84ODEgPSAoc3R4Xzg4NiwgY29udGV4dF84ODcpID0+IHtcbiAgbGV0IG5ld0JpbmRpbmdfODg4ID0gZ2Vuc3ltKHN0eF84ODYudmFsKCkpO1xuICBjb250ZXh0Xzg4Ny5lbnYuc2V0KG5ld0JpbmRpbmdfODg4LnRvU3RyaW5nKCksIG5ldyBWYXJCaW5kaW5nVHJhbnNmb3JtKHN0eF84ODYpKTtcbiAgY29udGV4dF84ODcuYmluZGluZ3MuYWRkKHN0eF84ODYsIHtiaW5kaW5nOiBuZXdCaW5kaW5nXzg4OCwgcGhhc2U6IDAsIHNraXBEdXA6IHRydWV9KTtcbn07XG5sZXQgcmVnaXN0ZXJCaW5kaW5nc184ODIgPSBfLmNvbmQoW1tpc0JpbmRpbmdJZGVudGlmaWVyLCAoe25hbWV9LCBjb250ZXh0Xzg4OSkgPT4ge1xuICByZWdpc3RlclN5bnRheF84ODEobmFtZSwgY29udGV4dF84ODkpO1xufV0sIFtpc0JpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXIsICh7YmluZGluZ30sIGNvbnRleHRfODkwKSA9PiB7XG4gIHJlZ2lzdGVyQmluZGluZ3NfODgyKGJpbmRpbmcsIGNvbnRleHRfODkwKTtcbn1dLCBbaXNCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eSwgKHtiaW5kaW5nfSwgY29udGV4dF84OTEpID0+IHtcbiAgcmVnaXN0ZXJCaW5kaW5nc184ODIoYmluZGluZywgY29udGV4dF84OTEpO1xufV0sIFtpc0FycmF5QmluZGluZywgKHtlbGVtZW50cywgcmVzdEVsZW1lbnR9LCBjb250ZXh0Xzg5MikgPT4ge1xuICBpZiAocmVzdEVsZW1lbnQgIT0gbnVsbCkge1xuICAgIHJlZ2lzdGVyQmluZGluZ3NfODgyKHJlc3RFbGVtZW50LCBjb250ZXh0Xzg5Mik7XG4gIH1cbiAgZWxlbWVudHMuZm9yRWFjaChlbF84OTMgPT4ge1xuICAgIGlmIChlbF84OTMgIT0gbnVsbCkge1xuICAgICAgcmVnaXN0ZXJCaW5kaW5nc184ODIoZWxfODkzLCBjb250ZXh0Xzg5Mik7XG4gICAgfVxuICB9KTtcbn1dLCBbaXNPYmplY3RCaW5kaW5nLCAoe3Byb3BlcnRpZXN9LCBjb250ZXh0Xzg5NCkgPT4ge31dLCBbXy5ULCBiaW5kaW5nXzg5NSA9PiBhc3NlcnQoZmFsc2UsIFwibm90IGltcGxlbWVudGVkIHlldCBmb3I6IFwiICsgYmluZGluZ184OTUudHlwZSldXSk7XG5sZXQgcmVtb3ZlU2NvcGVfODgzID0gXy5jb25kKFtbaXNCaW5kaW5nSWRlbnRpZmllciwgKHtuYW1lfSwgc2NvcGVfODk2KSA9PiBuZXcgVGVybShcIkJpbmRpbmdJZGVudGlmaWVyXCIsIHtuYW1lOiBuYW1lLnJlbW92ZVNjb3BlKHNjb3BlXzg5Nil9KV0sIFtpc0FycmF5QmluZGluZywgKHtlbGVtZW50cywgcmVzdEVsZW1lbnR9LCBzY29wZV84OTcpID0+IHtcbiAgcmV0dXJuIG5ldyBUZXJtKFwiQXJyYXlCaW5kaW5nXCIsIHtlbGVtZW50czogZWxlbWVudHMubWFwKGVsXzg5OCA9PiBlbF84OTggPT0gbnVsbCA/IG51bGwgOiByZW1vdmVTY29wZV84ODMoZWxfODk4LCBzY29wZV84OTcpKSwgcmVzdEVsZW1lbnQ6IHJlc3RFbGVtZW50ID09IG51bGwgPyBudWxsIDogcmVtb3ZlU2NvcGVfODgzKHJlc3RFbGVtZW50LCBzY29wZV84OTcpfSk7XG59XSwgW2lzQmluZGluZ1Byb3BlcnR5SWRlbnRpZmllciwgKHtiaW5kaW5nLCBpbml0fSwgc2NvcGVfODk5KSA9PiBuZXcgVGVybShcIkJpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXJcIiwge2JpbmRpbmc6IHJlbW92ZVNjb3BlXzg4MyhiaW5kaW5nLCBzY29wZV84OTkpLCBpbml0OiBpbml0fSldLCBbaXNCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eSwgKHtiaW5kaW5nLCBuYW1lfSwgc2NvcGVfOTAwKSA9PiBuZXcgVGVybShcIkJpbmRpbmdQcm9wZXJ0eVByb3BlcnR5XCIsIHtiaW5kaW5nOiByZW1vdmVTY29wZV84ODMoYmluZGluZywgc2NvcGVfOTAwKSwgbmFtZTogbmFtZX0pXSwgW2lzT2JqZWN0QmluZGluZywgKHtwcm9wZXJ0aWVzfSwgc2NvcGVfOTAxKSA9PiBuZXcgVGVybShcIk9iamVjdEJpbmRpbmdcIiwge3Byb3BlcnRpZXM6IHByb3BlcnRpZXMubWFwKHByb3BfOTAyID0+IHJlbW92ZVNjb3BlXzg4Myhwcm9wXzkwMiwgc2NvcGVfOTAxKSl9KV0sIFtfLlQsIGJpbmRpbmdfOTAzID0+IGFzc2VydChmYWxzZSwgXCJub3QgaW1wbGVtZW50ZWQgeWV0IGZvcjogXCIgKyBiaW5kaW5nXzkwMy50eXBlKV1dKTtcbmZ1bmN0aW9uIGZpbmROYW1lSW5FeHBvcnRzXzg4NChuYW1lXzkwNCwgZXhwXzkwNSkge1xuICBsZXQgZm91bmROYW1lc185MDYgPSBleHBfOTA1LnJlZHVjZSgoYWNjXzkwNywgZV85MDgpID0+IHtcbiAgICBpZiAoZV85MDguZGVjbGFyYXRpb24pIHtcbiAgICAgIHJldHVybiBhY2NfOTA3LmNvbmNhdChlXzkwOC5kZWNsYXJhdGlvbi5kZWNsYXJhdG9ycy5yZWR1Y2UoKGFjY185MDksIGRlY2xfOTEwKSA9PiB7XG4gICAgICAgIGlmIChkZWNsXzkxMC5iaW5kaW5nLm5hbWUudmFsKCkgPT09IG5hbWVfOTA0LnZhbCgpKSB7XG4gICAgICAgICAgcmV0dXJuIGFjY185MDkuY29uY2F0KGRlY2xfOTEwLmJpbmRpbmcubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY185MDk7XG4gICAgICB9LCBMaXN0KCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY185MDc7XG4gIH0sIExpc3QoKSk7XG4gIGFzc2VydChmb3VuZE5hbWVzXzkwNi5zaXplIDw9IDEsIFwiZXhwZWN0aW5nIG5vIG1vcmUgdGhhbiAxIG1hdGNoaW5nIG5hbWUgaW4gZXhwb3J0c1wiKTtcbiAgcmV0dXJuIGZvdW5kTmFtZXNfOTA2LmdldCgwKTtcbn1cbmZ1bmN0aW9uIGJpbmRJbXBvcnRzXzg4NShpbXBUZXJtXzkxMSwgZXhNb2R1bGVfOTEyLCBjb250ZXh0XzkxMykge1xuICBsZXQgbmFtZXNfOTE0ID0gW107XG4gIGltcFRlcm1fOTExLm5hbWVkSW1wb3J0cy5mb3JFYWNoKHNwZWNpZmllcl85MTUgPT4ge1xuICAgIGxldCBuYW1lXzkxNiA9IHNwZWNpZmllcl85MTUuYmluZGluZy5uYW1lO1xuICAgIGxldCBleHBvcnROYW1lXzkxNyA9IGZpbmROYW1lSW5FeHBvcnRzXzg4NChuYW1lXzkxNiwgZXhNb2R1bGVfOTEyLmV4cG9ydEVudHJpZXMpO1xuICAgIGlmIChleHBvcnROYW1lXzkxNyAhPSBudWxsKSB7XG4gICAgICBsZXQgbmV3QmluZGluZyA9IGdlbnN5bShuYW1lXzkxNi52YWwoKSk7XG4gICAgICBjb250ZXh0XzkxMy5iaW5kaW5ncy5hZGRGb3J3YXJkKG5hbWVfOTE2LCBleHBvcnROYW1lXzkxNywgbmV3QmluZGluZyk7XG4gICAgICBpZiAoY29udGV4dF85MTMuc3RvcmUuaGFzKGV4cG9ydE5hbWVfOTE3LnJlc29sdmUoKSkpIHtcbiAgICAgICAgbmFtZXNfOTE0LnB1c2gobmFtZV85MTYpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBMaXN0KG5hbWVzXzkxNCk7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlbkV4cGFuZGVyIHtcbiAgY29uc3RydWN0b3IoY29udGV4dF85MTgpIHtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XzkxODtcbiAgfVxuICBleHBhbmQoc3R4bF85MTkpIHtcbiAgICBsZXQgcmVzdWx0XzkyMCA9IExpc3QoKTtcbiAgICBpZiAoc3R4bF85MTkuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdF85MjA7XG4gICAgfVxuICAgIGxldCBwcmV2XzkyMSA9IExpc3QoKTtcbiAgICBsZXQgZW5mXzkyMiA9IG5ldyBFbmZvcmVzdGVyKHN0eGxfOTE5LCBwcmV2XzkyMSwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgc2VsZl85MjMgPSB0aGlzO1xuICAgIHdoaWxlICghZW5mXzkyMi5kb25lKSB7XG4gICAgICBsZXQgdGVybSA9IF8ucGlwZShfLmJpbmQoZW5mXzkyMi5lbmZvcmVzdCwgZW5mXzkyMiksIF8uY29uZChbW2lzVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCwgdGVybV85MjQgPT4ge1xuICAgICAgICB0ZXJtXzkyNC5kZWNsYXJhdGlvbi5kZWNsYXJhdG9ycyA9IHRlcm1fOTI0LmRlY2xhcmF0aW9uLmRlY2xhcmF0b3JzLm1hcChkZWNsXzkyNSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiVmFyaWFibGVEZWNsYXJhdG9yXCIsIHtiaW5kaW5nOiByZW1vdmVTY29wZV84ODMoZGVjbF85MjUuYmluZGluZywgc2VsZl85MjMuY29udGV4dC51c2VTY29wZSksIGluaXQ6IGRlY2xfOTI1LmluaXR9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpc1N5bnRheERlY2xhcmF0aW9uKHRlcm1fOTI0LmRlY2xhcmF0aW9uKSkge1xuICAgICAgICAgIGxldCBzY29wZSA9IGZyZXNoU2NvcGUoXCJub25yZWNcIik7XG4gICAgICAgICAgdGVybV85MjQuZGVjbGFyYXRpb24uZGVjbGFyYXRvcnMuZm9yRWFjaChkZWNsXzkyNiA9PiB7XG4gICAgICAgICAgICBsZXQgbmFtZV85MjcgPSBkZWNsXzkyNi5iaW5kaW5nLm5hbWU7XG4gICAgICAgICAgICBsZXQgbmFtZUFkZGVkXzkyOCA9IG5hbWVfOTI3LmFkZFNjb3BlKHNjb3BlKTtcbiAgICAgICAgICAgIGxldCBuYW1lUmVtb3ZlZF85MjkgPSBuYW1lXzkyNy5yZW1vdmVTY29wZShzZWxmXzkyMy5jb250ZXh0LmN1cnJlbnRTY29wZVtzZWxmXzkyMy5jb250ZXh0LmN1cnJlbnRTY29wZS5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICBsZXQgbmV3QmluZGluZ185MzAgPSBnZW5zeW0obmFtZV85MjcudmFsKCkpO1xuICAgICAgICAgICAgc2VsZl85MjMuY29udGV4dC5iaW5kaW5ncy5hZGRGb3J3YXJkKG5hbWVBZGRlZF85MjgsIG5hbWVSZW1vdmVkXzkyOSwgbmV3QmluZGluZ185MzApO1xuICAgICAgICAgICAgZGVjbF85MjYuaW5pdCA9IGRlY2xfOTI2LmluaXQuYWRkU2NvcGUoc2NvcGUsIHNlbGZfOTIzLmNvbnRleHQuYmluZGluZ3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N5bnRheERlY2xhcmF0aW9uKHRlcm1fOTI0LmRlY2xhcmF0aW9uKSB8fCBpc1N5bnRheHJlY0RlY2xhcmF0aW9uKHRlcm1fOTI0LmRlY2xhcmF0aW9uKSkge1xuICAgICAgICAgIHRlcm1fOTI0LmRlY2xhcmF0aW9uLmRlY2xhcmF0b3JzLmZvckVhY2goZGVjbF85MzEgPT4ge1xuICAgICAgICAgICAgcmVnaXN0ZXJCaW5kaW5nc184ODIoZGVjbF85MzEuYmluZGluZywgc2VsZl85MjMuY29udGV4dCk7XG4gICAgICAgICAgICBsb2FkU3ludGF4KGRlY2xfOTMxLCBzZWxmXzkyMy5jb250ZXh0LCBzZWxmXzkyMy5jb250ZXh0LmVudik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIE5vdGhpbmdfODgwKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGVybV85MjQuZGVjbGFyYXRpb24uZGVjbGFyYXRvcnMuZm9yRWFjaChkZWNsXzkzMiA9PiByZWdpc3RlckJpbmRpbmdzXzg4MihkZWNsXzkzMi5iaW5kaW5nLCBzZWxmXzkyMy5jb250ZXh0KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEp1c3RfODc5KHRlcm1fOTI0KTtcbiAgICAgIH1dLCBbaXNGdW5jdGlvbldpdGhOYW1lLCB0ZXJtXzkzMyA9PiB7XG4gICAgICAgIHRlcm1fOTMzLm5hbWUgPSByZW1vdmVTY29wZV84ODModGVybV85MzMubmFtZSwgc2VsZl85MjMuY29udGV4dC51c2VTY29wZSk7XG4gICAgICAgIHJlZ2lzdGVyQmluZGluZ3NfODgyKHRlcm1fOTMzLm5hbWUsIHNlbGZfOTIzLmNvbnRleHQpO1xuICAgICAgICByZXR1cm4gSnVzdF84NzkodGVybV85MzMpO1xuICAgICAgfV0sIFtpc0ltcG9ydCwgdGVybV85MzQgPT4ge1xuICAgICAgICBsZXQgbW9kXzkzNSA9IHNlbGZfOTIzLmNvbnRleHQubW9kdWxlcy5sb2FkKHRlcm1fOTM0Lm1vZHVsZVNwZWNpZmllci52YWwoKSwgc2VsZl85MjMuY29udGV4dCk7XG4gICAgICAgIGlmICh0ZXJtXzkzNC5mb3JTeW50YXgpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImltcG9ydCBmb3Igc3ludGF4IGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbW9kXzkzNS52aXNpdChzZWxmXzkyMy5jb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYm91bmROYW1lc185MzYgPSBiaW5kSW1wb3J0c184ODUodGVybV85MzQsIG1vZF85MzUsIHNlbGZfOTIzLmNvbnRleHQpO1xuICAgICAgICBpZiAoYm91bmROYW1lc185MzYuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBKdXN0Xzg3OSh0ZXJtXzkzNCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE5vdGhpbmdfODgwKCk7XG4gICAgICB9XSwgW2lzRU9GLCBOb3RoaW5nXzg4MF0sIFtfLlQsIEp1c3RfODc5XV0pLCBNYXliZS5tYXliZShMaXN0KCksIF8uaWRlbnRpdHkpKSgpO1xuICAgICAgcmVzdWx0XzkyMCA9IHJlc3VsdF85MjAuY29uY2F0KHRlcm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XzkyMDtcbiAgfVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3Rva2VuLWV4cGFuZGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7SUFBYSxDOztBQUNiOzs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7QUFDQSxJQUFNLFdBQVcsb0JBQU0sSUFBdkI7QUFDQSxJQUFNLGNBQWMsb0JBQU0sT0FBMUI7QUFDQSxJQUFNLHFCQUFxQixTQUFyQixrQkFBcUIsQ0FBQyxPQUFELEVBQVUsV0FBVixFQUEwQjtBQUNuRCxNQUFJLGlCQUFpQixvQkFBTyxRQUFRLEdBQVIsRUFBUCxDQUFyQjtBQUNBLGNBQVksR0FBWixDQUFnQixHQUFoQixDQUFvQixlQUFlLFFBQWYsRUFBcEIsRUFBK0Msb0NBQXdCLE9BQXhCLENBQS9DO0FBQ0EsY0FBWSxRQUFaLENBQXFCLEdBQXJCLENBQXlCLE9BQXpCLEVBQWtDLEVBQUMsU0FBUyxjQUFWLEVBQTBCLE9BQU8sQ0FBakMsRUFBb0MsU0FBUyxJQUE3QyxFQUFsQztBQUNELENBSkQ7QUFLQSxJQUFJLHVCQUF1QixFQUFFLElBQUYsQ0FBTyxDQUFDLDZCQUFzQixnQkFBUyxXQUFULEVBQXlCO0FBQUEsTUFBdkIsSUFBdUIsUUFBdkIsSUFBdUI7O0FBQ2hGLHFCQUFtQixJQUFuQixFQUF5QixXQUF6QjtBQUNELENBRmtDLENBQUQsRUFFOUIscUNBQThCLGlCQUFZLFdBQVosRUFBNEI7QUFBQSxNQUExQixPQUEwQixTQUExQixPQUEwQjs7QUFDNUQsdUJBQXFCLE9BQXJCLEVBQThCLFdBQTlCO0FBQ0QsQ0FGRyxDQUY4QixFQUk5QixtQ0FBNEIsaUJBQVksV0FBWixFQUE0QjtBQUFBLE1BQTFCLE9BQTBCLFNBQTFCLE9BQTBCOztBQUMxRCx1QkFBcUIsT0FBckIsRUFBOEIsV0FBOUI7QUFDRCxDQUZHLENBSjhCLEVBTTlCLHdCQUFpQixp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QUE4QixTQUFTLGVBQVQsQ0FBeUIsR0FBekIsRUFBOUIsRUFBOEQsU0FBUyxPQUF2RSxDQUFkO0FBQ0EsY0FBSSxTQUFTLFNBQWIsRUFBd0I7QUFDdEIsb0JBQVEsR0FBUixDQUFZLDBDQUFaO0FBQ0QsV0FGRCxNQUVPO0FBQ0wsb0JBQVEsS0FBUixDQUFjLFNBQVMsT0FBdkI7QUFDRDtBQUNELGNBQUksaUJBQWlCLGdCQUFnQixRQUFoQixFQUEwQixPQUExQixFQUFtQyxTQUFTLE9BQTVDLENBQXJCO0FBQ0EsY0FBSSxlQUFlLElBQWYsS0FBd0IsQ0FBNUIsRUFBK0I7QUFDN0IsbUJBQU8sU0FBUyxRQUFULENBQVA7QUFDRDtBQUNELGlCQUFPLGFBQVA7QUFDRCxTQVpHLENBN0J3RCxFQXlDeEQsZUFBUSxXQUFSLENBekN3RCxFQXlDbEMsQ0FBQyxFQUFFLENBQUgsRUFBTSxRQUFOLENBekNrQyxDQUFQLENBQTFDLEVBeUNrQyxvQkFBTSxLQUFOLENBQVksc0JBQVosRUFBb0IsRUFBRSxRQUF0QixDQXpDbEMsR0FBWDtBQTBDQSxxQkFBYSxXQUFXLE1BQVgsQ0FBa0IsSUFBbEIsQ0FBYjtBQUNEO0FBQ0QsYUFBTyxVQUFQO0FBQ0Q7Ozs7OztrQkExRGtCLGEiLCJmaWxlIjoidG9rZW4tZXhwYW5kZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xpc3R9IGZyb20gXCJpbW11dGFibGVcIjtcbmltcG9ydCB7ZW5mb3Jlc3RFeHByLCBFbmZvcmVzdGVyfSBmcm9tIFwiLi9lbmZvcmVzdGVyXCI7XG5pbXBvcnQgVGVybUV4cGFuZGVyIGZyb20gXCIuL3Rlcm0tZXhwYW5kZXIuanNcIjtcbmltcG9ydCBCaW5kaW5nTWFwIGZyb20gXCIuL2JpbmRpbmctbWFwLmpzXCI7XG5pbXBvcnQgRW52IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IFJlYWRlciBmcm9tIFwiLi9zaGlmdC1yZWFkZXJcIjtcbmltcG9ydCAgKiBhcyBfIGZyb20gXCJyYW1kYVwiO1xuaW1wb3J0IFRlcm0sIHtpc0VPRiwgaXNCaW5kaW5nSWRlbnRpZmllciwgaXNCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eSwgaXNCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyLCBpc09iamVjdEJpbmRpbmcsIGlzQXJyYXlCaW5kaW5nLCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIGlzRnVuY3Rpb25FeHByZXNzaW9uLCBpc0Z1bmN0aW9uVGVybSwgaXNGdW5jdGlvbldpdGhOYW1lLCBpc1N5bnRheERlY2xhcmF0aW9uLCBpc1N5bnRheHJlY0RlY2xhcmF0aW9uLCBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sIGlzVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCwgaXNJbXBvcnQsIGlzRXhwb3J0fSBmcm9tIFwiLi90ZXJtc1wiO1xuaW1wb3J0IHtNYXliZX0gZnJvbSBcInJhbWRhLWZhbnRhc3lcIjtcbmltcG9ydCB7Z2Vuc3ltfSBmcm9tIFwiLi9zeW1ib2xcIjtcbmltcG9ydCB7VmFyQmluZGluZ1RyYW5zZm9ybSwgQ29tcGlsZXRpbWVUcmFuc2Zvcm19IGZyb20gXCIuL3RyYW5zZm9ybXNcIjtcbmltcG9ydCB7ZXhwZWN0LCBhc3NlcnR9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IGxvYWRTeW50YXggZnJvbSBcIi4vbG9hZC1zeW50YXhcIjtcbmltcG9ydCB7U2NvcGUsIGZyZXNoU2NvcGV9IGZyb20gXCIuL3Njb3BlXCI7XG5jb25zdCBKdXN0Xzg5OCA9IE1heWJlLkp1c3Q7XG5jb25zdCBOb3RoaW5nXzg5OSA9IE1heWJlLk5vdGhpbmc7XG5jb25zdCByZWdpc3RlclN5bnRheF85MDAgPSAoc3R4XzkwNSwgY29udGV4dF85MDYpID0+IHtcbiAgbGV0IG5ld0JpbmRpbmdfOTA3ID0gZ2Vuc3ltKHN0eF85MDUudmFsKCkpO1xuICBjb250ZXh0XzkwNi5lbnYuc2V0KG5ld0JpbmRpbmdfOTA3LnRvU3RyaW5nKCksIG5ldyBWYXJCaW5kaW5nVHJhbnNmb3JtKHN0eF85MDUpKTtcbiAgY29udGV4dF85MDYuYmluZGluZ3MuYWRkKHN0eF85MDUsIHtiaW5kaW5nOiBuZXdCaW5kaW5nXzkwNywgcGhhc2U6IDAsIHNraXBEdXA6IHRydWV9KTtcbn07XG5sZXQgcmVnaXN0ZXJCaW5kaW5nc185MDEgPSBfLmNvbmQoW1tpc0JpbmRpbmdJZGVudGlmaWVyLCAoe25hbWV9LCBjb250ZXh0XzkwOCkgPT4ge1xuICByZWdpc3RlclN5bnRheF85MDAobmFtZSwgY29udGV4dF85MDgpO1xufV0sIFtpc0JpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXIsICh7YmluZGluZ30sIGNvbnRleHRfOTA5KSA9PiB7XG4gIHJlZ2lzdGVyQmluZGluZ3NfOTAxKGJpbmRpbmcsIGNvbnRleHRfOTA5KTtcbn1dLCBbaXNCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eSwgKHtiaW5kaW5nfSwgY29udGV4dF85MTApID0+IHtcbiAgcmVnaXN0ZXJCaW5kaW5nc185MDEoYmluZGluZywgY29udGV4dF85MTApO1xufV0sIFtpc0FycmF5QmluZGluZywgKHtlbGVtZW50cywgcmVzdEVsZW1lbnR9LCBjb250ZXh0XzkxMSkgPT4ge1xuICBpZiAocmVzdEVsZW1lbnQgIT0gbnVsbCkge1xuICAgIHJlZ2lzdGVyQmluZGluZ3NfOTAxKHJlc3RFbGVtZW50LCBjb250ZXh0XzkxMSk7XG4gIH1cbiAgZWxlbWVudHMuZm9yRWFjaChlbF85MTIgPT4ge1xuICAgIGlmIChlbF85MTIgIT0gbnVsbCkge1xuICAgICAgcmVnaXN0ZXJCaW5kaW5nc185MDEoZWxfOTEyLCBjb250ZXh0XzkxMSk7XG4gICAgfVxuICB9KTtcbn1dLCBbaXNPYmplY3RCaW5kaW5nLCAoe3Byb3BlcnRpZXN9LCBjb250ZXh0XzkxMykgPT4ge31dLCBbXy5ULCBiaW5kaW5nXzkxNCA9PiBhc3NlcnQoZmFsc2UsIFwibm90IGltcGxlbWVudGVkIHlldCBmb3I6IFwiICsgYmluZGluZ185MTQudHlwZSldXSk7XG5sZXQgcmVtb3ZlU2NvcGVfOTAyID0gXy5jb25kKFtbaXNCaW5kaW5nSWRlbnRpZmllciwgKHtuYW1lfSwgc2NvcGVfOTE1KSA9PiBuZXcgVGVybShcIkJpbmRpbmdJZGVudGlmaWVyXCIsIHtuYW1lOiBuYW1lLnJlbW92ZVNjb3BlKHNjb3BlXzkxNSl9KV0sIFtpc0FycmF5QmluZGluZywgKHtlbGVtZW50cywgcmVzdEVsZW1lbnR9LCBzY29wZV85MTYpID0+IHtcbiAgcmV0dXJuIG5ldyBUZXJtKFwiQXJyYXlCaW5kaW5nXCIsIHtlbGVtZW50czogZWxlbWVudHMubWFwKGVsXzkxNyA9PiBlbF85MTcgPT0gbnVsbCA/IG51bGwgOiByZW1vdmVTY29wZV85MDIoZWxfOTE3LCBzY29wZV85MTYpKSwgcmVzdEVsZW1lbnQ6IHJlc3RFbGVtZW50ID09IG51bGwgPyBudWxsIDogcmVtb3ZlU2NvcGVfOTAyKHJlc3RFbGVtZW50LCBzY29wZV85MTYpfSk7XG59XSwgW2lzQmluZGluZ1Byb3BlcnR5SWRlbnRpZmllciwgKHtiaW5kaW5nLCBpbml0fSwgc2NvcGVfOTE4KSA9PiBuZXcgVGVybShcIkJpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXJcIiwge2JpbmRpbmc6IHJlbW92ZVNjb3BlXzkwMihiaW5kaW5nLCBzY29wZV85MTgpLCBpbml0OiBpbml0fSldLCBbaXNCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eSwgKHtiaW5kaW5nLCBuYW1lfSwgc2NvcGVfOTE5KSA9PiBuZXcgVGVybShcIkJpbmRpbmdQcm9wZXJ0eVByb3BlcnR5XCIsIHtiaW5kaW5nOiByZW1vdmVTY29wZV85MDIoYmluZGluZywgc2NvcGVfOTE5KSwgbmFtZTogbmFtZX0pXSwgW2lzT2JqZWN0QmluZGluZywgKHtwcm9wZXJ0aWVzfSwgc2NvcGVfOTIwKSA9PiBuZXcgVGVybShcIk9iamVjdEJpbmRpbmdcIiwge3Byb3BlcnRpZXM6IHByb3BlcnRpZXMubWFwKHByb3BfOTIxID0+IHJlbW92ZVNjb3BlXzkwMihwcm9wXzkyMSwgc2NvcGVfOTIwKSl9KV0sIFtfLlQsIGJpbmRpbmdfOTIyID0+IGFzc2VydChmYWxzZSwgXCJub3QgaW1wbGVtZW50ZWQgeWV0IGZvcjogXCIgKyBiaW5kaW5nXzkyMi50eXBlKV1dKTtcbmZ1bmN0aW9uIGZpbmROYW1lSW5FeHBvcnRzXzkwMyhuYW1lXzkyMywgZXhwXzkyNCkge1xuICBsZXQgZm91bmROYW1lc185MjUgPSBleHBfOTI0LnJlZHVjZSgoYWNjXzkyNiwgZV85MjcpID0+IHtcbiAgICBpZiAoZV85MjcuZGVjbGFyYXRpb24pIHtcbiAgICAgIHJldHVybiBhY2NfOTI2LmNvbmNhdChlXzkyNy5kZWNsYXJhdGlvbi5kZWNsYXJhdG9ycy5yZWR1Y2UoKGFjY185MjgsIGRlY2xfOTI5KSA9PiB7XG4gICAgICAgIGlmIChkZWNsXzkyOS5iaW5kaW5nLm5hbWUudmFsKCkgPT09IG5hbWVfOTIzLnZhbCgpKSB7XG4gICAgICAgICAgcmV0dXJuIGFjY185MjguY29uY2F0KGRlY2xfOTI5LmJpbmRpbmcubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY185Mjg7XG4gICAgICB9LCBMaXN0KCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY185MjY7XG4gIH0sIExpc3QoKSk7XG4gIGFzc2VydChmb3VuZE5hbWVzXzkyNS5zaXplIDw9IDEsIFwiZXhwZWN0aW5nIG5vIG1vcmUgdGhhbiAxIG1hdGNoaW5nIG5hbWUgaW4gZXhwb3J0c1wiKTtcbiAgcmV0dXJuIGZvdW5kTmFtZXNfOTI1LmdldCgwKTtcbn1cbmZ1bmN0aW9uIGJpbmRJbXBvcnRzXzkwNChpbXBUZXJtXzkzMCwgZXhNb2R1bGVfOTMxLCBjb250ZXh0XzkzMikge1xuICBsZXQgbmFtZXNfOTMzID0gW107XG4gIGltcFRlcm1fOTMwLm5hbWVkSW1wb3J0cy5mb3JFYWNoKHNwZWNpZmllcl85MzQgPT4ge1xuICAgIGxldCBuYW1lXzkzNSA9IHNwZWNpZmllcl85MzQuYmluZGluZy5uYW1lO1xuICAgIGxldCBleHBvcnROYW1lXzkzNiA9IGZpbmROYW1lSW5FeHBvcnRzXzkwMyhuYW1lXzkzNSwgZXhNb2R1bGVfOTMxLmV4cG9ydEVudHJpZXMpO1xuICAgIGlmIChleHBvcnROYW1lXzkzNiAhPSBudWxsKSB7XG4gICAgICBsZXQgbmV3QmluZGluZyA9IGdlbnN5bShuYW1lXzkzNS52YWwoKSk7XG4gICAgICBjb250ZXh0XzkzMi5iaW5kaW5ncy5hZGRGb3J3YXJkKG5hbWVfOTM1LCBleHBvcnROYW1lXzkzNiwgbmV3QmluZGluZyk7XG4gICAgICBpZiAoY29udGV4dF85MzIuc3RvcmUuaGFzKGV4cG9ydE5hbWVfOTM2LnJlc29sdmUoKSkpIHtcbiAgICAgICAgbmFtZXNfOTMzLnB1c2gobmFtZV85MzUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBMaXN0KG5hbWVzXzkzMyk7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlbkV4cGFuZGVyIHtcbiAgY29uc3RydWN0b3IoY29udGV4dF85MzcpIHtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XzkzNztcbiAgfVxuICBleHBhbmQoc3R4bF85MzgpIHtcbiAgICBsZXQgcmVzdWx0XzkzOSA9IExpc3QoKTtcbiAgICBpZiAoc3R4bF85Mzguc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdF85Mzk7XG4gICAgfVxuICAgIGxldCBwcmV2Xzk0MCA9IExpc3QoKTtcbiAgICBsZXQgZW5mXzk0MSA9IG5ldyBFbmZvcmVzdGVyKHN0eGxfOTM4LCBwcmV2Xzk0MCwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgc2VsZl85NDIgPSB0aGlzO1xuICAgIHdoaWxlICghZW5mXzk0MS5kb25lKSB7XG4gICAgICBsZXQgdGVybSA9IF8ucGlwZShfLmJpbmQoZW5mXzk0MS5lbmZvcmVzdCwgZW5mXzk0MSksIF8uY29uZChbW2lzVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCwgdGVybV85NDMgPT4ge1xuICAgICAgICB0ZXJtXzk0My5kZWNsYXJhdGlvbi5kZWNsYXJhdG9ycyA9IHRlcm1fOTQzLmRlY2xhcmF0aW9uLmRlY2xhcmF0b3JzLm1hcChkZWNsXzk0NCA9PiB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiVmFyaWFibGVEZWNsYXJhdG9yXCIsIHtiaW5kaW5nOiByZW1vdmVTY29wZV85MDIoZGVjbF85NDQuYmluZGluZywgc2VsZl85NDIuY29udGV4dC51c2VTY29wZSksIGluaXQ6IGRlY2xfOTQ0LmluaXR9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpc1N5bnRheERlY2xhcmF0aW9uKHRlcm1fOTQzLmRlY2xhcmF0aW9uKSkge1xuICAgICAgICAgIGxldCBzY29wZSA9IGZyZXNoU2NvcGUoXCJub25yZWNcIik7XG4gICAgICAgICAgdGVybV85NDMuZGVjbGFyYXRpb24uZGVjbGFyYXRvcnMuZm9yRWFjaChkZWNsXzk0NSA9PiB7XG4gICAgICAgICAgICBsZXQgbmFtZV85NDYgPSBkZWNsXzk0NS5iaW5kaW5nLm5hbWU7XG4gICAgICAgICAgICBsZXQgbmFtZUFkZGVkXzk0NyA9IG5hbWVfOTQ2LmFkZFNjb3BlKHNjb3BlKTtcbiAgICAgICAgICAgIGxldCBuYW1lUmVtb3ZlZF85NDggPSBuYW1lXzk0Ni5yZW1vdmVTY29wZShzZWxmXzk0Mi5jb250ZXh0LmN1cnJlbnRTY29wZVtzZWxmXzk0Mi5jb250ZXh0LmN1cnJlbnRTY29wZS5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICBsZXQgbmV3QmluZGluZ185NDkgPSBnZW5zeW0obmFtZV85NDYudmFsKCkpO1xuICAgICAgICAgICAgc2VsZl85NDIuY29udGV4dC5iaW5kaW5ncy5hZGRGb3J3YXJkKG5hbWVBZGRlZF85NDcsIG5hbWVSZW1vdmVkXzk0OCwgbmV3QmluZGluZ185NDkpO1xuICAgICAgICAgICAgZGVjbF85NDUuaW5pdCA9IGRlY2xfOTQ1LmluaXQuYWRkU2NvcGUoc2NvcGUsIHNlbGZfOTQyLmNvbnRleHQuYmluZGluZ3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N5bnRheERlY2xhcmF0aW9uKHRlcm1fOTQzLmRlY2xhcmF0aW9uKSB8fCBpc1N5bnRheHJlY0RlY2xhcmF0aW9uKHRlcm1fOTQzLmRlY2xhcmF0aW9uKSkge1xuICAgICAgICAgIHRlcm1fOTQzLmRlY2xhcmF0aW9uLmRlY2xhcmF0b3JzLmZvckVhY2goZGVjbF85NTAgPT4ge1xuICAgICAgICAgICAgcmVnaXN0ZXJCaW5kaW5nc185MDEoZGVjbF85NTAuYmluZGluZywgc2VsZl85NDIuY29udGV4dCk7XG4gICAgICAgICAgICBsb2FkU3ludGF4KGRlY2xfOTUwLCBzZWxmXzk0Mi5jb250ZXh0LCBzZWxmXzk0Mi5jb250ZXh0LmVudik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIE5vdGhpbmdfODk5KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGVybV85NDMuZGVjbGFyYXRpb24uZGVjbGFyYXRvcnMuZm9yRWFjaChkZWNsXzk1MSA9PiByZWdpc3RlckJpbmRpbmdzXzkwMShkZWNsXzk1MS5iaW5kaW5nLCBzZWxmXzk0Mi5jb250ZXh0KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEp1c3RfODk4KHRlcm1fOTQzKTtcbiAgICAgIH1dLCBbaXNGdW5jdGlvbldpdGhOYW1lLCB0ZXJtXzk1MiA9PiB7XG4gICAgICAgIHRlcm1fOTUyLm5hbWUgPSByZW1vdmVTY29wZV85MDIodGVybV85NTIubmFtZSwgc2VsZl85NDIuY29udGV4dC51c2VTY29wZSk7XG4gICAgICAgIHJlZ2lzdGVyQmluZGluZ3NfOTAxKHRlcm1fOTUyLm5hbWUsIHNlbGZfOTQyLmNvbnRleHQpO1xuICAgICAgICByZXR1cm4gSnVzdF84OTgodGVybV85NTIpO1xuICAgICAgfV0sIFtpc0ltcG9ydCwgdGVybV85NTMgPT4ge1xuICAgICAgICBsZXQgbW9kXzk1NCA9IHNlbGZfOTQyLmNvbnRleHQubW9kdWxlcy5sb2FkKHRlcm1fOTUzLm1vZHVsZVNwZWNpZmllci52YWwoKSwgc2VsZl85NDIuY29udGV4dCk7XG4gICAgICAgIGlmICh0ZXJtXzk1My5mb3JTeW50YXgpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImltcG9ydCBmb3Igc3ludGF4IGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbW9kXzk1NC52aXNpdChzZWxmXzk0Mi5jb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYm91bmROYW1lc185NTUgPSBiaW5kSW1wb3J0c185MDQodGVybV85NTMsIG1vZF85NTQsIHNlbGZfOTQyLmNvbnRleHQpO1xuICAgICAgICBpZiAoYm91bmROYW1lc185NTUuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBKdXN0Xzg5OCh0ZXJtXzk1Myk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE5vdGhpbmdfODk5KCk7XG4gICAgICB9XSwgW2lzRU9GLCBOb3RoaW5nXzg5OV0sIFtfLlQsIEp1c3RfODk4XV0pLCBNYXliZS5tYXliZShMaXN0KCksIF8uaWRlbnRpdHkpKSgpO1xuICAgICAgcmVzdWx0XzkzOSA9IHJlc3VsdF85MzkuY29uY2F0KHRlcm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XzkzOTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/transforms.js b/dist/transforms.js index 64ac5a2f..3fa38aab 100644 --- a/dist/transforms.js +++ b/dist/transforms.js @@ -86,15 +86,15 @@ var ReturnStatementTransform = exports.ReturnStatementTransform = function Retur _classCallCheck(this, ReturnStatementTransform); }; -var VarBindingTransform = exports.VarBindingTransform = function VarBindingTransform(id_937) { +var VarBindingTransform = exports.VarBindingTransform = function VarBindingTransform(id_956) { _classCallCheck(this, VarBindingTransform); - this.id = id_937; + this.id = id_956; }; -var CompiletimeTransform = exports.CompiletimeTransform = function CompiletimeTransform(value_938) { +var CompiletimeTransform = exports.CompiletimeTransform = function CompiletimeTransform(value_957) { _classCallCheck(this, CompiletimeTransform); - this.value = value_938; + this.value = value_957; }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3RyYW5zZm9ybXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7SUFBYSxxQixXQUFBLHFCOzs7O0lBQ0EscUIsV0FBQSxxQjs7OztJQUNBLFksV0FBQSxZOzs7O0lBQ0EsYyxXQUFBLGM7Ozs7SUFDQSxnQixXQUFBLGdCOzs7O0lBQ0Esa0IsV0FBQSxrQjs7OztJQUNBLFksV0FBQSxZOzs7O0lBQ0EsYyxXQUFBLGM7Ozs7SUFDQSxXLFdBQUEsVzs7OztJQUNBLFksV0FBQSxZOzs7O0lBQ0EsZSxXQUFBLGU7Ozs7SUFDQSxjLFdBQUEsYzs7OztJQUNBLGlCLFdBQUEsaUI7Ozs7SUFDQSxXLFdBQUEsVzs7OztJQUNBLGEsV0FBQSxhOzs7O0lBQ0EsaUIsV0FBQSxpQjs7OztJQUNBLHNCLFdBQUEsc0I7Ozs7SUFDQSxtQixXQUFBLG1COzs7O0lBQ0Esb0IsV0FBQSxvQjs7OztJQUNBLHdCLFdBQUEsd0I7Ozs7SUFDQSxtQixXQUFBLG1CLEdBQ1gsNkJBQVksTUFBWixFQUFvQjtBQUFBOztBQUNsQixPQUFLLEVBQUwsR0FBVSxNQUFWO0FBQ0QsQzs7SUFFVSxvQixXQUFBLG9CLEdBQ1gsOEJBQVksU0FBWixFQUF1QjtBQUFBOztBQUNyQixPQUFLLEtBQUwsR0FBYSxTQUFiO0FBQ0QsQyIsImZpbGUiOiJ0cmFuc2Zvcm1zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEZ1bmN0aW9uRGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFZhcmlhYmxlRGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIE5ld1RyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFRocm93VHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgTGV0RGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIENvbnN0RGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFRyeVRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFdoaWxlVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgSWZUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBGb3JUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBTd2l0Y2hUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBCcmVha1RyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIENvbnRpbnVlVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgRG9UcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBXaXRoVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgRGVidWdnZXJUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBTeW50YXhyZWNEZWNsVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgU3ludGF4RGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFN5bnRheFF1b3RlVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgUmV0dXJuU3RhdGVtZW50VHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgVmFyQmluZGluZ1RyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKGlkXzkzNykge1xuICAgIHRoaXMuaWQgPSBpZF85Mzc7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBDb21waWxldGltZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKHZhbHVlXzkzOCkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZV85Mzg7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3RyYW5zZm9ybXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7SUFBYSxxQixXQUFBLHFCOzs7O0lBQ0EscUIsV0FBQSxxQjs7OztJQUNBLFksV0FBQSxZOzs7O0lBQ0EsYyxXQUFBLGM7Ozs7SUFDQSxnQixXQUFBLGdCOzs7O0lBQ0Esa0IsV0FBQSxrQjs7OztJQUNBLFksV0FBQSxZOzs7O0lBQ0EsYyxXQUFBLGM7Ozs7SUFDQSxXLFdBQUEsVzs7OztJQUNBLFksV0FBQSxZOzs7O0lBQ0EsZSxXQUFBLGU7Ozs7SUFDQSxjLFdBQUEsYzs7OztJQUNBLGlCLFdBQUEsaUI7Ozs7SUFDQSxXLFdBQUEsVzs7OztJQUNBLGEsV0FBQSxhOzs7O0lBQ0EsaUIsV0FBQSxpQjs7OztJQUNBLHNCLFdBQUEsc0I7Ozs7SUFDQSxtQixXQUFBLG1COzs7O0lBQ0Esb0IsV0FBQSxvQjs7OztJQUNBLHdCLFdBQUEsd0I7Ozs7SUFDQSxtQixXQUFBLG1CLEdBQ1gsNkJBQVksTUFBWixFQUFvQjtBQUFBOztBQUNsQixPQUFLLEVBQUwsR0FBVSxNQUFWO0FBQ0QsQzs7SUFFVSxvQixXQUFBLG9CLEdBQ1gsOEJBQVksU0FBWixFQUF1QjtBQUFBOztBQUNyQixPQUFLLEtBQUwsR0FBYSxTQUFiO0FBQ0QsQyIsImZpbGUiOiJ0cmFuc2Zvcm1zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEZ1bmN0aW9uRGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFZhcmlhYmxlRGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIE5ld1RyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFRocm93VHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgTGV0RGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIENvbnN0RGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFRyeVRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFdoaWxlVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgSWZUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBGb3JUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBTd2l0Y2hUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBCcmVha1RyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIENvbnRpbnVlVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgRG9UcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBXaXRoVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgRGVidWdnZXJUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBTeW50YXhyZWNEZWNsVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgU3ludGF4RGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFN5bnRheFF1b3RlVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgUmV0dXJuU3RhdGVtZW50VHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgVmFyQmluZGluZ1RyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKGlkXzk1Nikge1xuICAgIHRoaXMuaWQgPSBpZF85NTY7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBDb21waWxldGltZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKHZhbHVlXzk1Nykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZV85NTc7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/utils.js b/dist/utils.js index b760fa36..247625ae 100644 --- a/dist/utils.js +++ b/dist/utils.js @@ -11,25 +11,25 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } -function mixin(target_939, source_940) { - var F_941 = function (_target_) { - _inherits(F_941, _target_); +function mixin(target_958, source_959) { + var F_960 = function (_target_) { + _inherits(F_960, _target_); - function F_941() { - _classCallCheck(this, F_941); + function F_960() { + _classCallCheck(this, F_960); - return _possibleConstructorReturn(this, Object.getPrototypeOf(F_941).apply(this, arguments)); + return _possibleConstructorReturn(this, Object.getPrototypeOf(F_960).apply(this, arguments)); } - return F_941; - }(target_939); + return F_960; + }(target_958); - Object.getOwnPropertyNames(source_940.prototype).forEach(function (name_942) { - if (name_942 !== "constructor") { - var newProp = Object.getOwnPropertyDescriptor(source_940.prototype, name_942); - Object.defineProperty(F_941.prototype, name_942, newProp); + Object.getOwnPropertyNames(source_959.prototype).forEach(function (name_961) { + if (name_961 !== "constructor") { + var newProp = Object.getOwnPropertyDescriptor(source_959.prototype, name_961); + Object.defineProperty(F_960.prototype, name_961, newProp); } }); - return F_941; + return F_960; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O1FBQWdCLEssR0FBQSxLOzs7Ozs7OztBQUFULFNBQVMsS0FBVCxDQUFlLFVBQWYsRUFBMkIsVUFBM0IsRUFBdUM7QUFBQSxNQUN0QyxLQURzQztBQUFBOztBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBLElBQ3hCLFVBRHdCOztBQUU1QyxTQUFPLG1CQUFQLENBQTJCLFdBQVcsU0FBdEMsRUFBaUQsT0FBakQsQ0FBeUQsb0JBQVk7QUFDbkUsUUFBSSxhQUFhLGFBQWpCLEVBQWdDO0FBQzlCLFVBQUksVUFBVSxPQUFPLHdCQUFQLENBQWdDLFdBQVcsU0FBM0MsRUFBc0QsUUFBdEQsQ0FBZDtBQUNBLGFBQU8sY0FBUCxDQUFzQixNQUFNLFNBQTVCLEVBQXVDLFFBQXZDLEVBQWlELE9BQWpEO0FBQ0Q7QUFDRixHQUxEO0FBTUEsU0FBTyxLQUFQO0FBQ0QiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gbWl4aW4odGFyZ2V0XzkzOSwgc291cmNlXzk0MCkge1xuICBjbGFzcyBGXzk0MSBleHRlbmRzIHRhcmdldF85Mzkge31cbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlXzk0MC5wcm90b3R5cGUpLmZvckVhY2gobmFtZV85NDIgPT4ge1xuICAgIGlmIChuYW1lXzk0MiAhPT0gXCJjb25zdHJ1Y3RvclwiKSB7XG4gICAgICBsZXQgbmV3UHJvcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlXzk0MC5wcm90b3R5cGUsIG5hbWVfOTQyKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGXzk0MS5wcm90b3R5cGUsIG5hbWVfOTQyLCBuZXdQcm9wKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gRl85NDE7XG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O1FBQWdCLEssR0FBQSxLOzs7Ozs7OztBQUFULFNBQVMsS0FBVCxDQUFlLFVBQWYsRUFBMkIsVUFBM0IsRUFBdUM7QUFBQSxNQUN0QyxLQURzQztBQUFBOztBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBLElBQ3hCLFVBRHdCOztBQUU1QyxTQUFPLG1CQUFQLENBQTJCLFdBQVcsU0FBdEMsRUFBaUQsT0FBakQsQ0FBeUQsb0JBQVk7QUFDbkUsUUFBSSxhQUFhLGFBQWpCLEVBQWdDO0FBQzlCLFVBQUksVUFBVSxPQUFPLHdCQUFQLENBQWdDLFdBQVcsU0FBM0MsRUFBc0QsUUFBdEQsQ0FBZDtBQUNBLGFBQU8sY0FBUCxDQUFzQixNQUFNLFNBQTVCLEVBQXVDLFFBQXZDLEVBQWlELE9BQWpEO0FBQ0Q7QUFDRixHQUxEO0FBTUEsU0FBTyxLQUFQO0FBQ0QiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gbWl4aW4odGFyZ2V0Xzk1OCwgc291cmNlXzk1OSkge1xuICBjbGFzcyBGXzk2MCBleHRlbmRzIHRhcmdldF85NTgge31cbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlXzk1OS5wcm90b3R5cGUpLmZvckVhY2gobmFtZV85NjEgPT4ge1xuICAgIGlmIChuYW1lXzk2MSAhPT0gXCJjb25zdHJ1Y3RvclwiKSB7XG4gICAgICBsZXQgbmV3UHJvcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlXzk1OS5wcm90b3R5cGUsIG5hbWVfOTYxKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGXzk2MC5wcm90b3R5cGUsIG5hbWVfOTYxLCBuZXdQcm9wKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gRl85NjA7XG59XG4iXX0= \ No newline at end of file diff --git a/src/shift-reader.js b/src/shift-reader.js index bc16305d..fb2bb0c0 100644 --- a/src/shift-reader.js +++ b/src/shift-reader.js @@ -58,6 +58,9 @@ const binaryOps = ["+", "-", "*", "/", "%","<<", ">>", ">>>", "&", "|", "^", const unaryOps = ["++", "--", "~", "!", "delete", "void", "typeof", "yield", "throw", "new"]; +// Any -> Boolean +const isNotFalse = R.compose(R.not, R.curry(R.equals)(false)); + // List -> Boolean const isEmpty = R.whereEq({size: 0}); @@ -262,11 +265,27 @@ function lastEl(l) { return l[l.length - 1]; } +// NOTE: Does not mutate reader +function countSlashes(reader) { + // 0x5c === '\' + let index = reader.index; + let onSlash = () => reader.source.charCodeAt(index) === 0x5c; + let length = reader.source.length; + let count = onSlash() ? 1 : 0; + while((++index < length) && onSlash()) { + ++count; + } + return count; +} + +// Number of '\' characters -> Nesting Depth +const calcDepth = R.compose(Math.log2, R.inc); + export default class Reader extends Tokenizer { constructor(strings, context, replacements) { super(Array.isArray(strings) ? strings.join('') : strings); this.delimStack = new Map(); - this.insideSyntaxTemplate = [false]; + this.syntaxNestingDepth = 0; this.context = context; // setup splicing replacement array @@ -311,7 +330,7 @@ export default class Reader extends Tokenizer { if (isLeftDelimiter(tok)) { if (isLeftSyntax(tok)) { - this.insideSyntaxTemplate.push(true); + this.syntaxNestingDepth++; } let line = tok.slice.startLocation.line; let innerB = isLeftBrace(tok) ? isExprPrefix(line, b)(prefix) : true; @@ -330,8 +349,8 @@ export default class Reader extends Tokenizer { } let stx = new Syntax(tok, this.context); stack.push(stx); - if (lastEl(this.insideSyntaxTemplate) && isRightSyntax(tok)) { - this.insideSyntaxTemplate.pop(); + if (this.syntaxNestingDepth && isRightSyntax(tok)) { + this.syntaxNestingDepth--; } break; } else { @@ -369,7 +388,7 @@ export default class Reader extends Tokenizer { let startLocation = this.getLocation(); let start = this.index; this.index++; - if (lastEl(this.insideSyntaxTemplate)) { + if (this.syntaxNestingDepth === 1) { let slice = this.getSlice(start, startLocation); return { @@ -392,6 +411,28 @@ export default class Reader extends Tokenizer { type: TokenType.TEMPLATE, items: List(items) }; + } else if (this.syntaxNestingDepth && (charCode === 0x5c)) { // \ + let numSlashes = countSlashes(this); + let depth = calcDepth(numSlashes); + if (this.source.charCodeAt(this.index + numSlashes) === 0x60) { // ` + if (depth > this.syntaxNestingDepth) { + this.index += Math.pow(2, this.syntaxNestingDepth) - 1; + throw this.createILLEGAL(); + } else if (depth < this.syntaxNestingDepth - 1) { + this.index += numSlashes; + throw this.createILLEGAL(); + } + let isClosing = depth === this.syntaxNestingDepth - 1; + let startLocation = this.getLocation(); + let start = this.index; + let slice = this.getSlice(start, startLocation); + this.index += numSlashes + 1; + return { + type: isClosing ? RSYNTAX : LSYNTAX, + value: '\\'.repeat(numSlashes).concat('\''), + slice: slice + }; + } } else if (charCode === 35) { // # let startLocation = this.getLocation(); let start = this.index; From 0496c6580c98c531944d57d86a381f09e955193f Mon Sep 17 00:00:00 2001 From: Philip Blair Date: Thu, 2 Jun 2016 10:57:20 -0400 Subject: [PATCH 2/2] Rebuild post-merge --- dist/syntax.js | 190 +++++++------- dist/template-processor.js | 90 +++---- dist/term-expander.js | 510 ++++++++++++++++++------------------- dist/terms.js | 52 ++-- dist/token-expander.js | 202 +++++++-------- dist/transforms.js | 10 +- dist/utils.js | 28 +- 7 files changed, 541 insertions(+), 541 deletions(-) diff --git a/dist/syntax.js b/dist/syntax.js index 15efe45e..c282532b 100644 --- a/dist/syntax.js +++ b/dist/syntax.js @@ -28,13 +28,13 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var Just_645 = _ramdaFantasy.Maybe.Just; -var Nothing_646 = _ramdaFantasy.Maybe.Nothing; +var Just_653 = _ramdaFantasy.Maybe.Just; +var Nothing_654 = _ramdaFantasy.Maybe.Nothing; -function sizeDecending_647(a_648, b_649) { - if (a_648.scopes.size > b_649.scopes.size) { +function sizeDecending_655(a_656, b_657) { + if (a_656.scopes.size > b_657.scopes.size) { return -1; - } else if (b_649.scopes.size > a_648.scopes.size) { + } else if (b_657.scopes.size > a_656.scopes.size) { return 1; } else { return 0; @@ -42,13 +42,13 @@ function sizeDecending_647(a_648, b_649) { } var Syntax = function () { - function Syntax(token_650) { - var context_651 = arguments.length <= 1 || arguments[1] === undefined ? { bindings: new _bindingMap2.default(), scopeset: (0, _immutable.List)() } : arguments[1]; + function Syntax(token_658) { + var context_659 = arguments.length <= 1 || arguments[1] === undefined ? { bindings: new _bindingMap2.default(), scopeset: (0, _immutable.List)() } : arguments[1]; _classCallCheck(this, Syntax); - this.token = token_650; - this.context = { bindings: context_651.bindings, scopeset: context_651.scopeset }; + this.token = token_658; + this.context = { bindings: context_659.bindings, scopeset: context_659.scopeset }; Object.freeze(this.context); Object.freeze(this); } @@ -59,27 +59,27 @@ var Syntax = function () { if (this.context.scopeset.size === 0 || !(this.isIdentifier() || this.isKeyword())) { return this.token.value; } - var scope_679 = this.context.scopeset.last(); - var stxScopes_680 = this.context.scopeset; - var bindings_681 = this.context.bindings; - if (scope_679) { - var scopesetBindingList = bindings_681.get(this); + var scope_687 = this.context.scopeset.last(); + var stxScopes_688 = this.context.scopeset; + var bindings_689 = this.context.bindings; + if (scope_687) { + var scopesetBindingList = bindings_689.get(this); if (scopesetBindingList) { var biggestBindingPair = scopesetBindingList.filter(function (_ref) { var scopes = _ref.scopes; var binding = _ref.binding; - return scopes.isSubset(stxScopes_680); - }).sort(sizeDecending_647); + return scopes.isSubset(stxScopes_688); + }).sort(sizeDecending_655); if (biggestBindingPair.size >= 2 && biggestBindingPair.get(0).scopes.size === biggestBindingPair.get(1).scopes.size) { - var debugBase = "{" + stxScopes_680.map(function (s_682) { - return s_682.toString(); + var debugBase = "{" + stxScopes_688.map(function (s_690) { + return s_690.toString(); }).join(", ") + "}"; var debugAmbigousScopesets = biggestBindingPair.map(function (_ref2) { var scopes = _ref2.scopes; - return "{" + scopes.map(function (s_683) { - return s_683.toString(); + return "{" + scopes.map(function (s_691) { + return s_691.toString(); }).join(", ") + "}"; }).join(", "); throw new Error("Scopeset " + debugBase + " has ambiguous subsets " + debugAmbigousScopesets); @@ -102,11 +102,11 @@ var Syntax = function () { return this.token.str; } if (this.isTemplate()) { - return this.token.items.map(function (el_684) { - if (el_684 instanceof Syntax && el_684.isDelimiter()) { + return this.token.items.map(function (el_692) { + if (el_692 instanceof Syntax && el_692.isDelimiter()) { return "${...}"; } - return el_684.slice.text; + return el_692.slice.text; }).join(""); } return this.token.value; @@ -122,11 +122,11 @@ var Syntax = function () { } }, { key: "setLineNumber", - value: function setLineNumber(line_685) { - var newTok_686 = {}; + value: function setLineNumber(line_693) { + var newTok_694 = {}; if (this.isDelimiter()) { - newTok_686 = this.token.map(function (s_687) { - return s_687.setLineNumber(line_685); + newTok_694 = this.token.map(function (s_695) { + return s_695.setLineNumber(line_693); }); } else { var _iteratorNormalCompletion = true; @@ -137,7 +137,7 @@ var Syntax = function () { for (var _iterator = Object.keys(this.token)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var key = _step.value; - newTok_686[key] = this.token[key]; + newTok_694[key] = this.token[key]; } } catch (err) { _didIteratorError = true; @@ -154,10 +154,10 @@ var Syntax = function () { } } - (0, _errors.assert)(newTok_686.slice && newTok_686.slice.startLocation, "all tokens must have line info"); - newTok_686.slice.startLocation.line = line_685; + (0, _errors.assert)(newTok_694.slice && newTok_694.slice.startLocation, "all tokens must have line info"); + newTok_694.slice.startLocation.line = line_693; } - return new Syntax(newTok_686, this.context); + return new Syntax(newTok_694, this.context); } }, { key: "inner", @@ -167,45 +167,45 @@ var Syntax = function () { } }, { key: "addScope", - value: function addScope(scope_688, bindings_689) { - var options_690 = arguments.length <= 2 || arguments[2] === undefined ? { flip: false } : arguments[2]; + value: function addScope(scope_696, bindings_697) { + var options_698 = arguments.length <= 2 || arguments[2] === undefined ? { flip: false } : arguments[2]; - var token_691 = this.isDelimiter() ? this.token.map(function (s_693) { - return s_693.addScope(scope_688, bindings_689, options_690); + var token_699 = this.isDelimiter() ? this.token.map(function (s_701) { + return s_701.addScope(scope_696, bindings_697, options_698); }) : this.token; if (this.isTemplate()) { - token_691 = { type: this.token.type, items: token_691.items.map(function (it_694) { - if (it_694 instanceof Syntax && it_694.isDelimiter()) { - return it_694.addScope(scope_688, bindings_689, options_690); + token_699 = { type: this.token.type, items: token_699.items.map(function (it_702) { + if (it_702 instanceof Syntax && it_702.isDelimiter()) { + return it_702.addScope(scope_696, bindings_697, options_698); } - return it_694; + return it_702; }) }; } - var newScopeset_692 = void 0; - if (options_690.flip) { - var index = this.context.scopeset.indexOf(scope_688); + var newScopeset_700 = void 0; + if (options_698.flip) { + var index = this.context.scopeset.indexOf(scope_696); if (index !== -1) { - newScopeset_692 = this.context.scopeset.remove(index); + newScopeset_700 = this.context.scopeset.remove(index); } else { - newScopeset_692 = this.context.scopeset.push(scope_688); + newScopeset_700 = this.context.scopeset.push(scope_696); } } else { - newScopeset_692 = this.context.scopeset.push(scope_688); + newScopeset_700 = this.context.scopeset.push(scope_696); } - return new Syntax(token_691, { bindings: bindings_689, scopeset: newScopeset_692 }); + return new Syntax(token_699, { bindings: bindings_697, scopeset: newScopeset_700 }); } }, { key: "removeScope", - value: function removeScope(scope_695) { - var token_696 = this.isDelimiter() ? this.token.map(function (s_699) { - return s_699.removeScope(scope_695); + value: function removeScope(scope_703) { + var token_704 = this.isDelimiter() ? this.token.map(function (s_707) { + return s_707.removeScope(scope_703); }) : this.token; - var newScopeset_697 = this.context.scopeset; - var index_698 = this.context.scopeset.indexOf(scope_695); - if (index_698 !== -1) { - newScopeset_697 = this.context.scopeset.remove(index_698); + var newScopeset_705 = this.context.scopeset; + var index_706 = this.context.scopeset.indexOf(scope_703); + if (index_706 !== -1) { + newScopeset_705 = this.context.scopeset.remove(index_706); } - return new Syntax(token_696, { bindings: this.context.bindings, scopeset: newScopeset_697 }); + return new Syntax(token_704, { bindings: this.context.bindings, scopeset: newScopeset_705 }); } }, { key: "isIdentifier", @@ -291,8 +291,8 @@ var Syntax = function () { key: "toString", value: function toString() { if (this.isDelimiter()) { - return this.token.map(function (s_700) { - return s_700.toString(); + return this.token.map(function (s_708) { + return s_708.toString(); }).join(" "); } if (this.isStringLiteral()) { @@ -305,86 +305,86 @@ var Syntax = function () { } }], [{ key: "of", - value: function of(token_652) { - var stx_653 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function of(token_660) { + var stx_661 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax(token_652, stx_653.context); + return new Syntax(token_660, stx_661.context); } }, { key: "fromNull", value: function fromNull() { - var stx_654 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + var stx_662 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - return new Syntax({ type: _tokenizer.TokenType.NULL, value: null }, stx_654.context); + return new Syntax({ type: _tokenizer.TokenType.NULL, value: null }, stx_662.context); } }, { key: "fromNumber", - value: function fromNumber(value_655) { - var stx_656 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromNumber(value_663) { + var stx_664 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax({ type: _tokenizer.TokenType.NUMBER, value: value_655 }, stx_656.context); + return new Syntax({ type: _tokenizer.TokenType.NUMBER, value: value_663 }, stx_664.context); } }, { key: "fromString", - value: function fromString(value_657) { - var stx_658 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromString(value_665) { + var stx_666 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax({ type: _tokenizer.TokenType.STRING, str: value_657 }, stx_658.context); + return new Syntax({ type: _tokenizer.TokenType.STRING, str: value_665 }, stx_666.context); } }, { key: "fromPunctuator", - value: function fromPunctuator(value_659) { - var stx_660 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromPunctuator(value_667) { + var stx_668 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax({ type: { klass: _tokenizer.TokenClass.Punctuator, name: value_659 }, value: value_659 }, stx_660.context); + return new Syntax({ type: { klass: _tokenizer.TokenClass.Punctuator, name: value_667 }, value: value_667 }, stx_668.context); } }, { key: "fromKeyword", - value: function fromKeyword(value_661) { - var stx_662 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromKeyword(value_669) { + var stx_670 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax({ type: { klass: _tokenizer.TokenClass.Keyword, name: value_661 }, value: value_661 }, stx_662.context); + return new Syntax({ type: { klass: _tokenizer.TokenClass.Keyword, name: value_669 }, value: value_669 }, stx_670.context); } }, { key: "fromIdentifier", - value: function fromIdentifier(value_663) { - var stx_664 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromIdentifier(value_671) { + var stx_672 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax({ type: _tokenizer.TokenType.IDENTIFIER, value: value_663 }, stx_664.context); + return new Syntax({ type: _tokenizer.TokenType.IDENTIFIER, value: value_671 }, stx_672.context); } }, { key: "fromRegularExpression", - value: function fromRegularExpression(value_665) { - var stx_666 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromRegularExpression(value_673) { + var stx_674 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - return new Syntax({ type: _tokenizer.TokenType.REGEXP, value: value_665 }, stx_666.context); + return new Syntax({ type: _tokenizer.TokenType.REGEXP, value: value_673 }, stx_674.context); } }, { key: "fromBraces", - value: function fromBraces(inner_667) { - var stx_668 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromBraces(inner_675) { + var stx_676 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var left_669 = new Syntax({ type: _tokenizer.TokenType.LBRACE, value: "{" }); - var right_670 = new Syntax({ type: _tokenizer.TokenType.RBRACE, value: "}" }); - return new Syntax(_immutable.List.of(left_669).concat(inner_667).push(right_670), stx_668.context); + var left_677 = new Syntax({ type: _tokenizer.TokenType.LBRACE, value: "{" }); + var right_678 = new Syntax({ type: _tokenizer.TokenType.RBRACE, value: "}" }); + return new Syntax(_immutable.List.of(left_677).concat(inner_675).push(right_678), stx_676.context); } }, { key: "fromBrackets", - value: function fromBrackets(inner_671) { - var stx_672 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromBrackets(inner_679) { + var stx_680 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var left_673 = new Syntax({ type: _tokenizer.TokenType.LBRACK, value: "[" }); - var right_674 = new Syntax({ type: _tokenizer.TokenType.RBRACK, value: "]" }); - return new Syntax(_immutable.List.of(left_673).concat(inner_671).push(right_674), stx_672.context); + var left_681 = new Syntax({ type: _tokenizer.TokenType.LBRACK, value: "[" }); + var right_682 = new Syntax({ type: _tokenizer.TokenType.RBRACK, value: "]" }); + return new Syntax(_immutable.List.of(left_681).concat(inner_679).push(right_682), stx_680.context); } }, { key: "fromParens", - value: function fromParens(inner_675) { - var stx_676 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + value: function fromParens(inner_683) { + var stx_684 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var left_677 = new Syntax({ type: _tokenizer.TokenType.LPAREN, value: "(" }); - var right_678 = new Syntax({ type: _tokenizer.TokenType.RPAREN, value: ")" }); - return new Syntax(_immutable.List.of(left_677).concat(inner_675).push(right_678), stx_676.context); + var left_685 = new Syntax({ type: _tokenizer.TokenType.LPAREN, value: "(" }); + var right_686 = new Syntax({ type: _tokenizer.TokenType.RPAREN, value: ")" }); + return new Syntax(_immutable.List.of(left_685).concat(inner_683).push(right_686), stx_684.context); } }]); @@ -392,4 +392,4 @@ var Syntax = function () { }(); exports.default = Syntax; -//# sourceMappingURL=data:application/json;base64,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QUFRLFFBQVIsRUFBa0IsTUFBbEIsQ0FBeUIsU0FBekIsRUFBb0MsSUFBcEMsQ0FBeUMsU0FBekMsQ0FBWCxFQUFnRSxRQUFRLE9BQXhFLENBQVA7QUFDRDs7O2lDQUNtQixTLEVBQXlCO0FBQUEsVUFBZCxPQUFjLHlEQUFKLEVBQUk7O0FBQzNDLFVBQUksV0FBVyxJQUFJLE1BQUosQ0FBVyxFQUFDLE1BQU0scUJBQVUsTUFBakIsRUFBeUIsT0FBTyxHQUFoQyxFQUFYLENBQWY7QUFDQSxVQUFJLFlBQVksSUFBSSxNQUFKLENBQVcsRUFBQyxNQUFNLHFCQUFVLE1BQWpCLEVBQXlCLE9BQU8sR0FBaEMsRUFBWCxDQUFoQjtBQUNBLGFBQU8sSUFBSSxNQUFKLENBQVcsZ0JBQUssRUFBTCxDQUFRLFFBQVIsRUFBa0IsTUFBbEIsQ0FBeUIsU0FBekIsRUFBb0MsSUFBcEMsQ0FBeUMsU0FBekMsQ0FBWCxFQUFnRSxRQUFRLE9BQXhFLENBQVA7QUFDRDs7OytCQUNpQixTLEVBQXlCO0FBQUEsVUFBZCxPQUFjLHlEQUFKLEVBQUk7O0FBQ3pDLFVBQUksV0FBVyxJQUFJLE1BQUosQ0FBVyxFQUFDLE1BQU0scUJBQVUsTUFBakIsRUFBeUIsT0FBTyxHQUFoQyxFQUFYLENBQWY7QUFDQSxVQUFJLFlBQVksSUFBSSxNQUFKLENBQVcsRUFBQyxNQUFNLHFCQUFVLE1BQWpCLEVBQXlCLE9BQU8sR0FBaEMsRUFBWCxDQUFoQjtBQUNBLGFBQU8sSUFBSSxNQUFKLENBQVcsZ0JBQUssRUFBTCxDQUFRLFFBQVIsRUFBa0IsTUFBbEIsQ0FBeUIsU0FBekIsRUFBb0MsSUFBcEMsQ0FBeUMsU0FBekMsQ0FBWCxFQUFnRSxRQUFRLE9BQXhFLENBQVA7QUFDRDs7Ozs7O2tCQTdDa0IsTSIsImZpbGUiOiJzeW50YXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xpc3R9IGZyb20gXCJpbW11dGFibGVcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCBCaW5kaW5nTWFwIGZyb20gXCIuL2JpbmRpbmctbWFwXCI7XG5pbXBvcnQge01heWJlfSBmcm9tIFwicmFtZGEtZmFudGFzeVwiO1xuaW1wb3J0ICAqIGFzIF8gZnJvbSBcInJhbWRhXCI7XG5jb25zdCBKdXN0XzY0NSA9IE1heWJlLkp1c3Q7XG5jb25zdCBOb3RoaW5nXzY0NiA9IE1heWJlLk5vdGhpbmc7XG5pbXBvcnQge1Rva2VuVHlwZSwgVG9rZW5DbGFzc30gZnJvbSBcInNoaWZ0LXBhcnNlci9kaXN0L3Rva2VuaXplclwiO1xuZnVuY3Rpb24gc2l6ZURlY2VuZGluZ182NDcoYV82NDgsIGJfNjQ5KSB7XG4gIGlmIChhXzY0OC5zY29wZXMuc2l6ZSA+IGJfNjQ5LnNjb3Blcy5zaXplKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9IGVsc2UgaWYgKGJfNjQ5LnNjb3Blcy5zaXplID4gYV82NDguc2NvcGVzLnNpemUpIHtcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ludGF4IHtcbiAgY29uc3RydWN0b3IodG9rZW5fNjUwLCBjb250ZXh0XzY1MSA9IHtiaW5kaW5nczogbmV3IEJpbmRpbmdNYXAsIHNjb3Blc2V0OiBMaXN0KCl9KSB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuXzY1MDtcbiAgICB0aGlzLmNvbnRleHQgPSB7YmluZGluZ3M6IGNvbnRleHRfNjUxLmJpbmRpbmdzLCBzY29wZXNldDogY29udGV4dF82NTEuc2NvcGVzZXR9O1xuICAgIE9iamVjdC5mcmVlemUodGhpcy5jb250ZXh0KTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xuICB9XG4gIHN0YXRpYyBvZih0b2tlbl82NTIsIHN0eF82NTMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgU3ludGF4KHRva2VuXzY1Miwgc3R4XzY1My5jb250ZXh0KTtcbiAgfVxuICBzdGF0aWMgZnJvbU51bGwoc3R4XzY1NCA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoe3R5cGU6IFRva2VuVHlwZS5OVUxMLCB2YWx1ZTogbnVsbH0sIHN0eF82NTQuY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21OdW1iZXIodmFsdWVfNjU1LCBzdHhfNjU2ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLk5VTUJFUiwgdmFsdWU6IHZhbHVlXzY1NX0sIHN0eF82NTYuY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21TdHJpbmcodmFsdWVfNjU3LCBzdHhfNjU4ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlNUUklORywgc3RyOiB2YWx1ZV82NTd9LCBzdHhfNjU4LmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tUHVuY3R1YXRvcih2YWx1ZV82NTksIHN0eF82NjAgPSB7fSkge1xuICAgIHJldHVybiBuZXcgU3ludGF4KHt0eXBlOiB7a2xhc3M6IFRva2VuQ2xhc3MuUHVuY3R1YXRvciwgbmFtZTogdmFsdWVfNjU5fSwgdmFsdWU6IHZhbHVlXzY1OX0sIHN0eF82NjAuY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21LZXl3b3JkKHZhbHVlXzY2MSwgc3R4XzY2MiA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoe3R5cGU6IHtrbGFzczogVG9rZW5DbGFzcy5LZXl3b3JkLCBuYW1lOiB2YWx1ZV82NjF9LCB2YWx1ZTogdmFsdWVfNjYxfSwgc3R4XzY2Mi5jb250ZXh0KTtcbiAgfVxuICBzdGF0aWMgZnJvbUlkZW50aWZpZXIodmFsdWVfNjYzLCBzdHhfNjY0ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLklERU5USUZJRVIsIHZhbHVlOiB2YWx1ZV82NjN9LCBzdHhfNjY0LmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tUmVndWxhckV4cHJlc3Npb24odmFsdWVfNjY1LCBzdHhfNjY2ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlJFR0VYUCwgdmFsdWU6IHZhbHVlXzY2NX0sIHN0eF82NjYuY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21CcmFjZXMoaW5uZXJfNjY3LCBzdHhfNjY4ID0ge30pIHtcbiAgICBsZXQgbGVmdF82NjkgPSBuZXcgU3ludGF4KHt0eXBlOiBUb2tlblR5cGUuTEJSQUNFLCB2YWx1ZTogXCJ7XCJ9KTtcbiAgICBsZXQgcmlnaHRfNjcwID0gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlJCUkFDRSwgdmFsdWU6IFwifVwifSk7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoTGlzdC5vZihsZWZ0XzY2OSkuY29uY2F0KGlubmVyXzY2NykucHVzaChyaWdodF82NzApLCBzdHhfNjY4LmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tQnJhY2tldHMoaW5uZXJfNjcxLCBzdHhfNjcyID0ge30pIHtcbiAgICBsZXQgbGVmdF82NzMgPSBuZXcgU3ludGF4KHt0eXBlOiBUb2tlblR5cGUuTEJSQUNLLCB2YWx1ZTogXCJbXCJ9KTtcbiAgICBsZXQgcmlnaHRfNjc0ID0gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlJCUkFDSywgdmFsdWU6IFwiXVwifSk7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoTGlzdC5vZihsZWZ0XzY3MykuY29uY2F0KGlubmVyXzY3MSkucHVzaChyaWdodF82NzQpLCBzdHhfNjcyLmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tUGFyZW5zKGlubmVyXzY3NSwgc3R4XzY3NiA9IHt9KSB7XG4gICAgbGV0IGxlZnRfNjc3ID0gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLkxQQVJFTiwgdmFsdWU6IFwiKFwifSk7XG4gICAgbGV0IHJpZ2h0XzY3OCA9IG5ldyBTeW50YXgoe3R5cGU6IFRva2VuVHlwZS5SUEFSRU4sIHZhbHVlOiBcIilcIn0pO1xuICAgIHJldHVybiBuZXcgU3ludGF4KExpc3Qub2YobGVmdF82NzcpLmNvbmNhdChpbm5lcl82NzUpLnB1c2gocmlnaHRfNjc4KSwgc3R4XzY3Ni5jb250ZXh0KTtcbiAgfVxuICByZXNvbHZlKCkge1xuICAgIGlmICh0aGlzLmNvbnRleHQuc2NvcGVzZXQuc2l6ZSA9PT0gMCB8fCAhKHRoaXMuaXNJZGVudGlmaWVyKCkgfHwgdGhpcy5pc0tleXdvcmQoKSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLnZhbHVlO1xuICAgIH1cbiAgICBsZXQgc2NvcGVfNjc5ID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0Lmxhc3QoKTtcbiAgICBsZXQgc3R4U2NvcGVzXzY4MCA9IHRoaXMuY29udGV4dC5zY29wZXNldDtcbiAgICBsZXQgYmluZGluZ3NfNjgxID0gdGhpcy5jb250ZXh0LmJpbmRpbmdzO1xuICAgIGlmIChzY29wZV82NzkpIHtcbiAgICAgIGxldCBzY29wZXNldEJpbmRpbmdMaXN0ID0gYmluZGluZ3NfNjgxLmdldCh0aGlzKTtcbiAgICAgIGlmIChzY29wZXNldEJpbmRpbmdMaXN0KSB7XG4gICAgICAgIGxldCBiaWdnZXN0QmluZGluZ1BhaXIgPSBzY29wZXNldEJpbmRpbmdMaXN0LmZpbHRlcigoe3Njb3BlcywgYmluZGluZ30pID0+IHtcbiAgICAgICAgICByZXR1cm4gc2NvcGVzLmlzU3Vic2V0KHN0eFNjb3Blc182ODApO1xuICAgICAgICB9KS5zb3J0KHNpemVEZWNlbmRpbmdfNjQ3KTtcbiAgICAgICAgaWYgKGJpZ2dlc3RCaW5kaW5nUGFpci5zaXplID49IDIgJiYgYmlnZ2VzdEJpbmRpbmdQYWlyLmdldCgwKS5zY29wZXMuc2l6ZSA9PT0gYmlnZ2VzdEJpbmRpbmdQYWlyLmdldCgxKS5zY29wZXMuc2l6ZSkge1xuICAgICAgICAgIGxldCBkZWJ1Z0Jhc2UgPSBcIntcIiArIHN0eFNjb3Blc182ODAubWFwKHNfNjgyID0+IHNfNjgyLnRvU3RyaW5nKCkpLmpvaW4oXCIsIFwiKSArIFwifVwiO1xuICAgICAgICAgIGxldCBkZWJ1Z0FtYmlnb3VzU2NvcGVzZXRzID0gYmlnZ2VzdEJpbmRpbmdQYWlyLm1hcCgoe3Njb3Blc30pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBcIntcIiArIHNjb3Blcy5tYXAoc182ODMgPT4gc182ODMudG9TdHJpbmcoKSkuam9pbihcIiwgXCIpICsgXCJ9XCI7XG4gICAgICAgICAgfSkuam9pbihcIiwgXCIpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNjb3Blc2V0IFwiICsgZGVidWdCYXNlICsgXCIgaGFzIGFtYmlndW91cyBzdWJzZXRzIFwiICsgZGVidWdBbWJpZ291c1Njb3Blc2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoYmlnZ2VzdEJpbmRpbmdQYWlyLnNpemUgIT09IDApIHtcbiAgICAgICAgICBsZXQgYmluZGluZ1N0ciA9IGJpZ2dlc3RCaW5kaW5nUGFpci5nZXQoMCkuYmluZGluZy50b1N0cmluZygpO1xuICAgICAgICAgIGlmIChNYXliZS5pc0p1c3QoYmlnZ2VzdEJpbmRpbmdQYWlyLmdldCgwKS5hbGlhcykpIHtcbiAgICAgICAgICAgIHJldHVybiBiaWdnZXN0QmluZGluZ1BhaXIuZ2V0KDApLmFsaWFzLmdldE9yRWxzZShudWxsKS5yZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiaW5kaW5nU3RyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRva2VuLnZhbHVlO1xuICB9XG4gIHZhbCgpIHtcbiAgICBhc3NlcnQoIXRoaXMuaXNEZWxpbWl0ZXIoKSwgXCJjYW5ub3QgZ2V0IHRoZSB2YWwgb2YgYSBkZWxpbWl0ZXJcIik7XG4gICAgaWYgKHRoaXMuaXNTdHJpbmdMaXRlcmFsKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLnN0cjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNUZW1wbGF0ZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy50b2tlbi5pdGVtcy5tYXAoZWxfNjg0ID0+IHtcbiAgICAgICAgaWYgKGVsXzY4NCBpbnN0YW5jZW9mIFN5bnRheCAmJiBlbF82ODQuaXNEZWxpbWl0ZXIoKSkge1xuICAgICAgICAgIHJldHVybiBcIiR7Li4ufVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbF82ODQuc2xpY2UudGV4dDtcbiAgICAgIH0pLmpvaW4oXCJcIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRva2VuLnZhbHVlO1xuICB9XG4gIGxpbmVOdW1iZXIoKSB7XG4gICAgaWYgKCF0aGlzLmlzRGVsaW1pdGVyKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLnNsaWNlLnN0YXJ0TG9jYXRpb24ubGluZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudG9rZW4uZ2V0KDApLmxpbmVOdW1iZXIoKTtcbiAgICB9XG4gIH1cbiAgc2V0TGluZU51bWJlcihsaW5lXzY4NSkge1xuICAgIGxldCBuZXdUb2tfNjg2ID0ge307XG4gICAgaWYgKHRoaXMuaXNEZWxpbWl0ZXIoKSkge1xuICAgICAgbmV3VG9rXzY4NiA9IHRoaXMudG9rZW4ubWFwKHNfNjg3ID0+IHNfNjg3LnNldExpbmVOdW1iZXIobGluZV82ODUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMudG9rZW4pKSB7XG4gICAgICAgIG5ld1Rva182ODZba2V5XSA9IHRoaXMudG9rZW5ba2V5XTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChuZXdUb2tfNjg2LnNsaWNlICYmIG5ld1Rva182ODYuc2xpY2Uuc3RhcnRMb2NhdGlvbiwgXCJhbGwgdG9rZW5zIG11c3QgaGF2ZSBsaW5lIGluZm9cIik7XG4gICAgICBuZXdUb2tfNjg2LnNsaWNlLnN0YXJ0TG9jYXRpb24ubGluZSA9IGxpbmVfNjg1O1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFN5bnRheChuZXdUb2tfNjg2LCB0aGlzLmNvbnRleHQpO1xuICB9XG4gIGlubmVyKCkge1xuICAgIGFzc2VydCh0aGlzLmlzRGVsaW1pdGVyKCksIFwiY2FuIG9ubHkgZ2V0IHRoZSBpbm5lciBvZiBhIGRlbGltaXRlclwiKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5zbGljZSgxLCB0aGlzLnRva2VuLnNpemUgLSAxKTtcbiAgfVxuICBhZGRTY29wZShzY29wZV82ODgsIGJpbmRpbmdzXzY4OSwgb3B0aW9uc182OTAgPSB7ZmxpcDogZmFsc2V9KSB7XG4gICAgbGV0IHRva2VuXzY5MSA9IHRoaXMuaXNEZWxpbWl0ZXIoKSA/IHRoaXMudG9rZW4ubWFwKHNfNjkzID0+IHNfNjkzLmFkZFNjb3BlKHNjb3BlXzY4OCwgYmluZGluZ3NfNjg5LCBvcHRpb25zXzY5MCkpIDogdGhpcy50b2tlbjtcbiAgICBpZiAodGhpcy5pc1RlbXBsYXRlKCkpIHtcbiAgICAgIHRva2VuXzY5MSA9IHt0eXBlOiB0aGlzLnRva2VuLnR5cGUsIGl0ZW1zOiB0b2tlbl82OTEuaXRlbXMubWFwKGl0XzY5NCA9PiB7XG4gICAgICAgIGlmIChpdF82OTQgaW5zdGFuY2VvZiBTeW50YXggJiYgaXRfNjk0LmlzRGVsaW1pdGVyKCkpIHtcbiAgICAgICAgICByZXR1cm4gaXRfNjk0LmFkZFNjb3BlKHNjb3BlXzY4OCwgYmluZGluZ3NfNjg5LCBvcHRpb25zXzY5MCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0XzY5NDtcbiAgICAgIH0pfTtcbiAgICB9XG4gICAgbGV0IG5ld1Njb3Blc2V0XzY5MjtcbiAgICBpZiAob3B0aW9uc182OTAuZmxpcCkge1xuICAgICAgbGV0IGluZGV4ID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0LmluZGV4T2Yoc2NvcGVfNjg4KTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgbmV3U2NvcGVzZXRfNjkyID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0LnJlbW92ZShpbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTY29wZXNldF82OTIgPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQucHVzaChzY29wZV82ODgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTY29wZXNldF82OTIgPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQucHVzaChzY29wZV82ODgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFN5bnRheCh0b2tlbl82OTEsIHtiaW5kaW5nczogYmluZGluZ3NfNjg5LCBzY29wZXNldDogbmV3U2NvcGVzZXRfNjkyfSk7XG4gIH1cbiAgcmVtb3ZlU2NvcGUoc2NvcGVfNjk1KSB7XG4gICAgbGV0IHRva2VuXzY5NiA9IHRoaXMuaXNEZWxpbWl0ZXIoKSA/IHRoaXMudG9rZW4ubWFwKHNfNjk5ID0+IHNfNjk5LnJlbW92ZVNjb3BlKHNjb3BlXzY5NSkpIDogdGhpcy50b2tlbjtcbiAgICBsZXQgbmV3U2NvcGVzZXRfNjk3ID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0O1xuICAgIGxldCBpbmRleF82OTggPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQuaW5kZXhPZihzY29wZV82OTUpO1xuICAgIGlmIChpbmRleF82OTggIT09IC0xKSB7XG4gICAgICBuZXdTY29wZXNldF82OTcgPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQucmVtb3ZlKGluZGV4XzY5OCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgU3ludGF4KHRva2VuXzY5Niwge2JpbmRpbmdzOiB0aGlzLmNvbnRleHQuYmluZGluZ3MsIHNjb3Blc2V0OiBuZXdTY29wZXNldF82OTd9KTtcbiAgfVxuICBpc0lkZW50aWZpZXIoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlLmtsYXNzID09PSBUb2tlbkNsYXNzLklkZW50O1xuICB9XG4gIGlzQXNzaWduKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkFTU0lHTjtcbiAgfVxuICBpc0Jvb2xlYW5MaXRlcmFsKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlRSVUUgfHwgdGhpcy50b2tlbi50eXBlID09PSBUb2tlblR5cGUuRkFMU0U7XG4gIH1cbiAgaXNLZXl3b3JkKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZS5rbGFzcyA9PT0gVG9rZW5DbGFzcy5LZXl3b3JkO1xuICB9XG4gIGlzTnVsbExpdGVyYWwoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlID09PSBUb2tlblR5cGUuTlVMTDtcbiAgfVxuICBpc051bWVyaWNMaXRlcmFsKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZS5rbGFzcyA9PT0gVG9rZW5DbGFzcy5OdW1lcmljTGl0ZXJhbDtcbiAgfVxuICBpc1B1bmN0dWF0b3IoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlLmtsYXNzID09PSBUb2tlbkNsYXNzLlB1bmN0dWF0b3I7XG4gIH1cbiAgaXNTdHJpbmdMaXRlcmFsKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZS5rbGFzcyA9PT0gVG9rZW5DbGFzcy5TdHJpbmdMaXRlcmFsO1xuICB9XG4gIGlzUmVndWxhckV4cHJlc3Npb24oKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlLmtsYXNzID09PSBUb2tlbkNsYXNzLlJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG4gIGlzVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlID09PSBUb2tlblR5cGUuVEVNUExBVEU7XG4gIH1cbiAgaXNEZWxpbWl0ZXIoKSB7XG4gICAgcmV0dXJuIExpc3QuaXNMaXN0KHRoaXMudG9rZW4pO1xuICB9XG4gIGlzUGFyZW5zKCkge1xuICAgIHJldHVybiB0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi5nZXQoMCkudG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkxQQVJFTjtcbiAgfVxuICBpc0JyYWNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4uZ2V0KDApLnRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5MQlJBQ0U7XG4gIH1cbiAgaXNCcmFja2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4uZ2V0KDApLnRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5MQlJBQ0s7XG4gIH1cbiAgaXNTeW50YXhUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4uZ2V0KDApLnZhbCgpID09PSBcIiNgXCI7XG4gIH1cbiAgaXNFT0YoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlID09PSBUb2tlblR5cGUuRU9TO1xuICB9XG4gIHRvU3RyaW5nKCkge1xuICAgIGlmICh0aGlzLmlzRGVsaW1pdGVyKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLm1hcChzXzcwMCA9PiBzXzcwMC50b1N0cmluZygpKS5qb2luKFwiIFwiKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTdHJpbmdMaXRlcmFsKCkpIHtcbiAgICAgIHJldHVybiBcIidcIiArIHRoaXMudG9rZW4uc3RyO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1RlbXBsYXRlKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50b2tlbi52YWx1ZTtcbiAgfVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,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QUFRLFFBQVIsRUFBa0IsTUFBbEIsQ0FBeUIsU0FBekIsRUFBb0MsSUFBcEMsQ0FBeUMsU0FBekMsQ0FBWCxFQUFnRSxRQUFRLE9BQXhFLENBQVA7QUFDRDs7O2lDQUNtQixTLEVBQXlCO0FBQUEsVUFBZCxPQUFjLHlEQUFKLEVBQUk7O0FBQzNDLFVBQUksV0FBVyxJQUFJLE1BQUosQ0FBVyxFQUFDLE1BQU0scUJBQVUsTUFBakIsRUFBeUIsT0FBTyxHQUFoQyxFQUFYLENBQWY7QUFDQSxVQUFJLFlBQVksSUFBSSxNQUFKLENBQVcsRUFBQyxNQUFNLHFCQUFVLE1BQWpCLEVBQXlCLE9BQU8sR0FBaEMsRUFBWCxDQUFoQjtBQUNBLGFBQU8sSUFBSSxNQUFKLENBQVcsZ0JBQUssRUFBTCxDQUFRLFFBQVIsRUFBa0IsTUFBbEIsQ0FBeUIsU0FBekIsRUFBb0MsSUFBcEMsQ0FBeUMsU0FBekMsQ0FBWCxFQUFnRSxRQUFRLE9BQXhFLENBQVA7QUFDRDs7OytCQUNpQixTLEVBQXlCO0FBQUEsVUFBZCxPQUFjLHlEQUFKLEVBQUk7O0FBQ3pDLFVBQUksV0FBVyxJQUFJLE1BQUosQ0FBVyxFQUFDLE1BQU0scUJBQVUsTUFBakIsRUFBeUIsT0FBTyxHQUFoQyxFQUFYLENBQWY7QUFDQSxVQUFJLFlBQVksSUFBSSxNQUFKLENBQVcsRUFBQyxNQUFNLHFCQUFVLE1BQWpCLEVBQXlCLE9BQU8sR0FBaEMsRUFBWCxDQUFoQjtBQUNBLGFBQU8sSUFBSSxNQUFKLENBQVcsZ0JBQUssRUFBTCxDQUFRLFFBQVIsRUFBa0IsTUFBbEIsQ0FBeUIsU0FBekIsRUFBb0MsSUFBcEMsQ0FBeUMsU0FBekMsQ0FBWCxFQUFnRSxRQUFRLE9BQXhFLENBQVA7QUFDRDs7Ozs7O2tCQTdDa0IsTSIsImZpbGUiOiJzeW50YXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xpc3R9IGZyb20gXCJpbW11dGFibGVcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCBCaW5kaW5nTWFwIGZyb20gXCIuL2JpbmRpbmctbWFwXCI7XG5pbXBvcnQge01heWJlfSBmcm9tIFwicmFtZGEtZmFudGFzeVwiO1xuaW1wb3J0ICAqIGFzIF8gZnJvbSBcInJhbWRhXCI7XG5jb25zdCBKdXN0XzY1MyA9IE1heWJlLkp1c3Q7XG5jb25zdCBOb3RoaW5nXzY1NCA9IE1heWJlLk5vdGhpbmc7XG5pbXBvcnQge1Rva2VuVHlwZSwgVG9rZW5DbGFzc30gZnJvbSBcInNoaWZ0LXBhcnNlci9kaXN0L3Rva2VuaXplclwiO1xuZnVuY3Rpb24gc2l6ZURlY2VuZGluZ182NTUoYV82NTYsIGJfNjU3KSB7XG4gIGlmIChhXzY1Ni5zY29wZXMuc2l6ZSA+IGJfNjU3LnNjb3Blcy5zaXplKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9IGVsc2UgaWYgKGJfNjU3LnNjb3Blcy5zaXplID4gYV82NTYuc2NvcGVzLnNpemUpIHtcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ludGF4IHtcbiAgY29uc3RydWN0b3IodG9rZW5fNjU4LCBjb250ZXh0XzY1OSA9IHtiaW5kaW5nczogbmV3IEJpbmRpbmdNYXAsIHNjb3Blc2V0OiBMaXN0KCl9KSB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuXzY1ODtcbiAgICB0aGlzLmNvbnRleHQgPSB7YmluZGluZ3M6IGNvbnRleHRfNjU5LmJpbmRpbmdzLCBzY29wZXNldDogY29udGV4dF82NTkuc2NvcGVzZXR9O1xuICAgIE9iamVjdC5mcmVlemUodGhpcy5jb250ZXh0KTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xuICB9XG4gIHN0YXRpYyBvZih0b2tlbl82NjAsIHN0eF82NjEgPSB7fSkge1xuICAgIHJldHVybiBuZXcgU3ludGF4KHRva2VuXzY2MCwgc3R4XzY2MS5jb250ZXh0KTtcbiAgfVxuICBzdGF0aWMgZnJvbU51bGwoc3R4XzY2MiA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoe3R5cGU6IFRva2VuVHlwZS5OVUxMLCB2YWx1ZTogbnVsbH0sIHN0eF82NjIuY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21OdW1iZXIodmFsdWVfNjYzLCBzdHhfNjY0ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLk5VTUJFUiwgdmFsdWU6IHZhbHVlXzY2M30sIHN0eF82NjQuY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21TdHJpbmcodmFsdWVfNjY1LCBzdHhfNjY2ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlNUUklORywgc3RyOiB2YWx1ZV82NjV9LCBzdHhfNjY2LmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tUHVuY3R1YXRvcih2YWx1ZV82NjcsIHN0eF82NjggPSB7fSkge1xuICAgIHJldHVybiBuZXcgU3ludGF4KHt0eXBlOiB7a2xhc3M6IFRva2VuQ2xhc3MuUHVuY3R1YXRvciwgbmFtZTogdmFsdWVfNjY3fSwgdmFsdWU6IHZhbHVlXzY2N30sIHN0eF82NjguY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21LZXl3b3JkKHZhbHVlXzY2OSwgc3R4XzY3MCA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoe3R5cGU6IHtrbGFzczogVG9rZW5DbGFzcy5LZXl3b3JkLCBuYW1lOiB2YWx1ZV82Njl9LCB2YWx1ZTogdmFsdWVfNjY5fSwgc3R4XzY3MC5jb250ZXh0KTtcbiAgfVxuICBzdGF0aWMgZnJvbUlkZW50aWZpZXIodmFsdWVfNjcxLCBzdHhfNjcyID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLklERU5USUZJRVIsIHZhbHVlOiB2YWx1ZV82NzF9LCBzdHhfNjcyLmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tUmVndWxhckV4cHJlc3Npb24odmFsdWVfNjczLCBzdHhfNjc0ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlJFR0VYUCwgdmFsdWU6IHZhbHVlXzY3M30sIHN0eF82NzQuY29udGV4dCk7XG4gIH1cbiAgc3RhdGljIGZyb21CcmFjZXMoaW5uZXJfNjc1LCBzdHhfNjc2ID0ge30pIHtcbiAgICBsZXQgbGVmdF82NzcgPSBuZXcgU3ludGF4KHt0eXBlOiBUb2tlblR5cGUuTEJSQUNFLCB2YWx1ZTogXCJ7XCJ9KTtcbiAgICBsZXQgcmlnaHRfNjc4ID0gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlJCUkFDRSwgdmFsdWU6IFwifVwifSk7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoTGlzdC5vZihsZWZ0XzY3NykuY29uY2F0KGlubmVyXzY3NSkucHVzaChyaWdodF82NzgpLCBzdHhfNjc2LmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tQnJhY2tldHMoaW5uZXJfNjc5LCBzdHhfNjgwID0ge30pIHtcbiAgICBsZXQgbGVmdF82ODEgPSBuZXcgU3ludGF4KHt0eXBlOiBUb2tlblR5cGUuTEJSQUNLLCB2YWx1ZTogXCJbXCJ9KTtcbiAgICBsZXQgcmlnaHRfNjgyID0gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLlJCUkFDSywgdmFsdWU6IFwiXVwifSk7XG4gICAgcmV0dXJuIG5ldyBTeW50YXgoTGlzdC5vZihsZWZ0XzY4MSkuY29uY2F0KGlubmVyXzY3OSkucHVzaChyaWdodF82ODIpLCBzdHhfNjgwLmNvbnRleHQpO1xuICB9XG4gIHN0YXRpYyBmcm9tUGFyZW5zKGlubmVyXzY4Mywgc3R4XzY4NCA9IHt9KSB7XG4gICAgbGV0IGxlZnRfNjg1ID0gbmV3IFN5bnRheCh7dHlwZTogVG9rZW5UeXBlLkxQQVJFTiwgdmFsdWU6IFwiKFwifSk7XG4gICAgbGV0IHJpZ2h0XzY4NiA9IG5ldyBTeW50YXgoe3R5cGU6IFRva2VuVHlwZS5SUEFSRU4sIHZhbHVlOiBcIilcIn0pO1xuICAgIHJldHVybiBuZXcgU3ludGF4KExpc3Qub2YobGVmdF82ODUpLmNvbmNhdChpbm5lcl82ODMpLnB1c2gocmlnaHRfNjg2KSwgc3R4XzY4NC5jb250ZXh0KTtcbiAgfVxuICByZXNvbHZlKCkge1xuICAgIGlmICh0aGlzLmNvbnRleHQuc2NvcGVzZXQuc2l6ZSA9PT0gMCB8fCAhKHRoaXMuaXNJZGVudGlmaWVyKCkgfHwgdGhpcy5pc0tleXdvcmQoKSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLnZhbHVlO1xuICAgIH1cbiAgICBsZXQgc2NvcGVfNjg3ID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0Lmxhc3QoKTtcbiAgICBsZXQgc3R4U2NvcGVzXzY4OCA9IHRoaXMuY29udGV4dC5zY29wZXNldDtcbiAgICBsZXQgYmluZGluZ3NfNjg5ID0gdGhpcy5jb250ZXh0LmJpbmRpbmdzO1xuICAgIGlmIChzY29wZV82ODcpIHtcbiAgICAgIGxldCBzY29wZXNldEJpbmRpbmdMaXN0ID0gYmluZGluZ3NfNjg5LmdldCh0aGlzKTtcbiAgICAgIGlmIChzY29wZXNldEJpbmRpbmdMaXN0KSB7XG4gICAgICAgIGxldCBiaWdnZXN0QmluZGluZ1BhaXIgPSBzY29wZXNldEJpbmRpbmdMaXN0LmZpbHRlcigoe3Njb3BlcywgYmluZGluZ30pID0+IHtcbiAgICAgICAgICByZXR1cm4gc2NvcGVzLmlzU3Vic2V0KHN0eFNjb3Blc182ODgpO1xuICAgICAgICB9KS5zb3J0KHNpemVEZWNlbmRpbmdfNjU1KTtcbiAgICAgICAgaWYgKGJpZ2dlc3RCaW5kaW5nUGFpci5zaXplID49IDIgJiYgYmlnZ2VzdEJpbmRpbmdQYWlyLmdldCgwKS5zY29wZXMuc2l6ZSA9PT0gYmlnZ2VzdEJpbmRpbmdQYWlyLmdldCgxKS5zY29wZXMuc2l6ZSkge1xuICAgICAgICAgIGxldCBkZWJ1Z0Jhc2UgPSBcIntcIiArIHN0eFNjb3Blc182ODgubWFwKHNfNjkwID0+IHNfNjkwLnRvU3RyaW5nKCkpLmpvaW4oXCIsIFwiKSArIFwifVwiO1xuICAgICAgICAgIGxldCBkZWJ1Z0FtYmlnb3VzU2NvcGVzZXRzID0gYmlnZ2VzdEJpbmRpbmdQYWlyLm1hcCgoe3Njb3Blc30pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBcIntcIiArIHNjb3Blcy5tYXAoc182OTEgPT4gc182OTEudG9TdHJpbmcoKSkuam9pbihcIiwgXCIpICsgXCJ9XCI7XG4gICAgICAgICAgfSkuam9pbihcIiwgXCIpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNjb3Blc2V0IFwiICsgZGVidWdCYXNlICsgXCIgaGFzIGFtYmlndW91cyBzdWJzZXRzIFwiICsgZGVidWdBbWJpZ291c1Njb3Blc2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoYmlnZ2VzdEJpbmRpbmdQYWlyLnNpemUgIT09IDApIHtcbiAgICAgICAgICBsZXQgYmluZGluZ1N0ciA9IGJpZ2dlc3RCaW5kaW5nUGFpci5nZXQoMCkuYmluZGluZy50b1N0cmluZygpO1xuICAgICAgICAgIGlmIChNYXliZS5pc0p1c3QoYmlnZ2VzdEJpbmRpbmdQYWlyLmdldCgwKS5hbGlhcykpIHtcbiAgICAgICAgICAgIHJldHVybiBiaWdnZXN0QmluZGluZ1BhaXIuZ2V0KDApLmFsaWFzLmdldE9yRWxzZShudWxsKS5yZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiaW5kaW5nU3RyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRva2VuLnZhbHVlO1xuICB9XG4gIHZhbCgpIHtcbiAgICBhc3NlcnQoIXRoaXMuaXNEZWxpbWl0ZXIoKSwgXCJjYW5ub3QgZ2V0IHRoZSB2YWwgb2YgYSBkZWxpbWl0ZXJcIik7XG4gICAgaWYgKHRoaXMuaXNTdHJpbmdMaXRlcmFsKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLnN0cjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNUZW1wbGF0ZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy50b2tlbi5pdGVtcy5tYXAoZWxfNjkyID0+IHtcbiAgICAgICAgaWYgKGVsXzY5MiBpbnN0YW5jZW9mIFN5bnRheCAmJiBlbF82OTIuaXNEZWxpbWl0ZXIoKSkge1xuICAgICAgICAgIHJldHVybiBcIiR7Li4ufVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbF82OTIuc2xpY2UudGV4dDtcbiAgICAgIH0pLmpvaW4oXCJcIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRva2VuLnZhbHVlO1xuICB9XG4gIGxpbmVOdW1iZXIoKSB7XG4gICAgaWYgKCF0aGlzLmlzRGVsaW1pdGVyKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLnNsaWNlLnN0YXJ0TG9jYXRpb24ubGluZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudG9rZW4uZ2V0KDApLmxpbmVOdW1iZXIoKTtcbiAgICB9XG4gIH1cbiAgc2V0TGluZU51bWJlcihsaW5lXzY5Mykge1xuICAgIGxldCBuZXdUb2tfNjk0ID0ge307XG4gICAgaWYgKHRoaXMuaXNEZWxpbWl0ZXIoKSkge1xuICAgICAgbmV3VG9rXzY5NCA9IHRoaXMudG9rZW4ubWFwKHNfNjk1ID0+IHNfNjk1LnNldExpbmVOdW1iZXIobGluZV82OTMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMudG9rZW4pKSB7XG4gICAgICAgIG5ld1Rva182OTRba2V5XSA9IHRoaXMudG9rZW5ba2V5XTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChuZXdUb2tfNjk0LnNsaWNlICYmIG5ld1Rva182OTQuc2xpY2Uuc3RhcnRMb2NhdGlvbiwgXCJhbGwgdG9rZW5zIG11c3QgaGF2ZSBsaW5lIGluZm9cIik7XG4gICAgICBuZXdUb2tfNjk0LnNsaWNlLnN0YXJ0TG9jYXRpb24ubGluZSA9IGxpbmVfNjkzO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFN5bnRheChuZXdUb2tfNjk0LCB0aGlzLmNvbnRleHQpO1xuICB9XG4gIGlubmVyKCkge1xuICAgIGFzc2VydCh0aGlzLmlzRGVsaW1pdGVyKCksIFwiY2FuIG9ubHkgZ2V0IHRoZSBpbm5lciBvZiBhIGRlbGltaXRlclwiKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5zbGljZSgxLCB0aGlzLnRva2VuLnNpemUgLSAxKTtcbiAgfVxuICBhZGRTY29wZShzY29wZV82OTYsIGJpbmRpbmdzXzY5Nywgb3B0aW9uc182OTggPSB7ZmxpcDogZmFsc2V9KSB7XG4gICAgbGV0IHRva2VuXzY5OSA9IHRoaXMuaXNEZWxpbWl0ZXIoKSA/IHRoaXMudG9rZW4ubWFwKHNfNzAxID0+IHNfNzAxLmFkZFNjb3BlKHNjb3BlXzY5NiwgYmluZGluZ3NfNjk3LCBvcHRpb25zXzY5OCkpIDogdGhpcy50b2tlbjtcbiAgICBpZiAodGhpcy5pc1RlbXBsYXRlKCkpIHtcbiAgICAgIHRva2VuXzY5OSA9IHt0eXBlOiB0aGlzLnRva2VuLnR5cGUsIGl0ZW1zOiB0b2tlbl82OTkuaXRlbXMubWFwKGl0XzcwMiA9PiB7XG4gICAgICAgIGlmIChpdF83MDIgaW5zdGFuY2VvZiBTeW50YXggJiYgaXRfNzAyLmlzRGVsaW1pdGVyKCkpIHtcbiAgICAgICAgICByZXR1cm4gaXRfNzAyLmFkZFNjb3BlKHNjb3BlXzY5NiwgYmluZGluZ3NfNjk3LCBvcHRpb25zXzY5OCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0XzcwMjtcbiAgICAgIH0pfTtcbiAgICB9XG4gICAgbGV0IG5ld1Njb3Blc2V0XzcwMDtcbiAgICBpZiAob3B0aW9uc182OTguZmxpcCkge1xuICAgICAgbGV0IGluZGV4ID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0LmluZGV4T2Yoc2NvcGVfNjk2KTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgbmV3U2NvcGVzZXRfNzAwID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0LnJlbW92ZShpbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTY29wZXNldF83MDAgPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQucHVzaChzY29wZV82OTYpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTY29wZXNldF83MDAgPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQucHVzaChzY29wZV82OTYpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFN5bnRheCh0b2tlbl82OTksIHtiaW5kaW5nczogYmluZGluZ3NfNjk3LCBzY29wZXNldDogbmV3U2NvcGVzZXRfNzAwfSk7XG4gIH1cbiAgcmVtb3ZlU2NvcGUoc2NvcGVfNzAzKSB7XG4gICAgbGV0IHRva2VuXzcwNCA9IHRoaXMuaXNEZWxpbWl0ZXIoKSA/IHRoaXMudG9rZW4ubWFwKHNfNzA3ID0+IHNfNzA3LnJlbW92ZVNjb3BlKHNjb3BlXzcwMykpIDogdGhpcy50b2tlbjtcbiAgICBsZXQgbmV3U2NvcGVzZXRfNzA1ID0gdGhpcy5jb250ZXh0LnNjb3Blc2V0O1xuICAgIGxldCBpbmRleF83MDYgPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQuaW5kZXhPZihzY29wZV83MDMpO1xuICAgIGlmIChpbmRleF83MDYgIT09IC0xKSB7XG4gICAgICBuZXdTY29wZXNldF83MDUgPSB0aGlzLmNvbnRleHQuc2NvcGVzZXQucmVtb3ZlKGluZGV4XzcwNik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgU3ludGF4KHRva2VuXzcwNCwge2JpbmRpbmdzOiB0aGlzLmNvbnRleHQuYmluZGluZ3MsIHNjb3Blc2V0OiBuZXdTY29wZXNldF83MDV9KTtcbiAgfVxuICBpc0lkZW50aWZpZXIoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlLmtsYXNzID09PSBUb2tlbkNsYXNzLklkZW50O1xuICB9XG4gIGlzQXNzaWduKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkFTU0lHTjtcbiAgfVxuICBpc0Jvb2xlYW5MaXRlcmFsKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlRSVUUgfHwgdGhpcy50b2tlbi50eXBlID09PSBUb2tlblR5cGUuRkFMU0U7XG4gIH1cbiAgaXNLZXl3b3JkKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZS5rbGFzcyA9PT0gVG9rZW5DbGFzcy5LZXl3b3JkO1xuICB9XG4gIGlzTnVsbExpdGVyYWwoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlID09PSBUb2tlblR5cGUuTlVMTDtcbiAgfVxuICBpc051bWVyaWNMaXRlcmFsKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZS5rbGFzcyA9PT0gVG9rZW5DbGFzcy5OdW1lcmljTGl0ZXJhbDtcbiAgfVxuICBpc1B1bmN0dWF0b3IoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlLmtsYXNzID09PSBUb2tlbkNsYXNzLlB1bmN0dWF0b3I7XG4gIH1cbiAgaXNTdHJpbmdMaXRlcmFsKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4udHlwZS5rbGFzcyA9PT0gVG9rZW5DbGFzcy5TdHJpbmdMaXRlcmFsO1xuICB9XG4gIGlzUmVndWxhckV4cHJlc3Npb24oKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlLmtsYXNzID09PSBUb2tlbkNsYXNzLlJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG4gIGlzVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlID09PSBUb2tlblR5cGUuVEVNUExBVEU7XG4gIH1cbiAgaXNEZWxpbWl0ZXIoKSB7XG4gICAgcmV0dXJuIExpc3QuaXNMaXN0KHRoaXMudG9rZW4pO1xuICB9XG4gIGlzUGFyZW5zKCkge1xuICAgIHJldHVybiB0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi5nZXQoMCkudG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkxQQVJFTjtcbiAgfVxuICBpc0JyYWNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4uZ2V0KDApLnRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5MQlJBQ0U7XG4gIH1cbiAgaXNCcmFja2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4uZ2V0KDApLnRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5MQlJBQ0s7XG4gIH1cbiAgaXNTeW50YXhUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbGltaXRlcigpICYmIHRoaXMudG9rZW4uZ2V0KDApLnZhbCgpID09PSBcIiNgXCI7XG4gIH1cbiAgaXNFT0YoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVsaW1pdGVyKCkgJiYgdGhpcy50b2tlbi50eXBlID09PSBUb2tlblR5cGUuRU9TO1xuICB9XG4gIHRvU3RyaW5nKCkge1xuICAgIGlmICh0aGlzLmlzRGVsaW1pdGVyKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuLm1hcChzXzcwOCA9PiBzXzcwOC50b1N0cmluZygpKS5qb2luKFwiIFwiKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTdHJpbmdMaXRlcmFsKCkpIHtcbiAgICAgIHJldHVybiBcIidcIiArIHRoaXMudG9rZW4uc3RyO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1RlbXBsYXRlKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50b2tlbi52YWx1ZTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/template-processor.js b/dist/template-processor.js index 324388d8..a2f2a842 100644 --- a/dist/template-processor.js +++ b/dist/template-processor.js @@ -22,65 +22,65 @@ var _errors = require("./errors"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var isDolar_701 = function isDolar_701(s_710) { - return s_710 && s_710 instanceof _syntax2.default && s_710.isIdentifier() && s_710.val() === "$"; +var isDolar_709 = function isDolar_709(s_718) { + return s_718 && s_718 instanceof _syntax2.default && s_718.isIdentifier() && s_718.val() === "$"; }; -var isDelimiter_702 = function isDelimiter_702(s_711) { - return s_711 && typeof s_711.isDelimiter === "function" && s_711.isDelimiter(); +var isDelimiter_710 = function isDelimiter_710(s_719) { + return s_719 && typeof s_719.isDelimiter === "function" && s_719.isDelimiter(); }; -var isBraces_703 = function isBraces_703(s_712) { - return s_712 && typeof s_712.isBraces === "function" && s_712.isBraces(); +var isBraces_711 = function isBraces_711(s_720) { + return s_720 && typeof s_720.isBraces === "function" && s_720.isBraces(); }; -var isParens_704 = function isParens_704(s_713) { - return s_713 && typeof s_713.isParens === "function" && s_713.isParens(); +var isParens_712 = function isParens_712(s_721) { + return s_721 && typeof s_721.isParens === "function" && s_721.isParens(); }; -var isBrackets_705 = function isBrackets_705(s_714) { - return s_714 && typeof s_714.isBrackets === "function" && s_714.isBrackets(); +var isBrackets_713 = function isBrackets_713(s_722) { + return s_722 && typeof s_722.isBrackets === "function" && s_722.isBrackets(); }; -var insertIntoDelimiter_706 = _ramda2.default.cond([[isBraces_703, function (s_715, r_716) { - return _syntax2.default.fromBraces(r_716, s_715); -}], [isParens_704, function (s_717, r_718) { - return _syntax2.default.fromParens(r_718, s_717); -}], [isBrackets_705, function (s_719, r_720) { - return _syntax2.default.fromBrackets(r_720, s_719); +var insertIntoDelimiter_714 = _ramda2.default.cond([[isBraces_711, function (s_723, r_724) { + return _syntax2.default.fromBraces(r_724, s_723); +}], [isParens_712, function (s_725, r_726) { + return _syntax2.default.fromParens(r_726, s_725); +}], [isBrackets_713, function (s_727, r_728) { + return _syntax2.default.fromBrackets(r_728, s_727); }]]); -var process_707 = function process_707(acc_721, s_722) { - if (isBraces_703(s_722) && isDolar_701(acc_721.template.last())) { - return { template: acc_721.template.push(_syntax2.default.fromBraces(_immutable.List.of(_syntax2.default.fromNumber(acc_721.interp.size)), s_722)), interp: acc_721.interp.push(s_722.inner()) }; - } else if (isDelimiter_702(s_722)) { - var innerResult = processTemplate(s_722.inner(), acc_721.interp); - return { template: acc_721.template.push(insertIntoDelimiter_706(s_722, innerResult.template)), interp: innerResult.interp }; +var process_715 = function process_715(acc_729, s_730) { + if (isBraces_711(s_730) && isDolar_709(acc_729.template.last())) { + return { template: acc_729.template.push(_syntax2.default.fromBraces(_immutable.List.of(_syntax2.default.fromNumber(acc_729.interp.size)), s_730)), interp: acc_729.interp.push(s_730.inner()) }; + } else if (isDelimiter_710(s_730)) { + var innerResult = processTemplate(s_730.inner(), acc_729.interp); + return { template: acc_729.template.push(insertIntoDelimiter_714(s_730, innerResult.template)), interp: innerResult.interp }; } else { - return { template: acc_721.template.push(s_722), interp: acc_721.interp }; + return { template: acc_729.template.push(s_730), interp: acc_729.interp }; } }; -function cloneLineNumber_708(to_723, from_724) { - if (from_724 && to_723 && typeof to_723.setLineNumber === "function") { - return to_723.setLineNumber(from_724.lineNumber()); +function cloneLineNumber_716(to_731, from_732) { + if (from_732 && to_731 && typeof to_731.setLineNumber === "function") { + return to_731.setLineNumber(from_732.lineNumber()); } - return to_723; + return to_731; } -var replace_709 = function replace_709(acc_725, s_726) { - var last_727 = acc_725.template.get(-1); - var beforeLast_728 = acc_725.template.get(-2); - if (isBraces_703(s_726) && isDolar_701(last_727)) { - var index = s_726.inner().first().val(); - (0, _errors.assert)(acc_725.rep.size > index, "unknown replacement value"); - var replacement = cloneLineNumber_708(acc_725.rep.get(index), beforeLast_728); - return { template: acc_725.template.pop().concat(replacement), rep: acc_725.rep }; - } else if (isDelimiter_702(s_726)) { - var innerResult = replaceTemplate(s_726.inner(), acc_725.rep); - return { template: acc_725.template.push(insertIntoDelimiter_706(s_726, innerResult)), rep: acc_725.rep }; +var replace_717 = function replace_717(acc_733, s_734) { + var last_735 = acc_733.template.get(-1); + var beforeLast_736 = acc_733.template.get(-2); + if (isBraces_711(s_734) && isDolar_709(last_735)) { + var index = s_734.inner().first().val(); + (0, _errors.assert)(acc_733.rep.size > index, "unknown replacement value"); + var replacement = cloneLineNumber_716(acc_733.rep.get(index), beforeLast_736); + return { template: acc_733.template.pop().concat(replacement), rep: acc_733.rep }; + } else if (isDelimiter_710(s_734)) { + var innerResult = replaceTemplate(s_734.inner(), acc_733.rep); + return { template: acc_733.template.push(insertIntoDelimiter_714(s_734, innerResult)), rep: acc_733.rep }; } else { - return { template: acc_725.template.push(s_726), rep: acc_725.rep }; + return { template: acc_733.template.push(s_734), rep: acc_733.rep }; } }; -function processTemplate(temp_729) { - var interp_730 = arguments.length <= 1 || arguments[1] === undefined ? (0, _immutable.List)() : arguments[1]; +function processTemplate(temp_737) { + var interp_738 = arguments.length <= 1 || arguments[1] === undefined ? (0, _immutable.List)() : arguments[1]; - return temp_729.reduce(process_707, { template: (0, _immutable.List)(), interp: interp_730 }); + return temp_737.reduce(process_715, { template: (0, _immutable.List)(), interp: interp_738 }); } -function replaceTemplate(temp_731, rep_732) { - return temp_731.reduce(replace_709, { template: (0, _immutable.List)(), rep: rep_732 }).template; +function replaceTemplate(temp_739, rep_740) { + return temp_739.reduce(replace_717, { template: (0, _immutable.List)(), rep: rep_740 }).template; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3RlbXBsYXRlLXByb2Nlc3Nvci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztRQTBDZ0IsZSxHQUFBLGU7UUFHQSxlLEdBQUEsZTs7QUE3Q2hCOztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBLElBQU0sY0FBYyxTQUFkLFdBQWM7QUFBQSxTQUFTLFNBQVMsaUNBQVQsSUFBb0MsTUFBTSxZQUFOLEVBQXBDLElBQTRELE1BQU0sR0FBTixPQUFnQixHQUFyRjtBQUFBLENBQXBCO0FBQ0EsSUFBTSxrQkFBa0IsU0FBbEIsZUFBa0I7QUFBQSxTQUFTLFNBQVMsT0FBTyxNQUFNLFdBQWIsS0FBNkIsVUFBdEMsSUFBb0QsTUFBTSxXQUFOLEVBQTdEO0FBQUEsQ0FBeEI7QUFDQSxJQUFNLGVBQWUsU0FBZixZQUFlO0FBQUEsU0FBUyxTQUFTLE9BQU8sTUFBTSxRQUFiLEtBQTBCLFVBQW5DLElBQWlELE1BQU0sUUFBTixFQUExRDtBQUFBLENBQXJCO0FBQ0EsSUFBTSxlQUFlLFNBQWYsWUFBZTtBQUFBLFNBQVMsU0FBUyxPQUFPLE1BQU0sUUFBYixLQUEwQixVQUFuQyxJQUFpRCxNQUFNLFFBQU4sRUFBMUQ7QUFBQSxDQUFyQjtBQUNBLElBQU0saUJBQWlCLFNBQWpCLGNBQWlCO0FBQUEsU0FBUyxTQUFTLE9BQU8sTUFBTSxVQUFiLEtBQTRCLFVBQXJDLElBQW1ELE1BQU0sVUFBTixFQUE1RDtBQUFBLENBQXZCO0FBQ0EsSUFBTSwwQkFBMEIsZ0JBQUUsSUFBRixDQUFPLENBQUMsQ0FBQyxZQUFELEVBQWUsVUFBQyxLQUFELEVBQVEsS0FBUjtBQUFBLFNBQWtCLGlCQUFPLFVBQVAsQ0FBa0IsS0FBbEIsRUFBeUIsS0FBekIsQ0FBbEI7QUFBQSxDQUFmLENBQUQsRUFBb0UsQ0FBQyxZQUFELEVBQWUsVUFBQyxLQUFELEVBQVEsS0FBUjtBQUFBLFNBQWtCLGlCQUFPLFVBQVAsQ0FBa0IsS0FBbEIsRUFBeUIsS0FBekIsQ0FB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LEtBQUssUUFBUSxHQUF0RCxFQUFQO0FBQ0Q7QUFDRixDQWREO0FBZU8sU0FBUyxlQUFULENBQXlCLFFBQXpCLEVBQXdEO0FBQUEsTUFBckIsVUFBcUIseURBQVIsc0JBQVE7O0FBQzdELFNBQU8sU0FBUyxNQUFULENBQWdCLFdBQWhCLEVBQTZCLEVBQUMsVUFBVSxzQkFBWCxFQUFtQixRQUFRLFVBQTNCLEVBQTdCLENBQVA7QUFDRDtBQUNNLFNBQVMsZUFBVCxDQUF5QixRQUF6QixFQUFtQyxPQUFuQyxFQUE0QztBQUNqRCxTQUFPLFNBQVMsTUFBVCxDQUFnQixXQUFoQixFQUE2QixFQUFDLFVBQVUsc0JBQVgsRUFBbUIsS0FBSyxPQUF4QixFQUE3QixFQUErRCxRQUF0RTtBQUNEIiwiZmlsZSI6InRlbXBsYXRlLXByb2Nlc3Nvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TGlzdH0gZnJvbSBcImltbXV0YWJsZVwiO1xuaW1wb3J0IHtNYXliZX0gZnJvbSBcInJhbWRhLWZhbnRhc3lcIjtcbmltcG9ydCBfIGZyb20gXCJyYW1kYVwiO1xuaW1wb3J0IFN5bnRheCBmcm9tIFwiLi9zeW50YXhcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmNvbnN0IGlzRG9sYXJfNzAxID0gc183MTAgPT4gc183MTAgJiYgc183MTAgaW5zdGFuY2VvZiBTeW50YXggJiYgc183MTAuaXNJZGVudGlmaWVyKCkgJiYgc183MTAudmFsKCkgPT09IFwiJFwiO1xuY29uc3QgaXNEZWxpbWl0ZXJfNzAyID0gc183MTEgPT4gc183MTEgJiYgdHlwZW9mIHNfNzExLmlzRGVsaW1pdGVyID09PSBcImZ1bmN0aW9uXCIgJiYgc183MTEuaXNEZWxpbWl0ZXIoKTtcbmNvbnN0IGlzQnJhY2VzXzcwMyA9IHNfNzEyID0+IHNfNzEyICYmIHR5cGVvZiBzXzcxMi5pc0JyYWNlcyA9PT0gXCJmdW5jdGlvblwiICYmIHNfNzEyLmlzQnJhY2VzKCk7XG5jb25zdCBpc1BhcmVuc183MDQgPSBzXzcxMyA9PiBzXzcxMyAmJiB0eXBlb2Ygc183MTMuaXNQYXJlbnMgPT09IFwiZnVuY3Rpb25cIiAmJiBzXzcxMy5pc1BhcmVucygpO1xuY29uc3QgaXNCcmFja2V0c183MDUgPSBzXzcxNCA9PiBzXzcxNCAmJiB0eXBlb2Ygc183MTQuaXNCcmFja2V0cyA9PT0gXCJmdW5jdGlvblwiICYmIHNfNzE0LmlzQnJhY2tldHMoKTtcbmNvbnN0IGluc2VydEludG9EZWxpbWl0ZXJfNzA2ID0gXy5jb25kKFtbaXNCcmFjZXNfNzAzLCAoc183MTUsIHJfNzE2KSA9PiBTeW50YXguZnJvbUJyYWNlcyhyXzcxNiwgc183MTUpXSwgW2lzUGFyZW5zXzcwNCwgKHNfNzE3LCByXzcxOCkgPT4gU3ludGF4LmZyb21QYXJlbnMocl83MTgsIHNfNzE3KV0sIFtpc0JyYWNrZXRzXzcwNSwgKHNfNzE5LCByXzcyMCkgPT4gU3ludGF4LmZyb21CcmFja2V0cyhyXzcyMCwgc183MTkpXV0pO1xuY29uc3QgcHJvY2Vzc183MDcgPSAoYWNjXzcyMSwgc183MjIpID0+IHtcbiAgaWYgKGlzQnJhY2VzXzcwMyhzXzcyMikgJiYgaXNEb2xhcl83MDEoYWNjXzcyMS50ZW1wbGF0ZS5sYXN0KCkpKSB7XG4gICAgcmV0dXJuIHt0ZW1wbGF0ZTogYWNjXzcyMS50ZW1wbGF0ZS5wdXNoKFN5bnRheC5mcm9tQnJhY2VzKExpc3Qub2YoU3ludGF4LmZyb21OdW1iZXIoYWNjXzcyMS5pbnRlcnAuc2l6ZSkpLCBzXzcyMikpLCBpbnRlcnA6IGFjY183MjEuaW50ZXJwLnB1c2goc183MjIuaW5uZXIoKSl9O1xuICB9IGVsc2UgaWYgKGlzRGVsaW1pdGVyXzcwMihzXzcyMikpIHtcbiAgICBsZXQgaW5uZXJSZXN1bHQgPSBwcm9jZXNzVGVtcGxhdGUoc183MjIuaW5uZXIoKSwgYWNjXzcyMS5pbnRlcnApO1xuICAgIHJldHVybiB7dGVtcGxhdGU6IGFjY183MjEudGVtcGxhdGUucHVzaChpbnNlcnRJbnRvRGVsaW1pdGVyXzcwNihzXzcyMiwgaW5uZXJSZXN1bHQudGVtcGxhdGUpKSwgaW50ZXJwOiBpbm5lclJlc3VsdC5pbnRlcnB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7dGVtcGxhdGU6IGFjY183MjEudGVtcGxhdGUucHVzaChzXzcyMiksIGludGVycDogYWNjXzcyMS5pbnRlcnB9O1xuICB9XG59O1xuZnVuY3Rpb24gY2xvbmVMaW5lTnVtYmVyXzcwOCh0b183MjMsIGZyb21fNzI0KSB7XG4gIGlmIChmcm9tXzcyNCAmJiB0b183MjMgJiYgdHlwZW9mIHRvXzcyMy5zZXRMaW5lTnVtYmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdG9fNzIzLnNldExpbmVOdW1iZXIoZnJvbV83MjQubGluZU51bWJlcigpKTtcbiAgfVxuICByZXR1cm4gdG9fNzIzO1xufVxuY29uc3QgcmVwbGFjZV83MDkgPSAoYWNjXzcyNSwgc183MjYpID0+IHtcbiAgbGV0IGxhc3RfNzI3ID0gYWNjXzcyNS50ZW1wbGF0ZS5nZXQoLTEpO1xuICBsZXQgYmVmb3JlTGFzdF83MjggPSBhY2NfNzI1LnRlbXBsYXRlLmdldCgtMik7XG4gIGlmIChpc0JyYWNlc183MDMoc183MjYpICYmIGlzRG9sYXJfNzAxKGxhc3RfNzI3KSkge1xuICAgIGxldCBpbmRleCA9IHNfNzI2LmlubmVyKCkuZmlyc3QoKS52YWwoKTtcbiAgICBhc3NlcnQoYWNjXzcyNS5yZXAuc2l6ZSA+IGluZGV4LCBcInVua25vd24gcmVwbGFjZW1lbnQgdmFsdWVcIik7XG4gICAgbGV0IHJlcGxhY2VtZW50ID0gY2xvbmVMaW5lTnVtYmVyXzcwOChhY2NfNzI1LnJlcC5nZXQoaW5kZXgpLCBiZWZvcmVMYXN0XzcyOCk7XG4gICAgcmV0dXJuIHt0ZW1wbGF0ZTogYWNjXzcyNS50ZW1wbGF0ZS5wb3AoKS5jb25jYXQocmVwbGFjZW1lbnQpLCByZXA6IGFjY183MjUucmVwfTtcbiAgfSBlbHNlIGlmIChpc0RlbGltaXRlcl83MDIoc183MjYpKSB7XG4gICAgbGV0IGlubmVyUmVzdWx0ID0gcmVwbGFjZVRlbXBsYXRlKHNfNzI2LmlubmVyKCksIGFjY183MjUucmVwKTtcbiAgICByZXR1cm4ge3RlbXBsYXRlOiBhY2NfNzI1LnRlbXBsYXRlLnB1c2goaW5zZXJ0SW50b0RlbGltaXRlcl83MDYoc183MjYsIGlubmVyUmVzdWx0KSksIHJlcDogYWNjXzcyNS5yZXB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7dGVtcGxhdGU6IGFjY183MjUudGVtcGxhdGUucHVzaChzXzcyNiksIHJlcDogYWNjXzcyNS5yZXB9O1xuICB9XG59O1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NUZW1wbGF0ZSh0ZW1wXzcyOSwgaW50ZXJwXzczMCA9IExpc3QoKSkge1xuICByZXR1cm4gdGVtcF83MjkucmVkdWNlKHByb2Nlc3NfNzA3LCB7dGVtcGxhdGU6IExpc3QoKSwgaW50ZXJwOiBpbnRlcnBfNzMwfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVRlbXBsYXRlKHRlbXBfNzMxLCByZXBfNzMyKSB7XG4gIHJldHVybiB0ZW1wXzczMS5yZWR1Y2UocmVwbGFjZV83MDksIHt0ZW1wbGF0ZTogTGlzdCgpLCByZXA6IHJlcF83MzJ9KS50ZW1wbGF0ZTtcbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3RlbXBsYXRlLXByb2Nlc3Nvci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztRQTBDZ0IsZSxHQUFBLGU7UUFHQSxlLEdBQUEsZTs7QUE3Q2hCOztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBLElBQU0sY0FBYyxTQUFkLFdBQWM7QUFBQSxTQUFTLFNBQVMsaUNBQVQsSUFBb0MsTUFBTSxZQUFOLEVBQXBDLElBQTRELE1BQU0sR0FBTixPQUFnQixHQUFyRjtBQUFBLENBQXBCO0FBQ0EsSUFBTSxrQkFBa0IsU0FBbEIsZUFBa0I7QUFBQSxTQUFTLFNBQVMsT0FBTyxNQUFNLFdBQWIsS0FBNkIsVUFBdEMsSUFBb0QsTUFBTSxXQUFOLEVBQTdEO0FBQUEsQ0FBeEI7QUFDQSxJQUFNLGVBQWUsU0FBZixZQUFlO0FBQUEsU0FBUyxTQUFTLE9BQU8sTUFBTSxRQUFiLEtBQTBCLFVBQW5DLElBQWlELE1BQU0sUUFBTixFQUExRDtBQUFBLENBQXJCO0FBQ0EsSUFBTSxlQUFlLFNBQWYsWUFBZTtBQUFBLFNBQVMsU0FBUyxPQUFPLE1BQU0sUUFBYixLQUEwQixVQUFuQyxJQUFpRCxNQUFNLFFBQU4sRUFBMUQ7QUFBQSxDQUFyQjtBQUNBLElBQU0saUJBQWlCLFNBQWpCLGNBQWlCO0FBQUEsU0FBUyxTQUFTLE9BQU8sTUFBTSxVQUFiLEtBQTRCLFVBQXJDLElBQW1ELE1BQU0sVUFBTixFQUE1RDtBQUFBLENBQXZCO0FBQ0EsSUFBTSwwQkFBMEIsZ0JBQUUsSUFBRixDQUFPLENBQUMsQ0FBQyxZQUFELEVBQWUsVUFBQyxLQUFELEVBQVEsS0FBUjtBQUFBLFNBQWtCLGlCQUFPLFVBQVAsQ0FBa0IsS0FBbEIsRUFBeUIsS0FBekIsQ0FBbEI7QUFBQSxDQUFmLENBQUQsRUFBb0UsQ0FBQyxZQUFELEVBQWUsVUFBQyxLQUFELEVBQVEsS0FBUjtBQUFBLFNBQWtCLGlCQUFPLFVBQVAsQ0FBa0IsS0FBbEIsRUFBeUIsS0FBekIsQ0FB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LEtBQUssUUFBUSxHQUF0RCxFQUFQO0FBQ0Q7QUFDRixDQWREO0FBZU8sU0FBUyxlQUFULENBQXlCLFFBQXpCLEVBQXdEO0FBQUEsTUFBckIsVUFBcUIseURBQVIsc0JBQVE7O0FBQzdELFNBQU8sU0FBUyxNQUFULENBQWdCLFdBQWhCLEVBQTZCLEVBQUMsVUFBVSxzQkFBWCxFQUFtQixRQUFRLFVBQTNCLEVBQTdCLENBQVA7QUFDRDtBQUNNLFNBQVMsZUFBVCxDQUF5QixRQUF6QixFQUFtQyxPQUFuQyxFQUE0QztBQUNqRCxTQUFPLFNBQVMsTUFBVCxDQUFnQixXQUFoQixFQUE2QixFQUFDLFVBQVUsc0JBQVgsRUFBbUIsS0FBSyxPQUF4QixFQUE3QixFQUErRCxRQUF0RTtBQUNEIiwiZmlsZSI6InRlbXBsYXRlLXByb2Nlc3Nvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TGlzdH0gZnJvbSBcImltbXV0YWJsZVwiO1xuaW1wb3J0IHtNYXliZX0gZnJvbSBcInJhbWRhLWZhbnRhc3lcIjtcbmltcG9ydCBfIGZyb20gXCJyYW1kYVwiO1xuaW1wb3J0IFN5bnRheCBmcm9tIFwiLi9zeW50YXhcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmNvbnN0IGlzRG9sYXJfNzA5ID0gc183MTggPT4gc183MTggJiYgc183MTggaW5zdGFuY2VvZiBTeW50YXggJiYgc183MTguaXNJZGVudGlmaWVyKCkgJiYgc183MTgudmFsKCkgPT09IFwiJFwiO1xuY29uc3QgaXNEZWxpbWl0ZXJfNzEwID0gc183MTkgPT4gc183MTkgJiYgdHlwZW9mIHNfNzE5LmlzRGVsaW1pdGVyID09PSBcImZ1bmN0aW9uXCIgJiYgc183MTkuaXNEZWxpbWl0ZXIoKTtcbmNvbnN0IGlzQnJhY2VzXzcxMSA9IHNfNzIwID0+IHNfNzIwICYmIHR5cGVvZiBzXzcyMC5pc0JyYWNlcyA9PT0gXCJmdW5jdGlvblwiICYmIHNfNzIwLmlzQnJhY2VzKCk7XG5jb25zdCBpc1BhcmVuc183MTIgPSBzXzcyMSA9PiBzXzcyMSAmJiB0eXBlb2Ygc183MjEuaXNQYXJlbnMgPT09IFwiZnVuY3Rpb25cIiAmJiBzXzcyMS5pc1BhcmVucygpO1xuY29uc3QgaXNCcmFja2V0c183MTMgPSBzXzcyMiA9PiBzXzcyMiAmJiB0eXBlb2Ygc183MjIuaXNCcmFja2V0cyA9PT0gXCJmdW5jdGlvblwiICYmIHNfNzIyLmlzQnJhY2tldHMoKTtcbmNvbnN0IGluc2VydEludG9EZWxpbWl0ZXJfNzE0ID0gXy5jb25kKFtbaXNCcmFjZXNfNzExLCAoc183MjMsIHJfNzI0KSA9PiBTeW50YXguZnJvbUJyYWNlcyhyXzcyNCwgc183MjMpXSwgW2lzUGFyZW5zXzcxMiwgKHNfNzI1LCByXzcyNikgPT4gU3ludGF4LmZyb21QYXJlbnMocl83MjYsIHNfNzI1KV0sIFtpc0JyYWNrZXRzXzcxMywgKHNfNzI3LCByXzcyOCkgPT4gU3ludGF4LmZyb21CcmFja2V0cyhyXzcyOCwgc183MjcpXV0pO1xuY29uc3QgcHJvY2Vzc183MTUgPSAoYWNjXzcyOSwgc183MzApID0+IHtcbiAgaWYgKGlzQnJhY2VzXzcxMShzXzczMCkgJiYgaXNEb2xhcl83MDkoYWNjXzcyOS50ZW1wbGF0ZS5sYXN0KCkpKSB7XG4gICAgcmV0dXJuIHt0ZW1wbGF0ZTogYWNjXzcyOS50ZW1wbGF0ZS5wdXNoKFN5bnRheC5mcm9tQnJhY2VzKExpc3Qub2YoU3ludGF4LmZyb21OdW1iZXIoYWNjXzcyOS5pbnRlcnAuc2l6ZSkpLCBzXzczMCkpLCBpbnRlcnA6IGFjY183MjkuaW50ZXJwLnB1c2goc183MzAuaW5uZXIoKSl9O1xuICB9IGVsc2UgaWYgKGlzRGVsaW1pdGVyXzcxMChzXzczMCkpIHtcbiAgICBsZXQgaW5uZXJSZXN1bHQgPSBwcm9jZXNzVGVtcGxhdGUoc183MzAuaW5uZXIoKSwgYWNjXzcyOS5pbnRlcnApO1xuICAgIHJldHVybiB7dGVtcGxhdGU6IGFjY183MjkudGVtcGxhdGUucHVzaChpbnNlcnRJbnRvRGVsaW1pdGVyXzcxNChzXzczMCwgaW5uZXJSZXN1bHQudGVtcGxhdGUpKSwgaW50ZXJwOiBpbm5lclJlc3VsdC5pbnRlcnB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7dGVtcGxhdGU6IGFjY183MjkudGVtcGxhdGUucHVzaChzXzczMCksIGludGVycDogYWNjXzcyOS5pbnRlcnB9O1xuICB9XG59O1xuZnVuY3Rpb24gY2xvbmVMaW5lTnVtYmVyXzcxNih0b183MzEsIGZyb21fNzMyKSB7XG4gIGlmIChmcm9tXzczMiAmJiB0b183MzEgJiYgdHlwZW9mIHRvXzczMS5zZXRMaW5lTnVtYmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdG9fNzMxLnNldExpbmVOdW1iZXIoZnJvbV83MzIubGluZU51bWJlcigpKTtcbiAgfVxuICByZXR1cm4gdG9fNzMxO1xufVxuY29uc3QgcmVwbGFjZV83MTcgPSAoYWNjXzczMywgc183MzQpID0+IHtcbiAgbGV0IGxhc3RfNzM1ID0gYWNjXzczMy50ZW1wbGF0ZS5nZXQoLTEpO1xuICBsZXQgYmVmb3JlTGFzdF83MzYgPSBhY2NfNzMzLnRlbXBsYXRlLmdldCgtMik7XG4gIGlmIChpc0JyYWNlc183MTEoc183MzQpICYmIGlzRG9sYXJfNzA5KGxhc3RfNzM1KSkge1xuICAgIGxldCBpbmRleCA9IHNfNzM0LmlubmVyKCkuZmlyc3QoKS52YWwoKTtcbiAgICBhc3NlcnQoYWNjXzczMy5yZXAuc2l6ZSA+IGluZGV4LCBcInVua25vd24gcmVwbGFjZW1lbnQgdmFsdWVcIik7XG4gICAgbGV0IHJlcGxhY2VtZW50ID0gY2xvbmVMaW5lTnVtYmVyXzcxNihhY2NfNzMzLnJlcC5nZXQoaW5kZXgpLCBiZWZvcmVMYXN0XzczNik7XG4gICAgcmV0dXJuIHt0ZW1wbGF0ZTogYWNjXzczMy50ZW1wbGF0ZS5wb3AoKS5jb25jYXQocmVwbGFjZW1lbnQpLCByZXA6IGFjY183MzMucmVwfTtcbiAgfSBlbHNlIGlmIChpc0RlbGltaXRlcl83MTAoc183MzQpKSB7XG4gICAgbGV0IGlubmVyUmVzdWx0ID0gcmVwbGFjZVRlbXBsYXRlKHNfNzM0LmlubmVyKCksIGFjY183MzMucmVwKTtcbiAgICByZXR1cm4ge3RlbXBsYXRlOiBhY2NfNzMzLnRlbXBsYXRlLnB1c2goaW5zZXJ0SW50b0RlbGltaXRlcl83MTQoc183MzQsIGlubmVyUmVzdWx0KSksIHJlcDogYWNjXzczMy5yZXB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7dGVtcGxhdGU6IGFjY183MzMudGVtcGxhdGUucHVzaChzXzczNCksIHJlcDogYWNjXzczMy5yZXB9O1xuICB9XG59O1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NUZW1wbGF0ZSh0ZW1wXzczNywgaW50ZXJwXzczOCA9IExpc3QoKSkge1xuICByZXR1cm4gdGVtcF83MzcucmVkdWNlKHByb2Nlc3NfNzE1LCB7dGVtcGxhdGU6IExpc3QoKSwgaW50ZXJwOiBpbnRlcnBfNzM4fSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVRlbXBsYXRlKHRlbXBfNzM5LCByZXBfNzQwKSB7XG4gIHJldHVybiB0ZW1wXzczOS5yZWR1Y2UocmVwbGFjZV83MTcsIHt0ZW1wbGF0ZTogTGlzdCgpLCByZXA6IHJlcF83NDB9KS50ZW1wbGF0ZTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/term-expander.js b/dist/term-expander.js index 738b3a16..0fe79bd9 100644 --- a/dist/term-expander.js +++ b/dist/term-expander.js @@ -43,578 +43,578 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var TermExpander = function () { - function TermExpander(context_733) { + function TermExpander(context_741) { _classCallCheck(this, TermExpander); - this.context = context_733; + this.context = context_741; } _createClass(TermExpander, [{ key: "expand", - value: function expand(term_734) { - var field_735 = "expand" + term_734.type; - if (typeof this[field_735] === "function") { - return this[field_735](term_734); + value: function expand(term_742) { + var field_743 = "expand" + term_742.type; + if (typeof this[field_743] === "function") { + return this[field_743](term_742); } - (0, _errors.assert)(false, "expand not implemented yet for: " + term_734.type); + (0, _errors.assert)(false, "expand not implemented yet for: " + term_742.type); } }, { key: "expandTemplateExpression", - value: function expandTemplateExpression(term_736) { - return new _terms2.default("TemplateExpression", { tag: term_736.tag == null ? null : this.expand(term_736.tag), elements: term_736.elements.toArray() }); + value: function expandTemplateExpression(term_744) { + return new _terms2.default("TemplateExpression", { tag: term_744.tag == null ? null : this.expand(term_744.tag), elements: term_744.elements.toArray() }); } }, { key: "expandBreakStatement", - value: function expandBreakStatement(term_737) { - return new _terms2.default("BreakStatement", { label: term_737.label ? term_737.label.val() : null }); + value: function expandBreakStatement(term_745) { + return new _terms2.default("BreakStatement", { label: term_745.label ? term_745.label.val() : null }); } }, { key: "expandDoWhileStatement", - value: function expandDoWhileStatement(term_738) { - return new _terms2.default("DoWhileStatement", { body: this.expand(term_738.body), test: this.expand(term_738.test) }); + value: function expandDoWhileStatement(term_746) { + return new _terms2.default("DoWhileStatement", { body: this.expand(term_746.body), test: this.expand(term_746.test) }); } }, { key: "expandWithStatement", - value: function expandWithStatement(term_739) { - return new _terms2.default("WithStatement", { body: this.expand(term_739.body), object: this.expand(term_739.object) }); + value: function expandWithStatement(term_747) { + return new _terms2.default("WithStatement", { body: this.expand(term_747.body), object: this.expand(term_747.object) }); } }, { key: "expandDebuggerStatement", - value: function expandDebuggerStatement(term_740) { - return term_740; + value: function expandDebuggerStatement(term_748) { + return term_748; } }, { key: "expandContinueStatement", - value: function expandContinueStatement(term_741) { - return new _terms2.default("ContinueStatement", { label: term_741.label ? term_741.label.val() : null }); + value: function expandContinueStatement(term_749) { + return new _terms2.default("ContinueStatement", { label: term_749.label ? term_749.label.val() : null }); } }, { key: "expandSwitchStatementWithDefault", - value: function expandSwitchStatementWithDefault(term_742) { + value: function expandSwitchStatementWithDefault(term_750) { var _this = this; - return new _terms2.default("SwitchStatementWithDefault", { discriminant: this.expand(term_742.discriminant), preDefaultCases: term_742.preDefaultCases.map(function (c_743) { - return _this.expand(c_743); - }).toArray(), defaultCase: this.expand(term_742.defaultCase), postDefaultCases: term_742.postDefaultCases.map(function (c_744) { - return _this.expand(c_744); + return new _terms2.default("SwitchStatementWithDefault", { discriminant: this.expand(term_750.discriminant), preDefaultCases: term_750.preDefaultCases.map(function (c_751) { + return _this.expand(c_751); + }).toArray(), defaultCase: this.expand(term_750.defaultCase), postDefaultCases: term_750.postDefaultCases.map(function (c_752) { + return _this.expand(c_752); }).toArray() }); } }, { key: "expandComputedMemberExpression", - value: function expandComputedMemberExpression(term_745) { - return new _terms2.default("ComputedMemberExpression", { object: this.expand(term_745.object), expression: this.expand(term_745.expression) }); + value: function expandComputedMemberExpression(term_753) { + return new _terms2.default("ComputedMemberExpression", { object: this.expand(term_753.object), expression: this.expand(term_753.expression) }); } }, { key: "expandSwitchStatement", - value: function expandSwitchStatement(term_746) { + value: function expandSwitchStatement(term_754) { var _this2 = this; - return new _terms2.default("SwitchStatement", { discriminant: this.expand(term_746.discriminant), cases: term_746.cases.map(function (c_747) { - return _this2.expand(c_747); + return new _terms2.default("SwitchStatement", { discriminant: this.expand(term_754.discriminant), cases: term_754.cases.map(function (c_755) { + return _this2.expand(c_755); }).toArray() }); } }, { key: "expandFormalParameters", - value: function expandFormalParameters(term_748) { + value: function expandFormalParameters(term_756) { var _this3 = this; - var rest_749 = term_748.rest == null ? null : this.expand(term_748.rest); - return new _terms2.default("FormalParameters", { items: term_748.items.map(function (i_750) { - return _this3.expand(i_750); - }), rest: rest_749 }); + var rest_757 = term_756.rest == null ? null : this.expand(term_756.rest); + return new _terms2.default("FormalParameters", { items: term_756.items.map(function (i_758) { + return _this3.expand(i_758); + }), rest: rest_757 }); } }, { key: "expandArrowExpression", - value: function expandArrowExpression(term_751) { - return this.doFunctionExpansion(term_751, "ArrowExpression"); + value: function expandArrowExpression(term_759) { + return this.doFunctionExpansion(term_759, "ArrowExpression"); } }, { key: "expandSwitchDefault", - value: function expandSwitchDefault(term_752) { + value: function expandSwitchDefault(term_760) { var _this4 = this; - return new _terms2.default("SwitchDefault", { consequent: term_752.consequent.map(function (c_753) { - return _this4.expand(c_753); + return new _terms2.default("SwitchDefault", { consequent: term_760.consequent.map(function (c_761) { + return _this4.expand(c_761); }).toArray() }); } }, { key: "expandSwitchCase", - value: function expandSwitchCase(term_754) { + value: function expandSwitchCase(term_762) { var _this5 = this; - return new _terms2.default("SwitchCase", { test: this.expand(term_754.test), consequent: term_754.consequent.map(function (c_755) { - return _this5.expand(c_755); + return new _terms2.default("SwitchCase", { test: this.expand(term_762.test), consequent: term_762.consequent.map(function (c_763) { + return _this5.expand(c_763); }).toArray() }); } }, { key: "expandForInStatement", - value: function expandForInStatement(term_756) { - return new _terms2.default("ForInStatement", { left: this.expand(term_756.left), right: this.expand(term_756.right), body: this.expand(term_756.body) }); + value: function expandForInStatement(term_764) { + return new _terms2.default("ForInStatement", { left: this.expand(term_764.left), right: this.expand(term_764.right), body: this.expand(term_764.body) }); } }, { key: "expandTryCatchStatement", - value: function expandTryCatchStatement(term_757) { - return new _terms2.default("TryCatchStatement", { body: this.expand(term_757.body), catchClause: this.expand(term_757.catchClause) }); + value: function expandTryCatchStatement(term_765) { + return new _terms2.default("TryCatchStatement", { body: this.expand(term_765.body), catchClause: this.expand(term_765.catchClause) }); } }, { key: "expandTryFinallyStatement", - value: function expandTryFinallyStatement(term_758) { - var catchClause_759 = term_758.catchClause == null ? null : this.expand(term_758.catchClause); - return new _terms2.default("TryFinallyStatement", { body: this.expand(term_758.body), catchClause: catchClause_759, finalizer: this.expand(term_758.finalizer) }); + value: function expandTryFinallyStatement(term_766) { + var catchClause_767 = term_766.catchClause == null ? null : this.expand(term_766.catchClause); + return new _terms2.default("TryFinallyStatement", { body: this.expand(term_766.body), catchClause: catchClause_767, finalizer: this.expand(term_766.finalizer) }); } }, { key: "expandCatchClause", - value: function expandCatchClause(term_760) { - return new _terms2.default("CatchClause", { binding: this.expand(term_760.binding), body: this.expand(term_760.body) }); + value: function expandCatchClause(term_768) { + return new _terms2.default("CatchClause", { binding: this.expand(term_768.binding), body: this.expand(term_768.body) }); } }, { key: "expandThrowStatement", - value: function expandThrowStatement(term_761) { - return new _terms2.default("ThrowStatement", { expression: this.expand(term_761.expression) }); + value: function expandThrowStatement(term_769) { + return new _terms2.default("ThrowStatement", { expression: this.expand(term_769.expression) }); } }, { key: "expandForOfStatement", - value: function expandForOfStatement(term_762) { - return new _terms2.default("ForOfStatement", { left: this.expand(term_762.left), right: this.expand(term_762.right), body: this.expand(term_762.body) }); + value: function expandForOfStatement(term_770) { + return new _terms2.default("ForOfStatement", { left: this.expand(term_770.left), right: this.expand(term_770.right), body: this.expand(term_770.body) }); } }, { key: "expandBindingIdentifier", - value: function expandBindingIdentifier(term_763) { - return term_763; + value: function expandBindingIdentifier(term_771) { + return term_771; } }, { key: "expandBindingPropertyIdentifier", - value: function expandBindingPropertyIdentifier(term_764) { - return term_764; + value: function expandBindingPropertyIdentifier(term_772) { + return term_772; } }, { key: "expandBindingPropertyProperty", - value: function expandBindingPropertyProperty(term_765) { - return new _terms2.default("BindingPropertyProperty", { name: this.expand(term_765.name), binding: this.expand(term_765.binding) }); + value: function expandBindingPropertyProperty(term_773) { + return new _terms2.default("BindingPropertyProperty", { name: this.expand(term_773.name), binding: this.expand(term_773.binding) }); } }, { key: "expandComputedPropertyName", - value: function expandComputedPropertyName(term_766) { - return new _terms2.default("ComputedPropertyName", { expression: this.expand(term_766.expression) }); + value: function expandComputedPropertyName(term_774) { + return new _terms2.default("ComputedPropertyName", { expression: this.expand(term_774.expression) }); } }, { key: "expandObjectBinding", - value: function expandObjectBinding(term_767) { + value: function expandObjectBinding(term_775) { var _this6 = this; - return new _terms2.default("ObjectBinding", { properties: term_767.properties.map(function (t_768) { - return _this6.expand(t_768); + return new _terms2.default("ObjectBinding", { properties: term_775.properties.map(function (t_776) { + return _this6.expand(t_776); }).toArray() }); } }, { key: "expandArrayBinding", - value: function expandArrayBinding(term_769) { + value: function expandArrayBinding(term_777) { var _this7 = this; - var restElement_770 = term_769.restElement == null ? null : this.expand(term_769.restElement); - return new _terms2.default("ArrayBinding", { elements: term_769.elements.map(function (t_771) { - return t_771 == null ? null : _this7.expand(t_771); - }).toArray(), restElement: restElement_770 }); + var restElement_778 = term_777.restElement == null ? null : this.expand(term_777.restElement); + return new _terms2.default("ArrayBinding", { elements: term_777.elements.map(function (t_779) { + return t_779 == null ? null : _this7.expand(t_779); + }).toArray(), restElement: restElement_778 }); } }, { key: "expandBindingWithDefault", - value: function expandBindingWithDefault(term_772) { - return new _terms2.default("BindingWithDefault", { binding: this.expand(term_772.binding), init: this.expand(term_772.init) }); + value: function expandBindingWithDefault(term_780) { + return new _terms2.default("BindingWithDefault", { binding: this.expand(term_780.binding), init: this.expand(term_780.init) }); } }, { key: "expandShorthandProperty", - value: function expandShorthandProperty(term_773) { - return new _terms2.default("DataProperty", { name: new _terms2.default("StaticPropertyName", { value: term_773.name }), expression: new _terms2.default("IdentifierExpression", { name: term_773.name }) }); + value: function expandShorthandProperty(term_781) { + return new _terms2.default("DataProperty", { name: new _terms2.default("StaticPropertyName", { value: term_781.name }), expression: new _terms2.default("IdentifierExpression", { name: term_781.name }) }); } }, { key: "expandForStatement", - value: function expandForStatement(term_774) { - var init_775 = term_774.init == null ? null : this.expand(term_774.init); - var test_776 = term_774.test == null ? null : this.expand(term_774.test); - var update_777 = term_774.update == null ? null : this.expand(term_774.update); - var body_778 = this.expand(term_774.body); - return new _terms2.default("ForStatement", { init: init_775, test: test_776, update: update_777, body: body_778 }); + value: function expandForStatement(term_782) { + var init_783 = term_782.init == null ? null : this.expand(term_782.init); + var test_784 = term_782.test == null ? null : this.expand(term_782.test); + var update_785 = term_782.update == null ? null : this.expand(term_782.update); + var body_786 = this.expand(term_782.body); + return new _terms2.default("ForStatement", { init: init_783, test: test_784, update: update_785, body: body_786 }); } }, { key: "expandYieldExpression", - value: function expandYieldExpression(term_779) { - var expr_780 = term_779.expression == null ? null : this.expand(term_779.expression); - return new _terms2.default("YieldExpression", { expression: expr_780 }); + value: function expandYieldExpression(term_787) { + var expr_788 = term_787.expression == null ? null : this.expand(term_787.expression); + return new _terms2.default("YieldExpression", { expression: expr_788 }); } }, { key: "expandYieldGeneratorExpression", - value: function expandYieldGeneratorExpression(term_781) { - var expr_782 = term_781.expression == null ? null : this.expand(term_781.expression); - return new _terms2.default("YieldGeneratorExpression", { expression: expr_782 }); + value: function expandYieldGeneratorExpression(term_789) { + var expr_790 = term_789.expression == null ? null : this.expand(term_789.expression); + return new _terms2.default("YieldGeneratorExpression", { expression: expr_790 }); } }, { key: "expandWhileStatement", - value: function expandWhileStatement(term_783) { - return new _terms2.default("WhileStatement", { test: this.expand(term_783.test), body: this.expand(term_783.body) }); + value: function expandWhileStatement(term_791) { + return new _terms2.default("WhileStatement", { test: this.expand(term_791.test), body: this.expand(term_791.body) }); } }, { key: "expandIfStatement", - value: function expandIfStatement(term_784) { - var consequent_785 = term_784.consequent == null ? null : this.expand(term_784.consequent); - var alternate_786 = term_784.alternate == null ? null : this.expand(term_784.alternate); - return new _terms2.default("IfStatement", { test: this.expand(term_784.test), consequent: consequent_785, alternate: alternate_786 }); + value: function expandIfStatement(term_792) { + var consequent_793 = term_792.consequent == null ? null : this.expand(term_792.consequent); + var alternate_794 = term_792.alternate == null ? null : this.expand(term_792.alternate); + return new _terms2.default("IfStatement", { test: this.expand(term_792.test), consequent: consequent_793, alternate: alternate_794 }); } }, { key: "expandBlockStatement", - value: function expandBlockStatement(term_787) { - return new _terms2.default("BlockStatement", { block: this.expand(term_787.block) }); + value: function expandBlockStatement(term_795) { + return new _terms2.default("BlockStatement", { block: this.expand(term_795.block) }); } }, { key: "expandBlock", - value: function expandBlock(term_788) { + value: function expandBlock(term_796) { var _this8 = this; - return new _terms2.default("Block", { statements: term_788.statements.map(function (s_789) { - return _this8.expand(s_789); + return new _terms2.default("Block", { statements: term_796.statements.map(function (s_797) { + return _this8.expand(s_797); }).toArray() }); } }, { key: "expandVariableDeclarationStatement", - value: function expandVariableDeclarationStatement(term_790) { - return new _terms2.default("VariableDeclarationStatement", { declaration: this.expand(term_790.declaration) }); + value: function expandVariableDeclarationStatement(term_798) { + return new _terms2.default("VariableDeclarationStatement", { declaration: this.expand(term_798.declaration) }); } }, { key: "expandReturnStatement", - value: function expandReturnStatement(term_791) { - if (term_791.expression == null) { - return term_791; + value: function expandReturnStatement(term_799) { + if (term_799.expression == null) { + return term_799; } - return new _terms2.default("ReturnStatement", { expression: this.expand(term_791.expression) }); + return new _terms2.default("ReturnStatement", { expression: this.expand(term_799.expression) }); } }, { key: "expandClassDeclaration", - value: function expandClassDeclaration(term_792) { + value: function expandClassDeclaration(term_800) { var _this9 = this; - return new _terms2.default("ClassDeclaration", { name: term_792.name == null ? null : this.expand(term_792.name), super: term_792.super == null ? null : this.expand(term_792.super), elements: term_792.elements.map(function (el_793) { - return _this9.expand(el_793); + return new _terms2.default("ClassDeclaration", { name: term_800.name == null ? null : this.expand(term_800.name), super: term_800.super == null ? null : this.expand(term_800.super), elements: term_800.elements.map(function (el_801) { + return _this9.expand(el_801); }).toArray() }); } }, { key: "expandClassExpression", - value: function expandClassExpression(term_794) { + value: function expandClassExpression(term_802) { var _this10 = this; - return new _terms2.default("ClassExpression", { name: term_794.name == null ? null : this.expand(term_794.name), super: term_794.super == null ? null : this.expand(term_794.super), elements: term_794.elements.map(function (el_795) { - return _this10.expand(el_795); + return new _terms2.default("ClassExpression", { name: term_802.name == null ? null : this.expand(term_802.name), super: term_802.super == null ? null : this.expand(term_802.super), elements: term_802.elements.map(function (el_803) { + return _this10.expand(el_803); }).toArray() }); } }, { key: "expandClassElement", - value: function expandClassElement(term_796) { - return new _terms2.default("ClassElement", { isStatic: term_796.isStatic, method: this.expand(term_796.method) }); + value: function expandClassElement(term_804) { + return new _terms2.default("ClassElement", { isStatic: term_804.isStatic, method: this.expand(term_804.method) }); } }, { key: "expandThisExpression", - value: function expandThisExpression(term_797) { - return term_797; + value: function expandThisExpression(term_805) { + return term_805; } }, { key: "expandSyntaxTemplate", - value: function expandSyntaxTemplate(term_798) { + value: function expandSyntaxTemplate(term_806) { var _this11 = this; - var expander_799 = new _expander2.default(this.context); - var r_800 = (0, _templateProcessor.processTemplate)(term_798.template.inner()); - var str_801 = _syntax2.default.fromString(_serializer.serializer.write(r_800.template)); - var callee_802 = new _terms2.default("IdentifierExpression", { name: _syntax2.default.fromIdentifier("syntaxTemplate") }); - var expandedInterps_803 = r_800.interp.map(function (i_805) { - var enf_806 = new _enforester.Enforester(i_805, (0, _immutable.List)(), _this11.context); - return _this11.expand(enf_806.enforest("expression")); + var expander_807 = new _expander2.default(this.context); + var r_808 = (0, _templateProcessor.processTemplate)(term_806.template.inner()); + var str_809 = _syntax2.default.fromString(_serializer.serializer.write(r_808.template)); + var callee_810 = new _terms2.default("IdentifierExpression", { name: _syntax2.default.fromIdentifier("syntaxTemplate") }); + var expandedInterps_811 = r_808.interp.map(function (i_813) { + var enf_814 = new _enforester.Enforester(i_813, (0, _immutable.List)(), _this11.context); + return _this11.expand(enf_814.enforest("expression")); }); - var args_804 = _immutable.List.of(new _terms2.default("LiteralStringExpression", { value: str_801 })).concat(expandedInterps_803); - return new _terms2.default("CallExpression", { callee: callee_802, arguments: args_804 }); + var args_812 = _immutable.List.of(new _terms2.default("LiteralStringExpression", { value: str_809 })).concat(expandedInterps_811); + return new _terms2.default("CallExpression", { callee: callee_810, arguments: args_812 }); } }, { key: "expandSyntaxQuote", - value: function expandSyntaxQuote(term_807) { - var str_808 = new _terms2.default("LiteralStringExpression", { value: _syntax2.default.fromString(_serializer.serializer.write(term_807.name)) }); - return new _terms2.default("TemplateExpression", { tag: term_807.template.tag, elements: term_807.template.elements.push(str_808).push(new _terms2.default("TemplateElement", { rawValue: "" })).toArray() }); + value: function expandSyntaxQuote(term_815) { + var str_816 = new _terms2.default("LiteralStringExpression", { value: _syntax2.default.fromString(_serializer.serializer.write(term_815.name)) }); + return new _terms2.default("TemplateExpression", { tag: term_815.template.tag, elements: term_815.template.elements.push(str_816).push(new _terms2.default("TemplateElement", { rawValue: "" })).toArray() }); } }, { key: "expandStaticMemberExpression", - value: function expandStaticMemberExpression(term_809) { - return new _terms2.default("StaticMemberExpression", { object: this.expand(term_809.object), property: term_809.property }); + value: function expandStaticMemberExpression(term_817) { + return new _terms2.default("StaticMemberExpression", { object: this.expand(term_817.object), property: term_817.property }); } }, { key: "expandArrayExpression", - value: function expandArrayExpression(term_810) { + value: function expandArrayExpression(term_818) { var _this12 = this; - return new _terms2.default("ArrayExpression", { elements: term_810.elements.map(function (t_811) { - return t_811 == null ? t_811 : _this12.expand(t_811); + return new _terms2.default("ArrayExpression", { elements: term_818.elements.map(function (t_819) { + return t_819 == null ? t_819 : _this12.expand(t_819); }) }); } }, { key: "expandImport", - value: function expandImport(term_812) { - return term_812; + value: function expandImport(term_820) { + return term_820; } }, { key: "expandImportNamespace", - value: function expandImportNamespace(term_813) { - return term_813; + value: function expandImportNamespace(term_821) { + return term_821; } }, { key: "expandExport", - value: function expandExport(term_814) { - return new _terms2.default("Export", { declaration: this.expand(term_814.declaration) }); + value: function expandExport(term_822) { + return new _terms2.default("Export", { declaration: this.expand(term_822.declaration) }); } }, { key: "expandExportDefault", - value: function expandExportDefault(term_815) { - return new _terms2.default("ExportDefault", { body: this.expand(term_815.body) }); + value: function expandExportDefault(term_823) { + return new _terms2.default("ExportDefault", { body: this.expand(term_823.body) }); } }, { key: "expandExportFrom", - value: function expandExportFrom(term_816) { - return term_816; + value: function expandExportFrom(term_824) { + return term_824; } }, { key: "expandExportAllFrom", - value: function expandExportAllFrom(term_817) { - return term_817; + value: function expandExportAllFrom(term_825) { + return term_825; } }, { key: "expandExportSpecifier", - value: function expandExportSpecifier(term_818) { - return term_818; + value: function expandExportSpecifier(term_826) { + return term_826; } }, { key: "expandStaticPropertyName", - value: function expandStaticPropertyName(term_819) { - return term_819; + value: function expandStaticPropertyName(term_827) { + return term_827; } }, { key: "expandDataProperty", - value: function expandDataProperty(term_820) { - return new _terms2.default("DataProperty", { name: this.expand(term_820.name), expression: this.expand(term_820.expression) }); + value: function expandDataProperty(term_828) { + return new _terms2.default("DataProperty", { name: this.expand(term_828.name), expression: this.expand(term_828.expression) }); } }, { key: "expandObjectExpression", - value: function expandObjectExpression(term_821) { + value: function expandObjectExpression(term_829) { var _this13 = this; - return new _terms2.default("ObjectExpression", { properties: term_821.properties.map(function (t_822) { - return _this13.expand(t_822); + return new _terms2.default("ObjectExpression", { properties: term_829.properties.map(function (t_830) { + return _this13.expand(t_830); }) }); } }, { key: "expandVariableDeclarator", - value: function expandVariableDeclarator(term_823) { - var init_824 = term_823.init == null ? null : this.expand(term_823.init); - return new _terms2.default("VariableDeclarator", { binding: this.expand(term_823.binding), init: init_824 }); + value: function expandVariableDeclarator(term_831) { + var init_832 = term_831.init == null ? null : this.expand(term_831.init); + return new _terms2.default("VariableDeclarator", { binding: this.expand(term_831.binding), init: init_832 }); } }, { key: "expandVariableDeclaration", - value: function expandVariableDeclaration(term_825) { + value: function expandVariableDeclaration(term_833) { var _this14 = this; - return new _terms2.default("VariableDeclaration", { kind: term_825.kind, declarators: term_825.declarators.map(function (d_826) { - return _this14.expand(d_826); + return new _terms2.default("VariableDeclaration", { kind: term_833.kind, declarators: term_833.declarators.map(function (d_834) { + return _this14.expand(d_834); }) }); } }, { key: "expandParenthesizedExpression", - value: function expandParenthesizedExpression(term_827) { - if (term_827.inner.size === 0) { + value: function expandParenthesizedExpression(term_835) { + if (term_835.inner.size === 0) { throw new Error("unexpected end of input"); } - var enf_828 = new _enforester.Enforester(term_827.inner, (0, _immutable.List)(), this.context); - var lookahead_829 = enf_828.peek(); - var t_830 = enf_828.enforestExpression(); - if (t_830 == null || enf_828.rest.size > 0) { - throw enf_828.createError(lookahead_829, "unexpected syntax"); + var enf_836 = new _enforester.Enforester(term_835.inner, (0, _immutable.List)(), this.context); + var lookahead_837 = enf_836.peek(); + var t_838 = enf_836.enforestExpression(); + if (t_838 == null || enf_836.rest.size > 0) { + throw enf_836.createError(lookahead_837, "unexpected syntax"); } - return this.expand(t_830); + return this.expand(t_838); } }, { key: "expandUnaryExpression", - value: function expandUnaryExpression(term_831) { - return new _terms2.default("UnaryExpression", { operator: term_831.operator, operand: this.expand(term_831.operand) }); + value: function expandUnaryExpression(term_839) { + return new _terms2.default("UnaryExpression", { operator: term_839.operator, operand: this.expand(term_839.operand) }); } }, { key: "expandUpdateExpression", - value: function expandUpdateExpression(term_832) { - return new _terms2.default("UpdateExpression", { isPrefix: term_832.isPrefix, operator: term_832.operator, operand: this.expand(term_832.operand) }); + value: function expandUpdateExpression(term_840) { + return new _terms2.default("UpdateExpression", { isPrefix: term_840.isPrefix, operator: term_840.operator, operand: this.expand(term_840.operand) }); } }, { key: "expandBinaryExpression", - value: function expandBinaryExpression(term_833) { - var left_834 = this.expand(term_833.left); - var right_835 = this.expand(term_833.right); - return new _terms2.default("BinaryExpression", { left: left_834, operator: term_833.operator, right: right_835 }); + value: function expandBinaryExpression(term_841) { + var left_842 = this.expand(term_841.left); + var right_843 = this.expand(term_841.right); + return new _terms2.default("BinaryExpression", { left: left_842, operator: term_841.operator, right: right_843 }); } }, { key: "expandConditionalExpression", - value: function expandConditionalExpression(term_836) { - return new _terms2.default("ConditionalExpression", { test: this.expand(term_836.test), consequent: this.expand(term_836.consequent), alternate: this.expand(term_836.alternate) }); + value: function expandConditionalExpression(term_844) { + return new _terms2.default("ConditionalExpression", { test: this.expand(term_844.test), consequent: this.expand(term_844.consequent), alternate: this.expand(term_844.alternate) }); } }, { key: "expandNewTargetExpression", - value: function expandNewTargetExpression(term_837) { - return term_837; + value: function expandNewTargetExpression(term_845) { + return term_845; } }, { key: "expandNewExpression", - value: function expandNewExpression(term_838) { + value: function expandNewExpression(term_846) { var _this15 = this; - var callee_839 = this.expand(term_838.callee); - var enf_840 = new _enforester.Enforester(term_838.arguments, (0, _immutable.List)(), this.context); - var args_841 = enf_840.enforestArgumentList().map(function (arg_842) { - return _this15.expand(arg_842); + var callee_847 = this.expand(term_846.callee); + var enf_848 = new _enforester.Enforester(term_846.arguments, (0, _immutable.List)(), this.context); + var args_849 = enf_848.enforestArgumentList().map(function (arg_850) { + return _this15.expand(arg_850); }); - return new _terms2.default("NewExpression", { callee: callee_839, arguments: args_841.toArray() }); + return new _terms2.default("NewExpression", { callee: callee_847, arguments: args_849.toArray() }); } }, { key: "expandSuper", - value: function expandSuper(term_843) { - return term_843; + value: function expandSuper(term_851) { + return term_851; } }, { key: "expandCallExpression", - value: function expandCallExpression(term_844) { + value: function expandCallExpression(term_852) { var _this16 = this; - var callee_845 = this.expand(term_844.callee); - var enf_846 = new _enforester.Enforester(term_844.arguments, (0, _immutable.List)(), this.context); - var args_847 = enf_846.enforestArgumentList().map(function (arg_848) { - return _this16.expand(arg_848); + var callee_853 = this.expand(term_852.callee); + var enf_854 = new _enforester.Enforester(term_852.arguments, (0, _immutable.List)(), this.context); + var args_855 = enf_854.enforestArgumentList().map(function (arg_856) { + return _this16.expand(arg_856); }); - return new _terms2.default("CallExpression", { callee: callee_845, arguments: args_847 }); + return new _terms2.default("CallExpression", { callee: callee_853, arguments: args_855 }); } }, { key: "expandSpreadElement", - value: function expandSpreadElement(term_849) { - return new _terms2.default("SpreadElement", { expression: this.expand(term_849.expression) }); + value: function expandSpreadElement(term_857) { + return new _terms2.default("SpreadElement", { expression: this.expand(term_857.expression) }); } }, { key: "expandExpressionStatement", - value: function expandExpressionStatement(term_850) { - var child_851 = this.expand(term_850.expression); - return new _terms2.default("ExpressionStatement", { expression: child_851 }); + value: function expandExpressionStatement(term_858) { + var child_859 = this.expand(term_858.expression); + return new _terms2.default("ExpressionStatement", { expression: child_859 }); } }, { key: "expandLabeledStatement", - value: function expandLabeledStatement(term_852) { - return new _terms2.default("LabeledStatement", { label: term_852.label.val(), body: this.expand(term_852.body) }); + value: function expandLabeledStatement(term_860) { + return new _terms2.default("LabeledStatement", { label: term_860.label.val(), body: this.expand(term_860.body) }); } }, { key: "doFunctionExpansion", - value: function doFunctionExpansion(term_853, type_854) { + value: function doFunctionExpansion(term_861, type_862) { var _this17 = this; - var scope_855 = (0, _scope.freshScope)("fun"); - var red_856 = new _applyScopeInParamsReducer2.default(scope_855, this.context); - var params_857 = void 0; - if (type_854 !== "Getter" && type_854 !== "Setter") { - params_857 = red_856.transform(term_853.params); - params_857 = this.expand(params_857); + var scope_863 = (0, _scope.freshScope)("fun"); + var red_864 = new _applyScopeInParamsReducer2.default(scope_863, this.context); + var params_865 = void 0; + if (type_862 !== "Getter" && type_862 !== "Setter") { + params_865 = red_864.transform(term_861.params); + params_865 = this.expand(params_865); } - this.context.currentScope.push(scope_855); - var expander_858 = new _expander2.default(this.context); - var markedBody_859 = void 0, - bodyTerm_860 = void 0; - if (term_853.body instanceof _terms2.default) { - bodyTerm_860 = this.expand(term_853.body.addScope(scope_855, this.context.bindings)); + this.context.currentScope.push(scope_863); + var expander_866 = new _expander2.default(this.context); + var markedBody_867 = void 0, + bodyTerm_868 = void 0; + if (term_861.body instanceof _terms2.default) { + bodyTerm_868 = this.expand(term_861.body.addScope(scope_863, this.context.bindings)); } else { - markedBody_859 = term_853.body.map(function (b_861) { - return b_861.addScope(scope_855, _this17.context.bindings); + markedBody_867 = term_861.body.map(function (b_869) { + return b_869.addScope(scope_863, _this17.context.bindings); }); - bodyTerm_860 = new _terms2.default("FunctionBody", { directives: (0, _immutable.List)(), statements: expander_858.expand(markedBody_859) }); + bodyTerm_868 = new _terms2.default("FunctionBody", { directives: (0, _immutable.List)(), statements: expander_866.expand(markedBody_867) }); } this.context.currentScope.pop(); - if (type_854 === "Getter") { - return new _terms2.default(type_854, { name: this.expand(term_853.name), body: bodyTerm_860 }); - } else if (type_854 === "Setter") { - return new _terms2.default(type_854, { name: this.expand(term_853.name), param: term_853.param, body: bodyTerm_860 }); + if (type_862 === "Getter") { + return new _terms2.default(type_862, { name: this.expand(term_861.name), body: bodyTerm_868 }); + } else if (type_862 === "Setter") { + return new _terms2.default(type_862, { name: this.expand(term_861.name), param: term_861.param, body: bodyTerm_868 }); } - return new _terms2.default(type_854, { name: term_853.name, isGenerator: term_853.isGenerator, params: params_857, body: bodyTerm_860 }); + return new _terms2.default(type_862, { name: term_861.name, isGenerator: term_861.isGenerator, params: params_865, body: bodyTerm_868 }); } }, { key: "expandMethod", - value: function expandMethod(term_862) { - return this.doFunctionExpansion(term_862, "Method"); + value: function expandMethod(term_870) { + return this.doFunctionExpansion(term_870, "Method"); } }, { key: "expandSetter", - value: function expandSetter(term_863) { - return this.doFunctionExpansion(term_863, "Setter"); + value: function expandSetter(term_871) { + return this.doFunctionExpansion(term_871, "Setter"); } }, { key: "expandGetter", - value: function expandGetter(term_864) { - return this.doFunctionExpansion(term_864, "Getter"); + value: function expandGetter(term_872) { + return this.doFunctionExpansion(term_872, "Getter"); } }, { key: "expandFunctionDeclaration", - value: function expandFunctionDeclaration(term_865) { - return this.doFunctionExpansion(term_865, "FunctionDeclaration"); + value: function expandFunctionDeclaration(term_873) { + return this.doFunctionExpansion(term_873, "FunctionDeclaration"); } }, { key: "expandFunctionExpression", - value: function expandFunctionExpression(term_866) { - return this.doFunctionExpansion(term_866, "FunctionExpression"); + value: function expandFunctionExpression(term_874) { + return this.doFunctionExpansion(term_874, "FunctionExpression"); } }, { key: "expandCompoundAssignmentExpression", - value: function expandCompoundAssignmentExpression(term_867) { - return new _terms2.default("CompoundAssignmentExpression", { binding: this.expand(term_867.binding), operator: term_867.operator, expression: this.expand(term_867.expression) }); + value: function expandCompoundAssignmentExpression(term_875) { + return new _terms2.default("CompoundAssignmentExpression", { binding: this.expand(term_875.binding), operator: term_875.operator, expression: this.expand(term_875.expression) }); } }, { key: "expandAssignmentExpression", - value: function expandAssignmentExpression(term_868) { - return new _terms2.default("AssignmentExpression", { binding: this.expand(term_868.binding), expression: this.expand(term_868.expression) }); + value: function expandAssignmentExpression(term_876) { + return new _terms2.default("AssignmentExpression", { binding: this.expand(term_876.binding), expression: this.expand(term_876.expression) }); } }, { key: "expandEmptyStatement", - value: function expandEmptyStatement(term_869) { - return term_869; + value: function expandEmptyStatement(term_877) { + return term_877; } }, { key: "expandLiteralBooleanExpression", - value: function expandLiteralBooleanExpression(term_870) { - return term_870; + value: function expandLiteralBooleanExpression(term_878) { + return term_878; } }, { key: "expandLiteralNumericExpression", - value: function expandLiteralNumericExpression(term_871) { - return term_871; + value: function expandLiteralNumericExpression(term_879) { + return term_879; } }, { key: "expandLiteralInfinityExpression", - value: function expandLiteralInfinityExpression(term_872) { - return term_872; + value: function expandLiteralInfinityExpression(term_880) { + return term_880; } }, { key: "expandIdentifierExpression", - value: function expandIdentifierExpression(term_873) { - var trans_874 = this.context.env.get(term_873.name.resolve()); - if (trans_874) { - return new _terms2.default("IdentifierExpression", { name: trans_874.id }); + value: function expandIdentifierExpression(term_881) { + var trans_882 = this.context.env.get(term_881.name.resolve()); + if (trans_882) { + return new _terms2.default("IdentifierExpression", { name: trans_882.id }); } - return term_873; + return term_881; } }, { key: "expandLiteralNullExpression", - value: function expandLiteralNullExpression(term_875) { - return term_875; + value: function expandLiteralNullExpression(term_883) { + return term_883; } }, { key: "expandLiteralStringExpression", - value: function expandLiteralStringExpression(term_876) { - return term_876; + value: function expandLiteralStringExpression(term_884) { + return term_884; } }, { key: "expandLiteralRegExpExpression", - value: function expandLiteralRegExpExpression(term_877) { - return term_877; + value: function expandLiteralRegExpExpression(term_885) { + return term_885; } }]); @@ -622,4 +622,4 @@ var TermExpander = function () { }(); exports.default = TermExpander; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3Rlcm0tZXhwYW5kZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7QUFDQTs7OztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztJQUNxQixZO0FBQ25CLHdCQUFZLFdBQVosRUFBeUI7QUFBQTs7QUFDdkIsU0FBSyxPQUFMLEdBQWUsV0FBZjtBQUNEOzs7OzJCQUNNLFEsRUFBVTtBQUNmLFVBQUksWUFBWSxXQUFXLFNBQVMsSUFBcEM7QUFDQSxVQUFJLE9BQU8sS0FBSyxTQUFMLENBQVAsS0FBMkIsVUFBL0IsRUFBMkM7QUFDekMsZUFBTyxLQUFLLFNBQUwsRUFBZ0IsUUFBaEIsQ0FBUDtBQUNEO0FBQ0QsMEJBQU8sS0FBUCxFQUFjLHFDQUFxQyxTQUFTLElBQTVEO0FBQ0Q7Ozs2Q0FDd0IsUSxFQUFVO0FBQ2pDLGFBQU8sb0JBQVMsb0JBQVQsRUFBK0IsRUFBQyxLQUFLLFNBQVMsR0FBVCxJQUFnQixJQUFoQixHQUF1QixJQUF2QixHQUE4QixLQUFLLE1BQUwsQ0FBWSxTQUFTLEdBQXJCLENBQXBDLEVBQStELFVBQVUsU0FBUyxRQUFULENBQWtCLE9BQWxCLEVBQXpFLEVBQS9CLENBQVA7QUFDRDs7O3lDQUNvQixRLEVBQVU7QUFDN0IsYUFBTyxvQkFBUyxnQkFBVCxFQUEyQixFQUFDLE9BQU8sU0FBUyxLQUFULEdBQWlCLFNBQVMsS0FBVCxDQUFlLEdBQWYsRUFBakIsR0FBd0MsSUFBaEQsRUFBM0IsQ0FBUDtBQUNEOzs7MkNBQ3NCLFEsRUFBVTtBQUMvQixhQUFPLG9CQUFTLGtCQUFULEVBQTZCLEVBQUMsTUFBTSxLQUFLLE1BQUwsQ0FBWSxTQUFTLElBQXJCLENBQVAsRUFBbUMsTUFBTSxLQUFLLE1BQUwsQ0FBWSxTQUFTLElBQXJCLENBQXpDLEVBQTdCLENBQVA7QUFDRDs7O3dDQUNtQixRLEVBQVU7QUFDNUIsYUFBTyxvQkFBUyxl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SyxNQUFMLENBQVksU0FBUyxVQUFyQixDQUFsRixFQUF6QyxDQUFQO0FBQ0Q7OzsrQ0FDMEIsUSxFQUFVO0FBQ25DLGFBQU8sb0JBQVMsc0JBQVQsRUFBaUMsRUFBQyxTQUFTLEtBQUssTUFBTCxDQUFZLFNBQVMsT0FBckIsQ0FBVixFQUF5QyxZQUFZLEtBQUssTUFBTCxDQUFZLFNBQVMsVUFBckIsQ0FBckQsRUFBakMsQ0FBUDtBQUNEOzs7eUNBQ29CLFEsRUFBVTtBQUM3QixhQUFPLFFBQVA7QUFDRDs7O21EQUM4QixRLEVBQVU7QUFDdkMsYUFBTyxRQUFQO0FBQ0Q7OzttREFDOEIsUSxFQUFVO0FBQ3ZDLGFBQU8sUUFBUDtBQUNEOzs7b0RBQytCLFEsRUFBVTtBQUN4QyxhQUFPLFFBQVA7QUFDRDs7OytDQUMwQixRLEVBQVU7QUFDbkMsVUFBSSxZQUFZLEtBQUssT0FBTCxDQUFhLEdBQWIsQ0FBaUIsR0FBakIsQ0FBcUIsU0FBUyxJQUFULENBQWMsT0FBZCxFQUFyQixDQUFoQjtBQUNBLFVBQUksU0FBSixFQUFlO0FBQ2IsZUFBTyxvQkFBUyxzQkFBVCxFQUFpQyxFQUFDLE1BQU0sVUFBVSxFQUFqQixFQUFqQyxDQUFQO0FBQ0Q7QUFDRCxhQUFPLFFBQVA7QUFDRDs7O2dEQUMyQixRLEVBQVU7QUFDcEMsYUFBTyxRQUFQO0FBQ0Q7OztrREFDNkIsUSxFQUFVO0FBQ3RDLGFBQU8sUUFBUDtBQUNEOzs7a0RBQzZCLFEsRUFBVTtBQUN0QyxhQUFPLFFBQVA7QUFDRDs7Ozs7O2tCQTNVa0IsWSIsImZpbGUiOiJ0ZXJtLWV4cGFuZGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMaXN0fSBmcm9tIFwiaW1tdXRhYmxlXCI7XG5pbXBvcnQgVGVybSwge2lzRU9GLCBpc0JpbmRpbmdJZGVudGlmaWVyLCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIGlzRnVuY3Rpb25FeHByZXNzaW9uLCBpc0Z1bmN0aW9uVGVybSwgaXNGdW5jdGlvbldpdGhOYW1lLCBpc1N5bnRheERlY2xhcmF0aW9uLCBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sIGlzVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCwgaXNJbXBvcnQsIGlzRXhwb3J0fSBmcm9tIFwiLi90ZXJtc1wiO1xuaW1wb3J0IHtTY29wZSwgZnJlc2hTY29wZX0gZnJvbSBcIi4vc2NvcGVcIjtcbmltcG9ydCBBcHBseVNjb3BlSW5QYXJhbXNSZWR1Y2VyIGZyb20gXCIuL2FwcGx5LXNjb3BlLWluLXBhcmFtcy1yZWR1Y2VyXCI7XG5pbXBvcnQgcmVkdWNlciwge01vbm9pZGFsUmVkdWNlcn0gZnJvbSBcInNoaWZ0LXJlZHVjZXJcIjtcbmltcG9ydCBFeHBhbmRlciBmcm9tIFwiLi9leHBhbmRlclwiO1xuaW1wb3J0IFN5bnRheCBmcm9tIFwiLi9zeW50YXhcIjtcbmltcG9ydCB7c2VyaWFsaXplciwgbWFrZURlc2VyaWFsaXplcn0gZnJvbSBcIi4vc2VyaWFsaXplclwiO1xuaW1wb3J0IHtlbmZvcmVzdEV4cHIsIEVuZm9yZXN0ZXJ9IGZyb20gXCIuL2VuZm9yZXN0ZXJcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7cHJvY2Vzc1RlbXBsYXRlfSBmcm9tIFwiLi90ZW1wbGF0ZS1wcm9jZXNzb3IuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1FeHBhbmRlciB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHRfNzMzKSB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dF83MzM7XG4gIH1cbiAgZXhwYW5kKHRlcm1fNzM0KSB7XG4gICAgbGV0IGZpZWxkXzczNSA9IFwiZXhwYW5kXCIgKyB0ZXJtXzczNC50eXBlO1xuICAgIGlmICh0eXBlb2YgdGhpc1tmaWVsZF83MzVdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiB0aGlzW2ZpZWxkXzczNV0odGVybV83MzQpO1xuICAgIH1cbiAgICBhc3NlcnQoZmFsc2UsIFwiZXhwYW5kIG5vdCBpbXBsZW1lbnRlZCB5ZXQgZm9yOiBcIiArIHRlcm1fNzM0LnR5cGUpO1xuICB9XG4gIGV4cGFuZFRlbXBsYXRlRXhwcmVzc2lvbih0ZXJtXzczNikge1xuICAgIHJldHVybiBuZXcgVGVybShcIlRlbXBsYXRlRXhwcmVzc2lvblwiLCB7dGFnOiB0ZXJtXzczNi50YWcgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzczNi50YWcpLCBlbGVtZW50czogdGVybV83MzYuZWxlbWVudHMudG9BcnJheSgpfSk7XG4gIH1cbiAgZXhwYW5kQnJlYWtTdGF0ZW1lbnQodGVybV83MzcpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCcmVha1N0YXRlbWVudFwiLCB7bGFiZWw6IHRlcm1fNzM3LmxhYmVsID8gdGVybV83MzcubGFiZWwudmFsKCkgOiBudWxsfSk7XG4gIH1cbiAgZXhwYW5kRG9XaGlsZVN0YXRlbWVudCh0ZXJtXzczOCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkRvV2hpbGVTdGF0ZW1lbnRcIiwge2JvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzM4LmJvZHkpLCB0ZXN0OiB0aGlzLmV4cGFuZCh0ZXJtXzczOC50ZXN0KX0pO1xuICB9XG4gIGV4cGFuZFdpdGhTdGF0ZW1lbnQodGVybV83MzkpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJXaXRoU3RhdGVtZW50XCIsIHtib2R5OiB0aGlzLmV4cGFuZCh0ZXJtXzczOS5ib2R5KSwgb2JqZWN0OiB0aGlzLmV4cGFuZCh0ZXJtXzczOS5vYmplY3QpfSk7XG4gIH1cbiAgZXhwYW5kRGVidWdnZXJTdGF0ZW1lbnQodGVybV83NDApIHtcbiAgICByZXR1cm4gdGVybV83NDA7XG4gIH1cbiAgZXhwYW5kQ29udGludWVTdGF0ZW1lbnQodGVybV83NDEpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDb250aW51ZVN0YXRlbWVudFwiLCB7bGFiZWw6IHRlcm1fNzQxLmxhYmVsID8gdGVybV83NDEubGFiZWwudmFsKCkgOiBudWxsfSk7XG4gIH1cbiAgZXhwYW5kU3dpdGNoU3RhdGVtZW50V2l0aERlZmF1bHQodGVybV83NDIpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJTd2l0Y2hTdGF0ZW1lbnRXaXRoRGVmYXVsdFwiLCB7ZGlzY3JpbWluYW50OiB0aGlzLmV4cGFuZCh0ZXJtXzc0Mi5kaXNjcmltaW5hbnQpLCBwcmVEZWZhdWx0Q2FzZXM6IHRlcm1fNzQyLnByZURlZmF1bHRDYXNlcy5tYXAoY183NDMgPT4gdGhpcy5leHBhbmQoY183NDMpKS50b0FycmF5KCksIGRlZmF1bHRDYXNlOiB0aGlzLmV4cGFuZCh0ZXJtXzc0Mi5kZWZhdWx0Q2FzZSksIHBvc3REZWZhdWx0Q2FzZXM6IHRlcm1fNzQyLnBvc3REZWZhdWx0Q2FzZXMubWFwKGNfNzQ0ID0+IHRoaXMuZXhwYW5kKGNfNzQ0KSkudG9BcnJheSgpfSk7XG4gIH1cbiAgZXhwYW5kQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uKHRlcm1fNzQ1KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uXCIsIHtvYmplY3Q6IHRoaXMuZXhwYW5kKHRlcm1fNzQ1Lm9iamVjdCksIGV4cHJlc3Npb246IHRoaXMuZXhwYW5kKHRlcm1fNzQ1LmV4cHJlc3Npb24pfSk7XG4gIH1cbiAgZXhwYW5kU3dpdGNoU3RhdGVtZW50KHRlcm1fNzQ2KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiU3dpdGNoU3RhdGVtZW50XCIsIHtkaXNjcmltaW5hbnQ6IHRoaXMuZXhwYW5kKHRlcm1fNzQ2LmRpc2NyaW1pbmFudCksIGNhc2VzOiB0ZXJtXzc0Ni5jYXNlcy5tYXAoY183NDcgPT4gdGhpcy5leHBhbmQoY183NDcpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRGb3JtYWxQYXJhbWV0ZXJzKHRlcm1fNzQ4KSB7XG4gICAgbGV0IHJlc3RfNzQ5ID0gdGVybV83NDgucmVzdCA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fNzQ4LnJlc3QpO1xuICAgIHJldHVybiBuZXcgVGVybShcIkZvcm1hbFBhcmFtZXRlcnNcIiwge2l0ZW1zOiB0ZXJtXzc0OC5pdGVtcy5tYXAoaV83NTAgPT4gdGhpcy5leHBhbmQoaV83NTApKSwgcmVzdDogcmVzdF83NDl9KTtcbiAgfVxuICBleHBhbmRBcnJvd0V4cHJlc3Npb24odGVybV83NTEpIHtcbiAgICByZXR1cm4gdGhpcy5kb0Z1bmN0aW9uRXhwYW5zaW9uKHRlcm1fNzUxLCBcIkFycm93RXhwcmVzc2lvblwiKTtcbiAgfVxuICBleHBhbmRTd2l0Y2hEZWZhdWx0KHRlcm1fNzUyKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiU3dpdGNoRGVmYXVsdFwiLCB7Y29uc2VxdWVudDogdGVybV83NTIuY29uc2VxdWVudC5tYXAoY183NTMgPT4gdGhpcy5leHBhbmQoY183NTMpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRTd2l0Y2hDYXNlKHRlcm1fNzU0KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiU3dpdGNoQ2FzZVwiLCB7dGVzdDogdGhpcy5leHBhbmQodGVybV83NTQudGVzdCksIGNvbnNlcXVlbnQ6IHRlcm1fNzU0LmNvbnNlcXVlbnQubWFwKGNfNzU1ID0+IHRoaXMuZXhwYW5kKGNfNzU1KSkudG9BcnJheSgpfSk7XG4gIH1cbiAgZXhwYW5kRm9ySW5TdGF0ZW1lbnQodGVybV83NTYpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJGb3JJblN0YXRlbWVudFwiLCB7bGVmdDogdGhpcy5leHBhbmQodGVybV83NTYubGVmdCksIHJpZ2h0OiB0aGlzLmV4cGFuZCh0ZXJtXzc1Ni5yaWdodCksIGJvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzU2LmJvZHkpfSk7XG4gIH1cbiAgZXhwYW5kVHJ5Q2F0Y2hTdGF0ZW1lbnQodGVybV83NTcpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJUcnlDYXRjaFN0YXRlbWVudFwiLCB7Ym9keTogdGhpcy5leHBhbmQodGVybV83NTcuYm9keSksIGNhdGNoQ2xhdXNlOiB0aGlzLmV4cGFuZCh0ZXJtXzc1Ny5jYXRjaENsYXVzZSl9KTtcbiAgfVxuICBleHBhbmRUcnlGaW5hbGx5U3RhdGVtZW50KHRlcm1fNzU4KSB7XG4gICAgbGV0IGNhdGNoQ2xhdXNlXzc1OSA9IHRlcm1fNzU4LmNhdGNoQ2xhdXNlID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83NTguY2F0Y2hDbGF1c2UpO1xuICAgIHJldHVybiBuZXcgVGVybShcIlRyeUZpbmFsbHlTdGF0ZW1lbnRcIiwge2JvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzU4LmJvZHkpLCBjYXRjaENsYXVzZTogY2F0Y2hDbGF1c2VfNzU5LCBmaW5hbGl6ZXI6IHRoaXMuZXhwYW5kKHRlcm1fNzU4LmZpbmFsaXplcil9KTtcbiAgfVxuICBleHBhbmRDYXRjaENsYXVzZSh0ZXJtXzc2MCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkNhdGNoQ2xhdXNlXCIsIHtiaW5kaW5nOiB0aGlzLmV4cGFuZCh0ZXJtXzc2MC5iaW5kaW5nKSwgYm9keTogdGhpcy5leHBhbmQodGVybV83NjAuYm9keSl9KTtcbiAgfVxuICBleHBhbmRUaHJvd1N0YXRlbWVudCh0ZXJtXzc2MSkge1xuICAgIHJldHVybiBuZXcgVGVybShcIlRocm93U3RhdGVtZW50XCIsIHtleHByZXNzaW9uOiB0aGlzLmV4cGFuZCh0ZXJtXzc2MS5leHByZXNzaW9uKX0pO1xuICB9XG4gIGV4cGFuZEZvck9mU3RhdGVtZW50KHRlcm1fNzYyKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRm9yT2ZTdGF0ZW1lbnRcIiwge2xlZnQ6IHRoaXMuZXhwYW5kKHRlcm1fNzYyLmxlZnQpLCByaWdodDogdGhpcy5leHBhbmQodGVybV83NjIucmlnaHQpLCBib2R5OiB0aGlzLmV4cGFuZCh0ZXJtXzc2Mi5ib2R5KX0pO1xuICB9XG4gIGV4cGFuZEJpbmRpbmdJZGVudGlmaWVyKHRlcm1fNzYzKSB7XG4gICAgcmV0dXJuIHRlcm1fNzYzO1xuICB9XG4gIGV4cGFuZEJpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXIodGVybV83NjQpIHtcbiAgICByZXR1cm4gdGVybV83NjQ7XG4gIH1cbiAgZXhwYW5kQmluZGluZ1Byb3BlcnR5UHJvcGVydHkodGVybV83NjUpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eVwiLCB7bmFtZTogdGhpcy5leHBhbmQodGVybV83NjUubmFtZSksIGJpbmRpbmc6IHRoaXMuZXhwYW5kKHRlcm1fNzY1LmJpbmRpbmcpfSk7XG4gIH1cbiAgZXhwYW5kQ29tcHV0ZWRQcm9wZXJ0eU5hbWUodGVybV83NjYpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDb21wdXRlZFByb3BlcnR5TmFtZVwiLCB7ZXhwcmVzc2lvbjogdGhpcy5leHBhbmQodGVybV83NjYuZXhwcmVzc2lvbil9KTtcbiAgfVxuICBleHBhbmRPYmplY3RCaW5kaW5nKHRlcm1fNzY3KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiT2JqZWN0QmluZGluZ1wiLCB7cHJvcGVydGllczogdGVybV83NjcucHJvcGVydGllcy5tYXAodF83NjggPT4gdGhpcy5leHBhbmQodF83NjgpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRBcnJheUJpbmRpbmcodGVybV83NjkpIHtcbiAgICBsZXQgcmVzdEVsZW1lbnRfNzcwID0gdGVybV83NjkucmVzdEVsZW1lbnQgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc2OS5yZXN0RWxlbWVudCk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQXJyYXlCaW5kaW5nXCIsIHtlbGVtZW50czogdGVybV83NjkuZWxlbWVudHMubWFwKHRfNzcxID0+IHRfNzcxID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodF83NzEpKS50b0FycmF5KCksIHJlc3RFbGVtZW50OiByZXN0RWxlbWVudF83NzB9KTtcbiAgfVxuICBleHBhbmRCaW5kaW5nV2l0aERlZmF1bHQodGVybV83NzIpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nV2l0aERlZmF1bHRcIiwge2JpbmRpbmc6IHRoaXMuZXhwYW5kKHRlcm1fNzcyLmJpbmRpbmcpLCBpbml0OiB0aGlzLmV4cGFuZCh0ZXJtXzc3Mi5pbml0KX0pO1xuICB9XG4gIGV4cGFuZFNob3J0aGFuZFByb3BlcnR5KHRlcm1fNzczKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRGF0YVByb3BlcnR5XCIsIHtuYW1lOiBuZXcgVGVybShcIlN0YXRpY1Byb3BlcnR5TmFtZVwiLCB7dmFsdWU6IHRlcm1fNzczLm5hbWV9KSwgZXhwcmVzc2lvbjogbmV3IFRlcm0oXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiLCB7bmFtZTogdGVybV83NzMubmFtZX0pfSk7XG4gIH1cbiAgZXhwYW5kRm9yU3RhdGVtZW50KHRlcm1fNzc0KSB7XG4gICAgbGV0IGluaXRfNzc1ID0gdGVybV83NzQuaW5pdCA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fNzc0LmluaXQpO1xuICAgIGxldCB0ZXN0Xzc3NiA9IHRlcm1fNzc0LnRlc3QgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc3NC50ZXN0KTtcbiAgICBsZXQgdXBkYXRlXzc3NyA9IHRlcm1fNzc0LnVwZGF0ZSA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fNzc0LnVwZGF0ZSk7XG4gICAgbGV0IGJvZHlfNzc4ID0gdGhpcy5leHBhbmQodGVybV83NzQuYm9keSk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRm9yU3RhdGVtZW50XCIsIHtpbml0OiBpbml0Xzc3NSwgdGVzdDogdGVzdF83NzYsIHVwZGF0ZTogdXBkYXRlXzc3NywgYm9keTogYm9keV83Nzh9KTtcbiAgfVxuICBleHBhbmRZaWVsZEV4cHJlc3Npb24odGVybV83NzkpIHtcbiAgICBsZXQgZXhwcl83ODAgPSB0ZXJtXzc3OS5leHByZXNzaW9uID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83NzkuZXhwcmVzc2lvbik7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiWWllbGRFeHByZXNzaW9uXCIsIHtleHByZXNzaW9uOiBleHByXzc4MH0pO1xuICB9XG4gIGV4cGFuZFlpZWxkR2VuZXJhdG9yRXhwcmVzc2lvbih0ZXJtXzc4MSkge1xuICAgIGxldCBleHByXzc4MiA9IHRlcm1fNzgxLmV4cHJlc3Npb24gPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc4MS5leHByZXNzaW9uKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJZaWVsZEdlbmVyYXRvckV4cHJlc3Npb25cIiwge2V4cHJlc3Npb246IGV4cHJfNzgyfSk7XG4gIH1cbiAgZXhwYW5kV2hpbGVTdGF0ZW1lbnQodGVybV83ODMpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJXaGlsZVN0YXRlbWVudFwiLCB7dGVzdDogdGhpcy5leHBhbmQodGVybV83ODMudGVzdCksIGJvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzgzLmJvZHkpfSk7XG4gIH1cbiAgZXhwYW5kSWZTdGF0ZW1lbnQodGVybV83ODQpIHtcbiAgICBsZXQgY29uc2VxdWVudF83ODUgPSB0ZXJtXzc4NC5jb25zZXF1ZW50ID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83ODQuY29uc2VxdWVudCk7XG4gICAgbGV0IGFsdGVybmF0ZV83ODYgPSB0ZXJtXzc4NC5hbHRlcm5hdGUgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc4NC5hbHRlcm5hdGUpO1xuICAgIHJldHVybiBuZXcgVGVybShcIklmU3RhdGVtZW50XCIsIHt0ZXN0OiB0aGlzLmV4cGFuZCh0ZXJtXzc4NC50ZXN0KSwgY29uc2VxdWVudDogY29uc2VxdWVudF83ODUsIGFsdGVybmF0ZTogYWx0ZXJuYXRlXzc4Nn0pO1xuICB9XG4gIGV4cGFuZEJsb2NrU3RhdGVtZW50KHRlcm1fNzg3KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQmxvY2tTdGF0ZW1lbnRcIiwge2Jsb2NrOiB0aGlzLmV4cGFuZCh0ZXJtXzc4Ny5ibG9jayl9KTtcbiAgfVxuICBleHBhbmRCbG9jayh0ZXJtXzc4OCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkJsb2NrXCIsIHtzdGF0ZW1lbnRzOiB0ZXJtXzc4OC5zdGF0ZW1lbnRzLm1hcChzXzc4OSA9PiB0aGlzLmV4cGFuZChzXzc4OSkpLnRvQXJyYXkoKX0pO1xuICB9XG4gIGV4cGFuZFZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnQodGVybV83OTApIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJWYXJpYWJsZURlY2xhcmF0aW9uU3RhdGVtZW50XCIsIHtkZWNsYXJhdGlvbjogdGhpcy5leHBhbmQodGVybV83OTAuZGVjbGFyYXRpb24pfSk7XG4gIH1cbiAgZXhwYW5kUmV0dXJuU3RhdGVtZW50KHRlcm1fNzkxKSB7XG4gICAgaWYgKHRlcm1fNzkxLmV4cHJlc3Npb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRlcm1fNzkxO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0oXCJSZXR1cm5TdGF0ZW1lbnRcIiwge2V4cHJlc3Npb246IHRoaXMuZXhwYW5kKHRlcm1fNzkxLmV4cHJlc3Npb24pfSk7XG4gIH1cbiAgZXhwYW5kQ2xhc3NEZWNsYXJhdGlvbih0ZXJtXzc5Mikge1xuICAgIHJldHVybiBuZXcgVGVybShcIkNsYXNzRGVjbGFyYXRpb25cIiwge25hbWU6IHRlcm1fNzkyLm5hbWUgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc5Mi5uYW1lKSwgc3VwZXI6IHRlcm1fNzkyLnN1cGVyID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83OTIuc3VwZXIpLCBlbGVtZW50czogdGVybV83OTIuZWxlbWVudHMubWFwKGVsXzc5MyA9PiB0aGlzLmV4cGFuZChlbF83OTMpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRDbGFzc0V4cHJlc3Npb24odGVybV83OTQpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDbGFzc0V4cHJlc3Npb25cIiwge25hbWU6IHRlcm1fNzk0Lm5hbWUgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc5NC5uYW1lKSwgc3VwZXI6IHRlcm1fNzk0LnN1cGVyID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83OTQuc3VwZXIpLCBlbGVtZW50czogdGVybV83OTQuZWxlbWVudHMubWFwKGVsXzc5NSA9PiB0aGlzLmV4cGFuZChlbF83OTUpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRDbGFzc0VsZW1lbnQodGVybV83OTYpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDbGFzc0VsZW1lbnRcIiwge2lzU3RhdGljOiB0ZXJtXzc5Ni5pc1N0YXRpYywgbWV0aG9kOiB0aGlzLmV4cGFuZCh0ZXJtXzc5Ni5tZXRob2QpfSk7XG4gIH1cbiAgZXhwYW5kVGhpc0V4cHJlc3Npb24odGVybV83OTcpIHtcbiAgICByZXR1cm4gdGVybV83OTc7XG4gIH1cbiAgZXhwYW5kU3ludGF4VGVtcGxhdGUodGVybV83OTgpIHtcbiAgICBsZXQgZXhwYW5kZXJfNzk5ID0gbmV3IEV4cGFuZGVyKHRoaXMuY29udGV4dCk7XG4gICAgbGV0IHJfODAwID0gcHJvY2Vzc1RlbXBsYXRlKHRlcm1fNzk4LnRlbXBsYXRlLmlubmVyKCkpO1xuICAgIGxldCBzdHJfODAxID0gU3ludGF4LmZyb21TdHJpbmcoc2VyaWFsaXplci53cml0ZShyXzgwMC50ZW1wbGF0ZSkpO1xuICAgIGxldCBjYWxsZWVfODAyID0gbmV3IFRlcm0oXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiLCB7bmFtZTogU3ludGF4LmZyb21JZGVudGlmaWVyKFwic3ludGF4VGVtcGxhdGVcIil9KTtcbiAgICBsZXQgZXhwYW5kZWRJbnRlcnBzXzgwMyA9IHJfODAwLmludGVycC5tYXAoaV84MDUgPT4ge1xuICAgICAgbGV0IGVuZl84MDYgPSBuZXcgRW5mb3Jlc3RlcihpXzgwNSwgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kKGVuZl84MDYuZW5mb3Jlc3QoXCJleHByZXNzaW9uXCIpKTtcbiAgICB9KTtcbiAgICBsZXQgYXJnc184MDQgPSBMaXN0Lm9mKG5ldyBUZXJtKFwiTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb25cIiwge3ZhbHVlOiBzdHJfODAxfSkpLmNvbmNhdChleHBhbmRlZEludGVycHNfODAzKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDYWxsRXhwcmVzc2lvblwiLCB7Y2FsbGVlOiBjYWxsZWVfODAyLCBhcmd1bWVudHM6IGFyZ3NfODA0fSk7XG4gIH1cbiAgZXhwYW5kU3ludGF4UXVvdGUodGVybV84MDcpIHtcbiAgICBsZXQgc3RyXzgwOCA9IG5ldyBUZXJtKFwiTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb25cIiwge3ZhbHVlOiBTeW50YXguZnJvbVN0cmluZyhzZXJpYWxpemVyLndyaXRlKHRlcm1fODA3Lm5hbWUpKX0pO1xuICAgIHJldHVybiBuZXcgVGVybShcIlRlbXBsYXRlRXhwcmVzc2lvblwiLCB7dGFnOiB0ZXJtXzgwNy50ZW1wbGF0ZS50YWcsIGVsZW1lbnRzOiB0ZXJtXzgwNy50ZW1wbGF0ZS5lbGVtZW50cy5wdXNoKHN0cl84MDgpLnB1c2gobmV3IFRlcm0oXCJUZW1wbGF0ZUVsZW1lbnRcIiwge3Jhd1ZhbHVlOiBcIlwifSkpLnRvQXJyYXkoKX0pO1xuICB9XG4gIGV4cGFuZFN0YXRpY01lbWJlckV4cHJlc3Npb24odGVybV84MDkpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJTdGF0aWNNZW1iZXJFeHByZXNzaW9uXCIsIHtvYmplY3Q6IHRoaXMuZXhwYW5kKHRlcm1fODA5Lm9iamVjdCksIHByb3BlcnR5OiB0ZXJtXzgwOS5wcm9wZXJ0eX0pO1xuICB9XG4gIGV4cGFuZEFycmF5RXhwcmVzc2lvbih0ZXJtXzgxMCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkFycmF5RXhwcmVzc2lvblwiLCB7ZWxlbWVudHM6IHRlcm1fODEwLmVsZW1lbnRzLm1hcCh0XzgxMSA9PiB0XzgxMSA9PSBudWxsID8gdF84MTEgOiB0aGlzLmV4cGFuZCh0XzgxMSkpfSk7XG4gIH1cbiAgZXhwYW5kSW1wb3J0KHRlcm1fODEyKSB7XG4gICAgcmV0dXJuIHRlcm1fODEyO1xuICB9XG4gIGV4cGFuZEltcG9ydE5hbWVzcGFjZSh0ZXJtXzgxMykge1xuICAgIHJldHVybiB0ZXJtXzgxMztcbiAgfVxuICBleHBhbmRFeHBvcnQodGVybV84MTQpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJFeHBvcnRcIiwge2RlY2xhcmF0aW9uOiB0aGlzLmV4cGFuZCh0ZXJtXzgxNC5kZWNsYXJhdGlvbil9KTtcbiAgfVxuICBleHBhbmRFeHBvcnREZWZhdWx0KHRlcm1fODE1KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRXhwb3J0RGVmYXVsdFwiLCB7Ym9keTogdGhpcy5leHBhbmQodGVybV84MTUuYm9keSl9KTtcbiAgfVxuICBleHBhbmRFeHBvcnRGcm9tKHRlcm1fODE2KSB7XG4gICAgcmV0dXJuIHRlcm1fODE2O1xuICB9XG4gIGV4cGFuZEV4cG9ydEFsbEZyb20odGVybV84MTcpIHtcbiAgICByZXR1cm4gdGVybV84MTc7XG4gIH1cbiAgZXhwYW5kRXhwb3J0U3BlY2lmaWVyKHRlcm1fODE4KSB7XG4gICAgcmV0dXJuIHRlcm1fODE4O1xuICB9XG4gIGV4cGFuZFN0YXRpY1Byb3BlcnR5TmFtZSh0ZXJtXzgxOSkge1xuICAgIHJldHVybiB0ZXJtXzgxOTtcbiAgfVxuICBleHBhbmREYXRhUHJvcGVydHkodGVybV84MjApIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJEYXRhUHJvcGVydHlcIiwge25hbWU6IHRoaXMuZXhwYW5kKHRlcm1fODIwLm5hbWUpLCBleHByZXNzaW9uOiB0aGlzLmV4cGFuZCh0ZXJtXzgyMC5leHByZXNzaW9uKX0pO1xuICB9XG4gIGV4cGFuZE9iamVjdEV4cHJlc3Npb24odGVybV84MjEpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJPYmplY3RFeHByZXNzaW9uXCIsIHtwcm9wZXJ0aWVzOiB0ZXJtXzgyMS5wcm9wZXJ0aWVzLm1hcCh0XzgyMiA9PiB0aGlzLmV4cGFuZCh0XzgyMikpfSk7XG4gIH1cbiAgZXhwYW5kVmFyaWFibGVEZWNsYXJhdG9yKHRlcm1fODIzKSB7XG4gICAgbGV0IGluaXRfODI0ID0gdGVybV84MjMuaW5pdCA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fODIzLmluaXQpO1xuICAgIHJldHVybiBuZXcgVGVybShcIlZhcmlhYmxlRGVjbGFyYXRvclwiLCB7YmluZGluZzogdGhpcy5leHBhbmQodGVybV84MjMuYmluZGluZyksIGluaXQ6IGluaXRfODI0fSk7XG4gIH1cbiAgZXhwYW5kVmFyaWFibGVEZWNsYXJhdGlvbih0ZXJtXzgyNSkge1xuICAgIHJldHVybiBuZXcgVGVybShcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiwge2tpbmQ6IHRlcm1fODI1LmtpbmQsIGRlY2xhcmF0b3JzOiB0ZXJtXzgyNS5kZWNsYXJhdG9ycy5tYXAoZF84MjYgPT4gdGhpcy5leHBhbmQoZF84MjYpKX0pO1xuICB9XG4gIGV4cGFuZFBhcmVudGhlc2l6ZWRFeHByZXNzaW9uKHRlcm1fODI3KSB7XG4gICAgaWYgKHRlcm1fODI3LmlubmVyLnNpemUgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIpO1xuICAgIH1cbiAgICBsZXQgZW5mXzgyOCA9IG5ldyBFbmZvcmVzdGVyKHRlcm1fODI3LmlubmVyLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IGxvb2thaGVhZF84MjkgPSBlbmZfODI4LnBlZWsoKTtcbiAgICBsZXQgdF84MzAgPSBlbmZfODI4LmVuZm9yZXN0RXhwcmVzc2lvbigpO1xuICAgIGlmICh0XzgzMCA9PSBudWxsIHx8IGVuZl84MjgucmVzdC5zaXplID4gMCkge1xuICAgICAgdGhyb3cgZW5mXzgyOC5jcmVhdGVFcnJvcihsb29rYWhlYWRfODI5LCBcInVuZXhwZWN0ZWQgc3ludGF4XCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5leHBhbmQodF84MzApO1xuICB9XG4gIGV4cGFuZFVuYXJ5RXhwcmVzc2lvbih0ZXJtXzgzMSkge1xuICAgIHJldHVybiBuZXcgVGVybShcIlVuYXJ5RXhwcmVzc2lvblwiLCB7b3BlcmF0b3I6IHRlcm1fODMxLm9wZXJhdG9yLCBvcGVyYW5kOiB0aGlzLmV4cGFuZCh0ZXJtXzgzMS5vcGVyYW5kKX0pO1xuICB9XG4gIGV4cGFuZFVwZGF0ZUV4cHJlc3Npb24odGVybV84MzIpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJVcGRhdGVFeHByZXNzaW9uXCIsIHtpc1ByZWZpeDogdGVybV84MzIuaXNQcmVmaXgsIG9wZXJhdG9yOiB0ZXJtXzgzMi5vcGVyYXRvciwgb3BlcmFuZDogdGhpcy5leHBhbmQodGVybV84MzIub3BlcmFuZCl9KTtcbiAgfVxuICBleHBhbmRCaW5hcnlFeHByZXNzaW9uKHRlcm1fODMzKSB7XG4gICAgbGV0IGxlZnRfODM0ID0gdGhpcy5leHBhbmQodGVybV84MzMubGVmdCk7XG4gICAgbGV0IHJpZ2h0XzgzNSA9IHRoaXMuZXhwYW5kKHRlcm1fODMzLnJpZ2h0KTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5hcnlFeHByZXNzaW9uXCIsIHtsZWZ0OiBsZWZ0XzgzNCwgb3BlcmF0b3I6IHRlcm1fODMzLm9wZXJhdG9yLCByaWdodDogcmlnaHRfODM1fSk7XG4gIH1cbiAgZXhwYW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uKHRlcm1fODM2KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIsIHt0ZXN0OiB0aGlzLmV4cGFuZCh0ZXJtXzgzNi50ZXN0KSwgY29uc2VxdWVudDogdGhpcy5leHBhbmQodGVybV84MzYuY29uc2VxdWVudCksIGFsdGVybmF0ZTogdGhpcy5leHBhbmQodGVybV84MzYuYWx0ZXJuYXRlKX0pO1xuICB9XG4gIGV4cGFuZE5ld1RhcmdldEV4cHJlc3Npb24odGVybV84MzcpIHtcbiAgICByZXR1cm4gdGVybV84Mzc7XG4gIH1cbiAgZXhwYW5kTmV3RXhwcmVzc2lvbih0ZXJtXzgzOCkge1xuICAgIGxldCBjYWxsZWVfODM5ID0gdGhpcy5leHBhbmQodGVybV84MzguY2FsbGVlKTtcbiAgICBsZXQgZW5mXzg0MCA9IG5ldyBFbmZvcmVzdGVyKHRlcm1fODM4LmFyZ3VtZW50cywgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgIGxldCBhcmdzXzg0MSA9IGVuZl84NDAuZW5mb3Jlc3RBcmd1bWVudExpc3QoKS5tYXAoYXJnXzg0MiA9PiB0aGlzLmV4cGFuZChhcmdfODQyKSk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiTmV3RXhwcmVzc2lvblwiLCB7Y2FsbGVlOiBjYWxsZWVfODM5LCBhcmd1bWVudHM6IGFyZ3NfODQxLnRvQXJyYXkoKX0pO1xuICB9XG4gIGV4cGFuZFN1cGVyKHRlcm1fODQzKSB7XG4gICAgcmV0dXJuIHRlcm1fODQzO1xuICB9XG4gIGV4cGFuZENhbGxFeHByZXNzaW9uKHRlcm1fODQ0KSB7XG4gICAgbGV0IGNhbGxlZV84NDUgPSB0aGlzLmV4cGFuZCh0ZXJtXzg0NC5jYWxsZWUpO1xuICAgIGxldCBlbmZfODQ2ID0gbmV3IEVuZm9yZXN0ZXIodGVybV84NDQuYXJndW1lbnRzLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IGFyZ3NfODQ3ID0gZW5mXzg0Ni5lbmZvcmVzdEFyZ3VtZW50TGlzdCgpLm1hcChhcmdfODQ4ID0+IHRoaXMuZXhwYW5kKGFyZ184NDgpKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDYWxsRXhwcmVzc2lvblwiLCB7Y2FsbGVlOiBjYWxsZWVfODQ1LCBhcmd1bWVudHM6IGFyZ3NfODQ3fSk7XG4gIH1cbiAgZXhwYW5kU3ByZWFkRWxlbWVudCh0ZXJtXzg0OSkge1xuICAgIHJldHVybiBuZXcgVGVybShcIlNwcmVhZEVsZW1lbnRcIiwge2V4cHJlc3Npb246IHRoaXMuZXhwYW5kKHRlcm1fODQ5LmV4cHJlc3Npb24pfSk7XG4gIH1cbiAgZXhwYW5kRXhwcmVzc2lvblN0YXRlbWVudCh0ZXJtXzg1MCkge1xuICAgIGxldCBjaGlsZF84NTEgPSB0aGlzLmV4cGFuZCh0ZXJtXzg1MC5leHByZXNzaW9uKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJFeHByZXNzaW9uU3RhdGVtZW50XCIsIHtleHByZXNzaW9uOiBjaGlsZF84NTF9KTtcbiAgfVxuICBleHBhbmRMYWJlbGVkU3RhdGVtZW50KHRlcm1fODUyKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiTGFiZWxlZFN0YXRlbWVudFwiLCB7bGFiZWw6IHRlcm1fODUyLmxhYmVsLnZhbCgpLCBib2R5OiB0aGlzLmV4cGFuZCh0ZXJtXzg1Mi5ib2R5KX0pO1xuICB9XG4gIGRvRnVuY3Rpb25FeHBhbnNpb24odGVybV84NTMsIHR5cGVfODU0KSB7XG4gICAgbGV0IHNjb3BlXzg1NSA9IGZyZXNoU2NvcGUoXCJmdW5cIik7XG4gICAgbGV0IHJlZF84NTYgPSBuZXcgQXBwbHlTY29wZUluUGFyYW1zUmVkdWNlcihzY29wZV84NTUsIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IHBhcmFtc184NTc7XG4gICAgaWYgKHR5cGVfODU0ICE9PSBcIkdldHRlclwiICYmIHR5cGVfODU0ICE9PSBcIlNldHRlclwiKSB7XG4gICAgICBwYXJhbXNfODU3ID0gcmVkXzg1Ni50cmFuc2Zvcm0odGVybV84NTMucGFyYW1zKTtcbiAgICAgIHBhcmFtc184NTcgPSB0aGlzLmV4cGFuZChwYXJhbXNfODU3KTtcbiAgICB9XG4gICAgdGhpcy5jb250ZXh0LmN1cnJlbnRTY29wZS5wdXNoKHNjb3BlXzg1NSk7XG4gICAgbGV0IGV4cGFuZGVyXzg1OCA9IG5ldyBFeHBhbmRlcih0aGlzLmNvbnRleHQpO1xuICAgIGxldCBtYXJrZWRCb2R5Xzg1OSwgYm9keVRlcm1fODYwO1xuICAgIGlmICh0ZXJtXzg1My5ib2R5IGluc3RhbmNlb2YgVGVybSkge1xuICAgICAgYm9keVRlcm1fODYwID0gdGhpcy5leHBhbmQodGVybV84NTMuYm9keS5hZGRTY29wZShzY29wZV84NTUsIHRoaXMuY29udGV4dC5iaW5kaW5ncykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXJrZWRCb2R5Xzg1OSA9IHRlcm1fODUzLmJvZHkubWFwKGJfODYxID0+IGJfODYxLmFkZFNjb3BlKHNjb3BlXzg1NSwgdGhpcy5jb250ZXh0LmJpbmRpbmdzKSk7XG4gICAgICBib2R5VGVybV84NjAgPSBuZXcgVGVybShcIkZ1bmN0aW9uQm9keVwiLCB7ZGlyZWN0aXZlczogTGlzdCgpLCBzdGF0ZW1lbnRzOiBleHBhbmRlcl84NTguZXhwYW5kKG1hcmtlZEJvZHlfODU5KX0pO1xuICAgIH1cbiAgICB0aGlzLmNvbnRleHQuY3VycmVudFNjb3BlLnBvcCgpO1xuICAgIGlmICh0eXBlXzg1NCA9PT0gXCJHZXR0ZXJcIikge1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKHR5cGVfODU0LCB7bmFtZTogdGhpcy5leHBhbmQodGVybV84NTMubmFtZSksIGJvZHk6IGJvZHlUZXJtXzg2MH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZV84NTQgPT09IFwiU2V0dGVyXCIpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybSh0eXBlXzg1NCwge25hbWU6IHRoaXMuZXhwYW5kKHRlcm1fODUzLm5hbWUpLCBwYXJhbTogdGVybV84NTMucGFyYW0sIGJvZHk6IGJvZHlUZXJtXzg2MH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0odHlwZV84NTQsIHtuYW1lOiB0ZXJtXzg1My5uYW1lLCBpc0dlbmVyYXRvcjogdGVybV84NTMuaXNHZW5lcmF0b3IsIHBhcmFtczogcGFyYW1zXzg1NywgYm9keTogYm9keVRlcm1fODYwfSk7XG4gIH1cbiAgZXhwYW5kTWV0aG9kKHRlcm1fODYyKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9GdW5jdGlvbkV4cGFuc2lvbih0ZXJtXzg2MiwgXCJNZXRob2RcIik7XG4gIH1cbiAgZXhwYW5kU2V0dGVyKHRlcm1fODYzKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9GdW5jdGlvbkV4cGFuc2lvbih0ZXJtXzg2MywgXCJTZXR0ZXJcIik7XG4gIH1cbiAgZXhwYW5kR2V0dGVyKHRlcm1fODY0KSB7XG4gICAgcmV0dXJuIHRoaXMuZG9GdW5jdGlvbkV4cGFuc2lvbih0ZXJtXzg2NCwgXCJHZXR0ZXJcIik7XG4gIH1cbiAgZXhwYW5kRnVuY3Rpb25EZWNsYXJhdGlvbih0ZXJtXzg2NSkge1xuICAgIHJldHVybiB0aGlzLmRvRnVuY3Rpb25FeHBhbnNpb24odGVybV84NjUsIFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiKTtcbiAgfVxuICBleHBhbmRGdW5jdGlvbkV4cHJlc3Npb24odGVybV84NjYpIHtcbiAgICByZXR1cm4gdGhpcy5kb0Z1bmN0aW9uRXhwYW5zaW9uKHRlcm1fODY2LCBcIkZ1bmN0aW9uRXhwcmVzc2lvblwiKTtcbiAgfVxuICBleHBhbmRDb21wb3VuZEFzc2lnbm1lbnRFeHByZXNzaW9uKHRlcm1fODY3KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29tcG91bmRBc3NpZ25tZW50RXhwcmVzc2lvblwiLCB7YmluZGluZzogdGhpcy5leHBhbmQodGVybV84NjcuYmluZGluZyksIG9wZXJhdG9yOiB0ZXJtXzg2Ny5vcGVyYXRvciwgZXhwcmVzc2lvbjogdGhpcy5leHBhbmQodGVybV84NjcuZXhwcmVzc2lvbil9KTtcbiAgfVxuICBleHBhbmRBc3NpZ25tZW50RXhwcmVzc2lvbih0ZXJtXzg2OCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIsIHtiaW5kaW5nOiB0aGlzLmV4cGFuZCh0ZXJtXzg2OC5iaW5kaW5nKSwgZXhwcmVzc2lvbjogdGhpcy5leHBhbmQodGVybV84NjguZXhwcmVzc2lvbil9KTtcbiAgfVxuICBleHBhbmRFbXB0eVN0YXRlbWVudCh0ZXJtXzg2OSkge1xuICAgIHJldHVybiB0ZXJtXzg2OTtcbiAgfVxuICBleHBhbmRMaXRlcmFsQm9vbGVhbkV4cHJlc3Npb24odGVybV84NzApIHtcbiAgICByZXR1cm4gdGVybV84NzA7XG4gIH1cbiAgZXhwYW5kTGl0ZXJhbE51bWVyaWNFeHByZXNzaW9uKHRlcm1fODcxKSB7XG4gICAgcmV0dXJuIHRlcm1fODcxO1xuICB9XG4gIGV4cGFuZExpdGVyYWxJbmZpbml0eUV4cHJlc3Npb24odGVybV84NzIpIHtcbiAgICByZXR1cm4gdGVybV84NzI7XG4gIH1cbiAgZXhwYW5kSWRlbnRpZmllckV4cHJlc3Npb24odGVybV84NzMpIHtcbiAgICBsZXQgdHJhbnNfODc0ID0gdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV84NzMubmFtZS5yZXNvbHZlKCkpO1xuICAgIGlmICh0cmFuc184NzQpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIklkZW50aWZpZXJFeHByZXNzaW9uXCIsIHtuYW1lOiB0cmFuc184NzQuaWR9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRlcm1fODczO1xuICB9XG4gIGV4cGFuZExpdGVyYWxOdWxsRXhwcmVzc2lvbih0ZXJtXzg3NSkge1xuICAgIHJldHVybiB0ZXJtXzg3NTtcbiAgfVxuICBleHBhbmRMaXRlcmFsU3RyaW5nRXhwcmVzc2lvbih0ZXJtXzg3Nikge1xuICAgIHJldHVybiB0ZXJtXzg3NjtcbiAgfVxuICBleHBhbmRMaXRlcmFsUmVnRXhwRXhwcmVzc2lvbih0ZXJtXzg3Nykge1xuICAgIHJldHVybiB0ZXJtXzg3NztcbiAgfVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3Rlcm0tZXhwYW5kZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7QUFDQTs7OztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztJQUNxQixZO0FBQ25CLHdCQUFZLFdBQVosRUFBeUI7QUFBQTs7QUFDdkIsU0FBSyxPQUFMLEdBQWUsV0FBZjtBQUNEOzs7OzJCQUNNLFEsRUFBVTtBQUNmLFVBQUksWUFBWSxXQUFXLFNBQVMsSUFBcEM7QUFDQSxVQUFJLE9BQU8sS0FBSyxTQUFMLENBQVAsS0FBMkIsVUFBL0IsRUFBMkM7QUFDekMsZUFBTyxLQUFLLFNBQUwsRUFBZ0IsUUFBaEIsQ0FBUDtBQUNEO0FBQ0QsMEJBQU8sS0FBUCxFQUFjLHFDQUFxQyxTQUFTLElBQTVEO0FBQ0Q7Ozs2Q0FDd0IsUSxFQUFVO0FBQ2pDLGFBQU8sb0JBQVMsb0JBQVQsRUFBK0IsRUFBQyxLQUFLLFNBQVMsR0FBVCxJQUFnQixJQUFoQixHQUF1QixJQUF2QixHQUE4QixLQUFLLE1BQUwsQ0FBWSxTQUFTLEdBQXJCLENBQXBDLEVBQStELFVBQVUsU0FBUyxRQUFULENBQWtCLE9BQWxCLEVBQXpFLEVBQS9CLENBQVA7QUFDRDs7O3lDQUNvQixRLEVBQVU7QUFDN0IsYUFBTyxvQkFBUyxnQkFBVCxFQUEyQixFQUFDLE9BQU8sU0FBUyxLQUFULEdBQWlCLFNBQVMsS0FBVCxDQUFlLEdBQWYsRUFBakIsR0FBd0MsSUFBaEQsRUFBM0IsQ0FBUDtBQUNEOzs7MkNBQ3NCLFEsRUFBVTtBQUMvQixhQUFPLG9CQUFTLGtCQUFULEVBQTZCLEVBQUMsTUFBTSxLQUFLLE1BQUwsQ0FBWSxTQUFTLElBQXJCLENBQVAsRUFBbUMsTUFBTSxLQUFLLE1BQUwsQ0FBWSxTQUFTLElBQXJCLENBQXpDLEVBQTdCLENBQVA7QUFDRDs7O3dDQUNtQixRLEVBQVU7QUFDNUIsYUFBTyxvQkFBUyxl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SyxNQUFMLENBQVksU0FBUyxVQUFyQixDQUFsRixFQUF6QyxDQUFQO0FBQ0Q7OzsrQ0FDMEIsUSxFQUFVO0FBQ25DLGFBQU8sb0JBQVMsc0JBQVQsRUFBaUMsRUFBQyxTQUFTLEtBQUssTUFBTCxDQUFZLFNBQVMsT0FBckIsQ0FBVixFQUF5QyxZQUFZLEtBQUssTUFBTCxDQUFZLFNBQVMsVUFBckIsQ0FBckQsRUFBakMsQ0FBUDtBQUNEOzs7eUNBQ29CLFEsRUFBVTtBQUM3QixhQUFPLFFBQVA7QUFDRDs7O21EQUM4QixRLEVBQVU7QUFDdkMsYUFBTyxRQUFQO0FBQ0Q7OzttREFDOEIsUSxFQUFVO0FBQ3ZDLGFBQU8sUUFBUDtBQUNEOzs7b0RBQytCLFEsRUFBVTtBQUN4QyxhQUFPLFFBQVA7QUFDRDs7OytDQUMwQixRLEVBQVU7QUFDbkMsVUFBSSxZQUFZLEtBQUssT0FBTCxDQUFhLEdBQWIsQ0FBaUIsR0FBakIsQ0FBcUIsU0FBUyxJQUFULENBQWMsT0FBZCxFQUFyQixDQUFoQjtBQUNBLFVBQUksU0FBSixFQUFlO0FBQ2IsZUFBTyxvQkFBUyxzQkFBVCxFQUFpQyxFQUFDLE1BQU0sVUFBVSxFQUFqQixFQUFqQyxDQUFQO0FBQ0Q7QUFDRCxhQUFPLFFBQVA7QUFDRDs7O2dEQUMyQixRLEVBQVU7QUFDcEMsYUFBTyxRQUFQO0FBQ0Q7OztrREFDNkIsUSxFQUFVO0FBQ3RDLGFBQU8sUUFBUDtBQUNEOzs7a0RBQzZCLFEsRUFBVTtBQUN0QyxhQUFPLFFBQVA7QUFDRDs7Ozs7O2tCQTNVa0IsWSIsImZpbGUiOiJ0ZXJtLWV4cGFuZGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMaXN0fSBmcm9tIFwiaW1tdXRhYmxlXCI7XG5pbXBvcnQgVGVybSwge2lzRU9GLCBpc0JpbmRpbmdJZGVudGlmaWVyLCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIGlzRnVuY3Rpb25FeHByZXNzaW9uLCBpc0Z1bmN0aW9uVGVybSwgaXNGdW5jdGlvbldpdGhOYW1lLCBpc1N5bnRheERlY2xhcmF0aW9uLCBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sIGlzVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCwgaXNJbXBvcnQsIGlzRXhwb3J0fSBmcm9tIFwiLi90ZXJtc1wiO1xuaW1wb3J0IHtTY29wZSwgZnJlc2hTY29wZX0gZnJvbSBcIi4vc2NvcGVcIjtcbmltcG9ydCBBcHBseVNjb3BlSW5QYXJhbXNSZWR1Y2VyIGZyb20gXCIuL2FwcGx5LXNjb3BlLWluLXBhcmFtcy1yZWR1Y2VyXCI7XG5pbXBvcnQgcmVkdWNlciwge01vbm9pZGFsUmVkdWNlcn0gZnJvbSBcInNoaWZ0LXJlZHVjZXJcIjtcbmltcG9ydCBFeHBhbmRlciBmcm9tIFwiLi9leHBhbmRlclwiO1xuaW1wb3J0IFN5bnRheCBmcm9tIFwiLi9zeW50YXhcIjtcbmltcG9ydCB7c2VyaWFsaXplciwgbWFrZURlc2VyaWFsaXplcn0gZnJvbSBcIi4vc2VyaWFsaXplclwiO1xuaW1wb3J0IHtlbmZvcmVzdEV4cHIsIEVuZm9yZXN0ZXJ9IGZyb20gXCIuL2VuZm9yZXN0ZXJcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7cHJvY2Vzc1RlbXBsYXRlfSBmcm9tIFwiLi90ZW1wbGF0ZS1wcm9jZXNzb3IuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1FeHBhbmRlciB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHRfNzQxKSB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dF83NDE7XG4gIH1cbiAgZXhwYW5kKHRlcm1fNzQyKSB7XG4gICAgbGV0IGZpZWxkXzc0MyA9IFwiZXhwYW5kXCIgKyB0ZXJtXzc0Mi50eXBlO1xuICAgIGlmICh0eXBlb2YgdGhpc1tmaWVsZF83NDNdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiB0aGlzW2ZpZWxkXzc0M10odGVybV83NDIpO1xuICAgIH1cbiAgICBhc3NlcnQoZmFsc2UsIFwiZXhwYW5kIG5vdCBpbXBsZW1lbnRlZCB5ZXQgZm9yOiBcIiArIHRlcm1fNzQyLnR5cGUpO1xuICB9XG4gIGV4cGFuZFRlbXBsYXRlRXhwcmVzc2lvbih0ZXJtXzc0NCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIlRlbXBsYXRlRXhwcmVzc2lvblwiLCB7dGFnOiB0ZXJtXzc0NC50YWcgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc0NC50YWcpLCBlbGVtZW50czogdGVybV83NDQuZWxlbWVudHMudG9BcnJheSgpfSk7XG4gIH1cbiAgZXhwYW5kQnJlYWtTdGF0ZW1lbnQodGVybV83NDUpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCcmVha1N0YXRlbWVudFwiLCB7bGFiZWw6IHRlcm1fNzQ1LmxhYmVsID8gdGVybV83NDUubGFiZWwudmFsKCkgOiBudWxsfSk7XG4gIH1cbiAgZXhwYW5kRG9XaGlsZVN0YXRlbWVudCh0ZXJtXzc0Nikge1xuICAgIHJldHVybiBuZXcgVGVybShcIkRvV2hpbGVTdGF0ZW1lbnRcIiwge2JvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzQ2LmJvZHkpLCB0ZXN0OiB0aGlzLmV4cGFuZCh0ZXJtXzc0Ni50ZXN0KX0pO1xuICB9XG4gIGV4cGFuZFdpdGhTdGF0ZW1lbnQodGVybV83NDcpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJXaXRoU3RhdGVtZW50XCIsIHtib2R5OiB0aGlzLmV4cGFuZCh0ZXJtXzc0Ny5ib2R5KSwgb2JqZWN0OiB0aGlzLmV4cGFuZCh0ZXJtXzc0Ny5vYmplY3QpfSk7XG4gIH1cbiAgZXhwYW5kRGVidWdnZXJTdGF0ZW1lbnQodGVybV83NDgpIHtcbiAgICByZXR1cm4gdGVybV83NDg7XG4gIH1cbiAgZXhwYW5kQ29udGludWVTdGF0ZW1lbnQodGVybV83NDkpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDb250aW51ZVN0YXRlbWVudFwiLCB7bGFiZWw6IHRlcm1fNzQ5LmxhYmVsID8gdGVybV83NDkubGFiZWwudmFsKCkgOiBudWxsfSk7XG4gIH1cbiAgZXhwYW5kU3dpdGNoU3RhdGVtZW50V2l0aERlZmF1bHQodGVybV83NTApIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJTd2l0Y2hTdGF0ZW1lbnRXaXRoRGVmYXVsdFwiLCB7ZGlzY3JpbWluYW50OiB0aGlzLmV4cGFuZCh0ZXJtXzc1MC5kaXNjcmltaW5hbnQpLCBwcmVEZWZhdWx0Q2FzZXM6IHRlcm1fNzUwLnByZURlZmF1bHRDYXNlcy5tYXAoY183NTEgPT4gdGhpcy5leHBhbmQoY183NTEpKS50b0FycmF5KCksIGRlZmF1bHRDYXNlOiB0aGlzLmV4cGFuZCh0ZXJtXzc1MC5kZWZhdWx0Q2FzZSksIHBvc3REZWZhdWx0Q2FzZXM6IHRlcm1fNzUwLnBvc3REZWZhdWx0Q2FzZXMubWFwKGNfNzUyID0+IHRoaXMuZXhwYW5kKGNfNzUyKSkudG9BcnJheSgpfSk7XG4gIH1cbiAgZXhwYW5kQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uKHRlcm1fNzUzKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uXCIsIHtvYmplY3Q6IHRoaXMuZXhwYW5kKHRlcm1fNzUzLm9iamVjdCksIGV4cHJlc3Npb246IHRoaXMuZXhwYW5kKHRlcm1fNzUzLmV4cHJlc3Npb24pfSk7XG4gIH1cbiAgZXhwYW5kU3dpdGNoU3RhdGVtZW50KHRlcm1fNzU0KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiU3dpdGNoU3RhdGVtZW50XCIsIHtkaXNjcmltaW5hbnQ6IHRoaXMuZXhwYW5kKHRlcm1fNzU0LmRpc2NyaW1pbmFudCksIGNhc2VzOiB0ZXJtXzc1NC5jYXNlcy5tYXAoY183NTUgPT4gdGhpcy5leHBhbmQoY183NTUpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRGb3JtYWxQYXJhbWV0ZXJzKHRlcm1fNzU2KSB7XG4gICAgbGV0IHJlc3RfNzU3ID0gdGVybV83NTYucmVzdCA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fNzU2LnJlc3QpO1xuICAgIHJldHVybiBuZXcgVGVybShcIkZvcm1hbFBhcmFtZXRlcnNcIiwge2l0ZW1zOiB0ZXJtXzc1Ni5pdGVtcy5tYXAoaV83NTggPT4gdGhpcy5leHBhbmQoaV83NTgpKSwgcmVzdDogcmVzdF83NTd9KTtcbiAgfVxuICBleHBhbmRBcnJvd0V4cHJlc3Npb24odGVybV83NTkpIHtcbiAgICByZXR1cm4gdGhpcy5kb0Z1bmN0aW9uRXhwYW5zaW9uKHRlcm1fNzU5LCBcIkFycm93RXhwcmVzc2lvblwiKTtcbiAgfVxuICBleHBhbmRTd2l0Y2hEZWZhdWx0KHRlcm1fNzYwKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiU3dpdGNoRGVmYXVsdFwiLCB7Y29uc2VxdWVudDogdGVybV83NjAuY29uc2VxdWVudC5tYXAoY183NjEgPT4gdGhpcy5leHBhbmQoY183NjEpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRTd2l0Y2hDYXNlKHRlcm1fNzYyKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiU3dpdGNoQ2FzZVwiLCB7dGVzdDogdGhpcy5leHBhbmQodGVybV83NjIudGVzdCksIGNvbnNlcXVlbnQ6IHRlcm1fNzYyLmNvbnNlcXVlbnQubWFwKGNfNzYzID0+IHRoaXMuZXhwYW5kKGNfNzYzKSkudG9BcnJheSgpfSk7XG4gIH1cbiAgZXhwYW5kRm9ySW5TdGF0ZW1lbnQodGVybV83NjQpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJGb3JJblN0YXRlbWVudFwiLCB7bGVmdDogdGhpcy5leHBhbmQodGVybV83NjQubGVmdCksIHJpZ2h0OiB0aGlzLmV4cGFuZCh0ZXJtXzc2NC5yaWdodCksIGJvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzY0LmJvZHkpfSk7XG4gIH1cbiAgZXhwYW5kVHJ5Q2F0Y2hTdGF0ZW1lbnQodGVybV83NjUpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJUcnlDYXRjaFN0YXRlbWVudFwiLCB7Ym9keTogdGhpcy5leHBhbmQodGVybV83NjUuYm9keSksIGNhdGNoQ2xhdXNlOiB0aGlzLmV4cGFuZCh0ZXJtXzc2NS5jYXRjaENsYXVzZSl9KTtcbiAgfVxuICBleHBhbmRUcnlGaW5hbGx5U3RhdGVtZW50KHRlcm1fNzY2KSB7XG4gICAgbGV0IGNhdGNoQ2xhdXNlXzc2NyA9IHRlcm1fNzY2LmNhdGNoQ2xhdXNlID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83NjYuY2F0Y2hDbGF1c2UpO1xuICAgIHJldHVybiBuZXcgVGVybShcIlRyeUZpbmFsbHlTdGF0ZW1lbnRcIiwge2JvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzY2LmJvZHkpLCBjYXRjaENsYXVzZTogY2F0Y2hDbGF1c2VfNzY3LCBmaW5hbGl6ZXI6IHRoaXMuZXhwYW5kKHRlcm1fNzY2LmZpbmFsaXplcil9KTtcbiAgfVxuICBleHBhbmRDYXRjaENsYXVzZSh0ZXJtXzc2OCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkNhdGNoQ2xhdXNlXCIsIHtiaW5kaW5nOiB0aGlzLmV4cGFuZCh0ZXJtXzc2OC5iaW5kaW5nKSwgYm9keTogdGhpcy5leHBhbmQodGVybV83NjguYm9keSl9KTtcbiAgfVxuICBleHBhbmRUaHJvd1N0YXRlbWVudCh0ZXJtXzc2OSkge1xuICAgIHJldHVybiBuZXcgVGVybShcIlRocm93U3RhdGVtZW50XCIsIHtleHByZXNzaW9uOiB0aGlzLmV4cGFuZCh0ZXJtXzc2OS5leHByZXNzaW9uKX0pO1xuICB9XG4gIGV4cGFuZEZvck9mU3RhdGVtZW50KHRlcm1fNzcwKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRm9yT2ZTdGF0ZW1lbnRcIiwge2xlZnQ6IHRoaXMuZXhwYW5kKHRlcm1fNzcwLmxlZnQpLCByaWdodDogdGhpcy5leHBhbmQodGVybV83NzAucmlnaHQpLCBib2R5OiB0aGlzLmV4cGFuZCh0ZXJtXzc3MC5ib2R5KX0pO1xuICB9XG4gIGV4cGFuZEJpbmRpbmdJZGVudGlmaWVyKHRlcm1fNzcxKSB7XG4gICAgcmV0dXJuIHRlcm1fNzcxO1xuICB9XG4gIGV4cGFuZEJpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXIodGVybV83NzIpIHtcbiAgICByZXR1cm4gdGVybV83NzI7XG4gIH1cbiAgZXhwYW5kQmluZGluZ1Byb3BlcnR5UHJvcGVydHkodGVybV83NzMpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eVwiLCB7bmFtZTogdGhpcy5leHBhbmQodGVybV83NzMubmFtZSksIGJpbmRpbmc6IHRoaXMuZXhwYW5kKHRlcm1fNzczLmJpbmRpbmcpfSk7XG4gIH1cbiAgZXhwYW5kQ29tcHV0ZWRQcm9wZXJ0eU5hbWUodGVybV83NzQpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDb21wdXRlZFByb3BlcnR5TmFtZVwiLCB7ZXhwcmVzc2lvbjogdGhpcy5leHBhbmQodGVybV83NzQuZXhwcmVzc2lvbil9KTtcbiAgfVxuICBleHBhbmRPYmplY3RCaW5kaW5nKHRlcm1fNzc1KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiT2JqZWN0QmluZGluZ1wiLCB7cHJvcGVydGllczogdGVybV83NzUucHJvcGVydGllcy5tYXAodF83NzYgPT4gdGhpcy5leHBhbmQodF83NzYpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRBcnJheUJpbmRpbmcodGVybV83NzcpIHtcbiAgICBsZXQgcmVzdEVsZW1lbnRfNzc4ID0gdGVybV83NzcucmVzdEVsZW1lbnQgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc3Ny5yZXN0RWxlbWVudCk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQXJyYXlCaW5kaW5nXCIsIHtlbGVtZW50czogdGVybV83NzcuZWxlbWVudHMubWFwKHRfNzc5ID0+IHRfNzc5ID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodF83NzkpKS50b0FycmF5KCksIHJlc3RFbGVtZW50OiByZXN0RWxlbWVudF83Nzh9KTtcbiAgfVxuICBleHBhbmRCaW5kaW5nV2l0aERlZmF1bHQodGVybV83ODApIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5kaW5nV2l0aERlZmF1bHRcIiwge2JpbmRpbmc6IHRoaXMuZXhwYW5kKHRlcm1fNzgwLmJpbmRpbmcpLCBpbml0OiB0aGlzLmV4cGFuZCh0ZXJtXzc4MC5pbml0KX0pO1xuICB9XG4gIGV4cGFuZFNob3J0aGFuZFByb3BlcnR5KHRlcm1fNzgxKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRGF0YVByb3BlcnR5XCIsIHtuYW1lOiBuZXcgVGVybShcIlN0YXRpY1Byb3BlcnR5TmFtZVwiLCB7dmFsdWU6IHRlcm1fNzgxLm5hbWV9KSwgZXhwcmVzc2lvbjogbmV3IFRlcm0oXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiLCB7bmFtZTogdGVybV83ODEubmFtZX0pfSk7XG4gIH1cbiAgZXhwYW5kRm9yU3RhdGVtZW50KHRlcm1fNzgyKSB7XG4gICAgbGV0IGluaXRfNzgzID0gdGVybV83ODIuaW5pdCA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fNzgyLmluaXQpO1xuICAgIGxldCB0ZXN0Xzc4NCA9IHRlcm1fNzgyLnRlc3QgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc4Mi50ZXN0KTtcbiAgICBsZXQgdXBkYXRlXzc4NSA9IHRlcm1fNzgyLnVwZGF0ZSA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fNzgyLnVwZGF0ZSk7XG4gICAgbGV0IGJvZHlfNzg2ID0gdGhpcy5leHBhbmQodGVybV83ODIuYm9keSk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRm9yU3RhdGVtZW50XCIsIHtpbml0OiBpbml0Xzc4MywgdGVzdDogdGVzdF83ODQsIHVwZGF0ZTogdXBkYXRlXzc4NSwgYm9keTogYm9keV83ODZ9KTtcbiAgfVxuICBleHBhbmRZaWVsZEV4cHJlc3Npb24odGVybV83ODcpIHtcbiAgICBsZXQgZXhwcl83ODggPSB0ZXJtXzc4Ny5leHByZXNzaW9uID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83ODcuZXhwcmVzc2lvbik7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiWWllbGRFeHByZXNzaW9uXCIsIHtleHByZXNzaW9uOiBleHByXzc4OH0pO1xuICB9XG4gIGV4cGFuZFlpZWxkR2VuZXJhdG9yRXhwcmVzc2lvbih0ZXJtXzc4OSkge1xuICAgIGxldCBleHByXzc5MCA9IHRlcm1fNzg5LmV4cHJlc3Npb24gPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc4OS5leHByZXNzaW9uKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJZaWVsZEdlbmVyYXRvckV4cHJlc3Npb25cIiwge2V4cHJlc3Npb246IGV4cHJfNzkwfSk7XG4gIH1cbiAgZXhwYW5kV2hpbGVTdGF0ZW1lbnQodGVybV83OTEpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJXaGlsZVN0YXRlbWVudFwiLCB7dGVzdDogdGhpcy5leHBhbmQodGVybV83OTEudGVzdCksIGJvZHk6IHRoaXMuZXhwYW5kKHRlcm1fNzkxLmJvZHkpfSk7XG4gIH1cbiAgZXhwYW5kSWZTdGF0ZW1lbnQodGVybV83OTIpIHtcbiAgICBsZXQgY29uc2VxdWVudF83OTMgPSB0ZXJtXzc5Mi5jb25zZXF1ZW50ID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV83OTIuY29uc2VxdWVudCk7XG4gICAgbGV0IGFsdGVybmF0ZV83OTQgPSB0ZXJtXzc5Mi5hbHRlcm5hdGUgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzc5Mi5hbHRlcm5hdGUpO1xuICAgIHJldHVybiBuZXcgVGVybShcIklmU3RhdGVtZW50XCIsIHt0ZXN0OiB0aGlzLmV4cGFuZCh0ZXJtXzc5Mi50ZXN0KSwgY29uc2VxdWVudDogY29uc2VxdWVudF83OTMsIGFsdGVybmF0ZTogYWx0ZXJuYXRlXzc5NH0pO1xuICB9XG4gIGV4cGFuZEJsb2NrU3RhdGVtZW50KHRlcm1fNzk1KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQmxvY2tTdGF0ZW1lbnRcIiwge2Jsb2NrOiB0aGlzLmV4cGFuZCh0ZXJtXzc5NS5ibG9jayl9KTtcbiAgfVxuICBleHBhbmRCbG9jayh0ZXJtXzc5Nikge1xuICAgIHJldHVybiBuZXcgVGVybShcIkJsb2NrXCIsIHtzdGF0ZW1lbnRzOiB0ZXJtXzc5Ni5zdGF0ZW1lbnRzLm1hcChzXzc5NyA9PiB0aGlzLmV4cGFuZChzXzc5NykpLnRvQXJyYXkoKX0pO1xuICB9XG4gIGV4cGFuZFZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnQodGVybV83OTgpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJWYXJpYWJsZURlY2xhcmF0aW9uU3RhdGVtZW50XCIsIHtkZWNsYXJhdGlvbjogdGhpcy5leHBhbmQodGVybV83OTguZGVjbGFyYXRpb24pfSk7XG4gIH1cbiAgZXhwYW5kUmV0dXJuU3RhdGVtZW50KHRlcm1fNzk5KSB7XG4gICAgaWYgKHRlcm1fNzk5LmV4cHJlc3Npb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRlcm1fNzk5O1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0oXCJSZXR1cm5TdGF0ZW1lbnRcIiwge2V4cHJlc3Npb246IHRoaXMuZXhwYW5kKHRlcm1fNzk5LmV4cHJlc3Npb24pfSk7XG4gIH1cbiAgZXhwYW5kQ2xhc3NEZWNsYXJhdGlvbih0ZXJtXzgwMCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkNsYXNzRGVjbGFyYXRpb25cIiwge25hbWU6IHRlcm1fODAwLm5hbWUgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzgwMC5uYW1lKSwgc3VwZXI6IHRlcm1fODAwLnN1cGVyID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV84MDAuc3VwZXIpLCBlbGVtZW50czogdGVybV84MDAuZWxlbWVudHMubWFwKGVsXzgwMSA9PiB0aGlzLmV4cGFuZChlbF84MDEpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRDbGFzc0V4cHJlc3Npb24odGVybV84MDIpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDbGFzc0V4cHJlc3Npb25cIiwge25hbWU6IHRlcm1fODAyLm5hbWUgPT0gbnVsbCA/IG51bGwgOiB0aGlzLmV4cGFuZCh0ZXJtXzgwMi5uYW1lKSwgc3VwZXI6IHRlcm1fODAyLnN1cGVyID09IG51bGwgPyBudWxsIDogdGhpcy5leHBhbmQodGVybV84MDIuc3VwZXIpLCBlbGVtZW50czogdGVybV84MDIuZWxlbWVudHMubWFwKGVsXzgwMyA9PiB0aGlzLmV4cGFuZChlbF84MDMpKS50b0FycmF5KCl9KTtcbiAgfVxuICBleHBhbmRDbGFzc0VsZW1lbnQodGVybV84MDQpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDbGFzc0VsZW1lbnRcIiwge2lzU3RhdGljOiB0ZXJtXzgwNC5pc1N0YXRpYywgbWV0aG9kOiB0aGlzLmV4cGFuZCh0ZXJtXzgwNC5tZXRob2QpfSk7XG4gIH1cbiAgZXhwYW5kVGhpc0V4cHJlc3Npb24odGVybV84MDUpIHtcbiAgICByZXR1cm4gdGVybV84MDU7XG4gIH1cbiAgZXhwYW5kU3ludGF4VGVtcGxhdGUodGVybV84MDYpIHtcbiAgICBsZXQgZXhwYW5kZXJfODA3ID0gbmV3IEV4cGFuZGVyKHRoaXMuY29udGV4dCk7XG4gICAgbGV0IHJfODA4ID0gcHJvY2Vzc1RlbXBsYXRlKHRlcm1fODA2LnRlbXBsYXRlLmlubmVyKCkpO1xuICAgIGxldCBzdHJfODA5ID0gU3ludGF4LmZyb21TdHJpbmcoc2VyaWFsaXplci53cml0ZShyXzgwOC50ZW1wbGF0ZSkpO1xuICAgIGxldCBjYWxsZWVfODEwID0gbmV3IFRlcm0oXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiLCB7bmFtZTogU3ludGF4LmZyb21JZGVudGlmaWVyKFwic3ludGF4VGVtcGxhdGVcIil9KTtcbiAgICBsZXQgZXhwYW5kZWRJbnRlcnBzXzgxMSA9IHJfODA4LmludGVycC5tYXAoaV84MTMgPT4ge1xuICAgICAgbGV0IGVuZl84MTQgPSBuZXcgRW5mb3Jlc3RlcihpXzgxMywgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kKGVuZl84MTQuZW5mb3Jlc3QoXCJleHByZXNzaW9uXCIpKTtcbiAgICB9KTtcbiAgICBsZXQgYXJnc184MTIgPSBMaXN0Lm9mKG5ldyBUZXJtKFwiTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb25cIiwge3ZhbHVlOiBzdHJfODA5fSkpLmNvbmNhdChleHBhbmRlZEludGVycHNfODExKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDYWxsRXhwcmVzc2lvblwiLCB7Y2FsbGVlOiBjYWxsZWVfODEwLCBhcmd1bWVudHM6IGFyZ3NfODEyfSk7XG4gIH1cbiAgZXhwYW5kU3ludGF4UXVvdGUodGVybV84MTUpIHtcbiAgICBsZXQgc3RyXzgxNiA9IG5ldyBUZXJtKFwiTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb25cIiwge3ZhbHVlOiBTeW50YXguZnJvbVN0cmluZyhzZXJpYWxpemVyLndyaXRlKHRlcm1fODE1Lm5hbWUpKX0pO1xuICAgIHJldHVybiBuZXcgVGVybShcIlRlbXBsYXRlRXhwcmVzc2lvblwiLCB7dGFnOiB0ZXJtXzgxNS50ZW1wbGF0ZS50YWcsIGVsZW1lbnRzOiB0ZXJtXzgxNS50ZW1wbGF0ZS5lbGVtZW50cy5wdXNoKHN0cl84MTYpLnB1c2gobmV3IFRlcm0oXCJUZW1wbGF0ZUVsZW1lbnRcIiwge3Jhd1ZhbHVlOiBcIlwifSkpLnRvQXJyYXkoKX0pO1xuICB9XG4gIGV4cGFuZFN0YXRpY01lbWJlckV4cHJlc3Npb24odGVybV84MTcpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJTdGF0aWNNZW1iZXJFeHByZXNzaW9uXCIsIHtvYmplY3Q6IHRoaXMuZXhwYW5kKHRlcm1fODE3Lm9iamVjdCksIHByb3BlcnR5OiB0ZXJtXzgxNy5wcm9wZXJ0eX0pO1xuICB9XG4gIGV4cGFuZEFycmF5RXhwcmVzc2lvbih0ZXJtXzgxOCkge1xuICAgIHJldHVybiBuZXcgVGVybShcIkFycmF5RXhwcmVzc2lvblwiLCB7ZWxlbWVudHM6IHRlcm1fODE4LmVsZW1lbnRzLm1hcCh0XzgxOSA9PiB0XzgxOSA9PSBudWxsID8gdF84MTkgOiB0aGlzLmV4cGFuZCh0XzgxOSkpfSk7XG4gIH1cbiAgZXhwYW5kSW1wb3J0KHRlcm1fODIwKSB7XG4gICAgcmV0dXJuIHRlcm1fODIwO1xuICB9XG4gIGV4cGFuZEltcG9ydE5hbWVzcGFjZSh0ZXJtXzgyMSkge1xuICAgIHJldHVybiB0ZXJtXzgyMTtcbiAgfVxuICBleHBhbmRFeHBvcnQodGVybV84MjIpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJFeHBvcnRcIiwge2RlY2xhcmF0aW9uOiB0aGlzLmV4cGFuZCh0ZXJtXzgyMi5kZWNsYXJhdGlvbil9KTtcbiAgfVxuICBleHBhbmRFeHBvcnREZWZhdWx0KHRlcm1fODIzKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiRXhwb3J0RGVmYXVsdFwiLCB7Ym9keTogdGhpcy5leHBhbmQodGVybV84MjMuYm9keSl9KTtcbiAgfVxuICBleHBhbmRFeHBvcnRGcm9tKHRlcm1fODI0KSB7XG4gICAgcmV0dXJuIHRlcm1fODI0O1xuICB9XG4gIGV4cGFuZEV4cG9ydEFsbEZyb20odGVybV84MjUpIHtcbiAgICByZXR1cm4gdGVybV84MjU7XG4gIH1cbiAgZXhwYW5kRXhwb3J0U3BlY2lmaWVyKHRlcm1fODI2KSB7XG4gICAgcmV0dXJuIHRlcm1fODI2O1xuICB9XG4gIGV4cGFuZFN0YXRpY1Byb3BlcnR5TmFtZSh0ZXJtXzgyNykge1xuICAgIHJldHVybiB0ZXJtXzgyNztcbiAgfVxuICBleHBhbmREYXRhUHJvcGVydHkodGVybV84MjgpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJEYXRhUHJvcGVydHlcIiwge25hbWU6IHRoaXMuZXhwYW5kKHRlcm1fODI4Lm5hbWUpLCBleHByZXNzaW9uOiB0aGlzLmV4cGFuZCh0ZXJtXzgyOC5leHByZXNzaW9uKX0pO1xuICB9XG4gIGV4cGFuZE9iamVjdEV4cHJlc3Npb24odGVybV84MjkpIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJPYmplY3RFeHByZXNzaW9uXCIsIHtwcm9wZXJ0aWVzOiB0ZXJtXzgyOS5wcm9wZXJ0aWVzLm1hcCh0XzgzMCA9PiB0aGlzLmV4cGFuZCh0XzgzMCkpfSk7XG4gIH1cbiAgZXhwYW5kVmFyaWFibGVEZWNsYXJhdG9yKHRlcm1fODMxKSB7XG4gICAgbGV0IGluaXRfODMyID0gdGVybV84MzEuaW5pdCA9PSBudWxsID8gbnVsbCA6IHRoaXMuZXhwYW5kKHRlcm1fODMxLmluaXQpO1xuICAgIHJldHVybiBuZXcgVGVybShcIlZhcmlhYmxlRGVjbGFyYXRvclwiLCB7YmluZGluZzogdGhpcy5leHBhbmQodGVybV84MzEuYmluZGluZyksIGluaXQ6IGluaXRfODMyfSk7XG4gIH1cbiAgZXhwYW5kVmFyaWFibGVEZWNsYXJhdGlvbih0ZXJtXzgzMykge1xuICAgIHJldHVybiBuZXcgVGVybShcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiwge2tpbmQ6IHRlcm1fODMzLmtpbmQsIGRlY2xhcmF0b3JzOiB0ZXJtXzgzMy5kZWNsYXJhdG9ycy5tYXAoZF84MzQgPT4gdGhpcy5leHBhbmQoZF84MzQpKX0pO1xuICB9XG4gIGV4cGFuZFBhcmVudGhlc2l6ZWRFeHByZXNzaW9uKHRlcm1fODM1KSB7XG4gICAgaWYgKHRlcm1fODM1LmlubmVyLnNpemUgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIpO1xuICAgIH1cbiAgICBsZXQgZW5mXzgzNiA9IG5ldyBFbmZvcmVzdGVyKHRlcm1fODM1LmlubmVyLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IGxvb2thaGVhZF84MzcgPSBlbmZfODM2LnBlZWsoKTtcbiAgICBsZXQgdF84MzggPSBlbmZfODM2LmVuZm9yZXN0RXhwcmVzc2lvbigpO1xuICAgIGlmICh0XzgzOCA9PSBudWxsIHx8IGVuZl84MzYucmVzdC5zaXplID4gMCkge1xuICAgICAgdGhyb3cgZW5mXzgzNi5jcmVhdGVFcnJvcihsb29rYWhlYWRfODM3LCBcInVuZXhwZWN0ZWQgc3ludGF4XCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5leHBhbmQodF84MzgpO1xuICB9XG4gIGV4cGFuZFVuYXJ5RXhwcmVzc2lvbih0ZXJtXzgzOSkge1xuICAgIHJldHVybiBuZXcgVGVybShcIlVuYXJ5RXhwcmVzc2lvblwiLCB7b3BlcmF0b3I6IHRlcm1fODM5Lm9wZXJhdG9yLCBvcGVyYW5kOiB0aGlzLmV4cGFuZCh0ZXJtXzgzOS5vcGVyYW5kKX0pO1xuICB9XG4gIGV4cGFuZFVwZGF0ZUV4cHJlc3Npb24odGVybV84NDApIHtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJVcGRhdGVFeHByZXNzaW9uXCIsIHtpc1ByZWZpeDogdGVybV84NDAuaXNQcmVmaXgsIG9wZXJhdG9yOiB0ZXJtXzg0MC5vcGVyYXRvciwgb3BlcmFuZDogdGhpcy5leHBhbmQodGVybV84NDAub3BlcmFuZCl9KTtcbiAgfVxuICBleHBhbmRCaW5hcnlFeHByZXNzaW9uKHRlcm1fODQxKSB7XG4gICAgbGV0IGxlZnRfODQyID0gdGhpcy5leHBhbmQodGVybV84NDEubGVmdCk7XG4gICAgbGV0IHJpZ2h0Xzg0MyA9IHRoaXMuZXhwYW5kKHRlcm1fODQxLnJpZ2h0KTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJCaW5hcnlFeHByZXNzaW9uXCIsIHtsZWZ0OiBsZWZ0Xzg0Miwgb3BlcmF0b3I6IHRlcm1fODQxLm9wZXJhdG9yLCByaWdodDogcmlnaHRfODQzfSk7XG4gIH1cbiAgZXhwYW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uKHRlcm1fODQ0KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIsIHt0ZXN0OiB0aGlzLmV4cGFuZCh0ZXJtXzg0NC50ZXN0KSwgY29uc2VxdWVudDogdGhpcy5leHBhbmQodGVybV84NDQuY29uc2VxdWVudCksIGFsdGVybmF0ZTogdGhpcy5leHBhbmQodGVybV84NDQuYWx0ZXJuYXRlKX0pO1xuICB9XG4gIGV4cGFuZE5ld1RhcmdldEV4cHJlc3Npb24odGVybV84NDUpIHtcbiAgICByZXR1cm4gdGVybV84NDU7XG4gIH1cbiAgZXhwYW5kTmV3RXhwcmVzc2lvbih0ZXJtXzg0Nikge1xuICAgIGxldCBjYWxsZWVfODQ3ID0gdGhpcy5leHBhbmQodGVybV84NDYuY2FsbGVlKTtcbiAgICBsZXQgZW5mXzg0OCA9IG5ldyBFbmZvcmVzdGVyKHRlcm1fODQ2LmFyZ3VtZW50cywgTGlzdCgpLCB0aGlzLmNvbnRleHQpO1xuICAgIGxldCBhcmdzXzg0OSA9IGVuZl84NDguZW5mb3Jlc3RBcmd1bWVudExpc3QoKS5tYXAoYXJnXzg1MCA9PiB0aGlzLmV4cGFuZChhcmdfODUwKSk7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiTmV3RXhwcmVzc2lvblwiLCB7Y2FsbGVlOiBjYWxsZWVfODQ3LCBhcmd1bWVudHM6IGFyZ3NfODQ5LnRvQXJyYXkoKX0pO1xuICB9XG4gIGV4cGFuZFN1cGVyKHRlcm1fODUxKSB7XG4gICAgcmV0dXJuIHRlcm1fODUxO1xuICB9XG4gIGV4cGFuZENhbGxFeHByZXNzaW9uKHRlcm1fODUyKSB7XG4gICAgbGV0IGNhbGxlZV84NTMgPSB0aGlzLmV4cGFuZCh0ZXJtXzg1Mi5jYWxsZWUpO1xuICAgIGxldCBlbmZfODU0ID0gbmV3IEVuZm9yZXN0ZXIodGVybV84NTIuYXJndW1lbnRzLCBMaXN0KCksIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IGFyZ3NfODU1ID0gZW5mXzg1NC5lbmZvcmVzdEFyZ3VtZW50TGlzdCgpLm1hcChhcmdfODU2ID0+IHRoaXMuZXhwYW5kKGFyZ184NTYpKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJDYWxsRXhwcmVzc2lvblwiLCB7Y2FsbGVlOiBjYWxsZWVfODUzLCBhcmd1bWVudHM6IGFyZ3NfODU1fSk7XG4gIH1cbiAgZXhwYW5kU3ByZWFkRWxlbWVudCh0ZXJtXzg1Nykge1xuICAgIHJldHVybiBuZXcgVGVybShcIlNwcmVhZEVsZW1lbnRcIiwge2V4cHJlc3Npb246IHRoaXMuZXhwYW5kKHRlcm1fODU3LmV4cHJlc3Npb24pfSk7XG4gIH1cbiAgZXhwYW5kRXhwcmVzc2lvblN0YXRlbWVudCh0ZXJtXzg1OCkge1xuICAgIGxldCBjaGlsZF84NTkgPSB0aGlzLmV4cGFuZCh0ZXJtXzg1OC5leHByZXNzaW9uKTtcbiAgICByZXR1cm4gbmV3IFRlcm0oXCJFeHByZXNzaW9uU3RhdGVtZW50XCIsIHtleHByZXNzaW9uOiBjaGlsZF84NTl9KTtcbiAgfVxuICBleHBhbmRMYWJlbGVkU3RhdGVtZW50KHRlcm1fODYwKSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiTGFiZWxlZFN0YXRlbWVudFwiLCB7bGFiZWw6IHRlcm1fODYwLmxhYmVsLnZhbCgpLCBib2R5OiB0aGlzLmV4cGFuZCh0ZXJtXzg2MC5ib2R5KX0pO1xuICB9XG4gIGRvRnVuY3Rpb25FeHBhbnNpb24odGVybV84NjEsIHR5cGVfODYyKSB7XG4gICAgbGV0IHNjb3BlXzg2MyA9IGZyZXNoU2NvcGUoXCJmdW5cIik7XG4gICAgbGV0IHJlZF84NjQgPSBuZXcgQXBwbHlTY29wZUluUGFyYW1zUmVkdWNlcihzY29wZV84NjMsIHRoaXMuY29udGV4dCk7XG4gICAgbGV0IHBhcmFtc184NjU7XG4gICAgaWYgKHR5cGVfODYyICE9PSBcIkdldHRlclwiICYmIHR5cGVfODYyICE9PSBcIlNldHRlclwiKSB7XG4gICAgICBwYXJhbXNfODY1ID0gcmVkXzg2NC50cmFuc2Zvcm0odGVybV84NjEucGFyYW1zKTtcbiAgICAgIHBhcmFtc184NjUgPSB0aGlzLmV4cGFuZChwYXJhbXNfODY1KTtcbiAgICB9XG4gICAgdGhpcy5jb250ZXh0LmN1cnJlbnRTY29wZS5wdXNoKHNjb3BlXzg2Myk7XG4gICAgbGV0IGV4cGFuZGVyXzg2NiA9IG5ldyBFeHBhbmRlcih0aGlzLmNvbnRleHQpO1xuICAgIGxldCBtYXJrZWRCb2R5Xzg2NywgYm9keVRlcm1fODY4O1xuICAgIGlmICh0ZXJtXzg2MS5ib2R5IGluc3RhbmNlb2YgVGVybSkge1xuICAgICAgYm9keVRlcm1fODY4ID0gdGhpcy5leHBhbmQodGVybV84NjEuYm9keS5hZGRTY29wZShzY29wZV84NjMsIHRoaXMuY29udGV4dC5iaW5kaW5ncykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXJrZWRCb2R5Xzg2NyA9IHRlcm1fODYxLmJvZHkubWFwKGJfODY5ID0+IGJfODY5LmFkZFNjb3BlKHNjb3BlXzg2MywgdGhpcy5jb250ZXh0LmJpbmRpbmdzKSk7XG4gICAgICBib2R5VGVybV84NjggPSBuZXcgVGVybShcIkZ1bmN0aW9uQm9keVwiLCB7ZGlyZWN0aXZlczogTGlzdCgpLCBzdGF0ZW1lbnRzOiBleHBhbmRlcl84NjYuZXhwYW5kKG1hcmtlZEJvZHlfODY3KX0pO1xuICAgIH1cbiAgICB0aGlzLmNvbnRleHQuY3VycmVudFNjb3BlLnBvcCgpO1xuICAgIGlmICh0eXBlXzg2MiA9PT0gXCJHZXR0ZXJcIikge1xuICAgICAgcmV0dXJuIG5ldyBUZXJtKHR5cGVfODYyLCB7bmFtZTogdGhpcy5leHBhbmQodGVybV84NjEubmFtZSksIGJvZHk6IGJvZHlUZXJtXzg2OH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZV84NjIgPT09IFwiU2V0dGVyXCIpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybSh0eXBlXzg2Miwge25hbWU6IHRoaXMuZXhwYW5kKHRlcm1fODYxLm5hbWUpLCBwYXJhbTogdGVybV84NjEucGFyYW0sIGJvZHk6IGJvZHlUZXJtXzg2OH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0odHlwZV84NjIsIHtuYW1lOiB0ZXJtXzg2MS5uYW1lLCBpc0dlbmVyYXRvcjogdGVybV84NjEuaXNHZW5lcmF0b3IsIHBhcmFtczogcGFyYW1zXzg2NSwgYm9keTogYm9keVRlcm1fODY4fSk7XG4gIH1cbiAgZXhwYW5kTWV0aG9kKHRlcm1fODcwKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9GdW5jdGlvbkV4cGFuc2lvbih0ZXJtXzg3MCwgXCJNZXRob2RcIik7XG4gIH1cbiAgZXhwYW5kU2V0dGVyKHRlcm1fODcxKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9GdW5jdGlvbkV4cGFuc2lvbih0ZXJtXzg3MSwgXCJTZXR0ZXJcIik7XG4gIH1cbiAgZXhwYW5kR2V0dGVyKHRlcm1fODcyKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9GdW5jdGlvbkV4cGFuc2lvbih0ZXJtXzg3MiwgXCJHZXR0ZXJcIik7XG4gIH1cbiAgZXhwYW5kRnVuY3Rpb25EZWNsYXJhdGlvbih0ZXJtXzg3Mykge1xuICAgIHJldHVybiB0aGlzLmRvRnVuY3Rpb25FeHBhbnNpb24odGVybV84NzMsIFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiKTtcbiAgfVxuICBleHBhbmRGdW5jdGlvbkV4cHJlc3Npb24odGVybV84NzQpIHtcbiAgICByZXR1cm4gdGhpcy5kb0Z1bmN0aW9uRXhwYW5zaW9uKHRlcm1fODc0LCBcIkZ1bmN0aW9uRXhwcmVzc2lvblwiKTtcbiAgfVxuICBleHBhbmRDb21wb3VuZEFzc2lnbm1lbnRFeHByZXNzaW9uKHRlcm1fODc1KSB7XG4gICAgcmV0dXJuIG5ldyBUZXJtKFwiQ29tcG91bmRBc3NpZ25tZW50RXhwcmVzc2lvblwiLCB7YmluZGluZzogdGhpcy5leHBhbmQodGVybV84NzUuYmluZGluZyksIG9wZXJhdG9yOiB0ZXJtXzg3NS5vcGVyYXRvciwgZXhwcmVzc2lvbjogdGhpcy5leHBhbmQodGVybV84NzUuZXhwcmVzc2lvbil9KTtcbiAgfVxuICBleHBhbmRBc3NpZ25tZW50RXhwcmVzc2lvbih0ZXJtXzg3Nikge1xuICAgIHJldHVybiBuZXcgVGVybShcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIsIHtiaW5kaW5nOiB0aGlzLmV4cGFuZCh0ZXJtXzg3Ni5iaW5kaW5nKSwgZXhwcmVzc2lvbjogdGhpcy5leHBhbmQodGVybV84NzYuZXhwcmVzc2lvbil9KTtcbiAgfVxuICBleHBhbmRFbXB0eVN0YXRlbWVudCh0ZXJtXzg3Nykge1xuICAgIHJldHVybiB0ZXJtXzg3NztcbiAgfVxuICBleHBhbmRMaXRlcmFsQm9vbGVhbkV4cHJlc3Npb24odGVybV84NzgpIHtcbiAgICByZXR1cm4gdGVybV84Nzg7XG4gIH1cbiAgZXhwYW5kTGl0ZXJhbE51bWVyaWNFeHByZXNzaW9uKHRlcm1fODc5KSB7XG4gICAgcmV0dXJuIHRlcm1fODc5O1xuICB9XG4gIGV4cGFuZExpdGVyYWxJbmZpbml0eUV4cHJlc3Npb24odGVybV84ODApIHtcbiAgICByZXR1cm4gdGVybV84ODA7XG4gIH1cbiAgZXhwYW5kSWRlbnRpZmllckV4cHJlc3Npb24odGVybV84ODEpIHtcbiAgICBsZXQgdHJhbnNfODgyID0gdGhpcy5jb250ZXh0LmVudi5nZXQodGVybV84ODEubmFtZS5yZXNvbHZlKCkpO1xuICAgIGlmICh0cmFuc184ODIpIHtcbiAgICAgIHJldHVybiBuZXcgVGVybShcIklkZW50aWZpZXJFeHByZXNzaW9uXCIsIHtuYW1lOiB0cmFuc184ODIuaWR9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRlcm1fODgxO1xuICB9XG4gIGV4cGFuZExpdGVyYWxOdWxsRXhwcmVzc2lvbih0ZXJtXzg4Mykge1xuICAgIHJldHVybiB0ZXJtXzg4MztcbiAgfVxuICBleHBhbmRMaXRlcmFsU3RyaW5nRXhwcmVzc2lvbih0ZXJtXzg4NCkge1xuICAgIHJldHVybiB0ZXJtXzg4NDtcbiAgfVxuICBleHBhbmRMaXRlcmFsUmVnRXhwRXhwcmVzc2lvbih0ZXJtXzg4NSkge1xuICAgIHJldHVybiB0ZXJtXzg4NTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/terms.js b/dist/terms.js index 0555987c..2458c9de 100644 --- a/dist/terms.js +++ b/dist/terms.js @@ -30,20 +30,20 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Term = function () { - function Term(type_879, props_880) { + function Term(type_887, props_888) { _classCallCheck(this, Term); - this.type = type_879; + this.type = type_887; this.loc = null; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { - for (var _iterator = Object.keys(props_880)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + for (var _iterator = Object.keys(props_888)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var prop = _step.value; - this[prop] = props_880[prop]; + this[prop] = props_888[prop]; } } catch (err) { _didIteratorError = true; @@ -63,26 +63,26 @@ var Term = function () { _createClass(Term, [{ key: "addScope", - value: function addScope(scope_881, bindings_882, options_883) { - var next_884 = {}; + value: function addScope(scope_889, bindings_890, options_891) { + var next_892 = {}; var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { - for (var _iterator2 = fieldsIn_878(this)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + for (var _iterator2 = fieldsIn_886(this)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var field = _step2.value; if (this[field] == null) { - next_884[field] = null; + next_892[field] = null; } else if (typeof this[field].addScope === "function") { - next_884[field] = this[field].addScope(scope_881, bindings_882, options_883); + next_892[field] = this[field].addScope(scope_889, bindings_890, options_891); } else if (_immutable.List.isList(this[field])) { - next_884[field] = this[field].map(function (f_885) { - return f_885.addScope(scope_881, bindings_882, options_883); + next_892[field] = this[field].map(function (f_893) { + return f_893.addScope(scope_889, bindings_890, options_891); }); } else { - next_884[field] = this[field]; + next_892[field] = this[field]; } } } catch (err) { @@ -100,7 +100,7 @@ var Term = function () { } } - return new Term(this.type, next_884); + return new Term(this.type, next_892); } }, { key: "lineNumber", @@ -110,7 +110,7 @@ var Term = function () { var _iteratorError3 = undefined; try { - for (var _iterator3 = fieldsIn_878(this)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + for (var _iterator3 = fieldsIn_886(this)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { var field = _step3.value; if (_typeof(this[field]) && this[field].lineNumber === "function") { @@ -134,26 +134,26 @@ var Term = function () { } }, { key: "setLineNumber", - value: function setLineNumber(line_886) { - var next_887 = {}; + value: function setLineNumber(line_894) { + var next_895 = {}; var _iteratorNormalCompletion4 = true; var _didIteratorError4 = false; var _iteratorError4 = undefined; try { - for (var _iterator4 = fieldsIn_878(this)[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { + for (var _iterator4 = fieldsIn_886(this)[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { var field = _step4.value; if (this[field] == null) { - next_887[field] = null; + next_895[field] = null; } else if (typeof this[field].setLineNumber === "function") { - next_887[field] = this[field].setLineNumber(line_886); + next_895[field] = this[field].setLineNumber(line_894); } else if (_immutable.List.isList(this[field])) { - next_887[field] = this[field].map(function (f_888) { - return f_888.setLineNumber(line_886); + next_895[field] = this[field].map(function (f_896) { + return f_896.setLineNumber(line_894); }); } else { - next_887[field] = this[field]; + next_895[field] = this[field]; } } } catch (err) { @@ -171,7 +171,7 @@ var Term = function () { } } - return new Term(this.type, next_887); + return new Term(this.type, next_895); } }]); @@ -365,7 +365,7 @@ var isFunctionWithName = exports.isFunctionWithName = R.and(isFunctionTerm, R.co ; var isParenthesizedExpression = exports.isParenthesizedExpression = R.whereEq({ type: "ParenthesizedExpression" }); ; -var fieldsIn_878 = R.cond([[isBindingWithDefault, R.always(_immutable.List.of("binding", "init"))], [isBindingIdentifier, R.always(_immutable.List.of("name"))], [isArrayBinding, R.always(_immutable.List.of("elements", "restElement"))], [isObjectBinding, R.always(_immutable.List.of("properties"))], [isBindingPropertyIdentifier, R.always(_immutable.List.of("binding", "init"))], [isBindingPropertyProperty, R.always(_immutable.List.of("name", "binding"))], [isClassExpression, R.always(_immutable.List.of("name", "super", "elements"))], [isClassDeclaration, R.always(_immutable.List.of("name", "super", "elements"))], [isClassElement, R.always(_immutable.List.of("isStatic", "method"))], [isModule, R.always(_immutable.List.of("directives", "items"))], [isImport, R.always(_immutable.List.of("moduleSpecifier", "defaultBinding", "namedImports"))], [isImportNamespace, R.always(_immutable.List.of("moduleSpecifier", "defaultBinding", "namespaceBinding"))], [isImportSpecifier, R.always(_immutable.List.of("name", "binding"))], [isExportAllFrom, R.always(_immutable.List.of("moduleSpecifier"))], [isExportFrom, R.always(_immutable.List.of("namedExports", "moduleSpecifier"))], [isExport, R.always(_immutable.List.of("declaration"))], [isExportDefault, R.always(_immutable.List.of("body"))], [isExportSpecifier, R.always(_immutable.List.of("name", "exportedName"))], [isMethod, R.always(_immutable.List.of("body", "isGenerator", "params"))], [isGetter, R.always(_immutable.List.of("body"))], [isSetter, R.always(_immutable.List.of("body", "param"))], [isDataProperty, R.always(_immutable.List.of("name", "expression"))], [isShorthandProperty, R.always(_immutable.List.of("expression"))], [isStaticPropertyName, R.always(_immutable.List.of("value"))], [isLiteralBooleanExpression, R.always(_immutable.List.of("value"))], [isLiteralInfinityExpression, R.always((0, _immutable.List)())], [isLiteralNullExpression, R.always((0, _immutable.List)())], [isLiteralNumericExpression, R.always(_immutable.List.of("value"))], [isLiteralRegExpExpression, R.always(_immutable.List.of("pattern", "flags"))], [isLiteralStringExpression, R.always(_immutable.List.of("value"))], [isArrayExpression, R.always(_immutable.List.of("elements"))], [isArrowExpression, R.always(_immutable.List.of("params", "body"))], [isAssignmentExpression, R.always(_immutable.List.of("binding", "expression"))], [isBinaryExpression, R.always(_immutable.List.of("operator", "left", "right"))], [isCallExpression, R.always(_immutable.List.of("callee", "arguments"))], [isComputedAssignmentExpression, R.always(_immutable.List.of("operator", "binding", "expression"))], [isComputedMemberExpression, R.always(_immutable.List.of("object", "expression"))], [isConditionalExpression, R.always(_immutable.List.of("test", "consequent", "alternate"))], [isFunctionExpression, R.always(_immutable.List.of("name", "isGenerator", "params", "body"))], [isIdentifierExpression, R.always(_immutable.List.of("name"))], [isNewExpression, R.always(_immutable.List.of("callee", "arguments"))], [isNewTargetExpression, R.always((0, _immutable.List)())], [isObjectExpression, R.always(_immutable.List.of("properties"))], [isUnaryExpression, R.always(_immutable.List.of("operator", "operand"))], [isStaticMemberExpression, R.always(_immutable.List.of("object", "property"))], [isTemplateExpression, R.always(_immutable.List.of("tag", "elements"))], [isThisExpression, R.always((0, _immutable.List)())], [isYieldExpression, R.always(_immutable.List.of("expression"))], [isYieldGeneratorExpression, R.always(_immutable.List.of("expression"))], [isBlockStatement, R.always(_immutable.List.of("block"))], [isBreakStatement, R.always(_immutable.List.of("label"))], [isContinueStatement, R.always(_immutable.List.of("label"))], [isDebuggerStatement, R.always((0, _immutable.List)())], [isDoWhileStatement, R.always(_immutable.List.of("test", "body"))], [isEmptyStatement, R.always((0, _immutable.List)())], [isExpressionStatement, R.always(_immutable.List.of("expression"))], [isForInStatement, R.always(_immutable.List.of("left", "right", "body"))], [isForOfStatement, R.always(_immutable.List.of("left", "right", "body"))], [isForStatement, R.always(_immutable.List.of("init", "test", "update", "body"))], [isLabeledStatement, R.always(_immutable.List.of("label", "body"))], [isReturnStatement, R.always(_immutable.List.of("expression"))], [isSwitchStatementWithDefault, R.always(_immutable.List.of("discriminant", "preDefaultCases", "defaultCase", "postDefaultCases"))], [isThrowStatement, R.always(_immutable.List.of("expression"))], [isTryCatchStatement, R.always(_immutable.List.of("body", "catchClause"))], [isTryFinallyStatement, R.always(_immutable.List.of("body", "catchClause", "finalizer"))], [isVariableDeclarationStatement, R.always(_immutable.List.of("declaration"))], [isWithStatement, R.always(_immutable.List.of("object", "body"))], [isBlock, R.always(_immutable.List.of("statements"))], [isCatchClause, R.always(_immutable.List.of("binding", "body"))], [isDirective, R.always(_immutable.List.of("rawValue"))], [isFormalParameters, R.always(_immutable.List.of("items", "rest"))], [isFunctionBody, R.always(_immutable.List.of("directives", "statements"))], [isFunctionDeclaration, R.always(_immutable.List.of("name", "isGenerator", "params", "body"))], [isScript, R.always(_immutable.List.of("directives", "statements"))], [isSpreadElement, R.always(_immutable.List.of("expression"))], [isSuper, R.always((0, _immutable.List)())], [isSwitchCase, R.always(_immutable.List.of("test", "consequent"))], [isSwitchDefault, R.always(_immutable.List.of("consequent"))], [isTemplateElement, R.always(_immutable.List.of("rawValue"))], [isSyntaxTemplate, R.always(_immutable.List.of("template"))], [isVariableDeclaration, R.always(_immutable.List.of("kind", "declarators"))], [isVariableDeclarator, R.always(_immutable.List.of("binding", "init"))], [isParenthesizedExpression, R.always(_immutable.List.of("inner"))], [R.T, function (type_889) { - return (0, _errors.assert)(false, "Missing case in fields: " + type_889.type); +var fieldsIn_886 = R.cond([[isBindingWithDefault, R.always(_immutable.List.of("binding", "init"))], [isBindingIdentifier, R.always(_immutable.List.of("name"))], [isArrayBinding, R.always(_immutable.List.of("elements", "restElement"))], [isObjectBinding, R.always(_immutable.List.of("properties"))], [isBindingPropertyIdentifier, R.always(_immutable.List.of("binding", "init"))], [isBindingPropertyProperty, R.always(_immutable.List.of("name", "binding"))], [isClassExpression, R.always(_immutable.List.of("name", "super", "elements"))], [isClassDeclaration, R.always(_immutable.List.of("name", "super", "elements"))], [isClassElement, R.always(_immutable.List.of("isStatic", "method"))], [isModule, R.always(_immutable.List.of("directives", "items"))], [isImport, R.always(_immutable.List.of("moduleSpecifier", "defaultBinding", "namedImports"))], [isImportNamespace, R.always(_immutable.List.of("moduleSpecifier", "defaultBinding", "namespaceBinding"))], [isImportSpecifier, R.always(_immutable.List.of("name", "binding"))], [isExportAllFrom, R.always(_immutable.List.of("moduleSpecifier"))], [isExportFrom, R.always(_immutable.List.of("namedExports", "moduleSpecifier"))], [isExport, R.always(_immutable.List.of("declaration"))], [isExportDefault, R.always(_immutable.List.of("body"))], [isExportSpecifier, R.always(_immutable.List.of("name", "exportedName"))], [isMethod, R.always(_immutable.List.of("body", "isGenerator", "params"))], [isGetter, R.always(_immutable.List.of("body"))], [isSetter, R.always(_immutable.List.of("body", "param"))], [isDataProperty, R.always(_immutable.List.of("name", "expression"))], [isShorthandProperty, R.always(_immutable.List.of("expression"))], [isStaticPropertyName, R.always(_immutable.List.of("value"))], [isLiteralBooleanExpression, R.always(_immutable.List.of("value"))], [isLiteralInfinityExpression, R.always((0, _immutable.List)())], [isLiteralNullExpression, R.always((0, _immutable.List)())], [isLiteralNumericExpression, R.always(_immutable.List.of("value"))], [isLiteralRegExpExpression, R.always(_immutable.List.of("pattern", "flags"))], [isLiteralStringExpression, R.always(_immutable.List.of("value"))], [isArrayExpression, R.always(_immutable.List.of("elements"))], [isArrowExpression, R.always(_immutable.List.of("params", "body"))], [isAssignmentExpression, R.always(_immutable.List.of("binding", "expression"))], [isBinaryExpression, R.always(_immutable.List.of("operator", "left", "right"))], [isCallExpression, R.always(_immutable.List.of("callee", "arguments"))], [isComputedAssignmentExpression, R.always(_immutable.List.of("operator", "binding", "expression"))], [isComputedMemberExpression, R.always(_immutable.List.of("object", "expression"))], [isConditionalExpression, R.always(_immutable.List.of("test", "consequent", "alternate"))], [isFunctionExpression, R.always(_immutable.List.of("name", "isGenerator", "params", "body"))], [isIdentifierExpression, R.always(_immutable.List.of("name"))], [isNewExpression, R.always(_immutable.List.of("callee", "arguments"))], [isNewTargetExpression, R.always((0, _immutable.List)())], [isObjectExpression, R.always(_immutable.List.of("properties"))], [isUnaryExpression, R.always(_immutable.List.of("operator", "operand"))], [isStaticMemberExpression, R.always(_immutable.List.of("object", "property"))], [isTemplateExpression, R.always(_immutable.List.of("tag", "elements"))], [isThisExpression, R.always((0, _immutable.List)())], [isYieldExpression, R.always(_immutable.List.of("expression"))], [isYieldGeneratorExpression, R.always(_immutable.List.of("expression"))], [isBlockStatement, R.always(_immutable.List.of("block"))], [isBreakStatement, R.always(_immutable.List.of("label"))], [isContinueStatement, R.always(_immutable.List.of("label"))], [isDebuggerStatement, R.always((0, _immutable.List)())], [isDoWhileStatement, R.always(_immutable.List.of("test", "body"))], [isEmptyStatement, R.always((0, _immutable.List)())], [isExpressionStatement, R.always(_immutable.List.of("expression"))], [isForInStatement, R.always(_immutable.List.of("left", "right", "body"))], [isForOfStatement, R.always(_immutable.List.of("left", "right", "body"))], [isForStatement, R.always(_immutable.List.of("init", "test", "update", "body"))], [isLabeledStatement, R.always(_immutable.List.of("label", "body"))], [isReturnStatement, R.always(_immutable.List.of("expression"))], [isSwitchStatementWithDefault, R.always(_immutable.List.of("discriminant", "preDefaultCases", "defaultCase", "postDefaultCases"))], [isThrowStatement, R.always(_immutable.List.of("expression"))], [isTryCatchStatement, R.always(_immutable.List.of("body", "catchClause"))], [isTryFinallyStatement, R.always(_immutable.List.of("body", "catchClause", "finalizer"))], [isVariableDeclarationStatement, R.always(_immutable.List.of("declaration"))], [isWithStatement, R.always(_immutable.List.of("object", "body"))], [isBlock, R.always(_immutable.List.of("statements"))], [isCatchClause, R.always(_immutable.List.of("binding", "body"))], [isDirective, R.always(_immutable.List.of("rawValue"))], [isFormalParameters, R.always(_immutable.List.of("items", "rest"))], [isFunctionBody, R.always(_immutable.List.of("directives", "statements"))], [isFunctionDeclaration, R.always(_immutable.List.of("name", "isGenerator", "params", "body"))], [isScript, R.always(_immutable.List.of("directives", "statements"))], [isSpreadElement, R.always(_immutable.List.of("expression"))], [isSuper, R.always((0, _immutable.List)())], [isSwitchCase, R.always(_immutable.List.of("test", "consequent"))], [isSwitchDefault, R.always(_immutable.List.of("consequent"))], [isTemplateElement, R.always(_immutable.List.of("rawValue"))], [isSyntaxTemplate, R.always(_immutable.List.of("template"))], [isVariableDeclaration, R.always(_immutable.List.of("kind", "declarators"))], [isVariableDeclarator, R.always(_immutable.List.of("binding", "init"))], [isParenthesizedExpression, R.always(_immutable.List.of("inner"))], [R.T, function (type_897) { + return (0, _errors.assert)(false, "Missing case in fields: " + type_897.type); }]]); -//# sourceMappingURL=data:application/json;base64,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QSxDQUFOLENBQXAzSixDQUFQLENBQXJCIiwiZmlsZSI6InRlcm1zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMaXN0fSBmcm9tIFwiaW1tdXRhYmxlXCI7XG5pbXBvcnQge2Fzc2VydCwgZXhwZWN0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7bWl4aW59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgU3ludGF4IGZyb20gXCIuL3N5bnRheFwiO1xuaW1wb3J0ICAqIGFzIFIgZnJvbSBcInJhbWRhXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtIHtcbiAgY29uc3RydWN0b3IodHlwZV84NzksIHByb3BzXzg4MCkge1xuICAgIHRoaXMudHlwZSA9IHR5cGVfODc5O1xuICAgIHRoaXMubG9jID0gbnVsbDtcbiAgICBmb3IgKGxldCBwcm9wIG9mIE9iamVjdC5rZXlzKHByb3BzXzg4MCkpIHtcbiAgICAgIHRoaXNbcHJvcF0gPSBwcm9wc184ODBbcHJvcF07XG4gICAgfVxuICB9XG4gIGFkZFNjb3BlKHNjb3BlXzg4MSwgYmluZGluZ3NfODgyLCBvcHRpb25zXzg4Mykge1xuICAgIGxldCBuZXh0Xzg4NCA9IHt9O1xuICAgIGZvciAobGV0IGZpZWxkIG9mIGZpZWxkc0luXzg3OCh0aGlzKSkge1xuICAgICAgaWYgKHRoaXNbZmllbGRdID09IG51bGwpIHtcbiAgICAgICAgbmV4dF84ODRbZmllbGRdID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXNbZmllbGRdLmFkZFNjb3BlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgbmV4dF84ODRbZmllbGRdID0gdGhpc1tmaWVsZF0uYWRkU2NvcGUoc2NvcGVfODgxLCBiaW5kaW5nc184ODIsIG9wdGlvbnNfODgzKTtcbiAgICAgIH0gZWxzZSBpZiAoTGlzdC5pc0xpc3QodGhpc1tmaWVsZF0pKSB7XG4gICAgICAgIG5leHRfODg0W2ZpZWxkXSA9IHRoaXNbZmllbGRdLm1hcChmXzg4NSA9PiBmXzg4NS5hZGRTY29wZShzY29wZV84ODEsIGJpbmRpbmdzXzg4Miwgb3B0aW9uc184ODMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRfODg0W2ZpZWxkXSA9IHRoaXNbZmllbGRdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0odGhpcy50eXBlLCBuZXh0Xzg4NCk7XG4gIH1cbiAgbGluZU51bWJlcigpIHtcbiAgICBmb3IgKGxldCBmaWVsZCBvZiBmaWVsZHNJbl84NzgodGhpcykpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpc1tmaWVsZF0gJiYgdGhpc1tmaWVsZF0ubGluZU51bWJlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2ZpZWxkXS5saW5lTnVtYmVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHNldExpbmVOdW1iZXIobGluZV84ODYpIHtcbiAgICBsZXQgbmV4dF84ODcgPSB7fTtcbiAgICBmb3IgKGxldCBmaWVsZCBvZiBmaWVsZHNJbl84NzgodGhpcykpIHtcbiAgICAgIGlmICh0aGlzW2ZpZWxkXSA9PSBudWxsKSB7XG4gICAgICAgIG5leHRfODg3W2ZpZWxkXSA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzW2ZpZWxkXS5zZXRMaW5lTnVtYmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgbmV4dF84ODdbZmllbGRdID0gdGhpc1tmaWVsZF0uc2V0TGluZU51bWJlcihsaW5lXzg4Nik7XG4gICAgICB9IGVsc2UgaWYgKExpc3QuaXNMaXN0KHRoaXNbZmllbGRdKSkge1xuICAgICAgICBuZXh0Xzg4N1tmaWVsZF0gPSB0aGlzW2ZpZWxkXS5tYXAoZl84ODggPT4gZl84ODguc2V0TGluZU51bWJlcihsaW5lXzg4NikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dF84ODdbZmllbGRdID0gdGhpc1tmaWVsZF07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGVybSh0aGlzLnR5cGUsIG5leHRfODg3KTtcbiAgfVxufVxuZXhwb3J0IGNvbnN0IGlzQmluZGluZ1dpdGhEZWZhdWx0ID0gUi53aGVyZUVxKHt0eXBlOiBcIkJpbmRpbmdXaXRoRGVmYXVsdFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNCaW5kaW5nSWRlbnRpZmllciA9IFIud2hlcmVFcSh7dHlwZTogXCJCaW5kaW5nSWRlbnRpZmllclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNBcnJheUJpbmRpbmcgPSBSLndoZXJlRXEoe3R5cGU6IFwiQXJyYXlCaW5kaW5nXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc09iamVjdEJpbmRpbmcgPSBSLndoZXJlRXEoe3R5cGU6IFwiT2JqZWN0QmluZGluZ1wifSk7XG47XG5leHBvcnQgY29uc3QgaXNCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyID0gUi53aGVyZUVxKHt0eXBlOiBcIkJpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXJcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQmluZGluZ1Byb3BlcnR5UHJvcGVydHkgPSBSLndoZXJlRXEoe3R5cGU6IFwiQmluZGluZ1Byb3BlcnR5SWRlbnRpZmllclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDbGFzc0V4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQ2xhc3NFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0NsYXNzRGVjbGFyYXRpb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQ2xhc3NEZWNsYXJhdGlvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDbGFzc0VsZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiQ2xhc3NFbGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc01vZHVsZSA9IFIud2hlcmVFcSh7dHlwZTogXCJNb2R1bGVcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzSW1wb3J0ID0gUi53aGVyZUVxKHt0eXBlOiBcIkltcG9ydFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNJbXBvcnROYW1lc3BhY2UgPSBSLndoZXJlRXEoe3R5cGU6IFwiSW1wb3J0TmFtZXNwYWNlXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0ltcG9ydFNwZWNpZmllciA9IFIud2hlcmVFcSh7dHlwZTogXCJJbXBvcnRTcGVjaWZpZXJcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRXhwb3J0QWxsRnJvbSA9IFIud2hlcmVFcSh7dHlwZTogXCJFeHBvcnRBbGxGcm9tXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0V4cG9ydEZyb20gPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwb3J0RnJvbVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFeHBvcnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwb3J0XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0V4cG9ydERlZmF1bHQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwb3J0RGVmYXVsdFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFeHBvcnRTcGVjaWZpZXIgPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwb3J0U3BlY2lmaWVyXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc01ldGhvZCA9IFIud2hlcmVFcSh7dHlwZTogXCJNZXRob2RcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzR2V0dGVyID0gUi53aGVyZUVxKHt0eXBlOiBcIkdldHRlclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTZXR0ZXIgPSBSLndoZXJlRXEoe3R5cGU6IFwiU2V0dGVyXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0RhdGFQcm9wZXJ0eSA9IFIud2hlcmVFcSh7dHlwZTogXCJEYXRhUHJvcGVydHlcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzU2hvcnRoYW5kUHJvcGVydHkgPSBSLndoZXJlRXEoe3R5cGU6IFwiU2hvcnRoYW5kUHJvcGVydHlcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQ29tcHV0ZWRQcm9wZXJ0eU5hbWUgPSBSLndoZXJlRXEoe3R5cGU6IFwiQ29tcHV0ZWRQcm9wZXJ0eU5hbWVcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzU3RhdGljUHJvcGVydHlOYW1lID0gUi53aGVyZUVxKHt0eXBlOiBcIlN0YXRpY1Byb3BlcnR5TmFtZVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNMaXRlcmFsQm9vbGVhbkV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbEJvb2xlYW5FeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0xpdGVyYWxJbmZpbml0eUV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbEluZmluaXR5RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNMaXRlcmFsTnVsbEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbE51bGxFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0xpdGVyYWxOdW1lcmljRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJMaXRlcmFsTnVtZXJpY0V4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzTGl0ZXJhbFJlZ0V4cEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbFJlZ0V4cEV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQXJyYXlFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkFycmF5RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNBcnJvd0V4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQXJyb3dFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Fzc2lnbm1lbnRFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0JpbmFyeUV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQmluYXJ5RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDYWxsRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJDYWxsRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDb21wdXRlZEFzc2lnbm1lbnRFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkNvbXB1dGVkQXNzaWdubWVudEV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkNvbXB1dGVkTWVtYmVyRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDb25kaXRpb25hbEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Z1bmN0aW9uRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJGdW5jdGlvbkV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzSWRlbnRpZmllckV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzTmV3RXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJOZXdFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc05ld1RhcmdldEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTmV3VGFyZ2V0RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNPYmplY3RFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIk9iamVjdEV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVW5hcnlFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlVuYXJ5RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTdGF0aWNNZW1iZXJFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlN0YXRpY01lbWJlckV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVGVtcGxhdGVFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlRlbXBsYXRlRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNUaGlzRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJUaGlzRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNVcGRhdGVFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlVwZGF0ZUV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzWWllbGRFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIllpZWxkRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNZaWVsZEdlbmVyYXRvckV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiWWllbGRHZW5lcmF0b3JFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Jsb2NrU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkJsb2NrU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0JyZWFrU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkJyZWFrU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0NvbnRpbnVlU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkNvbnRpbnVlU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0RlYnVnZ2VyU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkRlYnVnZ2VyU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0RvV2hpbGVTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRG9XaGlsZVN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFbXB0eVN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJFbXB0eVN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFeHByZXNzaW9uU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRm9ySW5TdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRm9ySW5TdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRm9yT2ZTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRm9yT2ZTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRm9yU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkZvclN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNJZlN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJJZlN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNMYWJlbGVkU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkxhYmVsZWRTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzUmV0dXJuU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlJldHVyblN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTd2l0Y2hTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiU3dpdGNoU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N3aXRjaFN0YXRlbWVudFdpdGhEZWZhdWx0ID0gUi53aGVyZUVxKHt0eXBlOiBcIlN3aXRjaFN0YXRlbWVudFdpdGhEZWZhdWx0XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1Rocm93U3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlRocm93U3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1RyeUNhdGNoU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlRyeUNhdGNoU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1RyeUZpbmFsbHlTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiVHJ5RmluYWxseVN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNWYXJpYWJsZURlY2xhcmF0aW9uU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzV2hpbGVTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiV2hpbGVTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzV2l0aFN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJXaXRoU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Jsb2NrID0gUi53aGVyZUVxKHt0eXBlOiBcIkJsb2NrXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0NhdGNoQ2xhdXNlID0gUi53aGVyZUVxKHt0eXBlOiBcIkNhdGNoQ2xhdXNlXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0RpcmVjdGl2ZSA9IFIud2hlcmVFcSh7dHlwZTogXCJEaXJlY3RpdmVcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRm9ybWFsUGFyYW1ldGVycyA9IFIud2hlcmVFcSh7dHlwZTogXCJGb3JtYWxQYXJhbWV0ZXJzXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Z1bmN0aW9uQm9keSA9IFIud2hlcmVFcSh7dHlwZTogXCJGdW5jdGlvbkJvZHlcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRnVuY3Rpb25EZWNsYXJhdGlvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1NjcmlwdCA9IFIud2hlcmVFcSh7dHlwZTogXCJTY3JpcHRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzU3ByZWFkRWxlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJTcHJlYWRFbGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N1cGVyID0gUi53aGVyZUVxKHt0eXBlOiBcIlN1cGVyXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N3aXRjaENhc2UgPSBSLndoZXJlRXEoe3R5cGU6IFwiU3dpdGNoQ2FzZVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTd2l0Y2hEZWZhdWx0ID0gUi53aGVyZUVxKHt0eXBlOiBcIlN3aXRjaERlZmF1bHRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVGVtcGxhdGVFbGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlRlbXBsYXRlRWxlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTeW50YXhUZW1wbGF0ZSA9IFIud2hlcmVFcSh7dHlwZTogXCJTeW50YXhUZW1wbGF0ZVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNWYXJpYWJsZURlY2xhcmF0aW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVmFyaWFibGVEZWNsYXJhdG9yID0gUi53aGVyZUVxKHt0eXBlOiBcIlZhcmlhYmxlRGVjbGFyYXRvclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFT0YgPSBSLndoZXJlRXEoe3R5cGU6IFwiRU9GXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N5bnRheERlY2xhcmF0aW9uID0gUi5ib3RoKGlzVmFyaWFibGVEZWNsYXJhdGlvbiwgUi53aGVyZUVxKHtraW5kOiBcInN5bnRheFwifSkpO1xuO1xuZXhwb3J0IGNvbnN0IGlzU3ludGF4cmVjRGVjbGFyYXRpb24gPSBSLmJvdGgoaXNWYXJpYWJsZURlY2xhcmF0aW9uLCBSLndoZXJlRXEoe2tpbmQ6IFwic3ludGF4cmVjXCJ9KSk7XG47XG5leHBvcnQgY29uc3QgaXNGdW5jdGlvblRlcm0gPSBSLmVpdGhlcihpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIGlzRnVuY3Rpb25FeHByZXNzaW9uKTtcbjtcbmV4cG9ydCBjb25zdCBpc0Z1bmN0aW9uV2l0aE5hbWUgPSBSLmFuZChpc0Z1bmN0aW9uVGVybSwgUi5jb21wbGVtZW50KFIud2hlcmUoe25hbWU6IFIuaXNOaWx9KSkpO1xuO1xuZXhwb3J0IGNvbnN0IGlzUGFyZW50aGVzaXplZEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIn0pO1xuO1xuY29uc3QgZmllbGRzSW5fODc4ID0gUi5jb25kKFtbaXNCaW5kaW5nV2l0aERlZmF1bHQsIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiaW5pdFwiKSldLCBbaXNCaW5kaW5nSWRlbnRpZmllciwgUi5hbHdheXMoTGlzdC5vZihcIm5hbWVcIikpXSwgW2lzQXJyYXlCaW5kaW5nLCBSLmFsd2F5cyhMaXN0Lm9mKFwiZWxlbWVudHNcIiwgXCJyZXN0RWxlbWVudFwiKSldLCBbaXNPYmplY3RCaW5kaW5nLCBSLmFsd2F5cyhMaXN0Lm9mKFwicHJvcGVydGllc1wiKSldLCBbaXNCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyLCBSLmFsd2F5cyhMaXN0Lm9mKFwiYmluZGluZ1wiLCBcImluaXRcIikpXSwgW2lzQmluZGluZ1Byb3BlcnR5UHJvcGVydHksIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiYmluZGluZ1wiKSldLCBbaXNDbGFzc0V4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwic3VwZXJcIiwgXCJlbGVtZW50c1wiKSldLCBbaXNDbGFzc0RlY2xhcmF0aW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiLCBcInN1cGVyXCIsIFwiZWxlbWVudHNcIikpXSwgW2lzQ2xhc3NFbGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiaXNTdGF0aWNcIiwgXCJtZXRob2RcIikpXSwgW2lzTW9kdWxlLCBSLmFsd2F5cyhMaXN0Lm9mKFwiZGlyZWN0aXZlc1wiLCBcIml0ZW1zXCIpKV0sIFtpc0ltcG9ydCwgUi5hbHdheXMoTGlzdC5vZihcIm1vZHVsZVNwZWNpZmllclwiLCBcImRlZmF1bHRCaW5kaW5nXCIsIFwibmFtZWRJbXBvcnRzXCIpKV0sIFtpc0ltcG9ydE5hbWVzcGFjZSwgUi5hbHdheXMoTGlzdC5vZihcIm1vZHVsZVNwZWNpZmllclwiLCBcImRlZmF1bHRCaW5kaW5nXCIsIFwibmFtZXNwYWNlQmluZGluZ1wiKSldLCBbaXNJbXBvcnRTcGVjaWZpZXIsIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiYmluZGluZ1wiKSldLCBbaXNFeHBvcnRBbGxGcm9tLCBSLmFsd2F5cyhMaXN0Lm9mKFwibW9kdWxlU3BlY2lmaWVyXCIpKV0sIFtpc0V4cG9ydEZyb20sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lZEV4cG9ydHNcIiwgXCJtb2R1bGVTcGVjaWZpZXJcIikpXSwgW2lzRXhwb3J0LCBSLmFsd2F5cyhMaXN0Lm9mKFwiZGVjbGFyYXRpb25cIikpXSwgW2lzRXhwb3J0RGVmYXVsdCwgUi5hbHdheXMoTGlzdC5vZihcImJvZHlcIikpXSwgW2lzRXhwb3J0U3BlY2lmaWVyLCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiLCBcImV4cG9ydGVkTmFtZVwiKSldLCBbaXNNZXRob2QsIFIuYWx3YXlzKExpc3Qub2YoXCJib2R5XCIsIFwiaXNHZW5lcmF0b3JcIiwgXCJwYXJhbXNcIikpXSwgW2lzR2V0dGVyLCBSLmFsd2F5cyhMaXN0Lm9mKFwiYm9keVwiKSldLCBbaXNTZXR0ZXIsIFIuYWx3YXlzKExpc3Qub2YoXCJib2R5XCIsIFwicGFyYW1cIikpXSwgW2lzRGF0YVByb3BlcnR5LCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiLCBcImV4cHJlc3Npb25cIikpXSwgW2lzU2hvcnRoYW5kUHJvcGVydHksIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc1N0YXRpY1Byb3BlcnR5TmFtZSwgUi5hbHdheXMoTGlzdC5vZihcInZhbHVlXCIpKV0sIFtpc0xpdGVyYWxCb29sZWFuRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInZhbHVlXCIpKV0sIFtpc0xpdGVyYWxJbmZpbml0eUV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3QoKSldLCBbaXNMaXRlcmFsTnVsbEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3QoKSldLCBbaXNMaXRlcmFsTnVtZXJpY0V4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJ2YWx1ZVwiKSldLCBbaXNMaXRlcmFsUmVnRXhwRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInBhdHRlcm5cIiwgXCJmbGFnc1wiKSldLCBbaXNMaXRlcmFsU3RyaW5nRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInZhbHVlXCIpKV0sIFtpc0FycmF5RXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcImVsZW1lbnRzXCIpKV0sIFtpc0Fycm93RXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInBhcmFtc1wiLCBcImJvZHlcIikpXSwgW2lzQXNzaWdubWVudEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiZXhwcmVzc2lvblwiKSldLCBbaXNCaW5hcnlFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwib3BlcmF0b3JcIiwgXCJsZWZ0XCIsIFwicmlnaHRcIikpXSwgW2lzQ2FsbEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJjYWxsZWVcIiwgXCJhcmd1bWVudHNcIikpXSwgW2lzQ29tcHV0ZWRBc3NpZ25tZW50RXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcIm9wZXJhdG9yXCIsIFwiYmluZGluZ1wiLCBcImV4cHJlc3Npb25cIikpXSwgW2lzQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwib2JqZWN0XCIsIFwiZXhwcmVzc2lvblwiKSldLCBbaXNDb25kaXRpb25hbEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJ0ZXN0XCIsIFwiY29uc2VxdWVudFwiLCBcImFsdGVybmF0ZVwiKSldLCBbaXNGdW5jdGlvbkV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiaXNHZW5lcmF0b3JcIiwgXCJwYXJhbXNcIiwgXCJib2R5XCIpKV0sIFtpc0lkZW50aWZpZXJFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiKSldLCBbaXNOZXdFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwiY2FsbGVlXCIsIFwiYXJndW1lbnRzXCIpKV0sIFtpc05ld1RhcmdldEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3QoKSldLCBbaXNPYmplY3RFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwicHJvcGVydGllc1wiKSldLCBbaXNVbmFyeUV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJvcGVyYXRvclwiLCBcIm9wZXJhbmRcIikpXSwgW2lzU3RhdGljTWVtYmVyRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcIm9iamVjdFwiLCBcInByb3BlcnR5XCIpKV0sIFtpc1RlbXBsYXRlRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInRhZ1wiLCBcImVsZW1lbnRzXCIpKV0sIFtpc1RoaXNFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0KCkpXSwgW2lzWWllbGRFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwiZXhwcmVzc2lvblwiKSldLCBbaXNZaWVsZEdlbmVyYXRvckV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc0Jsb2NrU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiYmxvY2tcIikpXSwgW2lzQnJlYWtTdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJsYWJlbFwiKSldLCBbaXNDb250aW51ZVN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImxhYmVsXCIpKV0sIFtpc0RlYnVnZ2VyU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0KCkpXSwgW2lzRG9XaGlsZVN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcInRlc3RcIiwgXCJib2R5XCIpKV0sIFtpc0VtcHR5U3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0KCkpXSwgW2lzRXhwcmVzc2lvblN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImV4cHJlc3Npb25cIikpXSwgW2lzRm9ySW5TdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJib2R5XCIpKV0sIFtpc0Zvck9mU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwibGVmdFwiLCBcInJpZ2h0XCIsIFwiYm9keVwiKSldLCBbaXNGb3JTdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJpbml0XCIsIFwidGVzdFwiLCBcInVwZGF0ZVwiLCBcImJvZHlcIikpXSwgW2lzTGFiZWxlZFN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImxhYmVsXCIsIFwiYm9keVwiKSldLCBbaXNSZXR1cm5TdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc1N3aXRjaFN0YXRlbWVudFdpdGhEZWZhdWx0LCBSLmFsd2F5cyhMaXN0Lm9mKFwiZGlzY3JpbWluYW50XCIsIFwicHJlRGVmYXVsdENhc2VzXCIsIFwiZGVmYXVsdENhc2VcIiwgXCJwb3N0RGVmYXVsdENhc2VzXCIpKV0sIFtpc1Rocm93U3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiZXhwcmVzc2lvblwiKSldLCBbaXNUcnlDYXRjaFN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImJvZHlcIiwgXCJjYXRjaENsYXVzZVwiKSldLCBbaXNUcnlGaW5hbGx5U3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiYm9keVwiLCBcImNhdGNoQ2xhdXNlXCIsIFwiZmluYWxpemVyXCIpKV0sIFtpc1ZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJkZWNsYXJhdGlvblwiKSldLCBbaXNXaXRoU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwib2JqZWN0XCIsIFwiYm9keVwiKSldLCBbaXNCbG9jaywgUi5hbHdheXMoTGlzdC5vZihcInN0YXRlbWVudHNcIikpXSwgW2lzQ2F0Y2hDbGF1c2UsIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiYm9keVwiKSldLCBbaXNEaXJlY3RpdmUsIFIuYWx3YXlzKExpc3Qub2YoXCJyYXdWYWx1ZVwiKSldLCBbaXNGb3JtYWxQYXJhbWV0ZXJzLCBSLmFsd2F5cyhMaXN0Lm9mKFwiaXRlbXNcIiwgXCJyZXN0XCIpKV0sIFtpc0Z1bmN0aW9uQm9keSwgUi5hbHdheXMoTGlzdC5vZihcImRpcmVjdGl2ZXNcIiwgXCJzdGF0ZW1lbnRzXCIpKV0sIFtpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiaXNHZW5lcmF0b3JcIiwgXCJwYXJhbXNcIiwgXCJib2R5XCIpKV0sIFtpc1NjcmlwdCwgUi5hbHdheXMoTGlzdC5vZihcImRpcmVjdGl2ZXNcIiwgXCJzdGF0ZW1lbnRzXCIpKV0sIFtpc1NwcmVhZEVsZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc1N1cGVyLCBSLmFsd2F5cyhMaXN0KCkpXSwgW2lzU3dpdGNoQ2FzZSwgUi5hbHdheXMoTGlzdC5vZihcInRlc3RcIiwgXCJjb25zZXF1ZW50XCIpKV0sIFtpc1N3aXRjaERlZmF1bHQsIFIuYWx3YXlzKExpc3Qub2YoXCJjb25zZXF1ZW50XCIpKV0sIFtpc1RlbXBsYXRlRWxlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcInJhd1ZhbHVlXCIpKV0sIFtpc1N5bnRheFRlbXBsYXRlLCBSLmFsd2F5cyhMaXN0Lm9mKFwidGVtcGxhdGVcIikpXSwgW2lzVmFyaWFibGVEZWNsYXJhdGlvbiwgUi5hbHdheXMoTGlzdC5vZihcImtpbmRcIiwgXCJkZWNsYXJhdG9yc1wiKSldLCBbaXNWYXJpYWJsZURlY2xhcmF0b3IsIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiaW5pdFwiKSldLCBbaXNQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcImlubmVyXCIpKV0sIFtSLlQsIHR5cGVfODg5ID0+IGFzc2VydChmYWxzZSwgXCJNaXNzaW5nIGNhc2UgaW4gZmllbGRzOiBcIiArIHR5cGVfODg5LnR5cGUpXV0pO1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,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QSxDQUFOLENBQXAzSixDQUFQLENBQXJCIiwiZmlsZSI6InRlcm1zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMaXN0fSBmcm9tIFwiaW1tdXRhYmxlXCI7XG5pbXBvcnQge2Fzc2VydCwgZXhwZWN0fSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7bWl4aW59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgU3ludGF4IGZyb20gXCIuL3N5bnRheFwiO1xuaW1wb3J0ICAqIGFzIFIgZnJvbSBcInJhbWRhXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtIHtcbiAgY29uc3RydWN0b3IodHlwZV84ODcsIHByb3BzXzg4OCkge1xuICAgIHRoaXMudHlwZSA9IHR5cGVfODg3O1xuICAgIHRoaXMubG9jID0gbnVsbDtcbiAgICBmb3IgKGxldCBwcm9wIG9mIE9iamVjdC5rZXlzKHByb3BzXzg4OCkpIHtcbiAgICAgIHRoaXNbcHJvcF0gPSBwcm9wc184ODhbcHJvcF07XG4gICAgfVxuICB9XG4gIGFkZFNjb3BlKHNjb3BlXzg4OSwgYmluZGluZ3NfODkwLCBvcHRpb25zXzg5MSkge1xuICAgIGxldCBuZXh0Xzg5MiA9IHt9O1xuICAgIGZvciAobGV0IGZpZWxkIG9mIGZpZWxkc0luXzg4Nih0aGlzKSkge1xuICAgICAgaWYgKHRoaXNbZmllbGRdID09IG51bGwpIHtcbiAgICAgICAgbmV4dF84OTJbZmllbGRdID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXNbZmllbGRdLmFkZFNjb3BlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgbmV4dF84OTJbZmllbGRdID0gdGhpc1tmaWVsZF0uYWRkU2NvcGUoc2NvcGVfODg5LCBiaW5kaW5nc184OTAsIG9wdGlvbnNfODkxKTtcbiAgICAgIH0gZWxzZSBpZiAoTGlzdC5pc0xpc3QodGhpc1tmaWVsZF0pKSB7XG4gICAgICAgIG5leHRfODkyW2ZpZWxkXSA9IHRoaXNbZmllbGRdLm1hcChmXzg5MyA9PiBmXzg5My5hZGRTY29wZShzY29wZV84ODksIGJpbmRpbmdzXzg5MCwgb3B0aW9uc184OTEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRfODkyW2ZpZWxkXSA9IHRoaXNbZmllbGRdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlcm0odGhpcy50eXBlLCBuZXh0Xzg5Mik7XG4gIH1cbiAgbGluZU51bWJlcigpIHtcbiAgICBmb3IgKGxldCBmaWVsZCBvZiBmaWVsZHNJbl84ODYodGhpcykpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpc1tmaWVsZF0gJiYgdGhpc1tmaWVsZF0ubGluZU51bWJlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2ZpZWxkXS5saW5lTnVtYmVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHNldExpbmVOdW1iZXIobGluZV84OTQpIHtcbiAgICBsZXQgbmV4dF84OTUgPSB7fTtcbiAgICBmb3IgKGxldCBmaWVsZCBvZiBmaWVsZHNJbl84ODYodGhpcykpIHtcbiAgICAgIGlmICh0aGlzW2ZpZWxkXSA9PSBudWxsKSB7XG4gICAgICAgIG5leHRfODk1W2ZpZWxkXSA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzW2ZpZWxkXS5zZXRMaW5lTnVtYmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgbmV4dF84OTVbZmllbGRdID0gdGhpc1tmaWVsZF0uc2V0TGluZU51bWJlcihsaW5lXzg5NCk7XG4gICAgICB9IGVsc2UgaWYgKExpc3QuaXNMaXN0KHRoaXNbZmllbGRdKSkge1xuICAgICAgICBuZXh0Xzg5NVtmaWVsZF0gPSB0aGlzW2ZpZWxkXS5tYXAoZl84OTYgPT4gZl84OTYuc2V0TGluZU51bWJlcihsaW5lXzg5NCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dF84OTVbZmllbGRdID0gdGhpc1tmaWVsZF07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGVybSh0aGlzLnR5cGUsIG5leHRfODk1KTtcbiAgfVxufVxuZXhwb3J0IGNvbnN0IGlzQmluZGluZ1dpdGhEZWZhdWx0ID0gUi53aGVyZUVxKHt0eXBlOiBcIkJpbmRpbmdXaXRoRGVmYXVsdFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNCaW5kaW5nSWRlbnRpZmllciA9IFIud2hlcmVFcSh7dHlwZTogXCJCaW5kaW5nSWRlbnRpZmllclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNBcnJheUJpbmRpbmcgPSBSLndoZXJlRXEoe3R5cGU6IFwiQXJyYXlCaW5kaW5nXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc09iamVjdEJpbmRpbmcgPSBSLndoZXJlRXEoe3R5cGU6IFwiT2JqZWN0QmluZGluZ1wifSk7XG47XG5leHBvcnQgY29uc3QgaXNCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyID0gUi53aGVyZUVxKHt0eXBlOiBcIkJpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXJcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQmluZGluZ1Byb3BlcnR5UHJvcGVydHkgPSBSLndoZXJlRXEoe3R5cGU6IFwiQmluZGluZ1Byb3BlcnR5SWRlbnRpZmllclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDbGFzc0V4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQ2xhc3NFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0NsYXNzRGVjbGFyYXRpb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQ2xhc3NEZWNsYXJhdGlvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDbGFzc0VsZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiQ2xhc3NFbGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc01vZHVsZSA9IFIud2hlcmVFcSh7dHlwZTogXCJNb2R1bGVcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzSW1wb3J0ID0gUi53aGVyZUVxKHt0eXBlOiBcIkltcG9ydFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNJbXBvcnROYW1lc3BhY2UgPSBSLndoZXJlRXEoe3R5cGU6IFwiSW1wb3J0TmFtZXNwYWNlXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0ltcG9ydFNwZWNpZmllciA9IFIud2hlcmVFcSh7dHlwZTogXCJJbXBvcnRTcGVjaWZpZXJcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRXhwb3J0QWxsRnJvbSA9IFIud2hlcmVFcSh7dHlwZTogXCJFeHBvcnRBbGxGcm9tXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0V4cG9ydEZyb20gPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwb3J0RnJvbVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFeHBvcnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwb3J0XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0V4cG9ydERlZmF1bHQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwb3J0RGVmYXVsdFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFeHBvcnRTcGVjaWZpZXIgPSBSLndoZXJlRXEoe3R5cGU6IFwiRXhwb3J0U3BlY2lmaWVyXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc01ldGhvZCA9IFIud2hlcmVFcSh7dHlwZTogXCJNZXRob2RcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzR2V0dGVyID0gUi53aGVyZUVxKHt0eXBlOiBcIkdldHRlclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTZXR0ZXIgPSBSLndoZXJlRXEoe3R5cGU6IFwiU2V0dGVyXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0RhdGFQcm9wZXJ0eSA9IFIud2hlcmVFcSh7dHlwZTogXCJEYXRhUHJvcGVydHlcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzU2hvcnRoYW5kUHJvcGVydHkgPSBSLndoZXJlRXEoe3R5cGU6IFwiU2hvcnRoYW5kUHJvcGVydHlcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQ29tcHV0ZWRQcm9wZXJ0eU5hbWUgPSBSLndoZXJlRXEoe3R5cGU6IFwiQ29tcHV0ZWRQcm9wZXJ0eU5hbWVcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzU3RhdGljUHJvcGVydHlOYW1lID0gUi53aGVyZUVxKHt0eXBlOiBcIlN0YXRpY1Byb3BlcnR5TmFtZVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNMaXRlcmFsQm9vbGVhbkV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbEJvb2xlYW5FeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0xpdGVyYWxJbmZpbml0eUV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbEluZmluaXR5RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNMaXRlcmFsTnVsbEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbE51bGxFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0xpdGVyYWxOdW1lcmljRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJMaXRlcmFsTnVtZXJpY0V4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzTGl0ZXJhbFJlZ0V4cEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbFJlZ0V4cEV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTGl0ZXJhbFN0cmluZ0V4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQXJyYXlFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkFycmF5RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNBcnJvd0V4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQXJyb3dFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Fzc2lnbm1lbnRFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0JpbmFyeUV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQmluYXJ5RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDYWxsRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJDYWxsRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDb21wdXRlZEFzc2lnbm1lbnRFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkNvbXB1dGVkQXNzaWdubWVudEV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIkNvbXB1dGVkTWVtYmVyRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNDb25kaXRpb25hbEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Z1bmN0aW9uRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJGdW5jdGlvbkV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzSWRlbnRpZmllckV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzTmV3RXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJOZXdFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc05ld1RhcmdldEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiTmV3VGFyZ2V0RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNPYmplY3RFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIk9iamVjdEV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVW5hcnlFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlVuYXJ5RXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTdGF0aWNNZW1iZXJFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlN0YXRpY01lbWJlckV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVGVtcGxhdGVFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlRlbXBsYXRlRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNUaGlzRXhwcmVzc2lvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJUaGlzRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNVcGRhdGVFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlVwZGF0ZUV4cHJlc3Npb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzWWllbGRFeHByZXNzaW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIllpZWxkRXhwcmVzc2lvblwifSk7XG47XG5leHBvcnQgY29uc3QgaXNZaWVsZEdlbmVyYXRvckV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiWWllbGRHZW5lcmF0b3JFeHByZXNzaW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Jsb2NrU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkJsb2NrU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0JyZWFrU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkJyZWFrU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0NvbnRpbnVlU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkNvbnRpbnVlU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0RlYnVnZ2VyU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkRlYnVnZ2VyU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0RvV2hpbGVTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRG9XaGlsZVN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFbXB0eVN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJFbXB0eVN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFeHByZXNzaW9uU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRm9ySW5TdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRm9ySW5TdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRm9yT2ZTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiRm9yT2ZTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRm9yU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkZvclN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNJZlN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJJZlN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNMYWJlbGVkU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIkxhYmVsZWRTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzUmV0dXJuU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlJldHVyblN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTd2l0Y2hTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiU3dpdGNoU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N3aXRjaFN0YXRlbWVudFdpdGhEZWZhdWx0ID0gUi53aGVyZUVxKHt0eXBlOiBcIlN3aXRjaFN0YXRlbWVudFdpdGhEZWZhdWx0XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1Rocm93U3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlRocm93U3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1RyeUNhdGNoU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlRyeUNhdGNoU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1RyeUZpbmFsbHlTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiVHJ5RmluYWxseVN0YXRlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNWYXJpYWJsZURlY2xhcmF0aW9uU3RhdGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzV2hpbGVTdGF0ZW1lbnQgPSBSLndoZXJlRXEoe3R5cGU6IFwiV2hpbGVTdGF0ZW1lbnRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzV2l0aFN0YXRlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJXaXRoU3RhdGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Jsb2NrID0gUi53aGVyZUVxKHt0eXBlOiBcIkJsb2NrXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0NhdGNoQ2xhdXNlID0gUi53aGVyZUVxKHt0eXBlOiBcIkNhdGNoQ2xhdXNlXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0RpcmVjdGl2ZSA9IFIud2hlcmVFcSh7dHlwZTogXCJEaXJlY3RpdmVcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRm9ybWFsUGFyYW1ldGVycyA9IFIud2hlcmVFcSh7dHlwZTogXCJGb3JtYWxQYXJhbWV0ZXJzXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc0Z1bmN0aW9uQm9keSA9IFIud2hlcmVFcSh7dHlwZTogXCJGdW5jdGlvbkJvZHlcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzRnVuY3Rpb25EZWNsYXJhdGlvbiA9IFIud2hlcmVFcSh7dHlwZTogXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1NjcmlwdCA9IFIud2hlcmVFcSh7dHlwZTogXCJTY3JpcHRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzU3ByZWFkRWxlbWVudCA9IFIud2hlcmVFcSh7dHlwZTogXCJTcHJlYWRFbGVtZW50XCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N1cGVyID0gUi53aGVyZUVxKHt0eXBlOiBcIlN1cGVyXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N3aXRjaENhc2UgPSBSLndoZXJlRXEoe3R5cGU6IFwiU3dpdGNoQ2FzZVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTd2l0Y2hEZWZhdWx0ID0gUi53aGVyZUVxKHt0eXBlOiBcIlN3aXRjaERlZmF1bHRcIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVGVtcGxhdGVFbGVtZW50ID0gUi53aGVyZUVxKHt0eXBlOiBcIlRlbXBsYXRlRWxlbWVudFwifSk7XG47XG5leHBvcnQgY29uc3QgaXNTeW50YXhUZW1wbGF0ZSA9IFIud2hlcmVFcSh7dHlwZTogXCJTeW50YXhUZW1wbGF0ZVwifSk7XG47XG5leHBvcnQgY29uc3QgaXNWYXJpYWJsZURlY2xhcmF0aW9uID0gUi53aGVyZUVxKHt0eXBlOiBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIn0pO1xuO1xuZXhwb3J0IGNvbnN0IGlzVmFyaWFibGVEZWNsYXJhdG9yID0gUi53aGVyZUVxKHt0eXBlOiBcIlZhcmlhYmxlRGVjbGFyYXRvclwifSk7XG47XG5leHBvcnQgY29uc3QgaXNFT0YgPSBSLndoZXJlRXEoe3R5cGU6IFwiRU9GXCJ9KTtcbjtcbmV4cG9ydCBjb25zdCBpc1N5bnRheERlY2xhcmF0aW9uID0gUi5ib3RoKGlzVmFyaWFibGVEZWNsYXJhdGlvbiwgUi53aGVyZUVxKHtraW5kOiBcInN5bnRheFwifSkpO1xuO1xuZXhwb3J0IGNvbnN0IGlzU3ludGF4cmVjRGVjbGFyYXRpb24gPSBSLmJvdGgoaXNWYXJpYWJsZURlY2xhcmF0aW9uLCBSLndoZXJlRXEoe2tpbmQ6IFwic3ludGF4cmVjXCJ9KSk7XG47XG5leHBvcnQgY29uc3QgaXNGdW5jdGlvblRlcm0gPSBSLmVpdGhlcihpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIGlzRnVuY3Rpb25FeHByZXNzaW9uKTtcbjtcbmV4cG9ydCBjb25zdCBpc0Z1bmN0aW9uV2l0aE5hbWUgPSBSLmFuZChpc0Z1bmN0aW9uVGVybSwgUi5jb21wbGVtZW50KFIud2hlcmUoe25hbWU6IFIuaXNOaWx9KSkpO1xuO1xuZXhwb3J0IGNvbnN0IGlzUGFyZW50aGVzaXplZEV4cHJlc3Npb24gPSBSLndoZXJlRXEoe3R5cGU6IFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIn0pO1xuO1xuY29uc3QgZmllbGRzSW5fODg2ID0gUi5jb25kKFtbaXNCaW5kaW5nV2l0aERlZmF1bHQsIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiaW5pdFwiKSldLCBbaXNCaW5kaW5nSWRlbnRpZmllciwgUi5hbHdheXMoTGlzdC5vZihcIm5hbWVcIikpXSwgW2lzQXJyYXlCaW5kaW5nLCBSLmFsd2F5cyhMaXN0Lm9mKFwiZWxlbWVudHNcIiwgXCJyZXN0RWxlbWVudFwiKSldLCBbaXNPYmplY3RCaW5kaW5nLCBSLmFsd2F5cyhMaXN0Lm9mKFwicHJvcGVydGllc1wiKSldLCBbaXNCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyLCBSLmFsd2F5cyhMaXN0Lm9mKFwiYmluZGluZ1wiLCBcImluaXRcIikpXSwgW2lzQmluZGluZ1Byb3BlcnR5UHJvcGVydHksIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiYmluZGluZ1wiKSldLCBbaXNDbGFzc0V4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwic3VwZXJcIiwgXCJlbGVtZW50c1wiKSldLCBbaXNDbGFzc0RlY2xhcmF0aW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiLCBcInN1cGVyXCIsIFwiZWxlbWVudHNcIikpXSwgW2lzQ2xhc3NFbGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiaXNTdGF0aWNcIiwgXCJtZXRob2RcIikpXSwgW2lzTW9kdWxlLCBSLmFsd2F5cyhMaXN0Lm9mKFwiZGlyZWN0aXZlc1wiLCBcIml0ZW1zXCIpKV0sIFtpc0ltcG9ydCwgUi5hbHdheXMoTGlzdC5vZihcIm1vZHVsZVNwZWNpZmllclwiLCBcImRlZmF1bHRCaW5kaW5nXCIsIFwibmFtZWRJbXBvcnRzXCIpKV0sIFtpc0ltcG9ydE5hbWVzcGFjZSwgUi5hbHdheXMoTGlzdC5vZihcIm1vZHVsZVNwZWNpZmllclwiLCBcImRlZmF1bHRCaW5kaW5nXCIsIFwibmFtZXNwYWNlQmluZGluZ1wiKSldLCBbaXNJbXBvcnRTcGVjaWZpZXIsIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiYmluZGluZ1wiKSldLCBbaXNFeHBvcnRBbGxGcm9tLCBSLmFsd2F5cyhMaXN0Lm9mKFwibW9kdWxlU3BlY2lmaWVyXCIpKV0sIFtpc0V4cG9ydEZyb20sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lZEV4cG9ydHNcIiwgXCJtb2R1bGVTcGVjaWZpZXJcIikpXSwgW2lzRXhwb3J0LCBSLmFsd2F5cyhMaXN0Lm9mKFwiZGVjbGFyYXRpb25cIikpXSwgW2lzRXhwb3J0RGVmYXVsdCwgUi5hbHdheXMoTGlzdC5vZihcImJvZHlcIikpXSwgW2lzRXhwb3J0U3BlY2lmaWVyLCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiLCBcImV4cG9ydGVkTmFtZVwiKSldLCBbaXNNZXRob2QsIFIuYWx3YXlzKExpc3Qub2YoXCJib2R5XCIsIFwiaXNHZW5lcmF0b3JcIiwgXCJwYXJhbXNcIikpXSwgW2lzR2V0dGVyLCBSLmFsd2F5cyhMaXN0Lm9mKFwiYm9keVwiKSldLCBbaXNTZXR0ZXIsIFIuYWx3YXlzKExpc3Qub2YoXCJib2R5XCIsIFwicGFyYW1cIikpXSwgW2lzRGF0YVByb3BlcnR5LCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiLCBcImV4cHJlc3Npb25cIikpXSwgW2lzU2hvcnRoYW5kUHJvcGVydHksIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc1N0YXRpY1Byb3BlcnR5TmFtZSwgUi5hbHdheXMoTGlzdC5vZihcInZhbHVlXCIpKV0sIFtpc0xpdGVyYWxCb29sZWFuRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInZhbHVlXCIpKV0sIFtpc0xpdGVyYWxJbmZpbml0eUV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3QoKSldLCBbaXNMaXRlcmFsTnVsbEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3QoKSldLCBbaXNMaXRlcmFsTnVtZXJpY0V4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJ2YWx1ZVwiKSldLCBbaXNMaXRlcmFsUmVnRXhwRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInBhdHRlcm5cIiwgXCJmbGFnc1wiKSldLCBbaXNMaXRlcmFsU3RyaW5nRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInZhbHVlXCIpKV0sIFtpc0FycmF5RXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcImVsZW1lbnRzXCIpKV0sIFtpc0Fycm93RXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInBhcmFtc1wiLCBcImJvZHlcIikpXSwgW2lzQXNzaWdubWVudEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiZXhwcmVzc2lvblwiKSldLCBbaXNCaW5hcnlFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwib3BlcmF0b3JcIiwgXCJsZWZ0XCIsIFwicmlnaHRcIikpXSwgW2lzQ2FsbEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJjYWxsZWVcIiwgXCJhcmd1bWVudHNcIikpXSwgW2lzQ29tcHV0ZWRBc3NpZ25tZW50RXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcIm9wZXJhdG9yXCIsIFwiYmluZGluZ1wiLCBcImV4cHJlc3Npb25cIikpXSwgW2lzQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwib2JqZWN0XCIsIFwiZXhwcmVzc2lvblwiKSldLCBbaXNDb25kaXRpb25hbEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJ0ZXN0XCIsIFwiY29uc2VxdWVudFwiLCBcImFsdGVybmF0ZVwiKSldLCBbaXNGdW5jdGlvbkV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiaXNHZW5lcmF0b3JcIiwgXCJwYXJhbXNcIiwgXCJib2R5XCIpKV0sIFtpc0lkZW50aWZpZXJFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwibmFtZVwiKSldLCBbaXNOZXdFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwiY2FsbGVlXCIsIFwiYXJndW1lbnRzXCIpKV0sIFtpc05ld1RhcmdldEV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3QoKSldLCBbaXNPYmplY3RFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwicHJvcGVydGllc1wiKSldLCBbaXNVbmFyeUV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJvcGVyYXRvclwiLCBcIm9wZXJhbmRcIikpXSwgW2lzU3RhdGljTWVtYmVyRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcIm9iamVjdFwiLCBcInByb3BlcnR5XCIpKV0sIFtpc1RlbXBsYXRlRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcInRhZ1wiLCBcImVsZW1lbnRzXCIpKV0sIFtpc1RoaXNFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0KCkpXSwgW2lzWWllbGRFeHByZXNzaW9uLCBSLmFsd2F5cyhMaXN0Lm9mKFwiZXhwcmVzc2lvblwiKSldLCBbaXNZaWVsZEdlbmVyYXRvckV4cHJlc3Npb24sIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc0Jsb2NrU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiYmxvY2tcIikpXSwgW2lzQnJlYWtTdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJsYWJlbFwiKSldLCBbaXNDb250aW51ZVN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImxhYmVsXCIpKV0sIFtpc0RlYnVnZ2VyU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0KCkpXSwgW2lzRG9XaGlsZVN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcInRlc3RcIiwgXCJib2R5XCIpKV0sIFtpc0VtcHR5U3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0KCkpXSwgW2lzRXhwcmVzc2lvblN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImV4cHJlc3Npb25cIikpXSwgW2lzRm9ySW5TdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJib2R5XCIpKV0sIFtpc0Zvck9mU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwibGVmdFwiLCBcInJpZ2h0XCIsIFwiYm9keVwiKSldLCBbaXNGb3JTdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJpbml0XCIsIFwidGVzdFwiLCBcInVwZGF0ZVwiLCBcImJvZHlcIikpXSwgW2lzTGFiZWxlZFN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImxhYmVsXCIsIFwiYm9keVwiKSldLCBbaXNSZXR1cm5TdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc1N3aXRjaFN0YXRlbWVudFdpdGhEZWZhdWx0LCBSLmFsd2F5cyhMaXN0Lm9mKFwiZGlzY3JpbWluYW50XCIsIFwicHJlRGVmYXVsdENhc2VzXCIsIFwiZGVmYXVsdENhc2VcIiwgXCJwb3N0RGVmYXVsdENhc2VzXCIpKV0sIFtpc1Rocm93U3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiZXhwcmVzc2lvblwiKSldLCBbaXNUcnlDYXRjaFN0YXRlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcImJvZHlcIiwgXCJjYXRjaENsYXVzZVwiKSldLCBbaXNUcnlGaW5hbGx5U3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwiYm9keVwiLCBcImNhdGNoQ2xhdXNlXCIsIFwiZmluYWxpemVyXCIpKV0sIFtpc1ZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJkZWNsYXJhdGlvblwiKSldLCBbaXNXaXRoU3RhdGVtZW50LCBSLmFsd2F5cyhMaXN0Lm9mKFwib2JqZWN0XCIsIFwiYm9keVwiKSldLCBbaXNCbG9jaywgUi5hbHdheXMoTGlzdC5vZihcInN0YXRlbWVudHNcIikpXSwgW2lzQ2F0Y2hDbGF1c2UsIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiYm9keVwiKSldLCBbaXNEaXJlY3RpdmUsIFIuYWx3YXlzKExpc3Qub2YoXCJyYXdWYWx1ZVwiKSldLCBbaXNGb3JtYWxQYXJhbWV0ZXJzLCBSLmFsd2F5cyhMaXN0Lm9mKFwiaXRlbXNcIiwgXCJyZXN0XCIpKV0sIFtpc0Z1bmN0aW9uQm9keSwgUi5hbHdheXMoTGlzdC5vZihcImRpcmVjdGl2ZXNcIiwgXCJzdGF0ZW1lbnRzXCIpKV0sIFtpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIFIuYWx3YXlzKExpc3Qub2YoXCJuYW1lXCIsIFwiaXNHZW5lcmF0b3JcIiwgXCJwYXJhbXNcIiwgXCJib2R5XCIpKV0sIFtpc1NjcmlwdCwgUi5hbHdheXMoTGlzdC5vZihcImRpcmVjdGl2ZXNcIiwgXCJzdGF0ZW1lbnRzXCIpKV0sIFtpc1NwcmVhZEVsZW1lbnQsIFIuYWx3YXlzKExpc3Qub2YoXCJleHByZXNzaW9uXCIpKV0sIFtpc1N1cGVyLCBSLmFsd2F5cyhMaXN0KCkpXSwgW2lzU3dpdGNoQ2FzZSwgUi5hbHdheXMoTGlzdC5vZihcInRlc3RcIiwgXCJjb25zZXF1ZW50XCIpKV0sIFtpc1N3aXRjaERlZmF1bHQsIFIuYWx3YXlzKExpc3Qub2YoXCJjb25zZXF1ZW50XCIpKV0sIFtpc1RlbXBsYXRlRWxlbWVudCwgUi5hbHdheXMoTGlzdC5vZihcInJhd1ZhbHVlXCIpKV0sIFtpc1N5bnRheFRlbXBsYXRlLCBSLmFsd2F5cyhMaXN0Lm9mKFwidGVtcGxhdGVcIikpXSwgW2lzVmFyaWFibGVEZWNsYXJhdGlvbiwgUi5hbHdheXMoTGlzdC5vZihcImtpbmRcIiwgXCJkZWNsYXJhdG9yc1wiKSldLCBbaXNWYXJpYWJsZURlY2xhcmF0b3IsIFIuYWx3YXlzKExpc3Qub2YoXCJiaW5kaW5nXCIsIFwiaW5pdFwiKSldLCBbaXNQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiwgUi5hbHdheXMoTGlzdC5vZihcImlubmVyXCIpKV0sIFtSLlQsIHR5cGVfODk3ID0+IGFzc2VydChmYWxzZSwgXCJNaXNzaW5nIGNhc2UgaW4gZmllbGRzOiBcIiArIHR5cGVfODk3LnR5cGUpXV0pO1xuIl19 \ No newline at end of file diff --git a/dist/token-expander.js b/dist/token-expander.js index 4d3f7c23..aa430f5e 100644 --- a/dist/token-expander.js +++ b/dist/token-expander.js @@ -54,166 +54,166 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var Just_890 = _ramdaFantasy.Maybe.Just; -var Nothing_891 = _ramdaFantasy.Maybe.Nothing; -var registerSyntax_892 = function registerSyntax_892(stx_897, context_898) { - var newBinding_899 = (0, _symbol.gensym)(stx_897.val()); - context_898.env.set(newBinding_899.toString(), new _transforms.VarBindingTransform(stx_897)); - context_898.bindings.add(stx_897, { binding: newBinding_899, phase: 0, skipDup: true }); +var Just_898 = _ramdaFantasy.Maybe.Just; +var Nothing_899 = _ramdaFantasy.Maybe.Nothing; +var registerSyntax_900 = function registerSyntax_900(stx_905, context_906) { + var newBinding_907 = (0, _symbol.gensym)(stx_905.val()); + context_906.env.set(newBinding_907.toString(), new _transforms.VarBindingTransform(stx_905)); + context_906.bindings.add(stx_905, { binding: newBinding_907, phase: 0, skipDup: true }); }; -var registerBindings_893 = _.cond([[_terms.isBindingIdentifier, function (_ref, context_900) { +var registerBindings_901 = _.cond([[_terms.isBindingIdentifier, function (_ref, context_908) { var name = _ref.name; - registerSyntax_892(name, context_900); -}], [_terms.isBindingPropertyIdentifier, function (_ref2, context_901) { + registerSyntax_900(name, context_908); +}], [_terms.isBindingPropertyIdentifier, function (_ref2, context_909) { var binding = _ref2.binding; - registerBindings_893(binding, context_901); -}], [_terms.isBindingPropertyProperty, function (_ref3, context_902) { + registerBindings_901(binding, context_909); +}], [_terms.isBindingPropertyProperty, function (_ref3, context_910) { var binding = _ref3.binding; - registerBindings_893(binding, context_902); -}], [_terms.isArrayBinding, function (_ref4, context_903) { + registerBindings_901(binding, context_910); +}], [_terms.isArrayBinding, function (_ref4, context_911) { var elements = _ref4.elements; var restElement = _ref4.restElement; if (restElement != null) { - registerBindings_893(restElement, context_903); + registerBindings_901(restElement, context_911); } - elements.forEach(function (el_904) { - if (el_904 != null) { - registerBindings_893(el_904, context_903); + elements.forEach(function (el_912) { + if (el_912 != null) { + registerBindings_901(el_912, context_911); } }); -}], [_terms.isObjectBinding, function (_ref5, context_905) { +}], [_terms.isObjectBinding, function (_ref5, context_913) { var properties = _ref5.properties; -}], [_.T, function (binding_906) { - return (0, _errors.assert)(false, "not implemented yet for: " + binding_906.type); +}], [_.T, function (binding_914) { + return (0, _errors.assert)(false, "not implemented yet for: " + binding_914.type); }]]); -var removeScope_894 = _.cond([[_terms.isBindingIdentifier, function (_ref6, scope_907) { +var removeScope_902 = _.cond([[_terms.isBindingIdentifier, function (_ref6, scope_915) { var name = _ref6.name; - return new _terms2.default("BindingIdentifier", { name: name.removeScope(scope_907) }); -}], [_terms.isArrayBinding, function (_ref7, scope_908) { + return new _terms2.default("BindingIdentifier", { name: name.removeScope(scope_915) }); +}], [_terms.isArrayBinding, function (_ref7, scope_916) { var elements = _ref7.elements; var restElement = _ref7.restElement; - return new _terms2.default("ArrayBinding", { elements: elements.map(function (el_909) { - return el_909 == null ? null : removeScope_894(el_909, scope_908); - }), restElement: restElement == null ? null : removeScope_894(restElement, scope_908) }); -}], [_terms.isBindingPropertyIdentifier, function (_ref8, scope_910) { + return new _terms2.default("ArrayBinding", { elements: elements.map(function (el_917) { + return el_917 == null ? null : removeScope_902(el_917, scope_916); + }), restElement: restElement == null ? null : removeScope_902(restElement, scope_916) }); +}], [_terms.isBindingPropertyIdentifier, function (_ref8, scope_918) { var binding = _ref8.binding; var init = _ref8.init; - return new _terms2.default("BindingPropertyIdentifier", { binding: removeScope_894(binding, scope_910), init: init }); -}], [_terms.isBindingPropertyProperty, function (_ref9, scope_911) { + return new _terms2.default("BindingPropertyIdentifier", { binding: removeScope_902(binding, scope_918), init: init }); +}], [_terms.isBindingPropertyProperty, function (_ref9, scope_919) { var binding = _ref9.binding; var name = _ref9.name; - return new _terms2.default("BindingPropertyProperty", { binding: removeScope_894(binding, scope_911), name: name }); -}], [_terms.isObjectBinding, function (_ref10, scope_912) { + return new _terms2.default("BindingPropertyProperty", { binding: removeScope_902(binding, scope_919), name: name }); +}], [_terms.isObjectBinding, function (_ref10, scope_920) { var properties = _ref10.properties; - return new _terms2.default("ObjectBinding", { properties: properties.map(function (prop_913) { - return removeScope_894(prop_913, scope_912); + return new _terms2.default("ObjectBinding", { properties: properties.map(function (prop_921) { + return removeScope_902(prop_921, scope_920); }) }); -}], [_.T, function (binding_914) { - return (0, _errors.assert)(false, "not implemented yet for: " + binding_914.type); +}], [_.T, function (binding_922) { + return (0, _errors.assert)(false, "not implemented yet for: " + binding_922.type); }]]); -function findNameInExports_895(name_915, exp_916) { - var foundNames_917 = exp_916.reduce(function (acc_918, e_919) { - if (e_919.declaration) { - return acc_918.concat(e_919.declaration.declarators.reduce(function (acc_920, decl_921) { - if (decl_921.binding.name.val() === name_915.val()) { - return acc_920.concat(decl_921.binding.name); +function findNameInExports_903(name_923, exp_924) { + var foundNames_925 = exp_924.reduce(function (acc_926, e_927) { + if (e_927.declaration) { + return acc_926.concat(e_927.declaration.declarators.reduce(function (acc_928, decl_929) { + if (decl_929.binding.name.val() === name_923.val()) { + return acc_928.concat(decl_929.binding.name); } - return acc_920; + return acc_928; }, (0, _immutable.List)())); } - return acc_918; + return acc_926; }, (0, _immutable.List)()); - (0, _errors.assert)(foundNames_917.size <= 1, "expecting no more than 1 matching name in exports"); - return foundNames_917.get(0); + (0, _errors.assert)(foundNames_925.size <= 1, "expecting no more than 1 matching name in exports"); + return foundNames_925.get(0); } -function bindImports_896(impTerm_922, exModule_923, context_924) { - var names_925 = []; - impTerm_922.namedImports.forEach(function (specifier_926) { - var name_927 = specifier_926.binding.name; - var exportName_928 = findNameInExports_895(name_927, exModule_923.exportEntries); - if (exportName_928 != null) { - var newBinding = (0, _symbol.gensym)(name_927.val()); - context_924.bindings.addForward(name_927, exportName_928, newBinding); - if (context_924.store.has(exportName_928.resolve())) { - names_925.push(name_927); +function bindImports_904(impTerm_930, exModule_931, context_932) { + var names_933 = []; + impTerm_930.namedImports.forEach(function (specifier_934) { + var name_935 = specifier_934.binding.name; + var exportName_936 = findNameInExports_903(name_935, exModule_931.exportEntries); + if (exportName_936 != null) { + var newBinding = (0, _symbol.gensym)(name_935.val()); + context_932.bindings.addForward(name_935, exportName_936, newBinding); + if (context_932.store.has(exportName_936.resolve())) { + names_933.push(name_935); } } }); - return (0, _immutable.List)(names_925); + return (0, _immutable.List)(names_933); } var TokenExpander = function () { - function TokenExpander(context_929) { + function TokenExpander(context_937) { _classCallCheck(this, TokenExpander); - this.context = context_929; + this.context = context_937; } _createClass(TokenExpander, [{ key: "expand", - value: function expand(stxl_930) { - var result_931 = (0, _immutable.List)(); - if (stxl_930.size === 0) { - return result_931; + value: function expand(stxl_938) { + var result_939 = (0, _immutable.List)(); + if (stxl_938.size === 0) { + return result_939; } - var prev_932 = (0, _immutable.List)(); - var enf_933 = new _enforester.Enforester(stxl_930, prev_932, this.context); - var self_934 = this; - while (!enf_933.done) { - var term = _.pipe(_.bind(enf_933.enforest, enf_933), _.cond([[_terms.isVariableDeclarationStatement, function (term_935) { - term_935.declaration.declarators = term_935.declaration.declarators.map(function (decl_936) { - return new _terms2.default("VariableDeclarator", { binding: removeScope_894(decl_936.binding, self_934.context.useScope), init: decl_936.init }); + var prev_940 = (0, _immutable.List)(); + var enf_941 = new _enforester.Enforester(stxl_938, prev_940, this.context); + var self_942 = this; + while (!enf_941.done) { + var term = _.pipe(_.bind(enf_941.enforest, enf_941), _.cond([[_terms.isVariableDeclarationStatement, function (term_943) { + term_943.declaration.declarators = term_943.declaration.declarators.map(function (decl_944) { + return new _terms2.default("VariableDeclarator", { binding: removeScope_902(decl_944.binding, self_942.context.useScope), init: decl_944.init }); }); - if ((0, _terms.isSyntaxDeclaration)(term_935.declaration)) { + if ((0, _terms.isSyntaxDeclaration)(term_943.declaration)) { (function () { var scope = (0, _scope.freshScope)("nonrec"); - term_935.declaration.declarators.forEach(function (decl_937) { - var name_938 = decl_937.binding.name; - var nameAdded_939 = name_938.addScope(scope); - var nameRemoved_940 = name_938.removeScope(self_934.context.currentScope[self_934.context.currentScope.length - 1]); - var newBinding_941 = (0, _symbol.gensym)(name_938.val()); - self_934.context.bindings.addForward(nameAdded_939, nameRemoved_940, newBinding_941); - decl_937.init = decl_937.init.addScope(scope, self_934.context.bindings); + term_943.declaration.declarators.forEach(function (decl_945) { + var name_946 = decl_945.binding.name; + var nameAdded_947 = name_946.addScope(scope); + var nameRemoved_948 = name_946.removeScope(self_942.context.currentScope[self_942.context.currentScope.length - 1]); + var newBinding_949 = (0, _symbol.gensym)(name_946.val()); + self_942.context.bindings.addForward(nameAdded_947, nameRemoved_948, newBinding_949); + decl_945.init = decl_945.init.addScope(scope, self_942.context.bindings); }); })(); } - if ((0, _terms.isSyntaxDeclaration)(term_935.declaration) || (0, _terms.isSyntaxrecDeclaration)(term_935.declaration)) { - term_935.declaration.declarators.forEach(function (decl_942) { - registerBindings_893(decl_942.binding, self_934.context); - (0, _loadSyntax2.default)(decl_942, self_934.context, self_934.context.env); + if ((0, _terms.isSyntaxDeclaration)(term_943.declaration) || (0, _terms.isSyntaxrecDeclaration)(term_943.declaration)) { + term_943.declaration.declarators.forEach(function (decl_950) { + registerBindings_901(decl_950.binding, self_942.context); + (0, _loadSyntax2.default)(decl_950, self_942.context, self_942.context.env); }); - return Nothing_891(); + return Nothing_899(); } else { - term_935.declaration.declarators.forEach(function (decl_943) { - return registerBindings_893(decl_943.binding, self_934.context); + term_943.declaration.declarators.forEach(function (decl_951) { + return registerBindings_901(decl_951.binding, self_942.context); }); } - return Just_890(term_935); - }], [_terms.isFunctionWithName, function (term_944) { - term_944.name = removeScope_894(term_944.name, self_934.context.useScope); - registerBindings_893(term_944.name, self_934.context); - return Just_890(term_944); - }], [_terms.isImport, function (term_945) { - var mod_946 = self_934.context.modules.load(term_945.moduleSpecifier.val(), self_934.context); - if (term_945.forSyntax) { + return Just_898(term_943); + }], [_terms.isFunctionWithName, function (term_952) { + term_952.name = removeScope_902(term_952.name, self_942.context.useScope); + registerBindings_901(term_952.name, self_942.context); + return Just_898(term_952); + }], [_terms.isImport, function (term_953) { + var mod_954 = self_942.context.modules.load(term_953.moduleSpecifier.val(), self_942.context); + if (term_953.forSyntax) { console.log("import for syntax is not implemented yet"); } else { - mod_946.visit(self_934.context); + mod_954.visit(self_942.context); } - var boundNames_947 = bindImports_896(term_945, mod_946, self_934.context); - if (boundNames_947.size === 0) { - return Just_890(term_945); + var boundNames_955 = bindImports_904(term_953, mod_954, self_942.context); + if (boundNames_955.size === 0) { + return Just_898(term_953); } - return Nothing_891(); - }], [_terms.isEOF, Nothing_891], [_.T, Just_890]]), _ramdaFantasy.Maybe.maybe((0, _immutable.List)(), _.identity))(); - result_931 = result_931.concat(term); + return Nothing_899(); + }], [_terms.isEOF, Nothing_899], [_.T, Just_898]]), _ramdaFantasy.Maybe.maybe((0, _immutable.List)(), _.identity))(); + result_939 = result_939.concat(term); } - return result_931; + return result_939; } }]); @@ -221,4 +221,4 @@ var TokenExpander = function () { }(); exports.default = TokenExpander; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3Rva2VuLWV4cGFuZGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7SUFBYSxDOztBQUNiOzs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7QUFDQSxJQUFNLFdBQVcsb0JBQU0sSUFBdkI7QUFDQSxJQUFNLGNBQWMsb0JBQU0sT0FBMUI7QUFDQSxJQUFNLHFCQUFxQixTQUFyQixrQkFBcUIsQ0FBQyxPQUFELEVBQVUsV0FBVixFQUEwQjtBQUNuRCxNQUFJLGlCQUFpQixvQkFBTyxRQUFRLEdBQVIsRUFBUCxDQUFyQjtBQUNBLGNBQVksR0FBWixDQUFnQixHQUFoQixDQUFvQixlQUFlLFFBQWYsRUFBcEIsRUFBK0Msb0NBQXdCLE9BQXhCLENBQS9DO0FBQ0EsY0FBWSxRQUFaLENBQXFCLEdBQXJCLENBQXlCLE9BQXpCLEVBQWtDLEVBQUMsU0FBUyxjQUFWLEVBQTBCLE9BQU8sQ0FBakMsRUFBb0MsU0FBUyxJQUE3QyxFQUFsQztBQUNELENBSkQ7QUFLQSxJQUFJLHVCQUF1QixFQUFFLElBQUYsQ0FBTyxDQUFDLDZCQUFzQixnQkFBUyxXQUFULEVBQXlCO0FBQUEsTUFBdkIsSUFBdUIsUUFBdkIsSUFBdUI7O0FBQ2hGLHFCQUFtQixJQUFuQixFQUF5QixXQUF6QjtBQUNELENBRmtDLENBQUQsRUFFOUIscUNBQThCLGlCQUFZLFdBQVosRUFBNEI7QUFBQSxNQUExQixPQUEwQixTQUExQixPQUEwQjs7QUFDNUQsdUJBQXFCLE9BQXJCLEVBQThCLFdBQTlCO0FBQ0QsQ0FGRyxDQUY4QixFQUk5QixtQ0FBNEIsaUJBQVksV0FBWixFQUE0QjtBQUFBLE1BQTFCLE9BQTBCLFNBQTFCLE9BQTBCOztBQUMxRCx1QkFBcUIsT0FBckIsRUFBOEIsV0FBOUI7QUFDRCxDQUZHLENBSjhCLEVBTTlCLHdCQUFpQixp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QUE4QixTQUFTLGVBQVQsQ0FBeUIsR0FBekIsRUFBOUIsRUFBOEQsU0FBUyxPQUF2RSxDQUFkO0FBQ0EsY0FBSSxTQUFTLFNBQWIsRUFBd0I7QUFDdEIsb0JBQVEsR0FBUixDQUFZLDBDQUFaO0FBQ0QsV0FGRCxNQUVPO0FBQ0wsb0JBQVEsS0FBUixDQUFjLFNBQVMsT0FBdkI7QUFDRDtBQUNELGNBQUksaUJBQWlCLGdCQUFnQixRQUFoQixFQUEwQixPQUExQixFQUFtQyxTQUFTLE9BQTVDLENBQXJCO0FBQ0EsY0FBSSxlQUFlLElBQWYsS0FBd0IsQ0FBNUIsRUFBK0I7QUFDN0IsbUJBQU8sU0FBUyxRQUFULENBQVA7QUFDRDtBQUNELGlCQUFPLGFBQVA7QUFDRCxTQVpHLENBN0J3RCxFQXlDeEQsZUFBUSxXQUFSLENBekN3RCxFQXlDbEMsQ0FBQyxFQUFFLENBQUgsRUFBTSxRQUFOLENBekNrQyxDQUFQLENBQTFDLEVBeUNrQyxvQkFBTSxLQUFOLENBQVksc0JBQVosRUFBb0IsRUFBRSxRQUF0QixDQXpDbEMsR0FBWDtBQTBDQSxxQkFBYSxXQUFXLE1BQVgsQ0FBa0IsSUFBbEIsQ0FBYjtBQUNEO0FBQ0QsYUFBTyxVQUFQO0FBQ0Q7Ozs7OztrQkExRGtCLGEiLCJmaWxlIjoidG9rZW4tZXhwYW5kZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xpc3R9IGZyb20gXCJpbW11dGFibGVcIjtcbmltcG9ydCB7ZW5mb3Jlc3RFeHByLCBFbmZvcmVzdGVyfSBmcm9tIFwiLi9lbmZvcmVzdGVyXCI7XG5pbXBvcnQgVGVybUV4cGFuZGVyIGZyb20gXCIuL3Rlcm0tZXhwYW5kZXIuanNcIjtcbmltcG9ydCBCaW5kaW5nTWFwIGZyb20gXCIuL2JpbmRpbmctbWFwLmpzXCI7XG5pbXBvcnQgRW52IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IFJlYWRlciBmcm9tIFwiLi9zaGlmdC1yZWFkZXJcIjtcbmltcG9ydCAgKiBhcyBfIGZyb20gXCJyYW1kYVwiO1xuaW1wb3J0IFRlcm0sIHtpc0VPRiwgaXNCaW5kaW5nSWRlbnRpZmllciwgaXNCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eSwgaXNCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyLCBpc09iamVjdEJpbmRpbmcsIGlzQXJyYXlCaW5kaW5nLCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIGlzRnVuY3Rpb25FeHByZXNzaW9uLCBpc0Z1bmN0aW9uVGVybSwgaXNGdW5jdGlvbldpdGhOYW1lLCBpc1N5bnRheERlY2xhcmF0aW9uLCBpc1N5bnRheHJlY0RlY2xhcmF0aW9uLCBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sIGlzVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCwgaXNJbXBvcnQsIGlzRXhwb3J0fSBmcm9tIFwiLi90ZXJtc1wiO1xuaW1wb3J0IHtNYXliZX0gZnJvbSBcInJhbWRhLWZhbnRhc3lcIjtcbmltcG9ydCB7Z2Vuc3ltfSBmcm9tIFwiLi9zeW1ib2xcIjtcbmltcG9ydCB7VmFyQmluZGluZ1RyYW5zZm9ybSwgQ29tcGlsZXRpbWVUcmFuc2Zvcm19IGZyb20gXCIuL3RyYW5zZm9ybXNcIjtcbmltcG9ydCB7ZXhwZWN0LCBhc3NlcnR9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IGxvYWRTeW50YXggZnJvbSBcIi4vbG9hZC1zeW50YXhcIjtcbmltcG9ydCB7U2NvcGUsIGZyZXNoU2NvcGV9IGZyb20gXCIuL3Njb3BlXCI7XG5jb25zdCBKdXN0Xzg5MCA9IE1heWJlLkp1c3Q7XG5jb25zdCBOb3RoaW5nXzg5MSA9IE1heWJlLk5vdGhpbmc7XG5jb25zdCByZWdpc3RlclN5bnRheF84OTIgPSAoc3R4Xzg5NywgY29udGV4dF84OTgpID0+IHtcbiAgbGV0IG5ld0JpbmRpbmdfODk5ID0gZ2Vuc3ltKHN0eF84OTcudmFsKCkpO1xuICBjb250ZXh0Xzg5OC5lbnYuc2V0KG5ld0JpbmRpbmdfODk5LnRvU3RyaW5nKCksIG5ldyBWYXJCaW5kaW5nVHJhbnNmb3JtKHN0eF84OTcpKTtcbiAgY29udGV4dF84OTguYmluZGluZ3MuYWRkKHN0eF84OTcsIHtiaW5kaW5nOiBuZXdCaW5kaW5nXzg5OSwgcGhhc2U6IDAsIHNraXBEdXA6IHRydWV9KTtcbn07XG5sZXQgcmVnaXN0ZXJCaW5kaW5nc184OTMgPSBfLmNvbmQoW1tpc0JpbmRpbmdJZGVudGlmaWVyLCAoe25hbWV9LCBjb250ZXh0XzkwMCkgPT4ge1xuICByZWdpc3RlclN5bnRheF84OTIobmFtZSwgY29udGV4dF85MDApO1xufV0sIFtpc0JpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXIsICh7YmluZGluZ30sIGNvbnRleHRfOTAxKSA9PiB7XG4gIHJlZ2lzdGVyQmluZGluZ3NfODkzKGJpbmRpbmcsIGNvbnRleHRfOTAxKTtcbn1dLCBbaXNCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eSwgKHtiaW5kaW5nfSwgY29udGV4dF85MDIpID0+IHtcbiAgcmVnaXN0ZXJCaW5kaW5nc184OTMoYmluZGluZywgY29udGV4dF85MDIpO1xufV0sIFtpc0FycmF5QmluZGluZywgKHtlbGVtZW50cywgcmVzdEVsZW1lbnR9LCBjb250ZXh0XzkwMykgPT4ge1xuICBpZiAocmVzdEVsZW1lbnQgIT0gbnVsbCkge1xuICAgIHJlZ2lzdGVyQmluZGluZ3NfODkzKHJlc3RFbGVtZW50LCBjb250ZXh0XzkwMyk7XG4gIH1cbiAgZWxlbWVudHMuZm9yRWFjaChlbF85MDQgPT4ge1xuICAgIGlmIChlbF85MDQgIT0gbnVsbCkge1xuICAgICAgcmVnaXN0ZXJCaW5kaW5nc184OTMoZWxfOTA0LCBjb250ZXh0XzkwMyk7XG4gICAgfVxuICB9KTtcbn1dLCBbaXNPYmplY3RCaW5kaW5nLCAoe3Byb3BlcnRpZXN9LCBjb250ZXh0XzkwNSkgPT4ge31dLCBbXy5ULCBiaW5kaW5nXzkwNiA9PiBhc3NlcnQoZmFsc2UsIFwibm90IGltcGxlbWVudGVkIHlldCBmb3I6IFwiICsgYmluZGluZ185MDYudHlwZSldXSk7XG5sZXQgcmVtb3ZlU2NvcGVfODk0ID0gXy5jb25kKFtbaXNCaW5kaW5nSWRlbnRpZmllciwgKHtuYW1lfSwgc2NvcGVfOTA3KSA9PiBuZXcgVGVybShcIkJpbmRpbmdJZGVudGlmaWVyXCIsIHtuYW1lOiBuYW1lLnJlbW92ZVNjb3BlKHNjb3BlXzkwNyl9KV0sIFtpc0FycmF5QmluZGluZywgKHtlbGVtZW50cywgcmVzdEVsZW1lbnR9LCBzY29wZV85MDgpID0+IHtcbiAgcmV0dXJuIG5ldyBUZXJtKFwiQXJyYXlCaW5kaW5nXCIsIHtlbGVtZW50czogZWxlbWVudHMubWFwKGVsXzkwOSA9PiBlbF85MDkgPT0gbnVsbCA/IG51bGwgOiByZW1vdmVTY29wZV84OTQoZWxfOTA5LCBzY29wZV85MDgpKSwgcmVzdEVsZW1lbnQ6IHJlc3RFbGVtZW50ID09IG51bGwgPyBudWxsIDogcmVtb3ZlU2NvcGVfODk0KHJlc3RFbGVtZW50LCBzY29wZV85MDgpfSk7XG59XSwgW2lzQmluZGluZ1Byb3BlcnR5SWRlbnRpZmllciwgKHtiaW5kaW5nLCBpbml0fSwgc2NvcGVfOTEwKSA9PiBuZXcgVGVybShcIkJpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXJcIiwge2JpbmRpbmc6IHJlbW92ZVNjb3BlXzg5NChiaW5kaW5nLCBzY29wZV85MTApLCBpbml0OiBpbml0fSldLCBbaXNCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eSwgKHtiaW5kaW5nLCBuYW1lfSwgc2NvcGVfOTExKSA9PiBuZXcgVGVybShcIkJpbmRpbmdQcm9wZXJ0eVByb3BlcnR5XCIsIHtiaW5kaW5nOiByZW1vdmVTY29wZV84OTQoYmluZGluZywgc2NvcGVfOTExKSwgbmFtZTogbmFtZX0pXSwgW2lzT2JqZWN0QmluZGluZywgKHtwcm9wZXJ0aWVzfSwgc2NvcGVfOTEyKSA9PiBuZXcgVGVybShcIk9iamVjdEJpbmRpbmdcIiwge3Byb3BlcnRpZXM6IHByb3BlcnRpZXMubWFwKHByb3BfOTEzID0+IHJlbW92ZVNjb3BlXzg5NChwcm9wXzkxMywgc2NvcGVfOTEyKSl9KV0sIFtfLlQsIGJpbmRpbmdfOTE0ID0+IGFzc2VydChmYWxzZSwgXCJub3QgaW1wbGVtZW50ZWQgeWV0IGZvcjogXCIgKyBiaW5kaW5nXzkxNC50eXBlKV1dKTtcbmZ1bmN0aW9uIGZpbmROYW1lSW5FeHBvcnRzXzg5NShuYW1lXzkxNSwgZXhwXzkxNikge1xuICBsZXQgZm91bmROYW1lc185MTcgPSBleHBfOTE2LnJlZHVjZSgoYWNjXzkxOCwgZV85MTkpID0+IHtcbiAgICBpZiAoZV85MTkuZGVjbGFyYXRpb24pIHtcbiAgICAgIHJldHVybiBhY2NfOTE4LmNvbmNhdChlXzkxOS5kZWNsYXJhdGlvbi5kZWNsYXJhdG9ycy5yZWR1Y2UoKGFjY185MjAsIGRlY2xfOTIxKSA9PiB7XG4gICAgICAgIGlmIChkZWNsXzkyMS5iaW5kaW5nLm5hbWUudmFsKCkgPT09IG5hbWVfOTE1LnZhbCgpKSB7XG4gICAgICAgICAgcmV0dXJuIGFjY185MjAuY29uY2F0KGRlY2xfOTIxLmJpbmRpbmcubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY185MjA7XG4gICAgICB9LCBMaXN0KCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY185MTg7XG4gIH0sIExpc3QoKSk7XG4gIGFzc2VydChmb3VuZE5hbWVzXzkxNy5zaXplIDw9IDEsIFwiZXhwZWN0aW5nIG5vIG1vcmUgdGhhbiAxIG1hdGNoaW5nIG5hbWUgaW4gZXhwb3J0c1wiKTtcbiAgcmV0dXJuIGZvdW5kTmFtZXNfOTE3LmdldCgwKTtcbn1cbmZ1bmN0aW9uIGJpbmRJbXBvcnRzXzg5NihpbXBUZXJtXzkyMiwgZXhNb2R1bGVfOTIzLCBjb250ZXh0XzkyNCkge1xuICBsZXQgbmFtZXNfOTI1ID0gW107XG4gIGltcFRlcm1fOTIyLm5hbWVkSW1wb3J0cy5mb3JFYWNoKHNwZWNpZmllcl85MjYgPT4ge1xuICAgIGxldCBuYW1lXzkyNyA9IHNwZWNpZmllcl85MjYuYmluZGluZy5uYW1lO1xuICAgIGxldCBleHBvcnROYW1lXzkyOCA9IGZpbmROYW1lSW5FeHBvcnRzXzg5NShuYW1lXzkyNywgZXhNb2R1bGVfOTIzLmV4cG9ydEVudHJpZXMpO1xuICAgIGlmIChleHBvcnROYW1lXzkyOCAhPSBudWxsKSB7XG4gICAgICBsZXQgbmV3QmluZGluZyA9IGdlbnN5bShuYW1lXzkyNy52YWwoKSk7XG4gICAgICBjb250ZXh0XzkyNC5iaW5kaW5ncy5hZGRGb3J3YXJkKG5hbWVfOTI3LCBleHBvcnROYW1lXzkyOCwgbmV3QmluZGluZyk7XG4gICAgICBpZiAoY29udGV4dF85MjQuc3RvcmUuaGFzKGV4cG9ydE5hbWVfOTI4LnJlc29sdmUoKSkpIHtcbiAgICAgICAgbmFtZXNfOTI1LnB1c2gobmFtZV85MjcpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBMaXN0KG5hbWVzXzkyNSk7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlbkV4cGFuZGVyIHtcbiAgY29uc3RydWN0b3IoY29udGV4dF85MjkpIHtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XzkyOTtcbiAgfVxuICBleHBhbmQoc3R4bF85MzApIHtcbiAgICBsZXQgcmVzdWx0XzkzMSA9IExpc3QoKTtcbiAgICBpZiAoc3R4bF85MzAuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdF85MzE7XG4gICAgfVxuICAgIGxldCBwcmV2XzkzMiA9IExpc3QoKTtcbiAgICBsZXQgZW5mXzkzMyA9IG5ldyBFbmZvcmVzdGVyKHN0eGxfOTMwLCBwcmV2XzkzMiwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgc2VsZl85MzQgPSB0aGlzO1xuICAgIHdoaWxlICghZW5mXzkzMy5kb25lKSB7XG4gICAgICBsZXQgdGVybSA9IF8ucGlwZShfLmJpbmQoZW5mXzkzMy5lbmZvcmVzdCwgZW5mXzkzMyksIF8uY29uZChbW2lzVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCwgdGVybV85MzUgPT4ge1xuICAgICAgICB0ZXJtXzkzNS5kZWNsYXJhdGlvbi5kZWNsYXJhdG9ycyA9IHRlcm1fOTM1LmRlY2xhcmF0aW9uLmRlY2xhcmF0b3JzLm1hcChkZWNsXzkzNiA9PiB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiVmFyaWFibGVEZWNsYXJhdG9yXCIsIHtiaW5kaW5nOiByZW1vdmVTY29wZV84OTQoZGVjbF85MzYuYmluZGluZywgc2VsZl85MzQuY29udGV4dC51c2VTY29wZSksIGluaXQ6IGRlY2xfOTM2LmluaXR9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpc1N5bnRheERlY2xhcmF0aW9uKHRlcm1fOTM1LmRlY2xhcmF0aW9uKSkge1xuICAgICAgICAgIGxldCBzY29wZSA9IGZyZXNoU2NvcGUoXCJub25yZWNcIik7XG4gICAgICAgICAgdGVybV85MzUuZGVjbGFyYXRpb24uZGVjbGFyYXRvcnMuZm9yRWFjaChkZWNsXzkzNyA9PiB7XG4gICAgICAgICAgICBsZXQgbmFtZV85MzggPSBkZWNsXzkzNy5iaW5kaW5nLm5hbWU7XG4gICAgICAgICAgICBsZXQgbmFtZUFkZGVkXzkzOSA9IG5hbWVfOTM4LmFkZFNjb3BlKHNjb3BlKTtcbiAgICAgICAgICAgIGxldCBuYW1lUmVtb3ZlZF85NDAgPSBuYW1lXzkzOC5yZW1vdmVTY29wZShzZWxmXzkzNC5jb250ZXh0LmN1cnJlbnRTY29wZVtzZWxmXzkzNC5jb250ZXh0LmN1cnJlbnRTY29wZS5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICBsZXQgbmV3QmluZGluZ185NDEgPSBnZW5zeW0obmFtZV85MzgudmFsKCkpO1xuICAgICAgICAgICAgc2VsZl85MzQuY29udGV4dC5iaW5kaW5ncy5hZGRGb3J3YXJkKG5hbWVBZGRlZF85MzksIG5hbWVSZW1vdmVkXzk0MCwgbmV3QmluZGluZ185NDEpO1xuICAgICAgICAgICAgZGVjbF85MzcuaW5pdCA9IGRlY2xfOTM3LmluaXQuYWRkU2NvcGUoc2NvcGUsIHNlbGZfOTM0LmNvbnRleHQuYmluZGluZ3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N5bnRheERlY2xhcmF0aW9uKHRlcm1fOTM1LmRlY2xhcmF0aW9uKSB8fCBpc1N5bnRheHJlY0RlY2xhcmF0aW9uKHRlcm1fOTM1LmRlY2xhcmF0aW9uKSkge1xuICAgICAgICAgIHRlcm1fOTM1LmRlY2xhcmF0aW9uLmRlY2xhcmF0b3JzLmZvckVhY2goZGVjbF85NDIgPT4ge1xuICAgICAgICAgICAgcmVnaXN0ZXJCaW5kaW5nc184OTMoZGVjbF85NDIuYmluZGluZywgc2VsZl85MzQuY29udGV4dCk7XG4gICAgICAgICAgICBsb2FkU3ludGF4KGRlY2xfOTQyLCBzZWxmXzkzNC5jb250ZXh0LCBzZWxmXzkzNC5jb250ZXh0LmVudik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIE5vdGhpbmdfODkxKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGVybV85MzUuZGVjbGFyYXRpb24uZGVjbGFyYXRvcnMuZm9yRWFjaChkZWNsXzk0MyA9PiByZWdpc3RlckJpbmRpbmdzXzg5MyhkZWNsXzk0My5iaW5kaW5nLCBzZWxmXzkzNC5jb250ZXh0KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEp1c3RfODkwKHRlcm1fOTM1KTtcbiAgICAgIH1dLCBbaXNGdW5jdGlvbldpdGhOYW1lLCB0ZXJtXzk0NCA9PiB7XG4gICAgICAgIHRlcm1fOTQ0Lm5hbWUgPSByZW1vdmVTY29wZV84OTQodGVybV85NDQubmFtZSwgc2VsZl85MzQuY29udGV4dC51c2VTY29wZSk7XG4gICAgICAgIHJlZ2lzdGVyQmluZGluZ3NfODkzKHRlcm1fOTQ0Lm5hbWUsIHNlbGZfOTM0LmNvbnRleHQpO1xuICAgICAgICByZXR1cm4gSnVzdF84OTAodGVybV85NDQpO1xuICAgICAgfV0sIFtpc0ltcG9ydCwgdGVybV85NDUgPT4ge1xuICAgICAgICBsZXQgbW9kXzk0NiA9IHNlbGZfOTM0LmNvbnRleHQubW9kdWxlcy5sb2FkKHRlcm1fOTQ1Lm1vZHVsZVNwZWNpZmllci52YWwoKSwgc2VsZl85MzQuY29udGV4dCk7XG4gICAgICAgIGlmICh0ZXJtXzk0NS5mb3JTeW50YXgpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImltcG9ydCBmb3Igc3ludGF4IGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbW9kXzk0Ni52aXNpdChzZWxmXzkzNC5jb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYm91bmROYW1lc185NDcgPSBiaW5kSW1wb3J0c184OTYodGVybV85NDUsIG1vZF85NDYsIHNlbGZfOTM0LmNvbnRleHQpO1xuICAgICAgICBpZiAoYm91bmROYW1lc185NDcuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBKdXN0Xzg5MCh0ZXJtXzk0NSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE5vdGhpbmdfODkxKCk7XG4gICAgICB9XSwgW2lzRU9GLCBOb3RoaW5nXzg5MV0sIFtfLlQsIEp1c3RfODkwXV0pLCBNYXliZS5tYXliZShMaXN0KCksIF8uaWRlbnRpdHkpKSgpO1xuICAgICAgcmVzdWx0XzkzMSA9IHJlc3VsdF85MzEuY29uY2F0KHRlcm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XzkzMTtcbiAgfVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3Rva2VuLWV4cGFuZGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7SUFBYSxDOztBQUNiOzs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7QUFDQSxJQUFNLFdBQVcsb0JBQU0sSUFBdkI7QUFDQSxJQUFNLGNBQWMsb0JBQU0sT0FBMUI7QUFDQSxJQUFNLHFCQUFxQixTQUFyQixrQkFBcUIsQ0FBQyxPQUFELEVBQVUsV0FBVixFQUEwQjtBQUNuRCxNQUFJLGlCQUFpQixvQkFBTyxRQUFRLEdBQVIsRUFBUCxDQUFyQjtBQUNBLGNBQVksR0FBWixDQUFnQixHQUFoQixDQUFvQixlQUFlLFFBQWYsRUFBcEIsRUFBK0Msb0NBQXdCLE9BQXhCLENBQS9DO0FBQ0EsY0FBWSxRQUFaLENBQXFCLEdBQXJCLENBQXlCLE9BQXpCLEVBQWtDLEVBQUMsU0FBUyxjQUFWLEVBQTBCLE9BQU8sQ0FBakMsRUFBb0MsU0FBUyxJQUE3QyxFQUFsQztBQUNELENBSkQ7QUFLQSxJQUFJLHVCQUF1QixFQUFFLElBQUYsQ0FBTyxDQUFDLDZCQUFzQixnQkFBUyxXQUFULEVBQXlCO0FBQUEsTUFBdkIsSUFBdUIsUUFBdkIsSUFBdUI7O0FBQ2hGLHFCQUFtQixJQUFuQixFQUF5QixXQUF6QjtBQUNELENBRmtDLENBQUQsRUFFOUIscUNBQThCLGlCQUFZLFdBQVosRUFBNEI7QUFBQSxNQUExQixPQUEwQixTQUExQixPQUEwQjs7QUFDNUQsdUJBQXFCLE9BQXJCLEVBQThCLFdBQTlCO0FBQ0QsQ0FGRyxDQUY4QixFQUk5QixtQ0FBNEIsaUJBQVksV0FBWixFQUE0QjtBQUFBLE1BQTFCLE9BQTBCLFNBQTFCLE9BQTBCOztBQUMxRCx1QkFBcUIsT0FBckIsRUFBOEIsV0FBOUI7QUFDRCxDQUZHLENBSjhCLEVBTTlCLHdCQUFpQixp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QUE4QixTQUFTLGVBQVQsQ0FBeUIsR0FBekIsRUFBOUIsRUFBOEQsU0FBUyxPQUF2RSxDQUFkO0FBQ0EsY0FBSSxTQUFTLFNBQWIsRUFBd0I7QUFDdEIsb0JBQVEsR0FBUixDQUFZLDBDQUFaO0FBQ0QsV0FGRCxNQUVPO0FBQ0wsb0JBQVEsS0FBUixDQUFjLFNBQVMsT0FBdkI7QUFDRDtBQUNELGNBQUksaUJBQWlCLGdCQUFnQixRQUFoQixFQUEwQixPQUExQixFQUFtQyxTQUFTLE9BQTVDLENBQXJCO0FBQ0EsY0FBSSxlQUFlLElBQWYsS0FBd0IsQ0FBNUIsRUFBK0I7QUFDN0IsbUJBQU8sU0FBUyxRQUFULENBQVA7QUFDRDtBQUNELGlCQUFPLGFBQVA7QUFDRCxTQVpHLENBN0J3RCxFQXlDeEQsZUFBUSxXQUFSLENBekN3RCxFQXlDbEMsQ0FBQyxFQUFFLENBQUgsRUFBTSxRQUFOLENBekNrQyxDQUFQLENBQTFDLEVBeUNrQyxvQkFBTSxLQUFOLENBQVksc0JBQVosRUFBb0IsRUFBRSxRQUF0QixDQXpDbEMsR0FBWDtBQTBDQSxxQkFBYSxXQUFXLE1BQVgsQ0FBa0IsSUFBbEIsQ0FBYjtBQUNEO0FBQ0QsYUFBTyxVQUFQO0FBQ0Q7Ozs7OztrQkExRGtCLGEiLCJmaWxlIjoidG9rZW4tZXhwYW5kZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xpc3R9IGZyb20gXCJpbW11dGFibGVcIjtcbmltcG9ydCB7ZW5mb3Jlc3RFeHByLCBFbmZvcmVzdGVyfSBmcm9tIFwiLi9lbmZvcmVzdGVyXCI7XG5pbXBvcnQgVGVybUV4cGFuZGVyIGZyb20gXCIuL3Rlcm0tZXhwYW5kZXIuanNcIjtcbmltcG9ydCBCaW5kaW5nTWFwIGZyb20gXCIuL2JpbmRpbmctbWFwLmpzXCI7XG5pbXBvcnQgRW52IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IFJlYWRlciBmcm9tIFwiLi9zaGlmdC1yZWFkZXJcIjtcbmltcG9ydCAgKiBhcyBfIGZyb20gXCJyYW1kYVwiO1xuaW1wb3J0IFRlcm0sIHtpc0VPRiwgaXNCaW5kaW5nSWRlbnRpZmllciwgaXNCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eSwgaXNCaW5kaW5nUHJvcGVydHlJZGVudGlmaWVyLCBpc09iamVjdEJpbmRpbmcsIGlzQXJyYXlCaW5kaW5nLCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIGlzRnVuY3Rpb25FeHByZXNzaW9uLCBpc0Z1bmN0aW9uVGVybSwgaXNGdW5jdGlvbldpdGhOYW1lLCBpc1N5bnRheERlY2xhcmF0aW9uLCBpc1N5bnRheHJlY0RlY2xhcmF0aW9uLCBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sIGlzVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCwgaXNJbXBvcnQsIGlzRXhwb3J0fSBmcm9tIFwiLi90ZXJtc1wiO1xuaW1wb3J0IHtNYXliZX0gZnJvbSBcInJhbWRhLWZhbnRhc3lcIjtcbmltcG9ydCB7Z2Vuc3ltfSBmcm9tIFwiLi9zeW1ib2xcIjtcbmltcG9ydCB7VmFyQmluZGluZ1RyYW5zZm9ybSwgQ29tcGlsZXRpbWVUcmFuc2Zvcm19IGZyb20gXCIuL3RyYW5zZm9ybXNcIjtcbmltcG9ydCB7ZXhwZWN0LCBhc3NlcnR9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IGxvYWRTeW50YXggZnJvbSBcIi4vbG9hZC1zeW50YXhcIjtcbmltcG9ydCB7U2NvcGUsIGZyZXNoU2NvcGV9IGZyb20gXCIuL3Njb3BlXCI7XG5jb25zdCBKdXN0Xzg5OCA9IE1heWJlLkp1c3Q7XG5jb25zdCBOb3RoaW5nXzg5OSA9IE1heWJlLk5vdGhpbmc7XG5jb25zdCByZWdpc3RlclN5bnRheF85MDAgPSAoc3R4XzkwNSwgY29udGV4dF85MDYpID0+IHtcbiAgbGV0IG5ld0JpbmRpbmdfOTA3ID0gZ2Vuc3ltKHN0eF85MDUudmFsKCkpO1xuICBjb250ZXh0XzkwNi5lbnYuc2V0KG5ld0JpbmRpbmdfOTA3LnRvU3RyaW5nKCksIG5ldyBWYXJCaW5kaW5nVHJhbnNmb3JtKHN0eF85MDUpKTtcbiAgY29udGV4dF85MDYuYmluZGluZ3MuYWRkKHN0eF85MDUsIHtiaW5kaW5nOiBuZXdCaW5kaW5nXzkwNywgcGhhc2U6IDAsIHNraXBEdXA6IHRydWV9KTtcbn07XG5sZXQgcmVnaXN0ZXJCaW5kaW5nc185MDEgPSBfLmNvbmQoW1tpc0JpbmRpbmdJZGVudGlmaWVyLCAoe25hbWV9LCBjb250ZXh0XzkwOCkgPT4ge1xuICByZWdpc3RlclN5bnRheF85MDAobmFtZSwgY29udGV4dF85MDgpO1xufV0sIFtpc0JpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXIsICh7YmluZGluZ30sIGNvbnRleHRfOTA5KSA9PiB7XG4gIHJlZ2lzdGVyQmluZGluZ3NfOTAxKGJpbmRpbmcsIGNvbnRleHRfOTA5KTtcbn1dLCBbaXNCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eSwgKHtiaW5kaW5nfSwgY29udGV4dF85MTApID0+IHtcbiAgcmVnaXN0ZXJCaW5kaW5nc185MDEoYmluZGluZywgY29udGV4dF85MTApO1xufV0sIFtpc0FycmF5QmluZGluZywgKHtlbGVtZW50cywgcmVzdEVsZW1lbnR9LCBjb250ZXh0XzkxMSkgPT4ge1xuICBpZiAocmVzdEVsZW1lbnQgIT0gbnVsbCkge1xuICAgIHJlZ2lzdGVyQmluZGluZ3NfOTAxKHJlc3RFbGVtZW50LCBjb250ZXh0XzkxMSk7XG4gIH1cbiAgZWxlbWVudHMuZm9yRWFjaChlbF85MTIgPT4ge1xuICAgIGlmIChlbF85MTIgIT0gbnVsbCkge1xuICAgICAgcmVnaXN0ZXJCaW5kaW5nc185MDEoZWxfOTEyLCBjb250ZXh0XzkxMSk7XG4gICAgfVxuICB9KTtcbn1dLCBbaXNPYmplY3RCaW5kaW5nLCAoe3Byb3BlcnRpZXN9LCBjb250ZXh0XzkxMykgPT4ge31dLCBbXy5ULCBiaW5kaW5nXzkxNCA9PiBhc3NlcnQoZmFsc2UsIFwibm90IGltcGxlbWVudGVkIHlldCBmb3I6IFwiICsgYmluZGluZ185MTQudHlwZSldXSk7XG5sZXQgcmVtb3ZlU2NvcGVfOTAyID0gXy5jb25kKFtbaXNCaW5kaW5nSWRlbnRpZmllciwgKHtuYW1lfSwgc2NvcGVfOTE1KSA9PiBuZXcgVGVybShcIkJpbmRpbmdJZGVudGlmaWVyXCIsIHtuYW1lOiBuYW1lLnJlbW92ZVNjb3BlKHNjb3BlXzkxNSl9KV0sIFtpc0FycmF5QmluZGluZywgKHtlbGVtZW50cywgcmVzdEVsZW1lbnR9LCBzY29wZV85MTYpID0+IHtcbiAgcmV0dXJuIG5ldyBUZXJtKFwiQXJyYXlCaW5kaW5nXCIsIHtlbGVtZW50czogZWxlbWVudHMubWFwKGVsXzkxNyA9PiBlbF85MTcgPT0gbnVsbCA/IG51bGwgOiByZW1vdmVTY29wZV85MDIoZWxfOTE3LCBzY29wZV85MTYpKSwgcmVzdEVsZW1lbnQ6IHJlc3RFbGVtZW50ID09IG51bGwgPyBudWxsIDogcmVtb3ZlU2NvcGVfOTAyKHJlc3RFbGVtZW50LCBzY29wZV85MTYpfSk7XG59XSwgW2lzQmluZGluZ1Byb3BlcnR5SWRlbnRpZmllciwgKHtiaW5kaW5nLCBpbml0fSwgc2NvcGVfOTE4KSA9PiBuZXcgVGVybShcIkJpbmRpbmdQcm9wZXJ0eUlkZW50aWZpZXJcIiwge2JpbmRpbmc6IHJlbW92ZVNjb3BlXzkwMihiaW5kaW5nLCBzY29wZV85MTgpLCBpbml0OiBpbml0fSldLCBbaXNCaW5kaW5nUHJvcGVydHlQcm9wZXJ0eSwgKHtiaW5kaW5nLCBuYW1lfSwgc2NvcGVfOTE5KSA9PiBuZXcgVGVybShcIkJpbmRpbmdQcm9wZXJ0eVByb3BlcnR5XCIsIHtiaW5kaW5nOiByZW1vdmVTY29wZV85MDIoYmluZGluZywgc2NvcGVfOTE5KSwgbmFtZTogbmFtZX0pXSwgW2lzT2JqZWN0QmluZGluZywgKHtwcm9wZXJ0aWVzfSwgc2NvcGVfOTIwKSA9PiBuZXcgVGVybShcIk9iamVjdEJpbmRpbmdcIiwge3Byb3BlcnRpZXM6IHByb3BlcnRpZXMubWFwKHByb3BfOTIxID0+IHJlbW92ZVNjb3BlXzkwMihwcm9wXzkyMSwgc2NvcGVfOTIwKSl9KV0sIFtfLlQsIGJpbmRpbmdfOTIyID0+IGFzc2VydChmYWxzZSwgXCJub3QgaW1wbGVtZW50ZWQgeWV0IGZvcjogXCIgKyBiaW5kaW5nXzkyMi50eXBlKV1dKTtcbmZ1bmN0aW9uIGZpbmROYW1lSW5FeHBvcnRzXzkwMyhuYW1lXzkyMywgZXhwXzkyNCkge1xuICBsZXQgZm91bmROYW1lc185MjUgPSBleHBfOTI0LnJlZHVjZSgoYWNjXzkyNiwgZV85MjcpID0+IHtcbiAgICBpZiAoZV85MjcuZGVjbGFyYXRpb24pIHtcbiAgICAgIHJldHVybiBhY2NfOTI2LmNvbmNhdChlXzkyNy5kZWNsYXJhdGlvbi5kZWNsYXJhdG9ycy5yZWR1Y2UoKGFjY185MjgsIGRlY2xfOTI5KSA9PiB7XG4gICAgICAgIGlmIChkZWNsXzkyOS5iaW5kaW5nLm5hbWUudmFsKCkgPT09IG5hbWVfOTIzLnZhbCgpKSB7XG4gICAgICAgICAgcmV0dXJuIGFjY185MjguY29uY2F0KGRlY2xfOTI5LmJpbmRpbmcubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY185Mjg7XG4gICAgICB9LCBMaXN0KCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY185MjY7XG4gIH0sIExpc3QoKSk7XG4gIGFzc2VydChmb3VuZE5hbWVzXzkyNS5zaXplIDw9IDEsIFwiZXhwZWN0aW5nIG5vIG1vcmUgdGhhbiAxIG1hdGNoaW5nIG5hbWUgaW4gZXhwb3J0c1wiKTtcbiAgcmV0dXJuIGZvdW5kTmFtZXNfOTI1LmdldCgwKTtcbn1cbmZ1bmN0aW9uIGJpbmRJbXBvcnRzXzkwNChpbXBUZXJtXzkzMCwgZXhNb2R1bGVfOTMxLCBjb250ZXh0XzkzMikge1xuICBsZXQgbmFtZXNfOTMzID0gW107XG4gIGltcFRlcm1fOTMwLm5hbWVkSW1wb3J0cy5mb3JFYWNoKHNwZWNpZmllcl85MzQgPT4ge1xuICAgIGxldCBuYW1lXzkzNSA9IHNwZWNpZmllcl85MzQuYmluZGluZy5uYW1lO1xuICAgIGxldCBleHBvcnROYW1lXzkzNiA9IGZpbmROYW1lSW5FeHBvcnRzXzkwMyhuYW1lXzkzNSwgZXhNb2R1bGVfOTMxLmV4cG9ydEVudHJpZXMpO1xuICAgIGlmIChleHBvcnROYW1lXzkzNiAhPSBudWxsKSB7XG4gICAgICBsZXQgbmV3QmluZGluZyA9IGdlbnN5bShuYW1lXzkzNS52YWwoKSk7XG4gICAgICBjb250ZXh0XzkzMi5iaW5kaW5ncy5hZGRGb3J3YXJkKG5hbWVfOTM1LCBleHBvcnROYW1lXzkzNiwgbmV3QmluZGluZyk7XG4gICAgICBpZiAoY29udGV4dF85MzIuc3RvcmUuaGFzKGV4cG9ydE5hbWVfOTM2LnJlc29sdmUoKSkpIHtcbiAgICAgICAgbmFtZXNfOTMzLnB1c2gobmFtZV85MzUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBMaXN0KG5hbWVzXzkzMyk7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlbkV4cGFuZGVyIHtcbiAgY29uc3RydWN0b3IoY29udGV4dF85MzcpIHtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XzkzNztcbiAgfVxuICBleHBhbmQoc3R4bF85MzgpIHtcbiAgICBsZXQgcmVzdWx0XzkzOSA9IExpc3QoKTtcbiAgICBpZiAoc3R4bF85Mzguc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdF85Mzk7XG4gICAgfVxuICAgIGxldCBwcmV2Xzk0MCA9IExpc3QoKTtcbiAgICBsZXQgZW5mXzk0MSA9IG5ldyBFbmZvcmVzdGVyKHN0eGxfOTM4LCBwcmV2Xzk0MCwgdGhpcy5jb250ZXh0KTtcbiAgICBsZXQgc2VsZl85NDIgPSB0aGlzO1xuICAgIHdoaWxlICghZW5mXzk0MS5kb25lKSB7XG4gICAgICBsZXQgdGVybSA9IF8ucGlwZShfLmJpbmQoZW5mXzk0MS5lbmZvcmVzdCwgZW5mXzk0MSksIF8uY29uZChbW2lzVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCwgdGVybV85NDMgPT4ge1xuICAgICAgICB0ZXJtXzk0My5kZWNsYXJhdGlvbi5kZWNsYXJhdG9ycyA9IHRlcm1fOTQzLmRlY2xhcmF0aW9uLmRlY2xhcmF0b3JzLm1hcChkZWNsXzk0NCA9PiB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBUZXJtKFwiVmFyaWFibGVEZWNsYXJhdG9yXCIsIHtiaW5kaW5nOiByZW1vdmVTY29wZV85MDIoZGVjbF85NDQuYmluZGluZywgc2VsZl85NDIuY29udGV4dC51c2VTY29wZSksIGluaXQ6IGRlY2xfOTQ0LmluaXR9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpc1N5bnRheERlY2xhcmF0aW9uKHRlcm1fOTQzLmRlY2xhcmF0aW9uKSkge1xuICAgICAgICAgIGxldCBzY29wZSA9IGZyZXNoU2NvcGUoXCJub25yZWNcIik7XG4gICAgICAgICAgdGVybV85NDMuZGVjbGFyYXRpb24uZGVjbGFyYXRvcnMuZm9yRWFjaChkZWNsXzk0NSA9PiB7XG4gICAgICAgICAgICBsZXQgbmFtZV85NDYgPSBkZWNsXzk0NS5iaW5kaW5nLm5hbWU7XG4gICAgICAgICAgICBsZXQgbmFtZUFkZGVkXzk0NyA9IG5hbWVfOTQ2LmFkZFNjb3BlKHNjb3BlKTtcbiAgICAgICAgICAgIGxldCBuYW1lUmVtb3ZlZF85NDggPSBuYW1lXzk0Ni5yZW1vdmVTY29wZShzZWxmXzk0Mi5jb250ZXh0LmN1cnJlbnRTY29wZVtzZWxmXzk0Mi5jb250ZXh0LmN1cnJlbnRTY29wZS5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICBsZXQgbmV3QmluZGluZ185NDkgPSBnZW5zeW0obmFtZV85NDYudmFsKCkpO1xuICAgICAgICAgICAgc2VsZl85NDIuY29udGV4dC5iaW5kaW5ncy5hZGRGb3J3YXJkKG5hbWVBZGRlZF85NDcsIG5hbWVSZW1vdmVkXzk0OCwgbmV3QmluZGluZ185NDkpO1xuICAgICAgICAgICAgZGVjbF85NDUuaW5pdCA9IGRlY2xfOTQ1LmluaXQuYWRkU2NvcGUoc2NvcGUsIHNlbGZfOTQyLmNvbnRleHQuYmluZGluZ3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N5bnRheERlY2xhcmF0aW9uKHRlcm1fOTQzLmRlY2xhcmF0aW9uKSB8fCBpc1N5bnRheHJlY0RlY2xhcmF0aW9uKHRlcm1fOTQzLmRlY2xhcmF0aW9uKSkge1xuICAgICAgICAgIHRlcm1fOTQzLmRlY2xhcmF0aW9uLmRlY2xhcmF0b3JzLmZvckVhY2goZGVjbF85NTAgPT4ge1xuICAgICAgICAgICAgcmVnaXN0ZXJCaW5kaW5nc185MDEoZGVjbF85NTAuYmluZGluZywgc2VsZl85NDIuY29udGV4dCk7XG4gICAgICAgICAgICBsb2FkU3ludGF4KGRlY2xfOTUwLCBzZWxmXzk0Mi5jb250ZXh0LCBzZWxmXzk0Mi5jb250ZXh0LmVudik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIE5vdGhpbmdfODk5KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGVybV85NDMuZGVjbGFyYXRpb24uZGVjbGFyYXRvcnMuZm9yRWFjaChkZWNsXzk1MSA9PiByZWdpc3RlckJpbmRpbmdzXzkwMShkZWNsXzk1MS5iaW5kaW5nLCBzZWxmXzk0Mi5jb250ZXh0KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEp1c3RfODk4KHRlcm1fOTQzKTtcbiAgICAgIH1dLCBbaXNGdW5jdGlvbldpdGhOYW1lLCB0ZXJtXzk1MiA9PiB7XG4gICAgICAgIHRlcm1fOTUyLm5hbWUgPSByZW1vdmVTY29wZV85MDIodGVybV85NTIubmFtZSwgc2VsZl85NDIuY29udGV4dC51c2VTY29wZSk7XG4gICAgICAgIHJlZ2lzdGVyQmluZGluZ3NfOTAxKHRlcm1fOTUyLm5hbWUsIHNlbGZfOTQyLmNvbnRleHQpO1xuICAgICAgICByZXR1cm4gSnVzdF84OTgodGVybV85NTIpO1xuICAgICAgfV0sIFtpc0ltcG9ydCwgdGVybV85NTMgPT4ge1xuICAgICAgICBsZXQgbW9kXzk1NCA9IHNlbGZfOTQyLmNvbnRleHQubW9kdWxlcy5sb2FkKHRlcm1fOTUzLm1vZHVsZVNwZWNpZmllci52YWwoKSwgc2VsZl85NDIuY29udGV4dCk7XG4gICAgICAgIGlmICh0ZXJtXzk1My5mb3JTeW50YXgpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImltcG9ydCBmb3Igc3ludGF4IGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbW9kXzk1NC52aXNpdChzZWxmXzk0Mi5jb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYm91bmROYW1lc185NTUgPSBiaW5kSW1wb3J0c185MDQodGVybV85NTMsIG1vZF85NTQsIHNlbGZfOTQyLmNvbnRleHQpO1xuICAgICAgICBpZiAoYm91bmROYW1lc185NTUuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBKdXN0Xzg5OCh0ZXJtXzk1Myk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE5vdGhpbmdfODk5KCk7XG4gICAgICB9XSwgW2lzRU9GLCBOb3RoaW5nXzg5OV0sIFtfLlQsIEp1c3RfODk4XV0pLCBNYXliZS5tYXliZShMaXN0KCksIF8uaWRlbnRpdHkpKSgpO1xuICAgICAgcmVzdWx0XzkzOSA9IHJlc3VsdF85MzkuY29uY2F0KHRlcm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XzkzOTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/transforms.js b/dist/transforms.js index 8c374fbe..3fa38aab 100644 --- a/dist/transforms.js +++ b/dist/transforms.js @@ -86,15 +86,15 @@ var ReturnStatementTransform = exports.ReturnStatementTransform = function Retur _classCallCheck(this, ReturnStatementTransform); }; -var VarBindingTransform = exports.VarBindingTransform = function VarBindingTransform(id_948) { +var VarBindingTransform = exports.VarBindingTransform = function VarBindingTransform(id_956) { _classCallCheck(this, VarBindingTransform); - this.id = id_948; + this.id = id_956; }; -var CompiletimeTransform = exports.CompiletimeTransform = function CompiletimeTransform(value_949) { +var CompiletimeTransform = exports.CompiletimeTransform = function CompiletimeTransform(value_957) { _classCallCheck(this, CompiletimeTransform); - this.value = value_949; + this.value = value_957; }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3RyYW5zZm9ybXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7SUFBYSxxQixXQUFBLHFCOzs7O0lBQ0EscUIsV0FBQSxxQjs7OztJQUNBLFksV0FBQSxZOzs7O0lBQ0EsYyxXQUFBLGM7Ozs7SUFDQSxnQixXQUFBLGdCOzs7O0lBQ0Esa0IsV0FBQSxrQjs7OztJQUNBLFksV0FBQSxZOzs7O0lBQ0EsYyxXQUFBLGM7Ozs7SUFDQSxXLFdBQUEsVzs7OztJQUNBLFksV0FBQSxZOzs7O0lBQ0EsZSxXQUFBLGU7Ozs7SUFDQSxjLFdBQUEsYzs7OztJQUNBLGlCLFdBQUEsaUI7Ozs7SUFDQSxXLFdBQUEsVzs7OztJQUNBLGEsV0FBQSxhOzs7O0lBQ0EsaUIsV0FBQSxpQjs7OztJQUNBLHNCLFdBQUEsc0I7Ozs7SUFDQSxtQixXQUFBLG1COzs7O0lBQ0Esb0IsV0FBQSxvQjs7OztJQUNBLHdCLFdBQUEsd0I7Ozs7SUFDQSxtQixXQUFBLG1CLEdBQ1gsNkJBQVksTUFBWixFQUFvQjtBQUFBOztBQUNsQixPQUFLLEVBQUwsR0FBVSxNQUFWO0FBQ0QsQzs7SUFFVSxvQixXQUFBLG9CLEdBQ1gsOEJBQVksU0FBWixFQUF1QjtBQUFBOztBQUNyQixPQUFLLEtBQUwsR0FBYSxTQUFiO0FBQ0QsQyIsImZpbGUiOiJ0cmFuc2Zvcm1zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEZ1bmN0aW9uRGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFZhcmlhYmxlRGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIE5ld1RyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFRocm93VHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgTGV0RGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIENvbnN0RGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFRyeVRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFdoaWxlVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgSWZUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBGb3JUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBTd2l0Y2hUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBCcmVha1RyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIENvbnRpbnVlVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgRG9UcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBXaXRoVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgRGVidWdnZXJUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBTeW50YXhyZWNEZWNsVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgU3ludGF4RGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFN5bnRheFF1b3RlVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgUmV0dXJuU3RhdGVtZW50VHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgVmFyQmluZGluZ1RyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKGlkXzk0OCkge1xuICAgIHRoaXMuaWQgPSBpZF85NDg7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBDb21waWxldGltZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKHZhbHVlXzk0OSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZV85NDk7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3RyYW5zZm9ybXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7SUFBYSxxQixXQUFBLHFCOzs7O0lBQ0EscUIsV0FBQSxxQjs7OztJQUNBLFksV0FBQSxZOzs7O0lBQ0EsYyxXQUFBLGM7Ozs7SUFDQSxnQixXQUFBLGdCOzs7O0lBQ0Esa0IsV0FBQSxrQjs7OztJQUNBLFksV0FBQSxZOzs7O0lBQ0EsYyxXQUFBLGM7Ozs7SUFDQSxXLFdBQUEsVzs7OztJQUNBLFksV0FBQSxZOzs7O0lBQ0EsZSxXQUFBLGU7Ozs7SUFDQSxjLFdBQUEsYzs7OztJQUNBLGlCLFdBQUEsaUI7Ozs7SUFDQSxXLFdBQUEsVzs7OztJQUNBLGEsV0FBQSxhOzs7O0lBQ0EsaUIsV0FBQSxpQjs7OztJQUNBLHNCLFdBQUEsc0I7Ozs7SUFDQSxtQixXQUFBLG1COzs7O0lBQ0Esb0IsV0FBQSxvQjs7OztJQUNBLHdCLFdBQUEsd0I7Ozs7SUFDQSxtQixXQUFBLG1CLEdBQ1gsNkJBQVksTUFBWixFQUFvQjtBQUFBOztBQUNsQixPQUFLLEVBQUwsR0FBVSxNQUFWO0FBQ0QsQzs7SUFFVSxvQixXQUFBLG9CLEdBQ1gsOEJBQVksU0FBWixFQUF1QjtBQUFBOztBQUNyQixPQUFLLEtBQUwsR0FBYSxTQUFiO0FBQ0QsQyIsImZpbGUiOiJ0cmFuc2Zvcm1zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEZ1bmN0aW9uRGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFZhcmlhYmxlRGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIE5ld1RyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFRocm93VHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgTGV0RGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIENvbnN0RGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFRyeVRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFdoaWxlVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgSWZUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBGb3JUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBTd2l0Y2hUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBCcmVha1RyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIENvbnRpbnVlVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgRG9UcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBXaXRoVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgRGVidWdnZXJUcmFuc2Zvcm0ge31cbmV4cG9ydCBjbGFzcyBTeW50YXhyZWNEZWNsVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgU3ludGF4RGVjbFRyYW5zZm9ybSB7fVxuZXhwb3J0IGNsYXNzIFN5bnRheFF1b3RlVHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgUmV0dXJuU3RhdGVtZW50VHJhbnNmb3JtIHt9XG5leHBvcnQgY2xhc3MgVmFyQmluZGluZ1RyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKGlkXzk1Nikge1xuICAgIHRoaXMuaWQgPSBpZF85NTY7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBDb21waWxldGltZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKHZhbHVlXzk1Nykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZV85NTc7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/utils.js b/dist/utils.js index 2173f575..247625ae 100644 --- a/dist/utils.js +++ b/dist/utils.js @@ -11,25 +11,25 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } -function mixin(target_950, source_951) { - var F_952 = function (_target_) { - _inherits(F_952, _target_); +function mixin(target_958, source_959) { + var F_960 = function (_target_) { + _inherits(F_960, _target_); - function F_952() { - _classCallCheck(this, F_952); + function F_960() { + _classCallCheck(this, F_960); - return _possibleConstructorReturn(this, Object.getPrototypeOf(F_952).apply(this, arguments)); + return _possibleConstructorReturn(this, Object.getPrototypeOf(F_960).apply(this, arguments)); } - return F_952; - }(target_950); + return F_960; + }(target_958); - Object.getOwnPropertyNames(source_951.prototype).forEach(function (name_953) { - if (name_953 !== "constructor") { - var newProp = Object.getOwnPropertyDescriptor(source_951.prototype, name_953); - Object.defineProperty(F_952.prototype, name_953, newProp); + Object.getOwnPropertyNames(source_959.prototype).forEach(function (name_961) { + if (name_961 !== "constructor") { + var newProp = Object.getOwnPropertyDescriptor(source_959.prototype, name_961); + Object.defineProperty(F_960.prototype, name_961, newProp); } }); - return F_952; + return F_960; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O1FBQWdCLEssR0FBQSxLOzs7Ozs7OztBQUFULFNBQVMsS0FBVCxDQUFlLFVBQWYsRUFBMkIsVUFBM0IsRUFBdUM7QUFBQSxNQUN0QyxLQURzQztBQUFBOztBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBLElBQ3hCLFVBRHdCOztBQUU1QyxTQUFPLG1CQUFQLENBQTJCLFdBQVcsU0FBdEMsRUFBaUQsT0FBakQsQ0FBeUQsb0JBQVk7QUFDbkUsUUFBSSxhQUFhLGFBQWpCLEVBQWdDO0FBQzlCLFVBQUksVUFBVSxPQUFPLHdCQUFQLENBQWdDLFdBQVcsU0FBM0MsRUFBc0QsUUFBdEQsQ0FBZDtBQUNBLGFBQU8sY0FBUCxDQUFzQixNQUFNLFNBQTVCLEVBQXVDLFFBQXZDLEVBQWlELE9BQWpEO0FBQ0Q7QUFDRixHQUxEO0FBTUEsU0FBTyxLQUFQO0FBQ0QiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gbWl4aW4odGFyZ2V0Xzk1MCwgc291cmNlXzk1MSkge1xuICBjbGFzcyBGXzk1MiBleHRlbmRzIHRhcmdldF85NTAge31cbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlXzk1MS5wcm90b3R5cGUpLmZvckVhY2gobmFtZV85NTMgPT4ge1xuICAgIGlmIChuYW1lXzk1MyAhPT0gXCJjb25zdHJ1Y3RvclwiKSB7XG4gICAgICBsZXQgbmV3UHJvcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlXzk1MS5wcm90b3R5cGUsIG5hbWVfOTUzKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGXzk1Mi5wcm90b3R5cGUsIG5hbWVfOTUzLCBuZXdQcm9wKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gRl85NTI7XG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3N3ZWV0L3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O1FBQWdCLEssR0FBQSxLOzs7Ozs7OztBQUFULFNBQVMsS0FBVCxDQUFlLFVBQWYsRUFBMkIsVUFBM0IsRUFBdUM7QUFBQSxNQUN0QyxLQURzQztBQUFBOztBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBLElBQ3hCLFVBRHdCOztBQUU1QyxTQUFPLG1CQUFQLENBQTJCLFdBQVcsU0FBdEMsRUFBaUQsT0FBakQsQ0FBeUQsb0JBQVk7QUFDbkUsUUFBSSxhQUFhLGFBQWpCLEVBQWdDO0FBQzlCLFVBQUksVUFBVSxPQUFPLHdCQUFQLENBQWdDLFdBQVcsU0FBM0MsRUFBc0QsUUFBdEQsQ0FBZDtBQUNBLGFBQU8sY0FBUCxDQUFzQixNQUFNLFNBQTVCLEVBQXVDLFFBQXZDLEVBQWlELE9BQWpEO0FBQ0Q7QUFDRixHQUxEO0FBTUEsU0FBTyxLQUFQO0FBQ0QiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gbWl4aW4odGFyZ2V0Xzk1OCwgc291cmNlXzk1OSkge1xuICBjbGFzcyBGXzk2MCBleHRlbmRzIHRhcmdldF85NTgge31cbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlXzk1OS5wcm90b3R5cGUpLmZvckVhY2gobmFtZV85NjEgPT4ge1xuICAgIGlmIChuYW1lXzk2MSAhPT0gXCJjb25zdHJ1Y3RvclwiKSB7XG4gICAgICBsZXQgbmV3UHJvcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlXzk1OS5wcm90b3R5cGUsIG5hbWVfOTYxKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGXzk2MC5wcm90b3R5cGUsIG5hbWVfOTYxLCBuZXdQcm9wKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gRl85NjA7XG59XG4iXX0= \ No newline at end of file