@untemps/react-vocal 2.0.0-beta.6 → 2.0.0-beta.8

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.
Files changed (42) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +23 -5
  3. package/dist/index.es.js +233 -759
  4. package/dist/index.js +2 -4
  5. package/package.json +7 -6
  6. package/.github/workflows/publish.yml +0 -32
  7. package/.husky/commit-msg +0 -1
  8. package/.husky/pre-commit +0 -1
  9. package/.prettierignore +0 -3
  10. package/.prettierrc +0 -29
  11. package/CLAUDE.md +0 -59
  12. package/assets/icon-idle.png +0 -0
  13. package/assets/icon-listening.png +0 -0
  14. package/assets/microphone.png +0 -0
  15. package/assets/react-vocal.png +0 -0
  16. package/commitlint.config.js +0 -7
  17. package/dev/index.html +0 -24
  18. package/dev/package.json +0 -18
  19. package/dev/public/index.html +0 -24
  20. package/dev/src/index.jsx +0 -66
  21. package/dev/vite.config.js +0 -10
  22. package/dev/yarn.lock +0 -325
  23. package/dist/index.es.js.map +0 -1
  24. package/dist/index.js.map +0 -1
  25. package/dist/index.umd.js +0 -9
  26. package/dist/index.umd.js.map +0 -1
  27. package/src/components/Icon.jsx +0 -24
  28. package/src/components/Vocal.jsx +0 -261
  29. package/src/components/__tests__/Icon.test.jsx +0 -38
  30. package/src/components/__tests__/Vocal.test.jsx +0 -748
  31. package/src/components/__tests__/VocalWithMockedUseVocal.test.jsx +0 -38
  32. package/src/components/__tests__/__snapshots__/Icon.test.jsx.snap +0 -21
  33. package/src/components/__tests__/__snapshots__/Vocal.test.jsx.snap +0 -28
  34. package/src/hooks/__tests__/useCommands.test.js +0 -115
  35. package/src/hooks/__tests__/useTimeout.test.js +0 -69
  36. package/src/hooks/__tests__/useVocal.test.js +0 -207
  37. package/src/hooks/useCommands.js +0 -75
  38. package/src/hooks/useTimeout.js +0 -21
  39. package/src/hooks/useVocal.js +0 -56
  40. package/src/index.js +0 -7
  41. package/vite.config.js +0 -36
  42. package/vitest.setup.js +0 -83
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.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, 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":"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"}
package/dist/index.umd.js DELETED
@@ -1,9 +0,0 @@
1
- (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`react`)):typeof define==`function`&&define.amd?define([`exports`,`react`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.ReactVocal={},e.React))})(this,function(e,t){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var n=Object.create,r=Object.defineProperty,i=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,o=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),l=(e,t,n,o)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var c=a(t),l=0,u=c.length,d;l<u;l++)d=c[l],!s.call(e,d)&&d!==n&&r(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(o=i(t,d))||o.enumerable});return e};t=((e,t,i)=>(i=e==null?{}:n(o(e)),l(t||!e||!e.__esModule?r(i,`default`,{value:e,enumerable:!0}):i,e)))(t);var u=function(e,t,n){return e(n={path:t,exports:{},require:function(e,t){return function(){throw Error(`Dynamic requires are not currently supported by @rollup/plugin-commonjs`)}(t==null&&n.path)}},n.exports),n.exports}((function(e){var t=function(e){var t=Object.prototype,n=t.hasOwnProperty,r=typeof Symbol==`function`?Symbol:{},i=r.iterator||`@@iterator`,a=r.asyncIterator||`@@asyncIterator`,o=r.toStringTag||`@@toStringTag`;function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},``)}catch{s=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var i=t&&t.prototype instanceof d?t:d,a=Object.create(i.prototype);return a._invoke=function(e,t,n){var r=`suspendedStart`;return function(i,a){if(r===`executing`)throw Error(`Generator is already running`);if(r===`completed`){if(i===`throw`)throw a;return T()}for(n.method=i,n.arg=a;;){var o=n.delegate;if(o){var s=b(o,n);if(s){if(s===u)continue;return s}}if(n.method===`next`)n.sent=n._sent=n.arg;else if(n.method===`throw`){if(r===`suspendedStart`)throw r=`completed`,n.arg;n.dispatchException(n.arg)}else n.method===`return`&&n.abrupt(`return`,n.arg);r=`executing`;var c=l(e,t,n);if(c.type===`normal`){if(r=n.done?`completed`:`suspendedYield`,c.arg===u)continue;return{value:c.arg,done:n.done}}c.type===`throw`&&(r=`completed`,n.method=`throw`,n.arg=c.arg)}}}(e,n,new C(r||[])),a}function l(e,t,n){try{return{type:`normal`,arg:e.call(t,n)}}catch(e){return{type:`throw`,arg:e}}}e.wrap=c;var u={};function d(){}function f(){}function p(){}var m={};m[i]=function(){return this};var h=Object.getPrototypeOf,g=h&&h(h(w([])));g&&g!==t&&n.call(g,i)&&(m=g);var _=p.prototype=d.prototype=Object.create(m);function v(e){[`next`,`throw`,`return`].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function y(e,t){var r;this._invoke=function(i,a){function o(){return new t((function(r,o){(function r(i,a,o,s){var c=l(e[i],e,a);if(c.type!==`throw`){var u=c.arg,d=u.value;return d&&typeof d==`object`&&n.call(d,`__await`)?t.resolve(d.__await).then((function(e){r(`next`,e,o,s)}),(function(e){r(`throw`,e,o,s)})):t.resolve(d).then((function(e){u.value=e,o(u)}),(function(e){return r(`throw`,e,o,s)}))}s(c.arg)})(i,a,r,o)}))}return r=r?r.then(o,o):o()}}function b(e,t){var n=e.iterator[t.method];if(n===void 0){if(t.delegate=null,t.method===`throw`){if(e.iterator.return&&(t.method=`return`,t.arg=void 0,b(e,t),t.method===`throw`))return u;t.method=`throw`,t.arg=TypeError(`The iterator does not provide a 'throw' method`)}return u}var r=l(n,e.iterator,t.arg);if(r.type===`throw`)return t.method=`throw`,t.arg=r.arg,t.delegate=null,u;var i=r.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,t.method!==`return`&&(t.method=`next`,t.arg=void 0),t.delegate=null,u):i:(t.method=`throw`,t.arg=TypeError(`iterator result is not an object`),t.delegate=null,u)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function S(e){var t=e.completion||{};t.type=`normal`,delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:`root`}],e.forEach(x,this),this.reset(!0)}function w(e){if(e){var t=e[i];if(t)return t.call(e);if(typeof e.next==`function`)return e;if(!isNaN(e.length)){var r=-1,a=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return a.next=a}}return{next:T}}function T(){return{value:void 0,done:!0}}return f.prototype=_.constructor=p,p.constructor=f,f.displayName=s(p,o,`GeneratorFunction`),e.isGeneratorFunction=function(e){var t=typeof e==`function`&&e.constructor;return!!t&&(t===f||(t.displayName||t.name)===`GeneratorFunction`)},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,s(e,o,`GeneratorFunction`)),e.prototype=Object.create(_),e},e.awrap=function(e){return{__await:e}},v(y.prototype),y.prototype[a]=function(){return this},e.AsyncIterator=y,e.async=function(t,n,r,i,a){a===void 0&&(a=Promise);var o=new y(c(t,n,r,i),a);return e.isGeneratorFunction(n)?o:o.next().then((function(e){return e.done?e.value:o.next()}))},v(_),s(_,o,`Generator`),_[i]=function(){return this},_.toString=function(){return`[object Generator]`},e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=w,C.prototype={constructor:C,reset:function(e){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(S),!e)for(var t in this)t.charAt(0)===`t`&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if(e.type===`throw`)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return o.type=`throw`,o.arg=e,t.next=n,r&&(t.method=`next`,t.arg=void 0),!!r}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],o=a.completion;if(a.tryLoc===`root`)return r(`end`);if(a.tryLoc<=this.prev){var s=n.call(a,`catchLoc`),c=n.call(a,`finallyLoc`);if(s&&c){if(this.prev<a.catchLoc)return r(a.catchLoc,!0);if(this.prev<a.finallyLoc)return r(a.finallyLoc)}else if(s){if(this.prev<a.catchLoc)return r(a.catchLoc,!0)}else{if(!c)throw Error(`try statement without catch or finally`);if(this.prev<a.finallyLoc)return r(a.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var i=this.tryEntries[r];if(i.tryLoc<=this.prev&&n.call(i,`finallyLoc`)&&this.prev<i.finallyLoc){var a=i;break}}a&&(e===`break`||e===`continue`)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var o=a?a.completion:{};return o.type=e,o.arg=t,a?(this.method=`next`,this.next=a.finallyLoc,u):this.complete(o)},complete:function(e,t){if(e.type===`throw`)throw e.arg;return e.type===`break`||e.type===`continue`?this.next=e.arg:e.type===`return`?(this.rval=this.arg=e.arg,this.method=`return`,this.next=`end`):e.type===`normal`&&t&&(this.next=t),u},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),S(n),u}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if(r.type===`throw`){var i=r.arg;S(n)}return i}}throw Error(`illegal catch attempt`)},delegateYield:function(e,t,n){return this.delegate={iterator:w(e),resultName:t,nextLoc:n},this.method===`next`&&(this.arg=void 0),u}},e}(e.exports);try{regeneratorRuntime=t}catch{Function(`r`,`regeneratorRuntime = r`)(t)}}));function d(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}var f=function(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function o(e){d(a,r,i,o,s,`next`,e)}function s(e){d(a,r,i,o,s,`throw`,e)}o(void 0)}))}},p=function(e){if(Array.isArray(e))return e},m=function(e,t){if(typeof Symbol<`u`&&Symbol.iterator in Object(e)){var n=[],r=!0,i=!1,a=void 0;try{for(var o,s=e[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{r||s.return==null||s.return()}finally{if(i)throw a}}return n}},h=function(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r},g=function(e,t){if(e){if(typeof e==`string`)return h(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?h(e,t):void 0}},_=function(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
2
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)},v=function(e,t){return p(e)||m(e,t)||g(e,t)||_()},y=function(e,t){if(!(e instanceof t))throw TypeError(`Cannot call a class as a function`)};function b(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,`value`in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var x=function(e,t,n){return t&&b(e.prototype,t),n&&b(e,n),e},S=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},C=function(){return!!navigator.permissions},w=function(){return!!navigator.mediaDevices};function T(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function E(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function o(e){T(a,r,i,o,s,`next`,e)}function s(e){T(a,r,i,o,s,`throw`,e)}o(void 0)}))}}function D(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(typeof Symbol<`u`&&Symbol.iterator in Object(e)){var n=[],r=!0,i=!1,a=void 0;try{for(var o,s=e[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{r||s.return==null||s.return()}finally{if(i)throw a}}return n}}(e,t)||function(e,t){if(e){if(typeof e==`string`)return O(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?O(e,t):void 0}}(e,t)||function(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
3
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function O(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var k=function(){var e=E(regeneratorRuntime.mark((function e(t){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt(`return`,new Promise(function(){var e=E(regeneratorRuntime.mark((function e(n,r){var i,a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return C()||r(new DOMException(`Navigator API: permissions not supported`,`NOT_SUPPORTED_ERR`)),e.prev=1,e.next=4,navigator.permissions.query({name:t});case 4:i=e.sent,a=function e(t){i.removeEventListener(`change`,e),A(t.target.state,n,r)},i.addEventListener(`change`,a),A(i.state,n,r),e.next=13;break;case 10:e.prev=10,e.t0=e.catch(1),r(e.t0);case 13:case`end`:return e.stop()}}),e,null,[[1,10]])})));return function(t,n){return e.apply(this,arguments)}}()));case 1:case`end`:return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),A=function(e,t,n){switch(e){case`denied`:n(new DOMException(`Permission denied`,`NOT_ALLOWED_ERR`));break;default:t(e)}},j=function(){var e=E(regeneratorRuntime.mark((function e(t,n){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt(`return`,new Promise(function(){var e=E(regeneratorRuntime.mark((function e(r,i){var a,o,s;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return C()&&w()||i(new DOMException(`Navigator API: permissions or Navigator API: mediaDevices not supported`,`NOT_SUPPORTED_ERR`)),e.prev=1,e.t0=Promise,e.next=5,k(t);case 5:return e.t1=e.sent,e.next=8,navigator.mediaDevices.getUserMedia(n);case 8:return e.t2=e.sent,e.t3=[e.t1,e.t2],e.next=12,e.t0.all.call(e.t0,e.t3);case 12:a=e.sent,o=D(a,2),s=o[1],r(s),e.next=21;break;case 18:e.prev=18,e.t4=e.catch(1),i(e.t4);case 21:case`end`:return e.stop()}}),e,null,[[1,18]])})));return function(t,n){return e.apply(this,arguments)}}()));case 1:case`end`:return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}();function M(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function N(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?M(Object(n),!0).forEach((function(t){S(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):M(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var P=function(){function e(t){var n=this;y(this,e),S(this,`_instance`,null),S(this,`_listeners`,null);var r=e._resolveSpeechRecognition();if(!r)throw new DOMException(`SpeechRecognition not supported`,`NOT_SUPPORTED_ERR`);this._instance=new r,this._listeners={},Object.entries(N(N({},e.defaultOptions),t||{})).forEach((function(t){var r=v(t,2),i=r[0],a=r[1];if(i===`grammars`&&!a){var o=e._resolveSpeechGrammarList();o&&(a=new o)}n._instance[i]=a}))}var t;return x(e,null,[{key:`isSupported`,get:function(){return!!e._resolveSpeechRecognition()&&!!C()&&!!w()},set:function(e){throw Error(`You cannot set isSupported directly.`)}}]),x(e,[{key:`start`,value:(t=f(u.mark((function e(){var t;return u.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this._instance){e.next=14;break}return e.prev=1,e.next=4,j(`microphone`,{audio:!0});case 4:if(e.sent){e.next=7;break}throw Error(`Unable to retrieve the stream from media device`);case 7:this._instance.start(),e.next=14;break;case 10:e.prev=10,e.t0=e.catch(1),(t=this._listeners.error)&&t(e.t0);case 14:return e.abrupt(`return`,this);case 15:case`end`:return e.stop()}}),e,this,[[1,10]])}))),function(){return t.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,n){var r=this;if(this._instance&&this._includesEventType(t)){this._listeners[t]&&this.removeEventListener(t);var i=function(i){var a=[];t===e.eventTypes.RESULT&&i.results&&i.results.length>0&&a.push(i.results[0][0].transcript),n&&n.apply(r,[i].concat(a))};this._instance.addEventListener(t,i),this._listeners[t]=i}return this}},{key:`removeEventListener`,value:function(e){var t=this._listeners[e];return this._instance.removeEventListener(e,t),delete this._listeners[e],this}},{key:`cleanup`,value:function(){var e=this;return this.stop(),Object.keys(this._listeners).forEach((function(t){return e.removeEventListener(t)})),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(e){throw 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}();S(P,`defaultOptions`,{grammars:null,lang:`en-US`,continuous:!1,interimResults:!1,maxAlternatives:1,serviceURI:null}),S(P,`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`});var F=e=>typeof e==`function`,I=(e=`en-US`,n=null,r=1,i=!1,a=null)=>{let o=(0,t.useRef)(null);return(0,t.useEffect)(()=>{if(P.isSupported)return o.current=a||new P({lang:e,grammars:n,maxAlternatives:r,continuous:i}),()=>{o.current.abort(),o.current.cleanup()}},[e,n,r,i,a]),[o,{start:(0,t.useCallback)(()=>{o.current&&o.current.start()},[]),stop:(0,t.useCallback)(()=>{o.current&&o.current.stop()},[]),abort:(0,t.useCallback)(()=>{o.current&&o.current.abort()},[]),subscribe:(0,t.useCallback)((e,t)=>{o.current&&o.current.addEventListener(e,t)},[]),unsubscribe:(0,t.useCallback)((e,t)=>{o.current&&o.current.removeEventListener(e,t)},[]),clean:(0,t.useCallback)(()=>{o.current&&o.current.cleanup()},[])}]},L=(e,n=0)=>{let r=(0,t.useRef)(-1),i=(0,t.useCallback)(()=>{clearTimeout(r.current),r.current=-1},[]),a=(0,t.useCallback)(()=>{i(),r.current=setTimeout(e,n)},[e,n,i]);return(0,t.useEffect)(()=>i,[i]),[a,i]},ee=(e,n=.4)=>{let r=(0,t.useMemo)(()=>e?Object.entries(e).reduce((e,[t,n])=>({...e,[t.toLowerCase()]:n}),{}):{},[e]),i=(0,t.useMemo)(()=>Object.keys(r),[r]),a=(0,t.useMemo)(()=>i.some(e=>e.includes(` `)),[i]),o=(0,t.useRef)(null);return(0,t.useEffect)(()=>{if(!a){o.current=null;return}import(`fuse.js`).then(e=>{o.current=new(e.default??e)(i,{includeScore:!0,ignoreLocation:!0})}).catch(()=>{process.env.NODE_ENV!==`production`&&console.warn(`[react-vocal] fuse.js is not installed. Phrase command keys will fall back to exact matching. Install fuse.js to enable fuzzy matching: npm install fuse.js`)})},[a,i]),e=>{if(!i.length)return null;if(!a){let t=e.trim().split(/\s+/),n=t.length>1?t:[e.trim()];for(let e of n){let t=e.toLowerCase();if(t in r)return r[t]?.(e,t)}return null}let t=o.current;if(t){let i=t.search(e).filter(e=>e.score<n);if(i?.length){let t=i[0].item.toLowerCase();return r[t]?.(e,t)}}else{let t=e.toLowerCase(),n=i.find(e=>t.includes(e)||e.includes(t));if(n)return r[n]?.(e,n)}return null}},R=c((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),z=c((e=>{process.env.NODE_ENV!==`production`&&(function(){function t(e){if(e==null)return null;if(typeof e==`function`)return e.$$typeof===O?null:e.displayName||e.name||null;if(typeof e==`string`)return e;switch(e){case _:return`Fragment`;case y:return`Profiler`;case v:return`StrictMode`;case C:return`Suspense`;case w:return`SuspenseList`;case D:return`Activity`}if(typeof e==`object`)switch(typeof e.tag==`number`&&console.error(`Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.`),e.$$typeof){case g:return`Portal`;case x:return e.displayName||`Context`;case b:return(e._context.displayName||`Context`)+`.Consumer`;case S:var n=e.render;return e=e.displayName,e||=(e=n.displayName||n.name||``,e===``?`ForwardRef`:`ForwardRef(`+e+`)`),e;case T:return n=e.displayName||null,n===null?t(e.type)||`Memo`:n;case E:n=e._payload,e=e._init;try{return t(e(n))}catch{}}return null}function n(e){return``+e}function r(e){try{n(e);var t=!1}catch{t=!0}if(t){t=console;var r=t.error,i=typeof Symbol==`function`&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||`Object`;return r.call(t,`The provided key is an unsupported type %s. This value must be coerced to a string before using it here.`,i),n(e)}}function i(e){if(e===_)return`<>`;if(typeof e==`object`&&e&&e.$$typeof===E)return`<...>`;try{var n=t(e);return n?`<`+n+`>`:`<...>`}catch{return`<...>`}}function a(){var e=k.A;return e===null?null:e.getOwner()}function o(){return Error(`react-stack-top-frame`)}function s(e){if(A.call(e,`key`)){var t=Object.getOwnPropertyDescriptor(e,`key`).get;if(t&&t.isReactWarning)return!1}return e.key!==void 0}function c(e,t){function n(){N||(N=!0,console.error("%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)",t))}n.isReactWarning=!0,Object.defineProperty(e,`key`,{get:n,configurable:!0})}function l(){var e=t(this.type);return P[e]||(P[e]=!0,console.error(`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.`)),e=this.props.ref,e===void 0?null:e}function u(e,t,n,r,i,a){var o=n.ref;return e={$$typeof:h,type:e,key:t,props:n,_owner:r},(o===void 0?null:o)===null?Object.defineProperty(e,`ref`,{enumerable:!1,value:null}):Object.defineProperty(e,`ref`,{enumerable:!1,get:l}),e._store={},Object.defineProperty(e._store,`validated`,{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,`_debugInfo`,{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,`_debugStack`,{configurable:!1,enumerable:!1,writable:!0,value:i}),Object.defineProperty(e,`_debugTask`,{configurable:!1,enumerable:!1,writable:!0,value:a}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function d(e,n,i,o,l,d){var p=n.children;if(p!==void 0)if(o)if(j(p)){for(o=0;o<p.length;o++)f(p[o]);Object.freeze&&Object.freeze(p)}else console.error(`React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.`);else f(p);if(A.call(n,`key`)){p=t(e);var m=Object.keys(n).filter(function(e){return e!==`key`});o=0<m.length?`{key: someKey, `+m.join(`: ..., `)+`: ...}`:`{key: someKey}`,L[p+o]||(m=0<m.length?`{`+m.join(`: ..., `)+`: ...}`:`{}`,console.error(`A props object containing a "key" prop is being spread into JSX:
4
- let props = %s;
5
- <%s {...props} />
6
- React keys must be passed directly to JSX without using spread:
7
- let props = %s;
8
- <%s key={someKey} {...props} />`,o,p,m,p),L[p+o]=!0)}if(p=null,i!==void 0&&(r(i),p=``+i),s(n)&&(r(n.key),p=``+n.key),`key`in n)for(var h in i={},n)h!==`key`&&(i[h]=n[h]);else i=n;return p&&c(i,typeof e==`function`?e.displayName||e.name||`Unknown`:e),u(e,p,i,a(),l,d)}function f(e){p(e)?e._store&&(e._store.validated=1):typeof e==`object`&&e&&e.$$typeof===E&&(e._payload.status===`fulfilled`?p(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function p(e){return typeof e==`object`&&!!e&&e.$$typeof===h}var m=require(`react`),h=Symbol.for(`react.transitional.element`),g=Symbol.for(`react.portal`),_=Symbol.for(`react.fragment`),v=Symbol.for(`react.strict_mode`),y=Symbol.for(`react.profiler`),b=Symbol.for(`react.consumer`),x=Symbol.for(`react.context`),S=Symbol.for(`react.forward_ref`),C=Symbol.for(`react.suspense`),w=Symbol.for(`react.suspense_list`),T=Symbol.for(`react.memo`),E=Symbol.for(`react.lazy`),D=Symbol.for(`react.activity`),O=Symbol.for(`react.client.reference`),k=m.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,A=Object.prototype.hasOwnProperty,j=Array.isArray,M=console.createTask?console.createTask:function(){return null};m={react_stack_bottom_frame:function(e){return e()}};var N,P={},F=m.react_stack_bottom_frame.bind(m,o)(),I=M(i(o)),L={};e.Fragment=_,e.jsx=function(e,t,n){var r=1e4>k.recentlyCreatedOwnerStacks++;return d(e,t,n,!1,r?Error(`react-stack-top-frame`):F,r?M(i(e)):I)},e.jsxs=function(e,t,n){var r=1e4>k.recentlyCreatedOwnerStacks++;return d(e,t,n,!0,r?Error(`react-stack-top-frame`):F,r?M(i(e)):I)}})()})),B=c(((e,t)=>{process.env.NODE_ENV===`production`?t.exports=R():t.exports=z()}))(),te=({color:e=`black`,activeColor:t=`red`,isActive:n=!1})=>(0,B.jsx)(`svg`,{"data-testid":`__icon-root__`,xmlns:`http://www.w3.org/2000/svg`,width:`100%`,height:`100%`,viewBox:`0 0 24 24`,children:(0,B.jsxs)(`g`,{children:[(0,B.jsx)(`path`,{"data-testid":`__icon-path__`,fill:e,d:`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&&(0,B.jsx)(`circle`,{"data-testid":`__icon-active__`,fill:t,cx:`16`,cy:`4`,r:`4`})]})}),ne=(e,t)=>{for(let{alternatives:n}of e)for(let e of n)if(t(e)!==null)return},V=({children:e,commands:n=null,lang:r=`en-US`,grammars:i=null,timeout:a=3e3,silenceTimeout:o=null,precision:s=.4,maxAlternatives:c=1,continuous:l=!1,ariaLabel:u=`start recognition`,style:d=null,className:f=null,outlineStyle:p=`2px solid`,onStart:m=null,onEnd:h=null,onSpeechStart:g=null,onSpeechEnd:_=null,onResult:v=null,onError:y=null,onNoMatch:b=null,__rsInstance:x})=>{let S=(0,t.useRef)(null),[C,w]=(0,t.useState)(!1),[,{start:T,stop:E,subscribe:D,unsubscribe:O}]=I(r,i,c,l,x),k=ee(n,s),A=(0,t.useRef)({});A.current={onStart:m,onEnd:h,onSpeechStart:g,onSpeechEnd:_,onResult:v,onError:y,onNoMatch:b};let j=(0,t.useRef)(l);j.current=l;let M=(0,t.useRef)({transcript:``,event:null}),N=(0,t.useRef)(k);N.current=k;let R=(0,t.useRef)(null),z=(0,t.useRef)(null),V=(0,t.useRef)(o);V.current=o;let H=(0,t.useCallback)(()=>z.current?.(),[]),[U,W]=L(H,a),[G,K]=L(H,o??0),q=(0,t.useCallback)(()=>{try{w(!1),E()}catch(e){A.current.onError?.(e),R.current?.()}},[E]),J=(0,t.useCallback)(e=>{U(),A.current.onStart?.(e)},[U]),Y=(0,t.useCallback)(e=>{W(),A.current.onSpeechStart?.(e)},[W]),re=(0,t.useCallback)(e=>{U(),A.current.onSpeechEnd?.(e)},[U]),ie=(0,t.useCallback)(e=>{let t=Array.from(e?.results??[],e=>{let t={confidence:-1/0,transcript:``},n=[];for(let r=0;r<e.length;r++){let i=e[r];n.push(i.transcript??``),(i.confidence===void 0||i.confidence>t.confidence)&&(t=i)}return{best:t.transcript??``,alternatives:n}}),n=t.map(e=>e.best).join(``);W(),j.current?(M.current.transcript=n,M.current.event=e,V.current>0&&G()):(ne(t,N.current),q(),A.current.onResult?.(n,e))},[W,G,q]),X=(0,t.useCallback)(e=>{q(),A.current.onError?.(e)},[q]),ae=(0,t.useCallback)(e=>{W(),q(),A.current.onNoMatch?.(e)},[W,q]),Z=(0,t.useCallback)(e=>{W(),K();try{q(),R.current?.(),j.current&&M.current.transcript&&(A.current.onResult?.(M.current.transcript,M.current.event),M.current.transcript=``,M.current.event=null)}finally{A.current.onEnd?.(e)}},[W,K,q]);z.current=Z;let Q=(0,t.useMemo)(()=>({start:J,end:Z,speechstart:Y,speechend:re,result:ie,error:X,nomatch:ae}),[J,Z,Y,re,ie,X,ae]);R.current=()=>Object.entries(Q).forEach(([e,t])=>O?.(e,t));let $=(0,t.useCallback)(()=>{try{M.current.transcript=``,M.current.event=null,K(),w(!0),Object.entries(Q).forEach(([e,t])=>D(e,t)),T()}catch(e){X(e)}},[Q,D,T,K,X]),oe=()=>{!f&&p&&(S.current.style.outline=p)},se=()=>{!f&&p&&(S.current.style.outline=`none`)};return P.isSupported?F(e)?e($,q,C):(0,t.isValidElement)(e)?(0,t.cloneElement)(e,{...!C&&{onClick:$}}):(0,B.jsx)(`button`,{"data-testid":`__vocal-root__`,ref:S,"aria-label":u,"aria-pressed":C,style:f?null:{width:24,height:24,backgroundColor:`transparent`,border:`none`,padding:0,cursor:!l&&C?`default`:`pointer`,...d},className:f,onFocus:oe,onBlur:se,onClick:C?q:$,children:(0,B.jsx)(te,{isActive:C,color:`#aaa`})}):null},H=P.isSupported;e.default=V,e.isSupported=H,e.useVocal=I});
9
- //# sourceMappingURL=index.umd.js.map