vk-chat-bot
Version:
Package for easy creation of chat bots for VK communities (uses Callback API).
3 lines (2 loc) • 12.7 kB
JavaScript
"use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const chalk_1=__importDefault(require("chalk")),io_ts_reporters_1=require("io-ts-reporters"),Either_1=require("fp-ts/lib/Either");var MessageType;!function(e){e[e.Information=0]="Information",e[e.Warning=1]="Warning",e[e.Error=2]="Error",e[e.Response=3]="Response"}(MessageType=exports.MessageType||(exports.MessageType={}));const SRC_SPACING=5;class LogMessageBuilder{constructor(){this.messageFrom="log",this.messageType=MessageType.Information,this.messageText=""}from(e){return this.messageFrom=e,this}type(e){return this.messageType=e,this}text(e){return e instanceof Error?this.messageText=e.message:this.messageText=e,this}now(){return this.log(),this}log(){if(""===this.messageText)return;const e=[chalk_1.default.bold.blue("info"),chalk_1.default.bold.keyword("orange")("warn"),chalk_1.default.bold.red("err!"),chalk_1.default.bold.green("resp")][this.messageType];let t="";for(let e=0;e<SRC_SPACING-this.messageFrom.length;e+=1)t+=" ";const s=`${t}${this.messageFrom} ${e} ${this.messageText}`;if(this.messageType===MessageType.Error)throw new Error(s);console.log(s)}i(e){return this.type(MessageType.Information),this.text(e)}w(e){return this.type(MessageType.Warning),this.text(e)}e(e){return this.type(MessageType.Error),this.text(e)}r(e){return this.type(MessageType.Response),this.text(e)}}function log(){return new LogMessageBuilder}function validate(e,t,s){const r=e.decode(t),o=io_ts_reporters_1.reporter(r);if(Either_1.isLeft(r)){o.unshift("The following errors occured during validation in `"+s+"`:");let e=o.join("\n "),t=/Expecting (\w+) at (\w+)\.0 but instead got: (.+)\.\n *Expecting (\w+) at \w+\.1 but instead got: (.+)\./g;return e=e.replace(t,chalk_1.default`Expecting {bold.blue $1} or {bold.blue $4} at {bold.green $2} but instead got {bold.red $3}`),t=/Expecting (\w+) at (\w+) but instead got: (.+)\./g,e=e.replace(t,chalk_1.default`Expecting {bold.blue $1} at {bold.green $2} but instead got {bold.red $3}`),log().e(e).from("•_•").now(),null}return r.right}exports.log=log,exports.validate=validate;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImV4dHJhL2xvZy5qcyIsImV4dHJhL2xvZy50cyJdLCJuYW1lcyI6WyJfX2ltcG9ydERlZmF1bHQiLCJ0aGlzIiwibW9kIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImNoYWxrXzEiLCJyZXF1aXJlIiwiaW9fdHNfcmVwb3J0ZXJzXzEiLCJFaXRoZXJfMSIsIk1lc3NhZ2VUeXBlIiwiU1JDX1NQQUNJTkciLCJMb2dNZXNzYWdlQnVpbGRlciIsIltvYmplY3QgT2JqZWN0XSIsIm1lc3NhZ2VGcm9tIiwibWVzc2FnZVR5cGUiLCJJbmZvcm1hdGlvbiIsIm1lc3NhZ2VUZXh0IiwiZiIsInQiLCJFcnJvciIsIm1lc3NhZ2UiLCJsb2ciLCJtZXNzYWdlVHlwZVN0cmluZyIsImJvbGQiLCJibHVlIiwia2V5d29yZCIsInJlZCIsImdyZWVuIiwic3BhY2luZyIsImkiLCJsZW5ndGgiLCJjb25zb2xlIiwidHlwZSIsInRleHQiLCJXYXJuaW5nIiwiUmVzcG9uc2UiLCJ2YWxpZGF0ZSIsInZhbGlkYXRvciIsImRhdGEiLCJsb2NhdGlvbiIsInJlc3VsdCIsImRlY29kZSIsInJlcG9ydCIsInJlcG9ydGVyIiwiaXNMZWZ0IiwidW5zaGlmdCIsIm5ld1JlcG9ydCIsImpvaW4iLCJyZWdleCIsInJlcGxhY2UiLCJlIiwiZnJvbSIsIm5vdyIsInJpZ2h0Il0sIm1hcHBpbmdzIjoiQUFBQSxhQUNBLElBQUlBLGdCQUFtQkMsTUFBUUEsS0FBS0QsaUJBQW9CLFNBQVVFLEdBQzlELE9BQVFBLEdBQU9BLEVBQUlDLFdBQWNELEVBQU0sQ0FBRUUsUUFBV0YsSUFFeERHLE9BQU9DLGVBQWVDLFFBQVMsYUFBYyxDQUFFQyxPQUFPLElDSnRELE1BQUFDLFFBQUFULGdCQUFBVSxRQUFBLFVBRUFDLGtCQUFBRCxRQUFBLG1CQUNBRSxTQUFBRixRQUFBLG9CQUtBLElBQVlHLGFBQVosU0FBWUEsR0FDUkEsRUFBQUEsRUFBQSxZQUFBLEdBQUEsY0FDQUEsRUFBQUEsRUFBQSxRQUFBLEdBQUEsVUFDQUEsRUFBQUEsRUFBQSxNQUFBLEdBQUEsUUFDQUEsRUFBQUEsRUFBQSxTQUFBLEdBQUEsV0FKSixDQUFZQSxZQUFBTixRQUFBTSxjQUFBTixRQUFBTSxZQUFXLEtBVXZCLE1BQU1DLFlBQWMsRUFFcEIsTUFBTUMsa0JBQU5DLGNBSVdmLEtBQUFnQixZQUFjLE1BS2RoQixLQUFBaUIsWUFBMkJMLFlBQVlNLFlBS3ZDbEIsS0FBQW1CLFlBQWMsR0FLZEosS0FBS0ssR0FFUixPQURBcEIsS0FBS2dCLFlBQWNJLEVBQ1pwQixLQU1KZSxLQUFLTSxHQUVSLE9BREFyQixLQUFLaUIsWUFBY0ksRUFDWnJCLEtBTUplLEtBQUtNLEdBT1IsT0FOSUEsYUFBYUMsTUFDYnRCLEtBQUttQixZQUFjRSxFQUFFRSxRQUVyQnZCLEtBQUttQixZQUFjRSxFQUdoQnJCLEtBTUplLE1BRUgsT0FEQWYsS0FBS3dCLE1BQ0V4QixLQU1KZSxNQUNILEdBQXlCLEtBQXJCZixLQUFLbUIsWUFDTCxPQUdKLE1BQU1NLEVBQW9CLENBQ3RCakIsUUFBQUwsUUFBTXVCLEtBQUtDLEtBQUssUUFDaEJuQixRQUFBTCxRQUFNdUIsS0FBS0UsUUFBUSxTQUFuQnBCLENBQTZCLFFBQzdCQSxRQUFBTCxRQUFNdUIsS0FBS0csSUFBSSxRQUNmckIsUUFBQUwsUUFBTXVCLEtBQUtJLE1BQU0sU0FDbkI5QixLQUFLaUIsYUFFUCxJQUFJYyxFQUFVLEdBQ2QsSUFBSyxJQUFJQyxFQUFJLEVBQUdBLEVBQUluQixZQUFjYixLQUFLZ0IsWUFBWWlCLE9BQVFELEdBQUssRUFDNURELEdBQVcsSUFHZixNQUFNUixFQUFVLEdBQUdRLElBQVUvQixLQUFLZ0IsZUFBZVMsS0FBcUJ6QixLQUFLbUIsY0FFM0UsR0FBSW5CLEtBQUtpQixjQUFnQkwsWUFBWVUsTUFDakMsTUFBTSxJQUFJQSxNQUFNQyxHQUVoQlcsUUFBUVYsSUFBSUQsR0FVYlIsRUFBRU0sR0FFTCxPQURBckIsS0FBS21DLEtBQUt2QixZQUFZTSxhQUNmbEIsS0FBS29DLEtBQUtmLEdBU2ROLEVBQUVNLEdBRUwsT0FEQXJCLEtBQUttQyxLQUFLdkIsWUFBWXlCLFNBQ2ZyQyxLQUFLb0MsS0FBS2YsR0FTZE4sRUFBRU0sR0FFTCxPQURBckIsS0FBS21DLEtBQUt2QixZQUFZVSxPQUNmdEIsS0FBS29DLEtBQUtmLEdBU2ROLEVBQUVNLEdBRUwsT0FEQXJCLEtBQUttQyxLQUFLdkIsWUFBWTBCLFVBQ2Z0QyxLQUFLb0MsS0FBS2YsSUFPekIsU0FBZ0JHLE1BQ1osT0FBTyxJQUFJVixrQkFPZixTQUFnQnlCLFNBQWtCQyxFQUE0QkMsRUFBV0MsR0FDckUsTUFBTUMsRUFBU0gsRUFBVUksT0FBT0gsR0FDMUJJLEVBQVNuQyxrQkFBQW9DLFNBQVNILEdBRXhCLEdBQUloQyxTQUFBb0MsT0FBT0osR0FBUyxDQUNoQkUsRUFBT0csUUFBUSxzREFBd0ROLEVBQVcsTUFFbEYsSUFBSU8sRUFBWUosRUFBT0ssS0FBSyxtQkFDeEJDLEVBQVEsNEdBUVosT0FQQUYsRUFBWUEsRUFBVUcsUUFBUUQsRUFBTzNDLFFBQUFMLE9BQUssK0ZBRTFDZ0QsRUFBUSxvREFDUkYsRUFBWUEsRUFBVUcsUUFBUUQsRUFBTzNDLFFBQUFMLE9BQUssNkVBRTFDcUIsTUFBTTZCLEVBQUVKLEdBQVdLLEtBQUssT0FBT0MsTUFFeEIsS0FFUCxPQUFPWixFQUFPYSxNQTFCdEJsRCxRQUFBa0IsSUFBQUEsSUFRQWxCLFFBQUFpQyxTQUFBQSIsImZpbGUiOiJleHRyYS9sb2cuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJ1xuaW1wb3J0IHsgcmVwb3J0ZXIgfSBmcm9tICdpby10cy1yZXBvcnRlcnMnO1xuaW1wb3J0IHsgaXNMZWZ0IH0gZnJvbSAnZnAtdHMvbGliL0VpdGhlcidcblxuLyoqXG4gKiBUeXBlcyBvZiBsb2cgbWVzc2FnZXMuXG4gKi9cbmV4cG9ydCBlbnVtIE1lc3NhZ2VUeXBlIHtcbiAgICBJbmZvcm1hdGlvbiA9IDAsXG4gICAgV2FybmluZyA9IDEsXG4gICAgRXJyb3IgPSAyLFxuICAgIFJlc3BvbnNlID0gMyxcbn1cblxuLyoqXG4gKiBTcGFjaW5nIG9mIHRoZSBtZXNzYWdlIHNvdXJjZS5cbiAqL1xuY29uc3QgU1JDX1NQQUNJTkcgPSA1O1xuXG5jbGFzcyBMb2dNZXNzYWdlQnVpbGRlciB7XG4gICAgLyoqXG4gICAgICogVGhlIHNvdXJjZSBvZiB0aGUgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWVzc2FnZUZyb20gPSAnbG9nJztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlLlxuICAgICAqL1xuICAgIHB1YmxpYyBtZXNzYWdlVHlwZTogTWVzc2FnZVR5cGUgPSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0IG9mIHRoZSBtZXNzYWdlLlxuICAgICAqL1xuICAgIHB1YmxpYyBtZXNzYWdlVGV4dCA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc291cmNlIG9mIHRoZSBtZXNzYWdlLlxuICAgICAqL1xuICAgIHB1YmxpYyBmcm9tKGY6IHN0cmluZyk6IExvZ01lc3NhZ2VCdWlsZGVyIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlRnJvbSA9IGY7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHR5cGUgb2YgdGhlIG1lc3NhZ2UuXG4gICAgICovXG4gICAgcHVibGljIHR5cGUodDogTWVzc2FnZVR5cGUpOiBMb2dNZXNzYWdlQnVpbGRlciB7XG4gICAgICAgIHRoaXMubWVzc2FnZVR5cGUgPSB0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB0ZXh0IG9mIHRoZSBtZXNzYWdlLlxuICAgICAqL1xuICAgIHB1YmxpYyB0ZXh0KHQ6IHN0cmluZyB8IEVycm9yKTogTG9nTWVzc2FnZUJ1aWxkZXIge1xuICAgICAgICBpZiAodCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VUZXh0ID0gdC5tZXNzYWdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlVGV4dCA9IHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2dzIHRoZSBtZXNzYWdlIG5vdy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbm93KCk6IExvZ01lc3NhZ2VCdWlsZGVyIHtcbiAgICAgICAgdGhpcy5sb2coKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9ncyB0aGUgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgbG9nKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tZXNzYWdlVGV4dCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1lc3NhZ2VUeXBlU3RyaW5nID0gW1xuICAgICAgICAgICAgY2hhbGsuYm9sZC5ibHVlKCdpbmZvJyksXG4gICAgICAgICAgICBjaGFsay5ib2xkLmtleXdvcmQoJ29yYW5nZScpKCd3YXJuJyksXG4gICAgICAgICAgICBjaGFsay5ib2xkLnJlZCgnZXJyIScpLFxuICAgICAgICAgICAgY2hhbGsuYm9sZC5ncmVlbigncmVzcCcpLFxuICAgICAgICBdW3RoaXMubWVzc2FnZVR5cGVdO1xuXG4gICAgICAgIGxldCBzcGFjaW5nID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgU1JDX1NQQUNJTkcgLSB0aGlzLm1lc3NhZ2VGcm9tLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBzcGFjaW5nICs9ICcgJztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgJHtzcGFjaW5nfSR7dGhpcy5tZXNzYWdlRnJvbX0gJHttZXNzYWdlVHlwZVN0cmluZ30gJHt0aGlzLm1lc3NhZ2VUZXh0fWA7XG5cbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZVR5cGUgPT09IE1lc3NhZ2VUeXBlLkVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGxvZ2dpbmcgaW5mb3JtYXRpb24uXG4gICAgICogU2V0cyB0aGUgdHlwZSB0byBbW01lc3NhZ2VUeXBlLkluZm9ybWF0aW9uXV0gYW5kIGFsc28gdGhlIHRleHQgb2YgdGhlIG1lc3NhZ2UuXG4gICAgICogQHBhcmFtIHQgdGhlIHRleHQgb2YgdGhlIG1lc3NhZ2UuIElmIHBhc3NlZCBhbiBgRXJyb3JgLFxuICAgICAqIHRoZSBgbWVzc2FnZWAgcHJvcGVydHkgb2YgdGhlIGVycm9yIHdpbGwgYmUgdXNlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaSh0OiBzdHJpbmcgfCBFcnJvcik6IExvZ01lc3NhZ2VCdWlsZGVyIHtcbiAgICAgICAgdGhpcy50eXBlKE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dCh0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGxvZ2dpbmcgd2FybmluZ3MuXG4gICAgICogU2V0cyB0aGUgdHlwZSB0byBbW01lc3NhZ2VUeXBlLldhcm5pbmddXSBhbmQgYWxzbyB0aGUgdGV4dCBvZiB0aGUgbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0gdCB0aGUgdGV4dCBvZiB0aGUgbWVzc2FnZS4gSWYgcGFzc2VkIGFuIGBFcnJvcmAsXG4gICAgICogdGhlIGBtZXNzYWdlYCBwcm9wZXJ0eSBvZiB0aGUgZXJyb3Igd2lsbCBiZSB1c2VkLlxuICAgICAqL1xuICAgIHB1YmxpYyB3KHQ6IHN0cmluZyB8IEVycm9yKTogTG9nTWVzc2FnZUJ1aWxkZXIge1xuICAgICAgICB0aGlzLnR5cGUoTWVzc2FnZVR5cGUuV2FybmluZyk7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQodCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBsb2dnaW5nIGVycm9ycy5cbiAgICAgKiBTZXRzIHRoZSB0eXBlIHRvIFtbTWVzc2FnZVR5cGUuRXJyb3JdXSBhbmQgYWxzbyB0aGUgdGV4dCBvZiB0aGUgbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0gdCB0aGUgdGV4dCBvZiB0aGUgbWVzc2FnZS4gSWYgcGFzc2VkIGFuIGBFcnJvcmAsXG4gICAgICogdGhlIGBtZXNzYWdlYCBwcm9wZXJ0eSBvZiB0aGUgZXJyb3Igd2lsbCBiZSB1c2VkLlxuICAgICAqL1xuICAgIHB1YmxpYyBlKHQ6IHN0cmluZyB8IEVycm9yKTogTG9nTWVzc2FnZUJ1aWxkZXIge1xuICAgICAgICB0aGlzLnR5cGUoTWVzc2FnZVR5cGUuRXJyb3IpO1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgbG9nZ2luZyByZXNwb25zZXMuXG4gICAgICogU2V0cyB0aGUgdHlwZSB0byBbW01lc3NhZ2VUeXBlLlJlc3BvbnNlXV0gYW5kIGFsc28gdGhlIHRleHQgb2YgdGhlIG1lc3NhZ2UuXG4gICAgICogQHBhcmFtIHQgdGhlIHRleHQgb2YgdGhlIG1lc3NhZ2UuIElmIHBhc3NlZCBhbiBgRXJyb3JgLFxuICAgICAqIHRoZSBgbWVzc2FnZWAgcHJvcGVydHkgb2YgdGhlIGVycm9yIHdpbGwgYmUgdXNlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcih0OiBzdHJpbmcgfCBFcnJvcik6IExvZ01lc3NhZ2VCdWlsZGVyIHtcbiAgICAgICAgdGhpcy50eXBlKE1lc3NhZ2VUeXBlLlJlc3BvbnNlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dCh0KTtcbiAgICB9XG59XG5cbi8qKlxuICogU2hvcnRjdXQgZm9yIGNvbnN0cnVjdGluZyBbW0xvZ01lc3NhZ2VCdWlsZGVyXV1zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9nKCk6IExvZ01lc3NhZ2VCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IExvZ01lc3NhZ2VCdWlsZGVyKCk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHVzaW5nIGBpby10c2AgYW5kIGNvbnZlcnRzIHJlcG9ydCBmcm9tIHRoZSBgaW8tdHMtcmVwb3J0ZXJzYFxuICogcmVwb3J0ZXIgdG8gY29sb3JmdWwgZm9ybWF0IGFuZCBqb2lucyBsaW5lcyB3aXRoIGAuMGAgYW5kIGAuMWAgdXNpbmcgYG9yYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlPEEsIE8sIEk+KHZhbGlkYXRvcjogdC5UeXBlPEEsIE8sIEk+LCBkYXRhOiBhbnksIGxvY2F0aW9uOiBzdHJpbmcpOiBhbnkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0b3IuZGVjb2RlKGRhdGEpO1xuICAgIGNvbnN0IHJlcG9ydCA9IHJlcG9ydGVyKHJlc3VsdCk7XG5cbiAgICBpZiAoaXNMZWZ0KHJlc3VsdCkpIHtcbiAgICAgICAgcmVwb3J0LnVuc2hpZnQoJ1RoZSBmb2xsb3dpbmcgZXJyb3JzIG9jY3VyZWQgZHVyaW5nIHZhbGlkYXRpb24gaW4gYCcgKyBsb2NhdGlvbiArICdgOicpO1xuXG4gICAgICAgIGxldCBuZXdSZXBvcnQgPSByZXBvcnQuam9pbignXFxuICAgICAgICAgICAgICcpO1xuICAgICAgICBsZXQgcmVnZXggPSAvRXhwZWN0aW5nIChcXHcrKSBhdCAoXFx3KylcXC4wIGJ1dCBpbnN0ZWFkIGdvdDogKC4rKVxcLlxcbiAqRXhwZWN0aW5nIChcXHcrKSBhdCBcXHcrXFwuMSBidXQgaW5zdGVhZCBnb3Q6ICguKylcXC4vZztcbiAgICAgICAgbmV3UmVwb3J0ID0gbmV3UmVwb3J0LnJlcGxhY2UocmVnZXgsIGNoYWxrYEV4cGVjdGluZyB7Ym9sZC5ibHVlICQxfSBvciB7Ym9sZC5ibHVlICQ0fSBhdCB7Ym9sZC5ncmVlbiAkMn0gYnV0IGluc3RlYWQgZ290IHtib2xkLnJlZCAkM31gKTtcblxuICAgICAgICByZWdleCA9IC9FeHBlY3RpbmcgKFxcdyspIGF0IChcXHcrKSBidXQgaW5zdGVhZCBnb3Q6ICguKylcXC4vZztcbiAgICAgICAgbmV3UmVwb3J0ID0gbmV3UmVwb3J0LnJlcGxhY2UocmVnZXgsIGNoYWxrYEV4cGVjdGluZyB7Ym9sZC5ibHVlICQxfSBhdCB7Ym9sZC5ncmVlbiAkMn0gYnV0IGluc3RlYWQgZ290IHtib2xkLnJlZCAkM31gKTtcblxuICAgICAgICBsb2coKS5lKG5ld1JlcG9ydCkuZnJvbSgn4oCiX+KAoicpLm5vdygpO1xuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXN1bHQucmlnaHQ7XG4gICAgfVxufVxuIl19