@untemps/react-vocal 2.0.0-beta.5 → 2.0.0-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/README.md +4 -1
- package/dev/src/index.jsx +11 -3
- package/dist/index.es.js +99 -78
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +2 -2
- package/dist/index.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/components/Vocal.jsx +38 -10
- package/src/components/__tests__/Vocal.test.jsx +152 -15
- package/src/components/__tests__/__snapshots__/Vocal.test.jsx.snap +1 -1
- package/src/hooks/__tests__/useVocal.test.js +7 -2
- package/src/hooks/useCommands.js +11 -11
- package/src/hooks/useVocal.js +3 -3
- package/vitest.setup.js +8 -2
package/dist/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","names":["e"],"sources":["../node_modules/@untemps/vocal/dist/index.es.js","../node_modules/@untemps/utils/dist/function/isFunction.js","../src/hooks/useVocal.js","../src/hooks/useTimeout.js","../src/hooks/useCommands.js","../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/components/Icon.jsx","../src/components/Vocal.jsx","../src/index.js"],"sourcesContent":["var t=function(t,e,r){return t(r={path:e,exports:{},require:function(t,e){return function(){throw new Error(\"Dynamic requires are not currently supported by @rollup/plugin-commonjs\")}(null==e&&r.path)}},r.exports),r.exports}((function(t){var e=function(t){var e=Object.prototype,r=e.hasOwnProperty,n=\"function\"==typeof Symbol?Symbol:{},o=n.iterator||\"@@iterator\",i=n.asyncIterator||\"@@asyncIterator\",a=n.toStringTag||\"@@toStringTag\";function c(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},\"\")}catch(t){c=function(t,e,r){return t[e]=r}}function u(t,e,r,n){var o=e&&e.prototype instanceof f?e:f,i=Object.create(o.prototype),a=new _(n||[]);return i._invoke=function(t,e,r){var n=\"suspendedStart\";return function(o,i){if(\"executing\"===n)throw new Error(\"Generator is already running\");if(\"completed\"===n){if(\"throw\"===o)throw i;return S()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var c=b(a,r);if(c){if(c===l)continue;return c}}if(\"next\"===r.method)r.sent=r._sent=r.arg;else if(\"throw\"===r.method){if(\"suspendedStart\"===n)throw n=\"completed\",r.arg;r.dispatchException(r.arg)}else\"return\"===r.method&&r.abrupt(\"return\",r.arg);n=\"executing\";var u=s(t,e,r);if(\"normal\"===u.type){if(n=r.done?\"completed\":\"suspendedYield\",u.arg===l)continue;return{value:u.arg,done:r.done}}\"throw\"===u.type&&(n=\"completed\",r.method=\"throw\",r.arg=u.arg)}}}(t,r,a),i}function s(t,e,r){try{return{type:\"normal\",arg:t.call(e,r)}}catch(t){return{type:\"throw\",arg:t}}}t.wrap=u;var l={};function f(){}function h(){}function p(){}var v={};v[o]=function(){return this};var y=Object.getPrototypeOf,d=y&&y(y(x([])));d&&d!==e&&r.call(d,o)&&(v=d);var m=p.prototype=f.prototype=Object.create(v);function g(t){[\"next\",\"throw\",\"return\"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function w(t,e){var n;this._invoke=function(o,i){function a(){return new e((function(n,a){!function n(o,i,a,c){var u=s(t[o],t,i);if(\"throw\"!==u.type){var l=u.arg,f=l.value;return f&&\"object\"==typeof f&&r.call(f,\"__await\")?e.resolve(f.__await).then((function(t){n(\"next\",t,a,c)}),(function(t){n(\"throw\",t,a,c)})):e.resolve(f).then((function(t){l.value=t,a(l)}),(function(t){return n(\"throw\",t,a,c)}))}c(u.arg)}(o,i,n,a)}))}return n=n?n.then(a,a):a()}}function b(t,e){var r=t.iterator[e.method];if(void 0===r){if(e.delegate=null,\"throw\"===e.method){if(t.iterator.return&&(e.method=\"return\",e.arg=void 0,b(t,e),\"throw\"===e.method))return l;e.method=\"throw\",e.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return l}var n=s(r,t.iterator,e.arg);if(\"throw\"===n.type)return e.method=\"throw\",e.arg=n.arg,e.delegate=null,l;var o=n.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,\"return\"!==e.method&&(e.method=\"next\",e.arg=void 0),e.delegate=null,l):o:(e.method=\"throw\",e.arg=new TypeError(\"iterator result is not an object\"),e.delegate=null,l)}function E(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function O(t){var e=t.completion||{};e.type=\"normal\",delete e.arg,t.completion=e}function _(t){this.tryEntries=[{tryLoc:\"root\"}],t.forEach(E,this),this.reset(!0)}function x(t){if(t){var e=t[o];if(e)return e.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n<t.length;)if(r.call(t,n))return e.value=t[n],e.done=!1,e;return e.value=void 0,e.done=!0,e};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return h.prototype=m.constructor=p,p.constructor=h,h.displayName=c(p,a,\"GeneratorFunction\"),t.isGeneratorFunction=function(t){var e=\"function\"==typeof t&&t.constructor;return!!e&&(e===h||\"GeneratorFunction\"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,p):(t.__proto__=p,c(t,a,\"GeneratorFunction\")),t.prototype=Object.create(m),t},t.awrap=function(t){return{__await:t}},g(w.prototype),w.prototype[i]=function(){return this},t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(u(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},g(m),c(m,a,\"Generator\"),m[o]=function(){return this},m.toString=function(){return\"[object Generator]\"},t.keys=function(t){var e=[];for(var r in t)e.push(r);return e.reverse(),function r(){for(;e.length;){var n=e.pop();if(n in t)return r.value=n,r.done=!1,r}return r.done=!0,r}},t.values=x,_.prototype={constructor:_,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=void 0,this.tryEntries.forEach(O),!t)for(var e in this)\"t\"===e.charAt(0)&&r.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if(\"throw\"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function n(r,n){return a.type=\"throw\",a.arg=t,e.next=r,n&&(e.method=\"next\",e.arg=void 0),!!n}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if(\"root\"===i.tryLoc)return n(\"end\");if(i.tryLoc<=this.prev){var c=r.call(i,\"catchLoc\"),u=r.call(i,\"finallyLoc\");if(c&&u){if(this.prev<i.catchLoc)return n(i.catchLoc,!0);if(this.prev<i.finallyLoc)return n(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return n(i.catchLoc,!0)}else{if(!u)throw new Error(\"try statement without catch or finally\");if(this.prev<i.finallyLoc)return n(i.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,\"finallyLoc\")&&this.prev<o.finallyLoc){var i=o;break}}i&&(\"break\"===t||\"continue\"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=e,i?(this.method=\"next\",this.next=i.finallyLoc,l):this.complete(a)},complete:function(t,e){if(\"throw\"===t.type)throw t.arg;return\"break\"===t.type||\"continue\"===t.type?this.next=t.arg:\"return\"===t.type?(this.rval=this.arg=t.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===t.type&&e&&(this.next=e),l},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),O(r),l}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if(\"throw\"===n.type){var o=n.arg;O(r)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(t,e,r){return this.delegate={iterator:x(t),resultName:e,nextLoc:r},\"next\"===this.method&&(this.arg=void 0),l}},t}(t.exports);try{regeneratorRuntime=e}catch(t){Function(\"r\",\"regeneratorRuntime = r\")(e)}}));function e(t,e,r,n,o,i,a){try{var c=t[i](a),u=c.value}catch(t){return void r(t)}c.done?e(u):Promise.resolve(u).then(n,o)}var r=function(t){return function(){var r=this,n=arguments;return new Promise((function(o,i){var a=t.apply(r,n);function c(t){e(a,o,i,c,u,\"next\",t)}function u(t){e(a,o,i,c,u,\"throw\",t)}c(void 0)}))}};var n=function(t){if(Array.isArray(t))return t};var o=function(t,e){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(t)){var r=[],n=!0,o=!1,i=void 0;try{for(var a,c=t[Symbol.iterator]();!(n=(a=c.next()).done)&&(r.push(a.value),!e||r.length!==e);n=!0);}catch(t){o=!0,i=t}finally{try{n||null==c.return||c.return()}finally{if(o)throw i}}return r}};var i=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n};var a=function(t,e){if(t){if(\"string\"==typeof t)return i(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===r&&t.constructor&&(r=t.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(t):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(t,e):void 0}};var c=function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")};var u=function(t,e){return n(t)||o(t,e)||a(t,e)||c()};var s=function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")};function l(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var f=function(t,e,r){return e&&l(t.prototype,e),r&&l(t,r),t};var h=function(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t},p=function(){return!!navigator.permissions},v=function(){return!!navigator.mediaDevices};function y(t,e,r,n,o,i,a){try{var c=t[i](a),u=c.value}catch(t){return void r(t)}c.done?e(u):Promise.resolve(u).then(n,o)}function d(t){return function(){var e=this,r=arguments;return new Promise((function(n,o){var i=t.apply(e,r);function a(t){y(i,n,o,a,c,\"next\",t)}function c(t){y(i,n,o,a,c,\"throw\",t)}a(void 0)}))}}function m(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(t)){var r=[],n=!0,o=!1,i=void 0;try{for(var a,c=t[Symbol.iterator]();!(n=(a=c.next()).done)&&(r.push(a.value),!e||r.length!==e);n=!0);}catch(t){o=!0,i=t}finally{try{n||null==c.return||c.return()}finally{if(o)throw i}}return r}}(t,e)||function(t,e){if(t){if(\"string\"==typeof t)return g(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===r&&t.constructor&&(r=t.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(t):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?g(t,e):void 0}}(t,e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function g(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}var w=function(){var t=d(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt(\"return\",new Promise(function(){var t=d(regeneratorRuntime.mark((function t(r,n){var o,i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return p()||n(new DOMException(\"Navigator API: permissions not supported\",\"NOT_SUPPORTED_ERR\")),t.prev=1,t.next=4,navigator.permissions.query({name:e});case 4:o=t.sent,i=function t(e){o.removeEventListener(\"change\",t),b(e.target.state,r,n)},o.addEventListener(\"change\",i),b(o.state,r,n),t.next=13;break;case 10:t.prev=10,t.t0=t.catch(1),n(t.t0);case 13:case\"end\":return t.stop()}}),t,null,[[1,10]])})));return function(e,r){return t.apply(this,arguments)}}()));case 1:case\"end\":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),b=function(t,e,r){switch(t){case\"denied\":r(new DOMException(\"Permission denied\",\"NOT_ALLOWED_ERR\"));break;default:e(t)}},E=function(){var t=d(regeneratorRuntime.mark((function t(e,r){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt(\"return\",new Promise(function(){var t=d(regeneratorRuntime.mark((function t(n,o){var i,a,c;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return p()&&v()||o(new DOMException(\"Navigator API: permissions or Navigator API: mediaDevices not supported\",\"NOT_SUPPORTED_ERR\")),t.prev=1,t.t0=Promise,t.next=5,w(e);case 5:return t.t1=t.sent,t.next=8,navigator.mediaDevices.getUserMedia(r);case 8:return t.t2=t.sent,t.t3=[t.t1,t.t2],t.next=12,t.t0.all.call(t.t0,t.t3);case 12:i=t.sent,a=m(i,2),c=a[1],n(c),t.next=21;break;case 18:t.prev=18,t.t4=t.catch(1),o(t.t4);case 21:case\"end\":return t.stop()}}),t,null,[[1,18]])})));return function(e,r){return t.apply(this,arguments)}}()));case 1:case\"end\":return t.stop()}}),t)})));return function(e,r){return t.apply(this,arguments)}}();function O(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function _(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?O(Object(r),!0).forEach((function(e){h(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):O(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}var x=function(){function e(t){var r=this;s(this,e),h(this,\"_instance\",null),h(this,\"_listeners\",null);var n=e._resolveSpeechRecognition();if(!n)throw new DOMException(\"SpeechRecognition not supported\",\"NOT_SUPPORTED_ERR\");this._instance=new n,this._listeners={},Object.entries(_(_({},e.defaultOptions),t||{})).forEach((function(t){var n=u(t,2),o=n[0],i=n[1];if(\"grammars\"===o&&!i){var a=e._resolveSpeechGrammarList();a&&(i=new a)}r._instance[o]=i}))}var n;return f(e,null,[{key:\"isSupported\",get:function(){return!!e._resolveSpeechRecognition()&&!!p()&&!!v()},set:function(t){throw new Error(\"You cannot set isSupported directly.\")}}]),f(e,[{key:\"start\",value:(n=r(t.mark((function e(){var r;return t.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!this._instance){t.next=14;break}return t.prev=1,t.next=4,E(\"microphone\",{audio:!0});case 4:if(t.sent){t.next=7;break}throw new Error(\"Unable to retrieve the stream from media device\");case 7:this._instance.start(),t.next=14;break;case 10:t.prev=10,t.t0=t.catch(1),(r=this._listeners.error)&&r(t.t0);case 14:return t.abrupt(\"return\",this);case 15:case\"end\":return t.stop()}}),e,this,[[1,10]])}))),function(){return n.apply(this,arguments)})},{key:\"stop\",value:function(){return this._instance&&this._instance.stop(),this}},{key:\"abort\",value:function(){return this._instance&&this._instance.abort(),this}},{key:\"addEventListener\",value:function(t,r){var n=this;if(this._instance&&this._includesEventType(t)){this._listeners[t]&&this.removeEventListener(t);var o=function(o){var i=[];t===e.eventTypes.RESULT&&o.results&&o.results.length>0&&i.push(o.results[0][0].transcript),r&&r.apply(n,[o].concat(i))};this._instance.addEventListener(t,o),this._listeners[t]=o}return this}},{key:\"removeEventListener\",value:function(t){var e=this._listeners[t];return this._instance.removeEventListener(t,e),delete this._listeners[t],this}},{key:\"cleanup\",value:function(){var t=this;return this.stop(),Object.keys(this._listeners).forEach((function(e){return t.removeEventListener(e)})),this._instance=null,this}},{key:\"_includesEventType\",value:function(t){return!!Object.values(e.eventTypes).find((function(e){return e===t}))}},{key:\"instance\",get:function(){return this._instance},set:function(t){throw new Error(\"You cannot set instance directly.\")}}],[{key:\"_resolveSpeechRecognition\",value:function(){return window.SpeechRecognition||window.webkitSpeechRecognition||window.mozSpeechRecognition||window.msSpeechRecognition}},{key:\"_resolveSpeechGrammarList\",value:function(){return window.SpeechGrammarList||window.webkitSpeechGrammarList||window.mozSpeechGrammarList||window.msSpeechGrammarList}}]),e}();h(x,\"defaultOptions\",{grammars:null,lang:\"en-US\",continuous:!1,interimResults:!1,maxAlternatives:1,serviceURI:null}),h(x,\"eventTypes\",{AUDIO_END:\"audioend\",AUDIO_START:\"audiostart\",END:\"end\",ERROR:\"error\",NO_MATCH:\"nomatch\",RESULT:\"result\",SOUND_END:\"soundend\",SOUND_START:\"soundstart\",SPEECH_END:\"speechend\",SPEECH_START:\"speechstart\",START:\"start\"});export{x as Vocal};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZXMuanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanMiLCIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXkuanMiLCIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIsIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCIuLi9ub2RlX21vZHVsZXMvQHVudGVtcHMvdXNlci1wZXJtaXNzaW9ucy11dGlscy9kaXN0L2luZGV4LmVzLmpzIiwiLi4vc3JjL1ZvY2FsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxudmFyIHJ1bnRpbWUgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICBmdW5jdGlvbiBkZWZpbmUob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gb2JqW2tleV07XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBJRSA4IGhhcyBhIGJyb2tlbiBPYmplY3QuZGVmaW5lUHJvcGVydHkgdGhhdCBvbmx5IHdvcmtzIG9uIERPTSBvYmplY3RzLlxuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRlZmluZSA9IGZ1bmN0aW9uKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIG9ialtrZXldID0gdmFsdWU7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIGV4cG9ydHMud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gZGVmaW5lKFxuICAgIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLFxuICAgIHRvU3RyaW5nVGFnU3ltYm9sLFxuICAgIFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICApO1xuXG4gIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG4gIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIGRlZmluZShwcm90b3R5cGUsIG1ldGhvZCwgZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBleHBvcnRzLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGRlZmluZShnZW5GdW4sIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCk7XG4gICAgcmV0dXJuIGdlbkZ1bjtcbiAgfTtcblxuICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIilgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLlxuICBleHBvcnRzLmF3cmFwID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHsgX19hd2FpdDogYXJnIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IsIFByb21pc2VJbXBsKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZUltcGwucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24odW53cmFwcGVkKSB7XG4gICAgICAgICAgLy8gV2hlbiBhIHlpZWxkZWQgUHJvbWlzZSBpcyByZXNvbHZlZCwgaXRzIGZpbmFsIHZhbHVlIGJlY29tZXNcbiAgICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi5cbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQ7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgIC8vIElmIGEgcmVqZWN0ZWQgUHJvbWlzZSB3YXMgeWllbGRlZCwgdGhyb3cgdGhlIHJlamVjdGlvbiBiYWNrXG4gICAgICAgICAgLy8gaW50byB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIHNvIGl0IGNhbiBiZSBoYW5kbGVkIHRoZXJlLlxuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCBlcnJvciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2VJbXBsKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPVxuICAgICAgICAvLyBJZiBlbnF1ZXVlIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byB3YWl0IHVudGlsXG4gICAgICAgIC8vIGFsbCBwcmV2aW91cyBQcm9taXNlcyBoYXZlIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgaW52b2tlLFxuICAgICAgICAvLyBzbyB0aGF0IHJlc3VsdHMgYXJlIGFsd2F5cyBkZWxpdmVyZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIElmXG4gICAgICAgIC8vIGVucXVldWUgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gaXQgaXMgaW1wb3J0YW50IHRvXG4gICAgICAgIC8vIGNhbGwgaW52b2tlIGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgb24gYSBjYWxsYmFjayB0byBmaXJlLFxuICAgICAgICAvLyBzbyB0aGF0IHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gaGFzIHRoZSBvcHBvcnR1bml0eSB0byBkb1xuICAgICAgICAvLyBhbnkgbmVjZXNzYXJ5IHNldHVwIGluIGEgcHJlZGljdGFibGUgd2F5LiBUaGlzIHByZWRpY3RhYmlsaXR5XG4gICAgICAgIC8vIGlzIHdoeSB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGludm9rZXMgaXRzXG4gICAgICAgIC8vIGV4ZWN1dG9yIGNhbGxiYWNrLCBhbmQgd2h5IGFzeW5jIGZ1bmN0aW9ucyBzeW5jaHJvbm91c2x5XG4gICAgICAgIC8vIGV4ZWN1dGUgY29kZSBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0LiBTaW5jZSB3ZSBpbXBsZW1lbnQgc2ltcGxlXG4gICAgICAgIC8vIGFzeW5jIGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiBhc3luYyBnZW5lcmF0b3JzLCBpdCBpcyBlc3BlY2lhbGx5XG4gICAgICAgIC8vIGltcG9ydGFudCB0byBnZXQgdGhpcyByaWdodCwgZXZlbiB0aG91Z2ggaXQgcmVxdWlyZXMgY2FyZS5cbiAgICAgICAgcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsXG4gICAgICAgICAgLy8gQXZvaWQgcHJvcGFnYXRpbmcgZmFpbHVyZXMgdG8gUHJvbWlzZXMgcmV0dXJuZWQgYnkgbGF0ZXJcbiAgICAgICAgICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmdcbiAgICAgICAgKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIHRoZSB1bmlmaWVkIGhlbHBlciBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIChzZWUgZGVmaW5lSXRlcmF0b3JNZXRob2RzKS5cbiAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICB9XG5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKTtcbiAgQXN5bmNJdGVyYXRvci5wcm90b3R5cGVbYXN5bmNJdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIGV4cG9ydHMuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIGV4cG9ydHMuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCwgUHJvbWlzZUltcGwpIHtcbiAgICBpZiAoUHJvbWlzZUltcGwgPT09IHZvaWQgMCkgUHJvbWlzZUltcGwgPSBQcm9taXNlO1xuXG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpLFxuICAgICAgUHJvbWlzZUltcGxcbiAgICApO1xuXG4gICAgcmV0dXJuIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIC8vIE5vdGU6IFtcInJldHVyblwiXSBtdXN0IGJlIHVzZWQgZm9yIEVTMyBwYXJzaW5nIGNvbXBhdGliaWxpdHkuXG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIC8vIElmIG1heWJlSW52b2tlRGVsZWdhdGUoY29udGV4dCkgY2hhbmdlZCBjb250ZXh0Lm1ldGhvZCBmcm9tXG4gICAgICAgICAgICAvLyBcInJldHVyblwiIHRvIFwidGhyb3dcIiwgbGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy5cbiAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuXG4gICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cbiAgICBpZiAoISBpbmZvKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAvLyBBc3NpZ24gdGhlIHJlc3VsdCBvZiB0aGUgZmluaXNoZWQgZGVsZWdhdGUgdG8gdGhlIHRlbXBvcmFyeVxuICAgICAgLy8gdmFyaWFibGUgc3BlY2lmaWVkIGJ5IGRlbGVnYXRlLnJlc3VsdE5hbWUgKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXG4gICAgICAvLyBSZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXG4gICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmUteWllbGQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZGVsZWdhdGUgbWV0aG9kLlxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgLy8gVGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLCBzbyBmb3JnZXQgaXQgYW5kIGNvbnRpbnVlIHdpdGhcbiAgICAvLyB0aGUgb3V0ZXIgZ2VuZXJhdG9yLlxuICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIGRlZmluZShHcCwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yXCIpO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIGV4cG9ydHMua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBleHBvcnRzLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGlzIHNjcmlwdCBpcyBleGVjdXRpbmcgYXMgYSBDb21tb25KUyBtb2R1bGVcbiAgLy8gb3Igbm90LCByZXR1cm4gdGhlIHJ1bnRpbWUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGRlY2xhcmUgdGhlIHZhcmlhYmxlXG4gIC8vIHJlZ2VuZXJhdG9yUnVudGltZSBpbiB0aGUgb3V0ZXIgc2NvcGUsIHdoaWNoIGFsbG93cyB0aGlzIG1vZHVsZSB0byBiZVxuICAvLyBpbmplY3RlZCBlYXNpbHkgYnkgYGJpbi9yZWdlbmVyYXRvciAtLWluY2x1ZGUtcnVudGltZSBzY3JpcHQuanNgLlxuICByZXR1cm4gZXhwb3J0cztcblxufShcbiAgLy8gSWYgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlLCB1c2UgbW9kdWxlLmV4cG9ydHNcbiAgLy8gYXMgdGhlIHJlZ2VuZXJhdG9yUnVudGltZSBuYW1lc3BhY2UuIE90aGVyd2lzZSBjcmVhdGUgYSBuZXcgZW1wdHlcbiAgLy8gb2JqZWN0LiBFaXRoZXIgd2F5LCB0aGUgcmVzdWx0aW5nIG9iamVjdCB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZVxuICAvLyB0aGUgcmVnZW5lcmF0b3JSdW50aW1lIHZhcmlhYmxlIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLlxuICB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiID8gbW9kdWxlLmV4cG9ydHMgOiB7fVxuKSk7XG5cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICAvLyBUaGlzIG1vZHVsZSBzaG91bGQgbm90IGJlIHJ1bm5pbmcgaW4gc3RyaWN0IG1vZGUsIHNvIHRoZSBhYm92ZVxuICAvLyBhc3NpZ25tZW50IHNob3VsZCBhbHdheXMgd29yayB1bmxlc3Mgc29tZXRoaW5nIGlzIG1pc2NvbmZpZ3VyZWQuIEp1c3RcbiAgLy8gaW4gY2FzZSBydW50aW1lLmpzIGFjY2lkZW50YWxseSBydW5zIGluIHN0cmljdCBtb2RlLCB3ZSBjYW4gZXNjYXBlXG4gIC8vIHN0cmljdCBtb2RlIHVzaW5nIGEgZ2xvYmFsIEZ1bmN0aW9uIGNhbGwuIFRoaXMgY291bGQgY29uY2VpdmFibHkgZmFpbFxuICAvLyBpZiBhIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGZvcmJpZHMgdXNpbmcgRnVuY3Rpb24sIGJ1dCBpbiB0aGF0IGNhc2VcbiAgLy8gdGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byBmaXggdGhlIGFjY2lkZW50YWwgc3RyaWN0IG1vZGUgcHJvYmxlbS4gSWZcbiAgLy8geW91J3ZlIG1pc2NvbmZpZ3VyZWQgeW91ciBidW5kbGVyIHRvIGZvcmNlIHN0cmljdCBtb2RlIGFuZCBhcHBsaWVkIGFcbiAgLy8gQ1NQIHRvIGZvcmJpZCBGdW5jdGlvbiwgYW5kIHlvdSdyZSBub3Qgd2lsbGluZyB0byBmaXggZWl0aGVyIG9mIHRob3NlXG4gIC8vIHByb2JsZW1zLCBwbGVhc2UgZGV0YWlsIHlvdXIgdW5pcXVlIHByZWRpY2FtZW50IGluIGEgR2l0SHViIGlzc3VlLlxuICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xufVxuIiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG5cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FzeW5jVG9HZW5lcmF0b3I7IiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhIb2xlczsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuO1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcbiAgdmFyIF9lID0gdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheUxpbWl0OyIsImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykge1xuICAgIGFycjJbaV0gPSBhcnJbaV07XG4gIH1cblxuICByZXR1cm4gYXJyMjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlMaWtlVG9BcnJheTsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXlcIik7XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5OyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlUmVzdDsiLCJ2YXIgYXJyYXlXaXRoSG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhIb2xlc1wiKTtcblxudmFyIGl0ZXJhYmxlVG9BcnJheUxpbWl0ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5TGltaXRcIik7XG5cbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5XCIpO1xuXG52YXIgbm9uSXRlcmFibGVSZXN0ID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVSZXN0XCIpO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zbGljZWRUb0FycmF5OyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrOyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3M7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5OyIsInZhciBlPWZ1bmN0aW9uKCl7cmV0dXJuISFuYXZpZ2F0b3IucGVybWlzc2lvbnN9LHI9ZnVuY3Rpb24oKXtyZXR1cm4hIW5hdmlnYXRvci5tZWRpYURldmljZXN9O2Z1bmN0aW9uIHQoZSxyLHQsbixhLGksbyl7dHJ5e3ZhciB1PWVbaV0obyksYz11LnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHQoZSl9dS5kb25lP3IoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBuKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMsbj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihhLGkpe3ZhciBvPWUuYXBwbHkocixuKTtmdW5jdGlvbiB1KGUpe3QobyxhLGksdSxjLFwibmV4dFwiLGUpfWZ1bmN0aW9uIGMoZSl7dChvLGEsaSx1LGMsXCJ0aHJvd1wiLGUpfXUodm9pZCAwKX0pKX19ZnVuY3Rpb24gYShlLHIpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxyKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgU3ltYm9sfHwhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSkpKXJldHVybjt2YXIgdD1bXSxuPSEwLGE9ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbyx1PWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz11Lm5leHQoKSkuZG9uZSkmJih0LnB1c2goby52YWx1ZSksIXJ8fHQubGVuZ3RoIT09cik7bj0hMCk7fWNhdGNoKGUpe2E9ITAsaT1lfWZpbmFsbHl7dHJ5e258fG51bGw9PXUucmV0dXJufHx1LnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBpfX1yZXR1cm4gdH0oZSxyKXx8ZnVuY3Rpb24oZSxyKXtpZighZSlyZXR1cm47aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGkoZSxyKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7XCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSk7aWYoXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKGUpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gaShlLHIpfShlLHIpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gaShlLHIpeyhudWxsPT1yfHxyPmUubGVuZ3RoKSYmKHI9ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLG49bmV3IEFycmF5KHIpO3Q8cjt0Kyspblt0XT1lW3RdO3JldHVybiBufXZhciBvPWZ1bmN0aW9uKCl7dmFyIHI9bihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gcih0KXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLmFicnVwdChcInJldHVyblwiLG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIHI9bihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gcihuLGEpe3ZhciBpLG87cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gZSgpfHxhKG5ldyBET01FeGNlcHRpb24oXCJOYXZpZ2F0b3IgQVBJOiBwZXJtaXNzaW9ucyBub3Qgc3VwcG9ydGVkXCIsXCJOT1RfU1VQUE9SVEVEX0VSUlwiKSksci5wcmV2PTEsci5uZXh0PTQsbmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHtuYW1lOnR9KTtjYXNlIDQ6aT1yLnNlbnQsbz1mdW5jdGlvbiBlKHIpe2kucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLGUpLHUoci50YXJnZXQuc3RhdGUsbixhKX0saS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsbyksdShpLnN0YXRlLG4sYSksci5uZXh0PTEzO2JyZWFrO2Nhc2UgMTA6ci5wcmV2PTEwLHIudDA9ci5jYXRjaCgxKSxhKHIudDApO2Nhc2UgMTM6Y2FzZVwiZW5kXCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIsbnVsbCxbWzEsMTBdXSl9KSkpO3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiByLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKTtjYXNlIDE6Y2FzZVwiZW5kXCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIpfSkpKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSx1PWZ1bmN0aW9uKGUscix0KXtzd2l0Y2goZSl7Y2FzZVwiZGVuaWVkXCI6dChuZXcgRE9NRXhjZXB0aW9uKFwiUGVybWlzc2lvbiBkZW5pZWRcIixcIk5PVF9BTExPV0VEX0VSUlwiKSk7YnJlYWs7ZGVmYXVsdDpyKGUpfX0sYz1mdW5jdGlvbigpe3ZhciB0PW4ocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIHQoaSx1KXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LmFicnVwdChcInJldHVyblwiLG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIHQ9bihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdChuLGMpe3ZhciBzLGYscDtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiBlKCkmJnIoKXx8YyhuZXcgRE9NRXhjZXB0aW9uKFwiTmF2aWdhdG9yIEFQSTogcGVybWlzc2lvbnMgb3IgTmF2aWdhdG9yIEFQSTogbWVkaWFEZXZpY2VzIG5vdCBzdXBwb3J0ZWRcIixcIk5PVF9TVVBQT1JURURfRVJSXCIpKSx0LnByZXY9MSx0LnQwPVByb21pc2UsdC5uZXh0PTUsbyhpKTtjYXNlIDU6cmV0dXJuIHQudDE9dC5zZW50LHQubmV4dD04LG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHUpO2Nhc2UgODpyZXR1cm4gdC50Mj10LnNlbnQsdC50Mz1bdC50MSx0LnQyXSx0Lm5leHQ9MTIsdC50MC5hbGwuY2FsbCh0LnQwLHQudDMpO2Nhc2UgMTI6cz10LnNlbnQsZj1hKHMsMikscD1mWzFdLG4ocCksdC5uZXh0PTIxO2JyZWFrO2Nhc2UgMTg6dC5wcmV2PTE4LHQudDQ9dC5jYXRjaCgxKSxjKHQudDQpO2Nhc2UgMjE6Y2FzZVwiZW5kXCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsbnVsbCxbWzEsMThdXSl9KSkpO3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKTtjYXNlIDE6Y2FzZVwiZW5kXCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKTtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpO2V4cG9ydHtvIGFzIGdldFBlcm1pc3Npb24sYyBhcyBnZXRVc2VyTWVkaWFTdHJlYW0sciBhcyBpc05hdmlnYXRvck1lZGlhRGV2aWNlc1N1cHBvcnRlZCxlIGFzIGlzTmF2aWdhdG9yUGVybWlzc2lvbnNTdXBwb3J0ZWR9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndVpYTXVhbk1pTENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5cGMwNWhkbWxuWVhSdmNsQmxjbTFwYzNOcGIyNXpVM1Z3Y0c5eWRHVmtMbXB6SWl3aUxpNHZjM0pqTDJselRtRjJhV2RoZEc5eVRXVmthV0ZFWlhacFkyVnpVM1Z3Y0c5eWRHVmtMbXB6SWl3aUxpNHZjM0pqTDJkbGRGQmxjbTFwYzNOcGIyNHVhbk1pTENJdUxpOXpjbU12WjJWMFZYTmxjazFsWkdsaFUzUnlaV0Z0TG1weklsMHNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMmhsWTJzZ2QyaGxkR2hsY2lCT1lYWnBaMkYwYjNJZ1FWQkpPaUJ3WlhKdGFYTnphVzl1Y3lCcGN5QnpkWEJ3YjNKMFpXUWdZbmtnZEdobElHTjFjbkpsYm5RZ1luSnZkM05sY2x4dUlDb2dRSEpsZEhWeWJuTWdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUNncElEMCtJQ0VoYm1GMmFXZGhkRzl5TG5CbGNtMXBjM05wYjI1elhHNGlMQ0l2S2lwY2JpQXFJRU5vWldOcklIZG9aWFJvWlhJZ1RtRjJhV2RoZEc5eUlFRlFTVG9nYldWa2FXRkVaWFpwWTJWeklHbHpJSE4xY0hCdmNuUmxaQ0JpZVNCMGFHVWdZM1Z5Y21WdWRDQmljbTkzYzJWeVhHNGdLaUJBY21WMGRYSnVjeUI3WW05dmJHVmhibjFjYmlBcUwxeHVaWGh3YjNKMElHUmxabUYxYkhRZ0tDa2dQVDRnSVNGdVlYWnBaMkYwYjNJdWJXVmthV0ZFWlhacFkyVnpYRzRpTENKcGJYQnZjblFnYVhOT1lYWnBaMkYwYjNKUVpYSnRhWE56YVc5dWMxTjFjSEJ2Y25SbFpDQm1jbTl0SUNjdUwybHpUbUYyYVdkaGRHOXlVR1Z5YldsemMybHZibk5UZFhCd2IzSjBaV1FuWEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCaElIQnliMjFwYzJVZ2NtVnpiMngyWldRZ2QyaGxiaUIwYUdVZ2NHVnliV2x6YzJsdmJpQnBjeUJuY21GdWRHVmtJR0o1SUhSb1pTQjFjMlZ5WEc0Z0tpQkFjR0Z5WVcwZ2NHVnliV2x6YzJsdmJrNWhiV1VnSUNBZ0lDQWdJQ0FnSUNCT1lXMWxJRzltSUhSb1pTQndaWEp0YVhOemFXOXVMaUJBYzJWbElHaDBkSEJ6T2k4dmR6TmpMbWRwZEdoMVlpNXBieTl3WlhKdGFYTnphVzl1Y3k4alpXNTFiV1JsWmkxd1pYSnRhWE56YVc5dWJtRnRaVnh1SUNvZ1FISmxkSFZ5Ym5NZ2UxQnliMjFwYzJWOVhHNGdLaTljYm1WNGNHOXlkQ0JrWldaaGRXeDBJR0Z6ZVc1aklDaHdaWEp0YVhOemFXOXVUbUZ0WlNrZ1BUNGdlMXh1WEhSeVpYUjFjbTRnYm1WM0lGQnliMjFwYzJVb1lYTjVibU1nS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHVYSFJjZEdsbUlDZ2hhWE5PWVhacFoyRjBiM0pRWlhKdGFYTnphVzl1YzFOMWNIQnZjblJsWkNncEtTQjdYRzVjZEZ4MFhIUnlaV3BsWTNRb2JtVjNJRVJQVFVWNFkyVndkR2x2YmlnblRtRjJhV2RoZEc5eUlFRlFTVG9nY0dWeWJXbHpjMmx2Ym5NZ2JtOTBJSE4xY0hCdmNuUmxaQ2NzSUNkT1QxUmZVMVZRVUU5U1ZFVkVYMFZTVWljcEtWeHVYSFJjZEgxY2JseHVYSFJjZEhSeWVTQjdYRzVjZEZ4MFhIUmpiMjV6ZENCd1pYSnRhWE56YVc5dVUzUmhkSFZ6SUQwZ1lYZGhhWFFnYm1GMmFXZGhkRzl5TG5CbGNtMXBjM05wYjI1ekxuRjFaWEo1S0hzZ2JtRnRaVG9nY0dWeWJXbHpjMmx2Yms1aGJXVWdmU2xjYmx4MFhIUmNkR052Ym5OMElHOXVRMmhoYm1kbElEMGdLR1YyWlc1MEtTQTlQaUI3WEc1Y2RGeDBYSFJjZEhCbGNtMXBjM05wYjI1VGRHRjBkWE11Y21WdGIzWmxSWFpsYm5STWFYTjBaVzVsY2lnblkyaGhibWRsSnl3Z2IyNURhR0Z1WjJVcFhHNWNkRngwWEhSY2RISmxjMjlzZG1WUGNsSmxhbVZqZEVKaGMyVmtUMjVUZEdGMFpTaGxkbVZ1ZEM1MFlYSm5aWFF1YzNSaGRHVXNJSEpsYzI5c2RtVXNJSEpsYW1WamRDbGNibHgwWEhSY2RIMWNibHgwWEhSY2RIQmxjbTFwYzNOcGIyNVRkR0YwZFhNdVlXUmtSWFpsYm5STWFYTjBaVzVsY2lnblkyaGhibWRsSnl3Z2IyNURhR0Z1WjJVcFhHNWNkRngwWEhSeVpYTnZiSFpsVDNKU1pXcGxZM1JDWVhObFpFOXVVM1JoZEdVb2NHVnliV2x6YzJsdmJsTjBZWFIxY3k1emRHRjBaU3dnY21WemIyeDJaU3dnY21WcVpXTjBLVnh1WEhSY2RIMGdZMkYwWTJnZ0tHVnljbTl5S1NCN1hHNWNkRngwWEhSeVpXcGxZM1FvWlhKeWIzSXBYRzVjZEZ4MGZWeHVYSFI5S1Z4dWZWeHVYRzVqYjI1emRDQnlaWE52YkhabFQzSlNaV3BsWTNSQ1lYTmxaRTl1VTNSaGRHVWdQU0FvYzNSaGRHVXNJSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dVhIUnpkMmwwWTJnZ0tITjBZWFJsS1NCN1hHNWNkRngwWTJGelpTQW5aR1Z1YVdWa0p6cGNibHgwWEhSY2RISmxhbVZqZENodVpYY2dSRTlOUlhoalpYQjBhVzl1S0NkUVpYSnRhWE56YVc5dUlHUmxibWxsWkNjc0lDZE9UMVJmUVV4TVQxZEZSRjlGVWxJbktTbGNibHgwWEhSY2RHSnlaV0ZyWEc1Y2RGeDBaR1ZtWVhWc2REcGNibHgwWEhSY2RISmxjMjlzZG1Vb2MzUmhkR1VwWEc1Y2RIMWNibjFjYmlJc0ltbHRjRzl5ZENCcGMwNWhkbWxuWVhSdmNsQmxjbTFwYzNOcGIyNXpVM1Z3Y0c5eWRHVmtJR1p5YjIwZ0p5NHZhWE5PWVhacFoyRjBiM0pRWlhKdGFYTnphVzl1YzFOMWNIQnZjblJsWkNkY2JtbHRjRzl5ZENCcGMwNWhkbWxuWVhSdmNrMWxaR2xoUkdWMmFXTmxjMU4xY0hCdmNuUmxaQ0JtY205dElDY3VMMmx6VG1GMmFXZGhkRzl5VFdWa2FXRkVaWFpwWTJWelUzVndjRzl5ZEdWa0oxeHVhVzF3YjNKMElHZGxkRkJsY20xcGMzTnBiMjRnWm5KdmJTQW5MaTluWlhSUVpYSnRhWE56YVc5dUoxeHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdZU0J3Y205dGFYTmxJSEpsYzI5c2RtVmtJSGRvWlc0Z2RHaGxJSEJsY20xcGMzTnBiMjRnYVhNZ1ozSmhiblJsWkNCaWVTQjBhR1VnZFhObGNpQmhibVFnZEdobElITjBjbVZoYlNCcGN5QnlaWFJ5YVdWMlpXUmNiaUFxSUVCd1lYSmhiU0J3WlhKdGFYTnphVzl1VG1GdFpTQWdJQ0FnSUNBZ0lDQWdJRTVoYldVZ2IyWWdkR2hsSUhCbGNtMXBjM05wYjI0dUlFQnpaV1VnYUhSMGNITTZMeTkzTTJNdVoybDBhSFZpTG1sdkwzQmxjbTFwYzNOcGIyNXpMeU5sYm5WdFpHVm1MWEJsY20xcGMzTnBiMjV1WVcxbFhHNGdLaUJBY0dGeVlXMGdiV1ZrYVdGVGRISmxZVzFEYjI1emRISmhhVzUwY3lBZ0lDQkRiMjV6ZEhKaGFXNTBjeUJ2WW1wbFkzUXVJRUJ6WldVZ2FIUjBjSE02THk5a1pYWmxiRzl3WlhJdWJXOTZhV3hzWVM1dmNtY3ZaVzR0VlZNdlpHOWpjeTlYWldJdlFWQkpMMDFsWkdsaFUzUnlaV0Z0UTI5dWMzUnlZV2x1ZEhOY2JpQXFJRUJ5WlhSMWNtNXpJSHRRY205dGFYTmxmVnh1SUNvdlhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCaGMzbHVZeUFvY0dWeWJXbHpjMmx2Yms1aGJXVXNJRzFsWkdsaFUzUnlaV0Z0UTI5dWMzUnlZV2x1ZEhNcElEMCtJSHRjYmx4MGNtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtHRnplVzVqSUNoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNibHgwWEhScFppQW9JV2x6VG1GMmFXZGhkRzl5VUdWeWJXbHpjMmx2Ym5OVGRYQndiM0owWldRb0tTQjhmQ0FoYVhOT1lYWnBaMkYwYjNKTlpXUnBZVVJsZG1salpYTlRkWEJ3YjNKMFpXUW9LU2tnZTF4dVhIUmNkRngwY21WcVpXTjBLRzVsZHlCRVQwMUZlR05sY0hScGIyNG9KMDVoZG1sbllYUnZjaUJCVUVrNklIQmxjbTFwYzNOcGIyNXpJRzl5SUU1aGRtbG5ZWFJ2Y2lCQlVFazZJRzFsWkdsaFJHVjJhV05sY3lCdWIzUWdjM1Z3Y0c5eWRHVmtKeXdnSjA1UFZGOVRWVkJRVDFKVVJVUmZSVkpTSnlrcFhHNWNkRngwZlZ4dVhHNWNkRngwZEhKNUlIdGNibHgwWEhSY2RHTnZibk4wSUZzc0lITjBjbVZoYlYwZ1BTQmhkMkZwZENCUWNtOXRhWE5sTG1Gc2JDaGJYRzVjZEZ4MFhIUmNkR0YzWVdsMElHZGxkRkJsY20xcGMzTnBiMjRvY0dWeWJXbHpjMmx2Yms1aGJXVXBMRnh1WEhSY2RGeDBYSFJoZDJGcGRDQnVZWFpwWjJGMGIzSXViV1ZrYVdGRVpYWnBZMlZ6TG1kbGRGVnpaWEpOWldScFlTaHRaV1JwWVZOMGNtVmhiVU52Ym5OMGNtRnBiblJ6S1N4Y2JseDBYSFJjZEYwcFhHNWNkRngwWEhSeVpYTnZiSFpsS0hOMGNtVmhiU2xjYmx4MFhIUjlJR05oZEdOb0lDaGxjbkp2Y2lrZ2UxeHVYSFJjZEZ4MGNtVnFaV04wS0dWeWNtOXlLVnh1WEhSY2RIMWNibHgwZlNsY2JuMWNiaUpkTENKdVlXMWxjeUk2V3lKdVlYWnBaMkYwYjNJaUxDSndaWEp0YVhOemFXOXVjeUlzSW0xbFpHbGhSR1YyYVdObGN5SXNJbkJsY20xcGMzTnBiMjVPWVcxbElpd2lVSEp2YldselpTSXNJbkpsYzI5c2RtVWlMQ0p5WldwbFkzUWlMQ0pwYzA1aGRtbG5ZWFJ2Y2xCbGNtMXBjM05wYjI1elUzVndjRzl5ZEdWa0lpd2lSRTlOUlhoalpYQjBhVzl1SWl3aWNYVmxjbmtpTENKdVlXMWxJaXdpY0dWeWJXbHpjMmx2YmxOMFlYUjFjeUlzSW05dVEyaGhibWRsSWl3aVpYWmxiblFpTENKeVpXMXZkbVZGZG1WdWRFeHBjM1JsYm1WeUlpd2ljbVZ6YjJ4MlpVOXlVbVZxWldOMFFtRnpaV1JQYmxOMFlYUmxJaXdpZEdGeVoyVjBJaXdpYzNSaGRHVWlMQ0poWkdSRmRtVnVkRXhwYzNSbGJtVnlJaXdpYldWa2FXRlRkSEpsWVcxRGIyNXpkSEpoYVc1MGN5SXNJbWx6VG1GMmFXZGhkRzl5VFdWa2FXRkVaWFpwWTJWelUzVndjRzl5ZEdWa0lpd2laMlYwVUdWeWJXbHpjMmx2YmlJc0ltZGxkRlZ6WlhKTlpXUnBZU0lzSW1Gc2JDSXNJbk4wY21WaGJTSmRMQ0p0WVhCd2FXNW5jeUk2SWtGQlNVRXNlVUpCUVhWQ1FTeFZRVUZWUXl4clEwTkJWa1FzVlVGQlZVVXNhWGhEUTBkcVF5eHJSRUZCWlN4WFFVRlBReXcwUjBGRFpDeEpRVUZKUXl4dlJFRkJVU3hYUVVGUFF5eEZRVUZUUXl4clIwRkROMEpETEV0QlEwcEVMRVZCUVU4c1NVRkJTVVVzWVVGQllTd3lRMEZCTkVNc2QwTkJTWEpEVWl4VlFVRlZReXhaUVVGWlVTeE5RVUZOTEVOQlFVVkRMRXRCUVUxUUxGZEJRVGRFVVN4VFFVTkJReXhGUVVGWExGTkJRVmhCTEVWQlFWbERMRWRCUTJwQ1JpeEZRVUZwUWtjc2IwSkJRVzlDTEZOQlFWVkdMRWRCUXk5RFJ5eEZRVUUwUWtZc1JVRkJUVWNzVDBGQlQwTXNUVUZCVDFvc1JVRkJVME1zU1VGRk1VUkxMRVZCUVdsQ1R5eHBRa0ZCYVVJc1UwRkJWVTRzUjBGRE5VTkhMRVZCUVRSQ1NpeEZRVUZwUWswc1RVRkJUMW9zUlVGQlUwTXNjVVJCUlRkRVFTdzJUa0ZMUjFNc1JVRkJPRUlzVTBGQlEwVXNSVUZCVDFvc1JVRkJVME1zVlVGRE5VTlhMRTlCUTBZc1UwRkRTbGdzUlVGQlR5eEpRVUZKUlN4aFFVRmhMRzlDUVVGeFFpeHJRMEZITjBOSUxFVkJRVkZaTEcxRVEzWkNTU3hYUVVGUFpDeEZRVUZuUW1kQ0xEUkhRVU01UWl4SlFVRkpaaXh2UkVGQlVTeFhRVUZQUXl4RlFVRlRReXh2UjBGRE4wSkRMRXRCUVhORFlTeExRVU14UTJRc1JVRkJUeXhKUVVGSlJTeGhRVUZoTERCRlFVRXlSU3h2UTBGSk1VVktMR2xDUVVOc1FtbENMRVZCUVdOc1FpeHpRMEZEWkVnc1ZVRkJWVVVzWVVGQllXOUNMR0ZCUVdGSUxEWkVRVVpXU1N3NFEwRkJlRUpETEU5QlNWUnVRaXhGUVVGUmJVSXNjVVJCUlZKc1FpSjlcbiIsImltcG9ydCB7IGlzTmF2aWdhdG9yUGVybWlzc2lvbnNTdXBwb3J0ZWQsIGlzTmF2aWdhdG9yTWVkaWFEZXZpY2VzU3VwcG9ydGVkLCBnZXRVc2VyTWVkaWFTdHJlYW0gfSBmcm9tICdAdW50ZW1wcy91c2VyLXBlcm1pc3Npb25zLXV0aWxzJ1xuXG5jbGFzcyBWb2NhbCB7XG5cdHN0YXRpYyBkZWZhdWx0T3B0aW9ucyA9IHtcblx0XHRncmFtbWFyczogbnVsbCxcblx0XHRsYW5nOiAnZW4tVVMnLFxuXHRcdGNvbnRpbnVvdXM6IGZhbHNlLFxuXHRcdGludGVyaW1SZXN1bHRzOiBmYWxzZSxcblx0XHRtYXhBbHRlcm5hdGl2ZXM6IDEsXG5cdFx0c2VydmljZVVSSTogbnVsbCxcblx0fVxuXG5cdHN0YXRpYyBldmVudFR5cGVzID0ge1xuXHRcdEFVRElPX0VORDogJ2F1ZGlvZW5kJyxcblx0XHRBVURJT19TVEFSVDogJ2F1ZGlvc3RhcnQnLFxuXHRcdEVORDogJ2VuZCcsXG5cdFx0RVJST1I6ICdlcnJvcicsXG5cdFx0Tk9fTUFUQ0g6ICdub21hdGNoJyxcblx0XHRSRVNVTFQ6ICdyZXN1bHQnLFxuXHRcdFNPVU5EX0VORDogJ3NvdW5kZW5kJyxcblx0XHRTT1VORF9TVEFSVDogJ3NvdW5kc3RhcnQnLFxuXHRcdFNQRUVDSF9FTkQ6ICdzcGVlY2hlbmQnLFxuXHRcdFNQRUVDSF9TVEFSVDogJ3NwZWVjaHN0YXJ0Jyxcblx0XHRTVEFSVDogJ3N0YXJ0Jyxcblx0fVxuXG5cdHN0YXRpYyBnZXQgaXNTdXBwb3J0ZWQoKSB7XG5cdFx0cmV0dXJuICEhVm9jYWwuX3Jlc29sdmVTcGVlY2hSZWNvZ25pdGlvbigpICYmICEhaXNOYXZpZ2F0b3JQZXJtaXNzaW9uc1N1cHBvcnRlZCgpICYmICEhaXNOYXZpZ2F0b3JNZWRpYURldmljZXNTdXBwb3J0ZWQoKVxuXHR9XG5cblx0c3RhdGljIHNldCBpc1N1cHBvcnRlZChfKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IHNldCBpc1N1cHBvcnRlZCBkaXJlY3RseS4nKVxuXHR9XG5cblx0X2luc3RhbmNlID0gbnVsbFxuXHRfbGlzdGVuZXJzID0gbnVsbFxuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRjb25zdCBTcGVlY2hSZWNvZ25pdGlvbiA9IFZvY2FsLl9yZXNvbHZlU3BlZWNoUmVjb2duaXRpb24oKVxuXHRcdGlmICghU3BlZWNoUmVjb2duaXRpb24pIHtcblx0XHRcdHRocm93IG5ldyBET01FeGNlcHRpb24oJ1NwZWVjaFJlY29nbml0aW9uIG5vdCBzdXBwb3J0ZWQnLCAnTk9UX1NVUFBPUlRFRF9FUlInKVxuXHRcdH1cblxuXHRcdHRoaXMuX2luc3RhbmNlID0gbmV3IFNwZWVjaFJlY29nbml0aW9uKClcblx0XHR0aGlzLl9saXN0ZW5lcnMgPSB7fVxuXG5cdFx0T2JqZWN0LmVudHJpZXMoe1xuXHRcdFx0Li4uVm9jYWwuZGVmYXVsdE9wdGlvbnMsXG5cdFx0XHQuLi4ob3B0aW9ucyB8fCB7fSksXG5cdFx0fSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG5cdFx0XHRpZiAoa2V5ID09PSAnZ3JhbW1hcnMnICYmICF2YWx1ZSkge1xuXHRcdFx0XHRjb25zdCBTcGVlY2hHcmFtbWFyTGlzdCA9IFZvY2FsLl9yZXNvbHZlU3BlZWNoR3JhbW1hckxpc3QoKVxuXHRcdFx0XHRpZiAoISFTcGVlY2hHcmFtbWFyTGlzdCkge1xuXHRcdFx0XHRcdHZhbHVlID0gbmV3IFNwZWVjaEdyYW1tYXJMaXN0KClcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5faW5zdGFuY2Vba2V5XSA9IHZhbHVlXG5cdFx0fSlcblx0fVxuXG5cdGdldCBpbnN0YW5jZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5zdGFuY2Vcblx0fVxuXG5cdHNldCBpbnN0YW5jZShfKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IHNldCBpbnN0YW5jZSBkaXJlY3RseS4nKVxuXHR9XG5cblx0YXN5bmMgc3RhcnQoKSB7XG5cdFx0aWYgKCEhdGhpcy5faW5zdGFuY2UpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHN0cmVhbSA9IGF3YWl0IGdldFVzZXJNZWRpYVN0cmVhbSgnbWljcm9waG9uZScsIHsgYXVkaW86IHRydWUgfSlcblx0XHRcdFx0aWYgKCFzdHJlYW0pIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZXRyaWV2ZSB0aGUgc3RyZWFtIGZyb20gbWVkaWEgZGV2aWNlJylcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9pbnN0YW5jZS5zdGFydCgpXG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLl9saXN0ZW5lcnMuZXJyb3Jcblx0XHRcdFx0aWYgKCEhZXJyb3JIYW5kbGVyKSB7XG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyKGVycm9yKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdHN0b3AoKSB7XG5cdFx0aWYgKCEhdGhpcy5faW5zdGFuY2UpIHtcblx0XHRcdHRoaXMuX2luc3RhbmNlLnN0b3AoKVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRhYm9ydCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dGhpcy5faW5zdGFuY2UuYWJvcnQoKVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRhZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2spIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSAmJiB0aGlzLl9pbmNsdWRlc0V2ZW50VHlwZShldmVudFR5cGUpKSB7XG5cdFx0XHRpZiAoISF0aGlzLl9saXN0ZW5lcnNbZXZlbnRUeXBlXSkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBoYW5kbGVyID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGxldCBhZGRpdGlvbmFsQXJncyA9IFtdXG5cdFx0XHRcdGlmIChldmVudFR5cGUgPT09IFZvY2FsLmV2ZW50VHlwZXMuUkVTVUxUKSB7XG5cdFx0XHRcdFx0aWYgKCEhZXZlbnQucmVzdWx0cyAmJiBldmVudC5yZXN1bHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGFkZGl0aW9uYWxBcmdzLnB1c2goZXZlbnQucmVzdWx0c1swXVswXS50cmFuc2NyaXB0KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCEhY2FsbGJhY2sgJiYgY2FsbGJhY2suYXBwbHkodGhpcywgW2V2ZW50LCAuLi5hZGRpdGlvbmFsQXJnc10pXG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9pbnN0YW5jZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlcilcblxuXHRcdFx0dGhpcy5fbGlzdGVuZXJzW2V2ZW50VHlwZV0gPSBoYW5kbGVyXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdXG5cdFx0dGhpcy5faW5zdGFuY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIpXG5cblx0XHRkZWxldGUgdGhpcy5fbGlzdGVuZXJzW2V2ZW50VHlwZV1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRjbGVhbnVwKCkge1xuXHRcdHRoaXMuc3RvcCgpXG5cblx0XHRPYmplY3Qua2V5cyh0aGlzLl9saXN0ZW5lcnMpLmZvckVhY2goKGtleSkgPT4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGtleSkpXG5cdFx0dGhpcy5faW5zdGFuY2UgPSBudWxsXG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0X2luY2x1ZGVzRXZlbnRUeXBlKGV2ZW50VHlwZSkge1xuXHRcdHJldHVybiAhIU9iamVjdC52YWx1ZXMoVm9jYWwuZXZlbnRUeXBlcykuZmluZCgodHlwZSkgPT4gdHlwZSA9PT0gZXZlbnRUeXBlKVxuXHR9XG5cblx0c3RhdGljIF9yZXNvbHZlU3BlZWNoUmVjb2duaXRpb24oKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdHdpbmRvdy5TcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0d2luZG93LndlYmtpdFNwZWVjaFJlY29nbml0aW9uIHx8XG5cdFx0XHR3aW5kb3cubW96U3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdHdpbmRvdy5tc1NwZWVjaFJlY29nbml0aW9uXG5cdFx0KVxuXHR9XG5cblx0c3RhdGljIF9yZXNvbHZlU3BlZWNoR3JhbW1hckxpc3QoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdHdpbmRvdy5TcGVlY2hHcmFtbWFyTGlzdCB8fFxuXHRcdFx0d2luZG93LndlYmtpdFNwZWVjaEdyYW1tYXJMaXN0IHx8XG5cdFx0XHR3aW5kb3cubW96U3BlZWNoR3JhbW1hckxpc3QgfHxcblx0XHRcdHdpbmRvdy5tc1NwZWVjaEdyYW1tYXJMaXN0XG5cdFx0KVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZvY2FsXG4iXSwibmFtZXMiOlsicnVudGltZSIsImV4cG9ydHMiLCJPcCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093biIsImhhc093blByb3BlcnR5IiwiJFN5bWJvbCIsIlN5bWJvbCIsIml0ZXJhdG9yU3ltYm9sIiwiaXRlcmF0b3IiLCJhc3luY0l0ZXJhdG9yU3ltYm9sIiwiYXN5bmNJdGVyYXRvciIsInRvU3RyaW5nVGFnU3ltYm9sIiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJvYmoiLCJrZXkiLCJ2YWx1ZSIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiZXJyIiwid3JhcCIsImlubmVyRm4iLCJvdXRlckZuIiwic2VsZiIsInRyeUxvY3NMaXN0IiwicHJvdG9HZW5lcmF0b3IiLCJHZW5lcmF0b3IiLCJnZW5lcmF0b3IiLCJjcmVhdGUiLCJjb250ZXh0IiwiQ29udGV4dCIsIl9pbnZva2UiLCJzdGF0ZSIsIm1ldGhvZCIsImFyZyIsIkVycm9yIiwiZG9uZVJlc3VsdCIsImRlbGVnYXRlIiwiZGVsZWdhdGVSZXN1bHQiLCJtYXliZUludm9rZURlbGVnYXRlIiwiQ29udGludWVTZW50aW5lbCIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwicmVjb3JkIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiZG9uZSIsIm1ha2VJbnZva2VNZXRob2QiLCJmbiIsImNhbGwiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiSXRlcmF0b3JQcm90b3R5cGUiLCJ0aGlzIiwiZ2V0UHJvdG8iLCJnZXRQcm90b3R5cGVPZiIsIk5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlIiwidmFsdWVzIiwiR3AiLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJmb3JFYWNoIiwiQXN5bmNJdGVyYXRvciIsIlByb21pc2VJbXBsIiwicHJldmlvdXNQcm9taXNlIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJyZXNvbHZlIiwicmVqZWN0IiwiaW52b2tlIiwicmVzdWx0IiwiX19hd2FpdCIsInRoZW4iLCJ1bndyYXBwZWQiLCJlcnJvciIsInVuZGVmaW5lZCIsIlR5cGVFcnJvciIsImluZm8iLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJsb2NzIiwiZW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsIml0ZXJhYmxlIiwiaXRlcmF0b3JNZXRob2QiLCJpc05hTiIsImxlbmd0aCIsImkiLCJjb25zdHJ1Y3RvciIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImdlbkZ1biIsImN0b3IiLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJpdGVyIiwidG9TdHJpbmciLCJrZXlzIiwib2JqZWN0IiwicmV2ZXJzZSIsInBvcCIsInNraXBUZW1wUmVzZXQiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicm9vdFJlY29yZCIsInJ2YWwiLCJleGNlcHRpb24iLCJoYW5kbGUiLCJsb2MiLCJjYXVnaHQiLCJoYXNDYXRjaCIsImhhc0ZpbmFsbHkiLCJmaW5hbGx5RW50cnkiLCJjb21wbGV0ZSIsImZpbmlzaCIsImNhdGNoIiwidGhyb3duIiwiZGVsZWdhdGVZaWVsZCIsIm1vZHVsZSIsInJlZ2VuZXJhdG9yUnVudGltZSIsImFjY2lkZW50YWxTdHJpY3RNb2RlIiwiRnVuY3Rpb24iLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJfbmV4dCIsIl90aHJvdyIsImFyZ3MiLCJhcmd1bWVudHMiLCJhcHBseSIsImFyciIsIkFycmF5IiwiaXNBcnJheSIsIl9hcnIiLCJfbiIsIl9kIiwiX2UiLCJfcyIsIl9pIiwibGVuIiwiYXJyMiIsIm8iLCJtaW5MZW4iLCJhcnJheUxpa2VUb0FycmF5IiwibiIsImZyb20iLCJ0ZXN0IiwiYXJyYXlXaXRoSG9sZXMiLCJpdGVyYWJsZVRvQXJyYXlMaW1pdCIsInVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5Iiwibm9uSXRlcmFibGVSZXN0IiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJkZXNjcmlwdG9yIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiZSIsIm5hdmlnYXRvciIsInBlcm1pc3Npb25zIiwiciIsIm1lZGlhRGV2aWNlcyIsInQiLCJhIiwidSIsImMiLCJyZXR1cm4iLCJET01FeGNlcHRpb24iLCJxdWVyeSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhZGRFdmVudExpc3RlbmVyIiwidDAiLCJzIiwiZiIsInAiLCJ0MSIsImdldFVzZXJNZWRpYSIsInQyIiwidDMiLCJhbGwiLCJ0NCIsIlZvY2FsIiwib3B0aW9ucyIsIlNwZWVjaFJlY29nbml0aW9uIiwiX3Jlc29sdmVTcGVlY2hSZWNvZ25pdGlvbiIsIl9pbnN0YW5jZSIsIl9saXN0ZW5lcnMiLCJlbnRyaWVzIiwiZGVmYXVsdE9wdGlvbnMiLCJTcGVlY2hHcmFtbWFyTGlzdCIsIl9yZXNvbHZlU3BlZWNoR3JhbW1hckxpc3QiLCJfdGhpcyIsImlzTmF2aWdhdG9yUGVybWlzc2lvbnNTdXBwb3J0ZWQiLCJpc05hdmlnYXRvck1lZGlhRGV2aWNlc1N1cHBvcnRlZCIsIl8iLCJnZXRVc2VyTWVkaWFTdHJlYW0iLCJhdWRpbyIsInN0YXJ0IiwiZXJyb3JIYW5kbGVyIiwiYWJvcnQiLCJldmVudFR5cGUiLCJjYWxsYmFjayIsIl9pbmNsdWRlc0V2ZW50VHlwZSIsImhhbmRsZXIiLCJldmVudCIsImFkZGl0aW9uYWxBcmdzIiwiZXZlbnRUeXBlcyIsIlJFU1VMVCIsInJlc3VsdHMiLCJ0cmFuc2NyaXB0IiwiX3RoaXMyIiwiX3RoaXMzIiwiZmluZCIsIndpbmRvdyIsIndlYmtpdFNwZWVjaFJlY29nbml0aW9uIiwibW96U3BlZWNoUmVjb2duaXRpb24iLCJtc1NwZWVjaFJlY29nbml0aW9uIiwid2Via2l0U3BlZWNoR3JhbW1hckxpc3QiLCJtb3pTcGVlY2hHcmFtbWFyTGlzdCIsIm1zU3BlZWNoR3JhbW1hckxpc3QiLCJncmFtbWFycyIsImxhbmciLCJjb250aW51b3VzIiwiaW50ZXJpbVJlc3VsdHMiLCJtYXhBbHRlcm5hdGl2ZXMiLCJzZXJ2aWNlVVJJIiwiQVVESU9fRU5EIiwiQVVESU9fU1RBUlQiLCJFTkQiLCJFUlJPUiIsIk5PX01BVENIIiwiU09VTkRfRU5EIiwiU09VTkRfU1RBUlQiLCJTUEVFQ0hfRU5EIiwiU1BFRUNIX1NUQVJUIiwiU1RBUlQiXSwibWFwcGluZ3MiOiI4T0FPQSxJQUFJQSxFQUFXLFNBQVVDLEdBR3ZCLElBQUlDLEVBQUtDLE9BQU9DLFVBQ1pDLEVBQVNILEVBQUdJLGVBRVpDLEVBQTRCLG1CQUFYQyxPQUF3QkEsT0FBUyxHQUNsREMs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\n","//#region src/function/isFunction.ts\nvar e = (e) => typeof e == \"function\";\n//#endregion\nexport { e as isFunction };\n","import { useCallback, useEffect, useRef } from 'react'\nimport { Vocal as SpeechRecognitionWrapper } from '@untemps/vocal'\n\nconst useVocal = (lang = 'en-US', grammars = null, maxAlternatives = 1, __rsInstance = null) => {\n\tconst ref = useRef(null)\n\n\tuseEffect(() => {\n\t\tif (SpeechRecognitionWrapper.isSupported) {\n\t\t\tref.current = __rsInstance || new SpeechRecognitionWrapper({ lang, grammars, maxAlternatives })\n\t\t\treturn () => {\n\t\t\t\tref.current.abort()\n\t\t\t\tref.current.cleanup()\n\t\t\t}\n\t\t}\n\t}, [lang, grammars, maxAlternatives, __rsInstance])\n\n\tconst start = useCallback(() => {\n\t\tif (ref.current) {\n\t\t\tref.current.start()\n\t\t}\n\t}, [])\n\n\tconst stop = useCallback(() => {\n\t\tif (ref.current) {\n\t\t\tref.current.stop()\n\t\t}\n\t}, [])\n\n\tconst abort = useCallback(() => {\n\t\tif (ref.current) {\n\t\t\tref.current.abort()\n\t\t}\n\t}, [])\n\n\tconst subscribe = useCallback((eventType, handler) => {\n\t\tif (ref.current) {\n\t\t\tref.current.addEventListener(eventType, handler)\n\t\t}\n\t}, [])\n\n\tconst unsubscribe = useCallback((eventType, handler) => {\n\t\tif (ref.current) {\n\t\t\tref.current.removeEventListener(eventType, handler)\n\t\t}\n\t}, [])\n\n\tconst clean = useCallback(() => {\n\t\tif (ref.current) {\n\t\t\tref.current.cleanup()\n\t\t}\n\t}, [])\n\n\treturn [ref, { start, stop, abort, subscribe, unsubscribe, clean }]\n}\n\nexport default useVocal\n","import { useCallback, useEffect, useRef } from 'react'\n\nconst useTimeout = (handler, timeout = 0) => {\n\tconst ref = useRef(-1)\n\n\tconst stop = useCallback(() => {\n\t\tclearTimeout(ref.current)\n\t\tref.current = -1\n\t}, [])\n\n\tconst start = useCallback(() => {\n\t\tstop()\n\t\tref.current = setTimeout(handler, timeout)\n\t}, [handler, timeout, stop])\n\n\tuseEffect(() => stop, [stop])\n\n\treturn [start, stop]\n}\n\nexport default useTimeout\n","import { useEffect, useMemo, useRef } from 'react'\n\nconst useCommands = (commands, precision = 0.4) => {\n\tconst normalized = useMemo(\n\t\t() =>\n\t\t\t!!commands\n\t\t\t\t? Object.entries(commands).reduce((acc, [key, value]) => ({ ...acc, [key.toLowerCase()]: value }), {})\n\t\t\t\t: {},\n\t\t[commands]\n\t)\n\n\tconst keys = useMemo(() => Object.keys(normalized), [normalized])\n\n\t// Fuzzy matching is only needed for phrase command keys.\n\t// Single-word keys use exact case-insensitive lookup — simpler and no false positives.\n\tconst hasPhraseKeys = useMemo(() => keys.some((k) => k.includes(' ')), [keys])\n\n\t// Lazy-loaded so consumers using only single-word commands incur no bundle cost.\n\tconst fuseRef = useRef(null)\n\n\tuseEffect(() => {\n\t\tif (!hasPhraseKeys) {\n\t\t\tfuseRef.current = null\n\t\t\treturn\n\t\t}\n\t\timport('fuse.js')\n\t\t\t.then((module) => {\n\t\t\t\tconst Fuse = module.default ?? module\n\t\t\t\tfuseRef.current = new Fuse(keys, { includeScore: true, ignoreLocation: true })\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\tif (process.env.NODE_ENV !== 'production') {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t'[react-vocal] fuse.js is not installed. Phrase command keys will fall back to exact matching. ' +\n\t\t\t\t\t\t\t'Install fuse.js to enable fuzzy matching: npm install fuse.js'\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t})\n\t}, [hasPhraseKeys, keys])\n\n\tconst triggerCommand = (input) => {\n\t\tif (!keys.length) return null\n\n\t\tif (!hasPhraseKeys) {\n\t\t\tconst words = input.trim().split(/\\s+/)\n\t\t\tconst targets = words.length > 1 ? words : [input.trim()]\n\t\t\tfor (const w of targets) {\n\t\t\t\tconst key = w.toLowerCase()\n\t\t\t\tif (key in normalized) return normalized[key]?.(w)\n\t\t\t}\n\t\t\treturn null\n\t\t}\n\n\t\tconst fuse = fuseRef.current\n\t\tif (fuse) {\n\t\t\tconst result = fuse.search(input).filter((r) => r.score < precision)\n\t\t\tif (result?.length) {\n\t\t\t\tconst key = result[0].item.toLowerCase()\n\t\t\t\treturn normalized[key]?.(input)\n\t\t\t}\n\t\t} else {\n\t\t\t// `k.includes(lInput)` can produce false positives when input is short\n\t\t\t// (e.g. \"rouge\" matches \"change en rouge\"). Accepted tradeoff: this branch\n\t\t\t// only runs when fuse.js is absent, so degraded precision is expected.\n\t\t\tconst lInput = input.toLowerCase()\n\t\t\tconst match = keys.find((k) => lInput.includes(k) || k.includes(lInput))\n\t\t\tif (match) return normalized[match]?.(input)\n\t\t}\n\t\treturn null\n\t}\n\n\treturn triggerCommand\n}\n\nexport default useCommands\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import React from 'react'\n\nconst Icon = ({ color = 'black', activeColor = 'red', isActive = false }) => {\n\treturn (\n\t\t<svg\n\t\t\tdata-testid=\"__icon-root__\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\twidth=\"100%\"\n\t\t\theight=\"100%\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t>\n\t\t\t<g>\n\t\t\t\t<path\n\t\t\t\t\tdata-testid=\"__icon-path__\"\n\t\t\t\t\tfill={color}\n\t\t\t\t\td=\"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z\"\n\t\t\t\t/>\n\t\t\t\t{isActive && <circle data-testid=\"__icon-active__\" fill={activeColor} cx=\"16\" cy=\"4\" r=\"4\" />}\n\t\t\t</g>\n\t\t</svg>\n\t)\n}\n\nexport default Icon\n","import React, { cloneElement, isValidElement, useCallback, useMemo, useRef, useState } from 'react'\nimport { Vocal as SpeechRecognitionWrapper } from '@untemps/vocal'\nimport { isFunction } from '@untemps/utils/function/isFunction'\n\nimport useVocal from '../hooks/useVocal'\nimport useTimeout from '../hooks/useTimeout'\nimport useCommands from '../hooks/useCommands'\n\nimport Icon from './Icon'\n\nconst tryMatchCommand = (segmentData, trigger) => {\n\tfor (const { alternatives } of segmentData) {\n\t\tfor (const a of alternatives) {\n\t\t\tif (trigger(a) !== null) return\n\t\t}\n\t}\n}\n\nconst Vocal = ({\n\tchildren,\n\tcommands = null,\n\tlang = 'en-US',\n\tgrammars = null,\n\ttimeout = 3000,\n\tprecision = 0.4, // Fuse.js score threshold for phrase commands only; single-word commands always use exact lookup\n\tmaxAlternatives = 1,\n\tariaLabel = 'start recognition',\n\tstyle = null,\n\tclassName = null,\n\toutlineStyle = '2px solid',\n\tonStart = null,\n\tonEnd = null,\n\tonSpeechStart = null,\n\tonSpeechEnd = null,\n\tonResult = null,\n\tonError = null,\n\tonNoMatch = null,\n\t__rsInstance,\n}) => {\n\tconst buttonRef = useRef(null)\n\tconst [isListening, setIsListening] = useState(false)\n\n\tconst [, { start, stop, subscribe, unsubscribe }] = useVocal(lang, grammars, maxAlternatives, __rsInstance)\n\tconst triggerCommand = useCommands(commands, precision)\n\n\tconst propsRef = useRef({})\n\tpropsRef.current = { onStart, onEnd, onSpeechStart, onSpeechEnd, onResult, onError, onNoMatch }\n\n\tconst triggerCommandRef = useRef(triggerCommand)\n\ttriggerCommandRef.current = triggerCommand\n\n\tconst unsubscribeAllRef = useRef(null)\n\tconst onEndRef = useRef(null)\n\n\t// Breaks the circular dep: _onEnd → useTimeout(handler) → startTimer captures _onEnd\n\tconst stableTimerCb = useCallback(() => onEndRef.current?.(), [])\n\tconst [startTimer, stopTimer] = useTimeout(stableTimerCb, timeout)\n\n\tconst stopRecognition = useCallback(() => {\n\t\ttry {\n\t\t\tsetIsListening(false)\n\t\t\tstop()\n\t\t} catch (error) {\n\t\t\tpropsRef.current.onError?.(error)\n\t\t\tunsubscribeAllRef.current?.()\n\t\t}\n\t}, [stop])\n\n\tconst _onStart = useCallback(\n\t\t(e) => {\n\t\t\tstartTimer()\n\t\t\tpropsRef.current.onStart?.(e)\n\t\t},\n\t\t[startTimer]\n\t)\n\n\tconst _onSpeechStart = useCallback(\n\t\t(e) => {\n\t\t\tstopTimer()\n\t\t\tpropsRef.current.onSpeechStart?.(e)\n\t\t},\n\t\t[stopTimer]\n\t)\n\n\tconst _onSpeechEnd = useCallback(\n\t\t(e) => {\n\t\t\tstartTimer()\n\t\t\tpropsRef.current.onSpeechEnd?.(e)\n\t\t},\n\t\t[startTimer]\n\t)\n\n\tconst _onResult = useCallback(\n\t\t(event) => {\n\t\t\tconst segmentData = Array.from(event?.results ?? [], (segment) => {\n\t\t\t\tlet best = { confidence: -Infinity, transcript: '' }\n\t\t\t\tconst alternatives = []\n\t\t\t\tfor (let j = 0; j < segment.length; j++) {\n\t\t\t\t\tconst alt = segment[j]\n\t\t\t\t\talternatives.push(alt.transcript ?? '')\n\t\t\t\t\tif (alt.confidence === undefined || alt.confidence > best.confidence) {\n\t\t\t\t\t\tbest = alt\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn { best: best.transcript ?? '', alternatives }\n\t\t\t})\n\t\t\tconst transcript = segmentData.map((s) => s.best).join('')\n\n\t\t\tstopTimer()\n\t\t\tstopRecognition()\n\t\t\ttryMatchCommand(segmentData, triggerCommandRef.current)\n\t\t\tpropsRef.current.onResult?.(transcript, event)\n\t\t},\n\t\t[stopTimer, stopRecognition]\n\t)\n\n\tconst _onError = useCallback(\n\t\t(error) => {\n\t\t\tstopRecognition()\n\t\t\tpropsRef.current.onError?.(error)\n\t\t},\n\t\t[stopRecognition]\n\t)\n\n\tconst _onNoMatch = useCallback(\n\t\t(e) => {\n\t\t\tstopTimer()\n\t\t\tstopRecognition()\n\t\t\tpropsRef.current.onNoMatch?.(e)\n\t\t},\n\t\t[stopTimer, stopRecognition]\n\t)\n\n\tconst _onEnd = useCallback(\n\t\t(e) => {\n\t\t\tstopTimer()\n\t\t\ttry {\n\t\t\t\tstopRecognition()\n\t\t\t\tunsubscribeAllRef.current?.()\n\t\t\t} finally {\n\t\t\t\tpropsRef.current.onEnd?.(e)\n\t\t\t}\n\t\t},\n\t\t[stopTimer, stopRecognition]\n\t)\n\n\tonEndRef.current = _onEnd\n\n\tconst HANDLERS = useMemo(\n\t\t() => ({\n\t\t\tstart: _onStart,\n\t\t\tend: _onEnd,\n\t\t\tspeechstart: _onSpeechStart,\n\t\t\tspeechend: _onSpeechEnd,\n\t\t\tresult: _onResult,\n\t\t\terror: _onError,\n\t\t\tnomatch: _onNoMatch,\n\t\t}),\n\t\t[_onStart, _onEnd, _onSpeechStart, _onSpeechEnd, _onResult, _onError, _onNoMatch]\n\t)\n\n\t// Assigned inline (not in useEffect) so it's ready before any event fires\n\tunsubscribeAllRef.current = () => Object.entries(HANDLERS).forEach(([event, fn]) => unsubscribe?.(event, fn))\n\n\tconst startRecognition = useCallback(() => {\n\t\ttry {\n\t\t\tsetIsListening(true)\n\t\t\tObject.entries(HANDLERS).forEach(([event, fn]) => subscribe(event, fn))\n\t\t\tstart()\n\t\t} catch (error) {\n\t\t\t_onError(error)\n\t\t}\n\t}, [HANDLERS, subscribe, start, _onError])\n\n\tconst _onFocus = () => {\n\t\tif (!className && outlineStyle) {\n\t\t\tbuttonRef.current.style.outline = outlineStyle\n\t\t}\n\t}\n\n\tconst _onBlur = () => {\n\t\tif (!className && outlineStyle) {\n\t\t\tbuttonRef.current.style.outline = 'none'\n\t\t}\n\t}\n\n\tconst _renderDefault = () => (\n\t\t<button\n\t\t\tdata-testid=\"__vocal-root__\"\n\t\t\tref={buttonRef}\n\t\t\trole=\"button\"\n\t\t\taria-label={ariaLabel}\n\t\t\tstyle={\n\t\t\t\tclassName\n\t\t\t\t\t? null\n\t\t\t\t\t: {\n\t\t\t\t\t\t\twidth: 24,\n\t\t\t\t\t\t\theight: 24,\n\t\t\t\t\t\t\tbackgroundColor: 'transparent', // `background: none` shorthand resets all sub-properties; jsdom 29 + jest-dom v6 don't reflect that correctly via getComputedStyle\n\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\tcursor: !isListening ? 'pointer' : 'default',\n\t\t\t\t\t\t\t...style,\n\t\t\t\t\t }\n\t\t\t}\n\t\t\tclassName={className}\n\t\t\tonFocus={_onFocus}\n\t\t\tonBlur={_onBlur}\n\t\t\tonClick={startRecognition}\n\t\t>\n\t\t\t<Icon isActive={isListening} color=\"#aaa\" />\n\t\t</button>\n\t)\n\n\tconst _renderChildren = () => {\n\t\tif (SpeechRecognitionWrapper.isSupported) {\n\t\t\tif (isFunction(children)) {\n\t\t\t\treturn children(startRecognition, stopRecognition, isListening)\n\t\t\t} else if (isValidElement(children)) {\n\t\t\t\treturn cloneElement(children, {\n\t\t\t\t\t...(!isListening && { onClick: startRecognition }),\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\treturn _renderDefault()\n\t\t\t}\n\t\t}\n\t\treturn null\n\t}\n\n\treturn _renderChildren()\n}\n\nexport default Vocal\n","import Vocal from './components/Vocal'\nimport { Vocal as SpeechRecognitionWrapper } from '@untemps/vocal'\n\nexport { default as useVocal } from './hooks/useVocal'\nexport const isSupported = SpeechRecognitionWrapper.isSupported\n\nexport default Vocal\n"],"x_google_ignoreList":[0,1,5,6,7],"mappings":";;;;;IAAI,IAAE,SAAS,GAAE,GAAE,GAAE;AAAC,QAAO,EAAE,IAAE;EAAC,MAAK;EAAE,SAAQ,EAAE;EAAC,SAAQ,SAAS,GAAE,GAAE;AAAC,UAAO,WAAU;AAAC,UAAU,MAAM,0EAA0E;KAAQ,KAAN,QAAS,EAAE,KAAK;;EAAE,EAAC,EAAE,QAAQ,EAAC,EAAE;GAAU,SAAS,GAAE;CAAC,IAAI,IAAE,SAAS,GAAE;EAAC,IAAI,IAAE,OAAO,WAAU,IAAE,EAAE,gBAAe,IAAc,OAAO,UAAnB,aAA0B,SAAO,EAAE,EAAC,IAAE,EAAE,YAAU,cAAa,IAAE,EAAE,iBAAe,mBAAkB,IAAE,EAAE,eAAa;EAAgB,SAAS,EAAE,GAAE,GAAE,GAAE;AAAC,UAAO,OAAO,eAAe,GAAE,GAAE;IAAC,OAAM;IAAE,YAAW,CAAC;IAAE,cAAa,CAAC;IAAE,UAAS,CAAC;IAAE,CAAC,EAAC,EAAE;;AAAG,MAAG;AAAC,KAAE,EAAE,EAAC,GAAG;UAAS;AAAC,OAAE,SAAS,GAAE,GAAE,GAAE;AAAC,WAAO,EAAE,KAAG;;;EAAG,SAAS,EAAE,GAAE,GAAE,GAAE,GAAE;GAAC,IAAI,IAAE,KAAG,EAAE,qBAAqB,IAAE,IAAE,GAAE,IAAE,OAAO,OAAO,EAAE,UAAU;AAAgB,UAAO,EAAE,UAAQ,SAAS,GAAE,GAAE,GAAE;IAAC,IAAI,IAAE;AAAiB,WAAO,SAAS,GAAE,GAAE;AAAC,SAAiB,MAAd,YAAgB,OAAU,MAAM,+BAA+B;AAAC,SAAiB,MAAd,aAAgB;AAAC,UAAa,MAAV,QAAY,OAAM;AAAE,aAAO,GAAG;;AAAC,UAAI,EAAE,SAAO,GAAE,EAAE,MAAI,KAAI;MAAC,IAAI,IAAE,EAAE;AAAS,UAAG,GAAE;OAAC,IAAI,IAAE,EAAE,GAAE,EAAE;AAAC,WAAG,GAAE;AAAC,YAAG,MAAI,EAAE;AAAS,eAAO;;;AAAG,UAAY,EAAE,WAAX,OAAkB,GAAE,OAAK,EAAE,QAAM,EAAE;eAAsB,EAAE,WAAZ,SAAmB;AAAC,WAAsB,MAAnB,iBAAqB,OAAM,IAAE,aAAY,EAAE;AAAI,SAAE,kBAAkB,EAAE,IAAI;YAAK,CAAW,EAAE,WAAb,YAAqB,EAAE,OAAO,UAAS,EAAE,IAAI;AAAC,UAAE;MAAY,IAAI,IAAE,EAAE,GAAE,GAAE,EAAE;AAAC,UAAc,EAAE,SAAb,UAAkB;AAAC,WAAG,IAAE,EAAE,OAAK,cAAY,kBAAiB,EAAE,QAAM,EAAE;AAAS,cAAM;QAAC,OAAM,EAAE;QAAI,MAAK,EAAE;QAAK;;AAAC,MAAU,EAAE,SAAZ,YAAmB,IAAE,aAAY,EAAE,SAAO,SAAQ,EAAE,MAAI,EAAE;;;KAAQ,GAAE,GAAE,IAAzsB,EAAE,KAAG,EAAE,CAAmsB,CAAC,EAAC;;EAAE,SAAS,EAAE,GAAE,GAAE,GAAE;AAAC,OAAG;AAAC,WAAM;KAAC,MAAK;KAAS,KAAI,EAAE,KAAK,GAAE,EAAE;KAAC;YAAO,GAAE;AAAC,WAAM;KAAC,MAAK;KAAQ,KAAI;KAAE;;;AAAE,IAAE,OAAK;EAAE,IAAI,IAAE,EAAE;EAAC,SAAS,IAAG;EAAE,SAAS,IAAG;EAAE,SAAS,IAAG;EAAE,IAAI,IAAE,EAAE;AAAC,IAAE,KAAG,WAAU;AAAC,UAAO;;EAAM,IAAI,IAAE,OAAO,gBAAe,IAAE,KAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAC,OAAG,MAAI,KAAG,EAAE,KAAK,GAAE,EAAE,KAAG,IAAE;EAAG,IAAI,IAAE,EAAE,YAAU,EAAE,YAAU,OAAO,OAAO,EAAE;EAAC,SAAS,EAAE,GAAE;AAAC;IAAC;IAAO;IAAQ;IAAS,CAAC,SAAS,SAAS,GAAE;AAAC,MAAE,GAAE,IAAG,SAAS,GAAE;AAAC,YAAO,KAAK,QAAQ,GAAE,EAAE;OAAG;MAAG;;EAAC,SAAS,EAAE,GAAE,GAAE;GAAC,IAAI;AAAE,QAAK,UAAQ,SAAS,GAAE,GAAE;IAAC,SAAS,IAAG;AAAC,YAAO,IAAI,GAAG,SAAS,GAAE,GAAE;AAAC,OAAC,SAAS,EAAE,GAAE,GAAE,GAAE,GAAE;OAAC,IAAI,IAAE,EAAE,EAAE,IAAG,GAAE,EAAE;AAAC,WAAa,EAAE,SAAZ,SAAiB;QAAC,IAAI,IAAE,EAAE,KAAI,IAAE,EAAE;AAAM,eAAO,KAAa,OAAO,KAAjB,YAAoB,EAAE,KAAK,GAAE,UAAU,GAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,SAAS,GAAE;AAAC,WAAE,QAAO,GAAE,GAAE,EAAE;aAAI,SAAS,GAAE;AAAC,WAAE,SAAQ,GAAE,GAAE,EAAE;WAAG,GAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,SAAS,GAAE;AAAC,WAAE,QAAM,GAAE,EAAE,EAAE;aAAI,SAAS,GAAE;AAAC,gBAAO,EAAE,SAAQ,GAAE,GAAE,EAAE;WAAG;;AAAC,SAAE,EAAE,IAAI;SAAE,GAAE,GAAE,GAAE,EAAE;QAAG;;AAAC,WAAO,IAAE,IAAE,EAAE,KAAK,GAAE,EAAE,GAAC,GAAG;;;EAAE,SAAS,EAAE,GAAE,GAAE;GAAC,IAAI,IAAE,EAAE,SAAS,EAAE;AAAQ,OAAY,MAAT,KAAK,GAAM;AAAC,QAAG,EAAE,WAAS,MAAe,EAAE,WAAZ,SAAmB;AAAC,SAAG,EAAE,SAAS,WAAS,EAAE,SAAO,UAAS,EAAE,MAAI,KAAK,GAAE,EAAE,GAAE,EAAE,EAAW,EAAE,WAAZ,SAAoB,QAAO;AAAE,OAAE,SAAO,SAAQ,EAAE,MAAI,gBAAI,UAAU,iDAAiD;;AAAC,WAAO;;GAAE,IAAI,IAAE,EAAE,GAAE,EAAE,UAAS,EAAE,IAAI;AAAC,OAAa,EAAE,SAAZ,QAAiB,QAAO,EAAE,SAAO,SAAQ,EAAE,MAAI,EAAE,KAAI,EAAE,WAAS,MAAK;GAAE,IAAI,IAAE,EAAE;AAAI,UAAO,IAAE,EAAE,QAAM,EAAE,EAAE,cAAY,EAAE,OAAM,EAAE,OAAK,EAAE,SAAmB,EAAE,WAAb,aAAsB,EAAE,SAAO,QAAO,EAAE,MAAI,KAAK,IAAG,EAAE,WAAS,MAAK,KAAG,KAAG,EAAE,SAAO,SAAQ,EAAE,MAAI,gBAAI,UAAU,mCAAmC,EAAC,EAAE,WAAS,MAAK;;EAAG,SAAS,EAAE,GAAE;GAAC,IAAI,IAAE,EAAC,QAAO,EAAE,IAAG;AAAC,QAAK,MAAI,EAAE,WAAS,EAAE,KAAI,KAAK,MAAI,EAAE,aAAW,EAAE,IAAG,EAAE,WAAS,EAAE,KAAI,KAAK,WAAW,KAAK,EAAE;;EAAC,SAAS,EAAE,GAAE;GAAC,IAAI,IAAE,EAAE,cAAY,EAAE;AAAC,KAAE,OAAK,UAAS,OAAO,EAAE,KAAI,EAAE,aAAW;;EAAE,SAAS,EAAE,GAAE;AAAC,QAAK,aAAW,CAAC,EAAC,QAAO,QAAO,CAAC,EAAC,EAAE,QAAQ,GAAE,KAAK,EAAC,KAAK,MAAM,CAAC,EAAE;;EAAC,SAAS,EAAE,GAAE;AAAC,OAAG,GAAE;IAAC,IAAI,IAAE,EAAE;AAAG,QAAG,EAAE,QAAO,EAAE,KAAK,EAAE;AAAC,QAAe,OAAO,EAAE,QAArB,WAA0B,QAAO;AAAE,QAAG,CAAC,MAAM,EAAE,OAAO,EAAC;KAAC,IAAI,IAAE,IAAG,IAAE,SAAS,IAAG;AAAC,aAAK,EAAE,IAAE,EAAE,QAAQ,KAAG,EAAE,KAAK,GAAE,EAAE,CAAC,QAAO,EAAE,QAAM,EAAE,IAAG,EAAE,OAAK,CAAC,GAAE;AAAE,aAAO,EAAE,QAAM,KAAK,GAAE,EAAE,OAAK,CAAC,GAAE;;AAAG,YAAO,EAAE,OAAK;;;AAAG,UAAM,EAAC,MAAK,GAAE;;EAAC,SAAS,IAAG;AAAC,UAAM;IAAC,OAAM,KAAK;IAAE,MAAK,CAAC;IAAE;;AAAC,SAAO,EAAE,YAAU,EAAE,cAAY,GAAE,EAAE,cAAY,GAAE,EAAE,cAAY,EAAE,GAAE,GAAE,oBAAoB,EAAC,EAAE,sBAAoB,SAAS,GAAE;GAAC,IAAI,IAAc,OAAO,KAAnB,cAAsB,EAAE;AAAY,UAAM,CAAC,CAAC,MAAI,MAAI,MAA0B,EAAE,eAAa,EAAE,UAAxC;KAAgD,EAAE,OAAK,SAAS,GAAE;AAAC,UAAO,OAAO,iBAAe,OAAO,eAAe,GAAE,EAAE,IAAE,EAAE,YAAU,GAAE,EAAE,GAAE,GAAE,oBAAoB,GAAE,EAAE,YAAU,OAAO,OAAO,EAAE,EAAC;KAAG,EAAE,QAAM,SAAS,GAAE;AAAC,UAAM,EAAC,SAAQ,GAAE;KAAE,EAAE,EAAE,UAAU,EAAC,EAAE,UAAU,KAAG,WAAU;AAAC,UAAO;KAAM,EAAE,gBAAc,GAAE,EAAE,QAAM,SAAS,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,GAAS,MAAT,KAAK,MAAQ,IAAE;GAAS,IAAI,IAAE,IAAI,EAAE,EAAE,GAAE,GAAE,GAAE,EAAE,EAAC,EAAE;AAAC,UAAO,EAAE,oBAAoB,EAAE,GAAC,IAAE,EAAE,MAAM,CAAC,MAAM,SAAS,GAAE;AAAC,WAAO,EAAE,OAAK,EAAE,QAAM,EAAE,MAAM;MAAG;KAAE,EAAE,EAAE,EAAC,EAAE,GAAE,GAAE,YAAY,EAAC,EAAE,KAAG,WAAU;AAAC,UAAO;KAAM,EAAE,WAAS,WAAU;AAAC,UAAM;KAAsB,EAAE,OAAK,SAAS,GAAE;GAAC,IAAI,IAAE,EAAE;AAAC,QAAI,IAAI,KAAK,EAAE,GAAE,KAAK,EAAE;AAAC,UAAO,EAAE,SAAS,EAAC,SAAS,IAAG;AAAC,WAAK,EAAE,SAAQ;KAAC,IAAI,IAAE,EAAE,KAAK;AAAC,SAAG,KAAK,EAAE,QAAO,EAAE,QAAM,GAAE,EAAE,OAAK,CAAC,GAAE;;AAAE,WAAO,EAAE,OAAK,CAAC,GAAE;;KAAI,EAAE,SAAO,GAAE,EAAE,YAAU;GAAC,aAAY;GAAE,OAAM,SAAS,GAAE;AAAC,QAAG,KAAK,OAAK,GAAE,KAAK,OAAK,GAAE,KAAK,OAAK,KAAK,QAAM,KAAK,GAAE,KAAK,OAAK,CAAC,GAAE,KAAK,WAAS,MAAK,KAAK,SAAO,QAAO,KAAK,MAAI,KAAK,GAAE,KAAK,WAAW,QAAQ,EAAE,EAAC,CAAC,EAAE,MAAI,IAAI,KAAK,KAAK,CAAM,EAAE,OAAO,EAAE,KAAjB,OAAmB,EAAE,KAAK,MAAK,EAAE,IAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,KAAG,KAAK,KAAG,KAAK;;GAAI,MAAK,WAAU;AAAC,SAAK,OAAK,CAAC;IAAE,IAAI,IAAE,KAAK,WAAW,GAAG;AAAW,QAAa,EAAE,SAAZ,QAAiB,OAAM,EAAE;AAAI,WAAO,KAAK;;GAAM,mBAAkB,SAAS,GAAE;AAAC,QAAG,KAAK,KAAK,OAAM;IAAE,IAAI,IAAE;IAAK,SAAS,EAAE,GAAE,GAAE;AAAC,YAAO,EAAE,OAAK,SAAQ,EAAE,MAAI,GAAE,EAAE,OAAK,GAAE,MAAI,EAAE,SAAO,QAAO,EAAE,MAAI,KAAK,IAAG,CAAC,CAAC;;AAAE,SAAI,IAAI,IAAE,KAAK,WAAW,SAAO,GAAE,KAAG,GAAE,EAAE,GAAE;KAAC,IAAI,IAAE,KAAK,WAAW,IAAG,IAAE,EAAE;AAAW,SAAY,EAAE,WAAX,OAAkB,QAAO,EAAE,MAAM;AAAC,SAAG,EAAE,UAAQ,KAAK,MAAK;MAAC,IAAI,IAAE,EAAE,KAAK,GAAE,WAAW,EAAC,IAAE,EAAE,KAAK,GAAE,aAAa;AAAC,UAAG,KAAG,GAAE;AAAC,WAAG,KAAK,OAAK,EAAE,SAAS,QAAO,EAAE,EAAE,UAAS,CAAC,EAAE;AAAC,WAAG,KAAK,OAAK,EAAE,WAAW,QAAO,EAAE,EAAE,WAAW;iBAAS;WAAM,KAAK,OAAK,EAAE,SAAS,QAAO,EAAE,EAAE,UAAS,CAAC,EAAE;aAAK;AAAC,WAAG,CAAC,EAAE,OAAU,MAAM,yCAAyC;AAAC,WAAG,KAAK,OAAK,EAAE,WAAW,QAAO,EAAE,EAAE,WAAW;;;;;GAAK,QAAO,SAAS,GAAE,GAAE;AAAC,SAAI,IAAI,IAAE,KAAK,WAAW,SAAO,GAAE,KAAG,GAAE,EAAE,GAAE;KAAC,IAAI,IAAE,KAAK,WAAW;AAAG,SAAG,EAAE,UAAQ,KAAK,QAAM,EAAE,KAAK,GAAE,aAAa,IAAE,KAAK,OAAK,EAAE,YAAW;MAAC,IAAI,IAAE;AAAE;;;AAAO,UAAc,MAAV,WAA0B,MAAb,eAAiB,EAAE,UAAQ,KAAG,KAAG,EAAE,eAAa,IAAE;IAAM,IAAI,IAAE,IAAE,EAAE,aAAW,EAAE;AAAC,WAAO,EAAE,OAAK,GAAE,EAAE,MAAI,GAAE,KAAG,KAAK,SAAO,QAAO,KAAK,OAAK,EAAE,YAAW,KAAG,KAAK,SAAS,EAAE;;GAAE,UAAS,SAAS,GAAE,GAAE;AAAC,QAAa,EAAE,SAAZ,QAAiB,OAAM,EAAE;AAAI,WAAgB,EAAE,SAAZ,WAA+B,EAAE,SAAf,aAAoB,KAAK,OAAK,EAAE,MAAe,EAAE,SAAb,YAAmB,KAAK,OAAK,KAAK,MAAI,EAAE,KAAI,KAAK,SAAO,UAAS,KAAK,OAAK,SAAkB,EAAE,SAAb,YAAmB,MAAI,KAAK,OAAK,IAAG;;GAAG,QAAO,SAAS,GAAE;AAAC,SAAI,IAAI,IAAE,KAAK,WAAW,SAAO,GAAE,KAAG,GAAE,EAAE,GAAE;KAAC,IAAI,IAAE,KAAK,WAAW;AAAG,SAAG,EAAE,eAAa,EAAE,QAAO,KAAK,SAAS,EAAE,YAAW,EAAE,SAAS,EAAC,EAAE,EAAE,EAAC;;;GAAI,OAAM,SAAS,GAAE;AAAC,SAAI,IAAI,IAAE,KAAK,WAAW,SAAO,GAAE,KAAG,GAAE,EAAE,GAAE;KAAC,IAAI,IAAE,KAAK,WAAW;AAAG,SAAG,EAAE,WAAS,GAAE;MAAC,IAAI,IAAE,EAAE;AAAW,UAAa,EAAE,SAAZ,SAAiB;OAAC,IAAI,IAAE,EAAE;AAAI,SAAE,EAAE;;AAAC,aAAO;;;AAAG,UAAU,MAAM,wBAAwB;;GAAE,eAAc,SAAS,GAAE,GAAE,GAAE;AAAC,WAAO,KAAK,WAAS;KAAC,UAAS,EAAE,EAAE;KAAC,YAAW;KAAE,SAAQ;KAAE,EAAU,KAAK,WAAd,WAAuB,KAAK,MAAI,KAAK,IAAG;;GAAG,EAAC;GAAG,EAAE,QAAQ;AAAC,KAAG;AAAC,uBAAmB;SAAU;AAAC,WAAS,KAAI,yBAAyB,CAAC,EAAE;;GAAI;AAAC,SAASA,EAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,KAAG;EAAC,IAAI,IAAE,EAAE,GAAG,EAAE,EAAC,IAAE,EAAE;UAAY,GAAE;AAAa,IAAE,EAAE;AAAhB;;AAAiB,GAAE,OAAK,EAAE,EAAE,GAAC,QAAQ,QAAQ,EAAE,CAAC,KAAK,GAAE,EAAE;;AAAC,IAAI,IAAE,SAAS,GAAE;AAAC,QAAO,WAAU;EAAC,IAAI,IAAE,MAAK,IAAE;AAAU,SAAO,IAAI,SAAS,SAAS,GAAE,GAAE;GAAC,IAAI,IAAE,EAAE,MAAM,GAAE,EAAE;GAAC,SAAS,EAAE,GAAE;AAAC,MAAE,GAAE,GAAE,GAAE,GAAE,GAAE,QAAO,EAAE;;GAAC,SAAS,EAAE,GAAE;AAAC,MAAE,GAAE,GAAE,GAAE,GAAE,GAAE,SAAQ,EAAE;;AAAC,KAAE,KAAK,EAAE;KAAG;;GAAO,IAAE,SAAS,GAAE;AAAC,KAAG,MAAM,QAAQ,EAAE,CAAC,QAAO;GAAO,IAAE,SAAS,GAAE,GAAE;AAAC,KAAgB,OAAO,SAApB,OAA4B,OAAO,YAAY,OAAO,EAAE,EAAC;EAAC,IAAI,IAAE,EAAE,EAAC,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,KAAK;AAAE,MAAG;AAAC,QAAI,IAAI,GAAE,IAAE,EAAE,OAAO,WAAW,EAAC,EAAE,KAAG,IAAE,EAAE,MAAM,EAAE,UAAQ,EAAE,KAAK,EAAE,MAAM,EAAC,CAAC,KAAG,EAAE,WAAS,IAAG,IAAE,CAAC;WAAU,GAAE;AAAC,OAAE,CAAC,GAAE,IAAE;YAAS;AAAC,OAAG;AAAC,SAAS,EAAE,UAAR,QAAgB,EAAE,QAAQ;aAAQ;AAAC,QAAG,EAAE,OAAM;;;AAAG,SAAO;;GAAQ,IAAE,SAAS,GAAE,GAAE;AAAC,EAAO,KAAN,QAAS,IAAE,EAAE,YAAU,IAAE,EAAE;AAAQ,MAAI,IAAI,IAAE,GAAE,IAAM,MAAM,EAAE,EAAC,IAAE,GAAE,IAAI,GAAE,KAAG,EAAE;AAAG,QAAO;GAAO,IAAE,SAAS,GAAE,GAAE;AAAC,KAAG,GAAE;AAAC,MAAa,OAAO,KAAjB,SAAmB,QAAO,EAAE,GAAE,EAAE;EAAC,IAAI,IAAE,OAAO,UAAU,SAAS,KAAK,EAAE,CAAC,MAAM,GAAE,GAAG;AAAC,SAAiB,MAAX,YAAc,EAAE,gBAAc,IAAE,EAAE,YAAY,OAAc,MAAR,SAAmB,MAAR,QAAU,MAAM,KAAK,EAAE,GAAe,MAAd,eAAiB,2CAA2C,KAAK,EAAE,GAAC,EAAE,GAAE,EAAE,GAAC,KAAK;;GAAQ,IAAE,WAAU;AAAC,OAAU,UAAU,4IAA4I;GAAM,IAAE,SAAS,GAAE,GAAE;AAAC,QAAO,EAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,GAAG;GAAM,IAAE,SAAS,GAAE,GAAE;AAAC,KAAG,EAAE,aAAa,GAAG,OAAU,UAAU,oCAAoC;;AAAE,SAAS,EAAE,GAAE,GAAE;AAAC,MAAI,IAAI,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;EAAC,IAAI,IAAE,EAAE;AAAG,IAAE,aAAW,EAAE,cAAY,CAAC,GAAE,EAAE,eAAa,CAAC,GAAE,WAAU,MAAI,EAAE,WAAS,CAAC,IAAG,OAAO,eAAe,GAAE,EAAE,KAAI,EAAE;;;AAAE,IAAI,IAAE,SAAS,GAAE,GAAE,GAAE;AAAC,QAAO,KAAG,EAAE,EAAE,WAAU,EAAE,EAAC,KAAG,EAAE,GAAE,EAAE,EAAC;GAAO,IAAE,SAAS,GAAE,GAAE,GAAE;AAAC,QAAO,KAAK,IAAE,OAAO,eAAe,GAAE,GAAE;EAAC,OAAM;EAAE,YAAW,CAAC;EAAE,cAAa,CAAC;EAAE,UAAS,CAAC;EAAE,CAAC,GAAC,EAAE,KAAG,GAAE;GAAG,IAAE,WAAU;AAAC,QAAM,CAAC,CAAC,UAAU;GAAa,IAAE,WAAU;AAAC,QAAM,CAAC,CAAC,UAAU;;AAAc,SAAS,EAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,KAAG;EAAC,IAAI,IAAE,EAAE,GAAG,EAAE,EAAC,IAAE,EAAE;UAAY,GAAE;AAAa,IAAE,EAAE;AAAhB;;AAAiB,GAAE,OAAK,EAAE,EAAE,GAAC,QAAQ,QAAQ,EAAE,CAAC,KAAK,GAAE,EAAE;;AAAC,SAAS,EAAE,GAAE;AAAC,QAAO,WAAU;EAAC,IAAI,IAAE,MAAK,IAAE;AAAU,SAAO,IAAI,SAAS,SAAS,GAAE,GAAE;GAAC,IAAI,IAAE,EAAE,MAAM,GAAE,EAAE;GAAC,SAAS,EAAE,GAAE;AAAC,MAAE,GAAE,GAAE,GAAE,GAAE,GAAE,QAAO,EAAE;;GAAC,SAAS,EAAE,GAAE;AAAC,MAAE,GAAE,GAAE,GAAE,GAAE,GAAE,SAAQ,EAAE;;AAAC,KAAE,KAAK,EAAE;KAAG;;;AAAE,SAAS,EAAE,GAAE,GAAE;AAAC,QAAO,SAAS,GAAE;AAAC,MAAG,MAAM,QAAQ,EAAE,CAAC,QAAO;GAAG,EAAE,IAAE,SAAS,GAAE,GAAE;AAAC,MAAgB,OAAO,SAApB,OAA4B,OAAO,YAAY,OAAO,EAAE,EAAC;GAAC,IAAI,IAAE,EAAE,EAAC,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,KAAK;AAAE,OAAG;AAAC,SAAI,IAAI,GAAE,IAAE,EAAE,OAAO,WAAW,EAAC,EAAE,KAAG,IAAE,EAAE,MAAM,EAAE,UAAQ,EAAE,KAAK,EAAE,MAAM,EAAC,CAAC,KAAG,EAAE,WAAS,IAAG,IAAE,CAAC;YAAU,GAAE;AAAC,QAAE,CAAC,GAAE,IAAE;aAAS;AAAC,QAAG;AAAC,UAAS,EAAE,UAAR,QAAgB,EAAE,QAAQ;cAAQ;AAAC,SAAG,EAAE,OAAM;;;AAAG,UAAO;;GAAI,GAAE,EAAE,IAAE,SAAS,GAAE,GAAE;AAAC,MAAG,GAAE;AAAC,OAAa,OAAO,KAAjB,SAAmB,QAAO,EAAE,GAAE,EAAE;GAAC,IAAI,IAAE,OAAO,UAAU,SAAS,KAAK,EAAE,CAAC,MAAM,GAAE,GAAG;AAAC,UAAiB,MAAX,YAAc,EAAE,gBAAc,IAAE,EAAE,YAAY,OAAc,MAAR,SAAmB,MAAR,QAAU,MAAM,KAAK,EAAE,GAAe,MAAd,eAAiB,2CAA2C,KAAK,EAAE,GAAC,EAAE,GAAE,EAAE,GAAC,KAAK;;GAAI,GAAE,EAAE,IAAE,WAAU;AAAC,QAAU,UAAU,4IAA4I;IAAG;;AAAC,SAAS,EAAE,GAAE,GAAE;AAAC,EAAO,KAAN,QAAS,IAAE,EAAE,YAAU,IAAE,EAAE;AAAQ,MAAI,IAAI,IAAE,GAAE,IAAM,MAAM,EAAE,EAAC,IAAE,GAAE,IAAI,GAAE,KAAG,EAAE;AAAG,QAAO;;AAAE,IAAI,IAAE,WAAU;CAAC,IAAI,IAAE,EAAE,mBAAmB,MAAM,SAAS,EAAE,GAAE;AAAC,SAAO,mBAAmB,MAAM,SAAS,GAAE;AAAC,WAAO,SAAO,EAAE,OAAK,EAAE,MAAhB;IAAsB,KAAK,EAAE,QAAO,EAAE,OAAO,UAAS,IAAI,QAAQ,WAAU;KAAC,IAAI,IAAE,EAAE,mBAAmB,MAAM,SAAS,EAAE,GAAE,GAAE;MAAC,IAAI,GAAE;AAAE,aAAO,mBAAmB,MAAM,SAAS,GAAE;AAAC,eAAO,SAAO,EAAE,OAAK,EAAE,MAAhB;QAAsB,KAAK,EAAE,QAAO,GAAG,IAAE,EAAE,IAAI,aAAa,4CAA2C,oBAAoB,CAAC,EAAC,EAAE,OAAK,GAAE,EAAE,OAAK,GAAE,UAAU,YAAY,MAAM,EAAC,MAAK,GAAE,CAAC;QAAC,KAAK;AAAE,aAAE,EAAE,MAAK,IAAE,SAAS,EAAE,GAAE;AAAC,YAAE,oBAAoB,UAAS,EAAE,EAAC,EAAE,EAAE,OAAO,OAAM,GAAE,EAAE;YAAE,EAAE,iBAAiB,UAAS,EAAE,EAAC,EAAE,EAAE,OAAM,GAAE,EAAE,EAAC,EAAE,OAAK;AAAG;QAAM,KAAK,GAAG,GAAE,OAAK,IAAG,EAAE,KAAG,EAAE,MAAM,EAAE,EAAC,EAAE,EAAE,GAAG;QAAC,KAAK;QAAG,KAAI,MAAM,QAAO,EAAE,MAAM;;UAAI,GAAE,MAAK,CAAC,CAAC,GAAE,GAAG,CAAC,CAAC;QAAG,CAAC;AAAC,YAAO,SAAS,GAAE,GAAE;AAAC,aAAO,EAAE,MAAM,MAAK,UAAU;;OAAI,CAAC,CAAC;IAAC,KAAK;IAAE,KAAI,MAAM,QAAO,EAAE,MAAM;;MAAI,EAAE;IAAG,CAAC;AAAC,QAAO,SAAS,GAAE;AAAC,SAAO,EAAE,MAAM,MAAK,UAAU;;GAAI,EAAC,IAAE,SAAS,GAAE,GAAE,GAAE;AAAC,SAAO,GAAP;EAAU,KAAI;AAAS,KAAE,IAAI,aAAa,qBAAoB,kBAAkB,CAAC;AAAC;EAAM,QAAQ,GAAE,EAAE;;GAAG,IAAE,WAAU;CAAC,IAAI,IAAE,EAAE,mBAAmB,MAAM,SAAS,EAAE,GAAE,GAAE;AAAC,SAAO,mBAAmB,MAAM,SAAS,GAAE;AAAC,WAAO,SAAO,EAAE,OAAK,EAAE,MAAhB;IAAsB,KAAK,EAAE,QAAO,EAAE,OAAO,UAAS,IAAI,QAAQ,WAAU;KAAC,IAAI,IAAE,EAAE,mBAAmB,MAAM,SAAS,EAAE,GAAE,GAAE;MAAC,IAAI,GAAE,GAAE;AAAE,aAAO,mBAAmB,MAAM,SAAS,GAAE;AAAC,eAAO,SAAO,EAAE,OAAK,EAAE,MAAhB;QAAsB,KAAK,EAAE,QAAO,GAAG,IAAE,GAAG,IAAE,EAAE,IAAI,aAAa,2EAA0E,oBAAoB,CAAC,EAAC,EAAE,OAAK,GAAE,EAAE,KAAG,SAAQ,EAAE,OAAK,GAAE,EAAE,EAAE;QAAC,KAAK,EAAE,QAAO,EAAE,KAAG,EAAE,MAAK,EAAE,OAAK,GAAE,UAAU,aAAa,aAAa,EAAE;QAAC,KAAK,EAAE,QAAO,EAAE,KAAG,EAAE,MAAK,EAAE,KAAG,CAAC,EAAE,IAAG,EAAE,GAAG,EAAC,EAAE,OAAK,IAAG,EAAE,GAAG,IAAI,KAAK,EAAE,IAAG,EAAE,GAAG;QAAC,KAAK;AAAG,aAAE,EAAE,MAAK,IAAE,EAAE,GAAE,EAAE,EAAC,IAAE,EAAE,IAAG,EAAE,EAAE,EAAC,EAAE,OAAK;AAAG;QAAM,KAAK,GAAG,GAAE,OAAK,IAAG,EAAE,KAAG,EAAE,MAAM,EAAE,EAAC,EAAE,EAAE,GAAG;QAAC,KAAK;QAAG,KAAI,MAAM,QAAO,EAAE,MAAM;;UAAI,GAAE,MAAK,CAAC,CAAC,GAAE,GAAG,CAAC,CAAC;QAAG,CAAC;AAAC,YAAO,SAAS,GAAE,GAAE;AAAC,aAAO,EAAE,MAAM,MAAK,UAAU;;OAAI,CAAC,CAAC;IAAC,KAAK;IAAE,KAAI,MAAM,QAAO,EAAE,MAAM;;MAAI,EAAE;IAAG,CAAC;AAAC,QAAO,SAAS,GAAE,GAAE;AAAC,SAAO,EAAE,MAAM,MAAK,UAAU;;GAAI;AAAC,SAAS,EAAE,GAAE,GAAE;CAAC,IAAI,IAAE,OAAO,KAAK,EAAE;AAAC,KAAG,OAAO,uBAAsB;EAAC,IAAI,IAAE,OAAO,sBAAsB,EAAE;AAAC,QAAI,IAAE,EAAE,QAAQ,SAAS,GAAE;AAAC,UAAO,OAAO,yBAAyB,GAAE,EAAE,CAAC;KAAa,GAAE,EAAE,KAAK,MAAM,GAAE,EAAE;;AAAC,QAAO;;AAAE,SAAS,EAAE,GAAE;AAAC,MAAI,IAAI,IAAE,GAAE,IAAE,UAAU,QAAO,KAAI;EAAC,IAAI,IAAQ,UAAU,MAAhB,OAAgC,EAAE,GAAf,UAAU;AAAM,MAAE,IAAE,EAAE,OAAO,EAAE,EAAC,CAAC,EAAE,CAAC,SAAS,SAAS,GAAE;AAAC,KAAE,GAAE,GAAE,EAAE,GAAG;KAAG,GAAC,OAAO,4BAA0B,OAAO,iBAAiB,GAAE,OAAO,0BAA0B,EAAE,CAAC,GAAC,EAAE,OAAO,EAAE,CAAC,CAAC,SAAS,SAAS,GAAE;AAAC,UAAO,eAAe,GAAE,GAAE,OAAO,yBAAyB,GAAE,EAAE,CAAC;KAAG;;AAAC,QAAO;;AAAE,IAAI,IAAE,WAAU;CAAC,SAAS,EAAE,GAAE;EAAC,IAAI,IAAE;AAAK,IAAE,MAAK,EAAE,EAAC,EAAE,MAAK,aAAY,KAAK,EAAC,EAAE,MAAK,cAAa,KAAK;EAAC,IAAI,IAAE,EAAE,2BAA2B;AAAC,MAAG,CAAC,EAAE,OAAM,IAAI,aAAa,mCAAkC,oBAAoB;AAAC,OAAK,YAAU,IAAI,GAAC,EAAC,KAAK,aAAW,EAAE,EAAC,OAAO,QAAQ,EAAE,EAAE,EAAE,EAAC,EAAE,eAAe,EAAC,KAAG,EAAE,CAAC,CAAC,CAAC,SAAS,SAAS,GAAE;GAAC,IAAI,IAAE,EAAE,GAAE,EAAE,EAAC,IAAE,EAAE,IAAG,IAAE,EAAE;AAAG,OAAgB,MAAb,cAAgB,CAAC,GAAE;IAAC,IAAI,IAAE,EAAE,2BAA2B;AAAC,UAAI,IAAE,IAAI,GAAC;;AAAE,KAAE,UAAU,KAAG;KAAI;;CAAC,IAAI;AAAE,QAAO,EAAE,GAAE,MAAK,CAAC;EAAC,KAAI;EAAc,KAAI,WAAU;AAAC,UAAM,CAAC,CAAC,EAAE,2BAA2B,IAAE,CAAC,CAAC,GAAG,IAAE,CAAC,CAAC,GAAG;;EAAE,KAAI,SAAS,GAAE;AAAC,SAAU,MAAM,uCAAuC;;EAAE,CAAC,CAAC,EAAC,EAAE,GAAE;EAAC;GAAC,KAAI;GAAQ,QAAO,IAAE,EAAE,EAAE,MAAM,SAAS,IAAG;IAAC,IAAI;AAAE,WAAO,EAAE,MAAM,SAAS,GAAE;AAAC,aAAO,SAAO,EAAE,OAAK,EAAE,MAAhB;MAAsB,KAAK;AAAE,WAAG,CAAC,KAAK,WAAU;AAAC,UAAE,OAAK;AAAG;;AAAM,cAAO,EAAE,OAAK,GAAE,EAAE,OAAK,GAAE,EAAE,cAAa,EAAC,OAAM,CAAC,GAAE,CAAC;MAAC,KAAK;AAAE,WAAG,EAAE,MAAK;AAAC,UAAE,OAAK;AAAE;;AAAM,aAAU,MAAM,kDAAkD;MAAC,KAAK;AAAE,YAAK,UAAU,OAAO,EAAC,EAAE,OAAK;AAAG;MAAM,KAAK,GAAG,GAAE,OAAK,IAAG,EAAE,KAAG,EAAE,MAAM,EAAE,GAAE,IAAE,KAAK,WAAW,UAAQ,EAAE,EAAE,GAAG;MAAC,KAAK,GAAG,QAAO,EAAE,OAAO,UAAS,KAAK;MAAC,KAAK;MAAG,KAAI,MAAM,QAAO,EAAE,MAAM;;QAAI,GAAE,MAAK,CAAC,CAAC,GAAE,GAAG,CAAC,CAAC;MAAG,CAAC,EAAC,WAAU;AAAC,WAAO,EAAE,MAAM,MAAK,UAAU;;GAAG;EAAC;GAAC,KAAI;GAAO,OAAM,WAAU;AAAC,WAAO,KAAK,aAAW,KAAK,UAAU,MAAM,EAAC;;GAAM;EAAC;GAAC,KAAI;GAAQ,OAAM,WAAU;AAAC,WAAO,KAAK,aAAW,KAAK,UAAU,OAAO,EAAC;;GAAM;EAAC;GAAC,KAAI;GAAmB,OAAM,SAAS,GAAE,GAAE;IAAC,IAAI,IAAE;AAAK,QAAG,KAAK,aAAW,KAAK,mBAAmB,EAAE,EAAC;AAAC,UAAK,WAAW,MAAI,KAAK,oBAAoB,EAAE;KAAC,IAAI,IAAE,SAAS,GAAE;MAAC,IAAI,IAAE,EAAE;AAAC,YAAI,EAAE,WAAW,UAAQ,EAAE,WAAS,EAAE,QAAQ,SAAO,KAAG,EAAE,KAAK,EAAE,QAAQ,GAAG,GAAG,WAAW,EAAC,KAAG,EAAE,MAAM,GAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;;AAAE,UAAK,UAAU,iBAAiB,GAAE,EAAE,EAAC,KAAK,WAAW,KAAG;;AAAE,WAAO;;GAAM;EAAC;GAAC,KAAI;GAAsB,OAAM,SAAS,GAAE;IAAC,IAAI,IAAE,KAAK,WAAW;AAAG,WAAO,KAAK,UAAU,oBAAoB,GAAE,EAAE,EAAC,OAAO,KAAK,WAAW,IAAG;;GAAM;EAAC;GAAC,KAAI;GAAU,OAAM,WAAU;IAAC,IAAI,IAAE;AAAK,WAAO,KAAK,MAAM,EAAC,OAAO,KAAK,KAAK,WAAW,CAAC,SAAS,SAAS,GAAE;AAAC,YAAO,EAAE,oBAAoB,EAAE;OAAG,EAAC,KAAK,YAAU,MAAK;;GAAM;EAAC;GAAC,KAAI;GAAqB,OAAM,SAAS,GAAE;AAAC,WAAM,CAAC,CAAC,OAAO,OAAO,EAAE,WAAW,CAAC,MAAM,SAAS,GAAE;AAAC,YAAO,MAAI;OAAI;;GAAE;EAAC;GAAC,KAAI;GAAW,KAAI,WAAU;AAAC,WAAO,KAAK;;GAAW,KAAI,SAAS,GAAE;AAAC,UAAU,MAAM,oCAAoC;;GAAE;EAAC,EAAC,CAAC;EAAC,KAAI;EAA4B,OAAM,WAAU;AAAC,UAAO,OAAO,qBAAmB,OAAO,2BAAyB,OAAO,wBAAsB,OAAO;;EAAqB,EAAC;EAAC,KAAI;EAA4B,OAAM,WAAU;AAAC,UAAO,OAAO,qBAAmB,OAAO,2BAAyB,OAAO,wBAAsB,OAAO;;EAAqB,CAAC,CAAC,EAAC;GAAI;AAAC,EAAE,GAAE,kBAAiB;CAAC,UAAS;CAAK,MAAK;CAAQ,YAAW,CAAC;CAAE,gBAAe,CAAC;CAAE,iBAAgB;CAAE,YAAW;CAAK,CAAC,EAAC,EAAE,GAAE,cAAa;CAAC,WAAU;CAAW,aAAY;CAAa,KAAI;CAAM,OAAM;CAAQ,UAAS;CAAU,QAAO;CAAS,WAAU;CAAW,aAAY;CAAa,YAAW;CAAY,cAAa;CAAc,OAAM;CAAQ,CAAC;;;ACCjhe,IAAI,KAAK,MAAM,OAAO,KAAK,YCErB,KAAY,IAAO,SAAS,IAAW,MAAM,IAAkB,GAAG,IAAe,SAAS;CAC/F,IAAM,IAAM,EAAO,KAAK;AAgDxB,QA9CA,QAAgB;AACf,MAAI,EAAyB,YAE5B,QADA,EAAI,UAAU,KAAgB,IAAI,EAAyB;GAAE;GAAM;GAAU;GAAiB,CAAC,QAClF;AAEZ,GADA,EAAI,QAAQ,OAAO,EACnB,EAAI,QAAQ,SAAS;;IAGrB;EAAC;EAAM;EAAU;EAAiB;EAAa,CAAC,EAsC5C,CAAC,GAAK;EAAE,OApCD,QAAkB;AAC/B,GAAI,EAAI,WACP,EAAI,QAAQ,OAAO;KAElB,EAAE,CAgCU;EAAO,MA9BT,QAAkB;AAC9B,GAAI,EAAI,WACP,EAAI,QAAQ,MAAM;KAEjB,EAAE,CA0BiB;EAAM,OAxBd,QAAkB;AAC/B,GAAI,EAAI,WACP,EAAI,QAAQ,OAAO;KAElB,EAAE,CAoBuB;EAAO,WAlBjB,GAAa,GAAW,MAAY;AACrD,GAAI,EAAI,WACP,EAAI,QAAQ,iBAAiB,GAAW,EAAQ;KAE/C,EAAE,CAc8B;EAAW,aAZ1B,GAAa,GAAW,MAAY;AACvD,GAAI,EAAI,WACP,EAAI,QAAQ,oBAAoB,GAAW,EAAQ;KAElD,EAAE,CAQyC;EAAa,OAN7C,QAAkB;AAC/B,GAAI,EAAI,WACP,EAAI,QAAQ,SAAS;KAEpB,EAAE,CAEsD;EAAO,CAAC;GClD9D,KAAc,GAAS,IAAU,MAAM;CAC5C,IAAM,IAAM,EAAO,GAAG,EAEhB,IAAO,QAAkB;AAE9B,EADA,aAAa,EAAI,QAAQ,EACzB,EAAI,UAAU;IACZ,EAAE,CAAC,EAEA,IAAQ,QAAkB;AAE/B,EADA,GAAM,EACN,EAAI,UAAU,WAAW,GAAS,EAAQ;IACxC;EAAC;EAAS;EAAS;EAAK,CAAC;AAI5B,QAFA,QAAgB,GAAM,CAAC,EAAK,CAAC,EAEtB,CAAC,GAAO,EAAK;GCff,KAAe,GAAU,IAAY,OAAQ;CAClD,IAAM,IAAa,QAEf,IACC,OAAO,QAAQ,EAAS,CAAC,QAAQ,GAAK,CAAC,GAAK,QAAY;EAAE,GAAG;GAAM,EAAI,aAAa,GAAG;EAAO,GAAG,EAAE,CAAC,GACpG,EAAE,EACN,CAAC,EAAS,CACV,EAEK,IAAO,QAAc,OAAO,KAAK,EAAW,EAAE,CAAC,EAAW,CAAC,EAI3D,IAAgB,QAAc,EAAK,MAAM,MAAM,EAAE,SAAS,IAAI,CAAC,EAAE,CAAC,EAAK,CAAC,EAGxE,IAAU,EAAO,KAAK;AAqD5B,QAnDA,QAAgB;AACf,MAAI,CAAC,GAAe;AACnB,KAAQ,UAAU;AAClB;;AAED,SAAO,WACL,MAAM,MAAW;AAEjB,KAAQ,UAAU,KADL,EAAO,WAAW,GACJ,GAAM;IAAE,cAAc;IAAM,gBAAgB;IAAM,CAAC;IAC7E,CACD,YAAY;AACZ,GAAA,QAAA,IAAA,aAA6B,gBAC5B,QAAQ,KACP,8JAEA;IAED;IACD,CAAC,GAAe,EAAK,CAAC,GAED,MAAU;AACjC,MAAI,CAAC,EAAK,OAAQ,QAAO;AAEzB,MAAI,CAAC,GAAe;GACnB,IAAM,IAAQ,EAAM,MAAM,CAAC,MAAM,MAAM,EACjC,IAAU,EAAM,SAAS,IAAI,IAAQ,CAAC,EAAM,MAAM,CAAC;AACzD,QAAK,IAAM,KAAK,GAAS;IACxB,IAAM,IAAM,EAAE,aAAa;AAC3B,QAAI,KAAO,EAAY,QAAO,EAAW,KAAO,EAAE;;AAEnD,UAAO;;EAGR,IAAM,IAAO,EAAQ;AACrB,MAAI,GAAM;GACT,IAAM,IAAS,EAAK,OAAO,EAAM,CAAC,QAAQ,MAAM,EAAE,QAAQ,EAAU;AACpE,OAAI,GAAQ,OAEX,QAAO,EADK,EAAO,GAAG,KAAK,aACT,IAAO,EAAM;SAE1B;GAIN,IAAM,IAAS,EAAM,aAAa,EAC5B,IAAQ,EAAK,MAAM,MAAM,EAAO,SAAS,EAAE,IAAI,EAAE,SAAS,EAAO,CAAC;AACxE,OAAI,EAAO,QAAO,EAAW,KAAS,EAAM;;AAE7C,SAAO;;;CCzDT,IAAI,IAAqB,OAAO,IAAI,6BAA6B,EAC/D,IAAsB,OAAO,IAAI,iBAAiB;CACpD,SAAS,EAAQ,GAAM,GAAQ,GAAU;EACvC,IAAI,IAAM;AAGV,MAFW,MAAX,KAAK,MAAmB,IAAM,KAAK,IACxB,EAAO,QAAlB,KAAK,MAAqB,IAAM,KAAK,EAAO,MACxC,SAAS,EAEX,MAAK,IAAI,KADT,IAAW,EAAE,EACQ,EACnB,CAAU,MAAV,UAAuB,EAAS,KAAY,EAAO;MAChD,KAAW;AAElB,SADA,IAAS,EAAS,KACX;GACL,UAAU;GACJ;GACD;GACL,KAAgB,MAAX,KAAK,IAAwB,OAAT;GACzB,OAAO;GACR;;AAIH,CAFA,EAAQ,WAAW,GACnB,EAAQ,MAAM,GACd,EAAQ,OAAO;;ACtBf,CAAA,QAAA,IAAA,aAAA,iBACG,WAAY;EACX,SAAS,EAAyB,GAAM;AACtC,OAAY,KAAR,KAAc,QAAO;AACzB,OAAmB,OAAO,KAAtB,WACF,QAAO,EAAK,aAAa,IACrB,OACA,EAAK,eAAe,EAAK,QAAQ;AACvC,OAAiB,OAAO,KAApB,SAA0B,QAAO;AACrC,WAAQ,GAAR;IACE,KAAK,EACH,QAAO;IACT,KAAK,EACH,QAAO;IACT,KAAK,EACH,QAAO;IACT,KAAK,EACH,QAAO;IACT,KAAK,EACH,QAAO;IACT,KAAK,EACH,QAAO;;AAEX,OAAiB,OAAO,KAApB,SACF,SACgB,OAAO,EAAK,OAAzB,YACC,QAAQ,MACN,oHACD,EACH,EAAK,UALP;IAOE,KAAK,EACH,QAAO;IACT,KAAK,EACH,QAAO,EAAK,eAAe;IAC7B,KAAK,EACH,SAAQ,EAAK,SAAS,eAAe,aAAa;IACpD,KAAK;KACH,IAAI,IAAY,EAAK;AAKrB,YAJA,IAAO,EAAK,aACZ,AAEG,OADC,IAAO,EAAU,eAAe,EAAU,QAAQ,IACrC,MAAP,KAA2C,eAA7B,gBAAgB,IAAO,MACxC;IACT,KAAK,EACH,QACG,IAAY,EAAK,eAAe,MACxB,MAAT,OAEI,EAAyB,EAAK,KAAK,IAAI,SADvC;IAGR,KAAK;AAEH,KADA,IAAY,EAAK,UACjB,IAAO,EAAK;AACZ,SAAI;AACF,aAAO,EAAyB,EAAK,EAAU,CAAC;aACtC;;AAElB,UAAO;;EAET,SAAS,EAAmB,GAAO;AACjC,UAAO,KAAK;;EAEd,SAAS,EAAuB,GAAO;AACrC,OAAI;AACF,MAAmB,EAAM;IACzB,IAAI,IAA2B,CAAC;WACtB;AACV,QAA2B,CAAC;;AAE9B,OAAI,GAA0B;AAC5B,QAA2B;IAC3B,IAAI,IAAwB,EAAyB,OACjD,IACc,OAAO,UAAtB,cACC,OAAO,eACP,EAAM,OAAO,gBACf,EAAM,YAAY,QAClB;AAMF,WALA,EAAsB,KACpB,GACA,4GACA,EACD,EACM,EAAmB,EAAM;;;EAGpC,SAAS,EAAY,GAAM;AACzB,OAAI,MAAS,EAAqB,QAAO;AACzC,OACe,OAAO,KAApB,YACS,KACT,EAAK,aAAa,EAElB,QAAO;AACT,OAAI;IACF,IAAI,IAAO,EAAyB,EAAK;AACzC,WAAO,IAAO,MAAM,IAAO,MAAM;WACvB;AACV,WAAO;;;EAGX,SAAS,IAAW;GAClB,IAAI,IAAa,EAAqB;AACtC,UAAgB,MAAT,OAAsB,OAAO,EAAW,UAAU;;EAE3D,SAAS,IAAe;AACtB,UAAO,MAAM,wBAAwB;;EAEvC,SAAS,EAAY,GAAQ;AAC3B,OAAI,EAAe,KAAK,GAAQ,MAAM,EAAE;IACtC,IAAI,IAAS,OAAO,yBAAyB,GAAQ,MAAM,CAAC;AAC5D,QAAI,KAAU,EAAO,eAAgB,QAAO,CAAC;;AAE/C,UAAkB,EAAO,QAAlB,KAAK;;EAEd,SAAS,EAA2B,GAAO,GAAa;GACtD,SAAS,IAAwB;AAC/B,UACI,IAA6B,CAAC,GAChC,QAAQ,MACN,2OACA,EACD;;AAGL,GADA,EAAsB,iBAAiB,CAAC,GACxC,OAAO,eAAe,GAAO,OAAO;IAClC,KAAK;IACL,cAAc,CAAC;IAChB,CAAC;;EAEJ,SAAS,IAAyC;GAChD,IAAI,IAAgB,EAAyB,KAAK,KAAK;AAOvD,UANA,EAAuB,OACnB,EAAuB,KAAiB,CAAC,GAC3C,QAAQ,MACN,8IACD,GACH,IAAgB,KAAK,MAAM,KACT,MAAX,KAAK,IAAsC,OAAhB;;EAEpC,SAAS,EAAa,GAAM,GAAK,GAAO,GAAO,GAAY,GAAW;GACpE,IAAI,IAAU,EAAM;AAwCpB,UAvCA,IAAO;IACL,UAAU;IACJ;IACD;IACE;IACP,QAAQ;IACT,GACoB,MAAX,KAAK,IAA0B,OAAV,OAA/B,OAKI,OAAO,eAAe,GAAM,OAAO;IAAE,YAAY,CAAC;IAAG,OAAO;IAAM,CAAC,GAJnE,OAAO,eAAe,GAAM,OAAO;IACjC,YAAY,CAAC;IACb,KAAK;IACN,CAAC,EAEN,EAAK,SAAS,EAAE,EAChB,OAAO,eAAe,EAAK,QAAQ,aAAa;IAC9C,cAAc,CAAC;IACf,YAAY,CAAC;IACb,UAAU,CAAC;IACX,OAAO;IACR,CAAC,EACF,OAAO,eAAe,GAAM,cAAc;IACxC,cAAc,CAAC;IACf,YAAY,CAAC;IACb,UAAU,CAAC;IACX,OAAO;IACR,CAAC,EACF,OAAO,eAAe,GAAM,eAAe;IACzC,cAAc,CAAC;IACf,YAAY,CAAC;IACb,UAAU,CAAC;IACX,OAAO;IACR,CAAC,EACF,OAAO,eAAe,GAAM,cAAc;IACxC,cAAc,CAAC;IACf,YAAY,CAAC;IACb,UAAU,CAAC;IACX,OAAO;IACR,CAAC,EACF,OAAO,WAAW,OAAO,OAAO,EAAK,MAAM,EAAE,OAAO,OAAO,EAAK,GACzD;;EAET,SAAS,EACP,GACA,GACA,GACA,GACA,GACA,GACA;GACA,IAAI,IAAW,EAAO;AACtB,OAAe,MAAX,KAAK,EACP,KAAI,EACF,KAAI,EAAY,EAAS,EAAE;AACzB,SACE,IAAmB,GACnB,IAAmB,EAAS,QAC5B,IAEA,GAAkB,EAAS,GAAkB;AAC/C,WAAO,UAAU,OAAO,OAAO,EAAS;SAExC,SAAQ,MACN,uJACD;OACA,GAAkB,EAAS;AAClC,OAAI,EAAe,KAAK,GAAQ,MAAM,EAAE;AACtC,QAAW,EAAyB,EAAK;IACzC,IAAI,IAAO,OAAO,KAAK,EAAO,CAAC,OAAO,SAAU,GAAG;AACjD,YAAiB,MAAV;MACP;AAKF,IAJA,IACE,IAAI,EAAK,SACL,oBAAoB,EAAK,KAAK,UAAU,GAAG,WAC3C,kBACN,EAAsB,IAAW,OAC7B,IACA,IAAI,EAAK,SAAS,MAAM,EAAK,KAAK,UAAU,GAAG,WAAW,MAC5D,QAAQ,MACN,qOACA,GACA,GACA,GACA,EACD,EACA,EAAsB,IAAW,KAAoB,CAAC;;AAO3D,OALA,IAAW,MACA,MAAX,KAAK,MACF,EAAuB,EAAS,EAAG,IAAW,KAAK,IACtD,EAAY,EAAO,KAChB,EAAuB,EAAO,IAAI,EAAG,IAAW,KAAK,EAAO,MAC3D,SAAS,EAEX,MAAK,IAAI,KADT,IAAW,EAAE,EACQ,EACnB,CAAU,MAAV,UAAuB,EAAS,KAAY,EAAO;OAChD,KAAW;AAQlB,UAPA,KACE,EACE,GACe,OAAO,KAAtB,aACI,EAAK,eAAe,EAAK,QAAQ,YACjC,EACL,EACI,EACL,GACA,GACA,GACA,GAAU,EACV,GACA,EACD;;EAEH,SAAS,EAAkB,GAAM;AAC/B,KAAe,EAAK,GAChB,EAAK,WAAW,EAAK,OAAO,YAAY,KAC3B,OAAO,KAApB,YACS,KACT,EAAK,aAAa,MACD,EAAK,SAAS,WAA9B,cACG,EAAe,EAAK,SAAS,MAAM,IACnC,EAAK,SAAS,MAAM,WACnB,EAAK,SAAS,MAAM,OAAO,YAAY,KACxC,EAAK,WAAW,EAAK,OAAO,YAAY;;EAElD,SAAS,EAAe,GAAQ;AAC9B,UACe,OAAO,KAApB,cACS,KACT,EAAO,aAAa;;EAGxB,IAAI,IAAA,EAAgB,QAAQ,EAC1B,IAAqB,OAAO,IAAI,6BAA6B,EAC7D,IAAoB,OAAO,IAAI,eAAe,EAC9C,IAAsB,OAAO,IAAI,iBAAiB,EAClD,IAAyB,OAAO,IAAI,oBAAoB,EACxD,IAAsB,OAAO,IAAI,iBAAiB,EAClD,IAAsB,OAAO,IAAI,iBAAiB,EAClD,IAAqB,OAAO,IAAI,gBAAgB,EAChD,IAAyB,OAAO,IAAI,oBAAoB,EACxD,IAAsB,OAAO,IAAI,iBAAiB,EAClD,IAA2B,OAAO,IAAI,sBAAsB,EAC5D,IAAkB,OAAO,IAAI,aAAa,EAC1C,IAAkB,OAAO,IAAI,aAAa,EAC1C,IAAsB,OAAO,IAAI,iBAAiB,EAClD,IAAyB,OAAO,IAAI,yBAAyB,EAC7D,IACE,EAAM,iEACR,IAAiB,OAAO,UAAU,gBAClC,IAAc,MAAM,SACpB,IAAa,QAAQ,aACjB,QAAQ,aACR,WAAY;AACV,UAAO;;AAEf,MAAQ,EACN,0BAA0B,SAAU,GAAmB;AACrD,UAAO,GAAmB;KAE7B;EACD,IAAI,GACA,IAAyB,EAAE,EAC3B,IAAyB,EAAM,yBAAyB,KAC1D,GACA,EACD,EAAE,EACC,IAAwB,EAAW,EAAY,EAAa,CAAC,EAC7D,IAAwB,EAAE;AAgB9B,EAfA,EAAQ,WAAW,GACnB,EAAQ,MAAM,SAAU,GAAM,GAAQ,GAAU;GAC9C,IAAI,IACF,MAAM,EAAqB;AAC7B,UAAO,EACL,GACA,GACA,GACA,CAAC,GACD,IACI,MAAM,wBAAwB,GAC9B,GACJ,IAAmB,EAAW,EAAY,EAAK,CAAC,GAAG,EACpD;KAEH,EAAQ,OAAO,SAAU,GAAM,GAAQ,GAAU;GAC/C,IAAI,IACF,MAAM,EAAqB;AAC7B,UAAO,EACL,GACA,GACA,GACA,CAAC,GACD,IACI,MAAM,wBAAwB,GAC9B,GACJ,IAAmB,EAAW,EAAY,EAAK,CAAC,GAAG,EACpD;;KAED;;AC7VN,CAAA,QAAA,IAAA,aAA6B,eAC3B,EAAO,UAAA,GAAA,GAEP,EAAO,UAAA,GAAA;QCHH,MAAQ,EAAE,WAAQ,SAAS,iBAAc,OAAO,cAAW,SAE/D,iBAAA,GAAA,EAAA,KAAC,OAAD;CACC,eAAY;CACZ,OAAM;CACN,OAAM;CACN,QAAO;CACP,SAAQ;WAER,iBAAA,GAAA,EAAA,MAAC,KAAD,EAAA,UAAA,CACC,iBAAA,GAAA,EAAA,KAAC,QAAD;EACC,eAAY;EACZ,MAAM;EACN,GAAE;EACD,CAAA,EACD,KAAY,iBAAA,GAAA,EAAA,KAAC,UAAD;EAAQ,eAAY;EAAkB,MAAM;EAAa,IAAG;EAAK,IAAG;EAAI,GAAE;EAAM,CAAA,CAC1F,EAAA,CAAA;CACC,CAAA,ECTF,MAAmB,GAAa,MAAY;AACjD,MAAK,IAAM,EAAE,qBAAkB,EAC9B,MAAK,IAAM,KAAK,EACf,KAAI,EAAQ,EAAE,KAAK,KAAM;GAKtB,KAAS,EACd,aACA,cAAW,MACX,UAAO,SACP,cAAW,MACX,aAAU,KACV,eAAY,IACZ,qBAAkB,GAClB,eAAY,qBACZ,WAAQ,MACR,eAAY,MACZ,kBAAe,aACf,aAAU,MACV,WAAQ,MACR,mBAAgB,MAChB,iBAAc,MACd,cAAW,MACX,aAAU,MACV,eAAY,MACZ,sBACK;CACL,IAAM,IAAY,EAAO,KAAK,EACxB,CAAC,GAAa,KAAkB,EAAS,GAAM,EAE/C,GAAG,EAAE,UAAO,SAAM,cAAW,oBAAiB,EAAS,GAAM,GAAU,GAAiB,EAAa,EACrG,IAAiB,EAAY,GAAU,EAAU,EAEjD,IAAW,EAAO,EAAE,CAAC;AAC3B,GAAS,UAAU;EAAE;EAAS;EAAO;EAAe;EAAa;EAAU;EAAS;EAAW;CAE/F,IAAM,IAAoB,EAAO,EAAe;AAChD,GAAkB,UAAU;CAE5B,IAAM,IAAoB,EAAO,KAAK,EAChC,IAAW,EAAO,KAAK,EAIvB,CAAC,GAAY,KAAa,EADV,QAAkB,EAAS,WAAW,EAAE,EAAE,CACrB,EAAe,EAAQ,EAE5D,IAAkB,QAAkB;AACzC,MAAI;AAEH,GADA,EAAe,GAAM,EACrB,GAAM;WACE,GAAO;AAEf,GADA,EAAS,QAAQ,UAAU,EAAM,EACjC,EAAkB,WAAW;;IAE5B,CAAC,EAAK,CAAC,EAEJ,IAAW,GACf,MAAM;AAEN,EADA,GAAY,EACZ,EAAS,QAAQ,UAAU,EAAE;IAE9B,CAAC,EAAW,CACZ,EAEK,IAAiB,GACrB,MAAM;AAEN,EADA,GAAW,EACX,EAAS,QAAQ,gBAAgB,EAAE;IAEpC,CAAC,EAAU,CACX,EAEK,IAAe,GACnB,MAAM;AAEN,EADA,GAAY,EACZ,EAAS,QAAQ,cAAc,EAAE;IAElC,CAAC,EAAW,CACZ,EAEK,IAAY,GAChB,MAAU;EACV,IAAM,IAAc,MAAM,KAAK,GAAO,WAAW,EAAE,GAAG,MAAY;GACjE,IAAI,IAAO;IAAE,YAAY;IAAW,YAAY;IAAI,EAC9C,IAAe,EAAE;AACvB,QAAK,IAAI,IAAI,GAAG,IAAI,EAAQ,QAAQ,KAAK;IACxC,IAAM,IAAM,EAAQ;AAEpB,IADA,EAAa,KAAK,EAAI,cAAc,GAAG,GACnC,EAAI,eAAe,KAAA,KAAa,EAAI,aAAa,EAAK,gBACzD,IAAO;;AAGT,UAAO;IAAE,MAAM,EAAK,cAAc;IAAI;IAAc;IACnD,EACI,IAAa,EAAY,KAAK,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG;AAK1D,EAHA,GAAW,EACX,GAAiB,EACjB,GAAgB,GAAa,EAAkB,QAAQ,EACvD,EAAS,QAAQ,WAAW,GAAY,EAAM;IAE/C,CAAC,GAAW,EAAgB,CAC5B,EAEK,IAAW,GACf,MAAU;AAEV,EADA,GAAiB,EACjB,EAAS,QAAQ,UAAU,EAAM;IAElC,CAAC,EAAgB,CACjB,EAEK,KAAa,GACjB,MAAM;AAGN,EAFA,GAAW,EACX,GAAiB,EACjB,EAAS,QAAQ,YAAY,EAAE;IAEhC,CAAC,GAAW,EAAgB,CAC5B,EAEK,IAAS,GACb,MAAM;AACN,KAAW;AACX,MAAI;AAEH,GADA,GAAiB,EACjB,EAAkB,WAAW;YACpB;AACT,KAAS,QAAQ,QAAQ,EAAE;;IAG7B,CAAC,GAAW,EAAgB,CAC5B;AAED,GAAS,UAAU;CAEnB,IAAM,IAAW,SACT;EACN,OAAO;EACP,KAAK;EACL,aAAa;EACb,WAAW;EACX,QAAQ;EACR,OAAO;EACP,SAAS;EACT,GACD;EAAC;EAAU;EAAQ;EAAgB;EAAc;EAAW;EAAU;EAAW,CACjF;AAGD,GAAkB,gBAAgB,OAAO,QAAQ,EAAS,CAAC,SAAS,CAAC,GAAO,OAAQ,IAAc,GAAO,EAAG,CAAC;CAE7G,IAAM,IAAmB,QAAkB;AAC1C,MAAI;AAGH,GAFA,EAAe,GAAK,EACpB,OAAO,QAAQ,EAAS,CAAC,SAAS,CAAC,GAAO,OAAQ,EAAU,GAAO,EAAG,CAAC,EACvE,GAAO;WACC,GAAO;AACf,KAAS,EAAM;;IAEd;EAAC;EAAU;EAAW;EAAO;EAAS,CAAC,EAEpC,WAAiB;AACtB,EAAI,CAAC,KAAa,MACjB,EAAU,QAAQ,MAAM,UAAU;IAI9B,WAAgB;AACrB,EAAI,CAAC,KAAa,MACjB,EAAU,QAAQ,MAAM,UAAU;;AA+CpC,QAdK,EAAyB,cACxB,EAAW,EAAS,GAChB,EAAS,GAAkB,GAAiB,EAAY,GACrD,EAAe,EAAS,GAC3B,EAAa,GAAU,EAC7B,GAAI,CAAC,KAAe,EAAE,SAAS,GAAkB,EACjD,CAAC,GAlCJ,iBAAA,GAAA,EAAA,KAAC,UAAD;EACC,eAAY;EACZ,KAAK;EACL,MAAK;EACL,cAAY;EACZ,OACC,IACG,OACA;GACA,OAAO;GACP,QAAQ;GACR,iBAAiB;GACjB,QAAQ;GACR,SAAS;GACT,QAAS,IAA0B,YAAZ;GACvB,GAAG;GACF;EAEM;EACX,SAAS;EACT,QAAQ;EACR,SAAS;YAET,iBAAA,GAAA,EAAA,KAAC,IAAD;GAAM,UAAU;GAAa,OAAM;GAAS,CAAA;EACpC,CAAA,GAeF;GC9NI,IAAc,EAAyB,aAEpD,IAAe"}
|
|
1
|
+
{"version":3,"file":"index.es.js","names":["e"],"sources":["../node_modules/@untemps/vocal/dist/index.es.js","../node_modules/@untemps/utils/dist/function/isFunction.js","../src/hooks/useVocal.js","../src/hooks/useTimeout.js","../src/hooks/useCommands.js","../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/components/Icon.jsx","../src/components/Vocal.jsx","../src/index.js"],"sourcesContent":["var t=function(t,e,r){return t(r={path:e,exports:{},require:function(t,e){return function(){throw new Error(\"Dynamic requires are not currently supported by @rollup/plugin-commonjs\")}(null==e&&r.path)}},r.exports),r.exports}((function(t){var e=function(t){var e=Object.prototype,r=e.hasOwnProperty,n=\"function\"==typeof Symbol?Symbol:{},o=n.iterator||\"@@iterator\",i=n.asyncIterator||\"@@asyncIterator\",a=n.toStringTag||\"@@toStringTag\";function c(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},\"\")}catch(t){c=function(t,e,r){return t[e]=r}}function u(t,e,r,n){var o=e&&e.prototype instanceof f?e:f,i=Object.create(o.prototype),a=new _(n||[]);return i._invoke=function(t,e,r){var n=\"suspendedStart\";return function(o,i){if(\"executing\"===n)throw new Error(\"Generator is already running\");if(\"completed\"===n){if(\"throw\"===o)throw i;return S()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var c=b(a,r);if(c){if(c===l)continue;return c}}if(\"next\"===r.method)r.sent=r._sent=r.arg;else if(\"throw\"===r.method){if(\"suspendedStart\"===n)throw n=\"completed\",r.arg;r.dispatchException(r.arg)}else\"return\"===r.method&&r.abrupt(\"return\",r.arg);n=\"executing\";var u=s(t,e,r);if(\"normal\"===u.type){if(n=r.done?\"completed\":\"suspendedYield\",u.arg===l)continue;return{value:u.arg,done:r.done}}\"throw\"===u.type&&(n=\"completed\",r.method=\"throw\",r.arg=u.arg)}}}(t,r,a),i}function s(t,e,r){try{return{type:\"normal\",arg:t.call(e,r)}}catch(t){return{type:\"throw\",arg:t}}}t.wrap=u;var l={};function f(){}function h(){}function p(){}var v={};v[o]=function(){return this};var y=Object.getPrototypeOf,d=y&&y(y(x([])));d&&d!==e&&r.call(d,o)&&(v=d);var m=p.prototype=f.prototype=Object.create(v);function g(t){[\"next\",\"throw\",\"return\"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function w(t,e){var n;this._invoke=function(o,i){function a(){return new e((function(n,a){!function n(o,i,a,c){var u=s(t[o],t,i);if(\"throw\"!==u.type){var l=u.arg,f=l.value;return f&&\"object\"==typeof f&&r.call(f,\"__await\")?e.resolve(f.__await).then((function(t){n(\"next\",t,a,c)}),(function(t){n(\"throw\",t,a,c)})):e.resolve(f).then((function(t){l.value=t,a(l)}),(function(t){return n(\"throw\",t,a,c)}))}c(u.arg)}(o,i,n,a)}))}return n=n?n.then(a,a):a()}}function b(t,e){var r=t.iterator[e.method];if(void 0===r){if(e.delegate=null,\"throw\"===e.method){if(t.iterator.return&&(e.method=\"return\",e.arg=void 0,b(t,e),\"throw\"===e.method))return l;e.method=\"throw\",e.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return l}var n=s(r,t.iterator,e.arg);if(\"throw\"===n.type)return e.method=\"throw\",e.arg=n.arg,e.delegate=null,l;var o=n.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,\"return\"!==e.method&&(e.method=\"next\",e.arg=void 0),e.delegate=null,l):o:(e.method=\"throw\",e.arg=new TypeError(\"iterator result is not an object\"),e.delegate=null,l)}function E(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function O(t){var e=t.completion||{};e.type=\"normal\",delete e.arg,t.completion=e}function _(t){this.tryEntries=[{tryLoc:\"root\"}],t.forEach(E,this),this.reset(!0)}function x(t){if(t){var e=t[o];if(e)return e.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n<t.length;)if(r.call(t,n))return e.value=t[n],e.done=!1,e;return e.value=void 0,e.done=!0,e};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return h.prototype=m.constructor=p,p.constructor=h,h.displayName=c(p,a,\"GeneratorFunction\"),t.isGeneratorFunction=function(t){var e=\"function\"==typeof t&&t.constructor;return!!e&&(e===h||\"GeneratorFunction\"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,p):(t.__proto__=p,c(t,a,\"GeneratorFunction\")),t.prototype=Object.create(m),t},t.awrap=function(t){return{__await:t}},g(w.prototype),w.prototype[i]=function(){return this},t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(u(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},g(m),c(m,a,\"Generator\"),m[o]=function(){return this},m.toString=function(){return\"[object Generator]\"},t.keys=function(t){var e=[];for(var r in t)e.push(r);return e.reverse(),function r(){for(;e.length;){var n=e.pop();if(n in t)return r.value=n,r.done=!1,r}return r.done=!0,r}},t.values=x,_.prototype={constructor:_,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=void 0,this.tryEntries.forEach(O),!t)for(var e in this)\"t\"===e.charAt(0)&&r.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if(\"throw\"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function n(r,n){return a.type=\"throw\",a.arg=t,e.next=r,n&&(e.method=\"next\",e.arg=void 0),!!n}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if(\"root\"===i.tryLoc)return n(\"end\");if(i.tryLoc<=this.prev){var c=r.call(i,\"catchLoc\"),u=r.call(i,\"finallyLoc\");if(c&&u){if(this.prev<i.catchLoc)return n(i.catchLoc,!0);if(this.prev<i.finallyLoc)return n(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return n(i.catchLoc,!0)}else{if(!u)throw new Error(\"try statement without catch or finally\");if(this.prev<i.finallyLoc)return n(i.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,\"finallyLoc\")&&this.prev<o.finallyLoc){var i=o;break}}i&&(\"break\"===t||\"continue\"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=e,i?(this.method=\"next\",this.next=i.finallyLoc,l):this.complete(a)},complete:function(t,e){if(\"throw\"===t.type)throw t.arg;return\"break\"===t.type||\"continue\"===t.type?this.next=t.arg:\"return\"===t.type?(this.rval=this.arg=t.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===t.type&&e&&(this.next=e),l},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),O(r),l}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if(\"throw\"===n.type){var o=n.arg;O(r)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(t,e,r){return this.delegate={iterator:x(t),resultName:e,nextLoc:r},\"next\"===this.method&&(this.arg=void 0),l}},t}(t.exports);try{regeneratorRuntime=e}catch(t){Function(\"r\",\"regeneratorRuntime = r\")(e)}}));function e(t,e,r,n,o,i,a){try{var c=t[i](a),u=c.value}catch(t){return void r(t)}c.done?e(u):Promise.resolve(u).then(n,o)}var r=function(t){return function(){var r=this,n=arguments;return new Promise((function(o,i){var a=t.apply(r,n);function c(t){e(a,o,i,c,u,\"next\",t)}function u(t){e(a,o,i,c,u,\"throw\",t)}c(void 0)}))}};var n=function(t){if(Array.isArray(t))return t};var o=function(t,e){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(t)){var r=[],n=!0,o=!1,i=void 0;try{for(var a,c=t[Symbol.iterator]();!(n=(a=c.next()).done)&&(r.push(a.value),!e||r.length!==e);n=!0);}catch(t){o=!0,i=t}finally{try{n||null==c.return||c.return()}finally{if(o)throw i}}return r}};var i=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n};var a=function(t,e){if(t){if(\"string\"==typeof t)return i(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===r&&t.constructor&&(r=t.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(t):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(t,e):void 0}};var c=function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")};var u=function(t,e){return n(t)||o(t,e)||a(t,e)||c()};var s=function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")};function l(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var f=function(t,e,r){return e&&l(t.prototype,e),r&&l(t,r),t};var h=function(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t},p=function(){return!!navigator.permissions},v=function(){return!!navigator.mediaDevices};function y(t,e,r,n,o,i,a){try{var c=t[i](a),u=c.value}catch(t){return void r(t)}c.done?e(u):Promise.resolve(u).then(n,o)}function d(t){return function(){var e=this,r=arguments;return new Promise((function(n,o){var i=t.apply(e,r);function a(t){y(i,n,o,a,c,\"next\",t)}function c(t){y(i,n,o,a,c,\"throw\",t)}a(void 0)}))}}function m(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(t)){var r=[],n=!0,o=!1,i=void 0;try{for(var a,c=t[Symbol.iterator]();!(n=(a=c.next()).done)&&(r.push(a.value),!e||r.length!==e);n=!0);}catch(t){o=!0,i=t}finally{try{n||null==c.return||c.return()}finally{if(o)throw i}}return r}}(t,e)||function(t,e){if(t){if(\"string\"==typeof t)return g(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===r&&t.constructor&&(r=t.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(t):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?g(t,e):void 0}}(t,e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function g(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}var w=function(){var t=d(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt(\"return\",new Promise(function(){var t=d(regeneratorRuntime.mark((function t(r,n){var o,i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return p()||n(new DOMException(\"Navigator API: permissions not supported\",\"NOT_SUPPORTED_ERR\")),t.prev=1,t.next=4,navigator.permissions.query({name:e});case 4:o=t.sent,i=function t(e){o.removeEventListener(\"change\",t),b(e.target.state,r,n)},o.addEventListener(\"change\",i),b(o.state,r,n),t.next=13;break;case 10:t.prev=10,t.t0=t.catch(1),n(t.t0);case 13:case\"end\":return t.stop()}}),t,null,[[1,10]])})));return function(e,r){return t.apply(this,arguments)}}()));case 1:case\"end\":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),b=function(t,e,r){switch(t){case\"denied\":r(new DOMException(\"Permission denied\",\"NOT_ALLOWED_ERR\"));break;default:e(t)}},E=function(){var t=d(regeneratorRuntime.mark((function t(e,r){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt(\"return\",new Promise(function(){var t=d(regeneratorRuntime.mark((function t(n,o){var i,a,c;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return p()&&v()||o(new DOMException(\"Navigator API: permissions or Navigator API: mediaDevices not supported\",\"NOT_SUPPORTED_ERR\")),t.prev=1,t.t0=Promise,t.next=5,w(e);case 5:return t.t1=t.sent,t.next=8,navigator.mediaDevices.getUserMedia(r);case 8:return t.t2=t.sent,t.t3=[t.t1,t.t2],t.next=12,t.t0.all.call(t.t0,t.t3);case 12:i=t.sent,a=m(i,2),c=a[1],n(c),t.next=21;break;case 18:t.prev=18,t.t4=t.catch(1),o(t.t4);case 21:case\"end\":return t.stop()}}),t,null,[[1,18]])})));return function(e,r){return t.apply(this,arguments)}}()));case 1:case\"end\":return t.stop()}}),t)})));return function(e,r){return t.apply(this,arguments)}}();function O(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function _(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?O(Object(r),!0).forEach((function(e){h(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):O(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}var x=function(){function e(t){var r=this;s(this,e),h(this,\"_instance\",null),h(this,\"_listeners\",null);var n=e._resolveSpeechRecognition();if(!n)throw new DOMException(\"SpeechRecognition not supported\",\"NOT_SUPPORTED_ERR\");this._instance=new n,this._listeners={},Object.entries(_(_({},e.defaultOptions),t||{})).forEach((function(t){var n=u(t,2),o=n[0],i=n[1];if(\"grammars\"===o&&!i){var a=e._resolveSpeechGrammarList();a&&(i=new a)}r._instance[o]=i}))}var n;return f(e,null,[{key:\"isSupported\",get:function(){return!!e._resolveSpeechRecognition()&&!!p()&&!!v()},set:function(t){throw new Error(\"You cannot set isSupported directly.\")}}]),f(e,[{key:\"start\",value:(n=r(t.mark((function e(){var r;return t.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!this._instance){t.next=14;break}return t.prev=1,t.next=4,E(\"microphone\",{audio:!0});case 4:if(t.sent){t.next=7;break}throw new Error(\"Unable to retrieve the stream from media device\");case 7:this._instance.start(),t.next=14;break;case 10:t.prev=10,t.t0=t.catch(1),(r=this._listeners.error)&&r(t.t0);case 14:return t.abrupt(\"return\",this);case 15:case\"end\":return t.stop()}}),e,this,[[1,10]])}))),function(){return n.apply(this,arguments)})},{key:\"stop\",value:function(){return this._instance&&this._instance.stop(),this}},{key:\"abort\",value:function(){return this._instance&&this._instance.abort(),this}},{key:\"addEventListener\",value:function(t,r){var n=this;if(this._instance&&this._includesEventType(t)){this._listeners[t]&&this.removeEventListener(t);var o=function(o){var i=[];t===e.eventTypes.RESULT&&o.results&&o.results.length>0&&i.push(o.results[0][0].transcript),r&&r.apply(n,[o].concat(i))};this._instance.addEventListener(t,o),this._listeners[t]=o}return this}},{key:\"removeEventListener\",value:function(t){var e=this._listeners[t];return this._instance.removeEventListener(t,e),delete this._listeners[t],this}},{key:\"cleanup\",value:function(){var t=this;return this.stop(),Object.keys(this._listeners).forEach((function(e){return t.removeEventListener(e)})),this._instance=null,this}},{key:\"_includesEventType\",value:function(t){return!!Object.values(e.eventTypes).find((function(e){return e===t}))}},{key:\"instance\",get:function(){return this._instance},set:function(t){throw new Error(\"You cannot set instance directly.\")}}],[{key:\"_resolveSpeechRecognition\",value:function(){return window.SpeechRecognition||window.webkitSpeechRecognition||window.mozSpeechRecognition||window.msSpeechRecognition}},{key:\"_resolveSpeechGrammarList\",value:function(){return window.SpeechGrammarList||window.webkitSpeechGrammarList||window.mozSpeechGrammarList||window.msSpeechGrammarList}}]),e}();h(x,\"defaultOptions\",{grammars:null,lang:\"en-US\",continuous:!1,interimResults:!1,maxAlternatives:1,serviceURI:null}),h(x,\"eventTypes\",{AUDIO_END:\"audioend\",AUDIO_START:\"audiostart\",END:\"end\",ERROR:\"error\",NO_MATCH:\"nomatch\",RESULT:\"result\",SOUND_END:\"soundend\",SOUND_START:\"soundstart\",SPEECH_END:\"speechend\",SPEECH_START:\"speechstart\",START:\"start\"});export{x as Vocal};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZXMuanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanMiLCIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXkuanMiLCIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIsIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCIuLi9ub2RlX21vZHVsZXMvQHVudGVtcHMvdXNlci1wZXJtaXNzaW9ucy11dGlscy9kaXN0L2luZGV4LmVzLmpzIiwiLi4vc3JjL1ZvY2FsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxudmFyIHJ1bnRpbWUgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICBmdW5jdGlvbiBkZWZpbmUob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gb2JqW2tleV07XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBJRSA4IGhhcyBhIGJyb2tlbiBPYmplY3QuZGVmaW5lUHJvcGVydHkgdGhhdCBvbmx5IHdvcmtzIG9uIERPTSBvYmplY3RzLlxuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRlZmluZSA9IGZ1bmN0aW9uKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIG9ialtrZXldID0gdmFsdWU7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIGV4cG9ydHMud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gZGVmaW5lKFxuICAgIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLFxuICAgIHRvU3RyaW5nVGFnU3ltYm9sLFxuICAgIFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICApO1xuXG4gIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG4gIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIGRlZmluZShwcm90b3R5cGUsIG1ldGhvZCwgZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBleHBvcnRzLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGRlZmluZShnZW5GdW4sIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCk7XG4gICAgcmV0dXJuIGdlbkZ1bjtcbiAgfTtcblxuICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIilgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLlxuICBleHBvcnRzLmF3cmFwID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHsgX19hd2FpdDogYXJnIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IsIFByb21pc2VJbXBsKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZUltcGwucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24odW53cmFwcGVkKSB7XG4gICAgICAgICAgLy8gV2hlbiBhIHlpZWxkZWQgUHJvbWlzZSBpcyByZXNvbHZlZCwgaXRzIGZpbmFsIHZhbHVlIGJlY29tZXNcbiAgICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi5cbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQ7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgIC8vIElmIGEgcmVqZWN0ZWQgUHJvbWlzZSB3YXMgeWllbGRlZCwgdGhyb3cgdGhlIHJlamVjdGlvbiBiYWNrXG4gICAgICAgICAgLy8gaW50byB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIHNvIGl0IGNhbiBiZSBoYW5kbGVkIHRoZXJlLlxuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCBlcnJvciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2VJbXBsKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPVxuICAgICAgICAvLyBJZiBlbnF1ZXVlIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byB3YWl0IHVudGlsXG4gICAgICAgIC8vIGFsbCBwcmV2aW91cyBQcm9taXNlcyBoYXZlIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgaW52b2tlLFxuICAgICAgICAvLyBzbyB0aGF0IHJlc3VsdHMgYXJlIGFsd2F5cyBkZWxpdmVyZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIElmXG4gICAgICAgIC8vIGVucXVldWUgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gaXQgaXMgaW1wb3J0YW50IHRvXG4gICAgICAgIC8vIGNhbGwgaW52b2tlIGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgb24gYSBjYWxsYmFjayB0byBmaXJlLFxuICAgICAgICAvLyBzbyB0aGF0IHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gaGFzIHRoZSBvcHBvcnR1bml0eSB0byBkb1xuICAgICAgICAvLyBhbnkgbmVjZXNzYXJ5IHNldHVwIGluIGEgcHJlZGljdGFibGUgd2F5LiBUaGlzIHByZWRpY3RhYmlsaXR5XG4gICAgICAgIC8vIGlzIHdoeSB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGludm9rZXMgaXRzXG4gICAgICAgIC8vIGV4ZWN1dG9yIGNhbGxiYWNrLCBhbmQgd2h5IGFzeW5jIGZ1bmN0aW9ucyBzeW5jaHJvbm91c2x5XG4gICAgICAgIC8vIGV4ZWN1dGUgY29kZSBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0LiBTaW5jZSB3ZSBpbXBsZW1lbnQgc2ltcGxlXG4gICAgICAgIC8vIGFzeW5jIGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiBhc3luYyBnZW5lcmF0b3JzLCBpdCBpcyBlc3BlY2lhbGx5XG4gICAgICAgIC8vIGltcG9ydGFudCB0byBnZXQgdGhpcyByaWdodCwgZXZlbiB0aG91Z2ggaXQgcmVxdWlyZXMgY2FyZS5cbiAgICAgICAgcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsXG4gICAgICAgICAgLy8gQXZvaWQgcHJvcGFnYXRpbmcgZmFpbHVyZXMgdG8gUHJvbWlzZXMgcmV0dXJuZWQgYnkgbGF0ZXJcbiAgICAgICAgICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmdcbiAgICAgICAgKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIHRoZSB1bmlmaWVkIGhlbHBlciBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIChzZWUgZGVmaW5lSXRlcmF0b3JNZXRob2RzKS5cbiAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICB9XG5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKTtcbiAgQXN5bmNJdGVyYXRvci5wcm90b3R5cGVbYXN5bmNJdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIGV4cG9ydHMuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIGV4cG9ydHMuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCwgUHJvbWlzZUltcGwpIHtcbiAgICBpZiAoUHJvbWlzZUltcGwgPT09IHZvaWQgMCkgUHJvbWlzZUltcGwgPSBQcm9taXNlO1xuXG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpLFxuICAgICAgUHJvbWlzZUltcGxcbiAgICApO1xuXG4gICAgcmV0dXJuIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIC8vIE5vdGU6IFtcInJldHVyblwiXSBtdXN0IGJlIHVzZWQgZm9yIEVTMyBwYXJzaW5nIGNvbXBhdGliaWxpdHkuXG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIC8vIElmIG1heWJlSW52b2tlRGVsZWdhdGUoY29udGV4dCkgY2hhbmdlZCBjb250ZXh0Lm1ldGhvZCBmcm9tXG4gICAgICAgICAgICAvLyBcInJldHVyblwiIHRvIFwidGhyb3dcIiwgbGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy5cbiAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuXG4gICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cbiAgICBpZiAoISBpbmZvKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAvLyBBc3NpZ24gdGhlIHJlc3VsdCBvZiB0aGUgZmluaXNoZWQgZGVsZWdhdGUgdG8gdGhlIHRlbXBvcmFyeVxuICAgICAgLy8gdmFyaWFibGUgc3BlY2lmaWVkIGJ5IGRlbGVnYXRlLnJlc3VsdE5hbWUgKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXG4gICAgICAvLyBSZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXG4gICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmUteWllbGQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZGVsZWdhdGUgbWV0aG9kLlxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgLy8gVGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLCBzbyBmb3JnZXQgaXQgYW5kIGNvbnRpbnVlIHdpdGhcbiAgICAvLyB0aGUgb3V0ZXIgZ2VuZXJhdG9yLlxuICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIGRlZmluZShHcCwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yXCIpO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIGV4cG9ydHMua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBleHBvcnRzLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGlzIHNjcmlwdCBpcyBleGVjdXRpbmcgYXMgYSBDb21tb25KUyBtb2R1bGVcbiAgLy8gb3Igbm90LCByZXR1cm4gdGhlIHJ1bnRpbWUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGRlY2xhcmUgdGhlIHZhcmlhYmxlXG4gIC8vIHJlZ2VuZXJhdG9yUnVudGltZSBpbiB0aGUgb3V0ZXIgc2NvcGUsIHdoaWNoIGFsbG93cyB0aGlzIG1vZHVsZSB0byBiZVxuICAvLyBpbmplY3RlZCBlYXNpbHkgYnkgYGJpbi9yZWdlbmVyYXRvciAtLWluY2x1ZGUtcnVudGltZSBzY3JpcHQuanNgLlxuICByZXR1cm4gZXhwb3J0cztcblxufShcbiAgLy8gSWYgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlLCB1c2UgbW9kdWxlLmV4cG9ydHNcbiAgLy8gYXMgdGhlIHJlZ2VuZXJhdG9yUnVudGltZSBuYW1lc3BhY2UuIE90aGVyd2lzZSBjcmVhdGUgYSBuZXcgZW1wdHlcbiAgLy8gb2JqZWN0LiBFaXRoZXIgd2F5LCB0aGUgcmVzdWx0aW5nIG9iamVjdCB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZVxuICAvLyB0aGUgcmVnZW5lcmF0b3JSdW50aW1lIHZhcmlhYmxlIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLlxuICB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiID8gbW9kdWxlLmV4cG9ydHMgOiB7fVxuKSk7XG5cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICAvLyBUaGlzIG1vZHVsZSBzaG91bGQgbm90IGJlIHJ1bm5pbmcgaW4gc3RyaWN0IG1vZGUsIHNvIHRoZSBhYm92ZVxuICAvLyBhc3NpZ25tZW50IHNob3VsZCBhbHdheXMgd29yayB1bmxlc3Mgc29tZXRoaW5nIGlzIG1pc2NvbmZpZ3VyZWQuIEp1c3RcbiAgLy8gaW4gY2FzZSBydW50aW1lLmpzIGFjY2lkZW50YWxseSBydW5zIGluIHN0cmljdCBtb2RlLCB3ZSBjYW4gZXNjYXBlXG4gIC8vIHN0cmljdCBtb2RlIHVzaW5nIGEgZ2xvYmFsIEZ1bmN0aW9uIGNhbGwuIFRoaXMgY291bGQgY29uY2VpdmFibHkgZmFpbFxuICAvLyBpZiBhIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGZvcmJpZHMgdXNpbmcgRnVuY3Rpb24sIGJ1dCBpbiB0aGF0IGNhc2VcbiAgLy8gdGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byBmaXggdGhlIGFjY2lkZW50YWwgc3RyaWN0IG1vZGUgcHJvYmxlbS4gSWZcbiAgLy8geW91J3ZlIG1pc2NvbmZpZ3VyZWQgeW91ciBidW5kbGVyIHRvIGZvcmNlIHN0cmljdCBtb2RlIGFuZCBhcHBsaWVkIGFcbiAgLy8gQ1NQIHRvIGZvcmJpZCBGdW5jdGlvbiwgYW5kIHlvdSdyZSBub3Qgd2lsbGluZyB0byBmaXggZWl0aGVyIG9mIHRob3NlXG4gIC8vIHByb2JsZW1zLCBwbGVhc2UgZGV0YWlsIHlvdXIgdW5pcXVlIHByZWRpY2FtZW50IGluIGEgR2l0SHViIGlzc3VlLlxuICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xufVxuIiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG5cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FzeW5jVG9HZW5lcmF0b3I7IiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhIb2xlczsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuO1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcbiAgdmFyIF9lID0gdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheUxpbWl0OyIsImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykge1xuICAgIGFycjJbaV0gPSBhcnJbaV07XG4gIH1cblxuICByZXR1cm4gYXJyMjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlMaWtlVG9BcnJheTsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXlcIik7XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5OyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlUmVzdDsiLCJ2YXIgYXJyYXlXaXRoSG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhIb2xlc1wiKTtcblxudmFyIGl0ZXJhYmxlVG9BcnJheUxpbWl0ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5TGltaXRcIik7XG5cbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5XCIpO1xuXG52YXIgbm9uSXRlcmFibGVSZXN0ID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVSZXN0XCIpO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zbGljZWRUb0FycmF5OyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrOyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3M7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5OyIsInZhciBlPWZ1bmN0aW9uKCl7cmV0dXJuISFuYXZpZ2F0b3IucGVybWlzc2lvbnN9LHI9ZnVuY3Rpb24oKXtyZXR1cm4hIW5hdmlnYXRvci5tZWRpYURldmljZXN9O2Z1bmN0aW9uIHQoZSxyLHQsbixhLGksbyl7dHJ5e3ZhciB1PWVbaV0obyksYz11LnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHQoZSl9dS5kb25lP3IoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBuKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMsbj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihhLGkpe3ZhciBvPWUuYXBwbHkocixuKTtmdW5jdGlvbiB1KGUpe3QobyxhLGksdSxjLFwibmV4dFwiLGUpfWZ1bmN0aW9uIGMoZSl7dChvLGEsaSx1LGMsXCJ0aHJvd1wiLGUpfXUodm9pZCAwKX0pKX19ZnVuY3Rpb24gYShlLHIpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxyKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgU3ltYm9sfHwhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSkpKXJldHVybjt2YXIgdD1bXSxuPSEwLGE9ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbyx1PWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz11Lm5leHQoKSkuZG9uZSkmJih0LnB1c2goby52YWx1ZSksIXJ8fHQubGVuZ3RoIT09cik7bj0hMCk7fWNhdGNoKGUpe2E9ITAsaT1lfWZpbmFsbHl7dHJ5e258fG51bGw9PXUucmV0dXJufHx1LnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBpfX1yZXR1cm4gdH0oZSxyKXx8ZnVuY3Rpb24oZSxyKXtpZighZSlyZXR1cm47aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGkoZSxyKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7XCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSk7aWYoXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKGUpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gaShlLHIpfShlLHIpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gaShlLHIpeyhudWxsPT1yfHxyPmUubGVuZ3RoKSYmKHI9ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLG49bmV3IEFycmF5KHIpO3Q8cjt0Kyspblt0XT1lW3RdO3JldHVybiBufXZhciBvPWZ1bmN0aW9uKCl7dmFyIHI9bihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gcih0KXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLmFicnVwdChcInJldHVyblwiLG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIHI9bihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gcihuLGEpe3ZhciBpLG87cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gZSgpfHxhKG5ldyBET01FeGNlcHRpb24oXCJOYXZpZ2F0b3IgQVBJOiBwZXJtaXNzaW9ucyBub3Qgc3VwcG9ydGVkXCIsXCJOT1RfU1VQUE9SVEVEX0VSUlwiKSksci5wcmV2PTEsci5uZXh0PTQsbmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHtuYW1lOnR9KTtjYXNlIDQ6aT1yLnNlbnQsbz1mdW5jdGlvbiBlKHIpe2kucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLGUpLHUoci50YXJnZXQuc3RhdGUsbixhKX0saS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsbyksdShpLnN0YXRlLG4sYSksci5uZXh0PTEzO2JyZWFrO2Nhc2UgMTA6ci5wcmV2PTEwLHIudDA9ci5jYXRjaCgxKSxhKHIudDApO2Nhc2UgMTM6Y2FzZVwiZW5kXCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIsbnVsbCxbWzEsMTBdXSl9KSkpO3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiByLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKTtjYXNlIDE6Y2FzZVwiZW5kXCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIpfSkpKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSx1PWZ1bmN0aW9uKGUscix0KXtzd2l0Y2goZSl7Y2FzZVwiZGVuaWVkXCI6dChuZXcgRE9NRXhjZXB0aW9uKFwiUGVybWlzc2lvbiBkZW5pZWRcIixcIk5PVF9BTExPV0VEX0VSUlwiKSk7YnJlYWs7ZGVmYXVsdDpyKGUpfX0sYz1mdW5jdGlvbigpe3ZhciB0PW4ocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIHQoaSx1KXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LmFicnVwdChcInJldHVyblwiLG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIHQ9bihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdChuLGMpe3ZhciBzLGYscDtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiBlKCkmJnIoKXx8YyhuZXcgRE9NRXhjZXB0aW9uKFwiTmF2aWdhdG9yIEFQSTogcGVybWlzc2lvbnMgb3IgTmF2aWdhdG9yIEFQSTogbWVkaWFEZXZpY2VzIG5vdCBzdXBwb3J0ZWRcIixcIk5PVF9TVVBQT1JURURfRVJSXCIpKSx0LnByZXY9MSx0LnQwPVByb21pc2UsdC5uZXh0PTUsbyhpKTtjYXNlIDU6cmV0dXJuIHQudDE9dC5zZW50LHQubmV4dD04LG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHUpO2Nhc2UgODpyZXR1cm4gdC50Mj10LnNlbnQsdC50Mz1bdC50MSx0LnQyXSx0Lm5leHQ9MTIsdC50MC5hbGwuY2FsbCh0LnQwLHQudDMpO2Nhc2UgMTI6cz10LnNlbnQsZj1hKHMsMikscD1mWzFdLG4ocCksdC5uZXh0PTIxO2JyZWFrO2Nhc2UgMTg6dC5wcmV2PTE4LHQudDQ9dC5jYXRjaCgxKSxjKHQudDQpO2Nhc2UgMjE6Y2FzZVwiZW5kXCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsbnVsbCxbWzEsMThdXSl9KSkpO3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKTtjYXNlIDE6Y2FzZVwiZW5kXCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKTtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpO2V4cG9ydHtvIGFzIGdldFBlcm1pc3Npb24sYyBhcyBnZXRVc2VyTWVkaWFTdHJlYW0sciBhcyBpc05hdmlnYXRvck1lZGlhRGV2aWNlc1N1cHBvcnRlZCxlIGFzIGlzTmF2aWdhdG9yUGVybWlzc2lvbnNTdXBwb3J0ZWR9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndVpYTXVhbk1pTENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5cGMwNWhkbWxuWVhSdmNsQmxjbTFwYzNOcGIyNXpVM1Z3Y0c5eWRHVmtMbXB6SWl3aUxpNHZjM0pqTDJselRtRjJhV2RoZEc5eVRXVmthV0ZFWlhacFkyVnpVM1Z3Y0c5eWRHVmtMbXB6SWl3aUxpNHZjM0pqTDJkbGRGQmxjbTFwYzNOcGIyNHVhbk1pTENJdUxpOXpjbU12WjJWMFZYTmxjazFsWkdsaFUzUnlaV0Z0TG1weklsMHNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMmhsWTJzZ2QyaGxkR2hsY2lCT1lYWnBaMkYwYjNJZ1FWQkpPaUJ3WlhKdGFYTnphVzl1Y3lCcGN5QnpkWEJ3YjNKMFpXUWdZbmtnZEdobElHTjFjbkpsYm5RZ1luSnZkM05sY2x4dUlDb2dRSEpsZEhWeWJuTWdlMkp2YjJ4bFlXNTlYRzRnS2k5Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUNncElEMCtJQ0VoYm1GMmFXZGhkRzl5TG5CbGNtMXBjM05wYjI1elhHNGlMQ0l2S2lwY2JpQXFJRU5vWldOcklIZG9aWFJvWlhJZ1RtRjJhV2RoZEc5eUlFRlFTVG9nYldWa2FXRkVaWFpwWTJWeklHbHpJSE4xY0hCdmNuUmxaQ0JpZVNCMGFHVWdZM1Z5Y21WdWRDQmljbTkzYzJWeVhHNGdLaUJBY21WMGRYSnVjeUI3WW05dmJHVmhibjFjYmlBcUwxeHVaWGh3YjNKMElHUmxabUYxYkhRZ0tDa2dQVDRnSVNGdVlYWnBaMkYwYjNJdWJXVmthV0ZFWlhacFkyVnpYRzRpTENKcGJYQnZjblFnYVhOT1lYWnBaMkYwYjNKUVpYSnRhWE56YVc5dWMxTjFjSEJ2Y25SbFpDQm1jbTl0SUNjdUwybHpUbUYyYVdkaGRHOXlVR1Z5YldsemMybHZibk5UZFhCd2IzSjBaV1FuWEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCaElIQnliMjFwYzJVZ2NtVnpiMngyWldRZ2QyaGxiaUIwYUdVZ2NHVnliV2x6YzJsdmJpQnBjeUJuY21GdWRHVmtJR0o1SUhSb1pTQjFjMlZ5WEc0Z0tpQkFjR0Z5WVcwZ2NHVnliV2x6YzJsdmJrNWhiV1VnSUNBZ0lDQWdJQ0FnSUNCT1lXMWxJRzltSUhSb1pTQndaWEp0YVhOemFXOXVMaUJBYzJWbElHaDBkSEJ6T2k4dmR6TmpMbWRwZEdoMVlpNXBieTl3WlhKdGFYTnphVzl1Y3k4alpXNTFiV1JsWmkxd1pYSnRhWE56YVc5dWJtRnRaVnh1SUNvZ1FISmxkSFZ5Ym5NZ2UxQnliMjFwYzJWOVhHNGdLaTljYm1WNGNHOXlkQ0JrWldaaGRXeDBJR0Z6ZVc1aklDaHdaWEp0YVhOemFXOXVUbUZ0WlNrZ1BUNGdlMXh1WEhSeVpYUjFjbTRnYm1WM0lGQnliMjFwYzJVb1lYTjVibU1nS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHVYSFJjZEdsbUlDZ2hhWE5PWVhacFoyRjBiM0pRWlhKdGFYTnphVzl1YzFOMWNIQnZjblJsWkNncEtTQjdYRzVjZEZ4MFhIUnlaV3BsWTNRb2JtVjNJRVJQVFVWNFkyVndkR2x2YmlnblRtRjJhV2RoZEc5eUlFRlFTVG9nY0dWeWJXbHpjMmx2Ym5NZ2JtOTBJSE4xY0hCdmNuUmxaQ2NzSUNkT1QxUmZVMVZRVUU5U1ZFVkVYMFZTVWljcEtWeHVYSFJjZEgxY2JseHVYSFJjZEhSeWVTQjdYRzVjZEZ4MFhIUmpiMjV6ZENCd1pYSnRhWE56YVc5dVUzUmhkSFZ6SUQwZ1lYZGhhWFFnYm1GMmFXZGhkRzl5TG5CbGNtMXBjM05wYjI1ekxuRjFaWEo1S0hzZ2JtRnRaVG9nY0dWeWJXbHpjMmx2Yms1aGJXVWdmU2xjYmx4MFhIUmNkR052Ym5OMElHOXVRMmhoYm1kbElEMGdLR1YyWlc1MEtTQTlQaUI3WEc1Y2RGeDBYSFJjZEhCbGNtMXBjM05wYjI1VGRHRjBkWE11Y21WdGIzWmxSWFpsYm5STWFYTjBaVzVsY2lnblkyaGhibWRsSnl3Z2IyNURhR0Z1WjJVcFhHNWNkRngwWEhSY2RISmxjMjlzZG1WUGNsSmxhbVZqZEVKaGMyVmtUMjVUZEdGMFpTaGxkbVZ1ZEM1MFlYSm5aWFF1YzNSaGRHVXNJSEpsYzI5c2RtVXNJSEpsYW1WamRDbGNibHgwWEhSY2RIMWNibHgwWEhSY2RIQmxjbTFwYzNOcGIyNVRkR0YwZFhNdVlXUmtSWFpsYm5STWFYTjBaVzVsY2lnblkyaGhibWRsSnl3Z2IyNURhR0Z1WjJVcFhHNWNkRngwWEhSeVpYTnZiSFpsVDNKU1pXcGxZM1JDWVhObFpFOXVVM1JoZEdVb2NHVnliV2x6YzJsdmJsTjBZWFIxY3k1emRHRjBaU3dnY21WemIyeDJaU3dnY21WcVpXTjBLVnh1WEhSY2RIMGdZMkYwWTJnZ0tHVnljbTl5S1NCN1hHNWNkRngwWEhSeVpXcGxZM1FvWlhKeWIzSXBYRzVjZEZ4MGZWeHVYSFI5S1Z4dWZWeHVYRzVqYjI1emRDQnlaWE52YkhabFQzSlNaV3BsWTNSQ1lYTmxaRTl1VTNSaGRHVWdQU0FvYzNSaGRHVXNJSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dVhIUnpkMmwwWTJnZ0tITjBZWFJsS1NCN1hHNWNkRngwWTJGelpTQW5aR1Z1YVdWa0p6cGNibHgwWEhSY2RISmxhbVZqZENodVpYY2dSRTlOUlhoalpYQjBhVzl1S0NkUVpYSnRhWE56YVc5dUlHUmxibWxsWkNjc0lDZE9UMVJmUVV4TVQxZEZSRjlGVWxJbktTbGNibHgwWEhSY2RHSnlaV0ZyWEc1Y2RGeDBaR1ZtWVhWc2REcGNibHgwWEhSY2RISmxjMjlzZG1Vb2MzUmhkR1VwWEc1Y2RIMWNibjFjYmlJc0ltbHRjRzl5ZENCcGMwNWhkbWxuWVhSdmNsQmxjbTFwYzNOcGIyNXpVM1Z3Y0c5eWRHVmtJR1p5YjIwZ0p5NHZhWE5PWVhacFoyRjBiM0pRWlhKdGFYTnphVzl1YzFOMWNIQnZjblJsWkNkY2JtbHRjRzl5ZENCcGMwNWhkbWxuWVhSdmNrMWxaR2xoUkdWMmFXTmxjMU4xY0hCdmNuUmxaQ0JtY205dElDY3VMMmx6VG1GMmFXZGhkRzl5VFdWa2FXRkVaWFpwWTJWelUzVndjRzl5ZEdWa0oxeHVhVzF3YjNKMElHZGxkRkJsY20xcGMzTnBiMjRnWm5KdmJTQW5MaTluWlhSUVpYSnRhWE56YVc5dUoxeHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdZU0J3Y205dGFYTmxJSEpsYzI5c2RtVmtJSGRvWlc0Z2RHaGxJSEJsY20xcGMzTnBiMjRnYVhNZ1ozSmhiblJsWkNCaWVTQjBhR1VnZFhObGNpQmhibVFnZEdobElITjBjbVZoYlNCcGN5QnlaWFJ5YVdWMlpXUmNiaUFxSUVCd1lYSmhiU0J3WlhKdGFYTnphVzl1VG1GdFpTQWdJQ0FnSUNBZ0lDQWdJRTVoYldVZ2IyWWdkR2hsSUhCbGNtMXBjM05wYjI0dUlFQnpaV1VnYUhSMGNITTZMeTkzTTJNdVoybDBhSFZpTG1sdkwzQmxjbTFwYzNOcGIyNXpMeU5sYm5WdFpHVm1MWEJsY20xcGMzTnBiMjV1WVcxbFhHNGdLaUJBY0dGeVlXMGdiV1ZrYVdGVGRISmxZVzFEYjI1emRISmhhVzUwY3lBZ0lDQkRiMjV6ZEhKaGFXNTBjeUJ2WW1wbFkzUXVJRUJ6WldVZ2FIUjBjSE02THk5a1pYWmxiRzl3WlhJdWJXOTZhV3hzWVM1dmNtY3ZaVzR0VlZNdlpHOWpjeTlYWldJdlFWQkpMMDFsWkdsaFUzUnlaV0Z0UTI5dWMzUnlZV2x1ZEhOY2JpQXFJRUJ5WlhSMWNtNXpJSHRRY205dGFYTmxmVnh1SUNvdlhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCaGMzbHVZeUFvY0dWeWJXbHpjMmx2Yms1aGJXVXNJRzFsWkdsaFUzUnlaV0Z0UTI5dWMzUnlZV2x1ZEhNcElEMCtJSHRjYmx4MGNtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtHRnplVzVqSUNoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNibHgwWEhScFppQW9JV2x6VG1GMmFXZGhkRzl5VUdWeWJXbHpjMmx2Ym5OVGRYQndiM0owWldRb0tTQjhmQ0FoYVhOT1lYWnBaMkYwYjNKTlpXUnBZVVJsZG1salpYTlRkWEJ3YjNKMFpXUW9LU2tnZTF4dVhIUmNkRngwY21WcVpXTjBLRzVsZHlCRVQwMUZlR05sY0hScGIyNG9KMDVoZG1sbllYUnZjaUJCVUVrNklIQmxjbTFwYzNOcGIyNXpJRzl5SUU1aGRtbG5ZWFJ2Y2lCQlVFazZJRzFsWkdsaFJHVjJhV05sY3lCdWIzUWdjM1Z3Y0c5eWRHVmtKeXdnSjA1UFZGOVRWVkJRVDFKVVJVUmZSVkpTSnlrcFhHNWNkRngwZlZ4dVhHNWNkRngwZEhKNUlIdGNibHgwWEhSY2RHTnZibk4wSUZzc0lITjBjbVZoYlYwZ1BTQmhkMkZwZENCUWNtOXRhWE5sTG1Gc2JDaGJYRzVjZEZ4MFhIUmNkR0YzWVdsMElHZGxkRkJsY20xcGMzTnBiMjRvY0dWeWJXbHpjMmx2Yms1aGJXVXBMRnh1WEhSY2RGeDBYSFJoZDJGcGRDQnVZWFpwWjJGMGIzSXViV1ZrYVdGRVpYWnBZMlZ6TG1kbGRGVnpaWEpOWldScFlTaHRaV1JwWVZOMGNtVmhiVU52Ym5OMGNtRnBiblJ6S1N4Y2JseDBYSFJjZEYwcFhHNWNkRngwWEhSeVpYTnZiSFpsS0hOMGNtVmhiU2xjYmx4MFhIUjlJR05oZEdOb0lDaGxjbkp2Y2lrZ2UxeHVYSFJjZEZ4MGNtVnFaV04wS0dWeWNtOXlLVnh1WEhSY2RIMWNibHgwZlNsY2JuMWNiaUpkTENKdVlXMWxjeUk2V3lKdVlYWnBaMkYwYjNJaUxDSndaWEp0YVhOemFXOXVjeUlzSW0xbFpHbGhSR1YyYVdObGN5SXNJbkJsY20xcGMzTnBiMjVPWVcxbElpd2lVSEp2YldselpTSXNJbkpsYzI5c2RtVWlMQ0p5WldwbFkzUWlMQ0pwYzA1aGRtbG5ZWFJ2Y2xCbGNtMXBjM05wYjI1elUzVndjRzl5ZEdWa0lpd2lSRTlOUlhoalpYQjBhVzl1SWl3aWNYVmxjbmtpTENKdVlXMWxJaXdpY0dWeWJXbHpjMmx2YmxOMFlYUjFjeUlzSW05dVEyaGhibWRsSWl3aVpYWmxiblFpTENKeVpXMXZkbVZGZG1WdWRFeHBjM1JsYm1WeUlpd2ljbVZ6YjJ4MlpVOXlVbVZxWldOMFFtRnpaV1JQYmxOMFlYUmxJaXdpZEdGeVoyVjBJaXdpYzNSaGRHVWlMQ0poWkdSRmRtVnVkRXhwYzNSbGJtVnlJaXdpYldWa2FXRlRkSEpsWVcxRGIyNXpkSEpoYVc1MGN5SXNJbWx6VG1GMmFXZGhkRzl5VFdWa2FXRkVaWFpwWTJWelUzVndjRzl5ZEdWa0lpd2laMlYwVUdWeWJXbHpjMmx2YmlJc0ltZGxkRlZ6WlhKTlpXUnBZU0lzSW1Gc2JDSXNJbk4wY21WaGJTSmRMQ0p0WVhCd2FXNW5jeUk2SWtGQlNVRXNlVUpCUVhWQ1FTeFZRVUZWUXl4clEwTkJWa1FzVlVGQlZVVXNhWGhEUTBkcVF5eHJSRUZCWlN4WFFVRlBReXcwUjBGRFpDeEpRVUZKUXl4dlJFRkJVU3hYUVVGUFF5eEZRVUZUUXl4clIwRkROMEpETEV0QlEwcEVMRVZCUVU4c1NVRkJTVVVzWVVGQllTd3lRMEZCTkVNc2QwTkJTWEpEVWl4VlFVRlZReXhaUVVGWlVTeE5RVUZOTEVOQlFVVkRMRXRCUVUxUUxGZEJRVGRFVVN4VFFVTkJReXhGUVVGWExGTkJRVmhCTEVWQlFWbERMRWRCUTJwQ1JpeEZRVUZwUWtjc2IwSkJRVzlDTEZOQlFWVkdMRWRCUXk5RFJ5eEZRVUUwUWtZc1JVRkJUVWNzVDBGQlQwTXNUVUZCVDFvc1JVRkJVME1zU1VGRk1VUkxMRVZCUVdsQ1R5eHBRa0ZCYVVJc1UwRkJWVTRzUjBGRE5VTkhMRVZCUVRSQ1NpeEZRVUZwUWswc1RVRkJUMW9zUlVGQlUwTXNjVVJCUlRkRVFTdzJUa0ZMUjFNc1JVRkJPRUlzVTBGQlEwVXNSVUZCVDFvc1JVRkJVME1zVlVGRE5VTlhMRTlCUTBZc1UwRkRTbGdzUlVGQlR5eEpRVUZKUlN4aFFVRmhMRzlDUVVGeFFpeHJRMEZITjBOSUxFVkJRVkZaTEcxRVEzWkNTU3hYUVVGUFpDeEZRVUZuUW1kQ0xEUkhRVU01UWl4SlFVRkpaaXh2UkVGQlVTeFhRVUZQUXl4RlFVRlRReXh2UjBGRE4wSkRMRXRCUVhORFlTeExRVU14UTJRc1JVRkJUeXhKUVVGSlJTeGhRVUZoTERCRlFVRXlSU3h2UTBGSk1VVktMR2xDUVVOc1FtbENMRVZCUVdOc1FpeHpRMEZEWkVnc1ZVRkJWVVVzWVVGQllXOUNMR0ZCUVdGSUxEWkVRVVpXU1N3NFEwRkJlRUpETEU5QlNWUnVRaXhGUVVGUmJVSXNjVVJCUlZKc1FpSjlcbiIsImltcG9ydCB7IGlzTmF2aWdhdG9yUGVybWlzc2lvbnNTdXBwb3J0ZWQsIGlzTmF2aWdhdG9yTWVkaWFEZXZpY2VzU3VwcG9ydGVkLCBnZXRVc2VyTWVkaWFTdHJlYW0gfSBmcm9tICdAdW50ZW1wcy91c2VyLXBlcm1pc3Npb25zLXV0aWxzJ1xuXG5jbGFzcyBWb2NhbCB7XG5cdHN0YXRpYyBkZWZhdWx0T3B0aW9ucyA9IHtcblx0XHRncmFtbWFyczogbnVsbCxcblx0XHRsYW5nOiAnZW4tVVMnLFxuXHRcdGNvbnRpbnVvdXM6IGZhbHNlLFxuXHRcdGludGVyaW1SZXN1bHRzOiBmYWxzZSxcblx0XHRtYXhBbHRlcm5hdGl2ZXM6IDEsXG5cdFx0c2VydmljZVVSSTogbnVsbCxcblx0fVxuXG5cdHN0YXRpYyBldmVudFR5cGVzID0ge1xuXHRcdEFVRElPX0VORDogJ2F1ZGlvZW5kJyxcblx0XHRBVURJT19TVEFSVDogJ2F1ZGlvc3RhcnQnLFxuXHRcdEVORDogJ2VuZCcsXG5cdFx0RVJST1I6ICdlcnJvcicsXG5cdFx0Tk9fTUFUQ0g6ICdub21hdGNoJyxcblx0XHRSRVNVTFQ6ICdyZXN1bHQnLFxuXHRcdFNPVU5EX0VORDogJ3NvdW5kZW5kJyxcblx0XHRTT1VORF9TVEFSVDogJ3NvdW5kc3RhcnQnLFxuXHRcdFNQRUVDSF9FTkQ6ICdzcGVlY2hlbmQnLFxuXHRcdFNQRUVDSF9TVEFSVDogJ3NwZWVjaHN0YXJ0Jyxcblx0XHRTVEFSVDogJ3N0YXJ0Jyxcblx0fVxuXG5cdHN0YXRpYyBnZXQgaXNTdXBwb3J0ZWQoKSB7XG5cdFx0cmV0dXJuICEhVm9jYWwuX3Jlc29sdmVTcGVlY2hSZWNvZ25pdGlvbigpICYmICEhaXNOYXZpZ2F0b3JQZXJtaXNzaW9uc1N1cHBvcnRlZCgpICYmICEhaXNOYXZpZ2F0b3JNZWRpYURldmljZXNTdXBwb3J0ZWQoKVxuXHR9XG5cblx0c3RhdGljIHNldCBpc1N1cHBvcnRlZChfKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IHNldCBpc1N1cHBvcnRlZCBkaXJlY3RseS4nKVxuXHR9XG5cblx0X2luc3RhbmNlID0gbnVsbFxuXHRfbGlzdGVuZXJzID0gbnVsbFxuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRjb25zdCBTcGVlY2hSZWNvZ25pdGlvbiA9IFZvY2FsLl9yZXNvbHZlU3BlZWNoUmVjb2duaXRpb24oKVxuXHRcdGlmICghU3BlZWNoUmVjb2duaXRpb24pIHtcblx0XHRcdHRocm93IG5ldyBET01FeGNlcHRpb24oJ1NwZWVjaFJlY29nbml0aW9uIG5vdCBzdXBwb3J0ZWQnLCAnTk9UX1NVUFBPUlRFRF9FUlInKVxuXHRcdH1cblxuXHRcdHRoaXMuX2luc3RhbmNlID0gbmV3IFNwZWVjaFJlY29nbml0aW9uKClcblx0XHR0aGlzLl9saXN0ZW5lcnMgPSB7fVxuXG5cdFx0T2JqZWN0LmVudHJpZXMoe1xuXHRcdFx0Li4uVm9jYWwuZGVmYXVsdE9wdGlvbnMsXG5cdFx0XHQuLi4ob3B0aW9ucyB8fCB7fSksXG5cdFx0fSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG5cdFx0XHRpZiAoa2V5ID09PSAnZ3JhbW1hcnMnICYmICF2YWx1ZSkge1xuXHRcdFx0XHRjb25zdCBTcGVlY2hHcmFtbWFyTGlzdCA9IFZvY2FsLl9yZXNvbHZlU3BlZWNoR3JhbW1hckxpc3QoKVxuXHRcdFx0XHRpZiAoISFTcGVlY2hHcmFtbWFyTGlzdCkge1xuXHRcdFx0XHRcdHZhbHVlID0gbmV3IFNwZWVjaEdyYW1tYXJMaXN0KClcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5faW5zdGFuY2Vba2V5XSA9IHZhbHVlXG5cdFx0fSlcblx0fVxuXG5cdGdldCBpbnN0YW5jZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5zdGFuY2Vcblx0fVxuXG5cdHNldCBpbnN0YW5jZShfKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IHNldCBpbnN0YW5jZSBkaXJlY3RseS4nKVxuXHR9XG5cblx0YXN5bmMgc3RhcnQoKSB7XG5cdFx0aWYgKCEhdGhpcy5faW5zdGFuY2UpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHN0cmVhbSA9IGF3YWl0IGdldFVzZXJNZWRpYVN0cmVhbSgnbWljcm9waG9uZScsIHsgYXVkaW86IHRydWUgfSlcblx0XHRcdFx0aWYgKCFzdHJlYW0pIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZXRyaWV2ZSB0aGUgc3RyZWFtIGZyb20gbWVkaWEgZGV2aWNlJylcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9pbnN0YW5jZS5zdGFydCgpXG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLl9saXN0ZW5lcnMuZXJyb3Jcblx0XHRcdFx0aWYgKCEhZXJyb3JIYW5kbGVyKSB7XG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyKGVycm9yKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdHN0b3AoKSB7XG5cdFx0aWYgKCEhdGhpcy5faW5zdGFuY2UpIHtcblx0XHRcdHRoaXMuX2luc3RhbmNlLnN0b3AoKVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRhYm9ydCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dGhpcy5faW5zdGFuY2UuYWJvcnQoKVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRhZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2spIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSAmJiB0aGlzLl9pbmNsdWRlc0V2ZW50VHlwZShldmVudFR5cGUpKSB7XG5cdFx0XHRpZiAoISF0aGlzLl9saXN0ZW5lcnNbZXZlbnRUeXBlXSkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBoYW5kbGVyID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGxldCBhZGRpdGlvbmFsQXJncyA9IFtdXG5cdFx0XHRcdGlmIChldmVudFR5cGUgPT09IFZvY2FsLmV2ZW50VHlwZXMuUkVTVUxUKSB7XG5cdFx0XHRcdFx0aWYgKCEhZXZlbnQucmVzdWx0cyAmJiBldmVudC5yZXN1bHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGFkZGl0aW9uYWxBcmdzLnB1c2goZXZlbnQucmVzdWx0c1swXVswXS50cmFuc2NyaXB0KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCEhY2FsbGJhY2sgJiYgY2FsbGJhY2suYXBwbHkodGhpcywgW2V2ZW50LCAuLi5hZGRpdGlvbmFsQXJnc10pXG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9pbnN0YW5jZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlcilcblxuXHRcdFx0dGhpcy5fbGlzdGVuZXJzW2V2ZW50VHlwZV0gPSBoYW5kbGVyXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdXG5cdFx0dGhpcy5faW5zdGFuY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIpXG5cblx0XHRkZWxldGUgdGhpcy5fbGlzdGVuZXJzW2V2ZW50VHlwZV1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRjbGVhbnVwKCkge1xuXHRcdHRoaXMuc3RvcCgpXG5cblx0XHRPYmplY3Qua2V5cyh0aGlzLl9saXN0ZW5lcnMpLmZvckVhY2goKGtleSkgPT4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGtleSkpXG5cdFx0dGhpcy5faW5zdGFuY2UgPSBudWxsXG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0X2luY2x1ZGVzRXZlbnRUeXBlKGV2ZW50VHlwZSkge1xuXHRcdHJldHVybiAhIU9iamVjdC52YWx1ZXMoVm9jYWwuZXZlbnRUeXBlcykuZmluZCgodHlwZSkgPT4gdHlwZSA9PT0gZXZlbnRUeXBlKVxuXHR9XG5cblx0c3RhdGljIF9yZXNvbHZlU3BlZWNoUmVjb2duaXRpb24oKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdHdpbmRvdy5TcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0d2luZG93LndlYmtpdFNwZWVjaFJlY29nbml0aW9uIHx8XG5cdFx0XHR3aW5kb3cubW96U3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdHdpbmRvdy5tc1NwZWVjaFJlY29nbml0aW9uXG5cdFx0KVxuXHR9XG5cblx0c3RhdGljIF9yZXNvbHZlU3BlZWNoR3JhbW1hckxpc3QoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdHdpbmRvdy5TcGVlY2hHcmFtbWFyTGlzdCB8fFxuXHRcdFx0d2luZG93LndlYmtpdFNwZWVjaEdyYW1tYXJMaXN0IHx8XG5cdFx0XHR3aW5kb3cubW96U3BlZWNoR3JhbW1hckxpc3QgfHxcblx0XHRcdHdpbmRvdy5tc1NwZWVjaEdyYW1tYXJMaXN0XG5cdFx0KVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZvY2FsXG4iXSwibmFtZXMiOlsicnVudGltZSIsImV4cG9ydHMiLCJPcCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093biIsImhhc093blByb3BlcnR5IiwiJFN5bWJvbCIsIlN5bWJvbCIsIml0ZXJhdG9yU3ltYm9sIiwiaXRlcmF0b3IiLCJhc3luY0l0ZXJhdG9yU3ltYm9sIiwiYXN5bmNJdGVyYXRvciIsInRvU3RyaW5nVGFnU3ltYm9sIiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJvYmoiLCJrZXkiLCJ2YWx1ZSIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiZXJyIiwid3JhcCIsImlubmVyRm4iLCJvdXRlckZuIiwic2VsZiIsInRyeUxvY3NMaXN0IiwicHJvdG9HZW5lcmF0b3IiLCJHZW5lcmF0b3IiLCJnZW5lcmF0b3IiLCJjcmVhdGUiLCJjb250ZXh0IiwiQ29udGV4dCIsIl9pbnZva2UiLCJzdGF0ZSIsIm1ldGhvZCIsImFyZyIsIkVycm9yIiwiZG9uZVJlc3VsdCIsImRlbGVnYXRlIiwiZGVsZWdhdGVSZXN1bHQiLCJtYXliZUludm9rZURlbGVnYXRlIiwiQ29udGludWVTZW50aW5lbCIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwicmVjb3JkIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiZG9uZSIsIm1ha2VJbnZva2VNZXRob2QiLCJmbiIsImNhbGwiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiSXRlcmF0b3JQcm90b3R5cGUiLCJ0aGlzIiwiZ2V0UHJvdG8iLCJnZXRQcm90b3R5cGVPZiIsIk5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlIiwidmFsdWVzIiwiR3AiLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJmb3JFYWNoIiwiQXN5bmNJdGVyYXRvciIsIlByb21pc2VJbXBsIiwicHJldmlvdXNQcm9taXNlIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJyZXNvbHZlIiwicmVqZWN0IiwiaW52b2tlIiwicmVzdWx0IiwiX19hd2FpdCIsInRoZW4iLCJ1bndyYXBwZWQiLCJlcnJvciIsInVuZGVmaW5lZCIsIlR5cGVFcnJvciIsImluZm8iLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJsb2NzIiwiZW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsIml0ZXJhYmxlIiwiaXRlcmF0b3JNZXRob2QiLCJpc05hTiIsImxlbmd0aCIsImkiLCJjb25zdHJ1Y3RvciIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImdlbkZ1biIsImN0b3IiLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJpdGVyIiwidG9TdHJpbmciLCJrZXlzIiwib2JqZWN0IiwicmV2ZXJzZSIsInBvcCIsInNraXBUZW1wUmVzZXQiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicm9vdFJlY29yZCIsInJ2YWwiLCJleGNlcHRpb24iLCJoYW5kbGUiLCJsb2MiLCJjYXVnaHQiLCJoYXNDYXRjaCIsImhhc0ZpbmFsbHkiLCJmaW5hbGx5RW50cnkiLCJjb21wbGV0ZSIsImZpbmlzaCIsImNhdGNoIiwidGhyb3duIiwiZGVsZWdhdGVZaWVsZCIsIm1vZHVsZSIsInJlZ2VuZXJhdG9yUnVudGltZSIsImFjY2lkZW50YWxTdHJpY3RNb2RlIiwiRnVuY3Rpb24iLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJfbmV4dCIsIl90aHJvdyIsImFyZ3MiLCJhcmd1bWVudHMiLCJhcHBseSIsImFyciIsIkFycmF5IiwiaXNBcnJheSIsIl9hcnIiLCJfbiIsIl9kIiwiX2UiLCJfcyIsIl9pIiwibGVuIiwiYXJyMiIsIm8iLCJtaW5MZW4iLCJhcnJheUxpa2VUb0FycmF5IiwibiIsImZyb20iLCJ0ZXN0IiwiYXJyYXlXaXRoSG9sZXMiLCJpdGVyYWJsZVRvQXJyYXlMaW1pdCIsInVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5Iiwibm9uSXRlcmFibGVSZXN0IiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJkZXNjcmlwdG9yIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiZSIsIm5hdmlnYXRvciIsInBlcm1pc3Npb25zIiwiciIsIm1lZGlhRGV2aWNlcyIsInQiLCJhIiwidSIsImMiLCJyZXR1cm4iLCJET01FeGNlcHRpb24iLCJxdWVyeSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhZGRFdmVudExpc3RlbmVyIiwidDAiLCJzIiwiZiIsInAiLCJ0MSIsImdldFVzZXJNZWRpYSIsInQyIiwidDMiLCJhbGwiLCJ0NCIsIlZvY2FsIiwib3B0aW9ucyIsIlNwZWVjaFJlY29nbml0aW9uIiwiX3Jlc29sdmVTcGVlY2hSZWNvZ25pdGlvbiIsIl9pbnN0YW5jZSIsIl9saXN0ZW5lcnMiLCJlbnRyaWVzIiwiZGVmYXVsdE9wdGlvbnMiLCJTcGVlY2hHcmFtbWFyTGlzdCIsIl9yZXNvbHZlU3BlZWNoR3JhbW1hckxpc3QiLCJfdGhpcyIsImlzTmF2aWdhdG9yUGVybWlzc2lvbnNTdXBwb3J0ZWQiLCJpc05hdmlnYXRvck1lZGlhRGV2aWNlc1N1cHBvcnRlZCIsIl8iLCJnZXRVc2VyTWVkaWFTdHJlYW0iLCJhdWRpbyIsInN0YXJ0IiwiZXJyb3JIYW5kbGVyIiwiYWJvcnQiLCJldmVudFR5cGUiLCJjYWxsYmFjayIsIl9pbmNsdWRlc0V2ZW50VHlwZSIsImhhbmRsZXIiLCJldmVudCIsImFkZGl0aW9uYWxBcmdzIiwiZXZlbnRUeXBlcyIsIlJFU1VMVCIsInJlc3VsdHMiLCJ0cmFuc2NyaXB0IiwiX3RoaXMyIiwiX3RoaXMzIiwiZmluZCIsIndpbmRvdyIsIndlYmtpdFNwZWVjaFJlY29nbml0aW9uIiwibW96U3BlZWNoUmVjb2duaXRpb24iLCJtc1NwZWVjaFJlY29nbml0aW9uIiwid2Via2l0U3BlZWNoR3JhbW1hckxpc3QiLCJtb3pTcGVlY2hHcmFtbWFyTGlzdCIsIm1zU3BlZWNoR3JhbW1hckxpc3QiLCJncmFtbWFycyIsImxhbmciLCJjb250aW51b3VzIiwiaW50ZXJpbVJlc3VsdHMiLCJtYXhBbHRlcm5hdGl2ZXMiLCJzZXJ2aWNlVVJJIiwiQVVESU9fRU5EIiwiQVVESU9fU1RBUlQiLCJFTkQiLCJFUlJPUiIsIk5PX01BVENIIiwiU09VTkRfRU5EIiwiU09VTkRfU1RBUlQiLCJTUEVFQ0hfRU5EIiwiU1BFRUNIX1NUQVJUIiwiU1RBUlQiXSwibWFwcGluZ3MiOiI4T0FPQSxJQUFJQSxFQUFXLFNBQVVDLEdBR3ZCLElBQUlDLEVBQUtDLE9BQU9DLFVBQ1pDLEVBQVNILEVBQUdJLGVBRVpDLEVBQTRCLG1CQUFYQyxPQUF3QkEsT0FBUyxHQUNsREMsRUFBaUJGLEVBQVFHLFVBQVksYUFDckNDLEVBQXNCSixFQUFRSyxlQUFpQixrQkFDL0NDLEVBQW9CTixFQUFRTyxhQUFlLGdCQUUvQyxTQUFTQyxFQUFPQyxFQUFLQyxFQUFLQyxHQU94QixPQU5BZixPQUFPZ0IsZUFBZUgsRUFBS0MsRUFBSyxDQUM5QkMsTUFBT0EsRUFDUEUsWUFBWSxFQUNaQyxjQUFjLEVBQ2RDLFVBQVUsSUFFTE4sRUFBSUMsR0FFYixJQUVFRixFQUFPLEdBQUksSUFDWCxNQUFPUSxHQUNQUixFQUFTLFNBQVNDLEVBQUtDLEVBQUtDLEdBQzFCLE9BQU9GLEVBQUlDLEdBQU9DLEdBSXRCLFNBQVNNLEVBQUtDLEVBQVNDLEVBQVNDLEVBQU1DLEdBRXBDLElBQUlDLEVBQWlCSCxHQUFXQSxFQUFRdEIscUJBQXFCMEIsRUFBWUosRUFBVUksRUFDL0VDLEVBQVk1QixPQUFPNkIsT0FBT0gsRUFBZXpCLFdBQ3pDNkIsRUFBVSxJQUFJQyxFQUFRTixHQUFlLElBTXpDLE9BRkFHLEVBQVVJLFFBc01aLFNBQTBCVixFQUFTRSxFQUFNTSxHQUN2QyxJQUFJRyxFQS9LdUIsaUJBaUwzQixPQUFPLFNBQWdCQyxFQUFRQyxHQUM3QixHQWhMb0IsY0FnTGhCRixFQUNGLE1BQU0sSUFBSUcsTUFBTSxnQ0FHbEIsR0FuTG9CLGNBbUxoQkgsRUFBNkIsQ0FDL0IsR0FBZSxVQUFYQyxFQUNGLE1BQU1DLEVBS1IsT0FBT0UsSUFNVCxJQUhBUCxFQUFRSSxPQUFTQSxFQUNqQkosRUFBUUssSUFBTUEsSUFFRCxDQUNYLElBQUlHLEVBQVdSLEVBQVFRLFNBQ3ZCLEdBQUlBLEVBQVUsQ0FDWixJQUFJQyxFQUFpQkMsRUFBb0JGLEVBQVVSLEdBQ25ELEdBQUlTLEVBQWdCLENBQ2xCLEdBQUlBLElBQW1CRSxFQUFrQixTQUN6QyxPQUFPRixHQUlYLEdBQXVCLFNBQW5CVCxFQUFRSSxPQUdWSixFQUFRWSxLQUFPWixFQUFRYSxNQUFRYixFQUFRSyxTQUVsQyxHQUF1QixVQUFuQkwsRUFBUUksT0FBb0IsQ0FDckMsR0FuTnFCLG1CQW1OakJELEVBRUYsTUFEQUEsRUFqTmMsWUFrTlJILEVBQVFLLElBR2hCTCxFQUFRYyxrQkFBa0JkLEVBQVFLLFNBRU4sV0FBbkJMLEVBQVFJLFFBQ2pCSixFQUFRZSxPQUFPLFNBQVVmLEVBQVFLLEtBR25DRixFQTVOa0IsWUE4TmxCLElBQUlhLEVBQVNDLEVBQVN6QixFQUFTRSxFQUFNTSxHQUNyQyxHQUFvQixXQUFoQmdCLEVBQU9FLEtBQW1CLENBTzVCLEdBSkFmLEVBQVFILEVBQVFtQixLQWpPQSxZQUZLLGlCQXVPakJILEVBQU9YLE1BQVFNLEVBQ2pCLFNBR0YsTUFBTyxDQUNMMUIsTUFBTytCLEVBQU9YLElBQ2RjLEtBQU1uQixFQUFRbUIsTUFHUyxVQUFoQkgsRUFBT0UsT0FDaEJmLEVBL09nQixZQWtQaEJILEVBQVFJLE9BQVMsUUFDakJKLEVBQVFLLElBQU1XLEVBQU9YLE9BOVFQZSxDQUFpQjVCLEVBQVNFLEVBQU1NLEdBRTdDRixFQWNULFNBQVNtQixFQUFTSSxFQUFJdEMsRUFBS3NCLEdBQ3pCLElBQ0UsTUFBTyxDQUFFYSxLQUFNLFNBQVViLElBQUtnQixFQUFHQyxLQUFLdkMsRUFBS3NCLElBQzNDLE1BQU9mLEdBQ1AsTUFBTyxDQUFFNEIsS0FBTSxRQUFTYixJQUFLZixJQWhCakN0QixFQUFRdUIsS0FBT0EsRUFvQmYsSUFPSW9CLEVBQW1CLEdBTXZCLFNBQVNkLEtBQ1QsU0FBUzBCLEtBQ1QsU0FBU0MsS0FJVCxJQUFJQyxFQUFvQixHQUN4QkEsRUFBa0JqRCxHQUFrQixXQUNsQyxPQUFPa0QsTUFHVCxJQUFJQyxFQUFXekQsT0FBTzBELGVBQ2xCQyxFQUEwQkYsR0FBWUEsRUFBU0EsRUFBU0csRUFBTyxNQUMvREQsR0FDQUEsSUFBNEI1RCxHQUM1QkcsRUFBT2tELEtBQUtPLEVBQXlCckQsS0FHdkNpRCxFQUFvQkksR0FHdEIsSUFBSUUsRUFBS1AsRUFBMkJyRCxVQUNsQzBCLEVBQVUxQixVQUFZRCxPQUFPNkIsT0FBTzBCLEdBV3RDLFNBQVNPLEVBQXNCN0QsR0FDN0IsQ0FBQyxPQUFRLFFBQVMsVUFBVThELFNBQVEsU0FBUzdCLEdBQzNDdEIsRUFBT1gsRUFBV2lDLEdBQVEsU0FBU0MsR0FDakMsT0FBT3FCLEtBQUt4QixRQUFRRSxFQUFRQyxTQWtDbEMsU0FBUzZCLEVBQWNwQyxFQUFXcUMsR0FnQ2hDLElBQUlDLEVBZ0NKVixLQUFLeEIsUUE5QkwsU0FBaUJFLEVBQVFDLEdBQ3ZCLFNBQVNnQyxJQUNQLE9BQU8sSUFBSUYsR0FBWSxTQUFTRyxFQUFTQyxJQW5DN0MsU0FBU0MsRUFBT3BDLEVBQVFDLEVBQUtpQyxFQUFTQyxHQUNwQyxJQUFJdkIsRUFBU0MsRUFBU25CLEVBQVVNLEdBQVNOLEVBQVdPLEdBQ3BELEdBQW9CLFVBQWhCVyxFQUFPRSxLQUVKLENBQ0wsSUFBSXVCLEVBQVN6QixFQUFPWCxJQUNoQnBCLEVBQVF3RCxFQUFPeEQsTUFDbkIsT0FBSUEsR0FDaUIsaUJBQVZBLEdBQ1BiLEVBQU9rRCxLQUFLckMsRUFBTyxXQUNka0QsRUFBWUcsUUFBUXJELEVBQU15RCxTQUFTQyxNQUFLLFNBQVMxRCxHQUN0RHVELEVBQU8sT0FBUXZELEVBQU9xRCxFQUFTQyxNQUM5QixTQUFTakQsR0FDVmtELEVBQU8sUUFBU2xELEVBQUtnRCxFQUFTQyxNQUkzQkosRUFBWUcsUUFBUXJELEdBQU8wRCxNQUFLLFNBQVNDLEdBSTlDSCxFQUFPeEQsTUFBUTJELEVBQ2ZOLEVBQVFHLE1BQ1AsU0FBU0ksR0FHVixPQUFPTCxFQUFPLFFBQVNLLEVBQU9QLEVBQVNDLE1BdkJ6Q0EsRUFBT3ZCLEVBQU9YLEtBaUNabUMsQ0FBT3BDLEVBQVFDLEVBQUtpQyxFQUFTQyxNQUlqQyxPQUFPSCxFQWFMQSxFQUFrQkEsRUFBZ0JPLEtBQ2hDTixFQUdBQSxHQUNFQSxLQWtIVixTQUFTM0IsRUFBb0JGLEVBQVVSLEdBQ3JDLElBQUlJLEVBQVNJLEVBQVMvQixTQUFTdUIsRUFBUUksUUFDdkMsUUExVEUwQyxJQTBURTFDLEVBQXNCLENBS3hCLEdBRkFKLEVBQVFRLFNBQVcsS0FFSSxVQUFuQlIsRUFBUUksT0FBb0IsQ0FFOUIsR0FBSUksRUFBUy9CLFNBQWlCLFNBRzVCdUIsRUFBUUksT0FBUyxTQUNqQkosRUFBUUssU0FyVVp5QyxFQXNVSXBDLEVBQW9CRixFQUFVUixHQUVQLFVBQW5CQSxFQUFRSSxRQUdWLE9BQU9PLEVBSVhYLEVBQVFJLE9BQVMsUUFDakJKLEVBQVFLLElBQU0sSUFBSTBDLFVBQ2hCLGtEQUdKLE9BQU9wQyxFQUdULElBQUlLLEVBQVNDLEVBQVNiLEVBQVFJLEVBQVMvQixTQUFVdUIsRUFBUUssS0FFekQsR0FBb0IsVUFBaEJXLEVBQU9FLEtBSVQsT0FIQWxCLEVBQVFJLE9BQVMsUUFDakJKLEVBQVFLLElBQU1XLEVBQU9YLElBQ3JCTCxFQUFRUSxTQUFXLEtBQ1pHLEVBR1QsSUFBSXFDLEVBQU9oQyxFQUFPWCxJQUVsQixPQUFNMkMsRUFPRkEsRUFBSzdCLE1BR1BuQixFQUFRUSxFQUFTeUMsWUFBY0QsRUFBSy9ELE1BR3BDZSxFQUFRa0QsS0FBTzFDLEVBQVMyQyxRQVFELFdBQW5CbkQsRUFBUUksU0FDVkosRUFBUUksT0FBUyxPQUNqQkosRUFBUUssU0F6WFZ5QyxHQW1ZRjlDLEVBQVFRLFNBQVcsS0FDWkcsR0FORXFDLEdBM0JQaEQsRUFBUUksT0FBUyxRQUNqQkosRUFBUUssSUFBTSxJQUFJMEMsVUFBVSxvQ0FDNUIvQyxFQUFRUSxTQUFXLEtBQ1pHLEdBb0RYLFNBQVN5QyxFQUFhQyxHQUNwQixJQUFJQyxFQUFRLENBQUVDLE9BQVFGLEVBQUssSUFFdkIsS0FBS0EsSUFDUEMsRUFBTUUsU0FBV0gsRUFBSyxJQUdwQixLQUFLQSxJQUNQQyxFQUFNRyxXQUFhSixFQUFLLEdBQ3hCQyxFQUFNSSxTQUFXTCxFQUFLLElBR3hCM0IsS0FBS2lDLFdBQVdDLEtBQUtOLEdBR3ZCLFNBQVNPLEVBQWNQLEdBQ3JCLElBQUl0QyxFQUFTc0MsRUFBTVEsWUFBYyxHQUNqQzlDLEVBQU9FLEtBQU8sZ0JBQ1BGLEVBQU9YLElBQ2RpRCxFQUFNUSxXQUFhOUMsRUFHckIsU0FBU2YsRUFBUU4sR0FJZitCLEtBQUtpQyxXQUFhLENBQUMsQ0FBRUosT0FBUSxTQUM3QjVELEVBQVlzQyxRQUFRbUIsRUFBYzFCLE1BQ2xDQSxLQUFLcUMsT0FBTSxHQThCYixTQUFTakMsRUFBT2tDLEdBQ2QsR0FBSUEsRUFBVSxDQUNaLElBQUlDLEVBQWlCRCxFQUFTeEYsR0FDOUIsR0FBSXlGLEVBQ0YsT0FBT0EsRUFBZTNDLEtBQUswQyxHQUc3QixHQUE2QixtQkFBbEJBLEVBQVNkLEtBQ2xCLE9BQU9jLEVBR1QsSUFBS0UsTUFBTUYsRUFBU0csUUFBUyxDQUMzQixJQUFJQyxHQUFLLEVBQUdsQixFQUFPLFNBQVNBLElBQzFCLE9BQVNrQixFQUFJSixFQUFTRyxRQUNwQixHQUFJL0YsRUFBT2tELEtBQUswQyxFQUFVSSxHQUd4QixPQUZBbEIsRUFBS2pFLE1BQVErRSxFQUFTSSxHQUN0QmxCLEVBQUsvQixNQUFPLEVBQ0wrQixFQU9YLE9BSEFBLEVBQUtqRSxXQXplVDZELEVBMGVJSSxFQUFLL0IsTUFBTyxFQUVMK0IsR0FHVCxPQUFPQSxFQUFLQSxLQUFPQSxHQUt2QixNQUFPLENBQUVBLEtBQU0zQyxHQUlqQixTQUFTQSxJQUNQLE1BQU8sQ0FBRXRCLFdBemZQNkQsRUF5ZnlCM0IsTUFBTSxHQStNbkMsT0E1bUJBSSxFQUFrQnBELFVBQVk0RCxFQUFHc0MsWUFBYzdDLEVBQy9DQSxFQUEyQjZDLFlBQWM5QyxFQUN6Q0EsRUFBa0IrQyxZQUFjeEYsRUFDOUIwQyxFQUNBNUMsRUFDQSxxQkFhRlosRUFBUXVHLG9CQUFzQixTQUFTQyxHQUNyQyxJQUFJQyxFQUF5QixtQkFBWEQsR0FBeUJBLEVBQU9ILFlBQ2xELFFBQU9JLElBQ0hBLElBQVNsRCxHQUcyQix1QkFBbkNrRCxFQUFLSCxhQUFlRyxFQUFLQyxRQUloQzFHLEVBQVEyRyxLQUFPLFNBQVNILEdBUXRCLE9BUEl0RyxPQUFPMEcsZUFDVDFHLE9BQU8wRyxlQUFlSixFQUFRaEQsSUFFOUJnRCxFQUFPSyxVQUFZckQsRUFDbkIxQyxFQUFPMEYsRUFBUTVGLEVBQW1CLHNCQUVwQzRGLEVBQU9yRyxVQUFZRCxPQUFPNkIsT0FBT2dDLEdBQzFCeUMsR0FPVHhHLEVBQVE4RyxNQUFRLFNBQVN6RSxHQUN2QixNQUFPLENBQUVxQyxRQUFTckMsSUFzRXBCMkIsRUFBc0JFLEVBQWMvRCxXQUNwQytELEVBQWMvRCxVQUFVTyxHQUF1QixXQUM3QyxPQUFPZ0QsTUFFVDFELEVBQVFrRSxjQUFnQkEsRUFLeEJsRSxFQUFRK0csTUFBUSxTQUFTdkYsRUFBU0MsRUFBU0MsRUFBTUMsRUFBYXdDLFFBQ3hDLElBQWhCQSxJQUF3QkEsRUFBYzZDLFNBRTFDLElBQUlDLEVBQU8sSUFBSS9DLEVBQ2IzQyxFQUFLQyxFQUFTQyxFQUFTQyxFQUFNQyxHQUM3QndDLEdBR0YsT0FBT25FLEVBQVF1RyxvQkFBb0I5RSxHQUMvQndGLEVBQ0FBLEVBQUsvQixPQUFPUCxNQUFLLFNBQVNGLEdBQ3hCLE9BQU9BLEVBQU90QixLQUFPc0IsRUFBT3hELE1BQVFnRyxFQUFLL0IsV0F1S2pEbEIsRUFBc0JELEdBRXRCakQsRUFBT2lELEVBQUluRCxFQUFtQixhQU85Qm1ELEVBQUd2RCxHQUFrQixXQUNuQixPQUFPa0QsTUFHVEssRUFBR21ELFNBQVcsV0FDWixNQUFPLHNCQWtDVGxILEVBQVFtSCxLQUFPLFNBQVNDLEdBQ3RCLElBQUlELEVBQU8sR0FDWCxJQUFLLElBQUluRyxLQUFPb0csRUFDZEQsRUFBS3ZCLEtBQUs1RSxHQU1aLE9BSkFtRyxFQUFLRSxVQUlFLFNBQVNuQyxJQUNkLEtBQU9pQyxFQUFLaEIsUUFBUSxDQUNsQixJQUFJbkYsRUFBTW1HLEVBQUtHLE1BQ2YsR0FBSXRHLEtBQU9vRyxFQUdULE9BRkFsQyxFQUFLakUsTUFBUUQsRUFDYmtFLEVBQUsvQixNQUFPLEVBQ0wrQixFQVFYLE9BREFBLEVBQUsvQixNQUFPLEVBQ0wrQixJQXNDWGxGLEVBQVE4RCxPQUFTQSxFQU1qQjdCLEVBQVE5QixVQUFZLENBQ2xCa0csWUFBYXBFLEVBRWI4RCxNQUFPLFNBQVN3QixHQWNkLEdBYkE3RCxLQUFLOEQsS0FBTyxFQUNaOUQsS0FBS3dCLEtBQU8sRUFHWnhCLEtBQUtkLEtBQU9jLEtBQUtiLFdBcGdCakJpQyxFQXFnQkFwQixLQUFLUCxNQUFPLEVBQ1pPLEtBQUtsQixTQUFXLEtBRWhCa0IsS0FBS3RCLE9BQVMsT0FDZHNCLEtBQUtyQixTQXpnQkx5QyxFQTJnQkFwQixLQUFLaUMsV0FBVzFCLFFBQVE0QixJQUVuQjBCLEVBQ0gsSUFBSyxJQUFJYixLQUFRaEQsS0FFUSxNQUFuQmdELEVBQUtlLE9BQU8sSUFDWnJILEVBQU9rRCxLQUFLSSxLQUFNZ0QsS0FDakJSLE9BQU9RLEVBQUtnQixNQUFNLE1BQ3JCaEUsS0FBS2dELFFBbmhCWDVCLElBeWhCRjZDLEtBQU0sV0FDSmpFLEtBQUtQLE1BQU8sRUFFWixJQUNJeUUsRUFEWWxFLEtBQUtpQyxXQUFXLEdBQ0xHLFdBQzNCLEdBQXdCLFVBQXBCOEIsRUFBVzFFLEtBQ2IsTUFBTTBFLEVBQVd2RixJQUduQixPQUFPcUIsS0FBS21FLE1BR2QvRSxrQkFBbUIsU0FBU2dGLEdBQzFCLEdBQUlwRSxLQUFLUCxLQUNQLE1BQU0yRSxFQUdSLElBQUk5RixFQUFVMEIsS0FDZCxTQUFTcUUsRUFBT0MsRUFBS0MsR0FZbkIsT0FYQWpGLEVBQU9FLEtBQU8sUUFDZEYsRUFBT1gsSUFBTXlGLEVBQ2I5RixFQUFRa0QsS0FBTzhDLEVBRVhDLElBR0ZqRyxFQUFRSSxPQUFTLE9BQ2pCSixFQUFRSyxTQXBqQlp5QyxLQXVqQlltRCxFQUdaLElBQUssSUFBSTdCLEVBQUkxQyxLQUFLaUMsV0FBV1EsT0FBUyxFQUFHQyxHQUFLLElBQUtBLEVBQUcsQ0FDcEQsSUFBSWQsRUFBUTVCLEtBQUtpQyxXQUFXUyxHQUN4QnBELEVBQVNzQyxFQUFNUSxXQUVuQixHQUFxQixTQUFqQlIsRUFBTUMsT0FJUixPQUFPd0MsRUFBTyxPQUdoQixHQUFJekMsRUFBTUMsUUFBVTdCLEtBQUs4RCxLQUFNLENBQzdCLElBQUlVLEVBQVc5SCxFQUFPa0QsS0FBS2dDLEVBQU8sWUFDOUI2QyxFQUFhL0gsRUFBT2tELEtBQUtnQyxFQUFPLGNBRXBDLEdBQUk0QyxHQUFZQyxFQUFZLENBQzFCLEdBQUl6RSxLQUFLOEQsS0FBT2xDLEVBQU1FLFNBQ3BCLE9BQU91QyxFQUFPekMsRUFBTUUsVUFBVSxHQUN6QixHQUFJOUIsS0FBSzhELEtBQU9sQyxFQUFNRyxXQUMzQixPQUFPc0MsRUFBT3pDLEVBQU1HLGlCQUdqQixHQUFJeUMsR0FDVCxHQUFJeEUsS0FBSzhELEtBQU9sQyxFQUFNRSxTQUNwQixPQUFPdUMsRUFBT3pDLEVBQU1FLFVBQVUsT0FHM0IsQ0FBQSxJQUFJMkMsRUFNVCxNQUFNLElBQUk3RixNQUFNLDBDQUxoQixHQUFJb0IsS0FBSzhELEtBQU9sQyxFQUFNRyxXQUNwQixPQUFPc0MsRUFBT3pDLEVBQU1HLGdCQVU5QjFDLE9BQVEsU0FBU0csRUFBTWIsR0FDckIsSUFBSyxJQUFJK0QsRUFBSTFDLEtBQUtpQyxXQUFXUSxPQUFTLEVBQUdDLEdBQUssSUFBS0EsRUFBRyxDQUNwRCxJQUFJZCxFQUFRNUIsS0FBS2lDLFdBQVdTLEdBQzVCLEdBQUlkLEVBQU1DLFFBQVU3QixLQUFLOEQsTUFDckJwSCxFQUFPa0QsS0FBS2dDLEVBQU8sZUFDbkI1QixLQUFLOEQsS0FBT2xDLEVBQU1HLFdBQVksQ0FDaEMsSUFBSTJDLEVBQWU5QyxFQUNuQixPQUlBOEMsSUFDVSxVQUFUbEYsR0FDUyxhQUFUQSxJQUNEa0YsRUFBYTdDLFFBQVVsRCxHQUN2QkEsR0FBTytGLEVBQWEzQyxhQUd0QjJDLEVBQWUsTUFHakIsSUFBSXBGLEVBQVNvRixFQUFlQSxFQUFhdEMsV0FBYSxHQUl0RCxPQUhBOUMsRUFBT0UsS0FBT0EsRUFDZEYsRUFBT1gsSUFBTUEsRUFFVCtGLEdBQ0YxRSxLQUFLdEIsT0FBUyxPQUNkc0IsS0FBS3dCLEtBQU9rRCxFQUFhM0MsV0FDbEI5QyxHQUdGZSxLQUFLMkUsU0FBU3JGLElBR3ZCcUYsU0FBVSxTQUFTckYsRUFBUTBDLEdBQ3pCLEdBQW9CLFVBQWhCMUMsRUFBT0UsS0FDVCxNQUFNRixFQUFPWCxJQWNmLE1BWG9CLFVBQWhCVyxFQUFPRSxNQUNTLGFBQWhCRixFQUFPRSxLQUNUUSxLQUFLd0IsS0FBT2xDLEVBQU9YLElBQ00sV0FBaEJXLEVBQU9FLE1BQ2hCUSxLQUFLbUUsS0FBT25FLEtBQUtyQixJQUFNVyxFQUFPWCxJQUM5QnFCLEtBQUt0QixPQUFTLFNBQ2RzQixLQUFLd0IsS0FBTyxPQUNhLFdBQWhCbEMsRUFBT0UsTUFBcUJ3QyxJQUNyQ2hDLEtBQUt3QixLQUFPUSxHQUdQL0MsR0FHVDJGLE9BQVEsU0FBUzdDLEdBQ2YsSUFBSyxJQUFJVyxFQUFJMUMsS0FBS2lDLFdBQVdRLE9BQVMsRUFBR0MsR0FBSyxJQUFLQSxFQUFHLENBQ3BELElBQUlkLEVBQVE1QixLQUFLaUMsV0FBV1MsR0FDNUIsR0FBSWQsRUFBTUcsYUFBZUEsRUFHdkIsT0FGQS9CLEtBQUsyRSxTQUFTL0MsRUFBTVEsV0FBWVIsRUFBTUksVUFDdENHLEVBQWNQLEdBQ1AzQyxJQUtiNEYsTUFBUyxTQUFTaEQsR0FDaEIsSUFBSyxJQUFJYSxFQUFJMUMsS0FBS2lDLFdBQVdRLE9BQVMsRUFBR0MsR0FBSyxJQUFLQSxFQUFHLENBQ3BELElBQUlkLEVBQVE1QixLQUFLaUMsV0FBV1MsR0FDNUIsR0FBSWQsRUFBTUMsU0FBV0EsRUFBUSxDQUMzQixJQUFJdkMsRUFBU3NDLEVBQU1RLFdBQ25CLEdBQW9CLFVBQWhCOUMsRUFBT0UsS0FBa0IsQ0FDM0IsSUFBSXNGLEVBQVN4RixFQUFPWCxJQUNwQndELEVBQWNQLEdBRWhCLE9BQU9rRCxHQU1YLE1BQU0sSUFBSWxHLE1BQU0sMEJBR2xCbUcsY0FBZSxTQUFTekMsRUFBVWYsRUFBWUUsR0FhNUMsT0FaQXpCLEtBQUtsQixTQUFXLENBQ2QvQixTQUFVcUQsRUFBT2tDLEdBQ2pCZixXQUFZQSxFQUNaRSxRQUFTQSxHQUdTLFNBQWhCekIsS0FBS3RCLFNBR1BzQixLQUFLckIsU0E3ckJQeUMsR0Fnc0JPbkMsSUFRSjNDLEdBT3NCMEksRUFBTzFJLFNBR3RDLElBQ0UySSxtQkFBcUI1SSxFQUNyQixNQUFPNkksR0FVUEMsU0FBUyxJQUFLLHlCQUFkQSxDQUF3QzlJLE9DMXVCMUMsU0FBUytJLEVBQW1CQyxFQUFLekUsRUFBU0MsRUFBUXlFLEVBQU9DLEVBQVFqSSxFQUFLcUIsR0FDcEUsSUFDRSxJQUFJMkMsRUFBTytELEVBQUkvSCxHQUFLcUIsR0FDaEJwQixFQUFRK0QsRUFBSy9ELE1BQ2pCLE1BQU80RCxHQUVQLFlBREFOLEVBQU9NLEdBSUxHLEVBQUs3QixLQUNQbUIsRUFBUXJELEdBRVIrRixRQUFRMUMsUUFBUXJELEdBQU8wRCxLQUFLcUUsRUFBT0MsR0F3QnZDLE1BcEJBLFNBQTJCNUYsR0FDekIsT0FBTyxXQUNMLElBQUkzQixFQUFPZ0MsS0FDUHdGLEVBQU9DLFVBQ1gsT0FBTyxJQUFJbkMsU0FBUSxTQUFVMUMsRUFBU0MsR0FDcEMsSUFBSXdFLEVBQU0xRixFQUFHK0YsTUFBTTFILEVBQU13SCxHQUV6QixTQUFTRixFQUFNL0gsR0FDYjZILEVBQW1CQyxFQUFLekUsRUFBU0MsRUFBUXlFLEVBQU9DLEVBQVEsT0FBUWhJLEdBR2xFLFNBQVNnSSxFQUFPM0gsR0FDZHdILEVBQW1CQyxFQUFLekUsRUFBU0MsRUFBUXlFLEVBQU9DLEVBQVEsUUFBUzNILEdBR25FMEgsT0FBTWxFLFFDM0JaLE1BSkEsU0FBeUJ1RSxHQUN2QixHQUFJQyxNQUFNQyxRQUFRRixHQUFNLE9BQU9BLEdDMEJqQyxNQTNCQSxTQUErQkEsRUFBS2pELEdBQ2xDLEdBQXNCLG9CQUFYN0YsUUFBNEJBLE9BQU9FLFlBQVlQLE9BQU9tSixHQUFqRSxDQUNBLElBQUlHLEVBQU8sR0FDUEMsR0FBSyxFQUNMQyxHQUFLLEVBQ0xDLE9BQUs3RSxFQUVULElBQ0UsSUFBSyxJQUFpQzhFLEVBQTdCQyxFQUFLUixFQUFJOUksT0FBT0UsY0FBbUJnSixHQUFNRyxFQUFLQyxFQUFHM0UsUUFBUS9CLFFBQ2hFcUcsRUFBSzVELEtBQUtnRSxFQUFHM0ksUUFFVG1GLEdBQUtvRCxFQUFLckQsU0FBV0MsR0FIOENxRCxHQUFLLElBSzlFLE1BQU9uSSxHQUNQb0ksR0FBSyxFQUNMQyxFQUFLckksVUFFTCxJQUNPbUksR0FBc0IsTUFBaEJJLEVBQVcsUUFBV0EsRUFBVyxpQkFFNUMsR0FBSUgsRUFBSSxNQUFNQyxHQUlsQixPQUFPSCxJQ2RULE1BVkEsU0FBMkJILEVBQUtTLElBQ25CLE1BQVBBLEdBQWVBLEVBQU1ULEVBQUlsRCxVQUFRMkQsRUFBTVQsRUFBSWxELFFBRS9DLElBQUssSUFBSUMsRUFBSSxFQUFHMkQsRUFBTyxJQUFJVCxNQUFNUSxHQUFNMUQsRUFBSTBELEVBQUsxRCxJQUM5QzJELEVBQUszRCxHQUFLaUQsRUFBSWpELEdBR2hCLE9BQU8yRCxHQ0lULE1BVEEsU0FBcUNDLEVBQUdDLEdBQ3RDLEdBQUtELEVBQUwsQ0FDQSxHQUFpQixpQkFBTkEsRUFBZ0IsT0FBT0UsRUFBaUJGLEVBQUdDLEdBQ3RELElBQUlFLEVBQUlqSyxPQUFPQyxVQUFVK0csU0FBUzVELEtBQUswRyxHQUFHdEMsTUFBTSxHQUFJLEdBRXBELE1BRFUsV0FBTnlDLEdBQWtCSCxFQUFFM0QsY0FBYThELEVBQUlILEVBQUUzRCxZQUFZSyxNQUM3QyxRQUFOeUQsR0FBcUIsUUFBTkEsRUFBb0JiLE1BQU1jLEtBQUtKLEdBQ3hDLGNBQU5HLEdBQXFCLDJDQUEyQ0UsS0FBS0YsR0FBV0QsRUFBaUJGLEVBQUdDLFFBQXhHLElDSkYsTUFKQSxXQUNFLE1BQU0sSUFBSWxGLFVBQVUsOElDV3RCLE1BSkEsU0FBd0JzRSxFQUFLakQsR0FDM0IsT0FBT2tFLEVBQWVqQixJQUFRa0IsRUFBcUJsQixFQUFLakQsSUFBTW9FLEVBQTJCbkIsRUFBS2pELElBQU1xRSxLQ0h0RyxNQU5BLFNBQXlCQyxFQUFVQyxHQUNqQyxLQUFNRCxhQUFvQkMsR0FDeEIsTUFBTSxJQUFJNUYsVUFBVSxzQ0NGeEIsU0FBUzZGLEVBQWtCQyxFQUFRQyxHQUNqQyxJQUFLLElBQUkxRSxFQUFJLEVBQUdBLEVBQUkwRSxFQUFNM0UsT0FBUUMsSUFBSyxDQUNyQyxJQUFJMkUsRUFBYUQsRUFBTTFFLEdBQ3ZCMkUsRUFBVzVKLFdBQWE0SixFQUFXNUosYUFBYyxFQUNqRDRKLEVBQVczSixjQUFlLEVBQ3RCLFVBQVcySixJQUFZQSxFQUFXMUosVUFBVyxHQUNqRG5CLE9BQU9nQixlQUFlMkosRUFBUUUsRUFBVy9KLElBQUsrSixJQVVsRCxNQU5BLFNBQXNCSixFQUFhSyxFQUFZQyxHQUc3QyxPQUZJRCxHQUFZSixFQUFrQkQsRUFBWXhLLFVBQVc2SyxHQUNyREMsR0FBYUwsRUFBa0JELEVBQWFNLEdBQ3pDTixHQ0VULE1BZkEsU0FBeUI1SixFQUFLQyxFQUFLQyxHQVlqQyxPQVhJRCxLQUFPRCxFQUNUYixPQUFPZ0IsZUFBZUgsRUFBS0MsRUFBSyxDQUM5QkMsTUFBT0EsRUFDUEUsWUFBWSxFQUNaQyxjQUFjLEVBQ2RDLFVBQVUsSUFHWk4sRUFBSUMsR0FBT0MsRUFHTkYsR0NaTG1LLEVBQUUsV0FBVyxRQUFRQyxVQUFVQyxhQUFhQyxFQUFFLFdBQVcsUUFBUUYsVUFBVUcsY0FBYyxTQUFTQyxFQUFFTCxFQUFFRyxFQUFFRSxFQUFFcEIsRUFBRXFCLEVBQUVwRixFQUFFNEQsR0FBRyxJQUFJLElBQUl5QixFQUFFUCxFQUFFOUUsR0FBRzRELEdBQUcwQixFQUFFRCxFQUFFeEssTUFBTSxNQUFNaUssR0FBRyxZQUFZSyxFQUFFTCxHQUFHTyxFQUFFdEksS0FBS2tJLEVBQUVLLEdBQUcxRSxRQUFRMUMsUUFBUW9ILEdBQUcvRyxLQUFLd0YsRUFBRXFCLEdBQUcsU0FBU3JCLEVBQUVlLEdBQUcsT0FBTyxXQUFXLElBQUlHLEVBQUUzSCxLQUFLeUcsRUFBRWhCLFVBQVUsT0FBTyxJQUFJbkMsa0JBQWtCd0UsRUFBRXBGLEdBQUcsSUFBSTRELEVBQUVrQixFQUFFOUIsTUFBTWlDLEVBQUVsQixHQUFHLFNBQVNzQixFQUFFUCxHQUFHSyxFQUFFdkIsRUFBRXdCLEVBQUVwRixFQUFFcUYsRUFBRUMsRUFBRSxPQUFPUixHQUFHLFNBQVNRLEVBQUVSLEdBQUdLLEVBQUV2QixFQUFFd0IsRUFBRXBGLEVBQUVxRixFQUFFQyxFQUFFLFFBQVFSLEdBQUdPLE9BQUUsT0FBWSxTQUFTRCxFQUFFTixFQUFFRyxHQUFHLE9BQU8sU0FBU0gsR0FBRyxHQUFHNUIsTUFBTUMsUUFBUTJCLEdBQUcsT0FBT0EsRUFBdkMsQ0FBMENBLElBQUksU0FBU0EsRUFBRUcsR0FBRyxHQUFHLG9CQUFvQjlLLFFBQVVBLE9BQU9FLFlBQVlQLE9BQU9nTCxHQUEzRCxDQUFzRSxJQUFJSyxFQUFFLEdBQUdwQixHQUFFLEVBQUdxQixHQUFFLEVBQUdwRixPQUFFLEVBQU8sSUFBSSxJQUFJLElBQUk0RCxFQUFFeUIsRUFBRVAsRUFBRTNLLE9BQU9FLGNBQWMwSixHQUFHSCxFQUFFeUIsRUFBRXZHLFFBQVEvQixRQUFRb0ksRUFBRTNGLEtBQUtvRSxFQUFFL0ksUUFBUW9LLEdBQUdFLEVBQUVwRixTQUFTa0YsR0FBR2xCLEdBQUUsSUFBSyxNQUFNZSxHQUFHTSxHQUFFLEVBQUdwRixFQUFFOEUsRUFBRSxRQUFRLElBQUlmLEdBQUcsTUFBTXNCLEVBQUVFLFFBQVFGLEVBQUVFLFNBQVMsUUFBUSxHQUFHSCxFQUFFLE1BQU1wRixHQUFHLE9BQU9tRixHQUFoVCxDQUFtVEwsRUFBRUcsSUFBSSxTQUFTSCxFQUFFRyxHQUFHLEdBQUlILEVBQUosQ0FBYSxHQUFHLGlCQUFpQkEsRUFBRSxPQUFPOUUsRUFBRThFLEVBQUVHLEdBQUcsSUFBSUUsRUFBRXJMLE9BQU9DLFVBQVUrRyxTQUFTNUQsS0FBSzRILEdBQUd4RCxNQUFNLEdBQUcsR0FBdUQsTUFBcEQsV0FBVzZELEdBQUdMLEVBQUU3RSxjQUFja0YsRUFBRUwsRUFBRTdFLFlBQVlLLE1BQVMsUUFBUTZFLEdBQUcsUUFBUUEsRUFBU2pDLE1BQU1jLEtBQUtjLEdBQU0sY0FBY0ssR0FBRywyQ0FBMkNsQixLQUFLa0IsR0FBVW5GLEVBQUU4RSxFQUFFRyxRQUFsRixHQUFwTixDQUEwU0gsRUFBRUcsSUFBSSxXQUFXLE1BQU0sSUFBSXRHLFVBQVUsNklBQS9CLEdBQStLLFNBQVNxQixFQUFFOEUsRUFBRUcsSUFBSSxNQUFNQSxHQUFHQSxFQUFFSCxFQUFFL0UsVUFBVWtGLEVBQUVILEVBQUUvRSxRQUFRLElBQUksSUFBSW9GLEVBQUUsRUFBRXBCLEVBQUUsSUFBSWIsTUFBTStCLEdBQUdFLEVBQUVGLEVBQUVFLElBQUlwQixFQUFFb0IsR0FBR0wsRUFBRUssR0FBRyxPQUFPcEIsRUFBRSxJQUFJSCxFQUFFLFdBQVcsSUFBSXFCLEVBQUVsQixFQUFFeEIsbUJBQW1CaEMsZUFBZTBFLEVBQUVFLEdBQUcsT0FBTzVDLG1CQUFtQnBILGVBQWU4SixHQUFHLE9BQU8sT0FBT0EsRUFBRTdELEtBQUs2RCxFQUFFbkcsTUFBTSxLQUFLLEVBQUUsT0FBT21HLEVBQUV0SSxPQUFPLFNBQVMsSUFBSWlFLFFBQVEsV0FBVyxJQUFJcUUsRUFBRWxCLEVBQUV4QixtQkFBbUJoQyxlQUFlMEUsRUFBRWxCLEVBQUVxQixHQUFHLElBQUlwRixFQUFFNEQsRUFBRSxPQUFPckIsbUJBQW1CcEgsZUFBZThKLEdBQUcsT0FBTyxPQUFPQSxFQUFFN0QsS0FBSzZELEVBQUVuRyxNQUFNLEtBQUssRUFBRSxPQUFPZ0csS0FBS00sRUFBRSxJQUFJSSxhQUFhLDJDQUEyQyxzQkFBc0JQLEVBQUU3RCxLQUFLLEVBQUU2RCxFQUFFbkcsS0FBSyxFQUFFaUcsVUFBVUMsWUFBWVMsTUFBTSxDQUFDbkYsS0FBSzZFLElBQUksS0FBSyxFQUFFbkYsRUFBRWlGLEVBQUV6SSxLQUFLb0gsRUFBRSxTQUFTa0IsRUFBRUcsR0FBR2pGLEVBQUUwRixvQkFBb0IsU0FBU1osR0FBR08sRUFBRUosRUFBRVIsT0FBTzFJLE1BQU1nSSxFQUFFcUIsSUFBSXBGLEVBQUUyRixpQkFBaUIsU0FBUy9CLEdBQUd5QixFQUFFckYsRUFBRWpFLE1BQU1nSSxFQUFFcUIsR0FBR0gsRUFBRW5HLEtBQUssR0FBRyxNQUFNLEtBQUssR0FBR21HLEVBQUU3RCxLQUFLLEdBQUc2RCxFQUFFVyxHQUFHWCxFQUFFOUMsTUFBTSxHQUFHaUQsRUFBRUgsRUFBRVcsSUFBSSxLQUFLLEdBQUcsSUFBSSxNQUFNLE9BQU9YLEVBQUUxRCxVQUFVMEQsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLFVBQVUsT0FBTyxTQUFTSCxFQUFFSyxHQUFHLE9BQU9GLEVBQUVqQyxNQUFNMUYsS0FBS3lGLFlBQWhsQixLQUFpbUIsS0FBSyxFQUFFLElBQUksTUFBTSxPQUFPa0MsRUFBRTFELFVBQVUwRCxPQUFPLE9BQU8sU0FBU0gsR0FBRyxPQUFPRyxFQUFFakMsTUFBTTFGLEtBQUt5RixZQUFsMkIsR0FBaTNCc0MsRUFBRSxTQUFTUCxFQUFFRyxFQUFFRSxHQUFHLE9BQU9MLEdBQUcsSUFBSSxTQUFTSyxFQUFFLElBQUlLLGFBQWEsb0JBQW9CLG9CQUFvQixNQUFNLFFBQVFQLEVBQUVILEtBQUtRLEVBQUUsV0FBVyxJQUFJSCxFQUFFcEIsRUFBRXhCLG1CQUFtQmhDLGVBQWU0RSxFQUFFbkYsRUFBRXFGLEdBQUcsT0FBTzlDLG1CQUFtQnBILGVBQWVnSyxHQUFHLE9BQU8sT0FBT0EsRUFBRS9ELEtBQUsrRCxFQUFFckcsTUFBTSxLQUFLLEVBQUUsT0FBT3FHLEVBQUV4SSxPQUFPLFNBQVMsSUFBSWlFLFFBQVEsV0FBVyxJQUFJdUUsRUFBRXBCLEVBQUV4QixtQkFBbUJoQyxlQUFlNEUsRUFBRXBCLEVBQUV1QixHQUFHLElBQUlPLEVBQUVDLEVBQUVDLEVBQUUsT0FBT3hELG1CQUFtQnBILGVBQWVnSyxHQUFHLE9BQU8sT0FBT0EsRUFBRS9ELEtBQUsrRCxFQUFFckcsTUFBTSxLQUFLLEVBQUUsT0FBT2dHLEtBQUtHLEtBQUtLLEVBQUUsSUFBSUUsYUFBYSwwRUFBMEUsc0JBQXNCTCxFQUFFL0QsS0FBSyxFQUFFK0QsRUFBRVMsR0FBR2hGLFFBQVF1RSxFQUFFckcsS0FBSyxFQUFFOEUsRUFBRTVELEdBQUcsS0FBSyxFQUFFLE9BQU9tRixFQUFFYSxHQUFHYixFQUFFM0ksS0FBSzJJLEVBQUVyRyxLQUFLLEVBQUVpRyxVQUFVRyxhQUFhZSxhQUFhWixHQUFHLEtBQUssRUFBRSxPQUFPRixFQUFFZSxHQUFHZixFQUFFM0ksS0FBSzJJLEVBQUVnQixHQUFHLENBQUNoQixFQUFFYSxHQUFHYixFQUFFZSxJQUFJZixFQUFFckcsS0FBSyxHQUFHcUcsRUFBRVMsR0FBR1EsSUFBSWxKLEtBQUtpSSxFQUFFUyxHQUFHVCxFQUFFZ0IsSUFBSSxLQUFLLEdBQUdOLEVBQUVWLEVBQUUzSSxLQUFLc0osRUFBRVYsRUFBRVMsRUFBRSxHQUFHRSxFQUFFRCxFQUFFLEdBQUcvQixFQUFFZ0MsR0FBR1osRUFBRXJHLEtBQUssR0FBRyxNQUFNLEtBQUssR0FBR3FHLEVBQUUvRCxLQUFLLEdBQUcrRCxFQUFFa0IsR0FBR2xCLEVBQUVoRCxNQUFNLEdBQUdtRCxFQUFFSCxFQUFFa0IsSUFBSSxLQUFLLEdBQUcsSUFBSSxNQUFNLE9BQU9sQixFQUFFNUQsVUFBVTRELEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLE9BQU8sU0FBU0wsRUFBRUcsR0FBRyxPQUFPRSxFQUFFbkMsTUFBTTFGLEtBQUt5RixZQUF6cEIsS0FBMHFCLEtBQUssRUFBRSxJQUFJLE1BQU0sT0FBT29DLEVBQUU1RCxVQUFVNEQsT0FBTyxPQUFPLFNBQVNMLEVBQUVHLEdBQUcsT0FBT0UsRUFBRW5DLE1BQU0xRixLQUFLeUYsWUFBLzZCLHNrQkNFNTBFdUQsd0JBbUNPQywyQ0FIQSwwQkFDQyxVQUdOQyxFQUFvQkYsRUFBTUcsZ0NBQzNCRCxRQUNFLElBQUloQixhQUFhLGtDQUFtQywwQkFHdERrQixVQUFZLElBQUlGLE9BQ2hCRyxXQUFhLEdBRWxCN00sT0FBTzhNLGVBQ0hOLEVBQU1PLGdCQUNMTixHQUFXLEtBQ2IxSSxTQUFRLHlCQUFFakQsT0FBS0MsVUFDTCxhQUFSRCxJQUF1QkMsRUFBTyxLQUMzQmlNLEVBQW9CUixFQUFNUyw0QkFDMUJELElBQ0xqTSxFQUFRLElBQUlpTSxHQUdkRSxFQUFLTixVQUFVOUwsR0FBT0Msc0VBN0JkeUwsRUFBTUcsK0JBQWlDUSxPQUF1Q0Msa0JBR2pFQyxTQUNoQixJQUFJakwsTUFBTSx1S0FzQ1ZvQixLQUFLb0osb0RBRVlVLEVBQW1CLGFBQWMsQ0FBRUMsT0FBTywyQ0FFeEQsSUFBSW5MLE1BQU0sK0RBRVp3SyxVQUFVWSwyREFFVEMsRUFBZWpLLEtBQUtxSixXQUFXbEksUUFFcEM4SSx5Q0FLSWpLLGlKQUlEQSxLQUFLb0osZ0JBQ0xBLFVBQVVuRixPQUdUakUsNENBSURBLEtBQUtvSixnQkFDTEEsVUFBVWMsUUFHVGxLLDhDQUdTbUssRUFBV0MsaUJBQ3JCcEssS0FBS29KLFdBQWFwSixLQUFLcUssbUJBQW1CRixHQUFZLENBQ3JEbkssS0FBS3FKLFdBQVdjLFNBQ2hCL0Isb0JBQW9CK0IsT0FHcEJHLEVBQVUsU0FBQ0MsT0FDWkMsRUFBaUIsR0FDakJMLElBQWNuQixFQUFNeUIsV0FBV0MsUUFDNUJILEVBQU1JLFNBQVdKLEVBQU1JLFFBQVFsSSxPQUFTLEdBQzdDK0gsRUFBZXRJLEtBQUtxSSxFQUFNSSxRQUFRLEdBQUcsR0FBR0MsWUFJeENSLEdBQVlBLEVBQVMxRSxNQUFNbUYsR0FBT04sVUFBVUMsVUFFMUNwQixVQUFVZixpQkFBaUI4QixFQUFXRyxRQUV0Q2pCLFdBQVdjLEdBQWFHLFNBR3ZCdEssaURBR1ltSyxPQUNiRyxFQUFVdEssS0FBS3FKLFdBQVdjLGVBQzNCZixVQUFVaEIsb0JBQW9CK0IsRUFBV0csVUFFdkN0SyxLQUFLcUosV0FBV2MsR0FFaEJuSyw4REFJRmlFLE9BRUx6SCxPQUFPaUgsS0FBS3pELEtBQUtxSixZQUFZOUksU0FBUSxTQUFDakQsVUFBUXdOLEVBQUsxQyxvQkFBb0I5SyxXQUNsRThMLFVBQVksS0FFVnBKLGdEQUdXbUssV0FDVDNOLE9BQU80RCxPQUFPNEksRUFBTXlCLFlBQVlNLE1BQUssU0FBQ3ZMLFVBQVNBLElBQVMySyw2Q0FyRjFEbkssS0FBS29KLHdCQUdBUyxTQUNOLElBQUlqTCxNQUFNLGtHQXNGZm9NLE9BQU85QixtQkFDUDhCLE9BQU9DLHlCQUNQRCxPQUFPRSxzQkFDUEYsT0FBT0csK0VBTVBILE9BQU94QixtQkFDUHdCLE9BQU9JLHlCQUNQSixPQUFPSyxzQkFDUEwsT0FBT00sK0JBaktKdEMsbUJBQ21CLENBQ3ZCdUMsU0FBVSxLQUNWQyxLQUFNLFFBQ05DLFlBQVksRUFDWkMsZ0JBQWdCLEVBQ2hCQyxnQkFBaUIsRUFDakJDLFdBQVksU0FQUjVDLGVBVWUsQ0FDbkI2QyxVQUFXLFdBQ1hDLFlBQWEsYUFDYkMsSUFBSyxNQUNMQyxNQUFPLFFBQ1BDLFNBQVUsVUFDVnZCLE9BQVEsU0FDUndCLFVBQVcsV0FDWEMsWUFBYSxhQUNiQyxXQUFZLFlBQ1pDLGFBQWMsY0FDZEMsTUFBTyJ9\n","//#region src/function/isFunction.ts\nvar e = (e) => typeof e == \"function\";\n//#endregion\nexport { e as isFunction };\n","import { useCallback, useEffect, useRef } from 'react'\nimport { Vocal as SpeechRecognitionWrapper } from '@untemps/vocal'\n\nconst useVocal = (lang = 'en-US', grammars = null, maxAlternatives = 1, continuous = false, __rsInstance = null) => {\n\tconst ref = useRef(null)\n\n\tuseEffect(() => {\n\t\tif (SpeechRecognitionWrapper.isSupported) {\n\t\t\tref.current = __rsInstance || new SpeechRecognitionWrapper({ lang, grammars, maxAlternatives, continuous })\n\t\t\treturn () => {\n\t\t\t\tref.current.abort()\n\t\t\t\tref.current.cleanup()\n\t\t\t}\n\t\t}\n\t}, [lang, grammars, maxAlternatives, continuous, __rsInstance])\n\n\tconst start = useCallback(() => {\n\t\tif (ref.current) {\n\t\t\tref.current.start()\n\t\t}\n\t}, [])\n\n\tconst stop = useCallback(() => {\n\t\tif (ref.current) {\n\t\t\tref.current.stop()\n\t\t}\n\t}, [])\n\n\tconst abort = useCallback(() => {\n\t\tif (ref.current) {\n\t\t\tref.current.abort()\n\t\t}\n\t}, [])\n\n\tconst subscribe = useCallback((eventType, handler) => {\n\t\tif (ref.current) {\n\t\t\tref.current.addEventListener(eventType, handler)\n\t\t}\n\t}, [])\n\n\tconst unsubscribe = useCallback((eventType, handler) => {\n\t\tif (ref.current) {\n\t\t\tref.current.removeEventListener(eventType, handler)\n\t\t}\n\t}, [])\n\n\tconst clean = useCallback(() => {\n\t\tif (ref.current) {\n\t\t\tref.current.cleanup()\n\t\t}\n\t}, [])\n\n\treturn [ref, { start, stop, abort, subscribe, unsubscribe, clean }]\n}\n\nexport default useVocal\n","import { useCallback, useEffect, useRef } from 'react'\n\nconst useTimeout = (handler, timeout = 0) => {\n\tconst ref = useRef(-1)\n\n\tconst stop = useCallback(() => {\n\t\tclearTimeout(ref.current)\n\t\tref.current = -1\n\t}, [])\n\n\tconst start = useCallback(() => {\n\t\tstop()\n\t\tref.current = setTimeout(handler, timeout)\n\t}, [handler, timeout, stop])\n\n\tuseEffect(() => stop, [stop])\n\n\treturn [start, stop]\n}\n\nexport default useTimeout\n","import { useEffect, useMemo, useRef } from 'react'\n\nconst useCommands = (commands, precision = 0.4) => {\n\tconst normalized = useMemo(\n\t\t() =>\n\t\t\t!!commands\n\t\t\t\t? Object.entries(commands).reduce((acc, [key, value]) => ({ ...acc, [key.toLowerCase()]: value }), {})\n\t\t\t\t: {},\n\t\t[commands]\n\t)\n\n\tconst keys = useMemo(() => Object.keys(normalized), [normalized])\n\n\t// Fuzzy matching is only needed for phrase command keys.\n\t// Single-word keys use exact case-insensitive lookup — simpler and no false positives.\n\tconst hasPhraseKeys = useMemo(() => keys.some((k) => k.includes(' ')), [keys])\n\n\t// Lazy-loaded so consumers using only single-word commands incur no bundle cost.\n\tconst fuseRef = useRef(null)\n\n\tuseEffect(() => {\n\t\tif (!hasPhraseKeys) {\n\t\t\tfuseRef.current = null\n\t\t\treturn\n\t\t}\n\t\timport('fuse.js')\n\t\t\t.then((module) => {\n\t\t\t\tconst Fuse = module.default ?? module\n\t\t\t\tfuseRef.current = new Fuse(keys, { includeScore: true, ignoreLocation: true })\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\tif (process.env.NODE_ENV !== 'production') {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t'[react-vocal] fuse.js is not installed. Phrase command keys will fall back to exact matching. ' +\n\t\t\t\t\t\t\t'Install fuse.js to enable fuzzy matching: npm install fuse.js'\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t})\n\t}, [hasPhraseKeys, keys])\n\n\tconst triggerCommand = (rawInput) => {\n\t\tif (!keys.length) return null\n\n\t\tif (!hasPhraseKeys) {\n\t\t\tconst words = rawInput.trim().split(/\\s+/)\n\t\t\tconst targets = words.length > 1 ? words : [rawInput.trim()]\n\t\t\tfor (const w of targets) {\n\t\t\t\tconst commandKey = w.toLowerCase()\n\t\t\t\tif (commandKey in normalized) return normalized[commandKey]?.(w, commandKey)\n\t\t\t}\n\t\t\treturn null\n\t\t}\n\n\t\tconst fuse = fuseRef.current\n\t\tif (fuse) {\n\t\t\tconst result = fuse.search(rawInput).filter((r) => r.score < precision)\n\t\t\tif (result?.length) {\n\t\t\t\tconst commandKey = result[0].item.toLowerCase()\n\t\t\t\treturn normalized[commandKey]?.(rawInput, commandKey)\n\t\t\t}\n\t\t} else {\n\t\t\t// `k.includes(lInput)` can produce false positives when input is short\n\t\t\t// (e.g. \"rouge\" matches \"change en rouge\"). Accepted tradeoff: this branch\n\t\t\t// only runs when fuse.js is absent, so degraded precision is expected.\n\t\t\tconst lInput = rawInput.toLowerCase()\n\t\t\tconst commandKey = keys.find((k) => lInput.includes(k) || k.includes(lInput))\n\t\t\tif (commandKey) return normalized[commandKey]?.(rawInput, commandKey)\n\t\t}\n\t\treturn null\n\t}\n\n\treturn triggerCommand\n}\n\nexport default useCommands\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import React from 'react'\n\nconst Icon = ({ color = 'black', activeColor = 'red', isActive = false }) => {\n\treturn (\n\t\t<svg\n\t\t\tdata-testid=\"__icon-root__\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\twidth=\"100%\"\n\t\t\theight=\"100%\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t>\n\t\t\t<g>\n\t\t\t\t<path\n\t\t\t\t\tdata-testid=\"__icon-path__\"\n\t\t\t\t\tfill={color}\n\t\t\t\t\td=\"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z\"\n\t\t\t\t/>\n\t\t\t\t{isActive && <circle data-testid=\"__icon-active__\" fill={activeColor} cx=\"16\" cy=\"4\" r=\"4\" />}\n\t\t\t</g>\n\t\t</svg>\n\t)\n}\n\nexport default Icon\n","import React, { cloneElement, isValidElement, useCallback, useMemo, useRef, useState } from 'react'\nimport { Vocal as SpeechRecognitionWrapper } from '@untemps/vocal'\nimport { isFunction } from '@untemps/utils/function/isFunction'\n\nimport useVocal from '../hooks/useVocal'\nimport useTimeout from '../hooks/useTimeout'\nimport useCommands from '../hooks/useCommands'\n\nimport Icon from './Icon'\n\nconst tryMatchCommand = (segmentData, trigger) => {\n\tfor (const { alternatives } of segmentData) {\n\t\tfor (const a of alternatives) {\n\t\t\tif (trigger(a) !== null) return\n\t\t}\n\t}\n}\n\nconst Vocal = ({\n\tchildren,\n\tcommands = null,\n\tlang = 'en-US',\n\tgrammars = null,\n\ttimeout = 3000,\n\tsilenceTimeout = null,\n\tprecision = 0.4, // Fuse.js score threshold for phrase commands only; single-word commands always use exact lookup\n\tmaxAlternatives = 1,\n\tcontinuous = false,\n\tariaLabel = 'start recognition',\n\tstyle = null,\n\tclassName = null,\n\toutlineStyle = '2px solid',\n\tonStart = null,\n\tonEnd = null,\n\tonSpeechStart = null,\n\tonSpeechEnd = null,\n\tonResult = null,\n\tonError = null,\n\tonNoMatch = null,\n\t__rsInstance,\n}) => {\n\tconst buttonRef = useRef(null)\n\tconst [isListening, setIsListening] = useState(false)\n\n\tconst [, { start, stop, subscribe, unsubscribe }] = useVocal(lang, grammars, maxAlternatives, continuous, __rsInstance)\n\tconst triggerCommand = useCommands(commands, precision)\n\n\tconst propsRef = useRef({})\n\tpropsRef.current = { onStart, onEnd, onSpeechStart, onSpeechEnd, onResult, onError, onNoMatch }\n\n\tconst continuousRef = useRef(continuous)\n\tcontinuousRef.current = continuous\n\n\t// In continuous mode, transcript accumulates across segments and is only emitted via onResult on session end\n\tconst accumulatedRef = useRef({ transcript: '', event: null })\n\n\tconst triggerCommandRef = useRef(triggerCommand)\n\ttriggerCommandRef.current = triggerCommand\n\n\tconst unsubscribeAllRef = useRef(null)\n\tconst onEndRef = useRef(null)\n\n\tconst silenceTimeoutRef = useRef(silenceTimeout)\n\tsilenceTimeoutRef.current = silenceTimeout\n\n\t// Breaks the circular dep: _onEnd → useTimeout(handler) → startTimer captures _onEnd\n\tconst stableTimerCb = useCallback(() => onEndRef.current?.(), [])\n\tconst [startTimer, stopTimer] = useTimeout(stableTimerCb, timeout)\n\tconst [startSilenceTimer, stopSilenceTimer] = useTimeout(stableTimerCb, silenceTimeout ?? 0)\n\n\tconst stopRecognition = useCallback(() => {\n\t\ttry {\n\t\t\tsetIsListening(false)\n\t\t\tstop()\n\t\t} catch (error) {\n\t\t\tpropsRef.current.onError?.(error)\n\t\t\tunsubscribeAllRef.current?.()\n\t\t}\n\t}, [stop])\n\n\tconst _onStart = useCallback(\n\t\t(e) => {\n\t\t\tstartTimer()\n\t\t\tpropsRef.current.onStart?.(e)\n\t\t},\n\t\t[startTimer]\n\t)\n\n\tconst _onSpeechStart = useCallback(\n\t\t(e) => {\n\t\t\tstopTimer()\n\t\t\tpropsRef.current.onSpeechStart?.(e)\n\t\t},\n\t\t[stopTimer]\n\t)\n\n\tconst _onSpeechEnd = useCallback(\n\t\t(e) => {\n\t\t\tstartTimer()\n\t\t\tpropsRef.current.onSpeechEnd?.(e)\n\t\t},\n\t\t[startTimer]\n\t)\n\n\tconst _onResult = useCallback(\n\t\t(event) => {\n\t\t\tconst segmentData = Array.from(event?.results ?? [], (segment) => {\n\t\t\t\tlet best = { confidence: -Infinity, transcript: '' }\n\t\t\t\tconst alternatives = []\n\t\t\t\tfor (let j = 0; j < segment.length; j++) {\n\t\t\t\t\tconst alt = segment[j]\n\t\t\t\t\talternatives.push(alt.transcript ?? '')\n\t\t\t\t\tif (alt.confidence === undefined || alt.confidence > best.confidence) {\n\t\t\t\t\t\tbest = alt\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn { best: best.transcript ?? '', alternatives }\n\t\t\t})\n\t\t\tconst transcript = segmentData.map((s) => s.best).join('')\n\n\t\t\tstopTimer()\n\t\t\tif (continuousRef.current) {\n\t\t\t\t// Accumulate — onResult fires once at session end, not after each segment\n\t\t\t\taccumulatedRef.current.transcript = transcript\n\t\t\t\taccumulatedRef.current.event = event\n\t\t\t\tif (silenceTimeoutRef.current > 0) startSilenceTimer()\n\t\t\t} else {\n\t\t\t\ttryMatchCommand(segmentData, triggerCommandRef.current)\n\t\t\t\tstopRecognition()\n\t\t\t\tpropsRef.current.onResult?.(transcript, event)\n\t\t\t}\n\t\t},\n\t\t[stopTimer, startSilenceTimer, stopRecognition]\n\t)\n\n\tconst _onError = useCallback(\n\t\t(error) => {\n\t\t\tstopRecognition()\n\t\t\tpropsRef.current.onError?.(error)\n\t\t},\n\t\t[stopRecognition]\n\t)\n\n\tconst _onNoMatch = useCallback(\n\t\t(e) => {\n\t\t\tstopTimer()\n\t\t\tstopRecognition()\n\t\t\tpropsRef.current.onNoMatch?.(e)\n\t\t},\n\t\t[stopTimer, stopRecognition]\n\t)\n\n\tconst _onEnd = useCallback(\n\t\t(e) => {\n\t\t\tstopTimer()\n\t\t\tstopSilenceTimer()\n\t\t\ttry {\n\t\t\t\tstopRecognition()\n\t\t\t\tunsubscribeAllRef.current?.()\n\t\t\t\tif (continuousRef.current && accumulatedRef.current.transcript) {\n\t\t\t\t\tpropsRef.current.onResult?.(accumulatedRef.current.transcript, accumulatedRef.current.event)\n\t\t\t\t\taccumulatedRef.current.transcript = ''\n\t\t\t\t\taccumulatedRef.current.event = null\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tpropsRef.current.onEnd?.(e)\n\t\t\t}\n\t\t},\n\t\t[stopTimer, stopSilenceTimer, stopRecognition]\n\t)\n\n\tonEndRef.current = _onEnd\n\n\tconst HANDLERS = useMemo(\n\t\t() => ({\n\t\t\tstart: _onStart,\n\t\t\tend: _onEnd,\n\t\t\tspeechstart: _onSpeechStart,\n\t\t\tspeechend: _onSpeechEnd,\n\t\t\tresult: _onResult,\n\t\t\terror: _onError,\n\t\t\tnomatch: _onNoMatch,\n\t\t}),\n\t\t[_onStart, _onEnd, _onSpeechStart, _onSpeechEnd, _onResult, _onError, _onNoMatch]\n\t)\n\n\t// Assigned inline (not in useEffect) so it's ready before any event fires\n\tunsubscribeAllRef.current = () => Object.entries(HANDLERS).forEach(([event, fn]) => unsubscribe?.(event, fn))\n\n\tconst startRecognition = useCallback(() => {\n\t\ttry {\n\t\t\taccumulatedRef.current.transcript = ''\n\t\t\taccumulatedRef.current.event = null\n\t\t\tstopSilenceTimer()\n\t\t\tsetIsListening(true)\n\t\t\tObject.entries(HANDLERS).forEach(([event, fn]) => subscribe(event, fn))\n\t\t\tstart()\n\t\t} catch (error) {\n\t\t\t_onError(error)\n\t\t}\n\t}, [HANDLERS, subscribe, start, stopSilenceTimer, _onError])\n\n\tconst _onFocus = () => {\n\t\tif (!className && outlineStyle) {\n\t\t\tbuttonRef.current.style.outline = outlineStyle\n\t\t}\n\t}\n\n\tconst _onBlur = () => {\n\t\tif (!className && outlineStyle) {\n\t\t\tbuttonRef.current.style.outline = 'none'\n\t\t}\n\t}\n\n\tconst _renderDefault = () => (\n\t\t<button\n\t\t\tdata-testid=\"__vocal-root__\"\n\t\t\tref={buttonRef}\n\t\t\taria-label={ariaLabel}\n\t\t\taria-pressed={isListening}\n\t\t\tstyle={\n\t\t\t\tclassName\n\t\t\t\t\t? null\n\t\t\t\t\t: {\n\t\t\t\t\t\t\twidth: 24,\n\t\t\t\t\t\t\theight: 24,\n\t\t\t\t\t\t\tbackgroundColor: 'transparent', // `background: none` shorthand resets all sub-properties; jsdom 29 + jest-dom v6 don't reflect that correctly via getComputedStyle\n\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\tcursor: !continuous && isListening ? 'default' : 'pointer',\n\t\t\t\t\t\t\t...style,\n\t\t\t\t\t }\n\t\t\t}\n\t\t\tclassName={className}\n\t\t\tonFocus={_onFocus}\n\t\t\tonBlur={_onBlur}\n\t\t\tonClick={isListening ? stopRecognition : startRecognition}\n\t\t>\n\t\t\t<Icon isActive={isListening} color=\"#aaa\" />\n\t\t</button>\n\t)\n\n\tconst _renderChildren = () => {\n\t\tif (SpeechRecognitionWrapper.isSupported) {\n\t\t\tif (isFunction(children)) {\n\t\t\t\treturn children(startRecognition, stopRecognition, isListening)\n\t\t\t} else if (isValidElement(children)) {\n\t\t\t\treturn cloneElement(children, {\n\t\t\t\t\t...(!isListening && { onClick: startRecognition }),\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\treturn _renderDefault()\n\t\t\t}\n\t\t}\n\t\treturn null\n\t}\n\n\treturn _renderChildren()\n}\n\nexport default Vocal\n","import Vocal from './components/Vocal'\nimport { Vocal as SpeechRecognitionWrapper } from '@untemps/vocal'\n\nexport { default as useVocal } from './hooks/useVocal'\nexport const isSupported = SpeechRecognitionWrapper.isSupported\n\nexport default Vocal\n"],"x_google_ignoreList":[0,1,5,6,7],"mappings":";;;;;IAAI,IAAE,SAAS,GAAE,GAAE,GAAE;AAAC,QAAO,EAAE,IAAE;EAAC,MAAK;EAAE,SAAQ,EAAE;EAAC,SAAQ,SAAS,GAAE,GAAE;AAAC,UAAO,WAAU;AAAC,UAAU,MAAM,0EAA0E;KAAQ,KAAN,QAAS,EAAE,KAAK;;EAAE,EAAC,EAAE,QAAQ,EAAC,EAAE;GAAU,SAAS,GAAE;CAAC,IAAI,IAAE,SAAS,GAAE;EAAC,IAAI,IAAE,OAAO,WAAU,IAAE,EAAE,gBAAe,IAAc,OAAO,UAAnB,aAA0B,SAAO,EAAE,EAAC,IAAE,EAAE,YAAU,cAAa,IAAE,EAAE,iBAAe,mBAAkB,IAAE,EAAE,eAAa;EAAgB,SAAS,EAAE,GAAE,GAAE,GAAE;AAAC,UAAO,OAAO,eAAe,GAAE,GAAE;IAAC,OAAM;IAAE,YAAW,CAAC;IAAE,cAAa,CAAC;IAAE,UAAS,CAAC;IAAE,CAAC,EAAC,EAAE;;AAAG,MAAG;AAAC,KAAE,EAAE,EAAC,GAAG;UAAS;AAAC,OAAE,SAAS,GAAE,GAAE,GAAE;AAAC,WAAO,EAAE,KAAG;;;EAAG,SAAS,EAAE,GAAE,GAAE,GAAE,GAAE;GAAC,IAAI,IAAE,KAAG,EAAE,qBAAqB,IAAE,IAAE,GAAE,IAAE,OAAO,OAAO,EAAE,UAAU;AAAgB,UAAO,EAAE,UAAQ,SAAS,GAAE,GAAE,GAAE;IAAC,IAAI,IAAE;AAAiB,WAAO,SAAS,GAAE,GAAE;AAAC,SAAiB,MAAd,YAAgB,OAAU,MAAM,+BAA+B;AAAC,SAAiB,MAAd,aAAgB;AAAC,UAAa,MAAV,QAAY,OAAM;AAAE,aAAO,GAAG;;AAAC,UAAI,EAAE,SAAO,GAAE,EAAE,MAAI,KAAI;MAAC,IAAI,IAAE,EAAE;AAAS,UAAG,GAAE;OAAC,IAAI,IAAE,EAAE,GAAE,EAAE;AAAC,WAAG,GAAE;AAAC,YAAG,MAAI,EAAE;AAAS,eAAO;;;AAAG,UAAY,EAAE,WAAX,OAAkB,GAAE,OAAK,EAAE,QAAM,EAAE;eAAsB,EAAE,WAAZ,SAAmB;AAAC,WAAsB,MAAnB,iBAAqB,OAAM,IAAE,aAAY,EAAE;AAAI,SAAE,kBAAkB,EAAE,IAAI;YAAK,CAAW,EAAE,WAAb,YAAqB,EAAE,OAAO,UAAS,EAAE,IAAI;AAAC,UAAE;MAAY,IAAI,IAAE,EAAE,GAAE,GAAE,EAAE;AAAC,UAAc,EAAE,SAAb,UAAkB;AAAC,WAAG,IAAE,EAAE,OAAK,cAAY,kBAAiB,EAAE,QAAM,EAAE;AAAS,cAAM;QAAC,OAAM,EAAE;QAAI,MAAK,EAAE;QAAK;;AAAC,MAAU,EAAE,SAAZ,YAAmB,IAAE,aAAY,EAAE,SAAO,SAAQ,EAAE,MAAI,EAAE;;;KAAQ,GAAE,GAAE,IAAzsB,EAAE,KAAG,EAAE,CAAmsB,CAAC,EAAC;;EAAE,SAAS,EAAE,GAAE,GAAE,GAAE;AAAC,OAAG;AAAC,WAAM;KAAC,MAAK;KAAS,KAAI,EAAE,KAAK,GAAE,EAAE;KAAC;YAAO,GAAE;AAAC,WAAM;KAAC,MAAK;KAAQ,KAAI;KAAE;;;AAAE,IAAE,OAAK;EAAE,IAAI,IAAE,EAAE;EAAC,SAAS,IAAG;EAAE,SAAS,IAAG;EAAE,SAAS,IAAG;EAAE,IAAI,IAAE,EAAE;AAAC,IAAE,KAAG,WAAU;AAAC,UAAO;;EAAM,IAAI,IAAE,OAAO,gBAAe,IAAE,KAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAC,OAAG,MAAI,KAAG,EAAE,KAAK,GAAE,EAAE,KAAG,IAAE;EAAG,IAAI,IAAE,EAAE,YAAU,EAAE,YAAU,OAAO,OAAO,EAAE;EAAC,SAAS,EAAE,GAAE;AAAC;IAAC;IAAO;IAAQ;IAAS,CAAC,SAAS,SAAS,GAAE;AAAC,MAAE,GAAE,IAAG,SAAS,GAAE;AAAC,YAAO,KAAK,QAAQ,GAAE,EAAE;OAAG;MAAG;;EAAC,SAAS,EAAE,GAAE,GAAE;GAAC,IAAI;AAAE,QAAK,UAAQ,SAAS,GAAE,GAAE;IAAC,SAAS,IAAG;AAAC,YAAO,IAAI,GAAG,SAAS,GAAE,GAAE;AAAC,OAAC,SAAS,EAAE,GAAE,GAAE,GAAE,GAAE;OAAC,IAAI,IAAE,EAAE,EAAE,IAAG,GAAE,EAAE;AAAC,WAAa,EAAE,SAAZ,SAAiB;QAAC,IAAI,IAAE,EAAE,KAAI,IAAE,EAAE;AAAM,eAAO,KAAa,OAAO,KAAjB,YAAoB,EAAE,KAAK,GAAE,UAAU,GAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,SAAS,GAAE;AAAC,WAAE,QAAO,GAAE,GAAE,EAAE;aAAI,SAAS,GAAE;AAAC,WAAE,SAAQ,GAAE,GAAE,EAAE;WAAG,GAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,SAAS,GAAE;AAAC,WAAE,QAAM,GAAE,EAAE,EAAE;aAAI,SAAS,GAAE;AAAC,gBAAO,EAAE,SAAQ,GAAE,GAAE,EAAE;WAAG;;AAAC,SAAE,EAAE,IAAI;SAAE,GAAE,GAAE,GAAE,EAAE;QAAG;;AAAC,WAAO,IAAE,IAAE,EAAE,KAAK,GAAE,EAAE,GAAC,GAAG;;;EAAE,SAAS,EAAE,GAAE,GAAE;GAAC,IAAI,IAAE,EAAE,SAAS,EAAE;AAAQ,OAAY,MAAT,KAAK,GAAM;AAAC,QAAG,EAAE,WAAS,MAAe,EAAE,WAAZ,SAAmB;AAAC,SAAG,EAAE,SAAS,WAAS,EAAE,SAAO,UAAS,EAAE,MAAI,KAAK,GAAE,EAAE,GAAE,EAAE,EAAW,EAAE,WAAZ,SAAoB,QAAO;AAAE,OAAE,SAAO,SAAQ,EAAE,MAAI,gBAAI,UAAU,iDAAiD;;AAAC,WAAO;;GAAE,IAAI,IAAE,EAAE,GAAE,EAAE,UAAS,EAAE,IAAI;AAAC,OAAa,EAAE,SAAZ,QAAiB,QAAO,EAAE,SAAO,SAAQ,EAAE,MAAI,EAAE,KAAI,EAAE,WAAS,MAAK;GAAE,IAAI,IAAE,EAAE;AAAI,UAAO,IAAE,EAAE,QAAM,EAAE,EAAE,cAAY,EAAE,OAAM,EAAE,OAAK,EAAE,SAAmB,EAAE,WAAb,aAAsB,EAAE,SAAO,QAAO,EAAE,MAAI,KAAK,IAAG,EAAE,WAAS,MAAK,KAAG,KAAG,EAAE,SAAO,SAAQ,EAAE,MAAI,gBAAI,UAAU,mCAAmC,EAAC,EAAE,WAAS,MAAK;;EAAG,SAAS,EAAE,GAAE;GAAC,IAAI,IAAE,EAAC,QAAO,EAAE,IAAG;AAAC,QAAK,MAAI,EAAE,WAAS,EAAE,KAAI,KAAK,MAAI,EAAE,aAAW,EAAE,IAAG,EAAE,WAAS,EAAE,KAAI,KAAK,WAAW,KAAK,EAAE;;EAAC,SAAS,EAAE,GAAE;GAAC,IAAI,IAAE,EAAE,cAAY,EAAE;AAAC,KAAE,OAAK,UAAS,OAAO,EAAE,KAAI,EAAE,aAAW;;EAAE,SAAS,EAAE,GAAE;AAAC,QAAK,aAAW,CAAC,EAAC,QAAO,QAAO,CAAC,EAAC,EAAE,QAAQ,GAAE,KAAK,EAAC,KAAK,MAAM,CAAC,EAAE;;EAAC,SAAS,EAAE,GAAE;AAAC,OAAG,GAAE;IAAC,IAAI,IAAE,EAAE;AAAG,QAAG,EAAE,QAAO,EAAE,KAAK,EAAE;AAAC,QAAe,OAAO,EAAE,QAArB,WAA0B,QAAO;AAAE,QAAG,CAAC,MAAM,EAAE,OAAO,EAAC;KAAC,IAAI,IAAE,IAAG,IAAE,SAAS,IAAG;AAAC,aAAK,EAAE,IAAE,EAAE,QAAQ,KAAG,EAAE,KAAK,GAAE,EAAE,CAAC,QAAO,EAAE,QAAM,EAAE,IAAG,EAAE,OAAK,CAAC,GAAE;AAAE,aAAO,EAAE,QAAM,KAAK,GAAE,EAAE,OAAK,CAAC,GAAE;;AAAG,YAAO,EAAE,OAAK;;;AAAG,UAAM,EAAC,MAAK,GAAE;;EAAC,SAAS,IAAG;AAAC,UAAM;IAAC,OAAM,KAAK;IAAE,MAAK,CAAC;IAAE;;AAAC,SAAO,EAAE,YAAU,EAAE,cAAY,GAAE,EAAE,cAAY,GAAE,EAAE,cAAY,EAAE,GAAE,GAAE,oBAAoB,EAAC,EAAE,sBAAoB,SAAS,GAAE;GAAC,IAAI,IAAc,OAAO,KAAnB,cAAsB,EAAE;AAAY,UAAM,CAAC,CAAC,MAAI,MAAI,MAA0B,EAAE,eAAa,EAAE,UAAxC;KAAgD,EAAE,OAAK,SAAS,GAAE;AAAC,UAAO,OAAO,iBAAe,OAAO,eAAe,GAAE,EAAE,IAAE,EAAE,YAAU,GAAE,EAAE,GAAE,GAAE,oBAAoB,GAAE,EAAE,YAAU,OAAO,OAAO,EAAE,EAAC;KAAG,EAAE,QAAM,SAAS,GAAE;AAAC,UAAM,EAAC,SAAQ,GAAE;KAAE,EAAE,EAAE,UAAU,EAAC,EAAE,UAAU,KAAG,WAAU;AAAC,UAAO;KAAM,EAAE,gBAAc,GAAE,EAAE,QAAM,SAAS,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,GAAS,MAAT,KAAK,MAAQ,IAAE;GAAS,IAAI,IAAE,IAAI,EAAE,EAAE,GAAE,GAAE,GAAE,EAAE,EAAC,EAAE;AAAC,UAAO,EAAE,oBAAoB,EAAE,GAAC,IAAE,EAAE,MAAM,CAAC,MAAM,SAAS,GAAE;AAAC,WAAO,EAAE,OAAK,EAAE,QAAM,EAAE,MAAM;MAAG;KAAE,EAAE,EAAE,EAAC,EAAE,GAAE,GAAE,YAAY,EAAC,EAAE,KAAG,WAAU;AAAC,UAAO;KAAM,EAAE,WAAS,WAAU;AAAC,UAAM;KAAsB,EAAE,OAAK,SAAS,GAAE;GAAC,IAAI,IAAE,EAAE;AAAC,QAAI,IAAI,KAAK,EAAE,GAAE,KAAK,EAAE;AAAC,UAAO,EAAE,SAAS,EAAC,SAAS,IAAG;AAAC,WAAK,EAAE,SAAQ;KAAC,IAAI,IAAE,EAAE,KAAK;AAAC,SAAG,KAAK,EAAE,QAAO,EAAE,QAAM,GAAE,EAAE,OAAK,CAAC,GAAE;;AAAE,WAAO,EAAE,OAAK,CAAC,GAAE;;KAAI,EAAE,SAAO,GAAE,EAAE,YAAU;GAAC,aAAY;GAAE,OAAM,SAAS,GAAE;AAAC,QAAG,KAAK,OAAK,GAAE,KAAK,OAAK,GAAE,KAAK,OAAK,KAAK,QAAM,KAAK,GAAE,KAAK,OAAK,CAAC,GAAE,KAAK,WAAS,MAAK,KAAK,SAAO,QAAO,KAAK,MAAI,KAAK,GAAE,KAAK,WAAW,QAAQ,EAAE,EAAC,CAAC,EAAE,MAAI,IAAI,KAAK,KAAK,CAAM,EAAE,OAAO,EAAE,KAAjB,OAAmB,EAAE,KAAK,MAAK,EAAE,IAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,KAAG,KAAK,KAAG,KAAK;;GAAI,MAAK,WAAU;AAAC,SAAK,OAAK,CAAC;IAAE,IAAI,IAAE,KAAK,WAAW,GAAG;AAAW,QAAa,EAAE,SAAZ,QAAiB,OAAM,EAAE;AAAI,WAAO,KAAK;;GAAM,mBAAkB,SAAS,GAAE;AAAC,QAAG,KAAK,KAAK,OAAM;IAAE,IAAI,IAAE;IAAK,SAAS,EAAE,GAAE,GAAE;AAAC,YAAO,EAAE,OAAK,SAAQ,EAAE,MAAI,GAAE,EAAE,OAAK,GAAE,MAAI,EAAE,SAAO,QAAO,EAAE,MAAI,KAAK,IAAG,CAAC,CAAC;;AAAE,SAAI,IAAI,IAAE,KAAK,WAAW,SAAO,GAAE,KAAG,GAAE,EAAE,GAAE;KAAC,IAAI,IAAE,KAAK,WAAW,IAAG,IAAE,EAAE;AAAW,SAAY,EAAE,WAAX,OAAkB,QAAO,EAAE,MAAM;AAAC,SAAG,EAAE,UAAQ,KAAK,MAAK;MAAC,IAAI,IAAE,EAAE,KAAK,GAAE,WAAW,EAAC,IAAE,EAAE,KAAK,GAAE,aAAa;AAAC,UAAG,KAAG,GAAE;AAAC,WAAG,KAAK,OAAK,EAAE,SAAS,QAAO,EAAE,EAAE,UAAS,CAAC,EAAE;AAAC,WAAG,KAAK,OAAK,EAAE,WAAW,QAAO,EAAE,EAAE,WAAW;iBAAS;WAAM,KAAK,OAAK,EAAE,SAAS,QAAO,EAAE,EAAE,UAAS,CAAC,EAAE;aAAK;AAAC,WAAG,CAAC,EAAE,OAAU,MAAM,yCAAyC;AAAC,WAAG,KAAK,OAAK,EAAE,WAAW,QAAO,EAAE,EAAE,WAAW;;;;;GAAK,QAAO,SAAS,GAAE,GAAE;AAAC,SAAI,IAAI,IAAE,KAAK,WAAW,SAAO,GAAE,KAAG,GAAE,EAAE,GAAE;KAAC,IAAI,IAAE,KAAK,WAAW;AAAG,SAAG,EAAE,UAAQ,KAAK,QAAM,EAAE,KAAK,GAAE,aAAa,IAAE,KAAK,OAAK,EAAE,YAAW;MAAC,IAAI,IAAE;AAAE;;;AAAO,UAAc,MAAV,WAA0B,MAAb,eAAiB,EAAE,UAAQ,KAAG,KAAG,EAAE,eAAa,IAAE;IAAM,IAAI,IAAE,IAAE,EAAE,aAAW,EAAE;AAAC,WAAO,EAAE,OAAK,GAAE,EAAE,MAAI,GAAE,KAAG,KAAK,SAAO,QAAO,KAAK,OAAK,EAAE,YAAW,KAAG,KAAK,SAAS,EAAE;;GAAE,UAAS,SAAS,GAAE,GAAE;AAAC,QAAa,EAAE,SAAZ,QAAiB,OAAM,EAAE;AAAI,WAAgB,EAAE,SAAZ,WAA+B,EAAE,SAAf,aAAoB,KAAK,OAAK,EAAE,MAAe,EAAE,SAAb,YAAmB,KAAK,OAAK,KAAK,MAAI,EAAE,KAAI,KAAK,SAAO,UAAS,KAAK,OAAK,SAAkB,EAAE,SAAb,YAAmB,MAAI,KAAK,OAAK,IAAG;;GAAG,QAAO,SAAS,GAAE;AAAC,SAAI,IAAI,IAAE,KAAK,WAAW,SAAO,GAAE,KAAG,GAAE,EAAE,GAAE;KAAC,IAAI,IAAE,KAAK,WAAW;AAAG,SAAG,EAAE,eAAa,EAAE,QAAO,KAAK,SAAS,EAAE,YAAW,EAAE,SAAS,EAAC,EAAE,EAAE,EAAC;;;GAAI,OAAM,SAAS,GAAE;AAAC,SAAI,IAAI,IAAE,KAAK,WAAW,SAAO,GAAE,KAAG,GAAE,EAAE,GAAE;KAAC,IAAI,IAAE,KAAK,WAAW;AAAG,SAAG,EAAE,WAAS,GAAE;MAAC,IAAI,IAAE,EAAE;AAAW,UAAa,EAAE,SAAZ,SAAiB;OAAC,IAAI,IAAE,EAAE;AAAI,SAAE,EAAE;;AAAC,aAAO;;;AAAG,UAAU,MAAM,wBAAwB;;GAAE,eAAc,SAAS,GAAE,GAAE,GAAE;AAAC,WAAO,KAAK,WAAS;KAAC,UAAS,EAAE,EAAE;KAAC,YAAW;KAAE,SAAQ;KAAE,EAAU,KAAK,WAAd,WAAuB,KAAK,MAAI,KAAK,IAAG;;GAAG,EAAC;GAAG,EAAE,QAAQ;AAAC,KAAG;AAAC,uBAAmB;SAAU;AAAC,WAAS,KAAI,yBAAyB,CAAC,EAAE;;GAAI;AAAC,SAASA,EAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,KAAG;EAAC,IAAI,IAAE,EAAE,GAAG,EAAE,EAAC,IAAE,EAAE;UAAY,GAAE;AAAa,IAAE,EAAE;AAAhB;;AAAiB,GAAE,OAAK,EAAE,EAAE,GAAC,QAAQ,QAAQ,EAAE,CAAC,KAAK,GAAE,EAAE;;AAAC,IAAI,IAAE,SAAS,GAAE;AAAC,QAAO,WAAU;EAAC,IAAI,IAAE,MAAK,IAAE;AAAU,SAAO,IAAI,SAAS,SAAS,GAAE,GAAE;GAAC,IAAI,IAAE,EAAE,MAAM,GAAE,EAAE;GAAC,SAAS,EAAE,GAAE;AAAC,MAAE,GAAE,GAAE,GAAE,GAAE,GAAE,QAAO,EAAE;;GAAC,SAAS,EAAE,GAAE;AAAC,MAAE,GAAE,GAAE,GAAE,GAAE,GAAE,SAAQ,EAAE;;AAAC,KAAE,KAAK,EAAE;KAAG;;GAAO,IAAE,SAAS,GAAE;AAAC,KAAG,MAAM,QAAQ,EAAE,CAAC,QAAO;GAAO,IAAE,SAAS,GAAE,GAAE;AAAC,KAAgB,OAAO,SAApB,OAA4B,OAAO,YAAY,OAAO,EAAE,EAAC;EAAC,IAAI,IAAE,EAAE,EAAC,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,KAAK;AAAE,MAAG;AAAC,QAAI,IAAI,GAAE,IAAE,EAAE,OAAO,WAAW,EAAC,EAAE,KAAG,IAAE,EAAE,MAAM,EAAE,UAAQ,EAAE,KAAK,EAAE,MAAM,EAAC,CAAC,KAAG,EAAE,WAAS,IAAG,IAAE,CAAC;WAAU,GAAE;AAAC,OAAE,CAAC,GAAE,IAAE;YAAS;AAAC,OAAG;AAAC,SAAS,EAAE,UAAR,QAAgB,EAAE,QAAQ;aAAQ;AAAC,QAAG,EAAE,OAAM;;;AAAG,SAAO;;GAAQ,IAAE,SAAS,GAAE,GAAE;AAAC,EAAO,KAAN,QAAS,IAAE,EAAE,YAAU,IAAE,EAAE;AAAQ,MAAI,IAAI,IAAE,GAAE,IAAM,MAAM,EAAE,EAAC,IAAE,GAAE,IAAI,GAAE,KAAG,EAAE;AAAG,QAAO;GAAO,IAAE,SAAS,GAAE,GAAE;AAAC,KAAG,GAAE;AAAC,MAAa,OAAO,KAAjB,SAAmB,QAAO,EAAE,GAAE,EAAE;EAAC,IAAI,IAAE,OAAO,UAAU,SAAS,KAAK,EAAE,CAAC,MAAM,GAAE,GAAG;AAAC,SAAiB,MAAX,YAAc,EAAE,gBAAc,IAAE,EAAE,YAAY,OAAc,MAAR,SAAmB,MAAR,QAAU,MAAM,KAAK,EAAE,GAAe,MAAd,eAAiB,2CAA2C,KAAK,EAAE,GAAC,EAAE,GAAE,EAAE,GAAC,KAAK;;GAAQ,IAAE,WAAU;AAAC,OAAU,UAAU,4IAA4I;GAAM,IAAE,SAAS,GAAE,GAAE;AAAC,QAAO,EAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,GAAG;GAAM,IAAE,SAAS,GAAE,GAAE;AAAC,KAAG,EAAE,aAAa,GAAG,OAAU,UAAU,oCAAoC;;AAAE,SAAS,EAAE,GAAE,GAAE;AAAC,MAAI,IAAI,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;EAAC,IAAI,IAAE,EAAE;AAAG,IAAE,aAAW,EAAE,cAAY,CAAC,GAAE,EAAE,eAAa,CAAC,GAAE,WAAU,MAAI,EAAE,WAAS,CAAC,IAAG,OAAO,eAAe,GAAE,EAAE,KAAI,EAAE;;;AAAE,IAAI,IAAE,SAAS,GAAE,GAAE,GAAE;AAAC,QAAO,KAAG,EAAE,EAAE,WAAU,EAAE,EAAC,KAAG,EAAE,GAAE,EAAE,EAAC;GAAO,IAAE,SAAS,GAAE,GAAE,GAAE;AAAC,QAAO,KAAK,IAAE,OAAO,eAAe,GAAE,GAAE;EAAC,OAAM;EAAE,YAAW,CAAC;EAAE,cAAa,CAAC;EAAE,UAAS,CAAC;EAAE,CAAC,GAAC,EAAE,KAAG,GAAE;GAAG,IAAE,WAAU;AAAC,QAAM,CAAC,CAAC,UAAU;GAAa,IAAE,WAAU;AAAC,QAAM,CAAC,CAAC,UAAU;;AAAc,SAAS,EAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,KAAG;EAAC,IAAI,IAAE,EAAE,GAAG,EAAE,EAAC,IAAE,EAAE;UAAY,GAAE;AAAa,IAAE,EAAE;AAAhB;;AAAiB,GAAE,OAAK,EAAE,EAAE,GAAC,QAAQ,QAAQ,EAAE,CAAC,KAAK,GAAE,EAAE;;AAAC,SAAS,EAAE,GAAE;AAAC,QAAO,WAAU;EAAC,IAAI,IAAE,MAAK,IAAE;AAAU,SAAO,IAAI,SAAS,SAAS,GAAE,GAAE;GAAC,IAAI,IAAE,EAAE,MAAM,GAAE,EAAE;GAAC,SAAS,EAAE,GAAE;AAAC,MAAE,GAAE,GAAE,GAAE,GAAE,GAAE,QAAO,EAAE;;GAAC,SAAS,EAAE,GAAE;AAAC,MAAE,GAAE,GAAE,GAAE,GAAE,GAAE,SAAQ,EAAE;;AAAC,KAAE,KAAK,EAAE;KAAG;;;AAAE,SAAS,EAAE,GAAE,GAAE;AAAC,QAAO,SAAS,GAAE;AAAC,MAAG,MAAM,QAAQ,EAAE,CAAC,QAAO;GAAG,EAAE,IAAE,SAAS,GAAE,GAAE;AAAC,MAAgB,OAAO,SAApB,OAA4B,OAAO,YAAY,OAAO,EAAE,EAAC;GAAC,IAAI,IAAE,EAAE,EAAC,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,KAAK;AAAE,OAAG;AAAC,SAAI,IAAI,GAAE,IAAE,EAAE,OAAO,WAAW,EAAC,EAAE,KAAG,IAAE,EAAE,MAAM,EAAE,UAAQ,EAAE,KAAK,EAAE,MAAM,EAAC,CAAC,KAAG,EAAE,WAAS,IAAG,IAAE,CAAC;YAAU,GAAE;AAAC,QAAE,CAAC,GAAE,IAAE;aAAS;AAAC,QAAG;AAAC,UAAS,EAAE,UAAR,QAAgB,EAAE,QAAQ;cAAQ;AAAC,SAAG,EAAE,OAAM;;;AAAG,UAAO;;GAAI,GAAE,EAAE,IAAE,SAAS,GAAE,GAAE;AAAC,MAAG,GAAE;AAAC,OAAa,OAAO,KAAjB,SAAmB,QAAO,EAAE,GAAE,EAAE;GAAC,IAAI,IAAE,OAAO,UAAU,SAAS,KAAK,EAAE,CAAC,MAAM,GAAE,GAAG;AAAC,UAAiB,MAAX,YAAc,EAAE,gBAAc,IAAE,EAAE,YAAY,OAAc,MAAR,SAAmB,MAAR,QAAU,MAAM,KAAK,EAAE,GAAe,MAAd,eAAiB,2CAA2C,KAAK,EAAE,GAAC,EAAE,GAAE,EAAE,GAAC,KAAK;;GAAI,GAAE,EAAE,IAAE,WAAU;AAAC,QAAU,UAAU,4IAA4I;IAAG;;AAAC,SAAS,EAAE,GAAE,GAAE;AAAC,EAAO,KAAN,QAAS,IAAE,EAAE,YAAU,IAAE,EAAE;AAAQ,MAAI,IAAI,IAAE,GAAE,IAAM,MAAM,EAAE,EAAC,IAAE,GAAE,IAAI,GAAE,KAAG,EAAE;AAAG,QAAO;;AAAE,IAAI,IAAE,WAAU;CAAC,IAAI,IAAE,EAAE,mBAAmB,MAAM,SAAS,EAAE,GAAE;AAAC,SAAO,mBAAmB,MAAM,SAAS,GAAE;AAAC,WAAO,SAAO,EAAE,OAAK,EAAE,MAAhB;IAAsB,KAAK,EAAE,QAAO,EAAE,OAAO,UAAS,IAAI,QAAQ,WAAU;KAAC,IAAI,IAAE,EAAE,mBAAmB,MAAM,SAAS,EAAE,GAAE,GAAE;MAAC,IAAI,GAAE;AAAE,aAAO,mBAAmB,MAAM,SAAS,GAAE;AAAC,eAAO,SAAO,EAAE,OAAK,EAAE,MAAhB;QAAsB,KAAK,EAAE,QAAO,GAAG,IAAE,EAAE,IAAI,aAAa,4CAA2C,oBAAoB,CAAC,EAAC,EAAE,OAAK,GAAE,EAAE,OAAK,GAAE,UAAU,YAAY,MAAM,EAAC,MAAK,GAAE,CAAC;QAAC,KAAK;AAAE,aAAE,EAAE,MAAK,IAAE,SAAS,EAAE,GAAE;AAAC,YAAE,oBAAoB,UAAS,EAAE,EAAC,EAAE,EAAE,OAAO,OAAM,GAAE,EAAE;YAAE,EAAE,iBAAiB,UAAS,EAAE,EAAC,EAAE,EAAE,OAAM,GAAE,EAAE,EAAC,EAAE,OAAK;AAAG;QAAM,KAAK,GAAG,GAAE,OAAK,IAAG,EAAE,KAAG,EAAE,MAAM,EAAE,EAAC,EAAE,EAAE,GAAG;QAAC,KAAK;QAAG,KAAI,MAAM,QAAO,EAAE,MAAM;;UAAI,GAAE,MAAK,CAAC,CAAC,GAAE,GAAG,CAAC,CAAC;QAAG,CAAC;AAAC,YAAO,SAAS,GAAE,GAAE;AAAC,aAAO,EAAE,MAAM,MAAK,UAAU;;OAAI,CAAC,CAAC;IAAC,KAAK;IAAE,KAAI,MAAM,QAAO,EAAE,MAAM;;MAAI,EAAE;IAAG,CAAC;AAAC,QAAO,SAAS,GAAE;AAAC,SAAO,EAAE,MAAM,MAAK,UAAU;;GAAI,EAAC,IAAE,SAAS,GAAE,GAAE,GAAE;AAAC,SAAO,GAAP;EAAU,KAAI;AAAS,KAAE,IAAI,aAAa,qBAAoB,kBAAkB,CAAC;AAAC;EAAM,QAAQ,GAAE,EAAE;;GAAG,IAAE,WAAU;CAAC,IAAI,IAAE,EAAE,mBAAmB,MAAM,SAAS,EAAE,GAAE,GAAE;AAAC,SAAO,mBAAmB,MAAM,SAAS,GAAE;AAAC,WAAO,SAAO,EAAE,OAAK,EAAE,MAAhB;IAAsB,KAAK,EAAE,QAAO,EAAE,OAAO,UAAS,IAAI,QAAQ,WAAU;KAAC,IAAI,IAAE,EAAE,mBAAmB,MAAM,SAAS,EAAE,GAAE,GAAE;MAAC,IAAI,GAAE,GAAE;AAAE,aAAO,mBAAmB,MAAM,SAAS,GAAE;AAAC,eAAO,SAAO,EAAE,OAAK,EAAE,MAAhB;QAAsB,KAAK,EAAE,QAAO,GAAG,IAAE,GAAG,IAAE,EAAE,IAAI,aAAa,2EAA0E,oBAAoB,CAAC,EAAC,EAAE,OAAK,GAAE,EAAE,KAAG,SAAQ,EAAE,OAAK,GAAE,EAAE,EAAE;QAAC,KAAK,EAAE,QAAO,EAAE,KAAG,EAAE,MAAK,EAAE,OAAK,GAAE,UAAU,aAAa,aAAa,EAAE;QAAC,KAAK,EAAE,QAAO,EAAE,KAAG,EAAE,MAAK,EAAE,KAAG,CAAC,EAAE,IAAG,EAAE,GAAG,EAAC,EAAE,OAAK,IAAG,EAAE,GAAG,IAAI,KAAK,EAAE,IAAG,EAAE,GAAG;QAAC,KAAK;AAAG,aAAE,EAAE,MAAK,IAAE,EAAE,GAAE,EAAE,EAAC,IAAE,EAAE,IAAG,EAAE,EAAE,EAAC,EAAE,OAAK;AAAG;QAAM,KAAK,GAAG,GAAE,OAAK,IAAG,EAAE,KAAG,EAAE,MAAM,EAAE,EAAC,EAAE,EAAE,GAAG;QAAC,KAAK;QAAG,KAAI,MAAM,QAAO,EAAE,MAAM;;UAAI,GAAE,MAAK,CAAC,CAAC,GAAE,GAAG,CAAC,CAAC;QAAG,CAAC;AAAC,YAAO,SAAS,GAAE,GAAE;AAAC,aAAO,EAAE,MAAM,MAAK,UAAU;;OAAI,CAAC,CAAC;IAAC,KAAK;IAAE,KAAI,MAAM,QAAO,EAAE,MAAM;;MAAI,EAAE;IAAG,CAAC;AAAC,QAAO,SAAS,GAAE,GAAE;AAAC,SAAO,EAAE,MAAM,MAAK,UAAU;;GAAI;AAAC,SAAS,EAAE,GAAE,GAAE;CAAC,IAAI,IAAE,OAAO,KAAK,EAAE;AAAC,KAAG,OAAO,uBAAsB;EAAC,IAAI,IAAE,OAAO,sBAAsB,EAAE;AAAC,QAAI,IAAE,EAAE,QAAQ,SAAS,GAAE;AAAC,UAAO,OAAO,yBAAyB,GAAE,EAAE,CAAC;KAAa,GAAE,EAAE,KAAK,MAAM,GAAE,EAAE;;AAAC,QAAO;;AAAE,SAAS,EAAE,GAAE;AAAC,MAAI,IAAI,IAAE,GAAE,IAAE,UAAU,QAAO,KAAI;EAAC,IAAI,IAAQ,UAAU,MAAhB,OAAgC,EAAE,GAAf,UAAU;AAAM,MAAE,IAAE,EAAE,OAAO,EAAE,EAAC,CAAC,EAAE,CAAC,SAAS,SAAS,GAAE;AAAC,KAAE,GAAE,GAAE,EAAE,GAAG;KAAG,GAAC,OAAO,4BAA0B,OAAO,iBAAiB,GAAE,OAAO,0BAA0B,EAAE,CAAC,GAAC,EAAE,OAAO,EAAE,CAAC,CAAC,SAAS,SAAS,GAAE;AAAC,UAAO,eAAe,GAAE,GAAE,OAAO,yBAAyB,GAAE,EAAE,CAAC;KAAG;;AAAC,QAAO;;AAAE,IAAI,IAAE,WAAU;CAAC,SAAS,EAAE,GAAE;EAAC,IAAI,IAAE;AAAK,IAAE,MAAK,EAAE,EAAC,EAAE,MAAK,aAAY,KAAK,EAAC,EAAE,MAAK,cAAa,KAAK;EAAC,IAAI,IAAE,EAAE,2BAA2B;AAAC,MAAG,CAAC,EAAE,OAAM,IAAI,aAAa,mCAAkC,oBAAoB;AAAC,OAAK,YAAU,IAAI,GAAC,EAAC,KAAK,aAAW,EAAE,EAAC,OAAO,QAAQ,EAAE,EAAE,EAAE,EAAC,EAAE,eAAe,EAAC,KAAG,EAAE,CAAC,CAAC,CAAC,SAAS,SAAS,GAAE;GAAC,IAAI,IAAE,EAAE,GAAE,EAAE,EAAC,IAAE,EAAE,IAAG,IAAE,EAAE;AAAG,OAAgB,MAAb,cAAgB,CAAC,GAAE;IAAC,IAAI,IAAE,EAAE,2BAA2B;AAAC,UAAI,IAAE,IAAI,GAAC;;AAAE,KAAE,UAAU,KAAG;KAAI;;CAAC,IAAI;AAAE,QAAO,EAAE,GAAE,MAAK,CAAC;EAAC,KAAI;EAAc,KAAI,WAAU;AAAC,UAAM,CAAC,CAAC,EAAE,2BAA2B,IAAE,CAAC,CAAC,GAAG,IAAE,CAAC,CAAC,GAAG;;EAAE,KAAI,SAAS,GAAE;AAAC,SAAU,MAAM,uCAAuC;;EAAE,CAAC,CAAC,EAAC,EAAE,GAAE;EAAC;GAAC,KAAI;GAAQ,QAAO,IAAE,EAAE,EAAE,MAAM,SAAS,IAAG;IAAC,IAAI;AAAE,WAAO,EAAE,MAAM,SAAS,GAAE;AAAC,aAAO,SAAO,EAAE,OAAK,EAAE,MAAhB;MAAsB,KAAK;AAAE,WAAG,CAAC,KAAK,WAAU;AAAC,UAAE,OAAK;AAAG;;AAAM,cAAO,EAAE,OAAK,GAAE,EAAE,OAAK,GAAE,EAAE,cAAa,EAAC,OAAM,CAAC,GAAE,CAAC;MAAC,KAAK;AAAE,WAAG,EAAE,MAAK;AAAC,UAAE,OAAK;AAAE;;AAAM,aAAU,MAAM,kDAAkD;MAAC,KAAK;AAAE,YAAK,UAAU,OAAO,EAAC,EAAE,OAAK;AAAG;MAAM,KAAK,GAAG,GAAE,OAAK,IAAG,EAAE,KAAG,EAAE,MAAM,EAAE,GAAE,IAAE,KAAK,WAAW,UAAQ,EAAE,EAAE,GAAG;MAAC,KAAK,GAAG,QAAO,EAAE,OAAO,UAAS,KAAK;MAAC,KAAK;MAAG,KAAI,MAAM,QAAO,EAAE,MAAM;;QAAI,GAAE,MAAK,CAAC,CAAC,GAAE,GAAG,CAAC,CAAC;MAAG,CAAC,EAAC,WAAU;AAAC,WAAO,EAAE,MAAM,MAAK,UAAU;;GAAG;EAAC;GAAC,KAAI;GAAO,OAAM,WAAU;AAAC,WAAO,KAAK,aAAW,KAAK,UAAU,MAAM,EAAC;;GAAM;EAAC;GAAC,KAAI;GAAQ,OAAM,WAAU;AAAC,WAAO,KAAK,aAAW,KAAK,UAAU,OAAO,EAAC;;GAAM;EAAC;GAAC,KAAI;GAAmB,OAAM,SAAS,GAAE,GAAE;IAAC,IAAI,IAAE;AAAK,QAAG,KAAK,aAAW,KAAK,mBAAmB,EAAE,EAAC;AAAC,UAAK,WAAW,MAAI,KAAK,oBAAoB,EAAE;KAAC,IAAI,IAAE,SAAS,GAAE;MAAC,IAAI,IAAE,EAAE;AAAC,YAAI,EAAE,WAAW,UAAQ,EAAE,WAAS,EAAE,QAAQ,SAAO,KAAG,EAAE,KAAK,EAAE,QAAQ,GAAG,GAAG,WAAW,EAAC,KAAG,EAAE,MAAM,GAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;;AAAE,UAAK,UAAU,iBAAiB,GAAE,EAAE,EAAC,KAAK,WAAW,KAAG;;AAAE,WAAO;;GAAM;EAAC;GAAC,KAAI;GAAsB,OAAM,SAAS,GAAE;IAAC,IAAI,IAAE,KAAK,WAAW;AAAG,WAAO,KAAK,UAAU,oBAAoB,GAAE,EAAE,EAAC,OAAO,KAAK,WAAW,IAAG;;GAAM;EAAC;GAAC,KAAI;GAAU,OAAM,WAAU;IAAC,IAAI,IAAE;AAAK,WAAO,KAAK,MAAM,EAAC,OAAO,KAAK,KAAK,WAAW,CAAC,SAAS,SAAS,GAAE;AAAC,YAAO,EAAE,oBAAoB,EAAE;OAAG,EAAC,KAAK,YAAU,MAAK;;GAAM;EAAC;GAAC,KAAI;GAAqB,OAAM,SAAS,GAAE;AAAC,WAAM,CAAC,CAAC,OAAO,OAAO,EAAE,WAAW,CAAC,MAAM,SAAS,GAAE;AAAC,YAAO,MAAI;OAAI;;GAAE;EAAC;GAAC,KAAI;GAAW,KAAI,WAAU;AAAC,WAAO,KAAK;;GAAW,KAAI,SAAS,GAAE;AAAC,UAAU,MAAM,oCAAoC;;GAAE;EAAC,EAAC,CAAC;EAAC,KAAI;EAA4B,OAAM,WAAU;AAAC,UAAO,OAAO,qBAAmB,OAAO,2BAAyB,OAAO,wBAAsB,OAAO;;EAAqB,EAAC;EAAC,KAAI;EAA4B,OAAM,WAAU;AAAC,UAAO,OAAO,qBAAmB,OAAO,2BAAyB,OAAO,wBAAsB,OAAO;;EAAqB,CAAC,CAAC,EAAC;GAAI;AAAC,EAAE,GAAE,kBAAiB;CAAC,UAAS;CAAK,MAAK;CAAQ,YAAW,CAAC;CAAE,gBAAe,CAAC;CAAE,iBAAgB;CAAE,YAAW;CAAK,CAAC,EAAC,EAAE,GAAE,cAAa;CAAC,WAAU;CAAW,aAAY;CAAa,KAAI;CAAM,OAAM;CAAQ,UAAS;CAAU,QAAO;CAAS,WAAU;CAAW,aAAY;CAAa,YAAW;CAAY,cAAa;CAAc,OAAM;CAAQ,CAAC;;;ACCjhe,IAAI,KAAK,MAAM,OAAO,KAAK,YCErB,KAAY,IAAO,SAAS,IAAW,MAAM,IAAkB,GAAG,IAAa,IAAO,IAAe,SAAS;CACnH,IAAM,IAAM,EAAO,KAAK;AAgDxB,QA9CA,QAAgB;AACf,MAAI,EAAyB,YAE5B,QADA,EAAI,UAAU,KAAgB,IAAI,EAAyB;GAAE;GAAM;GAAU;GAAiB;GAAY,CAAC,QAC9F;AAEZ,GADA,EAAI,QAAQ,OAAO,EACnB,EAAI,QAAQ,SAAS;;IAGrB;EAAC;EAAM;EAAU;EAAiB;EAAY;EAAa,CAAC,EAsCxD,CAAC,GAAK;EAAE,OApCD,QAAkB;AAC/B,GAAI,EAAI,WACP,EAAI,QAAQ,OAAO;KAElB,EAAE,CAgCU;EAAO,MA9BT,QAAkB;AAC9B,GAAI,EAAI,WACP,EAAI,QAAQ,MAAM;KAEjB,EAAE,CA0BiB;EAAM,OAxBd,QAAkB;AAC/B,GAAI,EAAI,WACP,EAAI,QAAQ,OAAO;KAElB,EAAE,CAoBuB;EAAO,WAlBjB,GAAa,GAAW,MAAY;AACrD,GAAI,EAAI,WACP,EAAI,QAAQ,iBAAiB,GAAW,EAAQ;KAE/C,EAAE,CAc8B;EAAW,aAZ1B,GAAa,GAAW,MAAY;AACvD,GAAI,EAAI,WACP,EAAI,QAAQ,oBAAoB,GAAW,EAAQ;KAElD,EAAE,CAQyC;EAAa,OAN7C,QAAkB;AAC/B,GAAI,EAAI,WACP,EAAI,QAAQ,SAAS;KAEpB,EAAE,CAEsD;EAAO,CAAC;GClD9D,KAAc,GAAS,IAAU,MAAM;CAC5C,IAAM,IAAM,EAAO,GAAG,EAEhB,IAAO,QAAkB;AAE9B,EADA,aAAa,EAAI,QAAQ,EACzB,EAAI,UAAU;IACZ,EAAE,CAAC,EAEA,IAAQ,QAAkB;AAE/B,EADA,GAAM,EACN,EAAI,UAAU,WAAW,GAAS,EAAQ;IACxC;EAAC;EAAS;EAAS;EAAK,CAAC;AAI5B,QAFA,QAAgB,GAAM,CAAC,EAAK,CAAC,EAEtB,CAAC,GAAO,EAAK;GCff,KAAe,GAAU,IAAY,OAAQ;CAClD,IAAM,IAAa,QAEf,IACC,OAAO,QAAQ,EAAS,CAAC,QAAQ,GAAK,CAAC,GAAK,QAAY;EAAE,GAAG;GAAM,EAAI,aAAa,GAAG;EAAO,GAAG,EAAE,CAAC,GACpG,EAAE,EACN,CAAC,EAAS,CACV,EAEK,IAAO,QAAc,OAAO,KAAK,EAAW,EAAE,CAAC,EAAW,CAAC,EAI3D,IAAgB,QAAc,EAAK,MAAM,MAAM,EAAE,SAAS,IAAI,CAAC,EAAE,CAAC,EAAK,CAAC,EAGxE,IAAU,EAAO,KAAK;AAqD5B,QAnDA,QAAgB;AACf,MAAI,CAAC,GAAe;AACnB,KAAQ,UAAU;AAClB;;AAED,SAAO,WACL,MAAM,MAAW;AAEjB,KAAQ,UAAU,KADL,EAAO,WAAW,GACJ,GAAM;IAAE,cAAc;IAAM,gBAAgB;IAAM,CAAC;IAC7E,CACD,YAAY;AACZ,GAAA,QAAA,IAAA,aAA6B,gBAC5B,QAAQ,KACP,8JAEA;IAED;IACD,CAAC,GAAe,EAAK,CAAC,GAED,MAAa;AACpC,MAAI,CAAC,EAAK,OAAQ,QAAO;AAEzB,MAAI,CAAC,GAAe;GACnB,IAAM,IAAQ,EAAS,MAAM,CAAC,MAAM,MAAM,EACpC,IAAU,EAAM,SAAS,IAAI,IAAQ,CAAC,EAAS,MAAM,CAAC;AAC5D,QAAK,IAAM,KAAK,GAAS;IACxB,IAAM,IAAa,EAAE,aAAa;AAClC,QAAI,KAAc,EAAY,QAAO,EAAW,KAAc,GAAG,EAAW;;AAE7E,UAAO;;EAGR,IAAM,IAAO,EAAQ;AACrB,MAAI,GAAM;GACT,IAAM,IAAS,EAAK,OAAO,EAAS,CAAC,QAAQ,MAAM,EAAE,QAAQ,EAAU;AACvE,OAAI,GAAQ,QAAQ;IACnB,IAAM,IAAa,EAAO,GAAG,KAAK,aAAa;AAC/C,WAAO,EAAW,KAAc,GAAU,EAAW;;SAEhD;GAIN,IAAM,IAAS,EAAS,aAAa,EAC/B,IAAa,EAAK,MAAM,MAAM,EAAO,SAAS,EAAE,IAAI,EAAE,SAAS,EAAO,CAAC;AAC7E,OAAI,EAAY,QAAO,EAAW,KAAc,GAAU,EAAW;;AAEtE,SAAO;;;CCzDT,IAAI,IAAqB,OAAO,IAAI,6BAA6B,EAC/D,IAAsB,OAAO,IAAI,iBAAiB;CACpD,SAAS,EAAQ,GAAM,GAAQ,GAAU;EACvC,IAAI,IAAM;AAGV,MAFW,MAAX,KAAK,MAAmB,IAAM,KAAK,IACxB,EAAO,QAAlB,KAAK,MAAqB,IAAM,KAAK,EAAO,MACxC,SAAS,EAEX,MAAK,IAAI,KADT,IAAW,EAAE,EACQ,EACnB,CAAU,MAAV,UAAuB,EAAS,KAAY,EAAO;MAChD,KAAW;AAElB,SADA,IAAS,EAAS,KACX;GACL,UAAU;GACJ;GACD;GACL,KAAgB,MAAX,KAAK,IAAwB,OAAT;GACzB,OAAO;GACR;;AAIH,CAFA,EAAQ,WAAW,GACnB,EAAQ,MAAM,GACd,EAAQ,OAAO;;ACtBf,CAAA,QAAA,IAAA,aAAA,iBACG,WAAY;EACX,SAAS,EAAyB,GAAM;AACtC,OAAY,KAAR,KAAc,QAAO;AACzB,OAAmB,OAAO,KAAtB,WACF,QAAO,EAAK,aAAa,IACrB,OACA,EAAK,eAAe,EAAK,QAAQ;AACvC,OAAiB,OAAO,KAApB,SAA0B,QAAO;AACrC,WAAQ,GAAR;IACE,KAAK,EACH,QAAO;IACT,KAAK,EACH,QAAO;IACT,KAAK,EACH,QAAO;IACT,KAAK,EACH,QAAO;IACT,KAAK,EACH,QAAO;IACT,KAAK,EACH,QAAO;;AAEX,OAAiB,OAAO,KAApB,SACF,SACgB,OAAO,EAAK,OAAzB,YACC,QAAQ,MACN,oHACD,EACH,EAAK,UALP;IAOE,KAAK,EACH,QAAO;IACT,KAAK,EACH,QAAO,EAAK,eAAe;IAC7B,KAAK,EACH,SAAQ,EAAK,SAAS,eAAe,aAAa;IACpD,KAAK;KACH,IAAI,IAAY,EAAK;AAKrB,YAJA,IAAO,EAAK,aACZ,AAEG,OADC,IAAO,EAAU,eAAe,EAAU,QAAQ,IACrC,MAAP,KAA2C,eAA7B,gBAAgB,IAAO,MACxC;IACT,KAAK,EACH,QACG,IAAY,EAAK,eAAe,MACxB,MAAT,OAEI,EAAyB,EAAK,KAAK,IAAI,SADvC;IAGR,KAAK;AAEH,KADA,IAAY,EAAK,UACjB,IAAO,EAAK;AACZ,SAAI;AACF,aAAO,EAAyB,EAAK,EAAU,CAAC;aACtC;;AAElB,UAAO;;EAET,SAAS,EAAmB,GAAO;AACjC,UAAO,KAAK;;EAEd,SAAS,EAAuB,GAAO;AACrC,OAAI;AACF,MAAmB,EAAM;IACzB,IAAI,IAA2B,CAAC;WACtB;AACV,QAA2B,CAAC;;AAE9B,OAAI,GAA0B;AAC5B,QAA2B;IAC3B,IAAI,IAAwB,EAAyB,OACjD,IACc,OAAO,UAAtB,cACC,OAAO,eACP,EAAM,OAAO,gBACf,EAAM,YAAY,QAClB;AAMF,WALA,EAAsB,KACpB,GACA,4GACA,EACD,EACM,EAAmB,EAAM;;;EAGpC,SAAS,EAAY,GAAM;AACzB,OAAI,MAAS,EAAqB,QAAO;AACzC,OACe,OAAO,KAApB,YACS,KACT,EAAK,aAAa,EAElB,QAAO;AACT,OAAI;IACF,IAAI,IAAO,EAAyB,EAAK;AACzC,WAAO,IAAO,MAAM,IAAO,MAAM;WACvB;AACV,WAAO;;;EAGX,SAAS,IAAW;GAClB,IAAI,IAAa,EAAqB;AACtC,UAAgB,MAAT,OAAsB,OAAO,EAAW,UAAU;;EAE3D,SAAS,IAAe;AACtB,UAAO,MAAM,wBAAwB;;EAEvC,SAAS,EAAY,GAAQ;AAC3B,OAAI,EAAe,KAAK,GAAQ,MAAM,EAAE;IACtC,IAAI,IAAS,OAAO,yBAAyB,GAAQ,MAAM,CAAC;AAC5D,QAAI,KAAU,EAAO,eAAgB,QAAO,CAAC;;AAE/C,UAAkB,EAAO,QAAlB,KAAK;;EAEd,SAAS,EAA2B,GAAO,GAAa;GACtD,SAAS,IAAwB;AAC/B,UACI,IAA6B,CAAC,GAChC,QAAQ,MACN,2OACA,EACD;;AAGL,GADA,EAAsB,iBAAiB,CAAC,GACxC,OAAO,eAAe,GAAO,OAAO;IAClC,KAAK;IACL,cAAc,CAAC;IAChB,CAAC;;EAEJ,SAAS,IAAyC;GAChD,IAAI,IAAgB,EAAyB,KAAK,KAAK;AAOvD,UANA,EAAuB,OACnB,EAAuB,KAAiB,CAAC,GAC3C,QAAQ,MACN,8IACD,GACH,IAAgB,KAAK,MAAM,KACT,MAAX,KAAK,IAAsC,OAAhB;;EAEpC,SAAS,EAAa,GAAM,GAAK,GAAO,GAAO,GAAY,GAAW;GACpE,IAAI,IAAU,EAAM;AAwCpB,UAvCA,IAAO;IACL,UAAU;IACJ;IACD;IACE;IACP,QAAQ;IACT,GACoB,MAAX,KAAK,IAA0B,OAAV,OAA/B,OAKI,OAAO,eAAe,GAAM,OAAO;IAAE,YAAY,CAAC;IAAG,OAAO;IAAM,CAAC,GAJnE,OAAO,eAAe,GAAM,OAAO;IACjC,YAAY,CAAC;IACb,KAAK;IACN,CAAC,EAEN,EAAK,SAAS,EAAE,EAChB,OAAO,eAAe,EAAK,QAAQ,aAAa;IAC9C,cAAc,CAAC;IACf,YAAY,CAAC;IACb,UAAU,CAAC;IACX,OAAO;IACR,CAAC,EACF,OAAO,eAAe,GAAM,cAAc;IACxC,cAAc,CAAC;IACf,YAAY,CAAC;IACb,UAAU,CAAC;IACX,OAAO;IACR,CAAC,EACF,OAAO,eAAe,GAAM,eAAe;IACzC,cAAc,CAAC;IACf,YAAY,CAAC;IACb,UAAU,CAAC;IACX,OAAO;IACR,CAAC,EACF,OAAO,eAAe,GAAM,cAAc;IACxC,cAAc,CAAC;IACf,YAAY,CAAC;IACb,UAAU,CAAC;IACX,OAAO;IACR,CAAC,EACF,OAAO,WAAW,OAAO,OAAO,EAAK,MAAM,EAAE,OAAO,OAAO,EAAK,GACzD;;EAET,SAAS,EACP,GACA,GACA,GACA,GACA,GACA,GACA;GACA,IAAI,IAAW,EAAO;AACtB,OAAe,MAAX,KAAK,EACP,KAAI,EACF,KAAI,EAAY,EAAS,EAAE;AACzB,SACE,IAAmB,GACnB,IAAmB,EAAS,QAC5B,IAEA,GAAkB,EAAS,GAAkB;AAC/C,WAAO,UAAU,OAAO,OAAO,EAAS;SAExC,SAAQ,MACN,uJACD;OACA,GAAkB,EAAS;AAClC,OAAI,EAAe,KAAK,GAAQ,MAAM,EAAE;AACtC,QAAW,EAAyB,EAAK;IACzC,IAAI,IAAO,OAAO,KAAK,EAAO,CAAC,OAAO,SAAU,GAAG;AACjD,YAAiB,MAAV;MACP;AAKF,IAJA,IACE,IAAI,EAAK,SACL,oBAAoB,EAAK,KAAK,UAAU,GAAG,WAC3C,kBACN,EAAsB,IAAW,OAC7B,IACA,IAAI,EAAK,SAAS,MAAM,EAAK,KAAK,UAAU,GAAG,WAAW,MAC5D,QAAQ,MACN,qOACA,GACA,GACA,GACA,EACD,EACA,EAAsB,IAAW,KAAoB,CAAC;;AAO3D,OALA,IAAW,MACA,MAAX,KAAK,MACF,EAAuB,EAAS,EAAG,IAAW,KAAK,IACtD,EAAY,EAAO,KAChB,EAAuB,EAAO,IAAI,EAAG,IAAW,KAAK,EAAO,MAC3D,SAAS,EAEX,MAAK,IAAI,KADT,IAAW,EAAE,EACQ,EACnB,CAAU,MAAV,UAAuB,EAAS,KAAY,EAAO;OAChD,KAAW;AAQlB,UAPA,KACE,EACE,GACe,OAAO,KAAtB,aACI,EAAK,eAAe,EAAK,QAAQ,YACjC,EACL,EACI,EACL,GACA,GACA,GACA,GAAU,EACV,GACA,EACD;;EAEH,SAAS,EAAkB,GAAM;AAC/B,KAAe,EAAK,GAChB,EAAK,WAAW,EAAK,OAAO,YAAY,KAC3B,OAAO,KAApB,YACS,KACT,EAAK,aAAa,MACD,EAAK,SAAS,WAA9B,cACG,EAAe,EAAK,SAAS,MAAM,IACnC,EAAK,SAAS,MAAM,WACnB,EAAK,SAAS,MAAM,OAAO,YAAY,KACxC,EAAK,WAAW,EAAK,OAAO,YAAY;;EAElD,SAAS,EAAe,GAAQ;AAC9B,UACe,OAAO,KAApB,cACS,KACT,EAAO,aAAa;;EAGxB,IAAI,IAAA,EAAgB,QAAQ,EAC1B,IAAqB,OAAO,IAAI,6BAA6B,EAC7D,IAAoB,OAAO,IAAI,eAAe,EAC9C,IAAsB,OAAO,IAAI,iBAAiB,EAClD,IAAyB,OAAO,IAAI,oBAAoB,EACxD,IAAsB,OAAO,IAAI,iBAAiB,EAClD,IAAsB,OAAO,IAAI,iBAAiB,EAClD,IAAqB,OAAO,IAAI,gBAAgB,EAChD,IAAyB,OAAO,IAAI,oBAAoB,EACxD,IAAsB,OAAO,IAAI,iBAAiB,EAClD,IAA2B,OAAO,IAAI,sBAAsB,EAC5D,IAAkB,OAAO,IAAI,aAAa,EAC1C,IAAkB,OAAO,IAAI,aAAa,EAC1C,IAAsB,OAAO,IAAI,iBAAiB,EAClD,IAAyB,OAAO,IAAI,yBAAyB,EAC7D,IACE,EAAM,iEACR,IAAiB,OAAO,UAAU,gBAClC,IAAc,MAAM,SACpB,IAAa,QAAQ,aACjB,QAAQ,aACR,WAAY;AACV,UAAO;;AAEf,MAAQ,EACN,0BAA0B,SAAU,GAAmB;AACrD,UAAO,GAAmB;KAE7B;EACD,IAAI,GACA,IAAyB,EAAE,EAC3B,IAAyB,EAAM,yBAAyB,KAC1D,GACA,EACD,EAAE,EACC,IAAwB,EAAW,EAAY,EAAa,CAAC,EAC7D,IAAwB,EAAE;AAgB9B,EAfA,EAAQ,WAAW,GACnB,EAAQ,MAAM,SAAU,GAAM,GAAQ,GAAU;GAC9C,IAAI,IACF,MAAM,EAAqB;AAC7B,UAAO,EACL,GACA,GACA,GACA,CAAC,GACD,IACI,MAAM,wBAAwB,GAC9B,GACJ,IAAmB,EAAW,EAAY,EAAK,CAAC,GAAG,EACpD;KAEH,EAAQ,OAAO,SAAU,GAAM,GAAQ,GAAU;GAC/C,IAAI,IACF,MAAM,EAAqB;AAC7B,UAAO,EACL,GACA,GACA,GACA,CAAC,GACD,IACI,MAAM,wBAAwB,GAC9B,GACJ,IAAmB,EAAW,EAAY,EAAK,CAAC,GAAG,EACpD;;KAED;;AC7VN,CAAA,QAAA,IAAA,aAA6B,eAC3B,EAAO,UAAA,GAAA,GAEP,EAAO,UAAA,GAAA;QCHH,MAAQ,EAAE,WAAQ,SAAS,iBAAc,OAAO,cAAW,SAE/D,iBAAA,GAAA,EAAA,KAAC,OAAD;CACC,eAAY;CACZ,OAAM;CACN,OAAM;CACN,QAAO;CACP,SAAQ;WAER,iBAAA,GAAA,EAAA,MAAC,KAAD,EAAA,UAAA,CACC,iBAAA,GAAA,EAAA,KAAC,QAAD;EACC,eAAY;EACZ,MAAM;EACN,GAAE;EACD,CAAA,EACD,KAAY,iBAAA,GAAA,EAAA,KAAC,UAAD;EAAQ,eAAY;EAAkB,MAAM;EAAa,IAAG;EAAK,IAAG;EAAI,GAAE;EAAM,CAAA,CAC1F,EAAA,CAAA;CACC,CAAA,ECTF,MAAmB,GAAa,MAAY;AACjD,MAAK,IAAM,EAAE,qBAAkB,EAC9B,MAAK,IAAM,KAAK,EACf,KAAI,EAAQ,EAAE,KAAK,KAAM;GAKtB,KAAS,EACd,aACA,cAAW,MACX,UAAO,SACP,cAAW,MACX,aAAU,KACV,oBAAiB,MACjB,eAAY,IACZ,qBAAkB,GAClB,gBAAa,IACb,eAAY,qBACZ,WAAQ,MACR,eAAY,MACZ,kBAAe,aACf,aAAU,MACV,WAAQ,MACR,mBAAgB,MAChB,iBAAc,MACd,cAAW,MACX,aAAU,MACV,eAAY,MACZ,sBACK;CACL,IAAM,IAAY,EAAO,KAAK,EACxB,CAAC,GAAa,KAAkB,EAAS,GAAM,EAE/C,GAAG,EAAE,UAAO,SAAM,cAAW,oBAAiB,EAAS,GAAM,GAAU,GAAiB,GAAY,EAAa,EACjH,IAAiB,EAAY,GAAU,EAAU,EAEjD,IAAW,EAAO,EAAE,CAAC;AAC3B,GAAS,UAAU;EAAE;EAAS;EAAO;EAAe;EAAa;EAAU;EAAS;EAAW;CAE/F,IAAM,IAAgB,EAAO,EAAW;AACxC,GAAc,UAAU;CAGxB,IAAM,IAAiB,EAAO;EAAE,YAAY;EAAI,OAAO;EAAM,CAAC,EAExD,IAAoB,EAAO,EAAe;AAChD,GAAkB,UAAU;CAE5B,IAAM,IAAoB,EAAO,KAAK,EAChC,KAAW,EAAO,KAAK,EAEvB,KAAoB,EAAO,EAAe;AAChD,IAAkB,UAAU;CAG5B,IAAM,KAAgB,QAAkB,GAAS,WAAW,EAAE,EAAE,CAAC,EAC3D,CAAC,GAAY,KAAa,EAAW,IAAe,EAAQ,EAC5D,CAAC,IAAmB,KAAoB,EAAW,IAAe,KAAkB,EAAE,EAEtF,IAAkB,QAAkB;AACzC,MAAI;AAEH,GADA,EAAe,GAAM,EACrB,GAAM;WACE,GAAO;AAEf,GADA,EAAS,QAAQ,UAAU,EAAM,EACjC,EAAkB,WAAW;;IAE5B,CAAC,EAAK,CAAC,EAEJ,KAAW,GACf,MAAM;AAEN,EADA,GAAY,EACZ,EAAS,QAAQ,UAAU,EAAE;IAE9B,CAAC,EAAW,CACZ,EAEK,KAAiB,GACrB,MAAM;AAEN,EADA,GAAW,EACX,EAAS,QAAQ,gBAAgB,EAAE;IAEpC,CAAC,EAAU,CACX,EAEK,KAAe,GACnB,MAAM;AAEN,EADA,GAAY,EACZ,EAAS,QAAQ,cAAc,EAAE;IAElC,CAAC,EAAW,CACZ,EAEK,KAAY,GAChB,MAAU;EACV,IAAM,IAAc,MAAM,KAAK,GAAO,WAAW,EAAE,GAAG,MAAY;GACjE,IAAI,IAAO;IAAE,YAAY;IAAW,YAAY;IAAI,EAC9C,IAAe,EAAE;AACvB,QAAK,IAAI,IAAI,GAAG,IAAI,EAAQ,QAAQ,KAAK;IACxC,IAAM,IAAM,EAAQ;AAEpB,IADA,EAAa,KAAK,EAAI,cAAc,GAAG,GACnC,EAAI,eAAe,KAAA,KAAa,EAAI,aAAa,EAAK,gBACzD,IAAO;;AAGT,UAAO;IAAE,MAAM,EAAK,cAAc;IAAI;IAAc;IACnD,EACI,IAAa,EAAY,KAAK,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG;AAG1D,EADA,GAAW,EACP,EAAc,WAEjB,EAAe,QAAQ,aAAa,GACpC,EAAe,QAAQ,QAAQ,GAC3B,GAAkB,UAAU,KAAG,IAAmB,KAEtD,GAAgB,GAAa,EAAkB,QAAQ,EACvD,GAAiB,EACjB,EAAS,QAAQ,WAAW,GAAY,EAAM;IAGhD;EAAC;EAAW;EAAmB;EAAgB,CAC/C,EAEK,IAAW,GACf,MAAU;AAEV,EADA,GAAiB,EACjB,EAAS,QAAQ,UAAU,EAAM;IAElC,CAAC,EAAgB,CACjB,EAEK,KAAa,GACjB,MAAM;AAGN,EAFA,GAAW,EACX,GAAiB,EACjB,EAAS,QAAQ,YAAY,EAAE;IAEhC,CAAC,GAAW,EAAgB,CAC5B,EAEK,IAAS,GACb,MAAM;AAEN,EADA,GAAW,EACX,GAAkB;AAClB,MAAI;AAGH,GAFA,GAAiB,EACjB,EAAkB,WAAW,EACzB,EAAc,WAAW,EAAe,QAAQ,eACnD,EAAS,QAAQ,WAAW,EAAe,QAAQ,YAAY,EAAe,QAAQ,MAAM,EAC5F,EAAe,QAAQ,aAAa,IACpC,EAAe,QAAQ,QAAQ;YAEvB;AACT,KAAS,QAAQ,QAAQ,EAAE;;IAG7B;EAAC;EAAW;EAAkB;EAAgB,CAC9C;AAED,IAAS,UAAU;CAEnB,IAAM,IAAW,SACT;EACN,OAAO;EACP,KAAK;EACL,aAAa;EACb,WAAW;EACX,QAAQ;EACR,OAAO;EACP,SAAS;EACT,GACD;EAAC;EAAU;EAAQ;EAAgB;EAAc;EAAW;EAAU;EAAW,CACjF;AAGD,GAAkB,gBAAgB,OAAO,QAAQ,EAAS,CAAC,SAAS,CAAC,GAAO,OAAQ,IAAc,GAAO,EAAG,CAAC;CAE7G,IAAM,IAAmB,QAAkB;AAC1C,MAAI;AAMH,GALA,EAAe,QAAQ,aAAa,IACpC,EAAe,QAAQ,QAAQ,MAC/B,GAAkB,EAClB,EAAe,GAAK,EACpB,OAAO,QAAQ,EAAS,CAAC,SAAS,CAAC,GAAO,OAAQ,EAAU,GAAO,EAAG,CAAC,EACvE,GAAO;WACC,GAAO;AACf,KAAS,EAAM;;IAEd;EAAC;EAAU;EAAW;EAAO;EAAkB;EAAS,CAAC,EAEtD,WAAiB;AACtB,EAAI,CAAC,KAAa,MACjB,EAAU,QAAQ,MAAM,UAAU;IAI9B,WAAgB;AACrB,EAAI,CAAC,KAAa,MACjB,EAAU,QAAQ,MAAM,UAAU;;AA+CpC,QAdK,EAAyB,cACxB,EAAW,EAAS,GAChB,EAAS,GAAkB,GAAiB,EAAY,GACrD,EAAe,EAAS,GAC3B,EAAa,GAAU,EAC7B,GAAI,CAAC,KAAe,EAAE,SAAS,GAAkB,EACjD,CAAC,GAlCJ,iBAAA,GAAA,EAAA,KAAC,UAAD;EACC,eAAY;EACZ,KAAK;EACL,cAAY;EACZ,gBAAc;EACd,OACC,IACG,OACA;GACA,OAAO;GACP,QAAQ;GACR,iBAAiB;GACjB,QAAQ;GACR,SAAS;GACT,QAAQ,CAAC,KAAc,IAAc,YAAY;GACjD,GAAG;GACF;EAEM;EACX,SAAS;EACT,QAAQ;EACR,SAAS,IAAc,IAAkB;YAEzC,iBAAA,GAAA,EAAA,KAAC,IAAD;GAAM,UAAU;GAAa,OAAM;GAAS,CAAA;EACpC,CAAA,GAeF;GC1PI,IAAc,EAAyB,aAEpD,IAAe"}
|