Socket
Socket
Sign inDemoInstall

graphql-query-compress

Package Overview
Dependencies
1
Maintainers
1
Versions
31
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.2.0 to 1.2.1

2

Gruntfile.js
/*
** graphql-query-compress -- Compress a GraphQL Query String
** Copyright (c) 2017-2018 Ralf S. Engelschall <rse@engelschall.com>
** Copyright (c) 2017-2019 Ralf S. Engelschall <rse@engelschall.com>
**

@@ -5,0 +5,0 @@ ** Permission is hereby granted, free of charge, to any person obtaining

/*
** graphql-query-compress -- Compress a GraphQL Query String
** Copyright (c) 2017-2018 Ralf S. Engelschall <rse@engelschall.com>
** Copyright (c) 2017-2019 Ralf S. Engelschall <rse@engelschall.com>
**

@@ -27,3 +27,3 @@ ** Permission is hereby granted, free of charge, to any person obtaining

(function (global){
!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Tokenizr=t()}}(function(){return function(){return function t(n,e,i){function r(s,a){if(!e[s]){if(!n[s]){var u="function"==typeof _dereq_&&_dereq_;if(!a&&u)return u(s,!0);if(o)return o(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var h=e[s]={exports:{}};n[s][0].call(h.exports,function(t){return r(n[s][1][t]||t)},h,h.exports,t,n,e,i)}return e[s].exports}for(var o="function"==typeof _dereq_&&_dereq_,s=0;s<i.length;s++)r(i[s]);return r}}()({1:[function(t,n,e){"use strict";function i(t){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function r(t,n){return!n||"object"!==i(n)&&"function"!=typeof n?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):n}function o(t){var n="function"==typeof Map?new Map:void 0;return(o=function(t){if(null===t||!function(t){return-1!==Function.toString.call(t).indexOf("[native code]")}(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==n){if(n.has(t))return n.get(t);n.set(t,e)}function e(){return function(t,n,e){return(function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(t){return!1}}()?Reflect.construct:function(t,n,e){var i=[null];i.push.apply(i,n);var r=new(Function.bind.apply(t,i));return e&&s(r,e.prototype),r}).apply(null,arguments)}(t,arguments,a(this).constructor)}return e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),s(e,t)})(t)}function s(t,n){return(s=Object.setPrototypeOf||function(t,n){return t.__proto__=n,t})(t,n)}function a(t){return(a=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function u(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function c(t,n){for(var e=0;e<n.length;e++){var i=n[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function h(t,n,e){return n&&c(t.prototype,n),e&&c(t,e),t}var l=function(t,n){var e=t.length,i=n-20;i<0&&(i=0);var r=n+20;r>e&&(r=e);var o=function(t){return t.charCodeAt(0).toString(16).toUpperCase()},s=function(t,n,e){return t.substr(n,e).replace(/\\/g,"\\\\").replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,function(t){return"\\x0"+o(t)}).replace(/[\x10-\x1F\x80-\xFF]/g,function(t){return"\\x"+o(t)}).replace(/[\u0100-\u0FFF]/g,function(t){return"\\u0"+o(t)}).replace(/[\u1000-\uFFFF]/g,function(t){return"\\u"+o(t)})};return{prologTrunc:i>0,prologText:s(t,i,n-i),tokenText:s(t,n,1),epilogText:s(t,n+1,r-(n+1)),epilogTrunc:r<e}},f=function(){function t(n,e,i){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;u(this,t),this.type=n,this.value=e,this.text=i,this.pos=r,this.line=o,this.column=s}return h(t,[{key:"toString",value:function(){return"<type: ".concat(this.type,", ")+"value: ".concat(JSON.stringify(this.value),", ")+"text: ".concat(JSON.stringify(this.text),", ")+"pos: ".concat(this.pos,", ")+"line: ".concat(this.line,", ")+"column: ".concat(this.column,">")}},{key:"isA",value:function(t,n){return t===this.type&&(2!==arguments.length||n===this.value)}}]),t}(),p=function(t){function n(t,e,i,o,s){var c;return u(this,n),(c=r(this,a(n).call(this,t))).name="ParsingError",c.message=t,c.pos=e,c.line=i,c.column=o,c.input=s,c}return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(n&&n.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),n&&s(t,n)}(n,o(Error)),h(n,[{key:"toString",value:function(){for(var t=l(this.input,this.pos),n="line ".concat(this.line," (column ").concat(this.column,"): "),e="",i=0;i<n.length+t.prologText.length;i++)e+=" ";return"Parsing Error: "+this.message+"\n"+n+t.prologText+t.tokenText+t.epilogText+"\n"+e+"^"}}]),n}(),_=function(){function t(n){u(this,t),this._tokenizr=n,this._data={},this._repeat=!1,this._reject=!1,this._ignore=!1,this._match=null}return h(t,[{key:"data",value:function(t,n){var e=this._data[t];return 2===arguments.length&&(this._data[t]=n),e}},{key:"info",value:function(){return{line:this._tokenizr._line,column:this._tokenizr._column,pos:this._tokenizr._pos,len:this._match[0].length}}},{key:"push",value:function(){var t;return(t=this._tokenizr).push.apply(t,arguments),this}},{key:"pop",value:function(){var t;return(t=this._tokenizr).pop.apply(t,arguments)}},{key:"state",value:function(){var t,n;return arguments.length>0?((n=this._tokenizr).state.apply(n,arguments),this):(t=this._tokenizr).state.apply(t,arguments)}},{key:"tag",value:function(){var t;return(t=this._tokenizr).tag.apply(t,arguments),this}},{key:"tagged",value:function(){var t;return(t=this._tokenizr).tagged.apply(t,arguments)}},{key:"untag",value:function(){var t;return(t=this._tokenizr).untag.apply(t,arguments),this}},{key:"repeat",value:function(){return this._tokenizr._log(" REPEAT"),this._repeat=!0,this}},{key:"reject",value:function(){return this._tokenizr._log(" REJECT"),this._reject=!0,this}},{key:"ignore",value:function(){return this._tokenizr._log(" IGNORE"),this._ignore=!0,this}},{key:"accept",value:function(t,n){return arguments.length<2&&(n=this._match[0]),this._tokenizr._log(" ACCEPT: type: ".concat(t,", value: ")+"".concat(JSON.stringify(n)," (").concat(i(n),'), text: "').concat(this._match[0],'"')),this._tokenizr._pending.push(new f(t,n,this._match[0],this._tokenizr._pos,this._tokenizr._line,this._tokenizr._column)),this}},{key:"stop",value:function(){return this._tokenizr._stopped=!0,this}}]),t}(),g=function(){function t(){u(this,t),this._before=null,this._after=null,this._finish=null,this._rules=[],this._debug=!1,this.reset()}return h(t,[{key:"reset",value:function(){return this._input="",this._len=0,this._eof=!1,this._pos=0,this._line=1,this._column=1,this._state=["default"],this._tag={},this._transaction=[],this._pending=[],this._stopped=!1,this._ctx=new _(this),this}},{key:"error",value:function(t){return new p(t,this._pos,this._line,this._column,this._input)}},{key:"debug",value:function(t){return this._debug=t,this}},{key:"_log",value:function(t){this._debug&&console.log("tokenizr: ".concat(t))}},{key:"input",value:function(t){if("string"!=typeof t)throw new Error('parameter "input" not a String');return this.reset(),this._input=t,this._len=t.length,this}},{key:"push",value:function(t){if(1!==arguments.length)throw new Error("invalid number of arguments");if("string"!=typeof t)throw new Error('parameter "state" not a String');return this._log(" STATE (PUSH): "+"old: <".concat(this._state[this._state.length-1],">, ")+"new: <".concat(t,">")),this._state.push(t),this}},{key:"pop",value:function(){if(0!==arguments.length)throw new Error("invalid number of arguments");if(this._state.length<2)throw new Error("no more custom states to pop");return this._log(" STATE (POP): "+"old: <".concat(this._state[this._state.length-1],">, ")+"new: <".concat(this._state[this._state.length-2],">")),this._state.pop()}},{key:"state",value:function(t){if(1===arguments.length){if("string"!=typeof t)throw new Error('parameter "state" not a String');return this._log(" STATE (SET): "+"old: <".concat(this._state[this._state.length-1],">, ")+"new: <".concat(t,">")),this._state[this._state.length-1]=t,this}if(0===arguments.length)return this._state[this._state.length-1];throw new Error("invalid number of arguments")}},{key:"tag",value:function(t){if(1!==arguments.length)throw new Error("invalid number of arguments");if("string"!=typeof t)throw new Error('parameter "tag" not a String');return this._log(" TAG (ADD): ".concat(t)),this._tag[t]=!0,this}},{key:"tagged",value:function(t){if(1!==arguments.length)throw new Error("invalid number of arguments");if("string"!=typeof t)throw new Error('parameter "tag" not a String');return!0===this._tag[t]}},{key:"untag",value:function(t){if(1!==arguments.length)throw new Error("invalid number of arguments");if("string"!=typeof t)throw new Error('parameter "tag" not a String');return this._log(" TAG (DEL): ".concat(t)),delete this._tag[t],this}},{key:"before",value:function(t){return this._before=t,this}},{key:"after",value:function(t){return this._after=t,this}},{key:"finish",value:function(t){return this._finish=t,this}},{key:"rule",value:function(t,n,e){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"unknown";if(2===arguments.length&&"function"==typeof n){var o=[t,n];n=o[0],e=o[1],t="*"}else if(3===arguments.length&&"function"==typeof n){var s=[t,n,e];n=s[0],e=s[1],r=s[2],t="*"}if("string"!=typeof t)throw new Error('parameter "state" not a String');if(!("object"===i(n)&&n instanceof RegExp))throw new Error('parameter "pattern" not a RegExp');if("function"!=typeof e)throw new Error('parameter "action" not a Function');if("string"!=typeof r)throw new Error('parameter "name" not a String');t=t.split(/\s*,\s*/g).map(function(t){var n=t.split(/\s+/g),e=n.filter(function(t){return null===t.match(/^#/)}),i=n.filter(function(t){return null!==t.match(/^#/)}).map(function(t){return t.replace(/^#/,"")});if(1!==e.length)throw new Error("exactly one state required");return{state:e[0],tags:i}});var a="g";return n.multiline&&(a+="m"),n.ignoreCase&&(a+="i"),n=new RegExp(n.source,a),this._log("rule: configure rule (state: ".concat(t,", pattern: ").concat(n.source,")")),this._rules.push({state:t,pattern:n,action:e,name:r}),this}},{key:"_progress",value:function(t,n){for(var e=this._line,i=this._column,r=this._input,o=t;o<n;o++){var s=r.charAt(o);"\r"===s?this._column=1:"\n"===s?(this._line++,this._column=1):"\t"===s?this._column+=8-this._column%8:this._column++}this._log(" PROGRESS: characters: ".concat(n-t,", ")+"from: <line ".concat(e,", column ").concat(i,">, ")+"to: <line ".concat(this._line,", column ").concat(this._column,">"))}},{key:"_tokenize",value:function(){var t=this,n=function(){t._eof||(null!==t._finish&&t._finish.call(t._ctx,t._ctx),t._eof=!0,t._pending.push(new f("EOF","","",t._pos,t._line,t._column)))};if(!(this._stopped||this._pos>=this._len)){for(var e=!0;e;){if(e=!1,this._debug){var i=l(this._input,this._pos),r=Object.keys(this._tag).map(function(t){return"#".concat(t)}).join(" ");this._log("INPUT: state: <".concat(this._state[this._state.length-1],">, tags: <").concat(r,">, text: ")+(i.prologTrunc?"...":'"')+"".concat(i.prologText,"<").concat(i.tokenText,">").concat(i.epilogText)+(i.epilogTrunc?"...":'"')+", at: <line ".concat(this._line,", column ").concat(this._column,">"))}for(var o=0;o<this._rules.length;o++){if(this._debug){var s=this._rules[o].state.map(function(t){var n=t.state;return t.tags.length>0&&(n+=" "+t.tags.map(function(t){return"#".concat(t)}).join(" ")),n}).join(", ");this._log(" RULE: state(s): <".concat(s,">, ")+"pattern: ".concat(this._rules[o].pattern.source))}var a=!1,u=this._rules[o].state.map(function(t){return t.state}),c=u.indexOf("*");if(c<0&&(c=u.indexOf(this._state[this._state.length-1])),c>=0){a=!0;var h=this._rules[o].state[c].tags;(h=h.filter(function(n){return!t._tag[n]})).length>0&&(a=!1)}if(a){this._rules[o].pattern.lastIndex=this._pos;var p=this._rules[o].pattern.exec(this._input);if(this._rules[o].pattern.lastIndex=this._pos,null!==(p=this._rules[o].pattern.exec(this._input))&&p.index===this._pos){if(this._debug&&this._log(" MATCHED: "+JSON.stringify(p)),this._ctx._match=p,this._ctx._repeat=!1,this._ctx._reject=!1,this._ctx._ignore=!1,null!==this._before&&this._before.call(this._ctx,this._ctx,p,this._rules[o]),this._rules[o].action.call(this._ctx,this._ctx,p),null!==this._after&&this._after.call(this._ctx,this._ctx,p,this._rules[o]),this._ctx._reject)continue;if(this._ctx._repeat){e=!0;break}if(this._ctx._ignore){if(this._progress(this._pos,this._rules[o].pattern.lastIndex),this._pos=this._rules[o].pattern.lastIndex,this._pos>=this._len)return void n();e=!0;break}if(this._pending.length>0)return this._progress(this._pos,this._rules[o].pattern.lastIndex),this._pos=this._rules[o].pattern.lastIndex,void(this._pos>=this._len&&n());throw new Error('action of pattern "'+this._rules[o].pattern.source+'" neither rejected nor accepted any token(s)')}}}}throw this.error("token not recognized")}n()}},{key:"token",value:function(){if(0===this._pending.length&&this._tokenize(),this._pending.length>0){var t=this._pending.shift();return this._transaction.length>0&&this._transaction[0].push(t),this._log("TOKEN: ".concat(t.toString())),t}return null}},{key:"tokens",value:function(){for(var t,n=[];null!==(t=this.token());)n.push(t);return n}},{key:"peek",value:function(t){void 0===t&&(t=0);for(var n=0;n<this._pending.length+t;n++)this._tokenize();if(t>=this._pending.length)throw new Error("not enough tokens available for peek operation");return this._log("PEEK: ".concat(this._pending[t].toString())),this._pending[t]}},{key:"skip",value:function(t){void 0===t&&(t=1);for(var n=0;n<this._pending.length+t;n++)this._tokenize();if(t>this._pending.length)throw new Error("not enough tokens available for skip operation");for(;t-- >0;)this.token();return this}},{key:"consume",value:function(t,n){for(var e=this,r=0;r<this._pending.length+1;r++)this._tokenize();if(0===this._pending.length)throw new Error("not enough tokens available for consume operation");var o=this.token();this._log("CONSUME: ".concat(o.toString()));var s=function(){throw new p("expected: <type: ".concat(t,", value: ").concat(JSON.stringify(n)," (").concat(i(n),")>, ")+"found: <type: ".concat(o.type,", value: ").concat(JSON.stringify(o.value)," (").concat(i(o.value),")>"),o.pos,o.line,o.column,e._input)};return 2!==arguments.length||o.isA(t,n)?o.isA(t)||s():s(JSON.stringify(n),i(n)),o}},{key:"begin",value:function(){return this._log("BEGIN: level ".concat(this._transaction.length)),this._transaction.unshift([]),this}},{key:"depth",value:function(){if(0===this._transaction.length)throw new Error("cannot determine depth -- no active transaction");return this._transaction[0].length}},{key:"commit",value:function(){if(0===this._transaction.length)throw new Error("cannot commit transaction -- no active transaction");return this._transaction.shift(),this._log("COMMIT: level ".concat(this._transaction.length)),this}},{key:"rollback",value:function(){if(0===this._transaction.length)throw new Error("cannot rollback transaction -- no active transaction");return this._pending=this._transaction[0].concat(this._pending),this._transaction.shift(),this._log("ROLLBACK: level ".concat(this._transaction.length)),this}},{key:"alternatives",value:function(){for(var t=null,n=[],e=arguments.length,i=new Array(e),r=0;r<e;r++)i[r]=arguments[r];for(var o=0;o<i.length;o++)try{this.begin(),t=i[o].call(this),this.commit();break}catch(t){this._log("EXCEPTION: ".concat(t.toString())),n.push({ex:t,depth:this.depth()}),this.rollback();continue}if(null===t&&n.length>0)throw(n=n.sort(function(t,n){return t.depth-n.depth}))[0].ex;return t}}]),t}();g.Token=f,g.ParsingError=p,g.ActionContext=_,n.exports=g},{}]},{},[1])(1)});
!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Tokenizr=t()}}(function(){return function(){return function t(n,e,i){function r(s,a){if(!e[s]){if(!n[s]){var u="function"==typeof _dereq_&&_dereq_;if(!a&&u)return u(s,!0);if(o)return o(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var h=e[s]={exports:{}};n[s][0].call(h.exports,function(t){return r(n[s][1][t]||t)},h,h.exports,t,n,e,i)}return e[s].exports}for(var o="function"==typeof _dereq_&&_dereq_,s=0;s<i.length;s++)r(i[s]);return r}}()({1:[function(t,n,e){"use strict";function i(t){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function r(t,n){return!n||"object"!==i(n)&&"function"!=typeof n?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):n}function o(t){var n="function"==typeof Map?new Map:void 0;return(o=function(t){if(null===t||!function(t){return-1!==Function.toString.call(t).indexOf("[native code]")}(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==n){if(n.has(t))return n.get(t);n.set(t,e)}function e(){return function(t,n,e){return(function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(t){return!1}}()?Reflect.construct:function(t,n,e){var i=[null];i.push.apply(i,n);var r=new(Function.bind.apply(t,i));return e&&s(r,e.prototype),r}).apply(null,arguments)}(t,arguments,a(this).constructor)}return e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),s(e,t)})(t)}function s(t,n){return(s=Object.setPrototypeOf||function(t,n){return t.__proto__=n,t})(t,n)}function a(t){return(a=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function u(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function c(t,n){for(var e=0;e<n.length;e++){var i=n[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function h(t,n,e){return n&&c(t.prototype,n),e&&c(t,e),t}var l=function(t,n){var e=t.length,i=n-20;i<0&&(i=0);var r=n+20;r>e&&(r=e);var o=function(t){return t.charCodeAt(0).toString(16).toUpperCase()},s=function(t,n,e){return t.substr(n,e).replace(/\\/g,"\\\\").replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,function(t){return"\\x0"+o(t)}).replace(/[\x10-\x1F\x80-\xFF]/g,function(t){return"\\x"+o(t)}).replace(/[\u0100-\u0FFF]/g,function(t){return"\\u0"+o(t)}).replace(/[\u1000-\uFFFF]/g,function(t){return"\\u"+o(t)})};return{prologTrunc:i>0,prologText:s(t,i,n-i),tokenText:s(t,n,1),epilogText:s(t,n+1,r-(n+1)),epilogTrunc:r<e}},f=function(){function t(n,e,i){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;u(this,t),this.type=n,this.value=e,this.text=i,this.pos=r,this.line=o,this.column=s}return h(t,[{key:"toString",value:function(){return"<type: ".concat(this.type,", ")+"value: ".concat(JSON.stringify(this.value),", ")+"text: ".concat(JSON.stringify(this.text),", ")+"pos: ".concat(this.pos,", ")+"line: ".concat(this.line,", ")+"column: ".concat(this.column,">")}},{key:"isA",value:function(t,n){return t===this.type&&(2!==arguments.length||n===this.value)}}]),t}(),p=function(t){function n(t,e,i,o,s){var c;return u(this,n),(c=r(this,a(n).call(this,t))).name="ParsingError",c.message=t,c.pos=e,c.line=i,c.column=o,c.input=s,c}return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(n&&n.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),n&&s(t,n)}(n,o(Error)),h(n,[{key:"toString",value:function(){for(var t=l(this.input,this.pos),n="line ".concat(this.line," (column ").concat(this.column,"): "),e="",i=0;i<n.length+t.prologText.length;i++)e+=" ";return"Parsing Error: "+this.message+"\n"+n+t.prologText+t.tokenText+t.epilogText+"\n"+e+"^"}}]),n}(),_=function(){function t(n){u(this,t),this._tokenizr=n,this._data={},this._repeat=!1,this._reject=!1,this._ignore=!1,this._match=null}return h(t,[{key:"data",value:function(t,n){var e=this._data[t];return 2===arguments.length&&(this._data[t]=n),e}},{key:"info",value:function(){return{line:this._tokenizr._line,column:this._tokenizr._column,pos:this._tokenizr._pos,len:this._match[0].length}}},{key:"push",value:function(){var t;return(t=this._tokenizr).push.apply(t,arguments),this}},{key:"pop",value:function(){var t;return(t=this._tokenizr).pop.apply(t,arguments)}},{key:"state",value:function(){var t,n;return arguments.length>0?((n=this._tokenizr).state.apply(n,arguments),this):(t=this._tokenizr).state.apply(t,arguments)}},{key:"tag",value:function(){var t;return(t=this._tokenizr).tag.apply(t,arguments),this}},{key:"tagged",value:function(){var t;return(t=this._tokenizr).tagged.apply(t,arguments)}},{key:"untag",value:function(){var t;return(t=this._tokenizr).untag.apply(t,arguments),this}},{key:"repeat",value:function(){return this._tokenizr._log(" REPEAT"),this._repeat=!0,this}},{key:"reject",value:function(){return this._tokenizr._log(" REJECT"),this._reject=!0,this}},{key:"ignore",value:function(){return this._tokenizr._log(" IGNORE"),this._ignore=!0,this}},{key:"accept",value:function(t,n){return arguments.length<2&&(n=this._match[0]),this._tokenizr._log(" ACCEPT: type: ".concat(t,", value: ")+"".concat(JSON.stringify(n)," (").concat(i(n),'), text: "').concat(this._match[0],'"')),this._tokenizr._pending.push(new f(t,n,this._match[0],this._tokenizr._pos,this._tokenizr._line,this._tokenizr._column)),this}},{key:"stop",value:function(){return this._tokenizr._stopped=!0,this}}]),t}(),g=function(){function t(){u(this,t),this._before=null,this._after=null,this._finish=null,this._rules=[],this._debug=!1,this.reset()}return h(t,[{key:"reset",value:function(){return this._input="",this._len=0,this._eof=!1,this._pos=0,this._line=1,this._column=1,this._state=["default"],this._tag={},this._transaction=[],this._pending=[],this._stopped=!1,this._ctx=new _(this),this}},{key:"error",value:function(t){return new p(t,this._pos,this._line,this._column,this._input)}},{key:"debug",value:function(t){return this._debug=t,this}},{key:"_log",value:function(t){this._debug&&console.log("tokenizr: ".concat(t))}},{key:"input",value:function(t){if("string"!=typeof t)throw new Error('parameter "input" not a String');return this.reset(),this._input=t,this._len=t.length,this}},{key:"push",value:function(t){if(1!==arguments.length)throw new Error("invalid number of arguments");if("string"!=typeof t)throw new Error('parameter "state" not a String');return this._log(" STATE (PUSH): "+"old: <".concat(this._state[this._state.length-1],">, ")+"new: <".concat(t,">")),this._state.push(t),this}},{key:"pop",value:function(){if(0!==arguments.length)throw new Error("invalid number of arguments");if(this._state.length<2)throw new Error("no more custom states to pop");return this._log(" STATE (POP): "+"old: <".concat(this._state[this._state.length-1],">, ")+"new: <".concat(this._state[this._state.length-2],">")),this._state.pop()}},{key:"state",value:function(t){if(1===arguments.length){if("string"!=typeof t)throw new Error('parameter "state" not a String');return this._log(" STATE (SET): "+"old: <".concat(this._state[this._state.length-1],">, ")+"new: <".concat(t,">")),this._state[this._state.length-1]=t,this}if(0===arguments.length)return this._state[this._state.length-1];throw new Error("invalid number of arguments")}},{key:"tag",value:function(t){if(1!==arguments.length)throw new Error("invalid number of arguments");if("string"!=typeof t)throw new Error('parameter "tag" not a String');return this._log(" TAG (ADD): ".concat(t)),this._tag[t]=!0,this}},{key:"tagged",value:function(t){if(1!==arguments.length)throw new Error("invalid number of arguments");if("string"!=typeof t)throw new Error('parameter "tag" not a String');return!0===this._tag[t]}},{key:"untag",value:function(t){if(1!==arguments.length)throw new Error("invalid number of arguments");if("string"!=typeof t)throw new Error('parameter "tag" not a String');return this._log(" TAG (DEL): ".concat(t)),delete this._tag[t],this}},{key:"before",value:function(t){return this._before=t,this}},{key:"after",value:function(t){return this._after=t,this}},{key:"finish",value:function(t){return this._finish=t,this}},{key:"rule",value:function(t,n,e){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"unknown";if(2===arguments.length&&"function"==typeof n){var o=[t,n];n=o[0],e=o[1],t="*"}else if(3===arguments.length&&"function"==typeof n){var s=[t,n,e];n=s[0],e=s[1],r=s[2],t="*"}if("string"!=typeof t)throw new Error('parameter "state" not a String');if(!("object"===i(n)&&n instanceof RegExp))throw new Error('parameter "pattern" not a RegExp');if("function"!=typeof e)throw new Error('parameter "action" not a Function');if("string"!=typeof r)throw new Error('parameter "name" not a String');t=t.split(/\s*,\s*/g).map(function(t){var n=t.split(/\s+/g),e=n.filter(function(t){return null===t.match(/^#/)}),i=n.filter(function(t){return null!==t.match(/^#/)}).map(function(t){return t.replace(/^#/,"")});if(1!==e.length)throw new Error("exactly one state required");return{state:e[0],tags:i}});var a="g";try{"boolean"==typeof new RegExp("","y").sticky&&(a="y")}catch(t){}return"boolean"==typeof n.multiline&&n.multiline&&(a+="m"),"boolean"==typeof n.dotAll&&n.dotAll&&(a+="s"),"boolean"==typeof n.ignoreCase&&n.ignoreCase&&(a+="i"),"boolean"==typeof n.unicode&&n.unicode&&(a+="u"),n=new RegExp(n.source,a),this._log("rule: configure rule (state: ".concat(t,", pattern: ").concat(n.source,")")),this._rules.push({state:t,pattern:n,action:e,name:r}),this}},{key:"_progress",value:function(t,n){for(var e=this._line,i=this._column,r=this._input,o=t;o<n;o++){var s=r.charAt(o);"\r"===s?this._column=1:"\n"===s?(this._line++,this._column=1):"\t"===s?this._column+=8-this._column%8:this._column++}this._log(" PROGRESS: characters: ".concat(n-t,", ")+"from: <line ".concat(e,", column ").concat(i,">, ")+"to: <line ".concat(this._line,", column ").concat(this._column,">"))}},{key:"_tokenize",value:function(){var t=this,n=function(){t._eof||(null!==t._finish&&t._finish.call(t._ctx,t._ctx),t._eof=!0,t._pending.push(new f("EOF","","",t._pos,t._line,t._column)))};if(!(this._stopped||this._pos>=this._len)){for(var e=!0;e;){if(e=!1,this._debug){var i=l(this._input,this._pos),r=Object.keys(this._tag).map(function(t){return"#".concat(t)}).join(" ");this._log("INPUT: state: <".concat(this._state[this._state.length-1],">, tags: <").concat(r,">, text: ")+(i.prologTrunc?"...":'"')+"".concat(i.prologText,"<").concat(i.tokenText,">").concat(i.epilogText)+(i.epilogTrunc?"...":'"')+", at: <line ".concat(this._line,", column ").concat(this._column,">"))}for(var o=0;o<this._rules.length;o++){if(this._debug){var s=this._rules[o].state.map(function(t){var n=t.state;return t.tags.length>0&&(n+=" "+t.tags.map(function(t){return"#".concat(t)}).join(" ")),n}).join(", ");this._log(" RULE: state(s): <".concat(s,">, ")+"pattern: ".concat(this._rules[o].pattern.source))}var a=!1,u=this._rules[o].state.map(function(t){return t.state}),c=u.indexOf("*");if(c<0&&(c=u.indexOf(this._state[this._state.length-1])),c>=0){a=!0;var h=this._rules[o].state[c].tags;(h=h.filter(function(n){return!t._tag[n]})).length>0&&(a=!1)}if(a){this._rules[o].pattern.lastIndex=this._pos;var p=this._rules[o].pattern.exec(this._input);if(this._rules[o].pattern.lastIndex=this._pos,null!==(p=this._rules[o].pattern.exec(this._input))&&p.index===this._pos){if(this._debug&&this._log(" MATCHED: "+JSON.stringify(p)),this._ctx._match=p,this._ctx._repeat=!1,this._ctx._reject=!1,this._ctx._ignore=!1,null!==this._before&&this._before.call(this._ctx,this._ctx,p,this._rules[o]),this._rules[o].action.call(this._ctx,this._ctx,p),null!==this._after&&this._after.call(this._ctx,this._ctx,p,this._rules[o]),this._ctx._reject)continue;if(this._ctx._repeat){e=!0;break}if(this._ctx._ignore){if(this._progress(this._pos,this._rules[o].pattern.lastIndex),this._pos=this._rules[o].pattern.lastIndex,this._pos>=this._len)return void n();e=!0;break}if(this._pending.length>0)return this._progress(this._pos,this._rules[o].pattern.lastIndex),this._pos=this._rules[o].pattern.lastIndex,void(this._pos>=this._len&&n());throw new Error('action of pattern "'+this._rules[o].pattern.source+'" neither rejected nor accepted any token(s)')}}}}throw this.error("token not recognized")}n()}},{key:"token",value:function(){if(0===this._pending.length&&this._tokenize(),this._pending.length>0){var t=this._pending.shift();return this._transaction.length>0&&this._transaction[0].push(t),this._log("TOKEN: ".concat(t.toString())),t}return null}},{key:"tokens",value:function(){for(var t,n=[];null!==(t=this.token());)n.push(t);return n}},{key:"peek",value:function(t){void 0===t&&(t=0);for(var n=0;n<this._pending.length+t;n++)this._tokenize();if(t>=this._pending.length)throw new Error("not enough tokens available for peek operation");return this._log("PEEK: ".concat(this._pending[t].toString())),this._pending[t]}},{key:"skip",value:function(t){void 0===t&&(t=1);for(var n=0;n<this._pending.length+t;n++)this._tokenize();if(t>this._pending.length)throw new Error("not enough tokens available for skip operation");for(;t-- >0;)this.token();return this}},{key:"consume",value:function(t,n){for(var e=this,r=0;r<this._pending.length+1;r++)this._tokenize();if(0===this._pending.length)throw new Error("not enough tokens available for consume operation");var o=this.token();this._log("CONSUME: ".concat(o.toString()));var s=function(){throw new p("expected: <type: ".concat(t,", value: ").concat(JSON.stringify(n)," (").concat(i(n),")>, ")+"found: <type: ".concat(o.type,", value: ").concat(JSON.stringify(o.value)," (").concat(i(o.value),")>"),o.pos,o.line,o.column,e._input)};return 2!==arguments.length||o.isA(t,n)?o.isA(t)||s():s(JSON.stringify(n),i(n)),o}},{key:"begin",value:function(){return this._log("BEGIN: level ".concat(this._transaction.length)),this._transaction.unshift([]),this}},{key:"depth",value:function(){if(0===this._transaction.length)throw new Error("cannot determine depth -- no active transaction");return this._transaction[0].length}},{key:"commit",value:function(){if(0===this._transaction.length)throw new Error("cannot commit transaction -- no active transaction");return this._transaction.shift(),this._log("COMMIT: level ".concat(this._transaction.length)),this}},{key:"rollback",value:function(){if(0===this._transaction.length)throw new Error("cannot rollback transaction -- no active transaction");return this._pending=this._transaction[0].concat(this._pending),this._transaction.shift(),this._log("ROLLBACK: level ".concat(this._transaction.length)),this}},{key:"alternatives",value:function(){for(var t=null,n=[],e=arguments.length,i=new Array(e),r=0;r<e;r++)i[r]=arguments[r];for(var o=0;o<i.length;o++)try{this.begin(),t=i[o].call(this),this.commit();break}catch(t){this._log("EXCEPTION: ".concat(t.toString())),n.push({ex:t,depth:this.depth()}),this.rollback();continue}if(null===t&&n.length>0)throw(n=n.sort(function(t,n){return t.depth-n.depth}))[0].ex;return t}}]),t}();g.Token=f,g.ParsingError=p,g.ActionContext=_,n.exports=g},{}]},{},[1])(1)});
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})

@@ -36,2 +36,2 @@

//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvdG9rZW5penIvbGliL3Rva2VuaXpyLmpzIiwic3JjL2dyYXBocWwtcXVlcnktY29tcHJlc3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FDQUE7Ozs7QUNBQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIiFmdW5jdGlvbih0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KCk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtdLHQpO2Vsc2V7KFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcykuVG9rZW5penI9dCgpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChuLGUsaSl7ZnVuY3Rpb24gcihzLGEpe2lmKCFlW3NdKXtpZighbltzXSl7dmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighYSYmdSlyZXR1cm4gdShzLCEwKTtpZihvKXJldHVybiBvKHMsITApO3ZhciBjPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrcytcIidcIik7dGhyb3cgYy5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGN9dmFyIGg9ZVtzXT17ZXhwb3J0czp7fX07bltzXVswXS5jYWxsKGguZXhwb3J0cyxmdW5jdGlvbih0KXtyZXR1cm4gcihuW3NdWzFdW3RdfHx0KX0saCxoLmV4cG9ydHMsdCxuLGUsaSl9cmV0dXJuIGVbc10uZXhwb3J0c31mb3IodmFyIG89XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxzPTA7czxpLmxlbmd0aDtzKyspcihpW3NdKTtyZXR1cm4gcn19KCkoezE6W2Z1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBpKHQpe3JldHVybihpPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIHR9KSh0KX1mdW5jdGlvbiByKHQsbil7cmV0dXJuIW58fFwib2JqZWN0XCIhPT1pKG4pJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBuP2Z1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiB0fSh0KTpufWZ1bmN0aW9uIG8odCl7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2YgTWFwP25ldyBNYXA6dm9pZCAwO3JldHVybihvPWZ1bmN0aW9uKHQpe2lmKG51bGw9PT10fHwhZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1GdW5jdGlvbi50b1N0cmluZy5jYWxsKHQpLmluZGV4T2YoXCJbbmF0aXZlIGNvZGVdXCIpfSh0KSlyZXR1cm4gdDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtpZih2b2lkIDAhPT1uKXtpZihuLmhhcyh0KSlyZXR1cm4gbi5nZXQodCk7bi5zZXQodCxlKX1mdW5jdGlvbiBlKCl7cmV0dXJuIGZ1bmN0aW9uKHQsbixlKXtyZXR1cm4oZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpP1JlZmxlY3QuY29uc3RydWN0OmZ1bmN0aW9uKHQsbixlKXt2YXIgaT1bbnVsbF07aS5wdXNoLmFwcGx5KGksbik7dmFyIHI9bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkodCxpKSk7cmV0dXJuIGUmJnMocixlLnByb3RvdHlwZSkscn0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0odCxhcmd1bWVudHMsYSh0aGlzKS5jb25zdHJ1Y3Rvcil9cmV0dXJuIGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHMoZSx0KX0pKHQpfWZ1bmN0aW9uIHModCxuKXtyZXR1cm4ocz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQuX19wcm90b19fPW4sdH0pKHQsbil9ZnVuY3Rpb24gYSh0KXtyZXR1cm4oYT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpfSkodCl9ZnVuY3Rpb24gdSh0LG4pe2lmKCEodCBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gYyh0LG4pe2Zvcih2YXIgZT0wO2U8bi5sZW5ndGg7ZSsrKXt2YXIgaT1uW2VdO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxpLmtleSxpKX19ZnVuY3Rpb24gaCh0LG4sZSl7cmV0dXJuIG4mJmModC5wcm90b3R5cGUsbiksZSYmYyh0LGUpLHR9dmFyIGw9ZnVuY3Rpb24odCxuKXt2YXIgZT10Lmxlbmd0aCxpPW4tMjA7aTwwJiYoaT0wKTt2YXIgcj1uKzIwO3I+ZSYmKHI9ZSk7dmFyIG89ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0scz1mdW5jdGlvbih0LG4sZSl7cmV0dXJuIHQuc3Vic3RyKG4sZSkucmVwbGFjZSgvXFxcXC9nLFwiXFxcXFxcXFxcIikucmVwbGFjZSgvXFx4MDgvZyxcIlxcXFxiXCIpLnJlcGxhY2UoL1xcdC9nLFwiXFxcXHRcIikucmVwbGFjZSgvXFxuL2csXCJcXFxcblwiKS5yZXBsYWNlKC9cXGYvZyxcIlxcXFxmXCIpLnJlcGxhY2UoL1xcci9nLFwiXFxcXHJcIikucmVwbGFjZSgvW1xceDAwLVxceDA3XFx4MEJcXHgwRVxceDBGXS9nLGZ1bmN0aW9uKHQpe3JldHVyblwiXFxcXHgwXCIrbyh0KX0pLnJlcGxhY2UoL1tcXHgxMC1cXHgxRlxceDgwLVxceEZGXS9nLGZ1bmN0aW9uKHQpe3JldHVyblwiXFxcXHhcIitvKHQpfSkucmVwbGFjZSgvW1xcdTAxMDAtXFx1MEZGRl0vZyxmdW5jdGlvbih0KXtyZXR1cm5cIlxcXFx1MFwiK28odCl9KS5yZXBsYWNlKC9bXFx1MTAwMC1cXHVGRkZGXS9nLGZ1bmN0aW9uKHQpe3JldHVyblwiXFxcXHVcIitvKHQpfSl9O3JldHVybntwcm9sb2dUcnVuYzppPjAscHJvbG9nVGV4dDpzKHQsaSxuLWkpLHRva2VuVGV4dDpzKHQsbiwxKSxlcGlsb2dUZXh0OnModCxuKzEsci0obisxKSksZXBpbG9nVHJ1bmM6cjxlfX0sZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQobixlLGkpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLG89YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOjAscz1hcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XT9hcmd1bWVudHNbNV06MDt1KHRoaXMsdCksdGhpcy50eXBlPW4sdGhpcy52YWx1ZT1lLHRoaXMudGV4dD1pLHRoaXMucG9zPXIsdGhpcy5saW5lPW8sdGhpcy5jb2x1bW49c31yZXR1cm4gaCh0LFt7a2V5OlwidG9TdHJpbmdcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblwiPHR5cGU6IFwiLmNvbmNhdCh0aGlzLnR5cGUsXCIsIFwiKStcInZhbHVlOiBcIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkodGhpcy52YWx1ZSksXCIsIFwiKStcInRleHQ6IFwiLmNvbmNhdChKU09OLnN0cmluZ2lmeSh0aGlzLnRleHQpLFwiLCBcIikrXCJwb3M6IFwiLmNvbmNhdCh0aGlzLnBvcyxcIiwgXCIpK1wibGluZTogXCIuY29uY2F0KHRoaXMubGluZSxcIiwgXCIpK1wiY29sdW1uOiBcIi5jb25jYXQodGhpcy5jb2x1bW4sXCI+XCIpfX0se2tleTpcImlzQVwiLHZhbHVlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ9PT10aGlzLnR5cGUmJigyIT09YXJndW1lbnRzLmxlbmd0aHx8bj09PXRoaXMudmFsdWUpfX1dKSx0fSgpLHA9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0LGUsaSxvLHMpe3ZhciBjO3JldHVybiB1KHRoaXMsbiksKGM9cih0aGlzLGEobikuY2FsbCh0aGlzLHQpKSkubmFtZT1cIlBhcnNpbmdFcnJvclwiLGMubWVzc2FnZT10LGMucG9zPWUsYy5saW5lPWksYy5jb2x1bW49byxjLmlucHV0PXMsY31yZXR1cm4gZnVuY3Rpb24odCxuKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBuJiZudWxsIT09bil0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuJiZuLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLG4mJnModCxuKX0obixvKEVycm9yKSksaChuLFt7a2V5OlwidG9TdHJpbmdcIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgdD1sKHRoaXMuaW5wdXQsdGhpcy5wb3MpLG49XCJsaW5lIFwiLmNvbmNhdCh0aGlzLmxpbmUsXCIgKGNvbHVtbiBcIikuY29uY2F0KHRoaXMuY29sdW1uLFwiKTogXCIpLGU9XCJcIixpPTA7aTxuLmxlbmd0aCt0LnByb2xvZ1RleHQubGVuZ3RoO2krKyllKz1cIiBcIjtyZXR1cm5cIlBhcnNpbmcgRXJyb3I6IFwiK3RoaXMubWVzc2FnZStcIlxcblwiK24rdC5wcm9sb2dUZXh0K3QudG9rZW5UZXh0K3QuZXBpbG9nVGV4dCtcIlxcblwiK2UrXCJeXCJ9fV0pLG59KCksXz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQobil7dSh0aGlzLHQpLHRoaXMuX3Rva2VuaXpyPW4sdGhpcy5fZGF0YT17fSx0aGlzLl9yZXBlYXQ9ITEsdGhpcy5fcmVqZWN0PSExLHRoaXMuX2lnbm9yZT0hMSx0aGlzLl9tYXRjaD1udWxsfXJldHVybiBoKHQsW3trZXk6XCJkYXRhXCIsdmFsdWU6ZnVuY3Rpb24odCxuKXt2YXIgZT10aGlzLl9kYXRhW3RdO3JldHVybiAyPT09YXJndW1lbnRzLmxlbmd0aCYmKHRoaXMuX2RhdGFbdF09biksZX19LHtrZXk6XCJpbmZvXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57bGluZTp0aGlzLl90b2tlbml6ci5fbGluZSxjb2x1bW46dGhpcy5fdG9rZW5penIuX2NvbHVtbixwb3M6dGhpcy5fdG9rZW5penIuX3BvcyxsZW46dGhpcy5fbWF0Y2hbMF0ubGVuZ3RofX19LHtrZXk6XCJwdXNoXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4odD10aGlzLl90b2tlbml6cikucHVzaC5hcHBseSh0LGFyZ3VtZW50cyksdGhpc319LHtrZXk6XCJwb3BcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O3JldHVybih0PXRoaXMuX3Rva2VuaXpyKS5wb3AuYXBwbHkodCxhcmd1bWVudHMpfX0se2tleTpcInN0YXRlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxuO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjA/KChuPXRoaXMuX3Rva2VuaXpyKS5zdGF0ZS5hcHBseShuLGFyZ3VtZW50cyksdGhpcyk6KHQ9dGhpcy5fdG9rZW5penIpLnN0YXRlLmFwcGx5KHQsYXJndW1lbnRzKX19LHtrZXk6XCJ0YWdcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O3JldHVybih0PXRoaXMuX3Rva2VuaXpyKS50YWcuYXBwbHkodCxhcmd1bWVudHMpLHRoaXN9fSx7a2V5OlwidGFnZ2VkXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4odD10aGlzLl90b2tlbml6cikudGFnZ2VkLmFwcGx5KHQsYXJndW1lbnRzKX19LHtrZXk6XCJ1bnRhZ1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuKHQ9dGhpcy5fdG9rZW5penIpLnVudGFnLmFwcGx5KHQsYXJndW1lbnRzKSx0aGlzfX0se2tleTpcInJlcGVhdFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rva2VuaXpyLl9sb2coXCIgICAgUkVQRUFUXCIpLHRoaXMuX3JlcGVhdD0hMCx0aGlzfX0se2tleTpcInJlamVjdFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rva2VuaXpyLl9sb2coXCIgICAgUkVKRUNUXCIpLHRoaXMuX3JlamVjdD0hMCx0aGlzfX0se2tleTpcImlnbm9yZVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rva2VuaXpyLl9sb2coXCIgICAgSUdOT1JFXCIpLHRoaXMuX2lnbm9yZT0hMCx0aGlzfX0se2tleTpcImFjY2VwdFwiLHZhbHVlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKG49dGhpcy5fbWF0Y2hbMF0pLHRoaXMuX3Rva2VuaXpyLl9sb2coXCIgICAgQUNDRVBUOiB0eXBlOiBcIi5jb25jYXQodCxcIiwgdmFsdWU6IFwiKStcIlwiLmNvbmNhdChKU09OLnN0cmluZ2lmeShuKSxcIiAoXCIpLmNvbmNhdChpKG4pLCcpLCB0ZXh0OiBcIicpLmNvbmNhdCh0aGlzLl9tYXRjaFswXSwnXCInKSksdGhpcy5fdG9rZW5penIuX3BlbmRpbmcucHVzaChuZXcgZih0LG4sdGhpcy5fbWF0Y2hbMF0sdGhpcy5fdG9rZW5penIuX3Bvcyx0aGlzLl90b2tlbml6ci5fbGluZSx0aGlzLl90b2tlbml6ci5fY29sdW1uKSksdGhpc319LHtrZXk6XCJzdG9wXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdG9rZW5penIuX3N0b3BwZWQ9ITAsdGhpc319XSksdH0oKSxnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3UodGhpcyx0KSx0aGlzLl9iZWZvcmU9bnVsbCx0aGlzLl9hZnRlcj1udWxsLHRoaXMuX2ZpbmlzaD1udWxsLHRoaXMuX3J1bGVzPVtdLHRoaXMuX2RlYnVnPSExLHRoaXMucmVzZXQoKX1yZXR1cm4gaCh0LFt7a2V5OlwicmVzZXRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbnB1dD1cIlwiLHRoaXMuX2xlbj0wLHRoaXMuX2VvZj0hMSx0aGlzLl9wb3M9MCx0aGlzLl9saW5lPTEsdGhpcy5fY29sdW1uPTEsdGhpcy5fc3RhdGU9W1wiZGVmYXVsdFwiXSx0aGlzLl90YWc9e30sdGhpcy5fdHJhbnNhY3Rpb249W10sdGhpcy5fcGVuZGluZz1bXSx0aGlzLl9zdG9wcGVkPSExLHRoaXMuX2N0eD1uZXcgXyh0aGlzKSx0aGlzfX0se2tleTpcImVycm9yXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwKHQsdGhpcy5fcG9zLHRoaXMuX2xpbmUsdGhpcy5fY29sdW1uLHRoaXMuX2lucHV0KX19LHtrZXk6XCJkZWJ1Z1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kZWJ1Zz10LHRoaXN9fSx7a2V5OlwiX2xvZ1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX2RlYnVnJiZjb25zb2xlLmxvZyhcInRva2VuaXpyOiBcIi5jb25jYXQodCkpfX0se2tleTpcImlucHV0XCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCdwYXJhbWV0ZXIgXCJpbnB1dFwiIG5vdCBhIFN0cmluZycpO3JldHVybiB0aGlzLnJlc2V0KCksdGhpcy5faW5wdXQ9dCx0aGlzLl9sZW49dC5sZW5ndGgsdGhpc319LHtrZXk6XCJwdXNoXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoMSE9PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzXCIpO2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigncGFyYW1ldGVyIFwic3RhdGVcIiBub3QgYSBTdHJpbmcnKTtyZXR1cm4gdGhpcy5fbG9nKFwiICAgIFNUQVRFIChQVVNIKTogXCIrXCJvbGQ6IDxcIi5jb25jYXQodGhpcy5fc3RhdGVbdGhpcy5fc3RhdGUubGVuZ3RoLTFdLFwiPiwgXCIpK1wibmV3OiA8XCIuY29uY2F0KHQsXCI+XCIpKSx0aGlzLl9zdGF0ZS5wdXNoKHQpLHRoaXN9fSx7a2V5OlwicG9wXCIsdmFsdWU6ZnVuY3Rpb24oKXtpZigwIT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHNcIik7aWYodGhpcy5fc3RhdGUubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKFwibm8gbW9yZSBjdXN0b20gc3RhdGVzIHRvIHBvcFwiKTtyZXR1cm4gdGhpcy5fbG9nKFwiICAgIFNUQVRFIChQT1ApOiBcIitcIm9sZDogPFwiLmNvbmNhdCh0aGlzLl9zdGF0ZVt0aGlzLl9zdGF0ZS5sZW5ndGgtMV0sXCI+LCBcIikrXCJuZXc6IDxcIi5jb25jYXQodGhpcy5fc3RhdGVbdGhpcy5fc3RhdGUubGVuZ3RoLTJdLFwiPlwiKSksdGhpcy5fc3RhdGUucG9wKCl9fSx7a2V5Olwic3RhdGVcIix2YWx1ZTpmdW5jdGlvbih0KXtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCdwYXJhbWV0ZXIgXCJzdGF0ZVwiIG5vdCBhIFN0cmluZycpO3JldHVybiB0aGlzLl9sb2coXCIgICAgU1RBVEUgKFNFVCk6IFwiK1wib2xkOiA8XCIuY29uY2F0KHRoaXMuX3N0YXRlW3RoaXMuX3N0YXRlLmxlbmd0aC0xXSxcIj4sIFwiKStcIm5ldzogPFwiLmNvbmNhdCh0LFwiPlwiKSksdGhpcy5fc3RhdGVbdGhpcy5fc3RhdGUubGVuZ3RoLTFdPXQsdGhpc31pZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fc3RhdGVbdGhpcy5fc3RhdGUubGVuZ3RoLTFdO3Rocm93IG5ldyBFcnJvcihcImludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50c1wiKX19LHtrZXk6XCJ0YWdcIix2YWx1ZTpmdW5jdGlvbih0KXtpZigxIT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHNcIik7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCdwYXJhbWV0ZXIgXCJ0YWdcIiBub3QgYSBTdHJpbmcnKTtyZXR1cm4gdGhpcy5fbG9nKFwiICAgIFRBRyAoQUREKTogXCIuY29uY2F0KHQpKSx0aGlzLl90YWdbdF09ITAsdGhpc319LHtrZXk6XCJ0YWdnZWRcIix2YWx1ZTpmdW5jdGlvbih0KXtpZigxIT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHNcIik7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCdwYXJhbWV0ZXIgXCJ0YWdcIiBub3QgYSBTdHJpbmcnKTtyZXR1cm4hMD09PXRoaXMuX3RhZ1t0XX19LHtrZXk6XCJ1bnRhZ1wiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKDEhPT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50c1wiKTtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoJ3BhcmFtZXRlciBcInRhZ1wiIG5vdCBhIFN0cmluZycpO3JldHVybiB0aGlzLl9sb2coXCIgICAgVEFHIChERUwpOiBcIi5jb25jYXQodCkpLGRlbGV0ZSB0aGlzLl90YWdbdF0sdGhpc319LHtrZXk6XCJiZWZvcmVcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYmVmb3JlPXQsdGhpc319LHtrZXk6XCJhZnRlclwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hZnRlcj10LHRoaXN9fSx7a2V5OlwiZmluaXNoXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ZpbmlzaD10LHRoaXN9fSx7a2V5OlwicnVsZVwiLHZhbHVlOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106XCJ1bmtub3duXCI7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgmJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe3ZhciBvPVt0LG5dO249b1swXSxlPW9bMV0sdD1cIipcIn1lbHNlIGlmKDM9PT1hcmd1bWVudHMubGVuZ3RoJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXt2YXIgcz1bdCxuLGVdO249c1swXSxlPXNbMV0scj1zWzJdLHQ9XCIqXCJ9aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCdwYXJhbWV0ZXIgXCJzdGF0ZVwiIG5vdCBhIFN0cmluZycpO2lmKCEoXCJvYmplY3RcIj09PWkobikmJm4gaW5zdGFuY2VvZiBSZWdFeHApKXRocm93IG5ldyBFcnJvcigncGFyYW1ldGVyIFwicGF0dGVyblwiIG5vdCBhIFJlZ0V4cCcpO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCdwYXJhbWV0ZXIgXCJhY3Rpb25cIiBub3QgYSBGdW5jdGlvbicpO2lmKFwic3RyaW5nXCIhPXR5cGVvZiByKXRocm93IG5ldyBFcnJvcigncGFyYW1ldGVyIFwibmFtZVwiIG5vdCBhIFN0cmluZycpO3Q9dC5zcGxpdCgvXFxzKixcXHMqL2cpLm1hcChmdW5jdGlvbih0KXt2YXIgbj10LnNwbGl0KC9cXHMrL2cpLGU9bi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10Lm1hdGNoKC9eIy8pfSksaT1uLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PXQubWF0Y2goL14jLyl9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvXiMvLFwiXCIpfSk7aWYoMSE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImV4YWN0bHkgb25lIHN0YXRlIHJlcXVpcmVkXCIpO3JldHVybntzdGF0ZTplWzBdLHRhZ3M6aX19KTt2YXIgYT1cImdcIjtyZXR1cm4gbi5tdWx0aWxpbmUmJihhKz1cIm1cIiksbi5pZ25vcmVDYXNlJiYoYSs9XCJpXCIpLG49bmV3IFJlZ0V4cChuLnNvdXJjZSxhKSx0aGlzLl9sb2coXCJydWxlOiBjb25maWd1cmUgcnVsZSAoc3RhdGU6IFwiLmNvbmNhdCh0LFwiLCBwYXR0ZXJuOiBcIikuY29uY2F0KG4uc291cmNlLFwiKVwiKSksdGhpcy5fcnVsZXMucHVzaCh7c3RhdGU6dCxwYXR0ZXJuOm4sYWN0aW9uOmUsbmFtZTpyfSksdGhpc319LHtrZXk6XCJfcHJvZ3Jlc3NcIix2YWx1ZTpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10aGlzLl9saW5lLGk9dGhpcy5fY29sdW1uLHI9dGhpcy5faW5wdXQsbz10O288bjtvKyspe3ZhciBzPXIuY2hhckF0KG8pO1wiXFxyXCI9PT1zP3RoaXMuX2NvbHVtbj0xOlwiXFxuXCI9PT1zPyh0aGlzLl9saW5lKyssdGhpcy5fY29sdW1uPTEpOlwiXFx0XCI9PT1zP3RoaXMuX2NvbHVtbis9OC10aGlzLl9jb2x1bW4lODp0aGlzLl9jb2x1bW4rK310aGlzLl9sb2coXCIgICAgUFJPR1JFU1M6IGNoYXJhY3RlcnM6IFwiLmNvbmNhdChuLXQsXCIsIFwiKStcImZyb206IDxsaW5lIFwiLmNvbmNhdChlLFwiLCBjb2x1bW4gXCIpLmNvbmNhdChpLFwiPiwgXCIpK1widG86IDxsaW5lIFwiLmNvbmNhdCh0aGlzLl9saW5lLFwiLCBjb2x1bW4gXCIpLmNvbmNhdCh0aGlzLl9jb2x1bW4sXCI+XCIpKX19LHtrZXk6XCJfdG9rZW5pemVcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1mdW5jdGlvbigpe3QuX2VvZnx8KG51bGwhPT10Ll9maW5pc2gmJnQuX2ZpbmlzaC5jYWxsKHQuX2N0eCx0Ll9jdHgpLHQuX2VvZj0hMCx0Ll9wZW5kaW5nLnB1c2gobmV3IGYoXCJFT0ZcIixcIlwiLFwiXCIsdC5fcG9zLHQuX2xpbmUsdC5fY29sdW1uKSkpfTtpZighKHRoaXMuX3N0b3BwZWR8fHRoaXMuX3Bvcz49dGhpcy5fbGVuKSl7Zm9yKHZhciBlPSEwO2U7KXtpZihlPSExLHRoaXMuX2RlYnVnKXt2YXIgaT1sKHRoaXMuX2lucHV0LHRoaXMuX3Bvcykscj1PYmplY3Qua2V5cyh0aGlzLl90YWcpLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cIiNcIi5jb25jYXQodCl9KS5qb2luKFwiIFwiKTt0aGlzLl9sb2coXCJJTlBVVDogc3RhdGU6IDxcIi5jb25jYXQodGhpcy5fc3RhdGVbdGhpcy5fc3RhdGUubGVuZ3RoLTFdLFwiPiwgdGFnczogPFwiKS5jb25jYXQocixcIj4sIHRleHQ6IFwiKSsoaS5wcm9sb2dUcnVuYz9cIi4uLlwiOidcIicpK1wiXCIuY29uY2F0KGkucHJvbG9nVGV4dCxcIjxcIikuY29uY2F0KGkudG9rZW5UZXh0LFwiPlwiKS5jb25jYXQoaS5lcGlsb2dUZXh0KSsoaS5lcGlsb2dUcnVuYz9cIi4uLlwiOidcIicpK1wiLCBhdDogPGxpbmUgXCIuY29uY2F0KHRoaXMuX2xpbmUsXCIsIGNvbHVtbiBcIikuY29uY2F0KHRoaXMuX2NvbHVtbixcIj5cIikpfWZvcih2YXIgbz0wO288dGhpcy5fcnVsZXMubGVuZ3RoO28rKyl7aWYodGhpcy5fZGVidWcpe3ZhciBzPXRoaXMuX3J1bGVzW29dLnN0YXRlLm1hcChmdW5jdGlvbih0KXt2YXIgbj10LnN0YXRlO3JldHVybiB0LnRhZ3MubGVuZ3RoPjAmJihuKz1cIiBcIit0LnRhZ3MubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiI1wiLmNvbmNhdCh0KX0pLmpvaW4oXCIgXCIpKSxufSkuam9pbihcIiwgXCIpO3RoaXMuX2xvZyhcIiAgUlVMRTogc3RhdGUocyk6IDxcIi5jb25jYXQocyxcIj4sIFwiKStcInBhdHRlcm46IFwiLmNvbmNhdCh0aGlzLl9ydWxlc1tvXS5wYXR0ZXJuLnNvdXJjZSkpfXZhciBhPSExLHU9dGhpcy5fcnVsZXNbb10uc3RhdGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN0YXRlfSksYz11LmluZGV4T2YoXCIqXCIpO2lmKGM8MCYmKGM9dS5pbmRleE9mKHRoaXMuX3N0YXRlW3RoaXMuX3N0YXRlLmxlbmd0aC0xXSkpLGM+PTApe2E9ITA7dmFyIGg9dGhpcy5fcnVsZXNbb10uc3RhdGVbY10udGFnczsoaD1oLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4hdC5fdGFnW25dfSkpLmxlbmd0aD4wJiYoYT0hMSl9aWYoYSl7dGhpcy5fcnVsZXNbb10ucGF0dGVybi5sYXN0SW5kZXg9dGhpcy5fcG9zO3ZhciBwPXRoaXMuX3J1bGVzW29dLnBhdHRlcm4uZXhlYyh0aGlzLl9pbnB1dCk7aWYodGhpcy5fcnVsZXNbb10ucGF0dGVybi5sYXN0SW5kZXg9dGhpcy5fcG9zLG51bGwhPT0ocD10aGlzLl9ydWxlc1tvXS5wYXR0ZXJuLmV4ZWModGhpcy5faW5wdXQpKSYmcC5pbmRleD09PXRoaXMuX3Bvcyl7aWYodGhpcy5fZGVidWcmJnRoaXMuX2xvZyhcIiAgICBNQVRDSEVEOiBcIitKU09OLnN0cmluZ2lmeShwKSksdGhpcy5fY3R4Ll9tYXRjaD1wLHRoaXMuX2N0eC5fcmVwZWF0PSExLHRoaXMuX2N0eC5fcmVqZWN0PSExLHRoaXMuX2N0eC5faWdub3JlPSExLG51bGwhPT10aGlzLl9iZWZvcmUmJnRoaXMuX2JlZm9yZS5jYWxsKHRoaXMuX2N0eCx0aGlzLl9jdHgscCx0aGlzLl9ydWxlc1tvXSksdGhpcy5fcnVsZXNbb10uYWN0aW9uLmNhbGwodGhpcy5fY3R4LHRoaXMuX2N0eCxwKSxudWxsIT09dGhpcy5fYWZ0ZXImJnRoaXMuX2FmdGVyLmNhbGwodGhpcy5fY3R4LHRoaXMuX2N0eCxwLHRoaXMuX3J1bGVzW29dKSx0aGlzLl9jdHguX3JlamVjdCljb250aW51ZTtpZih0aGlzLl9jdHguX3JlcGVhdCl7ZT0hMDticmVha31pZih0aGlzLl9jdHguX2lnbm9yZSl7aWYodGhpcy5fcHJvZ3Jlc3ModGhpcy5fcG9zLHRoaXMuX3J1bGVzW29dLnBhdHRlcm4ubGFzdEluZGV4KSx0aGlzLl9wb3M9dGhpcy5fcnVsZXNbb10ucGF0dGVybi5sYXN0SW5kZXgsdGhpcy5fcG9zPj10aGlzLl9sZW4pcmV0dXJuIHZvaWQgbigpO2U9ITA7YnJlYWt9aWYodGhpcy5fcGVuZGluZy5sZW5ndGg+MClyZXR1cm4gdGhpcy5fcHJvZ3Jlc3ModGhpcy5fcG9zLHRoaXMuX3J1bGVzW29dLnBhdHRlcm4ubGFzdEluZGV4KSx0aGlzLl9wb3M9dGhpcy5fcnVsZXNbb10ucGF0dGVybi5sYXN0SW5kZXgsdm9pZCh0aGlzLl9wb3M+PXRoaXMuX2xlbiYmbigpKTt0aHJvdyBuZXcgRXJyb3IoJ2FjdGlvbiBvZiBwYXR0ZXJuIFwiJyt0aGlzLl9ydWxlc1tvXS5wYXR0ZXJuLnNvdXJjZSsnXCIgbmVpdGhlciByZWplY3RlZCBub3IgYWNjZXB0ZWQgYW55IHRva2VuKHMpJyl9fX19dGhyb3cgdGhpcy5lcnJvcihcInRva2VuIG5vdCByZWNvZ25pemVkXCIpfW4oKX19LHtrZXk6XCJ0b2tlblwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuX3BlbmRpbmcubGVuZ3RoJiZ0aGlzLl90b2tlbml6ZSgpLHRoaXMuX3BlbmRpbmcubGVuZ3RoPjApe3ZhciB0PXRoaXMuX3BlbmRpbmcuc2hpZnQoKTtyZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb24ubGVuZ3RoPjAmJnRoaXMuX3RyYW5zYWN0aW9uWzBdLnB1c2godCksdGhpcy5fbG9nKFwiVE9LRU46IFwiLmNvbmNhdCh0LnRvU3RyaW5nKCkpKSx0fXJldHVybiBudWxsfX0se2tleTpcInRva2Vuc1wiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0LG49W107bnVsbCE9PSh0PXRoaXMudG9rZW4oKSk7KW4ucHVzaCh0KTtyZXR1cm4gbn19LHtrZXk6XCJwZWVrXCIsdmFsdWU6ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9MCk7Zm9yKHZhciBuPTA7bjx0aGlzLl9wZW5kaW5nLmxlbmd0aCt0O24rKyl0aGlzLl90b2tlbml6ZSgpO2lmKHQ+PXRoaXMuX3BlbmRpbmcubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIm5vdCBlbm91Z2ggdG9rZW5zIGF2YWlsYWJsZSBmb3IgcGVlayBvcGVyYXRpb25cIik7cmV0dXJuIHRoaXMuX2xvZyhcIlBFRUs6IFwiLmNvbmNhdCh0aGlzLl9wZW5kaW5nW3RdLnRvU3RyaW5nKCkpKSx0aGlzLl9wZW5kaW5nW3RdfX0se2tleTpcInNraXBcIix2YWx1ZTpmdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0xKTtmb3IodmFyIG49MDtuPHRoaXMuX3BlbmRpbmcubGVuZ3RoK3Q7bisrKXRoaXMuX3Rva2VuaXplKCk7aWYodD50aGlzLl9wZW5kaW5nLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJub3QgZW5vdWdoIHRva2VucyBhdmFpbGFibGUgZm9yIHNraXAgb3BlcmF0aW9uXCIpO2Zvcig7dC0tID4wOyl0aGlzLnRva2VuKCk7cmV0dXJuIHRoaXN9fSx7a2V5OlwiY29uc3VtZVwiLHZhbHVlOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXRoaXMscj0wO3I8dGhpcy5fcGVuZGluZy5sZW5ndGgrMTtyKyspdGhpcy5fdG9rZW5pemUoKTtpZigwPT09dGhpcy5fcGVuZGluZy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwibm90IGVub3VnaCB0b2tlbnMgYXZhaWxhYmxlIGZvciBjb25zdW1lIG9wZXJhdGlvblwiKTt2YXIgbz10aGlzLnRva2VuKCk7dGhpcy5fbG9nKFwiQ09OU1VNRTogXCIuY29uY2F0KG8udG9TdHJpbmcoKSkpO3ZhciBzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IHAoXCJleHBlY3RlZDogPHR5cGU6IFwiLmNvbmNhdCh0LFwiLCB2YWx1ZTogXCIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShuKSxcIiAoXCIpLmNvbmNhdChpKG4pLFwiKT4sIFwiKStcImZvdW5kOiA8dHlwZTogXCIuY29uY2F0KG8udHlwZSxcIiwgdmFsdWU6IFwiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkoby52YWx1ZSksXCIgKFwiKS5jb25jYXQoaShvLnZhbHVlKSxcIik+XCIpLG8ucG9zLG8ubGluZSxvLmNvbHVtbixlLl9pbnB1dCl9O3JldHVybiAyIT09YXJndW1lbnRzLmxlbmd0aHx8by5pc0EodCxuKT9vLmlzQSh0KXx8cygpOnMoSlNPTi5zdHJpbmdpZnkobiksaShuKSksb319LHtrZXk6XCJiZWdpblwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvZyhcIkJFR0lOOiBsZXZlbCBcIi5jb25jYXQodGhpcy5fdHJhbnNhY3Rpb24ubGVuZ3RoKSksdGhpcy5fdHJhbnNhY3Rpb24udW5zaGlmdChbXSksdGhpc319LHtrZXk6XCJkZXB0aFwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuX3RyYW5zYWN0aW9uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJjYW5ub3QgZGV0ZXJtaW5lIGRlcHRoIC0tIG5vIGFjdGl2ZSB0cmFuc2FjdGlvblwiKTtyZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb25bMF0ubGVuZ3RofX0se2tleTpcImNvbW1pdFwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuX3RyYW5zYWN0aW9uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJjYW5ub3QgY29tbWl0IHRyYW5zYWN0aW9uIC0tIG5vIGFjdGl2ZSB0cmFuc2FjdGlvblwiKTtyZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb24uc2hpZnQoKSx0aGlzLl9sb2coXCJDT01NSVQ6IGxldmVsIFwiLmNvbmNhdCh0aGlzLl90cmFuc2FjdGlvbi5sZW5ndGgpKSx0aGlzfX0se2tleTpcInJvbGxiYWNrXCIsdmFsdWU6ZnVuY3Rpb24oKXtpZigwPT09dGhpcy5fdHJhbnNhY3Rpb24ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImNhbm5vdCByb2xsYmFjayB0cmFuc2FjdGlvbiAtLSBubyBhY3RpdmUgdHJhbnNhY3Rpb25cIik7cmV0dXJuIHRoaXMuX3BlbmRpbmc9dGhpcy5fdHJhbnNhY3Rpb25bMF0uY29uY2F0KHRoaXMuX3BlbmRpbmcpLHRoaXMuX3RyYW5zYWN0aW9uLnNoaWZ0KCksdGhpcy5fbG9nKFwiUk9MTEJBQ0s6IGxldmVsIFwiLmNvbmNhdCh0aGlzLl90cmFuc2FjdGlvbi5sZW5ndGgpKSx0aGlzfX0se2tleTpcImFsdGVybmF0aXZlc1wiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PW51bGwsbj1bXSxlPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspaVtyXT1hcmd1bWVudHNbcl07Zm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspdHJ5e3RoaXMuYmVnaW4oKSx0PWlbb10uY2FsbCh0aGlzKSx0aGlzLmNvbW1pdCgpO2JyZWFrfWNhdGNoKHQpe3RoaXMuX2xvZyhcIkVYQ0VQVElPTjogXCIuY29uY2F0KHQudG9TdHJpbmcoKSkpLG4ucHVzaCh7ZXg6dCxkZXB0aDp0aGlzLmRlcHRoKCl9KSx0aGlzLnJvbGxiYWNrKCk7Y29udGludWV9aWYobnVsbD09PXQmJm4ubGVuZ3RoPjApdGhyb3cobj1uLnNvcnQoZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5kZXB0aC1uLmRlcHRofSkpWzBdLmV4O3JldHVybiB0fX1dKSx0fSgpO2cuVG9rZW49ZixnLlBhcnNpbmdFcnJvcj1wLGcuQWN0aW9uQ29udGV4dD1fLG4uZXhwb3J0cz1nfSx7fV19LHt9LFsxXSkoMSl9KTsiLCJcInVzZSBzdHJpY3RcIjt2YXIgX3Rva2VuaXpyPV9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInRva2VuaXpyXCIpKTtmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBjb21wYWN0R3JhcGhRTFF1ZXJ5KGUpe3ZhciB0PW5ldyBfdG9rZW5penIuZGVmYXVsdDt0LnJ1bGUoLyNbXlxcclxcbl0qKD89XFxyP1xcbikvLGZ1bmN0aW9uKGUsdCl7ZS5hY2NlcHQoXCJjb21tZW50XCIpfSksdC5ydWxlKC9cIig/OlxcXFxcInxbXlwiXSkqXCIvLGZ1bmN0aW9uKGUsdCl7ZS5hY2NlcHQoXCJzdHJpbmdcIil9KSx0LnJ1bGUoLyRbYS16QS1aX11bYS16QS1aMC05X10qLyxmdW5jdGlvbihlLHQpe2UuYWNjZXB0KFwidmFyXCIpfSksdC5ydWxlKC9bYS16QS1aX11bYS16QS1aMC05X10qLyxmdW5jdGlvbihlLHQpe2UuYWNjZXB0KFwiaWRcIil9KSx0LnJ1bGUoL1srLV0/WzAtOV0qXFwuP1swLTldKyg/OltlRV1bKy1dP1swLTldKyk/LyxmdW5jdGlvbihlLHQpe2UuYWNjZXB0KFwibnVtYmVyXCIpfSksdC5ydWxlKC9bIFxcdFxcclxcbl0rLyxmdW5jdGlvbihlLHQpe2UuYWNjZXB0KFwid3NcIixcIiBcIil9KSx0LnJ1bGUoL1t7fV0vLGZ1bmN0aW9uKGUsdCl7ZS5hY2NlcHQoXCJicmFjZVwiKX0pLHQucnVsZSgvW1tcXF1dLyxmdW5jdGlvbihlLHQpe2UuYWNjZXB0KFwiYnJhY2tldFwiKX0pLHQucnVsZSgvWygpXS8sZnVuY3Rpb24oZSx0KXtlLmFjY2VwdChcInBhcmVudGhlc2lzXCIpfSksdC5ydWxlKC8sLyxmdW5jdGlvbihlLHQpe2UuYWNjZXB0KFwiY29tbWFcIil9KSx0LnJ1bGUoLyEvLGZ1bmN0aW9uKGUsdCl7ZS5hY2NlcHQoXCJub3RcIil9KSx0LnJ1bGUoL1xcLlxcLlxcLi8sZnVuY3Rpb24oZSx0KXtlLmFjY2VwdChcImVsbGlwc2lzXCIpfSksdC5ydWxlKC9ALyxmdW5jdGlvbihlLHQpe2UuYWNjZXB0KFwiYXRcIil9KSx0LnJ1bGUoLzovLGZ1bmN0aW9uKGUsdCl7ZS5hY2NlcHQoXCJjb2xvblwiKX0pLHQucnVsZSgvLi8sZnVuY3Rpb24oZSx0KXtlLmFjY2VwdChcImFueVwiKX0pLHQuaW5wdXQoZSksdC5kZWJ1ZyghMSk7Zm9yKHZhciBjPXQudG9rZW5zKCksbj1cIlwiLHI9L14oPzpicmFjZXxicmFja2V0fHBhcmVudGhlc2lzfGNvbW1hfGNvbG9uKSQvLHU9MDt1PGMubGVuZ3RoO3UrKykoXCJjb21tZW50XCI9PT1jW3VdLnR5cGV8fFwid3NcIj09PWNbdV0udHlwZSYmKHU8Yy5sZW5ndGgtMSYmY1t1KzFdLnR5cGUubWF0Y2gocil8fHU+MCYmY1t1LTFdLnR5cGUubWF0Y2gocikpKSYmKGMuc3BsaWNlKHUsMSksdS0tKTtyZXR1cm4gYy5mb3JFYWNoKGZ1bmN0aW9uKGUpe24rPWUudmFsdWV9KSxufW1vZHVsZS5leHBvcnRzPWNvbXBhY3RHcmFwaFFMUXVlcnk7Il19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvdG9rZW5penIvbGliL3Rva2VuaXpyLmpzIiwic3JjL2dyYXBocWwtcXVlcnktY29tcHJlc3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FDQUE7Ozs7QUNBQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIiFmdW5jdGlvbih0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KCk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtdLHQpO2Vsc2V7KFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcykuVG9rZW5penI9dCgpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChuLGUsaSl7ZnVuY3Rpb24gcihzLGEpe2lmKCFlW3NdKXtpZighbltzXSl7dmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighYSYmdSlyZXR1cm4gdShzLCEwKTtpZihvKXJldHVybiBvKHMsITApO3ZhciBjPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrcytcIidcIik7dGhyb3cgYy5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGN9dmFyIGg9ZVtzXT17ZXhwb3J0czp7fX07bltzXVswXS5jYWxsKGguZXhwb3J0cyxmdW5jdGlvbih0KXtyZXR1cm4gcihuW3NdWzFdW3RdfHx0KX0saCxoLmV4cG9ydHMsdCxuLGUsaSl9cmV0dXJuIGVbc10uZXhwb3J0c31mb3IodmFyIG89XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxzPTA7czxpLmxlbmd0aDtzKyspcihpW3NdKTtyZXR1cm4gcn19KCkoezE6W2Z1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBpKHQpe3JldHVybihpPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIHR9KSh0KX1mdW5jdGlvbiByKHQsbil7cmV0dXJuIW58fFwib2JqZWN0XCIhPT1pKG4pJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBuP2Z1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiB0fSh0KTpufWZ1bmN0aW9uIG8odCl7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2YgTWFwP25ldyBNYXA6dm9pZCAwO3JldHVybihvPWZ1bmN0aW9uKHQpe2lmKG51bGw9PT10fHwhZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1GdW5jdGlvbi50b1N0cmluZy5jYWxsKHQpLmluZGV4T2YoXCJbbmF0aXZlIGNvZGVdXCIpfSh0KSlyZXR1cm4gdDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtpZih2b2lkIDAhPT1uKXtpZihuLmhhcyh0KSlyZXR1cm4gbi5nZXQodCk7bi5zZXQodCxlKX1mdW5jdGlvbiBlKCl7cmV0dXJuIGZ1bmN0aW9uKHQsbixlKXtyZXR1cm4oZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpP1JlZmxlY3QuY29uc3RydWN0OmZ1bmN0aW9uKHQsbixlKXt2YXIgaT1bbnVsbF07aS5wdXNoLmFwcGx5KGksbik7dmFyIHI9bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkodCxpKSk7cmV0dXJuIGUmJnMocixlLnByb3RvdHlwZSkscn0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0odCxhcmd1bWVudHMsYSh0aGlzKS5jb25zdHJ1Y3Rvcil9cmV0dXJuIGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHMoZSx0KX0pKHQpfWZ1bmN0aW9uIHModCxuKXtyZXR1cm4ocz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQuX19wcm90b19fPW4sdH0pKHQsbil9ZnVuY3Rpb24gYSh0KXtyZXR1cm4oYT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpfSkodCl9ZnVuY3Rpb24gdSh0LG4pe2lmKCEodCBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gYyh0LG4pe2Zvcih2YXIgZT0wO2U8bi5sZW5ndGg7ZSsrKXt2YXIgaT1uW2VdO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxpLmtleSxpKX19ZnVuY3Rpb24gaCh0LG4sZSl7cmV0dXJuIG4mJmModC5wcm90b3R5cGUsbiksZSYmYyh0LGUpLHR9dmFyIGw9ZnVuY3Rpb24odCxuKXt2YXIgZT10Lmxlbmd0aCxpPW4tMjA7aTwwJiYoaT0wKTt2YXIgcj1uKzIwO3I+ZSYmKHI9ZSk7dmFyIG89ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0scz1mdW5jdGlvbih0LG4sZSl7cmV0dXJuIHQuc3Vic3RyKG4sZSkucmVwbGFjZSgvXFxcXC9nLFwiXFxcXFxcXFxcIikucmVwbGFjZSgvXFx4MDgvZyxcIlxcXFxiXCIpLnJlcGxhY2UoL1xcdC9nLFwiXFxcXHRcIikucmVwbGFjZSgvXFxuL2csXCJcXFxcblwiKS5yZXBsYWNlKC9cXGYvZyxcIlxcXFxmXCIpLnJlcGxhY2UoL1xcci9nLFwiXFxcXHJcIikucmVwbGFjZSgvW1xceDAwLVxceDA3XFx4MEJcXHgwRVxceDBGXS9nLGZ1bmN0aW9uKHQpe3JldHVyblwiXFxcXHgwXCIrbyh0KX0pLnJlcGxhY2UoL1tcXHgxMC1cXHgxRlxceDgwLVxceEZGXS9nLGZ1bmN0aW9uKHQpe3JldHVyblwiXFxcXHhcIitvKHQpfSkucmVwbGFjZSgvW1xcdTAxMDAtXFx1MEZGRl0vZyxmdW5jdGlvbih0KXtyZXR1cm5cIlxcXFx1MFwiK28odCl9KS5yZXBsYWNlKC9bXFx1MTAwMC1cXHVGRkZGXS9nLGZ1bmN0aW9uKHQpe3JldHVyblwiXFxcXHVcIitvKHQpfSl9O3JldHVybntwcm9sb2dUcnVuYzppPjAscHJvbG9nVGV4dDpzKHQsaSxuLWkpLHRva2VuVGV4dDpzKHQsbiwxKSxlcGlsb2dUZXh0OnModCxuKzEsci0obisxKSksZXBpbG9nVHJ1bmM6cjxlfX0sZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQobixlLGkpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLG89YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOjAscz1hcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XT9hcmd1bWVudHNbNV06MDt1KHRoaXMsdCksdGhpcy50eXBlPW4sdGhpcy52YWx1ZT1lLHRoaXMudGV4dD1pLHRoaXMucG9zPXIsdGhpcy5saW5lPW8sdGhpcy5jb2x1bW49c31yZXR1cm4gaCh0LFt7a2V5OlwidG9TdHJpbmdcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblwiPHR5cGU6IFwiLmNvbmNhdCh0aGlzLnR5cGUsXCIsIFwiKStcInZhbHVlOiBcIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkodGhpcy52YWx1ZSksXCIsIFwiKStcInRleHQ6IFwiLmNvbmNhdChKU09OLnN0cmluZ2lmeSh0aGlzLnRleHQpLFwiLCBcIikrXCJwb3M6IFwiLmNvbmNhdCh0aGlzLnBvcyxcIiwgXCIpK1wibGluZTogXCIuY29uY2F0KHRoaXMubGluZSxcIiwgXCIpK1wiY29sdW1uOiBcIi5jb25jYXQodGhpcy5jb2x1bW4sXCI+XCIpfX0se2tleTpcImlzQVwiLHZhbHVlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ9PT10aGlzLnR5cGUmJigyIT09YXJndW1lbnRzLmxlbmd0aHx8bj09PXRoaXMudmFsdWUpfX1dKSx0fSgpLHA9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0LGUsaSxvLHMpe3ZhciBjO3JldHVybiB1KHRoaXMsbiksKGM9cih0aGlzLGEobikuY2FsbCh0aGlzLHQpKSkubmFtZT1cIlBhcnNpbmdFcnJvclwiLGMubWVzc2FnZT10LGMucG9zPWUsYy5saW5lPWksYy5jb2x1bW49byxjLmlucHV0PXMsY31yZXR1cm4gZnVuY3Rpb24odCxuKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBuJiZudWxsIT09bil0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuJiZuLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLG4mJnModCxuKX0obixvKEVycm9yKSksaChuLFt7a2V5OlwidG9TdHJpbmdcIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgdD1sKHRoaXMuaW5wdXQsdGhpcy5wb3MpLG49XCJsaW5lIFwiLmNvbmNhdCh0aGlzLmxpbmUsXCIgKGNvbHVtbiBcIikuY29uY2F0KHRoaXMuY29sdW1uLFwiKTogXCIpLGU9XCJcIixpPTA7aTxuLmxlbmd0aCt0LnByb2xvZ1RleHQubGVuZ3RoO2krKyllKz1cIiBcIjtyZXR1cm5cIlBhcnNpbmcgRXJyb3I6IFwiK3RoaXMubWVzc2FnZStcIlxcblwiK24rdC5wcm9sb2dUZXh0K3QudG9rZW5UZXh0K3QuZXBpbG9nVGV4dCtcIlxcblwiK2UrXCJeXCJ9fV0pLG59KCksXz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQobil7dSh0aGlzLHQpLHRoaXMuX3Rva2VuaXpyPW4sdGhpcy5fZGF0YT17fSx0aGlzLl9yZXBlYXQ9ITEsdGhpcy5fcmVqZWN0PSExLHRoaXMuX2lnbm9yZT0hMSx0aGlzLl9tYXRjaD1udWxsfXJldHVybiBoKHQsW3trZXk6XCJkYXRhXCIsdmFsdWU6ZnVuY3Rpb24odCxuKXt2YXIgZT10aGlzLl9kYXRhW3RdO3JldHVybiAyPT09YXJndW1lbnRzLmxlbmd0aCYmKHRoaXMuX2RhdGFbdF09biksZX19LHtrZXk6XCJpbmZvXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57bGluZTp0aGlzLl90b2tlbml6ci5fbGluZSxjb2x1bW46dGhpcy5fdG9rZW5penIuX2NvbHVtbixwb3M6dGhpcy5fdG9rZW5penIuX3BvcyxsZW46dGhpcy5fbWF0Y2hbMF0ubGVuZ3RofX19LHtrZXk6XCJwdXNoXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4odD10aGlzLl90b2tlbml6cikucHVzaC5hcHBseSh0LGFyZ3VtZW50cyksdGhpc319LHtrZXk6XCJwb3BcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O3JldHVybih0PXRoaXMuX3Rva2VuaXpyKS5wb3AuYXBwbHkodCxhcmd1bWVudHMpfX0se2tleTpcInN0YXRlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxuO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjA/KChuPXRoaXMuX3Rva2VuaXpyKS5zdGF0ZS5hcHBseShuLGFyZ3VtZW50cyksdGhpcyk6KHQ9dGhpcy5fdG9rZW5penIpLnN0YXRlLmFwcGx5KHQsYXJndW1lbnRzKX19LHtrZXk6XCJ0YWdcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O3JldHVybih0PXRoaXMuX3Rva2VuaXpyKS50YWcuYXBwbHkodCxhcmd1bWVudHMpLHRoaXN9fSx7a2V5OlwidGFnZ2VkXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4odD10aGlzLl90b2tlbml6cikudGFnZ2VkLmFwcGx5KHQsYXJndW1lbnRzKX19LHtrZXk6XCJ1bnRhZ1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuKHQ9dGhpcy5fdG9rZW5penIpLnVudGFnLmFwcGx5KHQsYXJndW1lbnRzKSx0aGlzfX0se2tleTpcInJlcGVhdFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rva2VuaXpyLl9sb2coXCIgICAgUkVQRUFUXCIpLHRoaXMuX3JlcGVhdD0hMCx0aGlzfX0se2tleTpcInJlamVjdFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rva2VuaXpyLl9sb2coXCIgICAgUkVKRUNUXCIpLHRoaXMuX3JlamVjdD0hMCx0aGlzfX0se2tleTpcImlnbm9yZVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rva2VuaXpyLl9sb2coXCIgICAgSUdOT1JFXCIpLHRoaXMuX2lnbm9yZT0hMCx0aGlzfX0se2tleTpcImFjY2VwdFwiLHZhbHVlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKG49dGhpcy5fbWF0Y2hbMF0pLHRoaXMuX3Rva2VuaXpyLl9sb2coXCIgICAgQUNDRVBUOiB0eXBlOiBcIi5jb25jYXQodCxcIiwgdmFsdWU6IFwiKStcIlwiLmNvbmNhdChKU09OLnN0cmluZ2lmeShuKSxcIiAoXCIpLmNvbmNhdChpKG4pLCcpLCB0ZXh0OiBcIicpLmNvbmNhdCh0aGlzLl9tYXRjaFswXSwnXCInKSksdGhpcy5fdG9rZW5penIuX3BlbmRpbmcucHVzaChuZXcgZih0LG4sdGhpcy5fbWF0Y2hbMF0sdGhpcy5fdG9rZW5penIuX3Bvcyx0aGlzLl90b2tlbml6ci5fbGluZSx0aGlzLl90b2tlbml6ci5fY29sdW1uKSksdGhpc319LHtrZXk6XCJzdG9wXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdG9rZW5penIuX3N0b3BwZWQ9ITAsdGhpc319XSksdH0oKSxnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3UodGhpcyx0KSx0aGlzLl9iZWZvcmU9bnVsbCx0aGlzLl9hZnRlcj1udWxsLHRoaXMuX2ZpbmlzaD1udWxsLHRoaXMuX3J1bGVzPVtdLHRoaXMuX2RlYnVnPSExLHRoaXMucmVzZXQoKX1yZXR1cm4gaCh0LFt7a2V5OlwicmVzZXRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbnB1dD1cIlwiLHRoaXMuX2xlbj0wLHRoaXMuX2VvZj0hMSx0aGlzLl9wb3M9MCx0aGlzLl9saW5lPTEsdGhpcy5fY29sdW1uPTEsdGhpcy5fc3RhdGU9W1wiZGVmYXVsdFwiXSx0aGlzLl90YWc9e30sdGhpcy5fdHJhbnNhY3Rpb249W10sdGhpcy5fcGVuZGluZz1bXSx0aGlzLl9zdG9wcGVkPSExLHRoaXMuX2N0eD1uZXcgXyh0aGlzKSx0aGlzfX0se2tleTpcImVycm9yXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwKHQsdGhpcy5fcG9zLHRoaXMuX2xpbmUsdGhpcy5fY29sdW1uLHRoaXMuX2lucHV0KX19LHtrZXk6XCJkZWJ1Z1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kZWJ1Zz10LHRoaXN9fSx7a2V5OlwiX2xvZ1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX2RlYnVnJiZjb25zb2xlLmxvZyhcInRva2VuaXpyOiBcIi5jb25jYXQodCkpfX0se2tleTpcImlucHV0XCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCdwYXJhbWV0ZXIgXCJpbnB1dFwiIG5vdCBhIFN0cmluZycpO3JldHVybiB0aGlzLnJlc2V0KCksdGhpcy5faW5wdXQ9dCx0aGlzLl9sZW49dC5sZW5ndGgsdGhpc319LHtrZXk6XCJwdXNoXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoMSE9PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzXCIpO2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigncGFyYW1ldGVyIFwic3RhdGVcIiBub3QgYSBTdHJpbmcnKTtyZXR1cm4gdGhpcy5fbG9nKFwiICAgIFNUQVRFIChQVVNIKTogXCIrXCJvbGQ6IDxcIi5jb25jYXQodGhpcy5fc3RhdGVbdGhpcy5fc3RhdGUubGVuZ3RoLTFdLFwiPiwgXCIpK1wibmV3OiA8XCIuY29uY2F0KHQsXCI+XCIpKSx0aGlzLl9zdGF0ZS5wdXNoKHQpLHRoaXN9fSx7a2V5OlwicG9wXCIsdmFsdWU6ZnVuY3Rpb24oKXtpZigwIT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHNcIik7aWYodGhpcy5fc3RhdGUubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKFwibm8gbW9yZSBjdXN0b20gc3RhdGVzIHRvIHBvcFwiKTtyZXR1cm4gdGhpcy5fbG9nKFwiICAgIFNUQVRFIChQT1ApOiBcIitcIm9sZDogPFwiLmNvbmNhdCh0aGlzLl9zdGF0ZVt0aGlzLl9zdGF0ZS5sZW5ndGgtMV0sXCI+LCBcIikrXCJuZXc6IDxcIi5jb25jYXQodGhpcy5fc3RhdGVbdGhpcy5fc3RhdGUubGVuZ3RoLTJdLFwiPlwiKSksdGhpcy5fc3RhdGUucG9wKCl9fSx7a2V5Olwic3RhdGVcIix2YWx1ZTpmdW5jdGlvbih0KXtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCdwYXJhbWV0ZXIgXCJzdGF0ZVwiIG5vdCBhIFN0cmluZycpO3JldHVybiB0aGlzLl9sb2coXCIgICAgU1RBVEUgKFNFVCk6IFwiK1wib2xkOiA8XCIuY29uY2F0KHRoaXMuX3N0YXRlW3RoaXMuX3N0YXRlLmxlbmd0aC0xXSxcIj4sIFwiKStcIm5ldzogPFwiLmNvbmNhdCh0LFwiPlwiKSksdGhpcy5fc3RhdGVbdGhpcy5fc3RhdGUubGVuZ3RoLTFdPXQsdGhpc31pZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fc3RhdGVbdGhpcy5fc3RhdGUubGVuZ3RoLTFdO3Rocm93IG5ldyBFcnJvcihcImludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50c1wiKX19LHtrZXk6XCJ0YWdcIix2YWx1ZTpmdW5jdGlvbih0KXtpZigxIT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHNcIik7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCdwYXJhbWV0ZXIgXCJ0YWdcIiBub3QgYSBTdHJpbmcnKTtyZXR1cm4gdGhpcy5fbG9nKFwiICAgIFRBRyAoQUREKTogXCIuY29uY2F0KHQpKSx0aGlzLl90YWdbdF09ITAsdGhpc319LHtrZXk6XCJ0YWdnZWRcIix2YWx1ZTpmdW5jdGlvbih0KXtpZigxIT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHNcIik7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCdwYXJhbWV0ZXIgXCJ0YWdcIiBub3QgYSBTdHJpbmcnKTtyZXR1cm4hMD09PXRoaXMuX3RhZ1t0XX19LHtrZXk6XCJ1bnRhZ1wiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKDEhPT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50c1wiKTtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoJ3BhcmFtZXRlciBcInRhZ1wiIG5vdCBhIFN0cmluZycpO3JldHVybiB0aGlzLl9sb2coXCIgICAgVEFHIChERUwpOiBcIi5jb25jYXQodCkpLGRlbGV0ZSB0aGlzLl90YWdbdF0sdGhpc319LHtrZXk6XCJiZWZvcmVcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYmVmb3JlPXQsdGhpc319LHtrZXk6XCJhZnRlclwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hZnRlcj10LHRoaXN9fSx7a2V5OlwiZmluaXNoXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ZpbmlzaD10LHRoaXN9fSx7a2V5OlwicnVsZVwiLHZhbHVlOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106XCJ1bmtub3duXCI7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgmJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe3ZhciBvPVt0LG5dO249b1swXSxlPW9bMV0sdD1cIipcIn1lbHNlIGlmKDM9PT1hcmd1bWVudHMubGVuZ3RoJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXt2YXIgcz1bdCxuLGVdO249c1swXSxlPXNbMV0scj1zWzJdLHQ9XCIqXCJ9aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCdwYXJhbWV0ZXIgXCJzdGF0ZVwiIG5vdCBhIFN0cmluZycpO2lmKCEoXCJvYmplY3RcIj09PWkobikmJm4gaW5zdGFuY2VvZiBSZWdFeHApKXRocm93IG5ldyBFcnJvcigncGFyYW1ldGVyIFwicGF0dGVyblwiIG5vdCBhIFJlZ0V4cCcpO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCdwYXJhbWV0ZXIgXCJhY3Rpb25cIiBub3QgYSBGdW5jdGlvbicpO2lmKFwic3RyaW5nXCIhPXR5cGVvZiByKXRocm93IG5ldyBFcnJvcigncGFyYW1ldGVyIFwibmFtZVwiIG5vdCBhIFN0cmluZycpO3Q9dC5zcGxpdCgvXFxzKixcXHMqL2cpLm1hcChmdW5jdGlvbih0KXt2YXIgbj10LnNwbGl0KC9cXHMrL2cpLGU9bi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10Lm1hdGNoKC9eIy8pfSksaT1uLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PXQubWF0Y2goL14jLyl9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvXiMvLFwiXCIpfSk7aWYoMSE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImV4YWN0bHkgb25lIHN0YXRlIHJlcXVpcmVkXCIpO3JldHVybntzdGF0ZTplWzBdLHRhZ3M6aX19KTt2YXIgYT1cImdcIjt0cnl7XCJib29sZWFuXCI9PXR5cGVvZiBuZXcgUmVnRXhwKFwiXCIsXCJ5XCIpLnN0aWNreSYmKGE9XCJ5XCIpfWNhdGNoKHQpe31yZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIG4ubXVsdGlsaW5lJiZuLm11bHRpbGluZSYmKGErPVwibVwiKSxcImJvb2xlYW5cIj09dHlwZW9mIG4uZG90QWxsJiZuLmRvdEFsbCYmKGErPVwic1wiKSxcImJvb2xlYW5cIj09dHlwZW9mIG4uaWdub3JlQ2FzZSYmbi5pZ25vcmVDYXNlJiYoYSs9XCJpXCIpLFwiYm9vbGVhblwiPT10eXBlb2Ygbi51bmljb2RlJiZuLnVuaWNvZGUmJihhKz1cInVcIiksbj1uZXcgUmVnRXhwKG4uc291cmNlLGEpLHRoaXMuX2xvZyhcInJ1bGU6IGNvbmZpZ3VyZSBydWxlIChzdGF0ZTogXCIuY29uY2F0KHQsXCIsIHBhdHRlcm46IFwiKS5jb25jYXQobi5zb3VyY2UsXCIpXCIpKSx0aGlzLl9ydWxlcy5wdXNoKHtzdGF0ZTp0LHBhdHRlcm46bixhY3Rpb246ZSxuYW1lOnJ9KSx0aGlzfX0se2tleTpcIl9wcm9ncmVzc1wiLHZhbHVlOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXRoaXMuX2xpbmUsaT10aGlzLl9jb2x1bW4scj10aGlzLl9pbnB1dCxvPXQ7bzxuO28rKyl7dmFyIHM9ci5jaGFyQXQobyk7XCJcXHJcIj09PXM/dGhpcy5fY29sdW1uPTE6XCJcXG5cIj09PXM/KHRoaXMuX2xpbmUrKyx0aGlzLl9jb2x1bW49MSk6XCJcXHRcIj09PXM/dGhpcy5fY29sdW1uKz04LXRoaXMuX2NvbHVtbiU4OnRoaXMuX2NvbHVtbisrfXRoaXMuX2xvZyhcIiAgICBQUk9HUkVTUzogY2hhcmFjdGVyczogXCIuY29uY2F0KG4tdCxcIiwgXCIpK1wiZnJvbTogPGxpbmUgXCIuY29uY2F0KGUsXCIsIGNvbHVtbiBcIikuY29uY2F0KGksXCI+LCBcIikrXCJ0bzogPGxpbmUgXCIuY29uY2F0KHRoaXMuX2xpbmUsXCIsIGNvbHVtbiBcIikuY29uY2F0KHRoaXMuX2NvbHVtbixcIj5cIikpfX0se2tleTpcIl90b2tlbml6ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWZ1bmN0aW9uKCl7dC5fZW9mfHwobnVsbCE9PXQuX2ZpbmlzaCYmdC5fZmluaXNoLmNhbGwodC5fY3R4LHQuX2N0eCksdC5fZW9mPSEwLHQuX3BlbmRpbmcucHVzaChuZXcgZihcIkVPRlwiLFwiXCIsXCJcIix0Ll9wb3MsdC5fbGluZSx0Ll9jb2x1bW4pKSl9O2lmKCEodGhpcy5fc3RvcHBlZHx8dGhpcy5fcG9zPj10aGlzLl9sZW4pKXtmb3IodmFyIGU9ITA7ZTspe2lmKGU9ITEsdGhpcy5fZGVidWcpe3ZhciBpPWwodGhpcy5faW5wdXQsdGhpcy5fcG9zKSxyPU9iamVjdC5rZXlzKHRoaXMuX3RhZykubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiI1wiLmNvbmNhdCh0KX0pLmpvaW4oXCIgXCIpO3RoaXMuX2xvZyhcIklOUFVUOiBzdGF0ZTogPFwiLmNvbmNhdCh0aGlzLl9zdGF0ZVt0aGlzLl9zdGF0ZS5sZW5ndGgtMV0sXCI+LCB0YWdzOiA8XCIpLmNvbmNhdChyLFwiPiwgdGV4dDogXCIpKyhpLnByb2xvZ1RydW5jP1wiLi4uXCI6J1wiJykrXCJcIi5jb25jYXQoaS5wcm9sb2dUZXh0LFwiPFwiKS5jb25jYXQoaS50b2tlblRleHQsXCI+XCIpLmNvbmNhdChpLmVwaWxvZ1RleHQpKyhpLmVwaWxvZ1RydW5jP1wiLi4uXCI6J1wiJykrXCIsIGF0OiA8bGluZSBcIi5jb25jYXQodGhpcy5fbGluZSxcIiwgY29sdW1uIFwiKS5jb25jYXQodGhpcy5fY29sdW1uLFwiPlwiKSl9Zm9yKHZhciBvPTA7bzx0aGlzLl9ydWxlcy5sZW5ndGg7bysrKXtpZih0aGlzLl9kZWJ1Zyl7dmFyIHM9dGhpcy5fcnVsZXNbb10uc3RhdGUubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPXQuc3RhdGU7cmV0dXJuIHQudGFncy5sZW5ndGg+MCYmKG4rPVwiIFwiK3QudGFncy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCIjXCIuY29uY2F0KHQpfSkuam9pbihcIiBcIikpLG59KS5qb2luKFwiLCBcIik7dGhpcy5fbG9nKFwiICBSVUxFOiBzdGF0ZShzKTogPFwiLmNvbmNhdChzLFwiPiwgXCIpK1wicGF0dGVybjogXCIuY29uY2F0KHRoaXMuX3J1bGVzW29dLnBhdHRlcm4uc291cmNlKSl9dmFyIGE9ITEsdT10aGlzLl9ydWxlc1tvXS5zdGF0ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RhdGV9KSxjPXUuaW5kZXhPZihcIipcIik7aWYoYzwwJiYoYz11LmluZGV4T2YodGhpcy5fc3RhdGVbdGhpcy5fc3RhdGUubGVuZ3RoLTFdKSksYz49MCl7YT0hMDt2YXIgaD10aGlzLl9ydWxlc1tvXS5zdGF0ZVtjXS50YWdzOyhoPWguZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiF0Ll90YWdbbl19KSkubGVuZ3RoPjAmJihhPSExKX1pZihhKXt0aGlzLl9ydWxlc1tvXS5wYXR0ZXJuLmxhc3RJbmRleD10aGlzLl9wb3M7dmFyIHA9dGhpcy5fcnVsZXNbb10ucGF0dGVybi5leGVjKHRoaXMuX2lucHV0KTtpZih0aGlzLl9ydWxlc1tvXS5wYXR0ZXJuLmxhc3RJbmRleD10aGlzLl9wb3MsbnVsbCE9PShwPXRoaXMuX3J1bGVzW29dLnBhdHRlcm4uZXhlYyh0aGlzLl9pbnB1dCkpJiZwLmluZGV4PT09dGhpcy5fcG9zKXtpZih0aGlzLl9kZWJ1ZyYmdGhpcy5fbG9nKFwiICAgIE1BVENIRUQ6IFwiK0pTT04uc3RyaW5naWZ5KHApKSx0aGlzLl9jdHguX21hdGNoPXAsdGhpcy5fY3R4Ll9yZXBlYXQ9ITEsdGhpcy5fY3R4Ll9yZWplY3Q9ITEsdGhpcy5fY3R4Ll9pZ25vcmU9ITEsbnVsbCE9PXRoaXMuX2JlZm9yZSYmdGhpcy5fYmVmb3JlLmNhbGwodGhpcy5fY3R4LHRoaXMuX2N0eCxwLHRoaXMuX3J1bGVzW29dKSx0aGlzLl9ydWxlc1tvXS5hY3Rpb24uY2FsbCh0aGlzLl9jdHgsdGhpcy5fY3R4LHApLG51bGwhPT10aGlzLl9hZnRlciYmdGhpcy5fYWZ0ZXIuY2FsbCh0aGlzLl9jdHgsdGhpcy5fY3R4LHAsdGhpcy5fcnVsZXNbb10pLHRoaXMuX2N0eC5fcmVqZWN0KWNvbnRpbnVlO2lmKHRoaXMuX2N0eC5fcmVwZWF0KXtlPSEwO2JyZWFrfWlmKHRoaXMuX2N0eC5faWdub3JlKXtpZih0aGlzLl9wcm9ncmVzcyh0aGlzLl9wb3MsdGhpcy5fcnVsZXNbb10ucGF0dGVybi5sYXN0SW5kZXgpLHRoaXMuX3Bvcz10aGlzLl9ydWxlc1tvXS5wYXR0ZXJuLmxhc3RJbmRleCx0aGlzLl9wb3M+PXRoaXMuX2xlbilyZXR1cm4gdm9pZCBuKCk7ZT0hMDticmVha31pZih0aGlzLl9wZW5kaW5nLmxlbmd0aD4wKXJldHVybiB0aGlzLl9wcm9ncmVzcyh0aGlzLl9wb3MsdGhpcy5fcnVsZXNbb10ucGF0dGVybi5sYXN0SW5kZXgpLHRoaXMuX3Bvcz10aGlzLl9ydWxlc1tvXS5wYXR0ZXJuLmxhc3RJbmRleCx2b2lkKHRoaXMuX3Bvcz49dGhpcy5fbGVuJiZuKCkpO3Rocm93IG5ldyBFcnJvcignYWN0aW9uIG9mIHBhdHRlcm4gXCInK3RoaXMuX3J1bGVzW29dLnBhdHRlcm4uc291cmNlKydcIiBuZWl0aGVyIHJlamVjdGVkIG5vciBhY2NlcHRlZCBhbnkgdG9rZW4ocyknKX19fX10aHJvdyB0aGlzLmVycm9yKFwidG9rZW4gbm90IHJlY29nbml6ZWRcIil9bigpfX0se2tleTpcInRva2VuXCIsdmFsdWU6ZnVuY3Rpb24oKXtpZigwPT09dGhpcy5fcGVuZGluZy5sZW5ndGgmJnRoaXMuX3Rva2VuaXplKCksdGhpcy5fcGVuZGluZy5sZW5ndGg+MCl7dmFyIHQ9dGhpcy5fcGVuZGluZy5zaGlmdCgpO3JldHVybiB0aGlzLl90cmFuc2FjdGlvbi5sZW5ndGg+MCYmdGhpcy5fdHJhbnNhY3Rpb25bMF0ucHVzaCh0KSx0aGlzLl9sb2coXCJUT0tFTjogXCIuY29uY2F0KHQudG9TdHJpbmcoKSkpLHR9cmV0dXJuIG51bGx9fSx7a2V5OlwidG9rZW5zXCIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIHQsbj1bXTtudWxsIT09KHQ9dGhpcy50b2tlbigpKTspbi5wdXNoKHQpO3JldHVybiBufX0se2tleTpcInBlZWtcIix2YWx1ZTpmdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0wKTtmb3IodmFyIG49MDtuPHRoaXMuX3BlbmRpbmcubGVuZ3RoK3Q7bisrKXRoaXMuX3Rva2VuaXplKCk7aWYodD49dGhpcy5fcGVuZGluZy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwibm90IGVub3VnaCB0b2tlbnMgYXZhaWxhYmxlIGZvciBwZWVrIG9wZXJhdGlvblwiKTtyZXR1cm4gdGhpcy5fbG9nKFwiUEVFSzogXCIuY29uY2F0KHRoaXMuX3BlbmRpbmdbdF0udG9TdHJpbmcoKSkpLHRoaXMuX3BlbmRpbmdbdF19fSx7a2V5Olwic2tpcFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PTEpO2Zvcih2YXIgbj0wO248dGhpcy5fcGVuZGluZy5sZW5ndGgrdDtuKyspdGhpcy5fdG9rZW5pemUoKTtpZih0PnRoaXMuX3BlbmRpbmcubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIm5vdCBlbm91Z2ggdG9rZW5zIGF2YWlsYWJsZSBmb3Igc2tpcCBvcGVyYXRpb25cIik7Zm9yKDt0LS0gPjA7KXRoaXMudG9rZW4oKTtyZXR1cm4gdGhpc319LHtrZXk6XCJjb25zdW1lXCIsdmFsdWU6ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dGhpcyxyPTA7cjx0aGlzLl9wZW5kaW5nLmxlbmd0aCsxO3IrKyl0aGlzLl90b2tlbml6ZSgpO2lmKDA9PT10aGlzLl9wZW5kaW5nLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJub3QgZW5vdWdoIHRva2VucyBhdmFpbGFibGUgZm9yIGNvbnN1bWUgb3BlcmF0aW9uXCIpO3ZhciBvPXRoaXMudG9rZW4oKTt0aGlzLl9sb2coXCJDT05TVU1FOiBcIi5jb25jYXQoby50b1N0cmluZygpKSk7dmFyIHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgcChcImV4cGVjdGVkOiA8dHlwZTogXCIuY29uY2F0KHQsXCIsIHZhbHVlOiBcIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KG4pLFwiIChcIikuY29uY2F0KGkobiksXCIpPiwgXCIpK1wiZm91bmQ6IDx0eXBlOiBcIi5jb25jYXQoby50eXBlLFwiLCB2YWx1ZTogXCIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShvLnZhbHVlKSxcIiAoXCIpLmNvbmNhdChpKG8udmFsdWUpLFwiKT5cIiksby5wb3Msby5saW5lLG8uY29sdW1uLGUuX2lucHV0KX07cmV0dXJuIDIhPT1hcmd1bWVudHMubGVuZ3RofHxvLmlzQSh0LG4pP28uaXNBKHQpfHxzKCk6cyhKU09OLnN0cmluZ2lmeShuKSxpKG4pKSxvfX0se2tleTpcImJlZ2luXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9nKFwiQkVHSU46IGxldmVsIFwiLmNvbmNhdCh0aGlzLl90cmFuc2FjdGlvbi5sZW5ndGgpKSx0aGlzLl90cmFuc2FjdGlvbi51bnNoaWZ0KFtdKSx0aGlzfX0se2tleTpcImRlcHRoXCIsdmFsdWU6ZnVuY3Rpb24oKXtpZigwPT09dGhpcy5fdHJhbnNhY3Rpb24ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImNhbm5vdCBkZXRlcm1pbmUgZGVwdGggLS0gbm8gYWN0aXZlIHRyYW5zYWN0aW9uXCIpO3JldHVybiB0aGlzLl90cmFuc2FjdGlvblswXS5sZW5ndGh9fSx7a2V5OlwiY29tbWl0XCIsdmFsdWU6ZnVuY3Rpb24oKXtpZigwPT09dGhpcy5fdHJhbnNhY3Rpb24ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImNhbm5vdCBjb21taXQgdHJhbnNhY3Rpb24gLS0gbm8gYWN0aXZlIHRyYW5zYWN0aW9uXCIpO3JldHVybiB0aGlzLl90cmFuc2FjdGlvbi5zaGlmdCgpLHRoaXMuX2xvZyhcIkNPTU1JVDogbGV2ZWwgXCIuY29uY2F0KHRoaXMuX3RyYW5zYWN0aW9uLmxlbmd0aCkpLHRoaXN9fSx7a2V5Olwicm9sbGJhY2tcIix2YWx1ZTpmdW5jdGlvbigpe2lmKDA9PT10aGlzLl90cmFuc2FjdGlvbi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiY2Fubm90IHJvbGxiYWNrIHRyYW5zYWN0aW9uIC0tIG5vIGFjdGl2ZSB0cmFuc2FjdGlvblwiKTtyZXR1cm4gdGhpcy5fcGVuZGluZz10aGlzLl90cmFuc2FjdGlvblswXS5jb25jYXQodGhpcy5fcGVuZGluZyksdGhpcy5fdHJhbnNhY3Rpb24uc2hpZnQoKSx0aGlzLl9sb2coXCJST0xMQkFDSzogbGV2ZWwgXCIuY29uY2F0KHRoaXMuX3RyYW5zYWN0aW9uLmxlbmd0aCkpLHRoaXN9fSx7a2V5OlwiYWx0ZXJuYXRpdmVzXCIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9bnVsbCxuPVtdLGU9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlO3IrKylpW3JdPWFyZ3VtZW50c1tyXTtmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKyl0cnl7dGhpcy5iZWdpbigpLHQ9aVtvXS5jYWxsKHRoaXMpLHRoaXMuY29tbWl0KCk7YnJlYWt9Y2F0Y2godCl7dGhpcy5fbG9nKFwiRVhDRVBUSU9OOiBcIi5jb25jYXQodC50b1N0cmluZygpKSksbi5wdXNoKHtleDp0LGRlcHRoOnRoaXMuZGVwdGgoKX0pLHRoaXMucm9sbGJhY2soKTtjb250aW51ZX1pZihudWxsPT09dCYmbi5sZW5ndGg+MCl0aHJvdyhuPW4uc29ydChmdW5jdGlvbih0LG4pe3JldHVybiB0LmRlcHRoLW4uZGVwdGh9KSlbMF0uZXg7cmV0dXJuIHR9fV0pLHR9KCk7Zy5Ub2tlbj1mLGcuUGFyc2luZ0Vycm9yPXAsZy5BY3Rpb25Db250ZXh0PV8sbi5leHBvcnRzPWd9LHt9XX0se30sWzFdKSgxKX0pOyIsIlwidXNlIHN0cmljdFwiO3ZhciBfdG9rZW5penI9X2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwidG9rZW5penJcIikpO2Z1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIGNvbXBhY3RHcmFwaFFMUXVlcnkoZSl7dmFyIHQ9bmV3IF90b2tlbml6ci5kZWZhdWx0O3QucnVsZSgvI1teXFxyXFxuXSooPz1cXHI/XFxuKS8sZnVuY3Rpb24oZSx0KXtlLmFjY2VwdChcImNvbW1lbnRcIil9KSx0LnJ1bGUoL1wiKD86XFxcXFwifFteXCJdKSpcIi8sZnVuY3Rpb24oZSx0KXtlLmFjY2VwdChcInN0cmluZ1wiKX0pLHQucnVsZSgvJFthLXpBLVpfXVthLXpBLVowLTlfXSovLGZ1bmN0aW9uKGUsdCl7ZS5hY2NlcHQoXCJ2YXJcIil9KSx0LnJ1bGUoL1thLXpBLVpfXVthLXpBLVowLTlfXSovLGZ1bmN0aW9uKGUsdCl7ZS5hY2NlcHQoXCJpZFwiKX0pLHQucnVsZSgvWystXT9bMC05XSpcXC4/WzAtOV0rKD86W2VFXVsrLV0/WzAtOV0rKT8vLGZ1bmN0aW9uKGUsdCl7ZS5hY2NlcHQoXCJudW1iZXJcIil9KSx0LnJ1bGUoL1sgXFx0XFxyXFxuXSsvLGZ1bmN0aW9uKGUsdCl7ZS5hY2NlcHQoXCJ3c1wiLFwiIFwiKX0pLHQucnVsZSgvW3t9XS8sZnVuY3Rpb24oZSx0KXtlLmFjY2VwdChcImJyYWNlXCIpfSksdC5ydWxlKC9bW1xcXV0vLGZ1bmN0aW9uKGUsdCl7ZS5hY2NlcHQoXCJicmFja2V0XCIpfSksdC5ydWxlKC9bKCldLyxmdW5jdGlvbihlLHQpe2UuYWNjZXB0KFwicGFyZW50aGVzaXNcIil9KSx0LnJ1bGUoLywvLGZ1bmN0aW9uKGUsdCl7ZS5hY2NlcHQoXCJjb21tYVwiKX0pLHQucnVsZSgvIS8sZnVuY3Rpb24oZSx0KXtlLmFjY2VwdChcIm5vdFwiKX0pLHQucnVsZSgvXFwuXFwuXFwuLyxmdW5jdGlvbihlLHQpe2UuYWNjZXB0KFwiZWxsaXBzaXNcIil9KSx0LnJ1bGUoL0AvLGZ1bmN0aW9uKGUsdCl7ZS5hY2NlcHQoXCJhdFwiKX0pLHQucnVsZSgvOi8sZnVuY3Rpb24oZSx0KXtlLmFjY2VwdChcImNvbG9uXCIpfSksdC5ydWxlKC8uLyxmdW5jdGlvbihlLHQpe2UuYWNjZXB0KFwiYW55XCIpfSksdC5pbnB1dChlKSx0LmRlYnVnKCExKTtmb3IodmFyIGM9dC50b2tlbnMoKSxuPVwiXCIscj0vXig/OmJyYWNlfGJyYWNrZXR8cGFyZW50aGVzaXN8Y29tbWF8Y29sb24pJC8sdT0wO3U8Yy5sZW5ndGg7dSsrKShcImNvbW1lbnRcIj09PWNbdV0udHlwZXx8XCJ3c1wiPT09Y1t1XS50eXBlJiYodTxjLmxlbmd0aC0xJiZjW3UrMV0udHlwZS5tYXRjaChyKXx8dT4wJiZjW3UtMV0udHlwZS5tYXRjaChyKSkpJiYoYy5zcGxpY2UodSwxKSx1LS0pO3JldHVybiBjLmZvckVhY2goZnVuY3Rpb24oZSl7bis9ZS52YWx1ZX0pLG59bW9kdWxlLmV4cG9ydHM9Y29tcGFjdEdyYXBoUUxRdWVyeTsiXX0=
/*
** graphql-query-compress -- Compress a GraphQL Query String
** Copyright (c) 2017-2018 Ralf S. Engelschall <rse@engelschall.com>
** Copyright (c) 2017-2019 Ralf S. Engelschall <rse@engelschall.com>
**

@@ -34,3 +34,3 @@ ** Permission is hereby granted, free of charge, to any person obtaining

** graphql-query-compress -- Compress a GraphQL Query String
** Copyright (c) 2017-2018 Ralf S. Engelschall <rse@engelschall.com>
** Copyright (c) 2017-2019 Ralf S. Engelschall <rse@engelschall.com>
**

@@ -37,0 +37,0 @@ ** Permission is hereby granted, free of charge, to any person obtaining

Copyright (c) 2017-2018 Ralf S. Engelschall (http://engelschall.com/)
Copyright (c) 2017-2019 Ralf S. Engelschall (http://engelschall.com/)

@@ -4,0 +4,0 @@ Permission is hereby granted, free of charge, to any person obtaining

{
"name": "graphql-query-compress",
"version": "1.2.0",
"version": "1.2.1",
"description": "Compress a GraphQL Query String",

@@ -22,3 +22,3 @@ "keywords": [ "graphql", "query", "compress" ],

"dependencies": {
"tokenizr": "1.4.0"
"tokenizr": "1.5.2"
},

@@ -34,3 +34,3 @@ "devDependencies": {

"@babel/core": "7.2.2",
"@babel/preset-env": "7.2.3",
"@babel/preset-env": "7.3.1",
"uglifyify": "5.0.1",

@@ -41,8 +41,8 @@ "browserify-header": "1.0.0",

"babel-eslint": "10.0.1",
"eslint": "5.10.0",
"eslint": "5.13.0",
"eslint-config-standard": "12.0.0",
"eslint-plugin-standard": "4.0.0",
"eslint-plugin-promise": "4.0.1",
"eslint-plugin-import": "2.14.0",
"eslint-plugin-node": "8.0.0"
"eslint-plugin-import": "2.16.0",
"eslint-plugin-node": "8.0.1"
},

@@ -49,0 +49,0 @@ "scripts": {

@@ -50,3 +50,3 @@

Copyright &copy; 2017-2018 Ralf S. Engelschall (http://engelschall.com/)
Copyright &copy; 2017-2019 Ralf S. Engelschall (http://engelschall.com/)

@@ -53,0 +53,0 @@ Permission is hereby granted, free of charge, to any person obtaining

/*
** graphql-query-compress -- Compress a GraphQL Query String
** Copyright (c) 2017-2018 Ralf S. Engelschall <rse@engelschall.com>
** Copyright (c) 2017-2019 Ralf S. Engelschall <rse@engelschall.com>
**

@@ -5,0 +5,0 @@ ** Permission is hereby granted, free of charge, to any person obtaining

/*
** graphql-query-compress -- Compress a GraphQL Query String
** Copyright (c) 2017-2018 Ralf S. Engelschall <rse@engelschall.com>
** Copyright (c) 2017-2019 Ralf S. Engelschall <rse@engelschall.com>
**

@@ -5,0 +5,0 @@ ** Permission is hereby granted, free of charge, to any person obtaining

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc