UNPKG

divertr

Version:
31 lines (28 loc) 14 kB
/* ** Divertr -- Text Diversion Filter ** Copyright (c) 1997-2021 Dr. Ralf S. Engelschall <rse@engelschall.com> ** ** Permission is hereby granted, free of charge, to any person obtaining ** a copy of this software and associated documentation files (the ** "Software"), to deal in the Software without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Software, and to ** permit persons to whom the Software is furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Software. ** ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Divertr = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(_dereq_,module,exports){ "use strict";var _tokenizr=_interopRequireDefault(_dereq_("tokenizr"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var divertr=function(e,n){var t={std:{regexDump:/-\{([a-zA-Z][a-zA-Z0-9_]*)\}-/,regexEnter:/-\{(\!?)([a-zA-Z][a-zA-Z0-9_]*)(\!?):/,regexLeave:/:((?:[a-zA-Z][a-zA-Z0-9_]*)?)\}-/},alt:{regexDump:/-\{([a-zA-Z][a-zA-Z0-9_]*)\}-/,regexEnter:/-(\!?)([a-zA-Z][a-zA-Z0-9_]*)(\!?)->/,regexLeave:/<-((?:[a-zA-Z][a-zA-Z0-9_]*)?)-/},xml:{regexDump:/<([a-zA-Z][a-zA-Z0-9_]*)\/>/,regexEnter:/<(\!?)([a-zA-Z][a-zA-Z0-9_]*)(\!?)>/,regexLeave:/<\/((?:[a-zA-Z][a-zA-Z0-9_]*)?)>/},mustache:{regexDump:/\{\{([a-zA-Z][a-zA-Z0-9_]*)\}\}/,regexEnter:/\{\{#(\!?)([a-zA-Z][a-zA-Z0-9_]*)(\!?)\}\}/,regexLeave:/\{\{\/((?:[a-zA-Z][a-zA-Z0-9_]*)?)\}\}/},rpm:{regexDump:/%\{([a-zA-Z][a-zA-Z0-9_]*)\}/,regexEnter:/%\{(\!?)([a-zA-Z][a-zA-Z0-9_]*)(\!?):/,regexLeave:/:((?:[a-zA-Z][a-zA-Z0-9_]*)?)\}/},"wml-macro":{regexDump:/\{#([a-zA-Z][a-zA-Z0-9_]*)#\}/,regexEnter:/\{#(\!?)([a-zA-Z][a-zA-Z0-9_]*)(\!?)#:/,regexLeave:/:#((?:[a-zA-Z][a-zA-Z0-9_]*)?)#\}/},"wml-diversion":{regexDump:/<<([a-zA-Z][a-zA-Z0-9_]*)>>/,regexEnter:/\.\.(\!?)([a-zA-Z][a-zA-Z0-9_]*)(\!?)>>/,regexLeave:/<<((?:[a-zA-Z][a-zA-Z0-9_]*)?)\.\./}};if("string"==typeof(n=Object.assign({},{syntax:"std",debug:!1},n)).syntax){if(void 0===t[n.syntax])throw new Error("unknown pre-defined syntax");n.syntax=t[n.syntax]}if("object"!==_typeof(n.syntax))throw new Error("invalid syntax option");if("string"==typeof n.syntax.regexDump&&(n.syntax.regexDump=new RegExp(n.syntax.regexDump)),!("object"===_typeof(n.syntax.regexDump)&&n.syntax.regexDump instanceof RegExp))throw new Error("invalid syntax.regexDump option (RegExp or String expected)");if("string"==typeof n.syntax.regexEnter&&(n.syntax.regexEnter=new RegExp(n.syntax.regexEnter)),!("object"===_typeof(n.syntax.regexEnter)&&n.syntax.regexEnter instanceof RegExp))throw new Error("invalid syntax.regexEnter option (RegExp or String expected)");if("string"==typeof n.syntax.regexLeave&&(n.syntax.regexLeave=new RegExp(n.syntax.regexLeave)),!("object"===_typeof(n.syntax.regexLeave)&&n.syntax.regexLeave instanceof RegExp))throw new Error("invalid syntax.regexLeave option (RegExp or String expected)");var r={location:"main",stack:["null"],buffer:{null:[],main:[]},overwrite:{}},a=new _tokenizr.default;a.rule(n.syntax.regexDump,function(e,n){e.accept("DUMP",{name:n[1]})}),a.rule(n.syntax.regexEnter,function(e,n){e.accept("ENTER",{name:n[2],rewindNow:""!==n[1],rewindNext:""!==n[3]})}),a.rule(n.syntax.regexLeave,function(e,n){e.accept("LEAVE",{name:n[1]})});var o="";a.before(function(e,n,t){"plaintext"!==t.name&&""!==o&&(e.accept("PLAINTEXT",o),o="")}),a.rule(/(?:.|\r?\n)/,function(e,n){o+=n[0],e.ignore()},"plaintext"),a.finish(function(e){""!==o&&e.accept("PLAINTEXT",o)}),a.input(e),a.debug(n.debug),a.tokens().forEach(function(e){if(e.isA("DUMP")){var n=e.value.name;if(void 0===r.buffer[n]&&(r.buffer[n]=[]),r.buffer[r.location]===r.buffer[n])throw new Error('self-reference of location "'.concat(r.location,'"'));r.buffer[r.location].push(r.buffer[n])}else if(e.isA("ENTER")){r.stack.push(r.location),r.location=e.value.name;var t=e.value.rewindNow,a=e.value.rewindNext;if(void 0===r.buffer[r.location]&&(r.buffer[r.location]=[]),r.overwrite[r.location]&&(t=!0,r.overwrite[r.location]=!1),a&&(r.overwrite[r.location]=!0),t)for(;r.buffer[r.location].length>0;)r.buffer[r.location].pop()}else if(e.isA("LEAVE")){if(0===r.stack.length)throw new Error('cannot leave "null" location (already in "null" location)');var o=e.value.name;if("null"===o)throw new Error('cannot leave "null" location (not allowed at all)');if(""!==o&&o!==r.location){var i=r.stack.indexOf(o);if(-1===i)throw new Error('no such entered location "'.concat(o,'"'));r.stack.splice(i),r.location=r.stack.pop()}else r.location=r.stack.pop()}else e.isA("PLAINTEXT")&&r.buffer[r.location].push(e.value)}),n.debug&&console.log("INTERNAL STATE AFTER PASS 1:\n"+JSON.stringify(r,null," "));return r.stack=[],function e(n){r.stack.forEach(function(e){if(e===n){var t="unknown";throw Object.keys(r.buffer).forEach(function(e){r.buffer[e]===n&&(t=e)}),new Error('recursion through location "'.concat(t,'"'))}}),r.stack.push(n);var t="";return n.forEach(function(n){"object"===_typeof(n)?t+=e(n):t+=n}),r.stack.pop(),t}(r.buffer.main)};module.exports=divertr; },{"tokenizr":"tokenizr"}]},{},[1])(1) }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvZGl2ZXJ0ci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiXCJ1c2Ugc3RyaWN0XCI7dmFyIF90b2tlbml6cj1faW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJ0b2tlbml6clwiKSk7ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gX3R5cGVvZihlKXtyZXR1cm4oX3R5cGVvZj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSkoZSl9dmFyIGRpdmVydHI9ZnVuY3Rpb24oZSxuKXt2YXIgdD17c3RkOntyZWdleER1bXA6Ly1cXHsoW2EtekEtWl1bYS16QS1aMC05X10qKVxcfS0vLHJlZ2V4RW50ZXI6Ly1cXHsoXFwhPykoW2EtekEtWl1bYS16QS1aMC05X10qKShcXCE/KTovLHJlZ2V4TGVhdmU6LzooKD86W2EtekEtWl1bYS16QS1aMC05X10qKT8pXFx9LS99LGFsdDp7cmVnZXhEdW1wOi8tXFx7KFthLXpBLVpdW2EtekEtWjAtOV9dKilcXH0tLyxyZWdleEVudGVyOi8tKFxcIT8pKFthLXpBLVpdW2EtekEtWjAtOV9dKikoXFwhPyktPi8scmVnZXhMZWF2ZTovPC0oKD86W2EtekEtWl1bYS16QS1aMC05X10qKT8pLS99LHhtbDp7cmVnZXhEdW1wOi88KFthLXpBLVpdW2EtekEtWjAtOV9dKilcXC8+LyxyZWdleEVudGVyOi88KFxcIT8pKFthLXpBLVpdW2EtekEtWjAtOV9dKikoXFwhPyk+LyxyZWdleExlYXZlOi88XFwvKCg/OlthLXpBLVpdW2EtekEtWjAtOV9dKik/KT4vfSxtdXN0YWNoZTp7cmVnZXhEdW1wOi9cXHtcXHsoW2EtekEtWl1bYS16QS1aMC05X10qKVxcfVxcfS8scmVnZXhFbnRlcjovXFx7XFx7IyhcXCE/KShbYS16QS1aXVthLXpBLVowLTlfXSopKFxcIT8pXFx9XFx9LyxyZWdleExlYXZlOi9cXHtcXHtcXC8oKD86W2EtekEtWl1bYS16QS1aMC05X10qKT8pXFx9XFx9L30scnBtOntyZWdleER1bXA6LyVcXHsoW2EtekEtWl1bYS16QS1aMC05X10qKVxcfS8scmVnZXhFbnRlcjovJVxceyhcXCE/KShbYS16QS1aXVthLXpBLVowLTlfXSopKFxcIT8pOi8scmVnZXhMZWF2ZTovOigoPzpbYS16QS1aXVthLXpBLVowLTlfXSopPylcXH0vfSxcIndtbC1tYWNyb1wiOntyZWdleER1bXA6L1xceyMoW2EtekEtWl1bYS16QS1aMC05X10qKSNcXH0vLHJlZ2V4RW50ZXI6L1xceyMoXFwhPykoW2EtekEtWl1bYS16QS1aMC05X10qKShcXCE/KSM6LyxyZWdleExlYXZlOi86IygoPzpbYS16QS1aXVthLXpBLVowLTlfXSopPykjXFx9L30sXCJ3bWwtZGl2ZXJzaW9uXCI6e3JlZ2V4RHVtcDovPDwoW2EtekEtWl1bYS16QS1aMC05X10qKT4+LyxyZWdleEVudGVyOi9cXC5cXC4oXFwhPykoW2EtekEtWl1bYS16QS1aMC05X10qKShcXCE/KT4+LyxyZWdleExlYXZlOi88PCgoPzpbYS16QS1aXVthLXpBLVowLTlfXSopPylcXC5cXC4vfX07aWYoXCJzdHJpbmdcIj09dHlwZW9mKG49T2JqZWN0LmFzc2lnbih7fSx7c3ludGF4Olwic3RkXCIsZGVidWc6ITF9LG4pKS5zeW50YXgpe2lmKHZvaWQgMD09PXRbbi5zeW50YXhdKXRocm93IG5ldyBFcnJvcihcInVua25vd24gcHJlLWRlZmluZWQgc3ludGF4XCIpO24uc3ludGF4PXRbbi5zeW50YXhdfWlmKFwib2JqZWN0XCIhPT1fdHlwZW9mKG4uc3ludGF4KSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHN5bnRheCBvcHRpb25cIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4uc3ludGF4LnJlZ2V4RHVtcCYmKG4uc3ludGF4LnJlZ2V4RHVtcD1uZXcgUmVnRXhwKG4uc3ludGF4LnJlZ2V4RHVtcCkpLCEoXCJvYmplY3RcIj09PV90eXBlb2Yobi5zeW50YXgucmVnZXhEdW1wKSYmbi5zeW50YXgucmVnZXhEdW1wIGluc3RhbmNlb2YgUmVnRXhwKSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHN5bnRheC5yZWdleER1bXAgb3B0aW9uIChSZWdFeHAgb3IgU3RyaW5nIGV4cGVjdGVkKVwiKTtpZihcInN0cmluZ1wiPT10eXBlb2Ygbi5zeW50YXgucmVnZXhFbnRlciYmKG4uc3ludGF4LnJlZ2V4RW50ZXI9bmV3IFJlZ0V4cChuLnN5bnRheC5yZWdleEVudGVyKSksIShcIm9iamVjdFwiPT09X3R5cGVvZihuLnN5bnRheC5yZWdleEVudGVyKSYmbi5zeW50YXgucmVnZXhFbnRlciBpbnN0YW5jZW9mIFJlZ0V4cCkpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBzeW50YXgucmVnZXhFbnRlciBvcHRpb24gKFJlZ0V4cCBvciBTdHJpbmcgZXhwZWN0ZWQpXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuLnN5bnRheC5yZWdleExlYXZlJiYobi5zeW50YXgucmVnZXhMZWF2ZT1uZXcgUmVnRXhwKG4uc3ludGF4LnJlZ2V4TGVhdmUpKSwhKFwib2JqZWN0XCI9PT1fdHlwZW9mKG4uc3ludGF4LnJlZ2V4TGVhdmUpJiZuLnN5bnRheC5yZWdleExlYXZlIGluc3RhbmNlb2YgUmVnRXhwKSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHN5bnRheC5yZWdleExlYXZlIG9wdGlvbiAoUmVnRXhwIG9yIFN0cmluZyBleHBlY3RlZClcIik7dmFyIHI9e2xvY2F0aW9uOlwibWFpblwiLHN0YWNrOltcIm51bGxcIl0sYnVmZmVyOntudWxsOltdLG1haW46W119LG92ZXJ3cml0ZTp7fX0sYT1uZXcgX3Rva2VuaXpyLmRlZmF1bHQ7YS5ydWxlKG4uc3ludGF4LnJlZ2V4RHVtcCxmdW5jdGlvbihlLG4pe2UuYWNjZXB0KFwiRFVNUFwiLHtuYW1lOm5bMV19KX0pLGEucnVsZShuLnN5bnRheC5yZWdleEVudGVyLGZ1bmN0aW9uKGUsbil7ZS5hY2NlcHQoXCJFTlRFUlwiLHtuYW1lOm5bMl0scmV3aW5kTm93OlwiXCIhPT1uWzFdLHJld2luZE5leHQ6XCJcIiE9PW5bM119KX0pLGEucnVsZShuLnN5bnRheC5yZWdleExlYXZlLGZ1bmN0aW9uKGUsbil7ZS5hY2NlcHQoXCJMRUFWRVwiLHtuYW1lOm5bMV19KX0pO3ZhciBvPVwiXCI7YS5iZWZvcmUoZnVuY3Rpb24oZSxuLHQpe1wicGxhaW50ZXh0XCIhPT10Lm5hbWUmJlwiXCIhPT1vJiYoZS5hY2NlcHQoXCJQTEFJTlRFWFRcIixvKSxvPVwiXCIpfSksYS5ydWxlKC8oPzoufFxccj9cXG4pLyxmdW5jdGlvbihlLG4pe28rPW5bMF0sZS5pZ25vcmUoKX0sXCJwbGFpbnRleHRcIiksYS5maW5pc2goZnVuY3Rpb24oZSl7XCJcIiE9PW8mJmUuYWNjZXB0KFwiUExBSU5URVhUXCIsbyl9KSxhLmlucHV0KGUpLGEuZGVidWcobi5kZWJ1ZyksYS50b2tlbnMoKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUuaXNBKFwiRFVNUFwiKSl7dmFyIG49ZS52YWx1ZS5uYW1lO2lmKHZvaWQgMD09PXIuYnVmZmVyW25dJiYoci5idWZmZXJbbl09W10pLHIuYnVmZmVyW3IubG9jYXRpb25dPT09ci5idWZmZXJbbl0pdGhyb3cgbmV3IEVycm9yKCdzZWxmLXJlZmVyZW5jZSBvZiBsb2NhdGlvbiBcIicuY29uY2F0KHIubG9jYXRpb24sJ1wiJykpO3IuYnVmZmVyW3IubG9jYXRpb25dLnB1c2goci5idWZmZXJbbl0pfWVsc2UgaWYoZS5pc0EoXCJFTlRFUlwiKSl7ci5zdGFjay5wdXNoKHIubG9jYXRpb24pLHIubG9jYXRpb249ZS52YWx1ZS5uYW1lO3ZhciB0PWUudmFsdWUucmV3aW5kTm93LGE9ZS52YWx1ZS5yZXdpbmROZXh0O2lmKHZvaWQgMD09PXIuYnVmZmVyW3IubG9jYXRpb25dJiYoci5idWZmZXJbci5sb2NhdGlvbl09W10pLHIub3ZlcndyaXRlW3IubG9jYXRpb25dJiYodD0hMCxyLm92ZXJ3cml0ZVtyLmxvY2F0aW9uXT0hMSksYSYmKHIub3ZlcndyaXRlW3IubG9jYXRpb25dPSEwKSx0KWZvcig7ci5idWZmZXJbci5sb2NhdGlvbl0ubGVuZ3RoPjA7KXIuYnVmZmVyW3IubG9jYXRpb25dLnBvcCgpfWVsc2UgaWYoZS5pc0EoXCJMRUFWRVwiKSl7aWYoMD09PXIuc3RhY2subGVuZ3RoKXRocm93IG5ldyBFcnJvcignY2Fubm90IGxlYXZlIFwibnVsbFwiIGxvY2F0aW9uIChhbHJlYWR5IGluIFwibnVsbFwiIGxvY2F0aW9uKScpO3ZhciBvPWUudmFsdWUubmFtZTtpZihcIm51bGxcIj09PW8pdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgbGVhdmUgXCJudWxsXCIgbG9jYXRpb24gKG5vdCBhbGxvd2VkIGF0IGFsbCknKTtpZihcIlwiIT09byYmbyE9PXIubG9jYXRpb24pe3ZhciBpPXIuc3RhY2suaW5kZXhPZihvKTtpZigtMT09PWkpdGhyb3cgbmV3IEVycm9yKCdubyBzdWNoIGVudGVyZWQgbG9jYXRpb24gXCInLmNvbmNhdChvLCdcIicpKTtyLnN0YWNrLnNwbGljZShpKSxyLmxvY2F0aW9uPXIuc3RhY2sucG9wKCl9ZWxzZSByLmxvY2F0aW9uPXIuc3RhY2sucG9wKCl9ZWxzZSBlLmlzQShcIlBMQUlOVEVYVFwiKSYmci5idWZmZXJbci5sb2NhdGlvbl0ucHVzaChlLnZhbHVlKX0pLG4uZGVidWcmJmNvbnNvbGUubG9nKFwiSU5URVJOQUwgU1RBVEUgQUZURVIgUEFTUyAxOlxcblwiK0pTT04uc3RyaW5naWZ5KHIsbnVsbCxcIiAgICBcIikpO3JldHVybiByLnN0YWNrPVtdLGZ1bmN0aW9uIGUobil7ci5zdGFjay5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGU9PT1uKXt2YXIgdD1cInVua25vd25cIjt0aHJvdyBPYmplY3Qua2V5cyhyLmJ1ZmZlcikuZm9yRWFjaChmdW5jdGlvbihlKXtyLmJ1ZmZlcltlXT09PW4mJih0PWUpfSksbmV3IEVycm9yKCdyZWN1cnNpb24gdGhyb3VnaCBsb2NhdGlvbiBcIicuY29uY2F0KHQsJ1wiJykpfX0pLHIuc3RhY2sucHVzaChuKTt2YXIgdD1cIlwiO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24obil7XCJvYmplY3RcIj09PV90eXBlb2Yobik/dCs9ZShuKTp0Kz1ufSksci5zdGFjay5wb3AoKSx0fShyLmJ1ZmZlci5tYWluKX07bW9kdWxlLmV4cG9ydHM9ZGl2ZXJ0cjsiXX0=