From 0421770886439508fd786e3a405b6073365d50a0 Mon Sep 17 00:00:00 2001 From: Eli Gladman Date: Sat, 9 Jan 2016 09:24:36 -0500 Subject: [PATCH 01/13] whilelisted specific keyevents from unnecessarily re-rendering the search results --- src/index.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/index.js b/src/index.js index 71b337a..3cbdebe 100644 --- a/src/index.js +++ b/src/index.js @@ -79,10 +79,22 @@ function registerInput(){ options.searchInput.addEventListener('keyup', function(e){ - emptyResultsContainer() - if( e.target.value.length > 0 ){ - render( repository.search(e.target.value) ) + + // whitelist the following keycodes + var whitelist = [37,38,39,40]; + + var keyCodes = whitelist.map(function(code){ + return 'e.which != ' + code; + }).join(' && '); + + // if the key pressed isn't one of the following whitelisted codes precede + if( eval(keyCodes) ){ + emptyResultsContainer() + if( e.target.value.length > 0 ){ + render( repository.search(e.target.value) ) + } } + }) } From b44d818ce9d9a4322e41edea9fbf05e2b105b4fe Mon Sep 17 00:00:00 2001 From: Eli Gladman Date: Sat, 9 Jan 2016 09:38:02 -0500 Subject: [PATCH 02/13] debounce keyup event --- src/index.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index 3cbdebe..9a09860 100644 --- a/src/index.js +++ b/src/index.js @@ -78,7 +78,20 @@ } function registerInput(){ - options.searchInput.addEventListener('keyup', function(e){ + + // https://remysharp.com/2010/07/21/throttling-function-calls + function debounce(fn, delay) { + var timer = null; + return function () { + var context = this, args = arguments; + clearTimeout(timer); + timer = setTimeout(function () { + fn.apply(context, args); + }, delay); + }; + } + + options.searchInput.addEventListener('keyup', debounce(function(e){ // whitelist the following keycodes var whitelist = [37,38,39,40]; @@ -95,7 +108,7 @@ } } - }) + }, 250)) // timeout } function render(results){ From b230038b6e8853e38663a64ae14180418df156d0 Mon Sep 17 00:00:00 2001 From: Eli Gladman Date: Sat, 9 Jan 2016 10:29:21 -0500 Subject: [PATCH 03/13] reduced the timeout from 250ms to 100ms --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 9a09860..a2d077b 100644 --- a/src/index.js +++ b/src/index.js @@ -108,7 +108,7 @@ } } - }, 250)) // timeout + }, 100)) // timeout } function render(results){ From 3bd258056822469bd94b65cc0e81bbc87382a157 Mon Sep 17 00:00:00 2001 From: Eli Gladman Date: Sat, 9 Jan 2016 11:44:56 -0500 Subject: [PATCH 04/13] added 'enter' key to whitelist --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index a2d077b..ecf481d 100644 --- a/src/index.js +++ b/src/index.js @@ -94,7 +94,7 @@ options.searchInput.addEventListener('keyup', debounce(function(e){ // whitelist the following keycodes - var whitelist = [37,38,39,40]; + var whitelist = [13,37,38,39,40]; var keyCodes = whitelist.map(function(code){ return 'e.which != ' + code; From 27ca02fe237684028f95529f37b3d35f6b15dfbc Mon Sep 17 00:00:00 2001 From: Eli Gladman Date: Sat, 9 Jan 2016 12:02:06 -0500 Subject: [PATCH 05/13] added 'capslock' key to whitelist --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index ecf481d..11e25fb 100644 --- a/src/index.js +++ b/src/index.js @@ -94,7 +94,7 @@ options.searchInput.addEventListener('keyup', debounce(function(e){ // whitelist the following keycodes - var whitelist = [13,37,38,39,40]; + var whitelist = [13,20,37,38,39,40]; var keyCodes = whitelist.map(function(code){ return 'e.which != ' + code; From 2ed5e1886127b7cc2c1909561369d7ae13898c60 Mon Sep 17 00:00:00 2001 From: Eli Gladman Date: Sat, 9 Jan 2016 12:10:06 -0500 Subject: [PATCH 06/13] added 'mod' key to whitelist --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 11e25fb..2b09525 100644 --- a/src/index.js +++ b/src/index.js @@ -94,7 +94,7 @@ options.searchInput.addEventListener('keyup', debounce(function(e){ // whitelist the following keycodes - var whitelist = [13,20,37,38,39,40]; + var whitelist = [13,20,37,38,39,40,91]; var keyCodes = whitelist.map(function(code){ return 'e.which != ' + code; From 087c89b7d8b95be50342bc3912c4ea1d48cb7900 Mon Sep 17 00:00:00 2001 From: Eli Gladman Date: Sat, 9 Jan 2016 14:32:57 -0500 Subject: [PATCH 07/13] added 'shift' key to whitelist --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 2b09525..f4d0faa 100644 --- a/src/index.js +++ b/src/index.js @@ -94,7 +94,7 @@ options.searchInput.addEventListener('keyup', debounce(function(e){ // whitelist the following keycodes - var whitelist = [13,20,37,38,39,40,91]; + var whitelist = [13,16,20,37,38,39,40,91]; var keyCodes = whitelist.map(function(code){ return 'e.which != ' + code; From 733b20b34f6f04e5092df1c148cc3ba26f641ef3 Mon Sep 17 00:00:00 2001 From: Eli Gladman Date: Sat, 9 Jan 2016 20:20:11 -0500 Subject: [PATCH 08/13] reverted commit #0421770 since I wasn't aware the json was loaded async --- src/index.js | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/src/index.js b/src/index.js index f4d0faa..a5ccdc0 100644 --- a/src/index.js +++ b/src/index.js @@ -78,20 +78,7 @@ } function registerInput(){ - - // https://remysharp.com/2010/07/21/throttling-function-calls - function debounce(fn, delay) { - var timer = null; - return function () { - var context = this, args = arguments; - clearTimeout(timer); - timer = setTimeout(function () { - fn.apply(context, args); - }, delay); - }; - } - - options.searchInput.addEventListener('keyup', debounce(function(e){ + options.searchInput.addEventListener('keyup', function(e){ // whitelist the following keycodes var whitelist = [13,16,20,37,38,39,40,91]; @@ -108,7 +95,7 @@ } } - }, 100)) // timeout + }) } function render(results){ From 4a3daa3d664de13c689dac1dfe90a2934e312582 Mon Sep 17 00:00:00 2001 From: Eli Gladman Date: Sat, 9 Jan 2016 20:21:28 -0500 Subject: [PATCH 09/13] compiled lastest builds --- dest/jekyll-search.js | 20 ++++++++++++++++---- dest/jekyll-search.min.js | 2 +- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/dest/jekyll-search.js b/dest/jekyll-search.js index 0f6bcc3..2ee585e 100644 --- a/dest/jekyll-search.js +++ b/dest/jekyll-search.js @@ -315,10 +315,22 @@ function compile(data){ function registerInput(){ options.searchInput.addEventListener('keyup', function(e){ - emptyResultsContainer() - if( e.target.value.length > 0 ){ - render( repository.search(e.target.value) ) + + // whitelist the following keycodes + var whitelist = [13,16,20,37,38,39,40,91]; + + var keyCodes = whitelist.map(function(code){ + return 'e.which != ' + code; + }).join(' && '); + + // if the key pressed isn't one of the following whitelisted codes precede + if( eval(keyCodes) ){ + emptyResultsContainer() + if( e.target.value.length > 0 ){ + render( repository.search(e.target.value) ) + } } + }) } @@ -363,4 +375,4 @@ function isJSON(json){ } },{}]},{},[7]) -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9zYWlwaC9Eb2N1bWVudHMvcGxheWdyb3VuZC9TaW1wbGUtSmVreWxsLVNlYXJjaC9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwiL1VzZXJzL3NhaXBoL0RvY3VtZW50cy9wbGF5Z3JvdW5kL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9KU09OTG9hZGVyLmpzIiwiL1VzZXJzL3NhaXBoL0RvY3VtZW50cy9wbGF5Z3JvdW5kL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9PcHRpb25zVmFsaWRhdG9yLmpzIiwiL1VzZXJzL3NhaXBoL0RvY3VtZW50cy9wbGF5Z3JvdW5kL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9SZXBvc2l0b3J5LmpzIiwiL1VzZXJzL3NhaXBoL0RvY3VtZW50cy9wbGF5Z3JvdW5kL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9TZWFyY2hTdHJhdGVnaWVzL0Z1enp5U2VhcmNoU3RyYXRlZ3kuanMiLCIvVXNlcnMvc2FpcGgvRG9jdW1lbnRzL3BsYXlncm91bmQvU2ltcGxlLUpla3lsbC1TZWFyY2gvc3JjL1NlYXJjaFN0cmF0ZWdpZXMvTGl0ZXJhbFNlYXJjaFN0cmF0ZWd5LmpzIiwiL1VzZXJzL3NhaXBoL0RvY3VtZW50cy9wbGF5Z3JvdW5kL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9UZW1wbGF0ZXIuanMiLCIvVXNlcnMvc2FpcGgvRG9jdW1lbnRzL3BsYXlncm91bmQvU2ltcGxlLUpla3lsbC1TZWFyY2gvc3JjL2Zha2VfYTgwOWFhOGEuanMiLCIvVXNlcnMvc2FpcGgvRG9jdW1lbnRzL3BsYXlncm91bmQvU2ltcGxlLUpla3lsbC1TZWFyY2gvc3JjL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3Rocm93IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIil9dmFyIGY9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGYuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sZixmLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGxvYWQ6IGxvYWRcbn1cblxuZnVuY3Rpb24gbG9hZChsb2NhdGlvbixjYWxsYmFjayl7XG4gIHZhciB4aHJcbiAgaWYoIHdpbmRvdy5YTUxIdHRwUmVxdWVzdCApe1xuICAgIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG4gIH1lbHNle1xuICAgIHhociA9IG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpXG4gIH1cblxuICB4aHIub3BlbignR0VUJywgbG9jYXRpb24sIHRydWUpXG5cbiAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCl7XG4gICAgaWYgKCB4aHIucmVhZHlTdGF0ZT09PTQgJiYgeGhyLnN0YXR1cz09PTIwMCApe1xuICAgICAgdHJ5e1xuICAgICAgICBjYWxsYmFjayhudWxsLCBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpIClcbiAgICAgIH1jYXRjaChlcnIpe1xuICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgeGhyLnNlbmQoKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIE9wdGlvbnNWYWxpZGF0b3IocGFyYW1zKXtcbiAgaWYoICF2YWxpZGF0ZVBhcmFtcyhwYXJhbXMpICl7XG4gICAgdGhyb3cgbmV3IEVycm9yKCctLSBPcHRpb25zVmFsaWRhdG9yOiByZXF1aXJlZCBvcHRpb25zIG1pc3NpbmcnKVxuICB9XG4gIGlmKCAhKHRoaXMgaW5zdGFuY2VvZiBPcHRpb25zVmFsaWRhdG9yKSApe1xuICAgIHJldHVybiBuZXcgT3B0aW9uc1ZhbGlkYXRvcihwYXJhbXMpXG4gIH1cblxuICB2YXIgcmVxdWlyZWRPcHRpb25zID0gcGFyYW1zLnJlcXVpcmVkXG5cbiAgdGhpcy5nZXRSZXF1aXJlZE9wdGlvbnMgPSBmdW5jdGlvbigpe1xuICAgIHJldHVybiByZXF1aXJlZE9wdGlvbnNcbiAgfVxuXG4gIHRoaXMudmFsaWRhdGUgPSBmdW5jdGlvbihwYXJhbWV0ZXJzKXtcbiAgICB2YXIgZXJyb3JzID0gW11cbiAgICByZXF1aXJlZE9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihyZXF1aXJlZE9wdGlvbk5hbWUpe1xuICAgICAgaWYoIHBhcmFtZXRlcnNbcmVxdWlyZWRPcHRpb25OYW1lXSA9PT0gdW5kZWZpbmVkICl7XG4gICAgICAgIGVycm9ycy5wdXNoKHJlcXVpcmVkT3B0aW9uTmFtZSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBlcnJvcnNcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlUGFyYW1zKHBhcmFtcyl7XG4gICAgaWYoICFwYXJhbXMgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtcy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkICYmIHBhcmFtcy5yZXF1aXJlZCBpbnN0YW5jZW9mIEFycmF5XG4gIH1cbn0iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0ge1xuICBwdXQ6cHV0LFxuICBjbGVhcjogY2xlYXIsXG4gIGdldDogZ2V0LFxuICBzZWFyY2g6IHNlYXJjaCxcbiAgc2V0T3B0aW9uczogc2V0T3B0aW9uc1xufVxuXG52YXIgRnV6enlTZWFyY2hTdHJhdGVneSA9IHJlcXVpcmUoJy4vU2VhcmNoU3RyYXRlZ2llcy9GdXp6eVNlYXJjaFN0cmF0ZWd5JylcbnZhciBMaXRlcmFsU2VhcmNoU3RyYXRlZ3kgPSByZXF1aXJlKCcuL1NlYXJjaFN0cmF0ZWdpZXMvTGl0ZXJhbFNlYXJjaFN0cmF0ZWd5JylcblxudmFyIGRhdGEgPSBbXVxudmFyIG9wdCA9IHt9XG5vcHQuZnV6enkgPSBmYWxzZVxub3B0LmxpbWl0ID0gMTBcbm9wdC5zZWFyY2hTdHJhdGVneSA9IG9wdC5mdXp6eSA/IEZ1enp5U2VhcmNoU3RyYXRlZ3kgOiBMaXRlcmFsU2VhcmNoU3RyYXRlZ3lcblxuXG5mdW5jdGlvbiBwdXQoZGF0YSl7XG4gIGlmKCBpc09iamVjdChkYXRhKSApe1xuICAgIHJldHVybiBhZGRPYmplY3QoZGF0YSlcbiAgfVxuICBpZiggaXNBcnJheShkYXRhKSApe1xuICAgIHJldHVybiBhZGRBcnJheShkYXRhKVxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cbmZ1bmN0aW9uIGNsZWFyKCl7XG4gIGRhdGEubGVuZ3RoID0gMFxuICByZXR1cm4gZGF0YVxufVxuXG5mdW5jdGlvbiBnZXQoKXtcbiAgcmV0dXJuIGRhdGFcbn1cblxuXG5mdW5jdGlvbiBpc09iamVjdChvYmopeyByZXR1cm4gISFvYmogJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nIH1cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKXsgcmV0dXJuICEhb2JqICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nIH1cblxuZnVuY3Rpb24gYWRkT2JqZWN0KF9kYXRhKXtcbiAgZGF0YS5wdXNoKF9kYXRhKVxuICByZXR1cm4gZGF0YVxufVxuXG5mdW5jdGlvbiBhZGRBcnJheShfZGF0YSl7XG4gIHZhciBhZGRlZCA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgX2RhdGEubGVuZ3RoOyBpKyspe1xuICAgIGlmKCBpc09iamVjdChfZGF0YVtpXSkgKXtcbiAgICAgIGFkZGVkLnB1c2goYWRkT2JqZWN0KF9kYXRhW2ldKSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFkZGVkXG59XG5cblxuXG5mdW5jdGlvbiBzZWFyY2goY3JpdCl7XG4gIGlmKCAhY3JpdCApe1xuICAgIHJldHVybiBbXVxuICB9XG4gIHJldHVybiBmaW5kTWF0Y2hlcyhkYXRhLGNyaXQsb3B0LnNlYXJjaFN0cmF0ZWd5LG9wdClcbn1cblxuZnVuY3Rpb24gc2V0T3B0aW9ucyhfb3B0KXtcbiAgb3B0ID0gX29wdCB8fCB7fVxuXG4gIG9wdC5mdXp6eSA9IF9vcHQuZnV6enkgfHwgZmFsc2VcbiAgb3B0LmxpbWl0ID0gX29wdC5saW1pdCB8fCAxMFxuICBvcHQuc2VhcmNoU3RyYXRlZ3kgPSBfb3B0LmZ1enp5ID8gRnV6enlTZWFyY2hTdHJhdGVneSA6IExpdGVyYWxTZWFyY2hTdHJhdGVneVxufVxuXG5mdW5jdGlvbiBmaW5kTWF0Y2hlcyhkYXRhLGNyaXQsc3RyYXRlZ3ksb3B0KXtcbiAgdmFyIG1hdGNoZXMgPSBbXVxuICBmb3IodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGggJiYgbWF0Y2hlcy5sZW5ndGggPCBvcHQubGltaXQ7IGkrKykge1xuICAgIHZhciBtYXRjaCA9IGZpbmRNYXRjaGVzSW5PYmplY3QoZGF0YVtpXSxjcml0LHN0cmF0ZWd5LG9wdClcbiAgICBpZiggbWF0Y2ggKXtcbiAgICAgIG1hdGNoZXMucHVzaChtYXRjaClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXNcbn1cblxuZnVuY3Rpb24gZmluZE1hdGNoZXNJbk9iamVjdChvYmosY3JpdCxzdHJhdGVneSxvcHQpe1xuICBmb3IodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiggIWlzRXhjbHVkZWQob2JqW2tleV0sIG9wdC5leGNsdWRlKSAmJiBzdHJhdGVneS5tYXRjaGVzKG9ialtrZXldLCBjcml0KSApe1xuICAgICAgcmV0dXJuIG9ialxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0V4Y2x1ZGVkKHRlcm0sIGV4Y2x1ZGVkVGVybXMpe1xuICB2YXIgZXhjbHVkZWQgPSBmYWxzZVxuICBleGNsdWRlZFRlcm1zID0gZXhjbHVkZWRUZXJtcyB8fCBbXVxuICBmb3IgKHZhciBpID0gMDsgaTxleGNsdWRlZFRlcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGV4Y2x1ZGVkVGVybSA9IGV4Y2x1ZGVkVGVybXNbaV1cbiAgICBpZiggIWV4Y2x1ZGVkICYmIG5ldyBSZWdFeHAodGVybSkudGVzdChleGNsdWRlZFRlcm0pICl7XG4gICAgICBleGNsdWRlZCA9IHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV4Y2x1ZGVkXG59XG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gbmV3IEZ1enp5U2VhcmNoU3RyYXRlZ3koKVxuXG5mdW5jdGlvbiBGdXp6eVNlYXJjaFN0cmF0ZWd5KCl7XG4gIGZ1bmN0aW9uIG1ha2VGdXp6eShzdHJpbmcpe1xuICAgIHN0cmluZyA9IHN0cmluZy5zcGxpdCgnJykuam9pbignLio/JylcbiAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgnPz8nLCc/JylcbiAgICByZXR1cm4gbmV3IFJlZ0V4cCggc3RyaW5nLCAnZ2knKVxuICB9XG5cbiAgdGhpcy5tYXRjaGVzID0gZnVuY3Rpb24oc3RyaW5nLCBjcml0KXtcbiAgICBpZiggdHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIGNyaXQgIT09ICdzdHJpbmcnICl7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgc3RyaW5nID0gc3RyaW5nLnRyaW0oKVxuICAgIHJldHVybiAhIW1ha2VGdXp6eShjcml0KS50ZXN0KHN0cmluZylcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBMaXRlcmFsU2VhcmNoU3RyYXRlZ3koKVxuXG5mdW5jdGlvbiBMaXRlcmFsU2VhcmNoU3RyYXRlZ3koKXtcbiAgZnVuY3Rpb24gbWF0Y2hlc1N0cmluZyhzdHJpbmcsY3JpdCl7XG4gICAgcmV0dXJuIHN0cmluZy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoY3JpdC50b0xvd2VyQ2FzZSgpKSA+PSAwXG4gIH1cblxuICB0aGlzLm1hdGNoZXMgPSBmdW5jdGlvbihzdHJpbmcsY3JpdCl7XG4gICAgaWYoIHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnICl7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgc3RyaW5nID0gc3RyaW5nLnRyaW0oKVxuICAgIHJldHVybiBtYXRjaGVzU3RyaW5nKHN0cmluZywgY3JpdClcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29tcGlsZTogY29tcGlsZSxcbiAgc2V0T3B0aW9uczogc2V0T3B0aW9uc1xufVxuXG52YXIgb3B0aW9ucyA9IHt9XG5vcHRpb25zLnBhdHRlcm4gPSAvXFx7KC4qPylcXH0vZ1xub3B0aW9ucy50ZW1wbGF0ZSA9ICcnXG5vcHRpb25zLm1pZGRsZXdhcmUgPSBmdW5jdGlvbigpe31cblxuZnVuY3Rpb24gc2V0T3B0aW9ucyhfb3B0aW9ucyl7XG4gIG9wdGlvbnMucGF0dGVybiA9IF9vcHRpb25zLnBhdHRlcm4gfHwgb3B0aW9ucy5wYXR0ZXJuXG4gIG9wdGlvbnMudGVtcGxhdGUgPSBfb3B0aW9ucy50ZW1wbGF0ZSB8fCBvcHRpb25zLnRlbXBsYXRlXG4gIGlmKCB0eXBlb2YgX29wdGlvbnMubWlkZGxld2FyZSA9PT0gJ2Z1bmN0aW9uJyApe1xuICAgIG9wdGlvbnMubWlkZGxld2FyZSA9IF9vcHRpb25zLm1pZGRsZXdhcmVcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21waWxlKGRhdGEpe1xuICByZXR1cm4gb3B0aW9ucy50ZW1wbGF0ZS5yZXBsYWNlKG9wdGlvbnMucGF0dGVybiwgZnVuY3Rpb24obWF0Y2gsIHByb3ApIHtcbiAgICB2YXIgdmFsdWUgPSBvcHRpb25zLm1pZGRsZXdhcmUocHJvcCwgZGF0YVtwcm9wXSwgb3B0aW9ucy50ZW1wbGF0ZSlcbiAgICBpZiggdmFsdWUgIT09IHVuZGVmaW5lZCApe1xuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfVxuICAgIHJldHVybiBkYXRhW3Byb3BdIHx8IG1hdGNoXG4gIH0pXG59XG4iLCI7KGZ1bmN0aW9uKHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCl7XG4gICd1c2Ugc3RyaWN0J1xuXG4gIHZhciBvcHRpb25zID0ge1xuICAgIHNlYXJjaElucHV0OiBudWxsLFxuICAgIHJlc3VsdHNDb250YWluZXI6IG51bGwsXG4gICAganNvbjogW10sXG4gICAgc2VhcmNoUmVzdWx0VGVtcGxhdGU6ICc8bGk+PGEgaHJlZj1cInt1cmx9XCIgdGl0bGU9XCJ7ZGVzY31cIj57dGl0bGV9PC9hPjwvbGk+JyxcbiAgICB0ZW1wbGF0ZU1pZGRsZXdhcmU6IGZ1bmN0aW9uKCl7fSxcbiAgICBub1Jlc3VsdHNUZXh0OiAnTm8gcmVzdWx0cyBmb3VuZCcsXG4gICAgbGltaXQ6IDEwLFxuICAgIGZ1enp5OiBmYWxzZSxcbiAgICBleGNsdWRlOiBbXVxuICB9XG5cbiAgdmFyIHJlcXVpcmVkT3B0aW9ucyA9IFsnc2VhcmNoSW5wdXQnLCdyZXN1bHRzQ29udGFpbmVyJywnanNvbiddXG5cbiAgdmFyIHRlbXBsYXRlciA9IHJlcXVpcmUoJy4vVGVtcGxhdGVyJylcbiAgdmFyIHJlcG9zaXRvcnkgPSByZXF1aXJlKCcuL1JlcG9zaXRvcnknKVxuICB2YXIganNvbkxvYWRlciA9IHJlcXVpcmUoJy4vSlNPTkxvYWRlcicpXG4gIHZhciBvcHRpb25zVmFsaWRhdG9yID0gcmVxdWlyZSgnLi9PcHRpb25zVmFsaWRhdG9yJykoe1xuICAgIHJlcXVpcmVkOiByZXF1aXJlZE9wdGlvbnNcbiAgfSlcbiAgdmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpXG5cbiAgLypcbiAgICBQdWJsaWMgQVBJXG4gICovXG4gIHdpbmRvdy5TaW1wbGVKZWt5bGxTZWFyY2ggPSBmdW5jdGlvbiBTaW1wbGVKZWt5bGxTZWFyY2goX29wdGlvbnMpe1xuICAgIHZhciBlcnJvcnMgPSBvcHRpb25zVmFsaWRhdG9yLnZhbGlkYXRlKF9vcHRpb25zKVxuICAgIGlmKCBlcnJvcnMubGVuZ3RoID4gMCApe1xuICAgICAgdGhyb3dFcnJvcignWW91IG11c3Qgc3BlY2lmeSB0aGUgZm9sbG93aW5nIHJlcXVpcmVkIG9wdGlvbnM6ICcgKyByZXF1aXJlZE9wdGlvbnMpXG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IHV0aWxzLm1lcmdlKG9wdGlvbnMsIF9vcHRpb25zKVxuXG4gICAgdGVtcGxhdGVyLnNldE9wdGlvbnMoe1xuICAgICAgdGVtcGxhdGU6IG9wdGlvbnMuc2VhcmNoUmVzdWx0VGVtcGxhdGUsXG4gICAgICBtaWRkbGV3YXJlOiBvcHRpb25zLnRlbXBsYXRlTWlkZGxld2FyZSxcbiAgICB9KVxuXG4gICAgcmVwb3NpdG9yeS5zZXRPcHRpb25zKHtcbiAgICAgIGZ1enp5OiBvcHRpb25zLmZ1enp5LFxuICAgICAgbGltaXQ6IG9wdGlvbnMubGltaXQsXG4gICAgfSlcblxuICAgIGlmKCB1dGlscy5pc0pTT04ob3B0aW9ucy5qc29uKSApe1xuICAgICAgaW5pdFdpdGhKU09OKG9wdGlvbnMuanNvbilcbiAgICB9ZWxzZXtcbiAgICAgIGluaXRXaXRoVVJMKG9wdGlvbnMuanNvbilcbiAgICB9XG4gIH1cblxuICAvLyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgd2luZG93LlNpbXBsZUpla3lsbFNlYXJjaC5pbml0ID0gd2luZG93LlNpbXBsZUpla3lsbFNlYXJjaFxuXG5cbiAgZnVuY3Rpb24gaW5pdFdpdGhKU09OKGpzb24pe1xuICAgIHJlcG9zaXRvcnkucHV0KGpzb24pXG4gICAgcmVnaXN0ZXJJbnB1dCgpXG4gIH1cblxuICBmdW5jdGlvbiBpbml0V2l0aFVSTCh1cmwpe1xuICAgIGpzb25Mb2FkZXIubG9hZCh1cmwsIGZ1bmN0aW9uKGVycixqc29uKXtcbiAgICAgIGlmKCBlcnIgKXtcbiAgICAgICAgdGhyb3dFcnJvcignZmFpbGVkIHRvIGdldCBKU09OICgnICsgdXJsICsgJyknKVxuICAgICAgfVxuICAgICAgaW5pdFdpdGhKU09OKGpzb24pXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGVtcHR5UmVzdWx0c0NvbnRhaW5lcigpe1xuICAgIG9wdGlvbnMucmVzdWx0c0NvbnRhaW5lci5pbm5lckhUTUwgPSAnJ1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwZW5kVG9SZXN1bHRzQ29udGFpbmVyKHRleHQpe1xuICAgIG9wdGlvbnMucmVzdWx0c0NvbnRhaW5lci5pbm5lckhUTUwgKz0gdGV4dFxuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJJbnB1dCgpe1xuICAgIG9wdGlvbnMuc2VhcmNoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBmdW5jdGlvbihlKXtcbiAgICAgIGVtcHR5UmVzdWx0c0NvbnRhaW5lcigpXG4gICAgICBpZiggZS50YXJnZXQudmFsdWUubGVuZ3RoID4gMCApe1xuICAgICAgICByZW5kZXIoIHJlcG9zaXRvcnkuc2VhcmNoKGUudGFyZ2V0LnZhbHVlKSApXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlcihyZXN1bHRzKXtcbiAgICBpZiggcmVzdWx0cy5sZW5ndGggPT09IDAgKXtcbiAgICAgIHJldHVybiBhcHBlbmRUb1Jlc3VsdHNDb250YWluZXIob3B0aW9ucy5ub1Jlc3VsdHNUZXh0KVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFwcGVuZFRvUmVzdWx0c0NvbnRhaW5lciggdGVtcGxhdGVyLmNvbXBpbGUocmVzdWx0c1tpXSkgKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRocm93RXJyb3IobWVzc2FnZSl7IHRocm93IG5ldyBFcnJvcignU2ltcGxlSmVreWxsU2VhcmNoIC0tLSAnKyBtZXNzYWdlKSB9XG59KSh3aW5kb3csIGRvY3VtZW50KTsiLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXJnZTogbWVyZ2UsXG4gIGlzSlNPTjogaXNKU09OLFxufVxuXG5mdW5jdGlvbiBtZXJnZShkZWZhdWx0UGFyYW1zLCBtZXJnZVBhcmFtcyl7XG4gIHZhciBtZXJnZWRPcHRpb25zID0ge31cbiAgZm9yKHZhciBvcHRpb24gaW4gZGVmYXVsdFBhcmFtcyl7XG4gICAgbWVyZ2VkT3B0aW9uc1tvcHRpb25dID0gZGVmYXVsdFBhcmFtc1tvcHRpb25dXG4gICAgaWYoIG1lcmdlUGFyYW1zW29wdGlvbl0gIT09IHVuZGVmaW5lZCApe1xuICAgICAgbWVyZ2VkT3B0aW9uc1tvcHRpb25dID0gbWVyZ2VQYXJhbXNbb3B0aW9uXVxuICAgIH1cbiAgfVxuICByZXR1cm4gbWVyZ2VkT3B0aW9uc1xufVxuXG5mdW5jdGlvbiBpc0pTT04oanNvbil7XG4gIHRyeXtcbiAgICBpZigganNvbiBpbnN0YW5jZW9mIE9iamVjdCAmJiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGpzb24pKSApe1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1jYXRjaChlKXtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIl19 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL2VsaS9SZXBvc2l0b3JpZXMvU2ltcGxlLUpla3lsbC1TZWFyY2gvbm9kZV9tb2R1bGVzL2d1bHAtYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwiL2hvbWUvZWxpL1JlcG9zaXRvcmllcy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvSlNPTkxvYWRlci5qcyIsIi9ob21lL2VsaS9SZXBvc2l0b3JpZXMvU2ltcGxlLUpla3lsbC1TZWFyY2gvc3JjL09wdGlvbnNWYWxpZGF0b3IuanMiLCIvaG9tZS9lbGkvUmVwb3NpdG9yaWVzL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9SZXBvc2l0b3J5LmpzIiwiL2hvbWUvZWxpL1JlcG9zaXRvcmllcy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvU2VhcmNoU3RyYXRlZ2llcy9GdXp6eVNlYXJjaFN0cmF0ZWd5LmpzIiwiL2hvbWUvZWxpL1JlcG9zaXRvcmllcy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvU2VhcmNoU3RyYXRlZ2llcy9MaXRlcmFsU2VhcmNoU3RyYXRlZ3kuanMiLCIvaG9tZS9lbGkvUmVwb3NpdG9yaWVzL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9UZW1wbGF0ZXIuanMiLCIvaG9tZS9lbGkvUmVwb3NpdG9yaWVzL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9mYWtlX2I0YjBhNWRhLmpzIiwiL2hvbWUvZWxpL1JlcG9zaXRvcmllcy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvdXRpbHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKX12YXIgZj1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwoZi5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxmLGYuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbG9hZDogbG9hZFxufVxuXG5mdW5jdGlvbiBsb2FkKGxvY2F0aW9uLGNhbGxiYWNrKXtcbiAgdmFyIHhoclxuICBpZiggd2luZG93LlhNTEh0dHBSZXF1ZXN0ICl7XG4gICAgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcbiAgfWVsc2V7XG4gICAgeGhyID0gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJylcbiAgfVxuXG4gIHhoci5vcGVuKCdHRVQnLCBsb2NhdGlvbiwgdHJ1ZSlcblxuICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKXtcbiAgICBpZiAoIHhoci5yZWFkeVN0YXRlPT09NCAmJiB4aHIuc3RhdHVzPT09MjAwICl7XG4gICAgICB0cnl7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCkgKVxuICAgICAgfWNhdGNoKGVycil7XG4gICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB4aHIuc2VuZCgpXG59XG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gT3B0aW9uc1ZhbGlkYXRvcihwYXJhbXMpe1xuICBpZiggIXZhbGlkYXRlUGFyYW1zKHBhcmFtcykgKXtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJy0tIE9wdGlvbnNWYWxpZGF0b3I6IHJlcXVpcmVkIG9wdGlvbnMgbWlzc2luZycpXG4gIH1cbiAgaWYoICEodGhpcyBpbnN0YW5jZW9mIE9wdGlvbnNWYWxpZGF0b3IpICl7XG4gICAgcmV0dXJuIG5ldyBPcHRpb25zVmFsaWRhdG9yKHBhcmFtcylcbiAgfVxuXG4gIHZhciByZXF1aXJlZE9wdGlvbnMgPSBwYXJhbXMucmVxdWlyZWRcblxuICB0aGlzLmdldFJlcXVpcmVkT3B0aW9ucyA9IGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIHJlcXVpcmVkT3B0aW9uc1xuICB9XG5cbiAgdGhpcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKHBhcmFtZXRlcnMpe1xuICAgIHZhciBlcnJvcnMgPSBbXVxuICAgIHJlcXVpcmVkT3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHJlcXVpcmVkT3B0aW9uTmFtZSl7XG4gICAgICBpZiggcGFyYW1ldGVyc1tyZXF1aXJlZE9wdGlvbk5hbWVdID09PSB1bmRlZmluZWQgKXtcbiAgICAgICAgZXJyb3JzLnB1c2gocmVxdWlyZWRPcHRpb25OYW1lKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIGVycm9yc1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVQYXJhbXMocGFyYW1zKXtcbiAgICBpZiggIXBhcmFtcyApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zLnJlcXVpcmVkICE9PSB1bmRlZmluZWQgJiYgcGFyYW1zLnJlcXVpcmVkIGluc3RhbmNlb2YgQXJyYXlcbiAgfVxufSIsIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHB1dDpwdXQsXG4gIGNsZWFyOiBjbGVhcixcbiAgZ2V0OiBnZXQsXG4gIHNlYXJjaDogc2VhcmNoLFxuICBzZXRPcHRpb25zOiBzZXRPcHRpb25zXG59XG5cbnZhciBGdXp6eVNlYXJjaFN0cmF0ZWd5ID0gcmVxdWlyZSgnLi9TZWFyY2hTdHJhdGVnaWVzL0Z1enp5U2VhcmNoU3RyYXRlZ3knKVxudmFyIExpdGVyYWxTZWFyY2hTdHJhdGVneSA9IHJlcXVpcmUoJy4vU2VhcmNoU3RyYXRlZ2llcy9MaXRlcmFsU2VhcmNoU3RyYXRlZ3knKVxuXG52YXIgZGF0YSA9IFtdXG52YXIgb3B0ID0ge31cbm9wdC5mdXp6eSA9IGZhbHNlXG5vcHQubGltaXQgPSAxMFxub3B0LnNlYXJjaFN0cmF0ZWd5ID0gb3B0LmZ1enp5ID8gRnV6enlTZWFyY2hTdHJhdGVneSA6IExpdGVyYWxTZWFyY2hTdHJhdGVneVxuXG5cbmZ1bmN0aW9uIHB1dChkYXRhKXtcbiAgaWYoIGlzT2JqZWN0KGRhdGEpICl7XG4gICAgcmV0dXJuIGFkZE9iamVjdChkYXRhKVxuICB9XG4gIGlmKCBpc0FycmF5KGRhdGEpICl7XG4gICAgcmV0dXJuIGFkZEFycmF5KGRhdGEpXG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuZnVuY3Rpb24gY2xlYXIoKXtcbiAgZGF0YS5sZW5ndGggPSAwXG4gIHJldHVybiBkYXRhXG59XG5cbmZ1bmN0aW9uIGdldCgpe1xuICByZXR1cm4gZGF0YVxufVxuXG5cbmZ1bmN0aW9uIGlzT2JqZWN0KG9iail7IHJldHVybiAhIW9iaiAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgfVxuZnVuY3Rpb24gaXNBcnJheShvYmopeyByZXR1cm4gISFvYmogJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XScgfVxuXG5mdW5jdGlvbiBhZGRPYmplY3QoX2RhdGEpe1xuICBkYXRhLnB1c2goX2RhdGEpXG4gIHJldHVybiBkYXRhXG59XG5cbmZ1bmN0aW9uIGFkZEFycmF5KF9kYXRhKXtcbiAgdmFyIGFkZGVkID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBfZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgaWYoIGlzT2JqZWN0KF9kYXRhW2ldKSApe1xuICAgICAgYWRkZWQucHVzaChhZGRPYmplY3QoX2RhdGFbaV0pKVxuICAgIH1cbiAgfVxuICByZXR1cm4gYWRkZWRcbn1cblxuXG5cbmZ1bmN0aW9uIHNlYXJjaChjcml0KXtcbiAgaWYoICFjcml0ICl7XG4gICAgcmV0dXJuIFtdXG4gIH1cbiAgcmV0dXJuIGZpbmRNYXRjaGVzKGRhdGEsY3JpdCxvcHQuc2VhcmNoU3RyYXRlZ3ksb3B0KVxufVxuXG5mdW5jdGlvbiBzZXRPcHRpb25zKF9vcHQpe1xuICBvcHQgPSBfb3B0IHx8IHt9XG5cbiAgb3B0LmZ1enp5ID0gX29wdC5mdXp6eSB8fCBmYWxzZVxuICBvcHQubGltaXQgPSBfb3B0LmxpbWl0IHx8IDEwXG4gIG9wdC5zZWFyY2hTdHJhdGVneSA9IF9vcHQuZnV6enkgPyBGdXp6eVNlYXJjaFN0cmF0ZWd5IDogTGl0ZXJhbFNlYXJjaFN0cmF0ZWd5XG59XG5cbmZ1bmN0aW9uIGZpbmRNYXRjaGVzKGRhdGEsY3JpdCxzdHJhdGVneSxvcHQpe1xuICB2YXIgbWF0Y2hlcyA9IFtdXG4gIGZvcih2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aCAmJiBtYXRjaGVzLmxlbmd0aCA8IG9wdC5saW1pdDsgaSsrKSB7XG4gICAgdmFyIG1hdGNoID0gZmluZE1hdGNoZXNJbk9iamVjdChkYXRhW2ldLGNyaXQsc3RyYXRlZ3ksb3B0KVxuICAgIGlmKCBtYXRjaCApe1xuICAgICAgbWF0Y2hlcy5wdXNoKG1hdGNoKVxuICAgIH1cbiAgfVxuICByZXR1cm4gbWF0Y2hlc1xufVxuXG5mdW5jdGlvbiBmaW5kTWF0Y2hlc0luT2JqZWN0KG9iaixjcml0LHN0cmF0ZWd5LG9wdCl7XG4gIGZvcih2YXIga2V5IGluIG9iaikge1xuICAgIGlmKCAhaXNFeGNsdWRlZChvYmpba2V5XSwgb3B0LmV4Y2x1ZGUpICYmIHN0cmF0ZWd5Lm1hdGNoZXMob2JqW2tleV0sIGNyaXQpICl7XG4gICAgICByZXR1cm4gb2JqXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzRXhjbHVkZWQodGVybSwgZXhjbHVkZWRUZXJtcyl7XG4gIHZhciBleGNsdWRlZCA9IGZhbHNlXG4gIGV4Y2x1ZGVkVGVybXMgPSBleGNsdWRlZFRlcm1zIHx8IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpPGV4Y2x1ZGVkVGVybXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZXhjbHVkZWRUZXJtID0gZXhjbHVkZWRUZXJtc1tpXVxuICAgIGlmKCAhZXhjbHVkZWQgJiYgbmV3IFJlZ0V4cCh0ZXJtKS50ZXN0KGV4Y2x1ZGVkVGVybSkgKXtcbiAgICAgIGV4Y2x1ZGVkID0gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXhjbHVkZWRcbn1cbiIsIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSBuZXcgRnV6enlTZWFyY2hTdHJhdGVneSgpXG5cbmZ1bmN0aW9uIEZ1enp5U2VhcmNoU3RyYXRlZ3koKXtcbiAgZnVuY3Rpb24gbWFrZUZ1enp5KHN0cmluZyl7XG4gICAgc3RyaW5nID0gc3RyaW5nLnNwbGl0KCcnKS5qb2luKCcuKj8nKVxuICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKCc/PycsJz8nKVxuICAgIHJldHVybiBuZXcgUmVnRXhwKCBzdHJpbmcsICdnaScpXG4gIH1cblxuICB0aGlzLm1hdGNoZXMgPSBmdW5jdGlvbihzdHJpbmcsIGNyaXQpe1xuICAgIGlmKCB0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgY3JpdCAhPT0gJ3N0cmluZycgKXtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBzdHJpbmcgPSBzdHJpbmcudHJpbSgpXG4gICAgcmV0dXJuICEhbWFrZUZ1enp5KGNyaXQpLnRlc3Qoc3RyaW5nKVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gbmV3IExpdGVyYWxTZWFyY2hTdHJhdGVneSgpXG5cbmZ1bmN0aW9uIExpdGVyYWxTZWFyY2hTdHJhdGVneSgpe1xuICBmdW5jdGlvbiBtYXRjaGVzU3RyaW5nKHN0cmluZyxjcml0KXtcbiAgICByZXR1cm4gc3RyaW5nLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihjcml0LnRvTG93ZXJDYXNlKCkpID49IDBcbiAgfVxuXG4gIHRoaXMubWF0Y2hlcyA9IGZ1bmN0aW9uKHN0cmluZyxjcml0KXtcbiAgICBpZiggdHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycgKXtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBzdHJpbmcgPSBzdHJpbmcudHJpbSgpXG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpbmcoc3RyaW5nLCBjcml0KVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb21waWxlOiBjb21waWxlLFxuICBzZXRPcHRpb25zOiBzZXRPcHRpb25zXG59XG5cbnZhciBvcHRpb25zID0ge31cbm9wdGlvbnMucGF0dGVybiA9IC9cXHsoLio/KVxcfS9nXG5vcHRpb25zLnRlbXBsYXRlID0gJydcbm9wdGlvbnMubWlkZGxld2FyZSA9IGZ1bmN0aW9uKCl7fVxuXG5mdW5jdGlvbiBzZXRPcHRpb25zKF9vcHRpb25zKXtcbiAgb3B0aW9ucy5wYXR0ZXJuID0gX29wdGlvbnMucGF0dGVybiB8fCBvcHRpb25zLnBhdHRlcm5cbiAgb3B0aW9ucy50ZW1wbGF0ZSA9IF9vcHRpb25zLnRlbXBsYXRlIHx8IG9wdGlvbnMudGVtcGxhdGVcbiAgaWYoIHR5cGVvZiBfb3B0aW9ucy5taWRkbGV3YXJlID09PSAnZnVuY3Rpb24nICl7XG4gICAgb3B0aW9ucy5taWRkbGV3YXJlID0gX29wdGlvbnMubWlkZGxld2FyZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGUoZGF0YSl7XG4gIHJldHVybiBvcHRpb25zLnRlbXBsYXRlLnJlcGxhY2Uob3B0aW9ucy5wYXR0ZXJuLCBmdW5jdGlvbihtYXRjaCwgcHJvcCkge1xuICAgIHZhciB2YWx1ZSA9IG9wdGlvbnMubWlkZGxld2FyZShwcm9wLCBkYXRhW3Byb3BdLCBvcHRpb25zLnRlbXBsYXRlKVxuICAgIGlmKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICl7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFbcHJvcF0gfHwgbWF0Y2hcbiAgfSlcbn1cbiIsIjsoZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkKXtcbiAgJ3VzZSBzdHJpY3QnXG5cbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgc2VhcmNoSW5wdXQ6IG51bGwsXG4gICAgcmVzdWx0c0NvbnRhaW5lcjogbnVsbCxcbiAgICBqc29uOiBbXSxcbiAgICBzZWFyY2hSZXN1bHRUZW1wbGF0ZTogJzxsaT48YSBocmVmPVwie3VybH1cIiB0aXRsZT1cIntkZXNjfVwiPnt0aXRsZX08L2E+PC9saT4nLFxuICAgIHRlbXBsYXRlTWlkZGxld2FyZTogZnVuY3Rpb24oKXt9LFxuICAgIG5vUmVzdWx0c1RleHQ6ICdObyByZXN1bHRzIGZvdW5kJyxcbiAgICBsaW1pdDogMTAsXG4gICAgZnV6enk6IGZhbHNlLFxuICAgIGV4Y2x1ZGU6IFtdXG4gIH1cblxuICB2YXIgcmVxdWlyZWRPcHRpb25zID0gWydzZWFyY2hJbnB1dCcsJ3Jlc3VsdHNDb250YWluZXInLCdqc29uJ11cblxuICB2YXIgdGVtcGxhdGVyID0gcmVxdWlyZSgnLi9UZW1wbGF0ZXInKVxuICB2YXIgcmVwb3NpdG9yeSA9IHJlcXVpcmUoJy4vUmVwb3NpdG9yeScpXG4gIHZhciBqc29uTG9hZGVyID0gcmVxdWlyZSgnLi9KU09OTG9hZGVyJylcbiAgdmFyIG9wdGlvbnNWYWxpZGF0b3IgPSByZXF1aXJlKCcuL09wdGlvbnNWYWxpZGF0b3InKSh7XG4gICAgcmVxdWlyZWQ6IHJlcXVpcmVkT3B0aW9uc1xuICB9KVxuICB2YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJylcblxuICAvKlxuICAgIFB1YmxpYyBBUElcbiAgKi9cbiAgd2luZG93LlNpbXBsZUpla3lsbFNlYXJjaCA9IGZ1bmN0aW9uIFNpbXBsZUpla3lsbFNlYXJjaChfb3B0aW9ucyl7XG4gICAgdmFyIGVycm9ycyA9IG9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGUoX29wdGlvbnMpXG4gICAgaWYoIGVycm9ycy5sZW5ndGggPiAwICl7XG4gICAgICB0aHJvd0Vycm9yKCdZb3UgbXVzdCBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcgcmVxdWlyZWQgb3B0aW9uczogJyArIHJlcXVpcmVkT3B0aW9ucylcbiAgICB9XG5cbiAgICBvcHRpb25zID0gdXRpbHMubWVyZ2Uob3B0aW9ucywgX29wdGlvbnMpXG5cbiAgICB0ZW1wbGF0ZXIuc2V0T3B0aW9ucyh7XG4gICAgICB0ZW1wbGF0ZTogb3B0aW9ucy5zZWFyY2hSZXN1bHRUZW1wbGF0ZSxcbiAgICAgIG1pZGRsZXdhcmU6IG9wdGlvbnMudGVtcGxhdGVNaWRkbGV3YXJlLFxuICAgIH0pXG5cbiAgICByZXBvc2l0b3J5LnNldE9wdGlvbnMoe1xuICAgICAgZnV6enk6IG9wdGlvbnMuZnV6enksXG4gICAgICBsaW1pdDogb3B0aW9ucy5saW1pdCxcbiAgICB9KVxuXG4gICAgaWYoIHV0aWxzLmlzSlNPTihvcHRpb25zLmpzb24pICl7XG4gICAgICBpbml0V2l0aEpTT04ob3B0aW9ucy5qc29uKVxuICAgIH1lbHNle1xuICAgICAgaW5pdFdpdGhVUkwob3B0aW9ucy5qc29uKVxuICAgIH1cbiAgfVxuXG4gIC8vIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICB3aW5kb3cuU2ltcGxlSmVreWxsU2VhcmNoLmluaXQgPSB3aW5kb3cuU2ltcGxlSmVreWxsU2VhcmNoXG5cblxuICBmdW5jdGlvbiBpbml0V2l0aEpTT04oanNvbil7XG4gICAgcmVwb3NpdG9yeS5wdXQoanNvbilcbiAgICByZWdpc3RlcklucHV0KClcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRXaXRoVVJMKHVybCl7XG4gICAganNvbkxvYWRlci5sb2FkKHVybCwgZnVuY3Rpb24oZXJyLGpzb24pe1xuICAgICAgaWYoIGVyciApe1xuICAgICAgICB0aHJvd0Vycm9yKCdmYWlsZWQgdG8gZ2V0IEpTT04gKCcgKyB1cmwgKyAnKScpXG4gICAgICB9XG4gICAgICBpbml0V2l0aEpTT04oanNvbilcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gZW1wdHlSZXN1bHRzQ29udGFpbmVyKCl7XG4gICAgb3B0aW9ucy5yZXN1bHRzQ29udGFpbmVyLmlubmVySFRNTCA9ICcnXG4gIH1cblxuICBmdW5jdGlvbiBhcHBlbmRUb1Jlc3VsdHNDb250YWluZXIodGV4dCl7XG4gICAgb3B0aW9ucy5yZXN1bHRzQ29udGFpbmVyLmlubmVySFRNTCArPSB0ZXh0XG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3RlcklucHV0KCl7XG4gICAgb3B0aW9ucy5zZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIGZ1bmN0aW9uKGUpe1xuXG4gICAgICAvLyB3aGl0ZWxpc3QgdGhlIGZvbGxvd2luZyBrZXljb2Rlc1xuICAgICAgdmFyIHdoaXRlbGlzdCA9IFsxMywxNiwyMCwzNywzOCwzOSw0MCw5MV07XG5cbiAgICAgIHZhciBrZXlDb2RlcyA9IHdoaXRlbGlzdC5tYXAoZnVuY3Rpb24oY29kZSl7XG4gICAgICAgIHJldHVybiAnZS53aGljaCAhPSAnICsgY29kZTtcbiAgICAgIH0pLmpvaW4oJyAmJiAnKTtcblxuICAgICAgLy8gaWYgdGhlIGtleSBwcmVzc2VkIGlzbid0IG9uZSBvZiB0aGUgZm9sbG93aW5nIHdoaXRlbGlzdGVkIGNvZGVzIHByZWNlZGVcbiAgICAgIGlmKCBldmFsKGtleUNvZGVzKSApe1xuICAgICAgICBlbXB0eVJlc3VsdHNDb250YWluZXIoKVxuICAgICAgICBpZiggZS50YXJnZXQudmFsdWUubGVuZ3RoID4gMCApe1xuICAgICAgICAgIHJlbmRlciggcmVwb3NpdG9yeS5zZWFyY2goZS50YXJnZXQudmFsdWUpIClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlcihyZXN1bHRzKXtcbiAgICBpZiggcmVzdWx0cy5sZW5ndGggPT09IDAgKXtcbiAgICAgIHJldHVybiBhcHBlbmRUb1Jlc3VsdHNDb250YWluZXIob3B0aW9ucy5ub1Jlc3VsdHNUZXh0KVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFwcGVuZFRvUmVzdWx0c0NvbnRhaW5lciggdGVtcGxhdGVyLmNvbXBpbGUocmVzdWx0c1tpXSkgKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRocm93RXJyb3IobWVzc2FnZSl7IHRocm93IG5ldyBFcnJvcignU2ltcGxlSmVreWxsU2VhcmNoIC0tLSAnKyBtZXNzYWdlKSB9XG59KSh3aW5kb3csIGRvY3VtZW50KTsiLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXJnZTogbWVyZ2UsXG4gIGlzSlNPTjogaXNKU09OLFxufVxuXG5mdW5jdGlvbiBtZXJnZShkZWZhdWx0UGFyYW1zLCBtZXJnZVBhcmFtcyl7XG4gIHZhciBtZXJnZWRPcHRpb25zID0ge31cbiAgZm9yKHZhciBvcHRpb24gaW4gZGVmYXVsdFBhcmFtcyl7XG4gICAgbWVyZ2VkT3B0aW9uc1tvcHRpb25dID0gZGVmYXVsdFBhcmFtc1tvcHRpb25dXG4gICAgaWYoIG1lcmdlUGFyYW1zW29wdGlvbl0gIT09IHVuZGVmaW5lZCApe1xuICAgICAgbWVyZ2VkT3B0aW9uc1tvcHRpb25dID0gbWVyZ2VQYXJhbXNbb3B0aW9uXVxuICAgIH1cbiAgfVxuICByZXR1cm4gbWVyZ2VkT3B0aW9uc1xufVxuXG5mdW5jdGlvbiBpc0pTT04oanNvbil7XG4gIHRyeXtcbiAgICBpZigganNvbiBpbnN0YW5jZW9mIE9iamVjdCAmJiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGpzb24pKSApe1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1jYXRjaChlKXtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIl19 diff --git a/dest/jekyll-search.min.js b/dest/jekyll-search.min.js index a27b0cb..b6eedd2 100644 --- a/dest/jekyll-search.min.js +++ b/dest/jekyll-search.min.js @@ -1 +1 @@ -!function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a="function"==typeof require&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o=0}this.matches=function(string,crit){return"string"!=typeof string?!1:(string=string.trim(),matchesString(string,crit))}}module.exports=new LiteralSearchStrategy},{}],6:[function(require,module,exports){"use strict";function setOptions(_options){options.pattern=_options.pattern||options.pattern,options.template=_options.template||options.template,"function"==typeof _options.middleware&&(options.middleware=_options.middleware)}function compile(data){return options.template.replace(options.pattern,function(match,prop){var value=options.middleware(prop,data[prop],options.template);return void 0!==value?value:data[prop]||match})}module.exports={compile:compile,setOptions:setOptions};var options={};options.pattern=/\{(.*?)\}/g,options.template="",options.middleware=function(){}},{}],7:[function(require,module,exports){!function(window,document,undefined){"use strict";function initWithJSON(json){repository.put(json),registerInput()}function initWithURL(url){jsonLoader.load(url,function(err,json){err&&throwError("failed to get JSON ("+url+")"),initWithJSON(json)})}function emptyResultsContainer(){options.resultsContainer.innerHTML=""}function appendToResultsContainer(text){options.resultsContainer.innerHTML+=text}function registerInput(){options.searchInput.addEventListener("keyup",function(e){emptyResultsContainer(),e.target.value.length>0&&render(repository.search(e.target.value))})}function render(results){if(0===results.length)return appendToResultsContainer(options.noResultsText);for(var i=0;i{title}',templateMiddleware:function(){},noResultsText:"No results found",limit:10,fuzzy:!1,exclude:[]},requiredOptions=["searchInput","resultsContainer","json"],templater=require("./Templater"),repository=require("./Repository"),jsonLoader=require("./JSONLoader"),optionsValidator=require("./OptionsValidator")({required:requiredOptions}),utils=require("./utils");window.SimpleJekyllSearch=function(_options){var errors=optionsValidator.validate(_options);errors.length>0&&throwError("You must specify the following required options: "+requiredOptions),options=utils.merge(options,_options),templater.setOptions({template:options.searchResultTemplate,middleware:options.templateMiddleware}),repository.setOptions({fuzzy:options.fuzzy,limit:options.limit}),utils.isJSON(options.json)?initWithJSON(options.json):initWithURL(options.json)},window.SimpleJekyllSearch.init=window.SimpleJekyllSearch}(window,document)},{"./JSONLoader":1,"./OptionsValidator":2,"./Repository":3,"./Templater":6,"./utils":8}],8:[function(require,module,exports){"use strict";function merge(defaultParams,mergeParams){var mergedOptions={};for(var option in defaultParams)mergedOptions[option]=defaultParams[option],void 0!==mergeParams[option]&&(mergedOptions[option]=mergeParams[option]);return mergedOptions}function isJSON(json){try{return json instanceof Object&&JSON.parse(JSON.stringify(json))?!0:!1}catch(e){return!1}}module.exports={merge:merge,isJSON:isJSON}},{}]},{},[7]); \ No newline at end of file +!function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a="function"==typeof require&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o=0}this.matches=function(string,crit){return"string"!=typeof string?!1:(string=string.trim(),matchesString(string,crit))}}module.exports=new LiteralSearchStrategy},{}],6:[function(require,module,exports){"use strict";function setOptions(_options){options.pattern=_options.pattern||options.pattern,options.template=_options.template||options.template,"function"==typeof _options.middleware&&(options.middleware=_options.middleware)}function compile(data){return options.template.replace(options.pattern,function(match,prop){var value=options.middleware(prop,data[prop],options.template);return void 0!==value?value:data[prop]||match})}module.exports={compile:compile,setOptions:setOptions};var options={};options.pattern=/\{(.*?)\}/g,options.template="",options.middleware=function(){}},{}],7:[function(require,module,exports){!function(window,document,undefined){"use strict";function initWithJSON(json){repository.put(json),registerInput()}function initWithURL(url){jsonLoader.load(url,function(err,json){err&&throwError("failed to get JSON ("+url+")"),initWithJSON(json)})}function emptyResultsContainer(){options.resultsContainer.innerHTML=""}function appendToResultsContainer(text){options.resultsContainer.innerHTML+=text}function registerInput(){options.searchInput.addEventListener("keyup",function(e){var whitelist=[13,16,20,37,38,39,40,91],keyCodes=whitelist.map(function(code){return"e.which != "+code}).join(" && ");eval(keyCodes)&&(emptyResultsContainer(),e.target.value.length>0&&render(repository.search(e.target.value)))})}function render(results){if(0===results.length)return appendToResultsContainer(options.noResultsText);for(var i=0;i{title}',templateMiddleware:function(){},noResultsText:"No results found",limit:10,fuzzy:!1,exclude:[]},requiredOptions=["searchInput","resultsContainer","json"],templater=require("./Templater"),repository=require("./Repository"),jsonLoader=require("./JSONLoader"),optionsValidator=require("./OptionsValidator")({required:requiredOptions}),utils=require("./utils");window.SimpleJekyllSearch=function(_options){var errors=optionsValidator.validate(_options);errors.length>0&&throwError("You must specify the following required options: "+requiredOptions),options=utils.merge(options,_options),templater.setOptions({template:options.searchResultTemplate,middleware:options.templateMiddleware}),repository.setOptions({fuzzy:options.fuzzy,limit:options.limit}),utils.isJSON(options.json)?initWithJSON(options.json):initWithURL(options.json)},window.SimpleJekyllSearch.init=window.SimpleJekyllSearch}(window,document)},{"./JSONLoader":1,"./OptionsValidator":2,"./Repository":3,"./Templater":6,"./utils":8}],8:[function(require,module,exports){"use strict";function merge(defaultParams,mergeParams){var mergedOptions={};for(var option in defaultParams)mergedOptions[option]=defaultParams[option],void 0!==mergeParams[option]&&(mergedOptions[option]=mergeParams[option]);return mergedOptions}function isJSON(json){try{return json instanceof Object&&JSON.parse(JSON.stringify(json))?!0:!1}catch(e){return!1}}module.exports={merge:merge,isJSON:isJSON}},{}]},{},[7]); \ No newline at end of file From 56a25b11b9190aa1a8f234b085f1c5eab6287aee Mon Sep 17 00:00:00 2001 From: Eli Gladman Date: Sat, 16 Jan 2016 14:24:59 -0500 Subject: [PATCH 10/13] added missing semicolons --- src/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index a5ccdc0..a8d932b 100644 --- a/src/index.js +++ b/src/index.js @@ -89,9 +89,9 @@ // if the key pressed isn't one of the following whitelisted codes precede if( eval(keyCodes) ){ - emptyResultsContainer() + emptyResultsContainer(); if( e.target.value.length > 0 ){ - render( repository.search(e.target.value) ) + render( repository.search(e.target.value) ); } } From 184855fd284743fa3e9035a2e1210bf03f0e2cbb Mon Sep 17 00:00:00 2001 From: Eli Gladman Date: Sat, 16 Jan 2016 14:27:36 -0500 Subject: [PATCH 11/13] updated build to reflect recent changes --- dest/jekyll-search.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dest/jekyll-search.js b/dest/jekyll-search.js index 2ee585e..3272d80 100644 --- a/dest/jekyll-search.js +++ b/dest/jekyll-search.js @@ -325,9 +325,9 @@ function compile(data){ // if the key pressed isn't one of the following whitelisted codes precede if( eval(keyCodes) ){ - emptyResultsContainer() + emptyResultsContainer(); if( e.target.value.length > 0 ){ - render( repository.search(e.target.value) ) + render( repository.search(e.target.value) ); } } @@ -375,4 +375,4 @@ function isJSON(json){ } },{}]},{},[7]) -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL2VsaS9SZXBvc2l0b3JpZXMvU2ltcGxlLUpla3lsbC1TZWFyY2gvbm9kZV9tb2R1bGVzL2d1bHAtYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwiL2hvbWUvZWxpL1JlcG9zaXRvcmllcy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvSlNPTkxvYWRlci5qcyIsIi9ob21lL2VsaS9SZXBvc2l0b3JpZXMvU2ltcGxlLUpla3lsbC1TZWFyY2gvc3JjL09wdGlvbnNWYWxpZGF0b3IuanMiLCIvaG9tZS9lbGkvUmVwb3NpdG9yaWVzL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9SZXBvc2l0b3J5LmpzIiwiL2hvbWUvZWxpL1JlcG9zaXRvcmllcy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvU2VhcmNoU3RyYXRlZ2llcy9GdXp6eVNlYXJjaFN0cmF0ZWd5LmpzIiwiL2hvbWUvZWxpL1JlcG9zaXRvcmllcy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvU2VhcmNoU3RyYXRlZ2llcy9MaXRlcmFsU2VhcmNoU3RyYXRlZ3kuanMiLCIvaG9tZS9lbGkvUmVwb3NpdG9yaWVzL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9UZW1wbGF0ZXIuanMiLCIvaG9tZS9lbGkvUmVwb3NpdG9yaWVzL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9mYWtlX2I0YjBhNWRhLmpzIiwiL2hvbWUvZWxpL1JlcG9zaXRvcmllcy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvdXRpbHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKX12YXIgZj1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwoZi5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxmLGYuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbG9hZDogbG9hZFxufVxuXG5mdW5jdGlvbiBsb2FkKGxvY2F0aW9uLGNhbGxiYWNrKXtcbiAgdmFyIHhoclxuICBpZiggd2luZG93LlhNTEh0dHBSZXF1ZXN0ICl7XG4gICAgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcbiAgfWVsc2V7XG4gICAgeGhyID0gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJylcbiAgfVxuXG4gIHhoci5vcGVuKCdHRVQnLCBsb2NhdGlvbiwgdHJ1ZSlcblxuICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKXtcbiAgICBpZiAoIHhoci5yZWFkeVN0YXRlPT09NCAmJiB4aHIuc3RhdHVzPT09MjAwICl7XG4gICAgICB0cnl7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCkgKVxuICAgICAgfWNhdGNoKGVycil7XG4gICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB4aHIuc2VuZCgpXG59XG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gT3B0aW9uc1ZhbGlkYXRvcihwYXJhbXMpe1xuICBpZiggIXZhbGlkYXRlUGFyYW1zKHBhcmFtcykgKXtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJy0tIE9wdGlvbnNWYWxpZGF0b3I6IHJlcXVpcmVkIG9wdGlvbnMgbWlzc2luZycpXG4gIH1cbiAgaWYoICEodGhpcyBpbnN0YW5jZW9mIE9wdGlvbnNWYWxpZGF0b3IpICl7XG4gICAgcmV0dXJuIG5ldyBPcHRpb25zVmFsaWRhdG9yKHBhcmFtcylcbiAgfVxuXG4gIHZhciByZXF1aXJlZE9wdGlvbnMgPSBwYXJhbXMucmVxdWlyZWRcblxuICB0aGlzLmdldFJlcXVpcmVkT3B0aW9ucyA9IGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIHJlcXVpcmVkT3B0aW9uc1xuICB9XG5cbiAgdGhpcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKHBhcmFtZXRlcnMpe1xuICAgIHZhciBlcnJvcnMgPSBbXVxuICAgIHJlcXVpcmVkT3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHJlcXVpcmVkT3B0aW9uTmFtZSl7XG4gICAgICBpZiggcGFyYW1ldGVyc1tyZXF1aXJlZE9wdGlvbk5hbWVdID09PSB1bmRlZmluZWQgKXtcbiAgICAgICAgZXJyb3JzLnB1c2gocmVxdWlyZWRPcHRpb25OYW1lKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIGVycm9yc1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVQYXJhbXMocGFyYW1zKXtcbiAgICBpZiggIXBhcmFtcyApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zLnJlcXVpcmVkICE9PSB1bmRlZmluZWQgJiYgcGFyYW1zLnJlcXVpcmVkIGluc3RhbmNlb2YgQXJyYXlcbiAgfVxufSIsIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHB1dDpwdXQsXG4gIGNsZWFyOiBjbGVhcixcbiAgZ2V0OiBnZXQsXG4gIHNlYXJjaDogc2VhcmNoLFxuICBzZXRPcHRpb25zOiBzZXRPcHRpb25zXG59XG5cbnZhciBGdXp6eVNlYXJjaFN0cmF0ZWd5ID0gcmVxdWlyZSgnLi9TZWFyY2hTdHJhdGVnaWVzL0Z1enp5U2VhcmNoU3RyYXRlZ3knKVxudmFyIExpdGVyYWxTZWFyY2hTdHJhdGVneSA9IHJlcXVpcmUoJy4vU2VhcmNoU3RyYXRlZ2llcy9MaXRlcmFsU2VhcmNoU3RyYXRlZ3knKVxuXG52YXIgZGF0YSA9IFtdXG52YXIgb3B0ID0ge31cbm9wdC5mdXp6eSA9IGZhbHNlXG5vcHQubGltaXQgPSAxMFxub3B0LnNlYXJjaFN0cmF0ZWd5ID0gb3B0LmZ1enp5ID8gRnV6enlTZWFyY2hTdHJhdGVneSA6IExpdGVyYWxTZWFyY2hTdHJhdGVneVxuXG5cbmZ1bmN0aW9uIHB1dChkYXRhKXtcbiAgaWYoIGlzT2JqZWN0KGRhdGEpICl7XG4gICAgcmV0dXJuIGFkZE9iamVjdChkYXRhKVxuICB9XG4gIGlmKCBpc0FycmF5KGRhdGEpICl7XG4gICAgcmV0dXJuIGFkZEFycmF5KGRhdGEpXG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuZnVuY3Rpb24gY2xlYXIoKXtcbiAgZGF0YS5sZW5ndGggPSAwXG4gIHJldHVybiBkYXRhXG59XG5cbmZ1bmN0aW9uIGdldCgpe1xuICByZXR1cm4gZGF0YVxufVxuXG5cbmZ1bmN0aW9uIGlzT2JqZWN0KG9iail7IHJldHVybiAhIW9iaiAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgfVxuZnVuY3Rpb24gaXNBcnJheShvYmopeyByZXR1cm4gISFvYmogJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XScgfVxuXG5mdW5jdGlvbiBhZGRPYmplY3QoX2RhdGEpe1xuICBkYXRhLnB1c2goX2RhdGEpXG4gIHJldHVybiBkYXRhXG59XG5cbmZ1bmN0aW9uIGFkZEFycmF5KF9kYXRhKXtcbiAgdmFyIGFkZGVkID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBfZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgaWYoIGlzT2JqZWN0KF9kYXRhW2ldKSApe1xuICAgICAgYWRkZWQucHVzaChhZGRPYmplY3QoX2RhdGFbaV0pKVxuICAgIH1cbiAgfVxuICByZXR1cm4gYWRkZWRcbn1cblxuXG5cbmZ1bmN0aW9uIHNlYXJjaChjcml0KXtcbiAgaWYoICFjcml0ICl7XG4gICAgcmV0dXJuIFtdXG4gIH1cbiAgcmV0dXJuIGZpbmRNYXRjaGVzKGRhdGEsY3JpdCxvcHQuc2VhcmNoU3RyYXRlZ3ksb3B0KVxufVxuXG5mdW5jdGlvbiBzZXRPcHRpb25zKF9vcHQpe1xuICBvcHQgPSBfb3B0IHx8IHt9XG5cbiAgb3B0LmZ1enp5ID0gX29wdC5mdXp6eSB8fCBmYWxzZVxuICBvcHQubGltaXQgPSBfb3B0LmxpbWl0IHx8IDEwXG4gIG9wdC5zZWFyY2hTdHJhdGVneSA9IF9vcHQuZnV6enkgPyBGdXp6eVNlYXJjaFN0cmF0ZWd5IDogTGl0ZXJhbFNlYXJjaFN0cmF0ZWd5XG59XG5cbmZ1bmN0aW9uIGZpbmRNYXRjaGVzKGRhdGEsY3JpdCxzdHJhdGVneSxvcHQpe1xuICB2YXIgbWF0Y2hlcyA9IFtdXG4gIGZvcih2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aCAmJiBtYXRjaGVzLmxlbmd0aCA8IG9wdC5saW1pdDsgaSsrKSB7XG4gICAgdmFyIG1hdGNoID0gZmluZE1hdGNoZXNJbk9iamVjdChkYXRhW2ldLGNyaXQsc3RyYXRlZ3ksb3B0KVxuICAgIGlmKCBtYXRjaCApe1xuICAgICAgbWF0Y2hlcy5wdXNoKG1hdGNoKVxuICAgIH1cbiAgfVxuICByZXR1cm4gbWF0Y2hlc1xufVxuXG5mdW5jdGlvbiBmaW5kTWF0Y2hlc0luT2JqZWN0KG9iaixjcml0LHN0cmF0ZWd5LG9wdCl7XG4gIGZvcih2YXIga2V5IGluIG9iaikge1xuICAgIGlmKCAhaXNFeGNsdWRlZChvYmpba2V5XSwgb3B0LmV4Y2x1ZGUpICYmIHN0cmF0ZWd5Lm1hdGNoZXMob2JqW2tleV0sIGNyaXQpICl7XG4gICAgICByZXR1cm4gb2JqXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzRXhjbHVkZWQodGVybSwgZXhjbHVkZWRUZXJtcyl7XG4gIHZhciBleGNsdWRlZCA9IGZhbHNlXG4gIGV4Y2x1ZGVkVGVybXMgPSBleGNsdWRlZFRlcm1zIHx8IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpPGV4Y2x1ZGVkVGVybXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZXhjbHVkZWRUZXJtID0gZXhjbHVkZWRUZXJtc1tpXVxuICAgIGlmKCAhZXhjbHVkZWQgJiYgbmV3IFJlZ0V4cCh0ZXJtKS50ZXN0KGV4Y2x1ZGVkVGVybSkgKXtcbiAgICAgIGV4Y2x1ZGVkID0gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXhjbHVkZWRcbn1cbiIsIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSBuZXcgRnV6enlTZWFyY2hTdHJhdGVneSgpXG5cbmZ1bmN0aW9uIEZ1enp5U2VhcmNoU3RyYXRlZ3koKXtcbiAgZnVuY3Rpb24gbWFrZUZ1enp5KHN0cmluZyl7XG4gICAgc3RyaW5nID0gc3RyaW5nLnNwbGl0KCcnKS5qb2luKCcuKj8nKVxuICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKCc/PycsJz8nKVxuICAgIHJldHVybiBuZXcgUmVnRXhwKCBzdHJpbmcsICdnaScpXG4gIH1cblxuICB0aGlzLm1hdGNoZXMgPSBmdW5jdGlvbihzdHJpbmcsIGNyaXQpe1xuICAgIGlmKCB0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgY3JpdCAhPT0gJ3N0cmluZycgKXtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBzdHJpbmcgPSBzdHJpbmcudHJpbSgpXG4gICAgcmV0dXJuICEhbWFrZUZ1enp5KGNyaXQpLnRlc3Qoc3RyaW5nKVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gbmV3IExpdGVyYWxTZWFyY2hTdHJhdGVneSgpXG5cbmZ1bmN0aW9uIExpdGVyYWxTZWFyY2hTdHJhdGVneSgpe1xuICBmdW5jdGlvbiBtYXRjaGVzU3RyaW5nKHN0cmluZyxjcml0KXtcbiAgICByZXR1cm4gc3RyaW5nLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihjcml0LnRvTG93ZXJDYXNlKCkpID49IDBcbiAgfVxuXG4gIHRoaXMubWF0Y2hlcyA9IGZ1bmN0aW9uKHN0cmluZyxjcml0KXtcbiAgICBpZiggdHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycgKXtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBzdHJpbmcgPSBzdHJpbmcudHJpbSgpXG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpbmcoc3RyaW5nLCBjcml0KVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb21waWxlOiBjb21waWxlLFxuICBzZXRPcHRpb25zOiBzZXRPcHRpb25zXG59XG5cbnZhciBvcHRpb25zID0ge31cbm9wdGlvbnMucGF0dGVybiA9IC9cXHsoLio/KVxcfS9nXG5vcHRpb25zLnRlbXBsYXRlID0gJydcbm9wdGlvbnMubWlkZGxld2FyZSA9IGZ1bmN0aW9uKCl7fVxuXG5mdW5jdGlvbiBzZXRPcHRpb25zKF9vcHRpb25zKXtcbiAgb3B0aW9ucy5wYXR0ZXJuID0gX29wdGlvbnMucGF0dGVybiB8fCBvcHRpb25zLnBhdHRlcm5cbiAgb3B0aW9ucy50ZW1wbGF0ZSA9IF9vcHRpb25zLnRlbXBsYXRlIHx8IG9wdGlvbnMudGVtcGxhdGVcbiAgaWYoIHR5cGVvZiBfb3B0aW9ucy5taWRkbGV3YXJlID09PSAnZnVuY3Rpb24nICl7XG4gICAgb3B0aW9ucy5taWRkbGV3YXJlID0gX29wdGlvbnMubWlkZGxld2FyZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGUoZGF0YSl7XG4gIHJldHVybiBvcHRpb25zLnRlbXBsYXRlLnJlcGxhY2Uob3B0aW9ucy5wYXR0ZXJuLCBmdW5jdGlvbihtYXRjaCwgcHJvcCkge1xuICAgIHZhciB2YWx1ZSA9IG9wdGlvbnMubWlkZGxld2FyZShwcm9wLCBkYXRhW3Byb3BdLCBvcHRpb25zLnRlbXBsYXRlKVxuICAgIGlmKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICl7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFbcHJvcF0gfHwgbWF0Y2hcbiAgfSlcbn1cbiIsIjsoZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkKXtcbiAgJ3VzZSBzdHJpY3QnXG5cbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgc2VhcmNoSW5wdXQ6IG51bGwsXG4gICAgcmVzdWx0c0NvbnRhaW5lcjogbnVsbCxcbiAgICBqc29uOiBbXSxcbiAgICBzZWFyY2hSZXN1bHRUZW1wbGF0ZTogJzxsaT48YSBocmVmPVwie3VybH1cIiB0aXRsZT1cIntkZXNjfVwiPnt0aXRsZX08L2E+PC9saT4nLFxuICAgIHRlbXBsYXRlTWlkZGxld2FyZTogZnVuY3Rpb24oKXt9LFxuICAgIG5vUmVzdWx0c1RleHQ6ICdObyByZXN1bHRzIGZvdW5kJyxcbiAgICBsaW1pdDogMTAsXG4gICAgZnV6enk6IGZhbHNlLFxuICAgIGV4Y2x1ZGU6IFtdXG4gIH1cblxuICB2YXIgcmVxdWlyZWRPcHRpb25zID0gWydzZWFyY2hJbnB1dCcsJ3Jlc3VsdHNDb250YWluZXInLCdqc29uJ11cblxuICB2YXIgdGVtcGxhdGVyID0gcmVxdWlyZSgnLi9UZW1wbGF0ZXInKVxuICB2YXIgcmVwb3NpdG9yeSA9IHJlcXVpcmUoJy4vUmVwb3NpdG9yeScpXG4gIHZhciBqc29uTG9hZGVyID0gcmVxdWlyZSgnLi9KU09OTG9hZGVyJylcbiAgdmFyIG9wdGlvbnNWYWxpZGF0b3IgPSByZXF1aXJlKCcuL09wdGlvbnNWYWxpZGF0b3InKSh7XG4gICAgcmVxdWlyZWQ6IHJlcXVpcmVkT3B0aW9uc1xuICB9KVxuICB2YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJylcblxuICAvKlxuICAgIFB1YmxpYyBBUElcbiAgKi9cbiAgd2luZG93LlNpbXBsZUpla3lsbFNlYXJjaCA9IGZ1bmN0aW9uIFNpbXBsZUpla3lsbFNlYXJjaChfb3B0aW9ucyl7XG4gICAgdmFyIGVycm9ycyA9IG9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGUoX29wdGlvbnMpXG4gICAgaWYoIGVycm9ycy5sZW5ndGggPiAwICl7XG4gICAgICB0aHJvd0Vycm9yKCdZb3UgbXVzdCBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcgcmVxdWlyZWQgb3B0aW9uczogJyArIHJlcXVpcmVkT3B0aW9ucylcbiAgICB9XG5cbiAgICBvcHRpb25zID0gdXRpbHMubWVyZ2Uob3B0aW9ucywgX29wdGlvbnMpXG5cbiAgICB0ZW1wbGF0ZXIuc2V0T3B0aW9ucyh7XG4gICAgICB0ZW1wbGF0ZTogb3B0aW9ucy5zZWFyY2hSZXN1bHRUZW1wbGF0ZSxcbiAgICAgIG1pZGRsZXdhcmU6IG9wdGlvbnMudGVtcGxhdGVNaWRkbGV3YXJlLFxuICAgIH0pXG5cbiAgICByZXBvc2l0b3J5LnNldE9wdGlvbnMoe1xuICAgICAgZnV6enk6IG9wdGlvbnMuZnV6enksXG4gICAgICBsaW1pdDogb3B0aW9ucy5saW1pdCxcbiAgICB9KVxuXG4gICAgaWYoIHV0aWxzLmlzSlNPTihvcHRpb25zLmpzb24pICl7XG4gICAgICBpbml0V2l0aEpTT04ob3B0aW9ucy5qc29uKVxuICAgIH1lbHNle1xuICAgICAgaW5pdFdpdGhVUkwob3B0aW9ucy5qc29uKVxuICAgIH1cbiAgfVxuXG4gIC8vIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICB3aW5kb3cuU2ltcGxlSmVreWxsU2VhcmNoLmluaXQgPSB3aW5kb3cuU2ltcGxlSmVreWxsU2VhcmNoXG5cblxuICBmdW5jdGlvbiBpbml0V2l0aEpTT04oanNvbil7XG4gICAgcmVwb3NpdG9yeS5wdXQoanNvbilcbiAgICByZWdpc3RlcklucHV0KClcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRXaXRoVVJMKHVybCl7XG4gICAganNvbkxvYWRlci5sb2FkKHVybCwgZnVuY3Rpb24oZXJyLGpzb24pe1xuICAgICAgaWYoIGVyciApe1xuICAgICAgICB0aHJvd0Vycm9yKCdmYWlsZWQgdG8gZ2V0IEpTT04gKCcgKyB1cmwgKyAnKScpXG4gICAgICB9XG4gICAgICBpbml0V2l0aEpTT04oanNvbilcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gZW1wdHlSZXN1bHRzQ29udGFpbmVyKCl7XG4gICAgb3B0aW9ucy5yZXN1bHRzQ29udGFpbmVyLmlubmVySFRNTCA9ICcnXG4gIH1cblxuICBmdW5jdGlvbiBhcHBlbmRUb1Jlc3VsdHNDb250YWluZXIodGV4dCl7XG4gICAgb3B0aW9ucy5yZXN1bHRzQ29udGFpbmVyLmlubmVySFRNTCArPSB0ZXh0XG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3RlcklucHV0KCl7XG4gICAgb3B0aW9ucy5zZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIGZ1bmN0aW9uKGUpe1xuXG4gICAgICAvLyB3aGl0ZWxpc3QgdGhlIGZvbGxvd2luZyBrZXljb2Rlc1xuICAgICAgdmFyIHdoaXRlbGlzdCA9IFsxMywxNiwyMCwzNywzOCwzOSw0MCw5MV07XG5cbiAgICAgIHZhciBrZXlDb2RlcyA9IHdoaXRlbGlzdC5tYXAoZnVuY3Rpb24oY29kZSl7XG4gICAgICAgIHJldHVybiAnZS53aGljaCAhPSAnICsgY29kZTtcbiAgICAgIH0pLmpvaW4oJyAmJiAnKTtcblxuICAgICAgLy8gaWYgdGhlIGtleSBwcmVzc2VkIGlzbid0IG9uZSBvZiB0aGUgZm9sbG93aW5nIHdoaXRlbGlzdGVkIGNvZGVzIHByZWNlZGVcbiAgICAgIGlmKCBldmFsKGtleUNvZGVzKSApe1xuICAgICAgICBlbXB0eVJlc3VsdHNDb250YWluZXIoKVxuICAgICAgICBpZiggZS50YXJnZXQudmFsdWUubGVuZ3RoID4gMCApe1xuICAgICAgICAgIHJlbmRlciggcmVwb3NpdG9yeS5zZWFyY2goZS50YXJnZXQudmFsdWUpIClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlcihyZXN1bHRzKXtcbiAgICBpZiggcmVzdWx0cy5sZW5ndGggPT09IDAgKXtcbiAgICAgIHJldHVybiBhcHBlbmRUb1Jlc3VsdHNDb250YWluZXIob3B0aW9ucy5ub1Jlc3VsdHNUZXh0KVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFwcGVuZFRvUmVzdWx0c0NvbnRhaW5lciggdGVtcGxhdGVyLmNvbXBpbGUocmVzdWx0c1tpXSkgKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRocm93RXJyb3IobWVzc2FnZSl7IHRocm93IG5ldyBFcnJvcignU2ltcGxlSmVreWxsU2VhcmNoIC0tLSAnKyBtZXNzYWdlKSB9XG59KSh3aW5kb3csIGRvY3VtZW50KTsiLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXJnZTogbWVyZ2UsXG4gIGlzSlNPTjogaXNKU09OLFxufVxuXG5mdW5jdGlvbiBtZXJnZShkZWZhdWx0UGFyYW1zLCBtZXJnZVBhcmFtcyl7XG4gIHZhciBtZXJnZWRPcHRpb25zID0ge31cbiAgZm9yKHZhciBvcHRpb24gaW4gZGVmYXVsdFBhcmFtcyl7XG4gICAgbWVyZ2VkT3B0aW9uc1tvcHRpb25dID0gZGVmYXVsdFBhcmFtc1tvcHRpb25dXG4gICAgaWYoIG1lcmdlUGFyYW1zW29wdGlvbl0gIT09IHVuZGVmaW5lZCApe1xuICAgICAgbWVyZ2VkT3B0aW9uc1tvcHRpb25dID0gbWVyZ2VQYXJhbXNbb3B0aW9uXVxuICAgIH1cbiAgfVxuICByZXR1cm4gbWVyZ2VkT3B0aW9uc1xufVxuXG5mdW5jdGlvbiBpc0pTT04oanNvbil7XG4gIHRyeXtcbiAgICBpZigganNvbiBpbnN0YW5jZW9mIE9iamVjdCAmJiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGpzb24pKSApe1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1jYXRjaChlKXtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIl19 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL2VsaS9SZXBvc2l0b3JpZXMvU2ltcGxlLUpla3lsbC1TZWFyY2gvbm9kZV9tb2R1bGVzL2d1bHAtYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwiL2hvbWUvZWxpL1JlcG9zaXRvcmllcy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvSlNPTkxvYWRlci5qcyIsIi9ob21lL2VsaS9SZXBvc2l0b3JpZXMvU2ltcGxlLUpla3lsbC1TZWFyY2gvc3JjL09wdGlvbnNWYWxpZGF0b3IuanMiLCIvaG9tZS9lbGkvUmVwb3NpdG9yaWVzL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9SZXBvc2l0b3J5LmpzIiwiL2hvbWUvZWxpL1JlcG9zaXRvcmllcy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvU2VhcmNoU3RyYXRlZ2llcy9GdXp6eVNlYXJjaFN0cmF0ZWd5LmpzIiwiL2hvbWUvZWxpL1JlcG9zaXRvcmllcy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvU2VhcmNoU3RyYXRlZ2llcy9MaXRlcmFsU2VhcmNoU3RyYXRlZ3kuanMiLCIvaG9tZS9lbGkvUmVwb3NpdG9yaWVzL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9UZW1wbGF0ZXIuanMiLCIvaG9tZS9lbGkvUmVwb3NpdG9yaWVzL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9mYWtlX2ExYjM5NjlkLmpzIiwiL2hvbWUvZWxpL1JlcG9zaXRvcmllcy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvdXRpbHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKX12YXIgZj1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwoZi5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxmLGYuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbG9hZDogbG9hZFxufVxuXG5mdW5jdGlvbiBsb2FkKGxvY2F0aW9uLGNhbGxiYWNrKXtcbiAgdmFyIHhoclxuICBpZiggd2luZG93LlhNTEh0dHBSZXF1ZXN0ICl7XG4gICAgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcbiAgfWVsc2V7XG4gICAgeGhyID0gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJylcbiAgfVxuXG4gIHhoci5vcGVuKCdHRVQnLCBsb2NhdGlvbiwgdHJ1ZSlcblxuICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKXtcbiAgICBpZiAoIHhoci5yZWFkeVN0YXRlPT09NCAmJiB4aHIuc3RhdHVzPT09MjAwICl7XG4gICAgICB0cnl7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCkgKVxuICAgICAgfWNhdGNoKGVycil7XG4gICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB4aHIuc2VuZCgpXG59XG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gT3B0aW9uc1ZhbGlkYXRvcihwYXJhbXMpe1xuICBpZiggIXZhbGlkYXRlUGFyYW1zKHBhcmFtcykgKXtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJy0tIE9wdGlvbnNWYWxpZGF0b3I6IHJlcXVpcmVkIG9wdGlvbnMgbWlzc2luZycpXG4gIH1cbiAgaWYoICEodGhpcyBpbnN0YW5jZW9mIE9wdGlvbnNWYWxpZGF0b3IpICl7XG4gICAgcmV0dXJuIG5ldyBPcHRpb25zVmFsaWRhdG9yKHBhcmFtcylcbiAgfVxuXG4gIHZhciByZXF1aXJlZE9wdGlvbnMgPSBwYXJhbXMucmVxdWlyZWRcblxuICB0aGlzLmdldFJlcXVpcmVkT3B0aW9ucyA9IGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIHJlcXVpcmVkT3B0aW9uc1xuICB9XG5cbiAgdGhpcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKHBhcmFtZXRlcnMpe1xuICAgIHZhciBlcnJvcnMgPSBbXVxuICAgIHJlcXVpcmVkT3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHJlcXVpcmVkT3B0aW9uTmFtZSl7XG4gICAgICBpZiggcGFyYW1ldGVyc1tyZXF1aXJlZE9wdGlvbk5hbWVdID09PSB1bmRlZmluZWQgKXtcbiAgICAgICAgZXJyb3JzLnB1c2gocmVxdWlyZWRPcHRpb25OYW1lKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIGVycm9yc1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVQYXJhbXMocGFyYW1zKXtcbiAgICBpZiggIXBhcmFtcyApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zLnJlcXVpcmVkICE9PSB1bmRlZmluZWQgJiYgcGFyYW1zLnJlcXVpcmVkIGluc3RhbmNlb2YgQXJyYXlcbiAgfVxufSIsIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHB1dDpwdXQsXG4gIGNsZWFyOiBjbGVhcixcbiAgZ2V0OiBnZXQsXG4gIHNlYXJjaDogc2VhcmNoLFxuICBzZXRPcHRpb25zOiBzZXRPcHRpb25zXG59XG5cbnZhciBGdXp6eVNlYXJjaFN0cmF0ZWd5ID0gcmVxdWlyZSgnLi9TZWFyY2hTdHJhdGVnaWVzL0Z1enp5U2VhcmNoU3RyYXRlZ3knKVxudmFyIExpdGVyYWxTZWFyY2hTdHJhdGVneSA9IHJlcXVpcmUoJy4vU2VhcmNoU3RyYXRlZ2llcy9MaXRlcmFsU2VhcmNoU3RyYXRlZ3knKVxuXG52YXIgZGF0YSA9IFtdXG52YXIgb3B0ID0ge31cbm9wdC5mdXp6eSA9IGZhbHNlXG5vcHQubGltaXQgPSAxMFxub3B0LnNlYXJjaFN0cmF0ZWd5ID0gb3B0LmZ1enp5ID8gRnV6enlTZWFyY2hTdHJhdGVneSA6IExpdGVyYWxTZWFyY2hTdHJhdGVneVxuXG5cbmZ1bmN0aW9uIHB1dChkYXRhKXtcbiAgaWYoIGlzT2JqZWN0KGRhdGEpICl7XG4gICAgcmV0dXJuIGFkZE9iamVjdChkYXRhKVxuICB9XG4gIGlmKCBpc0FycmF5KGRhdGEpICl7XG4gICAgcmV0dXJuIGFkZEFycmF5KGRhdGEpXG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuZnVuY3Rpb24gY2xlYXIoKXtcbiAgZGF0YS5sZW5ndGggPSAwXG4gIHJldHVybiBkYXRhXG59XG5cbmZ1bmN0aW9uIGdldCgpe1xuICByZXR1cm4gZGF0YVxufVxuXG5cbmZ1bmN0aW9uIGlzT2JqZWN0KG9iail7IHJldHVybiAhIW9iaiAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgfVxuZnVuY3Rpb24gaXNBcnJheShvYmopeyByZXR1cm4gISFvYmogJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XScgfVxuXG5mdW5jdGlvbiBhZGRPYmplY3QoX2RhdGEpe1xuICBkYXRhLnB1c2goX2RhdGEpXG4gIHJldHVybiBkYXRhXG59XG5cbmZ1bmN0aW9uIGFkZEFycmF5KF9kYXRhKXtcbiAgdmFyIGFkZGVkID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBfZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgaWYoIGlzT2JqZWN0KF9kYXRhW2ldKSApe1xuICAgICAgYWRkZWQucHVzaChhZGRPYmplY3QoX2RhdGFbaV0pKVxuICAgIH1cbiAgfVxuICByZXR1cm4gYWRkZWRcbn1cblxuXG5cbmZ1bmN0aW9uIHNlYXJjaChjcml0KXtcbiAgaWYoICFjcml0ICl7XG4gICAgcmV0dXJuIFtdXG4gIH1cbiAgcmV0dXJuIGZpbmRNYXRjaGVzKGRhdGEsY3JpdCxvcHQuc2VhcmNoU3RyYXRlZ3ksb3B0KVxufVxuXG5mdW5jdGlvbiBzZXRPcHRpb25zKF9vcHQpe1xuICBvcHQgPSBfb3B0IHx8IHt9XG5cbiAgb3B0LmZ1enp5ID0gX29wdC5mdXp6eSB8fCBmYWxzZVxuICBvcHQubGltaXQgPSBfb3B0LmxpbWl0IHx8IDEwXG4gIG9wdC5zZWFyY2hTdHJhdGVneSA9IF9vcHQuZnV6enkgPyBGdXp6eVNlYXJjaFN0cmF0ZWd5IDogTGl0ZXJhbFNlYXJjaFN0cmF0ZWd5XG59XG5cbmZ1bmN0aW9uIGZpbmRNYXRjaGVzKGRhdGEsY3JpdCxzdHJhdGVneSxvcHQpe1xuICB2YXIgbWF0Y2hlcyA9IFtdXG4gIGZvcih2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aCAmJiBtYXRjaGVzLmxlbmd0aCA8IG9wdC5saW1pdDsgaSsrKSB7XG4gICAgdmFyIG1hdGNoID0gZmluZE1hdGNoZXNJbk9iamVjdChkYXRhW2ldLGNyaXQsc3RyYXRlZ3ksb3B0KVxuICAgIGlmKCBtYXRjaCApe1xuICAgICAgbWF0Y2hlcy5wdXNoKG1hdGNoKVxuICAgIH1cbiAgfVxuICByZXR1cm4gbWF0Y2hlc1xufVxuXG5mdW5jdGlvbiBmaW5kTWF0Y2hlc0luT2JqZWN0KG9iaixjcml0LHN0cmF0ZWd5LG9wdCl7XG4gIGZvcih2YXIga2V5IGluIG9iaikge1xuICAgIGlmKCAhaXNFeGNsdWRlZChvYmpba2V5XSwgb3B0LmV4Y2x1ZGUpICYmIHN0cmF0ZWd5Lm1hdGNoZXMob2JqW2tleV0sIGNyaXQpICl7XG4gICAgICByZXR1cm4gb2JqXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzRXhjbHVkZWQodGVybSwgZXhjbHVkZWRUZXJtcyl7XG4gIHZhciBleGNsdWRlZCA9IGZhbHNlXG4gIGV4Y2x1ZGVkVGVybXMgPSBleGNsdWRlZFRlcm1zIHx8IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpPGV4Y2x1ZGVkVGVybXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZXhjbHVkZWRUZXJtID0gZXhjbHVkZWRUZXJtc1tpXVxuICAgIGlmKCAhZXhjbHVkZWQgJiYgbmV3IFJlZ0V4cCh0ZXJtKS50ZXN0KGV4Y2x1ZGVkVGVybSkgKXtcbiAgICAgIGV4Y2x1ZGVkID0gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXhjbHVkZWRcbn1cbiIsIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSBuZXcgRnV6enlTZWFyY2hTdHJhdGVneSgpXG5cbmZ1bmN0aW9uIEZ1enp5U2VhcmNoU3RyYXRlZ3koKXtcbiAgZnVuY3Rpb24gbWFrZUZ1enp5KHN0cmluZyl7XG4gICAgc3RyaW5nID0gc3RyaW5nLnNwbGl0KCcnKS5qb2luKCcuKj8nKVxuICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKCc/PycsJz8nKVxuICAgIHJldHVybiBuZXcgUmVnRXhwKCBzdHJpbmcsICdnaScpXG4gIH1cblxuICB0aGlzLm1hdGNoZXMgPSBmdW5jdGlvbihzdHJpbmcsIGNyaXQpe1xuICAgIGlmKCB0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgY3JpdCAhPT0gJ3N0cmluZycgKXtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBzdHJpbmcgPSBzdHJpbmcudHJpbSgpXG4gICAgcmV0dXJuICEhbWFrZUZ1enp5KGNyaXQpLnRlc3Qoc3RyaW5nKVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gbmV3IExpdGVyYWxTZWFyY2hTdHJhdGVneSgpXG5cbmZ1bmN0aW9uIExpdGVyYWxTZWFyY2hTdHJhdGVneSgpe1xuICBmdW5jdGlvbiBtYXRjaGVzU3RyaW5nKHN0cmluZyxjcml0KXtcbiAgICByZXR1cm4gc3RyaW5nLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihjcml0LnRvTG93ZXJDYXNlKCkpID49IDBcbiAgfVxuXG4gIHRoaXMubWF0Y2hlcyA9IGZ1bmN0aW9uKHN0cmluZyxjcml0KXtcbiAgICBpZiggdHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycgKXtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBzdHJpbmcgPSBzdHJpbmcudHJpbSgpXG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpbmcoc3RyaW5nLCBjcml0KVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb21waWxlOiBjb21waWxlLFxuICBzZXRPcHRpb25zOiBzZXRPcHRpb25zXG59XG5cbnZhciBvcHRpb25zID0ge31cbm9wdGlvbnMucGF0dGVybiA9IC9cXHsoLio/KVxcfS9nXG5vcHRpb25zLnRlbXBsYXRlID0gJydcbm9wdGlvbnMubWlkZGxld2FyZSA9IGZ1bmN0aW9uKCl7fVxuXG5mdW5jdGlvbiBzZXRPcHRpb25zKF9vcHRpb25zKXtcbiAgb3B0aW9ucy5wYXR0ZXJuID0gX29wdGlvbnMucGF0dGVybiB8fCBvcHRpb25zLnBhdHRlcm5cbiAgb3B0aW9ucy50ZW1wbGF0ZSA9IF9vcHRpb25zLnRlbXBsYXRlIHx8IG9wdGlvbnMudGVtcGxhdGVcbiAgaWYoIHR5cGVvZiBfb3B0aW9ucy5taWRkbGV3YXJlID09PSAnZnVuY3Rpb24nICl7XG4gICAgb3B0aW9ucy5taWRkbGV3YXJlID0gX29wdGlvbnMubWlkZGxld2FyZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGUoZGF0YSl7XG4gIHJldHVybiBvcHRpb25zLnRlbXBsYXRlLnJlcGxhY2Uob3B0aW9ucy5wYXR0ZXJuLCBmdW5jdGlvbihtYXRjaCwgcHJvcCkge1xuICAgIHZhciB2YWx1ZSA9IG9wdGlvbnMubWlkZGxld2FyZShwcm9wLCBkYXRhW3Byb3BdLCBvcHRpb25zLnRlbXBsYXRlKVxuICAgIGlmKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICl7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFbcHJvcF0gfHwgbWF0Y2hcbiAgfSlcbn1cbiIsIjsoZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkKXtcbiAgJ3VzZSBzdHJpY3QnXG5cbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgc2VhcmNoSW5wdXQ6IG51bGwsXG4gICAgcmVzdWx0c0NvbnRhaW5lcjogbnVsbCxcbiAgICBqc29uOiBbXSxcbiAgICBzZWFyY2hSZXN1bHRUZW1wbGF0ZTogJzxsaT48YSBocmVmPVwie3VybH1cIiB0aXRsZT1cIntkZXNjfVwiPnt0aXRsZX08L2E+PC9saT4nLFxuICAgIHRlbXBsYXRlTWlkZGxld2FyZTogZnVuY3Rpb24oKXt9LFxuICAgIG5vUmVzdWx0c1RleHQ6ICdObyByZXN1bHRzIGZvdW5kJyxcbiAgICBsaW1pdDogMTAsXG4gICAgZnV6enk6IGZhbHNlLFxuICAgIGV4Y2x1ZGU6IFtdXG4gIH1cblxuICB2YXIgcmVxdWlyZWRPcHRpb25zID0gWydzZWFyY2hJbnB1dCcsJ3Jlc3VsdHNDb250YWluZXInLCdqc29uJ11cblxuICB2YXIgdGVtcGxhdGVyID0gcmVxdWlyZSgnLi9UZW1wbGF0ZXInKVxuICB2YXIgcmVwb3NpdG9yeSA9IHJlcXVpcmUoJy4vUmVwb3NpdG9yeScpXG4gIHZhciBqc29uTG9hZGVyID0gcmVxdWlyZSgnLi9KU09OTG9hZGVyJylcbiAgdmFyIG9wdGlvbnNWYWxpZGF0b3IgPSByZXF1aXJlKCcuL09wdGlvbnNWYWxpZGF0b3InKSh7XG4gICAgcmVxdWlyZWQ6IHJlcXVpcmVkT3B0aW9uc1xuICB9KVxuICB2YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJylcblxuICAvKlxuICAgIFB1YmxpYyBBUElcbiAgKi9cbiAgd2luZG93LlNpbXBsZUpla3lsbFNlYXJjaCA9IGZ1bmN0aW9uIFNpbXBsZUpla3lsbFNlYXJjaChfb3B0aW9ucyl7XG4gICAgdmFyIGVycm9ycyA9IG9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGUoX29wdGlvbnMpXG4gICAgaWYoIGVycm9ycy5sZW5ndGggPiAwICl7XG4gICAgICB0aHJvd0Vycm9yKCdZb3UgbXVzdCBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcgcmVxdWlyZWQgb3B0aW9uczogJyArIHJlcXVpcmVkT3B0aW9ucylcbiAgICB9XG5cbiAgICBvcHRpb25zID0gdXRpbHMubWVyZ2Uob3B0aW9ucywgX29wdGlvbnMpXG5cbiAgICB0ZW1wbGF0ZXIuc2V0T3B0aW9ucyh7XG4gICAgICB0ZW1wbGF0ZTogb3B0aW9ucy5zZWFyY2hSZXN1bHRUZW1wbGF0ZSxcbiAgICAgIG1pZGRsZXdhcmU6IG9wdGlvbnMudGVtcGxhdGVNaWRkbGV3YXJlLFxuICAgIH0pXG5cbiAgICByZXBvc2l0b3J5LnNldE9wdGlvbnMoe1xuICAgICAgZnV6enk6IG9wdGlvbnMuZnV6enksXG4gICAgICBsaW1pdDogb3B0aW9ucy5saW1pdCxcbiAgICB9KVxuXG4gICAgaWYoIHV0aWxzLmlzSlNPTihvcHRpb25zLmpzb24pICl7XG4gICAgICBpbml0V2l0aEpTT04ob3B0aW9ucy5qc29uKVxuICAgIH1lbHNle1xuICAgICAgaW5pdFdpdGhVUkwob3B0aW9ucy5qc29uKVxuICAgIH1cbiAgfVxuXG4gIC8vIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICB3aW5kb3cuU2ltcGxlSmVreWxsU2VhcmNoLmluaXQgPSB3aW5kb3cuU2ltcGxlSmVreWxsU2VhcmNoXG5cblxuICBmdW5jdGlvbiBpbml0V2l0aEpTT04oanNvbil7XG4gICAgcmVwb3NpdG9yeS5wdXQoanNvbilcbiAgICByZWdpc3RlcklucHV0KClcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRXaXRoVVJMKHVybCl7XG4gICAganNvbkxvYWRlci5sb2FkKHVybCwgZnVuY3Rpb24oZXJyLGpzb24pe1xuICAgICAgaWYoIGVyciApe1xuICAgICAgICB0aHJvd0Vycm9yKCdmYWlsZWQgdG8gZ2V0IEpTT04gKCcgKyB1cmwgKyAnKScpXG4gICAgICB9XG4gICAgICBpbml0V2l0aEpTT04oanNvbilcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gZW1wdHlSZXN1bHRzQ29udGFpbmVyKCl7XG4gICAgb3B0aW9ucy5yZXN1bHRzQ29udGFpbmVyLmlubmVySFRNTCA9ICcnXG4gIH1cblxuICBmdW5jdGlvbiBhcHBlbmRUb1Jlc3VsdHNDb250YWluZXIodGV4dCl7XG4gICAgb3B0aW9ucy5yZXN1bHRzQ29udGFpbmVyLmlubmVySFRNTCArPSB0ZXh0XG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3RlcklucHV0KCl7XG4gICAgb3B0aW9ucy5zZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIGZ1bmN0aW9uKGUpe1xuXG4gICAgICAvLyB3aGl0ZWxpc3QgdGhlIGZvbGxvd2luZyBrZXljb2Rlc1xuICAgICAgdmFyIHdoaXRlbGlzdCA9IFsxMywxNiwyMCwzNywzOCwzOSw0MCw5MV07XG5cbiAgICAgIHZhciBrZXlDb2RlcyA9IHdoaXRlbGlzdC5tYXAoZnVuY3Rpb24oY29kZSl7XG4gICAgICAgIHJldHVybiAnZS53aGljaCAhPSAnICsgY29kZTtcbiAgICAgIH0pLmpvaW4oJyAmJiAnKTtcblxuICAgICAgLy8gaWYgdGhlIGtleSBwcmVzc2VkIGlzbid0IG9uZSBvZiB0aGUgZm9sbG93aW5nIHdoaXRlbGlzdGVkIGNvZGVzIHByZWNlZGVcbiAgICAgIGlmKCBldmFsKGtleUNvZGVzKSApe1xuICAgICAgICBlbXB0eVJlc3VsdHNDb250YWluZXIoKTtcbiAgICAgICAgaWYoIGUudGFyZ2V0LnZhbHVlLmxlbmd0aCA+IDAgKXtcbiAgICAgICAgICByZW5kZXIoIHJlcG9zaXRvcnkuc2VhcmNoKGUudGFyZ2V0LnZhbHVlKSApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyKHJlc3VsdHMpe1xuICAgIGlmKCByZXN1bHRzLmxlbmd0aCA9PT0gMCApe1xuICAgICAgcmV0dXJuIGFwcGVuZFRvUmVzdWx0c0NvbnRhaW5lcihvcHRpb25zLm5vUmVzdWx0c1RleHQpXG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgYXBwZW5kVG9SZXN1bHRzQ29udGFpbmVyKCB0ZW1wbGF0ZXIuY29tcGlsZShyZXN1bHRzW2ldKSApXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdGhyb3dFcnJvcihtZXNzYWdlKXsgdGhyb3cgbmV3IEVycm9yKCdTaW1wbGVKZWt5bGxTZWFyY2ggLS0tICcrIG1lc3NhZ2UpIH1cbn0pKHdpbmRvdywgZG9jdW1lbnQpOyIsIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1lcmdlOiBtZXJnZSxcbiAgaXNKU09OOiBpc0pTT04sXG59XG5cbmZ1bmN0aW9uIG1lcmdlKGRlZmF1bHRQYXJhbXMsIG1lcmdlUGFyYW1zKXtcbiAgdmFyIG1lcmdlZE9wdGlvbnMgPSB7fVxuICBmb3IodmFyIG9wdGlvbiBpbiBkZWZhdWx0UGFyYW1zKXtcbiAgICBtZXJnZWRPcHRpb25zW29wdGlvbl0gPSBkZWZhdWx0UGFyYW1zW29wdGlvbl1cbiAgICBpZiggbWVyZ2VQYXJhbXNbb3B0aW9uXSAhPT0gdW5kZWZpbmVkICl7XG4gICAgICBtZXJnZWRPcHRpb25zW29wdGlvbl0gPSBtZXJnZVBhcmFtc1tvcHRpb25dXG4gICAgfVxuICB9XG4gIHJldHVybiBtZXJnZWRPcHRpb25zXG59XG5cbmZ1bmN0aW9uIGlzSlNPTihqc29uKXtcbiAgdHJ5e1xuICAgIGlmKCBqc29uIGluc3RhbmNlb2YgT2JqZWN0ICYmIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoanNvbikpICl7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfWNhdGNoKGUpe1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iXX0= From 0c0ed5f1b979c3ae1f1a2494d10ce1cba38313de Mon Sep 17 00:00:00 2001 From: Eli Gladman Date: Wed, 27 Jan 2016 13:42:09 -0500 Subject: [PATCH 12/13] simplified conditional upon request --- src/index.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/index.js b/src/index.js index a8d932b..8f9b941 100644 --- a/src/index.js +++ b/src/index.js @@ -83,12 +83,8 @@ // whitelist the following keycodes var whitelist = [13,16,20,37,38,39,40,91]; - var keyCodes = whitelist.map(function(code){ - return 'e.which != ' + code; - }).join(' && '); - - // if the key pressed isn't one of the following whitelisted codes precede - if( eval(keyCodes) ){ + // if the key pressed isn't whitelisted continue + if( whitelist.indexOf(e.which) === -1 ) { emptyResultsContainer(); if( e.target.value.length > 0 ){ render( repository.search(e.target.value) ); From 6ad65dddc75f2916263616c75f26dd4ab47a2adf Mon Sep 17 00:00:00 2001 From: Eli Gladman Date: Wed, 27 Jan 2016 13:45:39 -0500 Subject: [PATCH 13/13] updated build to reflect latest changes --- dest/jekyll-search.js | 10 +++------- dest/jekyll-search.min.js | 2 +- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/dest/jekyll-search.js b/dest/jekyll-search.js index 3272d80..5d306ad 100644 --- a/dest/jekyll-search.js +++ b/dest/jekyll-search.js @@ -319,12 +319,8 @@ function compile(data){ // whitelist the following keycodes var whitelist = [13,16,20,37,38,39,40,91]; - var keyCodes = whitelist.map(function(code){ - return 'e.which != ' + code; - }).join(' && '); - - // if the key pressed isn't one of the following whitelisted codes precede - if( eval(keyCodes) ){ + // if the key pressed isn't whitelisted continue + if( whitelist.indexOf(e.which) === -1 ) { emptyResultsContainer(); if( e.target.value.length > 0 ){ render( repository.search(e.target.value) ); @@ -375,4 +371,4 @@ function isJSON(json){ } },{}]},{},[7]) -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL2VsaS9SZXBvc2l0b3JpZXMvU2ltcGxlLUpla3lsbC1TZWFyY2gvbm9kZV9tb2R1bGVzL2d1bHAtYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwiL2hvbWUvZWxpL1JlcG9zaXRvcmllcy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvSlNPTkxvYWRlci5qcyIsIi9ob21lL2VsaS9SZXBvc2l0b3JpZXMvU2ltcGxlLUpla3lsbC1TZWFyY2gvc3JjL09wdGlvbnNWYWxpZGF0b3IuanMiLCIvaG9tZS9lbGkvUmVwb3NpdG9yaWVzL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9SZXBvc2l0b3J5LmpzIiwiL2hvbWUvZWxpL1JlcG9zaXRvcmllcy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvU2VhcmNoU3RyYXRlZ2llcy9GdXp6eVNlYXJjaFN0cmF0ZWd5LmpzIiwiL2hvbWUvZWxpL1JlcG9zaXRvcmllcy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvU2VhcmNoU3RyYXRlZ2llcy9MaXRlcmFsU2VhcmNoU3RyYXRlZ3kuanMiLCIvaG9tZS9lbGkvUmVwb3NpdG9yaWVzL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9UZW1wbGF0ZXIuanMiLCIvaG9tZS9lbGkvUmVwb3NpdG9yaWVzL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9mYWtlX2ExYjM5NjlkLmpzIiwiL2hvbWUvZWxpL1JlcG9zaXRvcmllcy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvdXRpbHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKX12YXIgZj1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwoZi5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxmLGYuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbG9hZDogbG9hZFxufVxuXG5mdW5jdGlvbiBsb2FkKGxvY2F0aW9uLGNhbGxiYWNrKXtcbiAgdmFyIHhoclxuICBpZiggd2luZG93LlhNTEh0dHBSZXF1ZXN0ICl7XG4gICAgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcbiAgfWVsc2V7XG4gICAgeGhyID0gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJylcbiAgfVxuXG4gIHhoci5vcGVuKCdHRVQnLCBsb2NhdGlvbiwgdHJ1ZSlcblxuICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKXtcbiAgICBpZiAoIHhoci5yZWFkeVN0YXRlPT09NCAmJiB4aHIuc3RhdHVzPT09MjAwICl7XG4gICAgICB0cnl7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCkgKVxuICAgICAgfWNhdGNoKGVycil7XG4gICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB4aHIuc2VuZCgpXG59XG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gT3B0aW9uc1ZhbGlkYXRvcihwYXJhbXMpe1xuICBpZiggIXZhbGlkYXRlUGFyYW1zKHBhcmFtcykgKXtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJy0tIE9wdGlvbnNWYWxpZGF0b3I6IHJlcXVpcmVkIG9wdGlvbnMgbWlzc2luZycpXG4gIH1cbiAgaWYoICEodGhpcyBpbnN0YW5jZW9mIE9wdGlvbnNWYWxpZGF0b3IpICl7XG4gICAgcmV0dXJuIG5ldyBPcHRpb25zVmFsaWRhdG9yKHBhcmFtcylcbiAgfVxuXG4gIHZhciByZXF1aXJlZE9wdGlvbnMgPSBwYXJhbXMucmVxdWlyZWRcblxuICB0aGlzLmdldFJlcXVpcmVkT3B0aW9ucyA9IGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIHJlcXVpcmVkT3B0aW9uc1xuICB9XG5cbiAgdGhpcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKHBhcmFtZXRlcnMpe1xuICAgIHZhciBlcnJvcnMgPSBbXVxuICAgIHJlcXVpcmVkT3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHJlcXVpcmVkT3B0aW9uTmFtZSl7XG4gICAgICBpZiggcGFyYW1ldGVyc1tyZXF1aXJlZE9wdGlvbk5hbWVdID09PSB1bmRlZmluZWQgKXtcbiAgICAgICAgZXJyb3JzLnB1c2gocmVxdWlyZWRPcHRpb25OYW1lKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIGVycm9yc1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVQYXJhbXMocGFyYW1zKXtcbiAgICBpZiggIXBhcmFtcyApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zLnJlcXVpcmVkICE9PSB1bmRlZmluZWQgJiYgcGFyYW1zLnJlcXVpcmVkIGluc3RhbmNlb2YgQXJyYXlcbiAgfVxufSIsIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHB1dDpwdXQsXG4gIGNsZWFyOiBjbGVhcixcbiAgZ2V0OiBnZXQsXG4gIHNlYXJjaDogc2VhcmNoLFxuICBzZXRPcHRpb25zOiBzZXRPcHRpb25zXG59XG5cbnZhciBGdXp6eVNlYXJjaFN0cmF0ZWd5ID0gcmVxdWlyZSgnLi9TZWFyY2hTdHJhdGVnaWVzL0Z1enp5U2VhcmNoU3RyYXRlZ3knKVxudmFyIExpdGVyYWxTZWFyY2hTdHJhdGVneSA9IHJlcXVpcmUoJy4vU2VhcmNoU3RyYXRlZ2llcy9MaXRlcmFsU2VhcmNoU3RyYXRlZ3knKVxuXG52YXIgZGF0YSA9IFtdXG52YXIgb3B0ID0ge31cbm9wdC5mdXp6eSA9IGZhbHNlXG5vcHQubGltaXQgPSAxMFxub3B0LnNlYXJjaFN0cmF0ZWd5ID0gb3B0LmZ1enp5ID8gRnV6enlTZWFyY2hTdHJhdGVneSA6IExpdGVyYWxTZWFyY2hTdHJhdGVneVxuXG5cbmZ1bmN0aW9uIHB1dChkYXRhKXtcbiAgaWYoIGlzT2JqZWN0KGRhdGEpICl7XG4gICAgcmV0dXJuIGFkZE9iamVjdChkYXRhKVxuICB9XG4gIGlmKCBpc0FycmF5KGRhdGEpICl7XG4gICAgcmV0dXJuIGFkZEFycmF5KGRhdGEpXG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuZnVuY3Rpb24gY2xlYXIoKXtcbiAgZGF0YS5sZW5ndGggPSAwXG4gIHJldHVybiBkYXRhXG59XG5cbmZ1bmN0aW9uIGdldCgpe1xuICByZXR1cm4gZGF0YVxufVxuXG5cbmZ1bmN0aW9uIGlzT2JqZWN0KG9iail7IHJldHVybiAhIW9iaiAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgfVxuZnVuY3Rpb24gaXNBcnJheShvYmopeyByZXR1cm4gISFvYmogJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XScgfVxuXG5mdW5jdGlvbiBhZGRPYmplY3QoX2RhdGEpe1xuICBkYXRhLnB1c2goX2RhdGEpXG4gIHJldHVybiBkYXRhXG59XG5cbmZ1bmN0aW9uIGFkZEFycmF5KF9kYXRhKXtcbiAgdmFyIGFkZGVkID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBfZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgaWYoIGlzT2JqZWN0KF9kYXRhW2ldKSApe1xuICAgICAgYWRkZWQucHVzaChhZGRPYmplY3QoX2RhdGFbaV0pKVxuICAgIH1cbiAgfVxuICByZXR1cm4gYWRkZWRcbn1cblxuXG5cbmZ1bmN0aW9uIHNlYXJjaChjcml0KXtcbiAgaWYoICFjcml0ICl7XG4gICAgcmV0dXJuIFtdXG4gIH1cbiAgcmV0dXJuIGZpbmRNYXRjaGVzKGRhdGEsY3JpdCxvcHQuc2VhcmNoU3RyYXRlZ3ksb3B0KVxufVxuXG5mdW5jdGlvbiBzZXRPcHRpb25zKF9vcHQpe1xuICBvcHQgPSBfb3B0IHx8IHt9XG5cbiAgb3B0LmZ1enp5ID0gX29wdC5mdXp6eSB8fCBmYWxzZVxuICBvcHQubGltaXQgPSBfb3B0LmxpbWl0IHx8IDEwXG4gIG9wdC5zZWFyY2hTdHJhdGVneSA9IF9vcHQuZnV6enkgPyBGdXp6eVNlYXJjaFN0cmF0ZWd5IDogTGl0ZXJhbFNlYXJjaFN0cmF0ZWd5XG59XG5cbmZ1bmN0aW9uIGZpbmRNYXRjaGVzKGRhdGEsY3JpdCxzdHJhdGVneSxvcHQpe1xuICB2YXIgbWF0Y2hlcyA9IFtdXG4gIGZvcih2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aCAmJiBtYXRjaGVzLmxlbmd0aCA8IG9wdC5saW1pdDsgaSsrKSB7XG4gICAgdmFyIG1hdGNoID0gZmluZE1hdGNoZXNJbk9iamVjdChkYXRhW2ldLGNyaXQsc3RyYXRlZ3ksb3B0KVxuICAgIGlmKCBtYXRjaCApe1xuICAgICAgbWF0Y2hlcy5wdXNoKG1hdGNoKVxuICAgIH1cbiAgfVxuICByZXR1cm4gbWF0Y2hlc1xufVxuXG5mdW5jdGlvbiBmaW5kTWF0Y2hlc0luT2JqZWN0KG9iaixjcml0LHN0cmF0ZWd5LG9wdCl7XG4gIGZvcih2YXIga2V5IGluIG9iaikge1xuICAgIGlmKCAhaXNFeGNsdWRlZChvYmpba2V5XSwgb3B0LmV4Y2x1ZGUpICYmIHN0cmF0ZWd5Lm1hdGNoZXMob2JqW2tleV0sIGNyaXQpICl7XG4gICAgICByZXR1cm4gb2JqXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzRXhjbHVkZWQodGVybSwgZXhjbHVkZWRUZXJtcyl7XG4gIHZhciBleGNsdWRlZCA9IGZhbHNlXG4gIGV4Y2x1ZGVkVGVybXMgPSBleGNsdWRlZFRlcm1zIHx8IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpPGV4Y2x1ZGVkVGVybXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZXhjbHVkZWRUZXJtID0gZXhjbHVkZWRUZXJtc1tpXVxuICAgIGlmKCAhZXhjbHVkZWQgJiYgbmV3IFJlZ0V4cCh0ZXJtKS50ZXN0KGV4Y2x1ZGVkVGVybSkgKXtcbiAgICAgIGV4Y2x1ZGVkID0gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXhjbHVkZWRcbn1cbiIsIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSBuZXcgRnV6enlTZWFyY2hTdHJhdGVneSgpXG5cbmZ1bmN0aW9uIEZ1enp5U2VhcmNoU3RyYXRlZ3koKXtcbiAgZnVuY3Rpb24gbWFrZUZ1enp5KHN0cmluZyl7XG4gICAgc3RyaW5nID0gc3RyaW5nLnNwbGl0KCcnKS5qb2luKCcuKj8nKVxuICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKCc/PycsJz8nKVxuICAgIHJldHVybiBuZXcgUmVnRXhwKCBzdHJpbmcsICdnaScpXG4gIH1cblxuICB0aGlzLm1hdGNoZXMgPSBmdW5jdGlvbihzdHJpbmcsIGNyaXQpe1xuICAgIGlmKCB0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgY3JpdCAhPT0gJ3N0cmluZycgKXtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBzdHJpbmcgPSBzdHJpbmcudHJpbSgpXG4gICAgcmV0dXJuICEhbWFrZUZ1enp5KGNyaXQpLnRlc3Qoc3RyaW5nKVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gbmV3IExpdGVyYWxTZWFyY2hTdHJhdGVneSgpXG5cbmZ1bmN0aW9uIExpdGVyYWxTZWFyY2hTdHJhdGVneSgpe1xuICBmdW5jdGlvbiBtYXRjaGVzU3RyaW5nKHN0cmluZyxjcml0KXtcbiAgICByZXR1cm4gc3RyaW5nLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihjcml0LnRvTG93ZXJDYXNlKCkpID49IDBcbiAgfVxuXG4gIHRoaXMubWF0Y2hlcyA9IGZ1bmN0aW9uKHN0cmluZyxjcml0KXtcbiAgICBpZiggdHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycgKXtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBzdHJpbmcgPSBzdHJpbmcudHJpbSgpXG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpbmcoc3RyaW5nLCBjcml0KVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb21waWxlOiBjb21waWxlLFxuICBzZXRPcHRpb25zOiBzZXRPcHRpb25zXG59XG5cbnZhciBvcHRpb25zID0ge31cbm9wdGlvbnMucGF0dGVybiA9IC9cXHsoLio/KVxcfS9nXG5vcHRpb25zLnRlbXBsYXRlID0gJydcbm9wdGlvbnMubWlkZGxld2FyZSA9IGZ1bmN0aW9uKCl7fVxuXG5mdW5jdGlvbiBzZXRPcHRpb25zKF9vcHRpb25zKXtcbiAgb3B0aW9ucy5wYXR0ZXJuID0gX29wdGlvbnMucGF0dGVybiB8fCBvcHRpb25zLnBhdHRlcm5cbiAgb3B0aW9ucy50ZW1wbGF0ZSA9IF9vcHRpb25zLnRlbXBsYXRlIHx8IG9wdGlvbnMudGVtcGxhdGVcbiAgaWYoIHR5cGVvZiBfb3B0aW9ucy5taWRkbGV3YXJlID09PSAnZnVuY3Rpb24nICl7XG4gICAgb3B0aW9ucy5taWRkbGV3YXJlID0gX29wdGlvbnMubWlkZGxld2FyZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGUoZGF0YSl7XG4gIHJldHVybiBvcHRpb25zLnRlbXBsYXRlLnJlcGxhY2Uob3B0aW9ucy5wYXR0ZXJuLCBmdW5jdGlvbihtYXRjaCwgcHJvcCkge1xuICAgIHZhciB2YWx1ZSA9IG9wdGlvbnMubWlkZGxld2FyZShwcm9wLCBkYXRhW3Byb3BdLCBvcHRpb25zLnRlbXBsYXRlKVxuICAgIGlmKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICl7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFbcHJvcF0gfHwgbWF0Y2hcbiAgfSlcbn1cbiIsIjsoZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkKXtcbiAgJ3VzZSBzdHJpY3QnXG5cbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgc2VhcmNoSW5wdXQ6IG51bGwsXG4gICAgcmVzdWx0c0NvbnRhaW5lcjogbnVsbCxcbiAgICBqc29uOiBbXSxcbiAgICBzZWFyY2hSZXN1bHRUZW1wbGF0ZTogJzxsaT48YSBocmVmPVwie3VybH1cIiB0aXRsZT1cIntkZXNjfVwiPnt0aXRsZX08L2E+PC9saT4nLFxuICAgIHRlbXBsYXRlTWlkZGxld2FyZTogZnVuY3Rpb24oKXt9LFxuICAgIG5vUmVzdWx0c1RleHQ6ICdObyByZXN1bHRzIGZvdW5kJyxcbiAgICBsaW1pdDogMTAsXG4gICAgZnV6enk6IGZhbHNlLFxuICAgIGV4Y2x1ZGU6IFtdXG4gIH1cblxuICB2YXIgcmVxdWlyZWRPcHRpb25zID0gWydzZWFyY2hJbnB1dCcsJ3Jlc3VsdHNDb250YWluZXInLCdqc29uJ11cblxuICB2YXIgdGVtcGxhdGVyID0gcmVxdWlyZSgnLi9UZW1wbGF0ZXInKVxuICB2YXIgcmVwb3NpdG9yeSA9IHJlcXVpcmUoJy4vUmVwb3NpdG9yeScpXG4gIHZhciBqc29uTG9hZGVyID0gcmVxdWlyZSgnLi9KU09OTG9hZGVyJylcbiAgdmFyIG9wdGlvbnNWYWxpZGF0b3IgPSByZXF1aXJlKCcuL09wdGlvbnNWYWxpZGF0b3InKSh7XG4gICAgcmVxdWlyZWQ6IHJlcXVpcmVkT3B0aW9uc1xuICB9KVxuICB2YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJylcblxuICAvKlxuICAgIFB1YmxpYyBBUElcbiAgKi9cbiAgd2luZG93LlNpbXBsZUpla3lsbFNlYXJjaCA9IGZ1bmN0aW9uIFNpbXBsZUpla3lsbFNlYXJjaChfb3B0aW9ucyl7XG4gICAgdmFyIGVycm9ycyA9IG9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGUoX29wdGlvbnMpXG4gICAgaWYoIGVycm9ycy5sZW5ndGggPiAwICl7XG4gICAgICB0aHJvd0Vycm9yKCdZb3UgbXVzdCBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcgcmVxdWlyZWQgb3B0aW9uczogJyArIHJlcXVpcmVkT3B0aW9ucylcbiAgICB9XG5cbiAgICBvcHRpb25zID0gdXRpbHMubWVyZ2Uob3B0aW9ucywgX29wdGlvbnMpXG5cbiAgICB0ZW1wbGF0ZXIuc2V0T3B0aW9ucyh7XG4gICAgICB0ZW1wbGF0ZTogb3B0aW9ucy5zZWFyY2hSZXN1bHRUZW1wbGF0ZSxcbiAgICAgIG1pZGRsZXdhcmU6IG9wdGlvbnMudGVtcGxhdGVNaWRkbGV3YXJlLFxuICAgIH0pXG5cbiAgICByZXBvc2l0b3J5LnNldE9wdGlvbnMoe1xuICAgICAgZnV6enk6IG9wdGlvbnMuZnV6enksXG4gICAgICBsaW1pdDogb3B0aW9ucy5saW1pdCxcbiAgICB9KVxuXG4gICAgaWYoIHV0aWxzLmlzSlNPTihvcHRpb25zLmpzb24pICl7XG4gICAgICBpbml0V2l0aEpTT04ob3B0aW9ucy5qc29uKVxuICAgIH1lbHNle1xuICAgICAgaW5pdFdpdGhVUkwob3B0aW9ucy5qc29uKVxuICAgIH1cbiAgfVxuXG4gIC8vIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICB3aW5kb3cuU2ltcGxlSmVreWxsU2VhcmNoLmluaXQgPSB3aW5kb3cuU2ltcGxlSmVreWxsU2VhcmNoXG5cblxuICBmdW5jdGlvbiBpbml0V2l0aEpTT04oanNvbil7XG4gICAgcmVwb3NpdG9yeS5wdXQoanNvbilcbiAgICByZWdpc3RlcklucHV0KClcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRXaXRoVVJMKHVybCl7XG4gICAganNvbkxvYWRlci5sb2FkKHVybCwgZnVuY3Rpb24oZXJyLGpzb24pe1xuICAgICAgaWYoIGVyciApe1xuICAgICAgICB0aHJvd0Vycm9yKCdmYWlsZWQgdG8gZ2V0IEpTT04gKCcgKyB1cmwgKyAnKScpXG4gICAgICB9XG4gICAgICBpbml0V2l0aEpTT04oanNvbilcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gZW1wdHlSZXN1bHRzQ29udGFpbmVyKCl7XG4gICAgb3B0aW9ucy5yZXN1bHRzQ29udGFpbmVyLmlubmVySFRNTCA9ICcnXG4gIH1cblxuICBmdW5jdGlvbiBhcHBlbmRUb1Jlc3VsdHNDb250YWluZXIodGV4dCl7XG4gICAgb3B0aW9ucy5yZXN1bHRzQ29udGFpbmVyLmlubmVySFRNTCArPSB0ZXh0XG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3RlcklucHV0KCl7XG4gICAgb3B0aW9ucy5zZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIGZ1bmN0aW9uKGUpe1xuXG4gICAgICAvLyB3aGl0ZWxpc3QgdGhlIGZvbGxvd2luZyBrZXljb2Rlc1xuICAgICAgdmFyIHdoaXRlbGlzdCA9IFsxMywxNiwyMCwzNywzOCwzOSw0MCw5MV07XG5cbiAgICAgIHZhciBrZXlDb2RlcyA9IHdoaXRlbGlzdC5tYXAoZnVuY3Rpb24oY29kZSl7XG4gICAgICAgIHJldHVybiAnZS53aGljaCAhPSAnICsgY29kZTtcbiAgICAgIH0pLmpvaW4oJyAmJiAnKTtcblxuICAgICAgLy8gaWYgdGhlIGtleSBwcmVzc2VkIGlzbid0IG9uZSBvZiB0aGUgZm9sbG93aW5nIHdoaXRlbGlzdGVkIGNvZGVzIHByZWNlZGVcbiAgICAgIGlmKCBldmFsKGtleUNvZGVzKSApe1xuICAgICAgICBlbXB0eVJlc3VsdHNDb250YWluZXIoKTtcbiAgICAgICAgaWYoIGUudGFyZ2V0LnZhbHVlLmxlbmd0aCA+IDAgKXtcbiAgICAgICAgICByZW5kZXIoIHJlcG9zaXRvcnkuc2VhcmNoKGUudGFyZ2V0LnZhbHVlKSApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyKHJlc3VsdHMpe1xuICAgIGlmKCByZXN1bHRzLmxlbmd0aCA9PT0gMCApe1xuICAgICAgcmV0dXJuIGFwcGVuZFRvUmVzdWx0c0NvbnRhaW5lcihvcHRpb25zLm5vUmVzdWx0c1RleHQpXG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgYXBwZW5kVG9SZXN1bHRzQ29udGFpbmVyKCB0ZW1wbGF0ZXIuY29tcGlsZShyZXN1bHRzW2ldKSApXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdGhyb3dFcnJvcihtZXNzYWdlKXsgdGhyb3cgbmV3IEVycm9yKCdTaW1wbGVKZWt5bGxTZWFyY2ggLS0tICcrIG1lc3NhZ2UpIH1cbn0pKHdpbmRvdywgZG9jdW1lbnQpOyIsIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1lcmdlOiBtZXJnZSxcbiAgaXNKU09OOiBpc0pTT04sXG59XG5cbmZ1bmN0aW9uIG1lcmdlKGRlZmF1bHRQYXJhbXMsIG1lcmdlUGFyYW1zKXtcbiAgdmFyIG1lcmdlZE9wdGlvbnMgPSB7fVxuICBmb3IodmFyIG9wdGlvbiBpbiBkZWZhdWx0UGFyYW1zKXtcbiAgICBtZXJnZWRPcHRpb25zW29wdGlvbl0gPSBkZWZhdWx0UGFyYW1zW29wdGlvbl1cbiAgICBpZiggbWVyZ2VQYXJhbXNbb3B0aW9uXSAhPT0gdW5kZWZpbmVkICl7XG4gICAgICBtZXJnZWRPcHRpb25zW29wdGlvbl0gPSBtZXJnZVBhcmFtc1tvcHRpb25dXG4gICAgfVxuICB9XG4gIHJldHVybiBtZXJnZWRPcHRpb25zXG59XG5cbmZ1bmN0aW9uIGlzSlNPTihqc29uKXtcbiAgdHJ5e1xuICAgIGlmKCBqc29uIGluc3RhbmNlb2YgT2JqZWN0ICYmIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoanNvbikpICl7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfWNhdGNoKGUpe1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL2VsaS9SZXBvc2l0b3JpZXMvU2ltcGxlLUpla3lsbC1TZWFyY2gvbm9kZV9tb2R1bGVzL2d1bHAtYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwiL2hvbWUvZWxpL1JlcG9zaXRvcmllcy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvSlNPTkxvYWRlci5qcyIsIi9ob21lL2VsaS9SZXBvc2l0b3JpZXMvU2ltcGxlLUpla3lsbC1TZWFyY2gvc3JjL09wdGlvbnNWYWxpZGF0b3IuanMiLCIvaG9tZS9lbGkvUmVwb3NpdG9yaWVzL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9SZXBvc2l0b3J5LmpzIiwiL2hvbWUvZWxpL1JlcG9zaXRvcmllcy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvU2VhcmNoU3RyYXRlZ2llcy9GdXp6eVNlYXJjaFN0cmF0ZWd5LmpzIiwiL2hvbWUvZWxpL1JlcG9zaXRvcmllcy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvU2VhcmNoU3RyYXRlZ2llcy9MaXRlcmFsU2VhcmNoU3RyYXRlZ3kuanMiLCIvaG9tZS9lbGkvUmVwb3NpdG9yaWVzL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9UZW1wbGF0ZXIuanMiLCIvaG9tZS9lbGkvUmVwb3NpdG9yaWVzL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9mYWtlXzYwNjRjYzJhLmpzIiwiL2hvbWUvZWxpL1JlcG9zaXRvcmllcy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvdXRpbHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3Rocm93IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIil9dmFyIGY9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGYuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sZixmLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGxvYWQ6IGxvYWRcbn1cblxuZnVuY3Rpb24gbG9hZChsb2NhdGlvbixjYWxsYmFjayl7XG4gIHZhciB4aHJcbiAgaWYoIHdpbmRvdy5YTUxIdHRwUmVxdWVzdCApe1xuICAgIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG4gIH1lbHNle1xuICAgIHhociA9IG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpXG4gIH1cblxuICB4aHIub3BlbignR0VUJywgbG9jYXRpb24sIHRydWUpXG5cbiAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCl7XG4gICAgaWYgKCB4aHIucmVhZHlTdGF0ZT09PTQgJiYgeGhyLnN0YXR1cz09PTIwMCApe1xuICAgICAgdHJ5e1xuICAgICAgICBjYWxsYmFjayhudWxsLCBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpIClcbiAgICAgIH1jYXRjaChlcnIpe1xuICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgeGhyLnNlbmQoKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIE9wdGlvbnNWYWxpZGF0b3IocGFyYW1zKXtcbiAgaWYoICF2YWxpZGF0ZVBhcmFtcyhwYXJhbXMpICl7XG4gICAgdGhyb3cgbmV3IEVycm9yKCctLSBPcHRpb25zVmFsaWRhdG9yOiByZXF1aXJlZCBvcHRpb25zIG1pc3NpbmcnKVxuICB9XG4gIGlmKCAhKHRoaXMgaW5zdGFuY2VvZiBPcHRpb25zVmFsaWRhdG9yKSApe1xuICAgIHJldHVybiBuZXcgT3B0aW9uc1ZhbGlkYXRvcihwYXJhbXMpXG4gIH1cblxuICB2YXIgcmVxdWlyZWRPcHRpb25zID0gcGFyYW1zLnJlcXVpcmVkXG5cbiAgdGhpcy5nZXRSZXF1aXJlZE9wdGlvbnMgPSBmdW5jdGlvbigpe1xuICAgIHJldHVybiByZXF1aXJlZE9wdGlvbnNcbiAgfVxuXG4gIHRoaXMudmFsaWRhdGUgPSBmdW5jdGlvbihwYXJhbWV0ZXJzKXtcbiAgICB2YXIgZXJyb3JzID0gW11cbiAgICByZXF1aXJlZE9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihyZXF1aXJlZE9wdGlvbk5hbWUpe1xuICAgICAgaWYoIHBhcmFtZXRlcnNbcmVxdWlyZWRPcHRpb25OYW1lXSA9PT0gdW5kZWZpbmVkICl7XG4gICAgICAgIGVycm9ycy5wdXNoKHJlcXVpcmVkT3B0aW9uTmFtZSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBlcnJvcnNcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlUGFyYW1zKHBhcmFtcyl7XG4gICAgaWYoICFwYXJhbXMgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtcy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkICYmIHBhcmFtcy5yZXF1aXJlZCBpbnN0YW5jZW9mIEFycmF5XG4gIH1cbn0iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0ge1xuICBwdXQ6cHV0LFxuICBjbGVhcjogY2xlYXIsXG4gIGdldDogZ2V0LFxuICBzZWFyY2g6IHNlYXJjaCxcbiAgc2V0T3B0aW9uczogc2V0T3B0aW9uc1xufVxuXG52YXIgRnV6enlTZWFyY2hTdHJhdGVneSA9IHJlcXVpcmUoJy4vU2VhcmNoU3RyYXRlZ2llcy9GdXp6eVNlYXJjaFN0cmF0ZWd5JylcbnZhciBMaXRlcmFsU2VhcmNoU3RyYXRlZ3kgPSByZXF1aXJlKCcuL1NlYXJjaFN0cmF0ZWdpZXMvTGl0ZXJhbFNlYXJjaFN0cmF0ZWd5JylcblxudmFyIGRhdGEgPSBbXVxudmFyIG9wdCA9IHt9XG5vcHQuZnV6enkgPSBmYWxzZVxub3B0LmxpbWl0ID0gMTBcbm9wdC5zZWFyY2hTdHJhdGVneSA9IG9wdC5mdXp6eSA/IEZ1enp5U2VhcmNoU3RyYXRlZ3kgOiBMaXRlcmFsU2VhcmNoU3RyYXRlZ3lcblxuXG5mdW5jdGlvbiBwdXQoZGF0YSl7XG4gIGlmKCBpc09iamVjdChkYXRhKSApe1xuICAgIHJldHVybiBhZGRPYmplY3QoZGF0YSlcbiAgfVxuICBpZiggaXNBcnJheShkYXRhKSApe1xuICAgIHJldHVybiBhZGRBcnJheShkYXRhKVxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cbmZ1bmN0aW9uIGNsZWFyKCl7XG4gIGRhdGEubGVuZ3RoID0gMFxuICByZXR1cm4gZGF0YVxufVxuXG5mdW5jdGlvbiBnZXQoKXtcbiAgcmV0dXJuIGRhdGFcbn1cblxuXG5mdW5jdGlvbiBpc09iamVjdChvYmopeyByZXR1cm4gISFvYmogJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nIH1cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKXsgcmV0dXJuICEhb2JqICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nIH1cblxuZnVuY3Rpb24gYWRkT2JqZWN0KF9kYXRhKXtcbiAgZGF0YS5wdXNoKF9kYXRhKVxuICByZXR1cm4gZGF0YVxufVxuXG5mdW5jdGlvbiBhZGRBcnJheShfZGF0YSl7XG4gIHZhciBhZGRlZCA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgX2RhdGEubGVuZ3RoOyBpKyspe1xuICAgIGlmKCBpc09iamVjdChfZGF0YVtpXSkgKXtcbiAgICAgIGFkZGVkLnB1c2goYWRkT2JqZWN0KF9kYXRhW2ldKSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFkZGVkXG59XG5cblxuXG5mdW5jdGlvbiBzZWFyY2goY3JpdCl7XG4gIGlmKCAhY3JpdCApe1xuICAgIHJldHVybiBbXVxuICB9XG4gIHJldHVybiBmaW5kTWF0Y2hlcyhkYXRhLGNyaXQsb3B0LnNlYXJjaFN0cmF0ZWd5LG9wdClcbn1cblxuZnVuY3Rpb24gc2V0T3B0aW9ucyhfb3B0KXtcbiAgb3B0ID0gX29wdCB8fCB7fVxuXG4gIG9wdC5mdXp6eSA9IF9vcHQuZnV6enkgfHwgZmFsc2VcbiAgb3B0LmxpbWl0ID0gX29wdC5saW1pdCB8fCAxMFxuICBvcHQuc2VhcmNoU3RyYXRlZ3kgPSBfb3B0LmZ1enp5ID8gRnV6enlTZWFyY2hTdHJhdGVneSA6IExpdGVyYWxTZWFyY2hTdHJhdGVneVxufVxuXG5mdW5jdGlvbiBmaW5kTWF0Y2hlcyhkYXRhLGNyaXQsc3RyYXRlZ3ksb3B0KXtcbiAgdmFyIG1hdGNoZXMgPSBbXVxuICBmb3IodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGggJiYgbWF0Y2hlcy5sZW5ndGggPCBvcHQubGltaXQ7IGkrKykge1xuICAgIHZhciBtYXRjaCA9IGZpbmRNYXRjaGVzSW5PYmplY3QoZGF0YVtpXSxjcml0LHN0cmF0ZWd5LG9wdClcbiAgICBpZiggbWF0Y2ggKXtcbiAgICAgIG1hdGNoZXMucHVzaChtYXRjaClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXNcbn1cblxuZnVuY3Rpb24gZmluZE1hdGNoZXNJbk9iamVjdChvYmosY3JpdCxzdHJhdGVneSxvcHQpe1xuICBmb3IodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiggIWlzRXhjbHVkZWQob2JqW2tleV0sIG9wdC5leGNsdWRlKSAmJiBzdHJhdGVneS5tYXRjaGVzKG9ialtrZXldLCBjcml0KSApe1xuICAgICAgcmV0dXJuIG9ialxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0V4Y2x1ZGVkKHRlcm0sIGV4Y2x1ZGVkVGVybXMpe1xuICB2YXIgZXhjbHVkZWQgPSBmYWxzZVxuICBleGNsdWRlZFRlcm1zID0gZXhjbHVkZWRUZXJtcyB8fCBbXVxuICBmb3IgKHZhciBpID0gMDsgaTxleGNsdWRlZFRlcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGV4Y2x1ZGVkVGVybSA9IGV4Y2x1ZGVkVGVybXNbaV1cbiAgICBpZiggIWV4Y2x1ZGVkICYmIG5ldyBSZWdFeHAodGVybSkudGVzdChleGNsdWRlZFRlcm0pICl7XG4gICAgICBleGNsdWRlZCA9IHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV4Y2x1ZGVkXG59XG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gbmV3IEZ1enp5U2VhcmNoU3RyYXRlZ3koKVxuXG5mdW5jdGlvbiBGdXp6eVNlYXJjaFN0cmF0ZWd5KCl7XG4gIGZ1bmN0aW9uIG1ha2VGdXp6eShzdHJpbmcpe1xuICAgIHN0cmluZyA9IHN0cmluZy5zcGxpdCgnJykuam9pbignLio/JylcbiAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgnPz8nLCc/JylcbiAgICByZXR1cm4gbmV3IFJlZ0V4cCggc3RyaW5nLCAnZ2knKVxuICB9XG5cbiAgdGhpcy5tYXRjaGVzID0gZnVuY3Rpb24oc3RyaW5nLCBjcml0KXtcbiAgICBpZiggdHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIGNyaXQgIT09ICdzdHJpbmcnICl7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgc3RyaW5nID0gc3RyaW5nLnRyaW0oKVxuICAgIHJldHVybiAhIW1ha2VGdXp6eShjcml0KS50ZXN0KHN0cmluZylcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBMaXRlcmFsU2VhcmNoU3RyYXRlZ3koKVxuXG5mdW5jdGlvbiBMaXRlcmFsU2VhcmNoU3RyYXRlZ3koKXtcbiAgZnVuY3Rpb24gbWF0Y2hlc1N0cmluZyhzdHJpbmcsY3JpdCl7XG4gICAgcmV0dXJuIHN0cmluZy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoY3JpdC50b0xvd2VyQ2FzZSgpKSA+PSAwXG4gIH1cblxuICB0aGlzLm1hdGNoZXMgPSBmdW5jdGlvbihzdHJpbmcsY3JpdCl7XG4gICAgaWYoIHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnICl7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgc3RyaW5nID0gc3RyaW5nLnRyaW0oKVxuICAgIHJldHVybiBtYXRjaGVzU3RyaW5nKHN0cmluZywgY3JpdClcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29tcGlsZTogY29tcGlsZSxcbiAgc2V0T3B0aW9uczogc2V0T3B0aW9uc1xufVxuXG52YXIgb3B0aW9ucyA9IHt9XG5vcHRpb25zLnBhdHRlcm4gPSAvXFx7KC4qPylcXH0vZ1xub3B0aW9ucy50ZW1wbGF0ZSA9ICcnXG5vcHRpb25zLm1pZGRsZXdhcmUgPSBmdW5jdGlvbigpe31cblxuZnVuY3Rpb24gc2V0T3B0aW9ucyhfb3B0aW9ucyl7XG4gIG9wdGlvbnMucGF0dGVybiA9IF9vcHRpb25zLnBhdHRlcm4gfHwgb3B0aW9ucy5wYXR0ZXJuXG4gIG9wdGlvbnMudGVtcGxhdGUgPSBfb3B0aW9ucy50ZW1wbGF0ZSB8fCBvcHRpb25zLnRlbXBsYXRlXG4gIGlmKCB0eXBlb2YgX29wdGlvbnMubWlkZGxld2FyZSA9PT0gJ2Z1bmN0aW9uJyApe1xuICAgIG9wdGlvbnMubWlkZGxld2FyZSA9IF9vcHRpb25zLm1pZGRsZXdhcmVcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21waWxlKGRhdGEpe1xuICByZXR1cm4gb3B0aW9ucy50ZW1wbGF0ZS5yZXBsYWNlKG9wdGlvbnMucGF0dGVybiwgZnVuY3Rpb24obWF0Y2gsIHByb3ApIHtcbiAgICB2YXIgdmFsdWUgPSBvcHRpb25zLm1pZGRsZXdhcmUocHJvcCwgZGF0YVtwcm9wXSwgb3B0aW9ucy50ZW1wbGF0ZSlcbiAgICBpZiggdmFsdWUgIT09IHVuZGVmaW5lZCApe1xuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfVxuICAgIHJldHVybiBkYXRhW3Byb3BdIHx8IG1hdGNoXG4gIH0pXG59XG4iLCI7KGZ1bmN0aW9uKHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCl7XG4gICd1c2Ugc3RyaWN0J1xuXG4gIHZhciBvcHRpb25zID0ge1xuICAgIHNlYXJjaElucHV0OiBudWxsLFxuICAgIHJlc3VsdHNDb250YWluZXI6IG51bGwsXG4gICAganNvbjogW10sXG4gICAgc2VhcmNoUmVzdWx0VGVtcGxhdGU6ICc8bGk+PGEgaHJlZj1cInt1cmx9XCIgdGl0bGU9XCJ7ZGVzY31cIj57dGl0bGV9PC9hPjwvbGk+JyxcbiAgICB0ZW1wbGF0ZU1pZGRsZXdhcmU6IGZ1bmN0aW9uKCl7fSxcbiAgICBub1Jlc3VsdHNUZXh0OiAnTm8gcmVzdWx0cyBmb3VuZCcsXG4gICAgbGltaXQ6IDEwLFxuICAgIGZ1enp5OiBmYWxzZSxcbiAgICBleGNsdWRlOiBbXVxuICB9XG5cbiAgdmFyIHJlcXVpcmVkT3B0aW9ucyA9IFsnc2VhcmNoSW5wdXQnLCdyZXN1bHRzQ29udGFpbmVyJywnanNvbiddXG5cbiAgdmFyIHRlbXBsYXRlciA9IHJlcXVpcmUoJy4vVGVtcGxhdGVyJylcbiAgdmFyIHJlcG9zaXRvcnkgPSByZXF1aXJlKCcuL1JlcG9zaXRvcnknKVxuICB2YXIganNvbkxvYWRlciA9IHJlcXVpcmUoJy4vSlNPTkxvYWRlcicpXG4gIHZhciBvcHRpb25zVmFsaWRhdG9yID0gcmVxdWlyZSgnLi9PcHRpb25zVmFsaWRhdG9yJykoe1xuICAgIHJlcXVpcmVkOiByZXF1aXJlZE9wdGlvbnNcbiAgfSlcbiAgdmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpXG5cbiAgLypcbiAgICBQdWJsaWMgQVBJXG4gICovXG4gIHdpbmRvdy5TaW1wbGVKZWt5bGxTZWFyY2ggPSBmdW5jdGlvbiBTaW1wbGVKZWt5bGxTZWFyY2goX29wdGlvbnMpe1xuICAgIHZhciBlcnJvcnMgPSBvcHRpb25zVmFsaWRhdG9yLnZhbGlkYXRlKF9vcHRpb25zKVxuICAgIGlmKCBlcnJvcnMubGVuZ3RoID4gMCApe1xuICAgICAgdGhyb3dFcnJvcignWW91IG11c3Qgc3BlY2lmeSB0aGUgZm9sbG93aW5nIHJlcXVpcmVkIG9wdGlvbnM6ICcgKyByZXF1aXJlZE9wdGlvbnMpXG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IHV0aWxzLm1lcmdlKG9wdGlvbnMsIF9vcHRpb25zKVxuXG4gICAgdGVtcGxhdGVyLnNldE9wdGlvbnMoe1xuICAgICAgdGVtcGxhdGU6IG9wdGlvbnMuc2VhcmNoUmVzdWx0VGVtcGxhdGUsXG4gICAgICBtaWRkbGV3YXJlOiBvcHRpb25zLnRlbXBsYXRlTWlkZGxld2FyZSxcbiAgICB9KVxuXG4gICAgcmVwb3NpdG9yeS5zZXRPcHRpb25zKHtcbiAgICAgIGZ1enp5OiBvcHRpb25zLmZ1enp5LFxuICAgICAgbGltaXQ6IG9wdGlvbnMubGltaXQsXG4gICAgfSlcblxuICAgIGlmKCB1dGlscy5pc0pTT04ob3B0aW9ucy5qc29uKSApe1xuICAgICAgaW5pdFdpdGhKU09OKG9wdGlvbnMuanNvbilcbiAgICB9ZWxzZXtcbiAgICAgIGluaXRXaXRoVVJMKG9wdGlvbnMuanNvbilcbiAgICB9XG4gIH1cblxuICAvLyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgd2luZG93LlNpbXBsZUpla3lsbFNlYXJjaC5pbml0ID0gd2luZG93LlNpbXBsZUpla3lsbFNlYXJjaFxuXG5cbiAgZnVuY3Rpb24gaW5pdFdpdGhKU09OKGpzb24pe1xuICAgIHJlcG9zaXRvcnkucHV0KGpzb24pXG4gICAgcmVnaXN0ZXJJbnB1dCgpXG4gIH1cblxuICBmdW5jdGlvbiBpbml0V2l0aFVSTCh1cmwpe1xuICAgIGpzb25Mb2FkZXIubG9hZCh1cmwsIGZ1bmN0aW9uKGVycixqc29uKXtcbiAgICAgIGlmKCBlcnIgKXtcbiAgICAgICAgdGhyb3dFcnJvcignZmFpbGVkIHRvIGdldCBKU09OICgnICsgdXJsICsgJyknKVxuICAgICAgfVxuICAgICAgaW5pdFdpdGhKU09OKGpzb24pXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGVtcHR5UmVzdWx0c0NvbnRhaW5lcigpe1xuICAgIG9wdGlvbnMucmVzdWx0c0NvbnRhaW5lci5pbm5lckhUTUwgPSAnJ1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwZW5kVG9SZXN1bHRzQ29udGFpbmVyKHRleHQpe1xuICAgIG9wdGlvbnMucmVzdWx0c0NvbnRhaW5lci5pbm5lckhUTUwgKz0gdGV4dFxuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJJbnB1dCgpe1xuICAgIG9wdGlvbnMuc2VhcmNoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBmdW5jdGlvbihlKXtcblxuICAgICAgLy8gd2hpdGVsaXN0IHRoZSBmb2xsb3dpbmcga2V5Y29kZXNcbiAgICAgIHZhciB3aGl0ZWxpc3QgPSBbMTMsMTYsMjAsMzcsMzgsMzksNDAsOTFdO1xuXG4gICAgICAvLyBpZiB0aGUga2V5IHByZXNzZWQgaXNuJ3Qgd2hpdGVsaXN0ZWQgY29udGludWVcbiAgICAgIGlmKCB3aGl0ZWxpc3QuaW5kZXhPZihlLndoaWNoKSA9PT0gLTEgKSB7XG4gICAgICAgIGVtcHR5UmVzdWx0c0NvbnRhaW5lcigpO1xuICAgICAgICBpZiggZS50YXJnZXQudmFsdWUubGVuZ3RoID4gMCApe1xuICAgICAgICAgIHJlbmRlciggcmVwb3NpdG9yeS5zZWFyY2goZS50YXJnZXQudmFsdWUpICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXIocmVzdWx0cyl7XG4gICAgaWYoIHJlc3VsdHMubGVuZ3RoID09PSAwICl7XG4gICAgICByZXR1cm4gYXBwZW5kVG9SZXN1bHRzQ29udGFpbmVyKG9wdGlvbnMubm9SZXN1bHRzVGV4dClcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcHBlbmRUb1Jlc3VsdHNDb250YWluZXIoIHRlbXBsYXRlci5jb21waWxlKHJlc3VsdHNbaV0pIClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0aHJvd0Vycm9yKG1lc3NhZ2UpeyB0aHJvdyBuZXcgRXJyb3IoJ1NpbXBsZUpla3lsbFNlYXJjaCAtLS0gJysgbWVzc2FnZSkgfVxufSkod2luZG93LCBkb2N1bWVudCk7IiwiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWVyZ2U6IG1lcmdlLFxuICBpc0pTT046IGlzSlNPTixcbn1cblxuZnVuY3Rpb24gbWVyZ2UoZGVmYXVsdFBhcmFtcywgbWVyZ2VQYXJhbXMpe1xuICB2YXIgbWVyZ2VkT3B0aW9ucyA9IHt9XG4gIGZvcih2YXIgb3B0aW9uIGluIGRlZmF1bHRQYXJhbXMpe1xuICAgIG1lcmdlZE9wdGlvbnNbb3B0aW9uXSA9IGRlZmF1bHRQYXJhbXNbb3B0aW9uXVxuICAgIGlmKCBtZXJnZVBhcmFtc1tvcHRpb25dICE9PSB1bmRlZmluZWQgKXtcbiAgICAgIG1lcmdlZE9wdGlvbnNbb3B0aW9uXSA9IG1lcmdlUGFyYW1zW29wdGlvbl1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1lcmdlZE9wdGlvbnNcbn1cblxuZnVuY3Rpb24gaXNKU09OKGpzb24pe1xuICB0cnl7XG4gICAgaWYoIGpzb24gaW5zdGFuY2VvZiBPYmplY3QgJiYgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShqc29uKSkgKXtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9Y2F0Y2goZSl7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiJdfQ== diff --git a/dest/jekyll-search.min.js b/dest/jekyll-search.min.js index b6eedd2..5405217 100644 --- a/dest/jekyll-search.min.js +++ b/dest/jekyll-search.min.js @@ -1 +1 @@ -!function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a="function"==typeof require&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o=0}this.matches=function(string,crit){return"string"!=typeof string?!1:(string=string.trim(),matchesString(string,crit))}}module.exports=new LiteralSearchStrategy},{}],6:[function(require,module,exports){"use strict";function setOptions(_options){options.pattern=_options.pattern||options.pattern,options.template=_options.template||options.template,"function"==typeof _options.middleware&&(options.middleware=_options.middleware)}function compile(data){return options.template.replace(options.pattern,function(match,prop){var value=options.middleware(prop,data[prop],options.template);return void 0!==value?value:data[prop]||match})}module.exports={compile:compile,setOptions:setOptions};var options={};options.pattern=/\{(.*?)\}/g,options.template="",options.middleware=function(){}},{}],7:[function(require,module,exports){!function(window,document,undefined){"use strict";function initWithJSON(json){repository.put(json),registerInput()}function initWithURL(url){jsonLoader.load(url,function(err,json){err&&throwError("failed to get JSON ("+url+")"),initWithJSON(json)})}function emptyResultsContainer(){options.resultsContainer.innerHTML=""}function appendToResultsContainer(text){options.resultsContainer.innerHTML+=text}function registerInput(){options.searchInput.addEventListener("keyup",function(e){var whitelist=[13,16,20,37,38,39,40,91],keyCodes=whitelist.map(function(code){return"e.which != "+code}).join(" && ");eval(keyCodes)&&(emptyResultsContainer(),e.target.value.length>0&&render(repository.search(e.target.value)))})}function render(results){if(0===results.length)return appendToResultsContainer(options.noResultsText);for(var i=0;i{title}',templateMiddleware:function(){},noResultsText:"No results found",limit:10,fuzzy:!1,exclude:[]},requiredOptions=["searchInput","resultsContainer","json"],templater=require("./Templater"),repository=require("./Repository"),jsonLoader=require("./JSONLoader"),optionsValidator=require("./OptionsValidator")({required:requiredOptions}),utils=require("./utils");window.SimpleJekyllSearch=function(_options){var errors=optionsValidator.validate(_options);errors.length>0&&throwError("You must specify the following required options: "+requiredOptions),options=utils.merge(options,_options),templater.setOptions({template:options.searchResultTemplate,middleware:options.templateMiddleware}),repository.setOptions({fuzzy:options.fuzzy,limit:options.limit}),utils.isJSON(options.json)?initWithJSON(options.json):initWithURL(options.json)},window.SimpleJekyllSearch.init=window.SimpleJekyllSearch}(window,document)},{"./JSONLoader":1,"./OptionsValidator":2,"./Repository":3,"./Templater":6,"./utils":8}],8:[function(require,module,exports){"use strict";function merge(defaultParams,mergeParams){var mergedOptions={};for(var option in defaultParams)mergedOptions[option]=defaultParams[option],void 0!==mergeParams[option]&&(mergedOptions[option]=mergeParams[option]);return mergedOptions}function isJSON(json){try{return json instanceof Object&&JSON.parse(JSON.stringify(json))?!0:!1}catch(e){return!1}}module.exports={merge:merge,isJSON:isJSON}},{}]},{},[7]); \ No newline at end of file +!function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a="function"==typeof require&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o=0}this.matches=function(string,crit){return"string"!=typeof string?!1:(string=string.trim(),matchesString(string,crit))}}module.exports=new LiteralSearchStrategy},{}],6:[function(require,module,exports){"use strict";function setOptions(_options){options.pattern=_options.pattern||options.pattern,options.template=_options.template||options.template,"function"==typeof _options.middleware&&(options.middleware=_options.middleware)}function compile(data){return options.template.replace(options.pattern,function(match,prop){var value=options.middleware(prop,data[prop],options.template);return void 0!==value?value:data[prop]||match})}module.exports={compile:compile,setOptions:setOptions};var options={};options.pattern=/\{(.*?)\}/g,options.template="",options.middleware=function(){}},{}],7:[function(require,module,exports){!function(window,document,undefined){"use strict";function initWithJSON(json){repository.put(json),registerInput()}function initWithURL(url){jsonLoader.load(url,function(err,json){err&&throwError("failed to get JSON ("+url+")"),initWithJSON(json)})}function emptyResultsContainer(){options.resultsContainer.innerHTML=""}function appendToResultsContainer(text){options.resultsContainer.innerHTML+=text}function registerInput(){options.searchInput.addEventListener("keyup",function(e){var whitelist=[13,16,20,37,38,39,40,91];-1===whitelist.indexOf(e.which)&&(emptyResultsContainer(),e.target.value.length>0&&render(repository.search(e.target.value)))})}function render(results){if(0===results.length)return appendToResultsContainer(options.noResultsText);for(var i=0;i{title}',templateMiddleware:function(){},noResultsText:"No results found",limit:10,fuzzy:!1,exclude:[]},requiredOptions=["searchInput","resultsContainer","json"],templater=require("./Templater"),repository=require("./Repository"),jsonLoader=require("./JSONLoader"),optionsValidator=require("./OptionsValidator")({required:requiredOptions}),utils=require("./utils");window.SimpleJekyllSearch=function(_options){var errors=optionsValidator.validate(_options);errors.length>0&&throwError("You must specify the following required options: "+requiredOptions),options=utils.merge(options,_options),templater.setOptions({template:options.searchResultTemplate,middleware:options.templateMiddleware}),repository.setOptions({fuzzy:options.fuzzy,limit:options.limit}),utils.isJSON(options.json)?initWithJSON(options.json):initWithURL(options.json)},window.SimpleJekyllSearch.init=window.SimpleJekyllSearch}(window,document)},{"./JSONLoader":1,"./OptionsValidator":2,"./Repository":3,"./Templater":6,"./utils":8}],8:[function(require,module,exports){"use strict";function merge(defaultParams,mergeParams){var mergedOptions={};for(var option in defaultParams)mergedOptions[option]=defaultParams[option],void 0!==mergeParams[option]&&(mergedOptions[option]=mergeParams[option]);return mergedOptions}function isJSON(json){try{return json instanceof Object&&JSON.parse(JSON.stringify(json))?!0:!1}catch(e){return!1}}module.exports={merge:merge,isJSON:isJSON}},{}]},{},[7]); \ No newline at end of file