@untemps/react-vocal
Advanced tools
Comparing version 1.4.1 to 1.5.0
@@ -0,1 +1,8 @@ | ||
# [1.5.0](https://github.com/untemps/react-vocal/compare/v1.4.1...v1.5.0) (2020-12-21) | ||
### Features | ||
* Expose the isListening flag in the function as children ([#30](https://github.com/untemps/react-vocal/issues/30)) ([436df67](https://github.com/untemps/react-vocal/commit/436df67a5e516fa08c6edf3c2cf425f9eb3621e1)) | ||
## [1.4.1](https://github.com/untemps/react-vocal/compare/v1.4.0...v1.4.1) (2020-10-22) | ||
@@ -2,0 +9,0 @@ |
@@ -1,2 +0,2 @@ | ||
import e,{useRef as t,useEffect as n,useCallback as r,useState as o,isValidElement as i,cloneElement as a}from"react";import c from"prop-types";function u(e,t,n,r,o,i,a){try{var c=e[i](a),u=c.value}catch(e){return void n(e)}c.done?t(u):Promise.resolve(u).then(r,o)}function s(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)}}function l(e,t,n){return t&&s(e.prototype,t),n&&s(e,n),e}function f(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(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 h(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?p(Object(n),!0).forEach((function(t){f(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):p(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function v(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,o=!1,i=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return n}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return m(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return m(e,t)}(e,t)||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 m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function d(e,t,n,r,o,i,a){try{var c=e[i](a),u=c.value}catch(e){return void n(e)}c.done?t(u):Promise.resolve(u).then(r,o)}function y(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){d(i,r,o,a,c,"next",e)}function c(e){d(i,r,o,a,c,"throw",e)}a(void 0)}))}}function b(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return n}}(e,t)||function(e,t){if(e){if("string"==typeof e)return g(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?g(e,t):void 0}}(e,t)||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(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var w=function(){var e=y(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=y(regeneratorRuntime.mark((function e(n,r){var o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.permissions){e.next=4;break}r(new DOMException("Permissions not supported","NOT_FOUND_ERR")),e.next=16;break;case 4:return e.prev=4,e.next=7,navigator.permissions.query({name:t});case 7:o=e.sent,i=function e(t){o.removeEventListener("change",e),S(t.target.state,n,r)},o.addEventListener("change",i),S(o.state,n,r),e.next=16;break;case 13:e.prev=13,e.t0=e.catch(4),r(e.t0);case 16:case"end":return e.stop()}}),e,null,[[4,13]])})));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)}}(),S=function(e,t,n){switch(e){case"denied":n(new DOMException("Permission denied","NOT_ALLOWED_ERR"));break;default:t(e)}},_=function(){var e=y(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=y(regeneratorRuntime.mark((function e(r,o){var i,a,c;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.mediaDevices){e.next=4;break}o(new DOMException("MediaDevices not supported","NOT_FOUND_ERR")),e.next=24;break;case 4:return e.prev=4,e.t0=Promise,e.next=8,w(t);case 8:return e.t1=e.sent,e.next=11,navigator.mediaDevices.getUserMedia(n);case 11:return e.t2=e.sent,e.t3=[e.t1,e.t2],e.next=15,e.t0.all.call(e.t0,e.t3);case 15:i=e.sent,a=b(i,2),c=a[1],r(c),e.next=24;break;case 21:e.prev=21,e.t4=e.catch(4),o(e.t4);case 24:case"end":return e.stop()}}),e,null,[[4,21]])})));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)}}(),E=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),f(this,"_instance",null),f(this,"_listeners",null);var r=e._resolveSpeechRecognition()||{};this._instance=new r,this._listeners={},Object.entries(h(h({},e.defaultOptions),t||{})).forEach((function(t){var r=v(t,2),o=r[0],i=r[1];"grammars"!==o||i||(i=new(e._resolveSpeechGrammarList()||{}));n._instance[o]=i}))}var t,n;return l(e,null,[{key:"isSupported",get:function(){return!!e._resolveSpeechRecognition()},set:function(e){throw new Error("You cannot set isSupported directly.")}}]),l(e,[{key:"start",value:(t=regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.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,_("microphone",{audio:!0});case 4:if(e.sent){e.next=7;break}throw new 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]])})),n=function(){var e=this,n=arguments;return new Promise((function(r,o){var i=t.apply(e,n);function a(e){u(i,r,o,a,c,"next",e)}function c(e){u(i,r,o,a,c,"throw",e)}a(void 0)}))},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,n){var r=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),n&&n.apply(r,[].concat(i,[o]))};this._instance.addEventListener(t,o),this._listeners[t]=o}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 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}();f(E,"defaultOptions",{grammars:null,lang:"en-US",continuous:!1,interimResults:!1,maxAlternatives:1,serviceURI:null}),f(E,"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 O=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"en-US",o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=t(null);n((function(){if(E.isSupported)return a.current=i||new E({lang:e,grammars:o}),function(){a.current.abort(),a.current.cleanup()}}),[e,o,i]);var c=r((function(){a.current&&a.current.start()}),[]),u=r((function(){a.current&&a.current.stop()}),[]),s=r((function(){a.current&&a.current.abort()}),[]),l=r((function(e,t){a.current&&a.current.addEventListener(e,t)}),[]),f=r((function(e,t){a.current&&a.current.removeEventListener(e,t)}),[]),p=r((function(){a.current&&a.current.cleanup()}),[]);return[a,{start:c,stop:u,abort:s,subscribe:l,unsubscribe:f,clean:p}]},R=function(t){var n=t.color,r=t.activeColor,o=t.isActive;return e.createElement("svg",{"data-testid":"__icon-root__",xmlns:"http://www.w3.org/2000/svg",width:"100%",height:"100%",viewBox:"0 0 24 24"},e.createElement("g",null,e.createElement("path",{"data-testid":"__icon-path__",fill:n,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"}),o&&e.createElement("circle",{"data-testid":"__icon-active__",fill:r,cx:"16",cy:"4",r:"4"})))};R.propTypes={color:c.string,activeColor:c.string,isActive:c.bool},R.defaultProps={color:"black",activeColor:"red",isActive:!1};var k=function(c){var u=c.children,s=c.lang,l=c.grammars,f=c.timeout,p=c.ariaLabel,m=c.style,d=c.className,y=c.outlineStyle,b=c.onStart,g=c.onEnd,w=c.onSpeechStart,S=c.onSpeechEnd,_=c.onResult,k=c.onError,x=c.onNoMatch,j=c.__rsInstance,T=t(null),A=v(o(!1),2),L=A[0],P=A[1],D=v(O(s,l,j),2)[1],N=D.start,U=D.stop,C=D.subscribe,M=D.unsubscribe,I=function e(t){H(),B(),M("start",V),M("end",e),M("speechstart",W),M("speechend",J),M("result",K),M("error",Q),M("nomatch",X),g&&g(t)},G=v(function(e){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=t(-1),a=r((function(){clearTimeout(i.current),i.current=-1}),[]),c=r((function(){a(),i.current=setTimeout(e,o)}),[e,o,a]);return n((function(){return a}),[a]),[c,a]}(I,f),2),z=G[0],H=G[1],F=function(){try{P(!0),C("start",V),C("end",I),C("speechstart",W),C("speechend",J),C("result",K),C("error",Q),C("nomatch",X),N()}catch(e){Q(e)}},B=function(){try{P(!1),U()}catch(e){k&&k(e)}},Y=function(){F()},$=function(){!d&&y&&(T.current.style.outline=y)},q=function(){!d&&y&&(T.current.style.outline="none")},V=function(e){z(),b&&b(e)},W=function(e){H(),w&&w(e)},J=function(e){z(),S&&S(e)},K=function(e,t){H(),B(),_&&_(e,t)},Q=function(e){B(),k&&k(e)},X=function(e){H(),B(),x&&x(e)};return function(t){return E.isSupported?"function"==typeof t?t(F,B):i(t)?a(t,h({},!L&&{onClick:Y})):e.createElement("button",{"data-testid":"__vocal-root__",ref:T,role:"button","aria-label":p,style:d?null:h({width:24,height:24,background:"none",border:"none",padding:0,cursor:L?"default":"pointer"},m),className:d,onFocus:$,onBlur:q,onClick:Y},e.createElement(R,{isActive:L,iconColor:"#aaa"})):null}(u)};k.propTypes={lang:c.string,grammars:c.object,timeout:c.number,ariaLabel:c.string,style:c.object,className:c.string,outlineStyle:c.string,onStart:c.func,onEnd:c.func,onSpeechStart:c.func,onSpeechEnd:c.func,onResult:c.func,onError:c.func,onNoMatch:c.func},k.defaultProps={lang:"en-US",grammars:null,timeout:3e3,ariaLabel:"start recognition",style:null,className:null,outlineStyle:"2px solid",onStart:null,onEnd:null,onSpeechStart:null,onSpeechEnd:null,onResult:null,onError:null,onNoMatch:null};var x=E.isSupported;export default k;export{x as isSupported,O as useVocal}; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZXMuanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9AdW50ZW1wcy91c2VyLXBlcm1pc3Npb25zLXV0aWxzL2Rpc3QvaW5kZXguZXMuanMiLCIuLi9zcmMvY29yZS9TcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuanMiLCIuLi9zcmMvdXRpbHMvaXNGdW5jLmpzIiwiLi4vc3JjL2hvb2tzL3VzZVZvY2FsLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvSWNvbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1ZvY2FsLmpzIiwiLi4vc3JjL2hvb2tzL3VzZVRpbWVvdXQuanMiLCIuLi9zcmMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gZShlLHIsdCxuLGEsaSxvKXt0cnl7dmFyIHU9ZVtpXShvKSxjPXUudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdChlKX11LmRvbmU/cihjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIHIocil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGEsaSl7dmFyIG89ci5hcHBseSh0LG4pO2Z1bmN0aW9uIHUocil7ZShvLGEsaSx1LGMsXCJuZXh0XCIscil9ZnVuY3Rpb24gYyhyKXtlKG8sYSxpLHUsYyxcInRocm93XCIscil9dSh2b2lkIDApfSkpfX1mdW5jdGlvbiB0KGUscil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHIpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBTeW1ib2x8fCEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKSkpcmV0dXJuO3ZhciB0PVtdLG49ITAsYT0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHU9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXUubmV4dCgpKS5kb25lKSYmKHQucHVzaChvLnZhbHVlKSwhcnx8dC5sZW5ndGghPT1yKTtuPSEwKTt9Y2F0Y2goZSl7YT0hMCxpPWV9ZmluYWxseXt0cnl7bnx8bnVsbD09dS5yZXR1cm58fHUucmV0dXJuKCl9ZmluYWxseXtpZihhKXRocm93IGl9fXJldHVybiB0fShlLHIpfHxmdW5jdGlvbihlLHIpe2lmKCFlKXJldHVybjtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbihlLHIpO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKTtpZihcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20oZSk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBuKGUscil9KGUscil8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBuKGUscil7KG51bGw9PXJ8fHI+ZS5sZW5ndGgpJiYocj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAsbj1uZXcgQXJyYXkocik7dDxyO3QrKyluW3RdPWVbdF07cmV0dXJuIG59dmFyIGE9ZnVuY3Rpb24oKXt2YXIgZT1yKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKHQpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KFwicmV0dXJuXCIsbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZT1yKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKHIsbil7dmFyIGEsbztyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKG5hdmlnYXRvci5wZXJtaXNzaW9ucyl7ZS5uZXh0PTQ7YnJlYWt9bihuZXcgRE9NRXhjZXB0aW9uKFwiUGVybWlzc2lvbnMgbm90IHN1cHBvcnRlZFwiLFwiTk9UX0ZPVU5EX0VSUlwiKSksZS5uZXh0PTE2O2JyZWFrO2Nhc2UgNDpyZXR1cm4gZS5wcmV2PTQsZS5uZXh0PTcsbmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHtuYW1lOnR9KTtjYXNlIDc6YT1lLnNlbnQsbz1mdW5jdGlvbiBlKHQpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLGUpLGkodC50YXJnZXQuc3RhdGUscixuKX0sYS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsbyksaShhLnN0YXRlLHIsbiksZS5uZXh0PTE2O2JyZWFrO2Nhc2UgMTM6ZS5wcmV2PTEzLGUudDA9ZS5jYXRjaCg0KSxuKGUudDApO2Nhc2UgMTY6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzQsMTNdXSl9KSkpO3JldHVybiBmdW5jdGlvbihyLHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKTtjYXNlIDE6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKTtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxpPWZ1bmN0aW9uKGUscix0KXtzd2l0Y2goZSl7Y2FzZVwiZGVuaWVkXCI6dChuZXcgRE9NRXhjZXB0aW9uKFwiUGVybWlzc2lvbiBkZW5pZWRcIixcIk5PVF9BTExPV0VEX0VSUlwiKSk7YnJlYWs7ZGVmYXVsdDpyKGUpfX0sbz1mdW5jdGlvbigpe3ZhciBlPXIocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUobixpKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdChcInJldHVyblwiLG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGU9cihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZShyLG8pe3ZhciB1LGMscztyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKG5hdmlnYXRvci5tZWRpYURldmljZXMpe2UubmV4dD00O2JyZWFrfW8obmV3IERPTUV4Y2VwdGlvbihcIk1lZGlhRGV2aWNlcyBub3Qgc3VwcG9ydGVkXCIsXCJOT1RfRk9VTkRfRVJSXCIpKSxlLm5leHQ9MjQ7YnJlYWs7Y2FzZSA0OnJldHVybiBlLnByZXY9NCxlLnQwPVByb21pc2UsZS5uZXh0PTgsYShuKTtjYXNlIDg6cmV0dXJuIGUudDE9ZS5zZW50LGUubmV4dD0xMSxuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYShpKTtjYXNlIDExOnJldHVybiBlLnQyPWUuc2VudCxlLnQzPVtlLnQxLGUudDJdLGUubmV4dD0xNSxlLnQwLmFsbC5jYWxsKGUudDAsZS50Myk7Y2FzZSAxNTp1PWUuc2VudCxjPXQodSwyKSxzPWNbMV0scihzKSxlLm5leHQ9MjQ7YnJlYWs7Y2FzZSAyMTplLnByZXY9MjEsZS50ND1lLmNhdGNoKDQpLG8oZS50NCk7Y2FzZSAyNDpjYXNlXCJlbmRcIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbNCwyMV1dKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHIsdCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkpO2Nhc2UgMTpjYXNlXCJlbmRcIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbihyLHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7ZXhwb3J0e2EgYXMgZ2V0UGVybWlzc2lvbixvIGFzIGdldFVzZXJNZWRpYVN0cmVhbX07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1WlhNdWFuTWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTluWlhSUVpYSnRhWE56YVc5dUxtcHpJaXdpTGk0dmMzSmpMMmRsZEZWelpYSk5aV1JwWVZOMGNtVmhiUzVxY3lKZExDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ1lTQndjbTl0YVhObElISmxjMjlzZG1Wa0lIZG9aVzRnZEdobElIQmxjbTFwYzNOcGIyNGdhWE1nWjNKaGJuUmxaQ0JpZVNCMGFHVWdkWE5sY2x4dUlDb2dRSEJoY21GdElIQmxjbTFwYzNOcGIyNU9ZVzFsSUNBZ0lDQWdJQ0FnSUNBZ1RtRnRaU0J2WmlCMGFHVWdjR1Z5YldsemMybHZiaTRnUUhObFpTQm9kSFJ3Y3pvdkwzY3pZeTVuYVhSb2RXSXVhVzh2Y0dWeWJXbHpjMmx2Ym5NdkkyVnVkVzFrWldZdGNHVnliV2x6YzJsdmJtNWhiV1ZjYmlBcUlFQnlaWFIxY201eklIdFFjbTl0YVhObGZWeHVJQ292WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JoYzNsdVl5QW9jR1Z5YldsemMybHZiazVoYldVcElEMCtJSHRjYmx4MGNtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtHRnplVzVqSUNoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNibHgwWEhScFppQW9JVzVoZG1sbllYUnZjaTV3WlhKdGFYTnphVzl1Y3lrZ2UxeHVYSFJjZEZ4MGNtVnFaV04wS0c1bGR5QkVUMDFGZUdObGNIUnBiMjRvSjFCbGNtMXBjM05wYjI1eklHNXZkQ0J6ZFhCd2IzSjBaV1FuTENBblRrOVVYMFpQVlU1RVgwVlNVaWNwS1Z4dVhIUmNkSDBnWld4elpTQjdYRzVjZEZ4MFhIUjBjbmtnZTF4dVhIUmNkRngwWEhSamIyNXpkQ0J3WlhKdGFYTnphVzl1VTNSaGRIVnpJRDBnWVhkaGFYUWdibUYyYVdkaGRHOXlMbkJsY20xcGMzTnBiMjV6TG5GMVpYSjVLSHNnYm1GdFpUb2djR1Z5YldsemMybHZiazVoYldVZ2ZTbGNibHgwWEhSY2RGeDBZMjl1YzNRZ2IyNURhR0Z1WjJVZ1BTQW9aWFpsYm5RcElEMCtJSHRjYmx4MFhIUmNkRngwWEhSd1pYSnRhWE56YVc5dVUzUmhkSFZ6TG5KbGJXOTJaVVYyWlc1MFRHbHpkR1Z1WlhJb0oyTm9ZVzVuWlNjc0lHOXVRMmhoYm1kbEtWeHVYSFJjZEZ4MFhIUmNkSEpsYzI5c2RtVlBjbEpsYW1WamRFSmhjMlZrVDI1VGRHRjBaU2hsZG1WdWRDNTBZWEpuWlhRdWMzUmhkR1VzSUhKbGMyOXNkbVVzSUhKbGFtVmpkQ2xjYmx4MFhIUmNkRngwZlZ4dVhIUmNkRngwWEhSd1pYSnRhWE56YVc5dVUzUmhkSFZ6TG1Ga1pFVjJaVzUwVEdsemRHVnVaWElvSjJOb1lXNW5aU2NzSUc5dVEyaGhibWRsS1Z4dVhIUmNkRngwWEhSeVpYTnZiSFpsVDNKU1pXcGxZM1JDWVhObFpFOXVVM1JoZEdVb2NHVnliV2x6YzJsdmJsTjBZWFIxY3k1emRHRjBaU3dnY21WemIyeDJaU3dnY21WcVpXTjBLVnh1WEhSY2RGeDBmU0JqWVhSamFDQW9aWEp5YjNJcElIdGNibHgwWEhSY2RGeDBjbVZxWldOMEtHVnljbTl5S1Z4dVhIUmNkRngwZlZ4dVhIUmNkSDFjYmx4MGZTbGNibjFjYmx4dVkyOXVjM1FnY21WemIyeDJaVTl5VW1WcVpXTjBRbUZ6WldSUGJsTjBZWFJsSUQwZ0tITjBZWFJsTENCeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNibHgwYzNkcGRHTm9JQ2h6ZEdGMFpTa2dlMXh1WEhSY2RHTmhjMlVnSjJSbGJtbGxaQ2M2WEc1Y2RGeDBYSFJ5WldwbFkzUW9ibVYzSUVSUFRVVjRZMlZ3ZEdsdmJpZ25VR1Z5YldsemMybHZiaUJrWlc1cFpXUW5MQ0FuVGs5VVgwRk1URTlYUlVSZlJWSlNKeWtwWEc1Y2RGeDBYSFJpY21WaGExeHVYSFJjZEdSbFptRjFiSFE2WEc1Y2RGeDBYSFJ5WlhOdmJIWmxLSE4wWVhSbEtWeHVYSFI5WEc1OVhHNGlMQ0pwYlhCdmNuUWdaMlYwVUdWeWJXbHpjMmx2YmlCbWNtOXRJQ2N1TDJkbGRGQmxjbTFwYzNOcGIyNG5YRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUJoSUhCeWIyMXBjMlVnY21WemIyeDJaV1FnZDJobGJpQjBhR1VnY0dWeWJXbHpjMmx2YmlCcGN5Qm5jbUZ1ZEdWa0lHSjVJSFJvWlNCMWMyVnlJR0Z1WkNCMGFHVWdjM1J5WldGdElHbHpJSEpsZEhKcFpYWmxaRnh1SUNvZ1FIQmhjbUZ0SUhCbGNtMXBjM05wYjI1T1lXMWxJQ0FnSUNBZ0lDQWdJQ0FnVG1GdFpTQnZaaUIwYUdVZ2NHVnliV2x6YzJsdmJpNGdRSE5sWlNCb2RIUndjem92TDNjell5NW5hWFJvZFdJdWFXOHZjR1Z5YldsemMybHZibk12STJWdWRXMWtaV1l0Y0dWeWJXbHpjMmx2Ym01aGJXVmNiaUFxSUVCd1lYSmhiU0J0WldScFlWTjBjbVZoYlVOdmJuTjBjbUZwYm5SeklDQWdJRU52Ym5OMGNtRnBiblJ6SUc5aWFtVmpkQzRnUUhObFpTQm9kSFJ3Y3pvdkwyUmxkbVZzYjNCbGNpNXRiM3BwYkd4aExtOXlaeTlsYmkxVlV5OWtiMk56TDFkbFlpOUJVRWt2VFdWa2FXRlRkSEpsWVcxRGIyNXpkSEpoYVc1MGMxeHVJQ29nUUhKbGRIVnlibk1nZTFCeWIyMXBjMlY5WEc0Z0tpOWNibVY0Y0c5eWRDQmtaV1poZFd4MElHRnplVzVqSUNod1pYSnRhWE56YVc5dVRtRnRaU3dnYldWa2FXRlRkSEpsWVcxRGIyNXpkSEpoYVc1MGN5a2dQVDRnZTF4dVhIUnlaWFIxY200Z2JtVjNJRkJ5YjIxcGMyVW9ZWE41Ym1NZ0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh1WEhSY2RHbG1JQ2doYm1GMmFXZGhkRzl5TG0xbFpHbGhSR1YyYVdObGN5a2dlMXh1WEhSY2RGeDBjbVZxWldOMEtHNWxkeUJFVDAxRmVHTmxjSFJwYjI0b0owMWxaR2xoUkdWMmFXTmxjeUJ1YjNRZ2MzVndjRzl5ZEdWa0p5d2dKMDVQVkY5R1QxVk9SRjlGVWxJbktTbGNibHgwWEhSOUlHVnNjMlVnZTF4dVhIUmNkRngwZEhKNUlIdGNibHgwWEhSY2RGeDBZMjl1YzNRZ1d5d2djM1J5WldGdFhTQTlJR0YzWVdsMElGQnliMjFwYzJVdVlXeHNLRnRjYmx4MFhIUmNkRngwWEhSaGQyRnBkQ0JuWlhSUVpYSnRhWE56YVc5dUtIQmxjbTFwYzNOcGIyNU9ZVzFsS1N4Y2JseDBYSFJjZEZ4MFhIUmhkMkZwZENCdVlYWnBaMkYwYjNJdWJXVmthV0ZFWlhacFkyVnpMbWRsZEZWelpYSk5aV1JwWVNodFpXUnBZVk4wY21WaGJVTnZibk4wY21GcGJuUnpLU3hjYmx4MFhIUmNkRngwWFNsY2JseDBYSFJjZEZ4MGNtVnpiMngyWlNoemRISmxZVzBwWEc1Y2RGeDBYSFI5SUdOaGRHTm9JQ2hsY25KdmNpa2dlMXh1WEhSY2RGeDBYSFJ5WldwbFkzUW9aWEp5YjNJcFhHNWNkRngwWEhSOVhHNWNkRngwZlZ4dVhIUjlLVnh1ZlZ4dUlsMHNJbTVoYldWeklqcGJJbkJsY20xcGMzTnBiMjVPWVcxbElpd2lVSEp2YldselpTSXNJbkpsYzI5c2RtVWlMQ0p5WldwbFkzUWlMQ0p1WVhacFoyRjBiM0lpTENKd1pYSnRhWE56YVc5dWN5SXNJa1JQVFVWNFkyVndkR2x2YmlJc0luRjFaWEo1SWl3aWJtRnRaU0lzSW5CbGNtMXBjM05wYjI1VGRHRjBkWE1pTENKdmJrTm9ZVzVuWlNJc0ltVjJaVzUwSWl3aWNtVnRiM1psUlhabGJuUk1hWE4wWlc1bGNpSXNJbkpsYzI5c2RtVlBjbEpsYW1WamRFSmhjMlZrVDI1VGRHRjBaU0lzSW5SaGNtZGxkQ0lzSW5OMFlYUmxJaXdpWVdSa1JYWmxiblJNYVhOMFpXNWxjaUlzSW0xbFpHbGhVM1J5WldGdFEyOXVjM1J5WVdsdWRITWlMQ0p0WldScFlVUmxkbWxqWlhNaUxDSm5aWFJRWlhKdGFYTnphVzl1SWl3aVoyVjBWWE5sY2sxbFpHbGhJaXdpWVd4c0lpd2ljM1J5WldGdElsMHNJbTFoY0hCcGJtZHpJam9pYlhkRFFVdEJMR3RFUVVGbExGZEJRVTlCTERSSFFVTmtMRWxCUVVsRExHOUVRVUZSTEZkQlFVOURMRVZCUVZORExEaEdRVU0zUWtNc1ZVRkJWVU1zTkVKQlEyUkdMRVZCUVU4c1NVRkJTVWNzWVVGQllTdzBRa0ZCTmtJc2EwVkJSM0pDUml4VlFVRlZReXhaUVVGWlJTeE5RVUZOTEVOQlFVVkRMRXRCUVUxU0xGZEJRVGRFVXl4VFFVTkJReXhGUVVGWExGTkJRVmhCTEVWQlFWbERMRWRCUTJwQ1JpeEZRVUZwUWtjc2IwSkJRVzlDTEZOQlFWVkdMRWRCUXk5RFJ5eEZRVUUwUWtZc1JVRkJUVWNzVDBGQlQwTXNUVUZCVDJJc1JVRkJVME1zU1VGRk1VUk5MRVZCUVdsQ1R5eHBRa0ZCYVVJc1UwRkJWVTRzUjBGRE5VTkhMRVZCUVRSQ1NpeEZRVUZwUWswc1RVRkJUMklzUlVGQlUwTXNjVVJCUlRkRVFTdzJUa0ZOUlZVc1JVRkJPRUlzVTBGQlEwVXNSVUZCVDJJc1JVRkJVME1zVlVGRE5VTlpMRTlCUTBZc1UwRkRTbG9zUlVGQlR5eEpRVUZKUnl4aFFVRmhMRzlDUVVGeFFpeHJRMEZITjBOS0xFVkJRVkZoTEcxRVEzWkNTU3hYUVVGUFppeEZRVUZuUW1sQ0xEUkhRVU01UWl4SlFVRkphRUlzYjBSQlFWRXNWMEZCVDBNc1JVRkJVME1zWjBkQlF6ZENReXhWUVVGVll5dzJRa0ZEWkdZc1JVRkJUeXhKUVVGSlJ5eGhRVUZoTERaQ1FVRTRRaXc0UkVGSE5VSk1MR2xDUVVOc1FtdENMRVZCUVdOdVFpeDFRMEZEWkVrc1ZVRkJWV01zWVVGQllVVXNZVUZCWVVnc09FUkJSbFpKTERoRFFVRjRRa01zVDBGSlZIQkNMRVZCUVZGdlFpeHhSRUZGVW01Q0luMD1cbiIsImltcG9ydCB7IGdldFVzZXJNZWRpYVN0cmVhbSB9IGZyb20gJ0B1bnRlbXBzL3VzZXItcGVybWlzc2lvbnMtdXRpbHMnXG5cbmNsYXNzIFNwZWVjaFJlY29nbml0aW9uV3JhcHBlciB7XG5cdHN0YXRpYyBkZWZhdWx0T3B0aW9ucyA9IHtcblx0XHRncmFtbWFyczogbnVsbCxcblx0XHRsYW5nOiAnZW4tVVMnLFxuXHRcdGNvbnRpbnVvdXM6IGZhbHNlLFxuXHRcdGludGVyaW1SZXN1bHRzOiBmYWxzZSxcblx0XHRtYXhBbHRlcm5hdGl2ZXM6IDEsXG5cdFx0c2VydmljZVVSSTogbnVsbCxcblx0fVxuXG5cdHN0YXRpYyBldmVudFR5cGVzID0ge1xuXHRcdEFVRElPX0VORDogJ2F1ZGlvZW5kJyxcblx0XHRBVURJT19TVEFSVDogJ2F1ZGlvc3RhcnQnLFxuXHRcdEVORDogJ2VuZCcsXG5cdFx0RVJST1I6ICdlcnJvcicsXG5cdFx0Tk9fTUFUQ0g6ICdub21hdGNoJyxcblx0XHRSRVNVTFQ6ICdyZXN1bHQnLFxuXHRcdFNPVU5EX0VORDogJ3NvdW5kZW5kJyxcblx0XHRTT1VORF9TVEFSVDogJ3NvdW5kc3RhcnQnLFxuXHRcdFNQRUVDSF9FTkQ6ICdzcGVlY2hlbmQnLFxuXHRcdFNQRUVDSF9TVEFSVDogJ3NwZWVjaHN0YXJ0Jyxcblx0XHRTVEFSVDogJ3N0YXJ0Jyxcblx0fVxuXG5cdHN0YXRpYyBnZXQgaXNTdXBwb3J0ZWQoKSB7XG5cdFx0cmV0dXJuICEhU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLl9yZXNvbHZlU3BlZWNoUmVjb2duaXRpb24oKVxuXHR9XG5cblx0c3RhdGljIHNldCBpc1N1cHBvcnRlZChfKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IHNldCBpc1N1cHBvcnRlZCBkaXJlY3RseS4nKVxuXHR9XG5cblx0X2luc3RhbmNlID0gbnVsbFxuXHRfbGlzdGVuZXJzID0gbnVsbFxuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRjb25zdCBTcGVlY2hSZWNvZ25pdGlvbiA9IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5fcmVzb2x2ZVNwZWVjaFJlY29nbml0aW9uKCkgfHwge31cblx0XHR0aGlzLl9pbnN0YW5jZSA9IG5ldyBTcGVlY2hSZWNvZ25pdGlvbigpXG5cdFx0dGhpcy5fbGlzdGVuZXJzID0ge31cblxuXHRcdE9iamVjdC5lbnRyaWVzKHtcblx0XHRcdC4uLlNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5kZWZhdWx0T3B0aW9ucyxcblx0XHRcdC4uLihvcHRpb25zIHx8IHt9KSxcblx0XHR9KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcblx0XHRcdGlmIChrZXkgPT09ICdncmFtbWFycycgJiYgIXZhbHVlKSB7XG5cdFx0XHRcdGNvbnN0IFNwZWVjaEdyYW1tYXJMaXN0ID0gU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLl9yZXNvbHZlU3BlZWNoR3JhbW1hckxpc3QoKSB8fCB7fVxuXHRcdFx0XHR2YWx1ZSA9IG5ldyBTcGVlY2hHcmFtbWFyTGlzdCgpXG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9pbnN0YW5jZVtrZXldID0gdmFsdWVcblx0XHR9KVxuXHR9XG5cblx0Z2V0IGluc3RhbmNlKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbnN0YW5jZVxuXHR9XG5cblx0c2V0IGluc3RhbmNlKF8pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW5ub3Qgc2V0IGluc3RhbmNlIGRpcmVjdGx5LicpXG5cdH1cblxuXHRhc3luYyBzdGFydCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3Qgc3RyZWFtID0gYXdhaXQgZ2V0VXNlck1lZGlhU3RyZWFtKCdtaWNyb3Bob25lJywgeyBhdWRpbzogdHJ1ZSB9KVxuXHRcdFx0XHRpZiAoIXN0cmVhbSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHRoZSBzdHJlYW0gZnJvbSBtZWRpYSBkZXZpY2UnKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX2luc3RhbmNlLnN0YXJ0KClcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuX2xpc3RlbmVycy5lcnJvclxuXHRcdFx0XHRpZiAoISFlcnJvckhhbmRsZXIpIHtcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIoZXJyb3IpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0c3RvcCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dGhpcy5faW5zdGFuY2Uuc3RvcCgpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdGFib3J0KCkge1xuXHRcdGlmICghIXRoaXMuX2luc3RhbmNlKSB7XG5cdFx0XHR0aGlzLl9pbnN0YW5jZS5hYm9ydCgpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdGFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBjYWxsYmFjaykge1xuXHRcdGlmICghIXRoaXMuX2luc3RhbmNlICYmIHRoaXMuX2luY2x1ZGVzRXZlbnRUeXBlKGV2ZW50VHlwZSkpIHtcblx0XHRcdGlmICghIXRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdKSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUpXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0bGV0IGFkZGl0aW9uYWxBcmdzID0gW11cblx0XHRcdFx0aWYgKGV2ZW50VHlwZSA9PT0gU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmV2ZW50VHlwZXMuUkVTVUxUKSB7XG5cdFx0XHRcdFx0aWYgKCEhZXZlbnQucmVzdWx0cyAmJiBldmVudC5yZXN1bHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGFkZGl0aW9uYWxBcmdzLnB1c2goZXZlbnQucmVzdWx0c1swXVswXS50cmFuc2NyaXB0KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCEhY2FsbGJhY2sgJiYgY2FsbGJhY2suYXBwbHkodGhpcywgWy4uLmFkZGl0aW9uYWxBcmdzLCBldmVudF0pXG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9pbnN0YW5jZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlcilcblxuXHRcdFx0dGhpcy5fbGlzdGVuZXJzW2V2ZW50VHlwZV0gPSBoYW5kbGVyXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdXG5cdFx0dGhpcy5faW5zdGFuY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIpXG5cblx0XHRkZWxldGUgdGhpcy5fbGlzdGVuZXJzW2V2ZW50VHlwZV1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRjbGVhbnVwKCkge1xuXHRcdHRoaXMuc3RvcCgpXG5cblx0XHRPYmplY3Qua2V5cyh0aGlzLl9saXN0ZW5lcnMpLmZvckVhY2goKGtleSkgPT4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGtleSkpXG5cdFx0dGhpcy5faW5zdGFuY2UgPSBudWxsXG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0X2luY2x1ZGVzRXZlbnRUeXBlKGV2ZW50VHlwZSkge1xuXHRcdHJldHVybiAhIU9iamVjdC52YWx1ZXMoU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmV2ZW50VHlwZXMpLmZpbmQoKHR5cGUpID0+IHR5cGUgPT09IGV2ZW50VHlwZSlcblx0fVxuXG5cdHN0YXRpYyBfcmVzb2x2ZVNwZWVjaFJlY29nbml0aW9uKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHR3aW5kb3cuU3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdHdpbmRvdy53ZWJraXRTcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0d2luZG93Lm1velNwZWVjaFJlY29nbml0aW9uIHx8XG5cdFx0XHR3aW5kb3cubXNTcGVlY2hSZWNvZ25pdGlvblxuXHRcdClcblx0fVxuXG5cdHN0YXRpYyBfcmVzb2x2ZVNwZWVjaEdyYW1tYXJMaXN0KCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHR3aW5kb3cuU3BlZWNoR3JhbW1hckxpc3QgfHxcblx0XHRcdHdpbmRvdy53ZWJraXRTcGVlY2hHcmFtbWFyTGlzdCB8fFxuXHRcdFx0d2luZG93Lm1velNwZWVjaEdyYW1tYXJMaXN0IHx8XG5cdFx0XHR3aW5kb3cubXNTcGVlY2hHcmFtbWFyTGlzdFxuXHRcdClcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXJcbiIsImV4cG9ydCBkZWZhdWx0ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbidcbiIsImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyIGZyb20gJy4uL2NvcmUvU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyJ1xuXG5jb25zdCB1c2VWb2NhbCA9IChsYW5nID0gJ2VuLVVTJywgZ3JhbW1hcnMgPSBudWxsLCBfX3JzSW5zdGFuY2UgPSBudWxsKSA9PiB7XG5cdGNvbnN0IHJlZiA9IHVzZVJlZihudWxsKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5pc1N1cHBvcnRlZCkge1xuXHRcdFx0cmVmLmN1cnJlbnQgPSBfX3JzSW5zdGFuY2UgfHwgbmV3IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlcih7IGxhbmcsIGdyYW1tYXJzIH0pXG5cdFx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0XHRyZWYuY3VycmVudC5hYm9ydCgpXG5cdFx0XHRcdHJlZi5jdXJyZW50LmNsZWFudXAoKVxuXHRcdFx0fVxuXHRcdH1cblx0fSwgW2xhbmcsIGdyYW1tYXJzLCBfX3JzSW5zdGFuY2VdKVxuXG5cdGNvbnN0IHN0YXJ0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdGlmIChyZWYuY3VycmVudCkge1xuXHRcdFx0cmVmLmN1cnJlbnQuc3RhcnQoKVxuXHRcdH1cblx0fSwgW10pXG5cblx0Y29uc3Qgc3RvcCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRpZiAocmVmLmN1cnJlbnQpIHtcblx0XHRcdHJlZi5jdXJyZW50LnN0b3AoKVxuXHRcdH1cblx0fSwgW10pXG5cblx0Y29uc3QgYWJvcnQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0aWYgKHJlZi5jdXJyZW50KSB7XG5cdFx0XHRyZWYuY3VycmVudC5hYm9ydCgpXG5cdFx0fVxuXHR9LCBbXSlcblxuXHRjb25zdCBzdWJzY3JpYmUgPSB1c2VDYWxsYmFjaygoZXZlbnRUeXBlLCBoYW5kbGVyKSA9PiB7XG5cdFx0aWYgKHJlZi5jdXJyZW50KSB7XG5cdFx0XHRyZWYuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlcilcblx0XHR9XG5cdH0sIFtdKVxuXG5cdGNvbnN0IHVuc3Vic2NyaWJlID0gdXNlQ2FsbGJhY2soKGV2ZW50VHlwZSwgaGFuZGxlcikgPT4ge1xuXHRcdGlmIChyZWYuY3VycmVudCkge1xuXHRcdFx0cmVmLmN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIpXG5cdFx0fVxuXHR9LCBbXSlcblxuXHRjb25zdCBjbGVhbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRpZiAocmVmLmN1cnJlbnQpIHtcblx0XHRcdHJlZi5jdXJyZW50LmNsZWFudXAoKVxuXHRcdH1cblx0fSwgW10pXG5cblx0cmV0dXJuIFtyZWYsIHsgc3RhcnQsIHN0b3AsIGFib3J0LCBzdWJzY3JpYmUsIHVuc3Vic2NyaWJlLCBjbGVhbiB9XVxufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VWb2NhbFxuXG4vLyBUT0RPOiBSZXR1cm4gdGhlIGluc3RhbmNlLCBub3QgdGhlIHJlZlxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuXG5jb25zdCBJY29uID0gKHsgY29sb3IsIGFjdGl2ZUNvbG9yLCBpc0FjdGl2ZSB9KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PHN2Z1xuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJfX2ljb24tcm9vdF9fXCJcblx0XHRcdHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuXHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdGhlaWdodD1cIjEwMCVcIlxuXHRcdFx0dmlld0JveD1cIjAgMCAyNCAyNFwiXG5cdFx0PlxuXHRcdFx0PGc+XG5cdFx0XHRcdDxwYXRoXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJfX2ljb24tcGF0aF9fXCJcblx0XHRcdFx0XHRmaWxsPXtjb2xvcn1cblx0XHRcdFx0XHRkPVwiTTEyIDE0YzEuNjYgMCAyLjk5LTEuMzQgMi45OS0zTDE1IDVjMC0xLjY2LTEuMzQtMy0zLTNTOSAzLjM0IDkgNXY2YzAgMS42NiAxLjM0IDMgMyAzem01LjMtM2MwIDMtMi41NCA1LjEtNS4zIDUuMVM2LjcgMTQgNi43IDExSDVjMCAzLjQxIDIuNzIgNi4yMyA2IDYuNzJWMjFoMnYtMy4yOGMzLjI4LS40OCA2LTMuMyA2LTYuNzJoLTEuN3pcIlxuXHRcdFx0XHQvPlxuXHRcdFx0XHR7aXNBY3RpdmUgJiYgPGNpcmNsZSBkYXRhLXRlc3RpZD1cIl9faWNvbi1hY3RpdmVfX1wiIGZpbGw9e2FjdGl2ZUNvbG9yfSBjeD1cIjE2XCIgY3k9XCI0XCIgcj1cIjRcIiAvPn1cblx0XHRcdDwvZz5cblx0XHQ8L3N2Zz5cblx0KVxufVxuXG5JY29uLnByb3BUeXBlcyA9IHtcblx0Y29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG5cdGFjdGl2ZUNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRpc0FjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG59XG5cbkljb24uZGVmYXVsdFByb3BzID0ge1xuXHRjb2xvcjogJ2JsYWNrJyxcblx0YWN0aXZlQ29sb3I6ICdyZWQnLFxuXHRpc0FjdGl2ZTogZmFsc2UsXG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb25cbiIsImltcG9ydCBSZWFjdCwgeyBjbG9uZUVsZW1lbnQsIGlzVmFsaWRFbGVtZW50LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5cbmltcG9ydCBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIgZnJvbSAnLi4vY29yZS9TcGVlY2hSZWNvZ25pdGlvbldyYXBwZXInXG5cbmltcG9ydCBpc0Z1bmMgZnJvbSAnLi4vdXRpbHMvaXNGdW5jJ1xuXG5pbXBvcnQgdXNlVm9jYWwgZnJvbSAnLi4vaG9va3MvdXNlVm9jYWwnXG5pbXBvcnQgdXNlVGltZW91dCBmcm9tICcuLi9ob29rcy91c2VUaW1lb3V0J1xuXG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24nXG5cbmNvbnN0IFZvY2FsID0gKHtcblx0Y2hpbGRyZW4sXG5cdGxhbmcsXG5cdGdyYW1tYXJzLFxuXHR0aW1lb3V0LFxuXHRhcmlhTGFiZWwsXG5cdHN0eWxlLFxuXHRjbGFzc05hbWUsXG5cdG91dGxpbmVTdHlsZSxcblx0b25TdGFydCxcblx0b25FbmQsXG5cdG9uU3BlZWNoU3RhcnQsXG5cdG9uU3BlZWNoRW5kLFxuXHRvblJlc3VsdCxcblx0b25FcnJvcixcblx0b25Ob01hdGNoLFxuXHRfX3JzSW5zdGFuY2UsXG59KSA9PiB7XG5cdGNvbnN0IGJ1dHRvblJlZiA9IHVzZVJlZihudWxsKVxuXHRjb25zdCBbaXNMaXN0ZW5pbmcsIHNldElzTGlzdGVuaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG5cdGNvbnN0IFssIHsgc3RhcnQsIHN0b3AsIHN1YnNjcmliZSwgdW5zdWJzY3JpYmUgfV0gPSB1c2VWb2NhbChsYW5nLCBncmFtbWFycywgX19yc0luc3RhbmNlKVxuXG5cdGNvbnN0IF9vbkVuZCA9IChlKSA9PiB7XG5cdFx0c3RvcFRpbWVyKClcblx0XHRzdG9wUmVjb2duaXRpb24oKVxuXG5cdFx0dW5zdWJzY3JpYmUoJ3N0YXJ0JywgX29uU3RhcnQpXG5cdFx0dW5zdWJzY3JpYmUoJ2VuZCcsIF9vbkVuZClcblx0XHR1bnN1YnNjcmliZSgnc3BlZWNoc3RhcnQnLCBfb25TcGVlY2hTdGFydClcblx0XHR1bnN1YnNjcmliZSgnc3BlZWNoZW5kJywgX29uU3BlZWNoRW5kKVxuXHRcdHVuc3Vic2NyaWJlKCdyZXN1bHQnLCBfb25SZXN1bHQpXG5cdFx0dW5zdWJzY3JpYmUoJ2Vycm9yJywgX29uRXJyb3IpXG5cdFx0dW5zdWJzY3JpYmUoJ25vbWF0Y2gnLCBfb25Ob01hdGNoKVxuXG5cdFx0ISFvbkVuZCAmJiBvbkVuZChlKVxuXHR9XG5cblx0Y29uc3QgW3N0YXJ0VGltZXIsIHN0b3BUaW1lcl0gPSB1c2VUaW1lb3V0KF9vbkVuZCwgdGltZW91dClcblxuXHRjb25zdCBzdGFydFJlY29nbml0aW9uID0gKCkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRzZXRJc0xpc3RlbmluZyh0cnVlKVxuXG5cdFx0XHRzdWJzY3JpYmUoJ3N0YXJ0JywgX29uU3RhcnQpXG5cdFx0XHRzdWJzY3JpYmUoJ2VuZCcsIF9vbkVuZClcblx0XHRcdHN1YnNjcmliZSgnc3BlZWNoc3RhcnQnLCBfb25TcGVlY2hTdGFydClcblx0XHRcdHN1YnNjcmliZSgnc3BlZWNoZW5kJywgX29uU3BlZWNoRW5kKVxuXHRcdFx0c3Vic2NyaWJlKCdyZXN1bHQnLCBfb25SZXN1bHQpXG5cdFx0XHRzdWJzY3JpYmUoJ2Vycm9yJywgX29uRXJyb3IpXG5cdFx0XHRzdWJzY3JpYmUoJ25vbWF0Y2gnLCBfb25Ob01hdGNoKVxuXG5cdFx0XHRzdGFydCgpXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdF9vbkVycm9yKGVycm9yKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHN0b3BSZWNvZ25pdGlvbiA9ICgpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0c2V0SXNMaXN0ZW5pbmcoZmFsc2UpXG5cblx0XHRcdHN0b3AoKVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHQhIW9uRXJyb3IgJiYgb25FcnJvcihlcnJvcilcblx0XHR9XG5cdH1cblxuXHRjb25zdCBfb25DbGljayA9ICgpID0+IHtcblx0XHRzdGFydFJlY29nbml0aW9uKClcblx0fVxuXG5cdGNvbnN0IF9vbkZvY3VzID0gKCkgPT4ge1xuXHRcdGlmICghY2xhc3NOYW1lICYmIG91dGxpbmVTdHlsZSkge1xuXHRcdFx0YnV0dG9uUmVmLmN1cnJlbnQuc3R5bGUub3V0bGluZSA9IG91dGxpbmVTdHlsZVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IF9vbkJsdXIgPSAoKSA9PiB7XG5cdFx0aWYgKCFjbGFzc05hbWUgJiYgb3V0bGluZVN0eWxlKSB7XG5cdFx0XHRidXR0b25SZWYuY3VycmVudC5zdHlsZS5vdXRsaW5lID0gJ25vbmUnXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgX29uU3RhcnQgPSAoZSkgPT4ge1xuXHRcdHN0YXJ0VGltZXIoKVxuXG5cdFx0ISFvblN0YXJ0ICYmIG9uU3RhcnQoZSlcblx0fVxuXG5cdGNvbnN0IF9vblNwZWVjaFN0YXJ0ID0gKGUpID0+IHtcblx0XHRzdG9wVGltZXIoKVxuXG5cdFx0ISFvblNwZWVjaFN0YXJ0ICYmIG9uU3BlZWNoU3RhcnQoZSlcblx0fVxuXG5cdGNvbnN0IF9vblNwZWVjaEVuZCA9IChlKSA9PiB7XG5cdFx0c3RhcnRUaW1lcigpXG5cblx0XHQhIW9uU3BlZWNoRW5kICYmIG9uU3BlZWNoRW5kKGUpXG5cdH1cblxuXHRjb25zdCBfb25SZXN1bHQgPSAocmVzdWx0LCBldmVudCkgPT4ge1xuXHRcdHN0b3BUaW1lcigpXG5cdFx0c3RvcFJlY29nbml0aW9uKClcblxuXHRcdCEhb25SZXN1bHQgJiYgb25SZXN1bHQocmVzdWx0LCBldmVudClcblx0fVxuXG5cdGNvbnN0IF9vbkVycm9yID0gKGVycm9yKSA9PiB7XG5cdFx0c3RvcFJlY29nbml0aW9uKClcblxuXHRcdCEhb25FcnJvciAmJiBvbkVycm9yKGVycm9yKVxuXHR9XG5cblx0Y29uc3QgX29uTm9NYXRjaCA9IChlKSA9PiB7XG5cdFx0c3RvcFRpbWVyKClcblx0XHRzdG9wUmVjb2duaXRpb24oKVxuXG5cdFx0ISFvbk5vTWF0Y2ggJiYgb25Ob01hdGNoKGUpXG5cdH1cblxuXHRjb25zdCBfcmVuZGVyRGVmYXVsdCA9ICgpID0+IChcblx0XHQ8YnV0dG9uXG5cdFx0XHRkYXRhLXRlc3RpZD1cIl9fdm9jYWwtcm9vdF9fXCJcblx0XHRcdHJlZj17YnV0dG9uUmVmfVxuXHRcdFx0cm9sZT1cImJ1dHRvblwiXG5cdFx0XHRhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG5cdFx0XHRzdHlsZT17XG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHRcdD8gbnVsbFxuXHRcdFx0XHRcdDoge1xuXHRcdFx0XHRcdFx0XHR3aWR0aDogMjQsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogMjQsXG5cdFx0XHRcdFx0XHRcdGJhY2tncm91bmQ6ICdub25lJyxcblx0XHRcdFx0XHRcdFx0Ym9yZGVyOiAnbm9uZScsXG5cdFx0XHRcdFx0XHRcdHBhZGRpbmc6IDAsXG5cdFx0XHRcdFx0XHRcdGN1cnNvcjogIWlzTGlzdGVuaW5nID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnLFxuXHRcdFx0XHRcdFx0XHQuLi5zdHlsZSxcblx0XHRcdFx0XHQgIH1cblx0XHRcdH1cblx0XHRcdGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuXHRcdFx0b25Gb2N1cz17X29uRm9jdXN9XG5cdFx0XHRvbkJsdXI9e19vbkJsdXJ9XG5cdFx0XHRvbkNsaWNrPXtfb25DbGlja31cblx0XHQ+XG5cdFx0XHQ8SWNvbiBpc0FjdGl2ZT17aXNMaXN0ZW5pbmd9IGljb25Db2xvcj1cIiNhYWFcIiAvPlxuXHRcdDwvYnV0dG9uPlxuXHQpXG5cblx0Y29uc3QgX3JlbmRlckNoaWxkcmVuID0gKGNoaWxkcmVuKSA9PiB7XG5cdFx0aWYgKFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5pc1N1cHBvcnRlZCkge1xuXHRcdFx0aWYgKGlzRnVuYyhjaGlsZHJlbikpIHtcblx0XHRcdFx0cmV0dXJuIGNoaWxkcmVuKHN0YXJ0UmVjb2duaXRpb24sIHN0b3BSZWNvZ25pdGlvbilcblx0XHRcdH0gZWxzZSBpZiAoaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG5cdFx0XHRcdHJldHVybiBjbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcblx0XHRcdFx0XHQuLi4oIWlzTGlzdGVuaW5nICYmIHsgb25DbGljazogX29uQ2xpY2sgfSksXG5cdFx0XHRcdH0pXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gX3JlbmRlckRlZmF1bHQoKVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0cmV0dXJuIF9yZW5kZXJDaGlsZHJlbihjaGlsZHJlbilcbn1cblxuVm9jYWwucHJvcFR5cGVzID0ge1xuXHQvKiogRGVmaW5lcyB0aGUgbGFuZ3VhZ2UgdW5kZXJzdG9vZCBieSB0aGUgcmVjb2duaXRpb24gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TcGVlY2hSZWNvZ25pdGlvbi9sYW5nKSAqL1xuXHRsYW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHQvKiogRGVmaW5lcyB0aGUgZ3JhbW1hcnMgdW5kZXJzdG9vZCBieSB0aGUgcmVjb2duaXRpb24gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TcGVlY2hSZWNvZ25pdGlvbi9ncmFtbWFycykgKi9cblx0Z3JhbW1hcnM6IFByb3BUeXBlcy5vYmplY3QsXG5cdC8qKiBEZWZpbmVzIHRoZSB0aW1lIGluIG1zIHRvIHdhaXQgYmVmb3JlIGRpc2NhcmRpbmcgdGhlIHJlY29nbml0aW9uICovXG5cdHRpbWVvdXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdC8qKiBEZWZpbmVzIHRoZSBhMTF5IGxhYmVsIGZvciB0aGUgZGVmYXVsdCBidXR0b24gKi9cblx0YXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHQvKiogRGVmaW5lcyB0aGUgc3R5bGVzIG9mIHRoZSBkZWZhdWx0IGVsZW1lbnQgaWYgY2xhc3NOYW1lIGlzIG5vdCBzcGVjaWZpZWQgKi9cblx0c3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG5cdC8qKiBEZWZpbmVzIHRoZSBjbGFzcyBvZiB0aGUgZGVmYXVsdCBlbGVtZW50ICovXG5cdGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblx0LyoqIERlZmluZXMgdGhlIGRlZmF1bHQgc3R5bGUgb2YgdGhlIGZvY3VzIG91dGxpbmUuIGlmIG51bGwgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHVzZWQgKi9cblx0b3V0bGluZVN0eWxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiB0aGUgcmVjb2duaXRpb24gc3RhcnRzICovXG5cdG9uU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiB0aGUgcmVjb2duaXRpb24gZW5kcyAqL1xuXHRvbkVuZDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSBzcGVlY2ggc3RhcnRzICovXG5cdG9uU3BlZWNoU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiB0aGUgc3BlZWNoIGVuZHMgKi9cblx0b25TcGVlY2hFbmQ6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiBhIHJlc3VsdCBpcyByZXR1cm5lZCBmcm9tIHRlIHJlY29nbml0aW9uICovXG5cdG9uUmVzdWx0OiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gYW4gZXJyb3Igb2NjdXJzICovXG5cdG9uRXJyb3I6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiBubyByZXN1bHQgY2FuIGJlIHJlY29nbml6ZWQgKi9cblx0b25Ob01hdGNoOiBQcm9wVHlwZXMuZnVuYyxcbn1cblxuVm9jYWwuZGVmYXVsdFByb3BzID0ge1xuXHRsYW5nOiAnZW4tVVMnLFxuXHRncmFtbWFyczogbnVsbCxcblx0dGltZW91dDogMzAwMCxcblx0YXJpYUxhYmVsOiAnc3RhcnQgcmVjb2duaXRpb24nLFxuXHRzdHlsZTogbnVsbCxcblx0Y2xhc3NOYW1lOiBudWxsLFxuXHRvdXRsaW5lU3R5bGU6ICcycHggc29saWQnLFxuXHRvblN0YXJ0OiBudWxsLFxuXHRvbkVuZDogbnVsbCxcblx0b25TcGVlY2hTdGFydDogbnVsbCxcblx0b25TcGVlY2hFbmQ6IG51bGwsXG5cdG9uUmVzdWx0OiBudWxsLFxuXHRvbkVycm9yOiBudWxsLFxuXHRvbk5vTWF0Y2g6IG51bGwsXG59XG5cbmV4cG9ydCBkZWZhdWx0IFZvY2FsXG4iLCJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcblxuY29uc3QgdXNlVGltZW91dCA9IChoYW5kbGVyLCB0aW1lb3V0ID0gMCkgPT4ge1xuXHRjb25zdCByZWYgPSB1c2VSZWYoLTEpXG5cblx0Y29uc3Qgc3RvcCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRjbGVhclRpbWVvdXQocmVmLmN1cnJlbnQpXG5cdFx0cmVmLmN1cnJlbnQgPSAtMVxuXHR9LCBbXSlcblxuXHRjb25zdCBzdGFydCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzdG9wKClcblx0XHRyZWYuY3VycmVudCA9IHNldFRpbWVvdXQoaGFuZGxlciwgdGltZW91dClcblx0fSwgW2hhbmRsZXIsIHRpbWVvdXQsIHN0b3BdKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiBzdG9wLCBbc3RvcF0pXG5cblx0cmV0dXJuIFtzdGFydCwgc3RvcF1cbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlVGltZW91dFxuXG4vLyBUT0RPOiBSZXR1cm4gYSBwcm9taXNlXG4iLCJpbXBvcnQgVm9jYWwgZnJvbSAnLi9jb21wb25lbnRzL1ZvY2FsJ1xuaW1wb3J0IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlciBmcm9tICcuL2NvcmUvU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyJ1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZVZvY2FsIH0gZnJvbSAnLi9ob29rcy91c2VWb2NhbCdcbmV4cG9ydCBjb25zdCBpc1N1cHBvcnRlZCA9IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5pc1N1cHBvcnRlZFxuXG5leHBvcnQgZGVmYXVsdCBWb2NhbFxuIl0sIm5hbWVzIjpbImUiLCJyIiwidCIsIm4iLCJhIiwiaSIsIm8iLCJ1IiwiYyIsInZhbHVlIiwiZG9uZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsInRoaXMiLCJhcmd1bWVudHMiLCJhcHBseSIsIkFycmF5IiwiaXNBcnJheSIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiT2JqZWN0IiwibmV4dCIsInB1c2giLCJsZW5ndGgiLCJyZXR1cm4iLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiVHlwZUVycm9yIiwicmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIndyYXAiLCJwcmV2IiwiYWJydXB0IiwibmF2aWdhdG9yIiwicGVybWlzc2lvbnMiLCJET01FeGNlcHRpb24iLCJxdWVyeSIsInNlbnQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidGFyZ2V0Iiwic3RhdGUiLCJhZGRFdmVudExpc3RlbmVyIiwidDAiLCJjYXRjaCIsInN0b3AiLCJzIiwibWVkaWFEZXZpY2VzIiwidDEiLCJnZXRVc2VyTWVkaWEiLCJ0MiIsInQzIiwiYWxsIiwidDQiLCJTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIiLCJvcHRpb25zIiwiU3BlZWNoUmVjb2duaXRpb24iLCJfcmVzb2x2ZVNwZWVjaFJlY29nbml0aW9uIiwiX2luc3RhbmNlIiwiX2xpc3RlbmVycyIsImVudHJpZXMiLCJkZWZhdWx0T3B0aW9ucyIsImZvckVhY2giLCJrZXkiLCJfcmVzb2x2ZVNwZWVjaEdyYW1tYXJMaXN0IiwiX3RoaXMiLCJfIiwiRXJyb3IiLCJnZXRVc2VyTWVkaWFTdHJlYW0iLCJhdWRpbyIsInN0YXJ0IiwiZXJyb3JIYW5kbGVyIiwiZXJyb3IiLCJhYm9ydCIsImV2ZW50VHlwZSIsImNhbGxiYWNrIiwiX2luY2x1ZGVzRXZlbnRUeXBlIiwiaGFuZGxlciIsImV2ZW50IiwiYWRkaXRpb25hbEFyZ3MiLCJldmVudFR5cGVzIiwiUkVTVUxUIiwicmVzdWx0cyIsInRyYW5zY3JpcHQiLCJfdGhpczIiLCJrZXlzIiwiX3RoaXMzIiwidmFsdWVzIiwiZmluZCIsInR5cGUiLCJ3aW5kb3ciLCJ3ZWJraXRTcGVlY2hSZWNvZ25pdGlvbiIsIm1velNwZWVjaFJlY29nbml0aW9uIiwibXNTcGVlY2hSZWNvZ25pdGlvbiIsIlNwZWVjaEdyYW1tYXJMaXN0Iiwid2Via2l0U3BlZWNoR3JhbW1hckxpc3QiLCJtb3pTcGVlY2hHcmFtbWFyTGlzdCIsIm1zU3BlZWNoR3JhbW1hckxpc3QiLCJncmFtbWFycyIsImxhbmciLCJjb250aW51b3VzIiwiaW50ZXJpbVJlc3VsdHMiLCJtYXhBbHRlcm5hdGl2ZXMiLCJzZXJ2aWNlVVJJIiwiQVVESU9fRU5EIiwiQVVESU9fU1RBUlQiLCJFTkQiLCJFUlJPUiIsIk5PX01BVENIIiwiU09VTkRfRU5EIiwiU09VTkRfU1RBUlQiLCJTUEVFQ0hfRU5EIiwiU1BFRUNIX1NUQVJUIiwiU1RBUlQiLCJ1c2VWb2NhbCIsIl9fcnNJbnN0YW5jZSIsInJlZiIsInVzZVJlZiIsInVzZUVmZmVjdCIsImlzU3VwcG9ydGVkIiwiY3VycmVudCIsImNsZWFudXAiLCJ1c2VDYWxsYmFjayIsInN1YnNjcmliZSIsInVuc3Vic2NyaWJlIiwiY2xlYW4iLCJJY29uIiwiY29sb3IiLCJhY3RpdmVDb2xvciIsImlzQWN0aXZlIiwiUmVhY3QiLCJ4bWxucyIsIndpZHRoIiwiaGVpZ2h0Iiwidmlld0JveCIsImZpbGwiLCJkIiwiY3giLCJjeSIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsImJvb2wiLCJkZWZhdWx0UHJvcHMiLCJWb2NhbCIsImNoaWxkcmVuIiwidGltZW91dCIsImFyaWFMYWJlbCIsInN0eWxlIiwiY2xhc3NOYW1lIiwib3V0bGluZVN0eWxlIiwib25TdGFydCIsIm9uRW5kIiwib25TcGVlY2hTdGFydCIsIm9uU3BlZWNoRW5kIiwib25SZXN1bHQiLCJvbkVycm9yIiwib25Ob01hdGNoIiwiYnV0dG9uUmVmIiwidXNlU3RhdGUiLCJpc0xpc3RlbmluZyIsInNldElzTGlzdGVuaW5nIiwiX29uRW5kIiwic3RvcFRpbWVyIiwic3RvcFJlY29nbml0aW9uIiwiX29uU3RhcnQiLCJfb25TcGVlY2hTdGFydCIsIl9vblNwZWVjaEVuZCIsIl9vblJlc3VsdCIsIl9vbkVycm9yIiwiX29uTm9NYXRjaCIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJ1c2VUaW1lb3V0Iiwic3RhcnRUaW1lciIsInN0YXJ0UmVjb2duaXRpb24iLCJfb25DbGljayIsIl9vbkZvY3VzIiwib3V0bGluZSIsIl9vbkJsdXIiLCJyZXN1bHQiLCJpc1ZhbGlkRWxlbWVudCIsImNsb25lRWxlbWVudCIsIm9uQ2xpY2siLCJyb2xlIiwiYmFja2dyb3VuZCIsImJvcmRlciIsInBhZGRpbmciLCJjdXJzb3IiLCJvbkZvY3VzIiwib25CbHVyIiwiaWNvbkNvbG9yIiwiX3JlbmRlckNoaWxkcmVuIiwib2JqZWN0IiwibnVtYmVyIiwiZnVuYyJdLCJtYXBwaW5ncyI6InNtRUFBQSxTQUFTQSxFQUFFQSxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxHQUFHLElBQUksSUFB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 | ||
import e,{useRef as t,useEffect as n,useCallback as r,useState as o,isValidElement as i,cloneElement as a}from"react";import c from"prop-types";function u(e,t,n,r,o,i,a){try{var c=e[i](a),u=c.value}catch(e){return void n(e)}c.done?t(u):Promise.resolve(u).then(r,o)}function s(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)}}function l(e,t,n){return t&&s(e.prototype,t),n&&s(e,n),e}function f(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(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 h(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?p(Object(n),!0).forEach((function(t){f(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):p(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function v(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,o=!1,i=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return n}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return m(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return m(e,t)}(e,t)||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 m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function d(e,t,n,r,o,i,a){try{var c=e[i](a),u=c.value}catch(e){return void n(e)}c.done?t(u):Promise.resolve(u).then(r,o)}function y(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){d(i,r,o,a,c,"next",e)}function c(e){d(i,r,o,a,c,"throw",e)}a(void 0)}))}}function b(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return n}}(e,t)||function(e,t){if(e){if("string"==typeof e)return g(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?g(e,t):void 0}}(e,t)||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(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var w=function(){var e=y(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=y(regeneratorRuntime.mark((function e(n,r){var o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.permissions){e.next=4;break}r(new DOMException("Permissions not supported","NOT_FOUND_ERR")),e.next=16;break;case 4:return e.prev=4,e.next=7,navigator.permissions.query({name:t});case 7:o=e.sent,i=function e(t){o.removeEventListener("change",e),S(t.target.state,n,r)},o.addEventListener("change",i),S(o.state,n,r),e.next=16;break;case 13:e.prev=13,e.t0=e.catch(4),r(e.t0);case 16:case"end":return e.stop()}}),e,null,[[4,13]])})));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)}}(),S=function(e,t,n){switch(e){case"denied":n(new DOMException("Permission denied","NOT_ALLOWED_ERR"));break;default:t(e)}},_=function(){var e=y(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=y(regeneratorRuntime.mark((function e(r,o){var i,a,c;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.mediaDevices){e.next=4;break}o(new DOMException("MediaDevices not supported","NOT_FOUND_ERR")),e.next=24;break;case 4:return e.prev=4,e.t0=Promise,e.next=8,w(t);case 8:return e.t1=e.sent,e.next=11,navigator.mediaDevices.getUserMedia(n);case 11:return e.t2=e.sent,e.t3=[e.t1,e.t2],e.next=15,e.t0.all.call(e.t0,e.t3);case 15:i=e.sent,a=b(i,2),c=a[1],r(c),e.next=24;break;case 21:e.prev=21,e.t4=e.catch(4),o(e.t4);case 24:case"end":return e.stop()}}),e,null,[[4,21]])})));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)}}(),E=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),f(this,"_instance",null),f(this,"_listeners",null);var r=e._resolveSpeechRecognition()||{};this._instance=new r,this._listeners={},Object.entries(h(h({},e.defaultOptions),t||{})).forEach((function(t){var r=v(t,2),o=r[0],i=r[1];"grammars"!==o||i||(i=new(e._resolveSpeechGrammarList()||{}));n._instance[o]=i}))}var t,n;return l(e,null,[{key:"isSupported",get:function(){return!!e._resolveSpeechRecognition()},set:function(e){throw new Error("You cannot set isSupported directly.")}}]),l(e,[{key:"start",value:(t=regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.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,_("microphone",{audio:!0});case 4:if(e.sent){e.next=7;break}throw new 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]])})),n=function(){var e=this,n=arguments;return new Promise((function(r,o){var i=t.apply(e,n);function a(e){u(i,r,o,a,c,"next",e)}function c(e){u(i,r,o,a,c,"throw",e)}a(void 0)}))},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,n){var r=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),n&&n.apply(r,[].concat(i,[o]))};this._instance.addEventListener(t,o),this._listeners[t]=o}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 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}();f(E,"defaultOptions",{grammars:null,lang:"en-US",continuous:!1,interimResults:!1,maxAlternatives:1,serviceURI:null}),f(E,"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 O=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"en-US",o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=t(null);n((function(){if(E.isSupported)return a.current=i||new E({lang:e,grammars:o}),function(){a.current.abort(),a.current.cleanup()}}),[e,o,i]);var c=r((function(){a.current&&a.current.start()}),[]),u=r((function(){a.current&&a.current.stop()}),[]),s=r((function(){a.current&&a.current.abort()}),[]),l=r((function(e,t){a.current&&a.current.addEventListener(e,t)}),[]),f=r((function(e,t){a.current&&a.current.removeEventListener(e,t)}),[]),p=r((function(){a.current&&a.current.cleanup()}),[]);return[a,{start:c,stop:u,abort:s,subscribe:l,unsubscribe:f,clean:p}]},R=function(t){var n=t.color,r=t.activeColor,o=t.isActive;return e.createElement("svg",{"data-testid":"__icon-root__",xmlns:"http://www.w3.org/2000/svg",width:"100%",height:"100%",viewBox:"0 0 24 24"},e.createElement("g",null,e.createElement("path",{"data-testid":"__icon-path__",fill:n,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"}),o&&e.createElement("circle",{"data-testid":"__icon-active__",fill:r,cx:"16",cy:"4",r:"4"})))};R.propTypes={color:c.string,activeColor:c.string,isActive:c.bool},R.defaultProps={color:"black",activeColor:"red",isActive:!1};var k=function(c){var u=c.children,s=c.lang,l=c.grammars,f=c.timeout,p=c.ariaLabel,m=c.style,d=c.className,y=c.outlineStyle,b=c.onStart,g=c.onEnd,w=c.onSpeechStart,S=c.onSpeechEnd,_=c.onResult,k=c.onError,x=c.onNoMatch,j=c.__rsInstance,T=t(null),A=v(o(!1),2),L=A[0],P=A[1],D=v(O(s,l,j),2)[1],N=D.start,U=D.stop,C=D.subscribe,M=D.unsubscribe,I=function e(t){H(),B(),M("start",V),M("end",e),M("speechstart",W),M("speechend",J),M("result",K),M("error",Q),M("nomatch",X),g&&g(t)},G=v(function(e){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=t(-1),a=r((function(){clearTimeout(i.current),i.current=-1}),[]),c=r((function(){a(),i.current=setTimeout(e,o)}),[e,o,a]);return n((function(){return a}),[a]),[c,a]}(I,f),2),z=G[0],H=G[1],F=function(){try{P(!0),C("start",V),C("end",I),C("speechstart",W),C("speechend",J),C("result",K),C("error",Q),C("nomatch",X),N()}catch(e){Q(e)}},B=function(){try{P(!1),U()}catch(e){k&&k(e)}},Y=function(){F()},$=function(){!d&&y&&(T.current.style.outline=y)},q=function(){!d&&y&&(T.current.style.outline="none")},V=function(e){z(),b&&b(e)},W=function(e){H(),w&&w(e)},J=function(e){z(),S&&S(e)},K=function(e,t){H(),B(),_&&_(e,t)},Q=function(e){B(),k&&k(e)},X=function(e){H(),B(),x&&x(e)};return function(t){return E.isSupported?"function"==typeof t?t(F,B,L):i(t)?a(t,h({},!L&&{onClick:Y})):e.createElement("button",{"data-testid":"__vocal-root__",ref:T,role:"button","aria-label":p,style:d?null:h({width:24,height:24,background:"none",border:"none",padding:0,cursor:L?"default":"pointer"},m),className:d,onFocus:$,onBlur:q,onClick:Y},e.createElement(R,{isActive:L,iconColor:"#aaa"})):null}(u)};k.propTypes={lang:c.string,grammars:c.object,timeout:c.number,ariaLabel:c.string,style:c.object,className:c.string,outlineStyle:c.string,onStart:c.func,onEnd:c.func,onSpeechStart:c.func,onSpeechEnd:c.func,onResult:c.func,onError:c.func,onNoMatch:c.func},k.defaultProps={lang:"en-US",grammars:null,timeout:3e3,ariaLabel:"start recognition",style:null,className:null,outlineStyle:"2px solid",onStart:null,onEnd:null,onSpeechStart:null,onSpeechEnd:null,onResult:null,onError:null,onNoMatch:null};var x=E.isSupported;export default k;export{x as isSupported,O as useVocal}; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZXMuanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9AdW50ZW1wcy91c2VyLXBlcm1pc3Npb25zLXV0aWxzL2Rpc3QvaW5kZXguZXMuanMiLCIuLi9zcmMvY29yZS9TcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuanMiLCIuLi9zcmMvdXRpbHMvaXNGdW5jLmpzIiwiLi4vc3JjL2hvb2tzL3VzZVZvY2FsLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvSWNvbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1ZvY2FsLmpzIiwiLi4vc3JjL2hvb2tzL3VzZVRpbWVvdXQuanMiLCIuLi9zcmMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gZShlLHIsdCxuLGEsaSxvKXt0cnl7dmFyIHU9ZVtpXShvKSxjPXUudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdChlKX11LmRvbmU/cihjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIHIocil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGEsaSl7dmFyIG89ci5hcHBseSh0LG4pO2Z1bmN0aW9uIHUocil7ZShvLGEsaSx1LGMsXCJuZXh0XCIscil9ZnVuY3Rpb24gYyhyKXtlKG8sYSxpLHUsYyxcInRocm93XCIscil9dSh2b2lkIDApfSkpfX1mdW5jdGlvbiB0KGUscil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHIpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBTeW1ib2x8fCEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKSkpcmV0dXJuO3ZhciB0PVtdLG49ITAsYT0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHU9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXUubmV4dCgpKS5kb25lKSYmKHQucHVzaChvLnZhbHVlKSwhcnx8dC5sZW5ndGghPT1yKTtuPSEwKTt9Y2F0Y2goZSl7YT0hMCxpPWV9ZmluYWxseXt0cnl7bnx8bnVsbD09dS5yZXR1cm58fHUucmV0dXJuKCl9ZmluYWxseXtpZihhKXRocm93IGl9fXJldHVybiB0fShlLHIpfHxmdW5jdGlvbihlLHIpe2lmKCFlKXJldHVybjtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbihlLHIpO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKTtpZihcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20oZSk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBuKGUscil9KGUscil8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBuKGUscil7KG51bGw9PXJ8fHI+ZS5sZW5ndGgpJiYocj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAsbj1uZXcgQXJyYXkocik7dDxyO3QrKyluW3RdPWVbdF07cmV0dXJuIG59dmFyIGE9ZnVuY3Rpb24oKXt2YXIgZT1yKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKHQpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KFwicmV0dXJuXCIsbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZT1yKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKHIsbil7dmFyIGEsbztyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKG5hdmlnYXRvci5wZXJtaXNzaW9ucyl7ZS5uZXh0PTQ7YnJlYWt9bihuZXcgRE9NRXhjZXB0aW9uKFwiUGVybWlzc2lvbnMgbm90IHN1cHBvcnRlZFwiLFwiTk9UX0ZPVU5EX0VSUlwiKSksZS5uZXh0PTE2O2JyZWFrO2Nhc2UgNDpyZXR1cm4gZS5wcmV2PTQsZS5uZXh0PTcsbmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHtuYW1lOnR9KTtjYXNlIDc6YT1lLnNlbnQsbz1mdW5jdGlvbiBlKHQpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLGUpLGkodC50YXJnZXQuc3RhdGUscixuKX0sYS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsbyksaShhLnN0YXRlLHIsbiksZS5uZXh0PTE2O2JyZWFrO2Nhc2UgMTM6ZS5wcmV2PTEzLGUudDA9ZS5jYXRjaCg0KSxuKGUudDApO2Nhc2UgMTY6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzQsMTNdXSl9KSkpO3JldHVybiBmdW5jdGlvbihyLHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKTtjYXNlIDE6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKTtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxpPWZ1bmN0aW9uKGUscix0KXtzd2l0Y2goZSl7Y2FzZVwiZGVuaWVkXCI6dChuZXcgRE9NRXhjZXB0aW9uKFwiUGVybWlzc2lvbiBkZW5pZWRcIixcIk5PVF9BTExPV0VEX0VSUlwiKSk7YnJlYWs7ZGVmYXVsdDpyKGUpfX0sbz1mdW5jdGlvbigpe3ZhciBlPXIocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUobixpKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdChcInJldHVyblwiLG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGU9cihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZShyLG8pe3ZhciB1LGMscztyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKG5hdmlnYXRvci5tZWRpYURldmljZXMpe2UubmV4dD00O2JyZWFrfW8obmV3IERPTUV4Y2VwdGlvbihcIk1lZGlhRGV2aWNlcyBub3Qgc3VwcG9ydGVkXCIsXCJOT1RfRk9VTkRfRVJSXCIpKSxlLm5leHQ9MjQ7YnJlYWs7Y2FzZSA0OnJldHVybiBlLnByZXY9NCxlLnQwPVByb21pc2UsZS5uZXh0PTgsYShuKTtjYXNlIDg6cmV0dXJuIGUudDE9ZS5zZW50LGUubmV4dD0xMSxuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYShpKTtjYXNlIDExOnJldHVybiBlLnQyPWUuc2VudCxlLnQzPVtlLnQxLGUudDJdLGUubmV4dD0xNSxlLnQwLmFsbC5jYWxsKGUudDAsZS50Myk7Y2FzZSAxNTp1PWUuc2VudCxjPXQodSwyKSxzPWNbMV0scihzKSxlLm5leHQ9MjQ7YnJlYWs7Y2FzZSAyMTplLnByZXY9MjEsZS50ND1lLmNhdGNoKDQpLG8oZS50NCk7Y2FzZSAyNDpjYXNlXCJlbmRcIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbNCwyMV1dKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHIsdCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkpO2Nhc2UgMTpjYXNlXCJlbmRcIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbihyLHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7ZXhwb3J0e2EgYXMgZ2V0UGVybWlzc2lvbixvIGFzIGdldFVzZXJNZWRpYVN0cmVhbX07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1WlhNdWFuTWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTluWlhSUVpYSnRhWE56YVc5dUxtcHpJaXdpTGk0dmMzSmpMMmRsZEZWelpYSk5aV1JwWVZOMGNtVmhiUzVxY3lKZExDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ1lTQndjbTl0YVhObElISmxjMjlzZG1Wa0lIZG9aVzRnZEdobElIQmxjbTFwYzNOcGIyNGdhWE1nWjNKaGJuUmxaQ0JpZVNCMGFHVWdkWE5sY2x4dUlDb2dRSEJoY21GdElIQmxjbTFwYzNOcGIyNU9ZVzFsSUNBZ0lDQWdJQ0FnSUNBZ1RtRnRaU0J2WmlCMGFHVWdjR1Z5YldsemMybHZiaTRnUUhObFpTQm9kSFJ3Y3pvdkwzY3pZeTVuYVhSb2RXSXVhVzh2Y0dWeWJXbHpjMmx2Ym5NdkkyVnVkVzFrWldZdGNHVnliV2x6YzJsdmJtNWhiV1ZjYmlBcUlFQnlaWFIxY201eklIdFFjbTl0YVhObGZWeHVJQ292WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JoYzNsdVl5QW9jR1Z5YldsemMybHZiazVoYldVcElEMCtJSHRjYmx4MGNtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtHRnplVzVqSUNoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNibHgwWEhScFppQW9JVzVoZG1sbllYUnZjaTV3WlhKdGFYTnphVzl1Y3lrZ2UxeHVYSFJjZEZ4MGNtVnFaV04wS0c1bGR5QkVUMDFGZUdObGNIUnBiMjRvSjFCbGNtMXBjM05wYjI1eklHNXZkQ0J6ZFhCd2IzSjBaV1FuTENBblRrOVVYMFpQVlU1RVgwVlNVaWNwS1Z4dVhIUmNkSDBnWld4elpTQjdYRzVjZEZ4MFhIUjBjbmtnZTF4dVhIUmNkRngwWEhSamIyNXpkQ0J3WlhKdGFYTnphVzl1VTNSaGRIVnpJRDBnWVhkaGFYUWdibUYyYVdkaGRHOXlMbkJsY20xcGMzTnBiMjV6TG5GMVpYSjVLSHNnYm1GdFpUb2djR1Z5YldsemMybHZiazVoYldVZ2ZTbGNibHgwWEhSY2RGeDBZMjl1YzNRZ2IyNURhR0Z1WjJVZ1BTQW9aWFpsYm5RcElEMCtJSHRjYmx4MFhIUmNkRngwWEhSd1pYSnRhWE56YVc5dVUzUmhkSFZ6TG5KbGJXOTJaVVYyWlc1MFRHbHpkR1Z1WlhJb0oyTm9ZVzVuWlNjc0lHOXVRMmhoYm1kbEtWeHVYSFJjZEZ4MFhIUmNkSEpsYzI5c2RtVlBjbEpsYW1WamRFSmhjMlZrVDI1VGRHRjBaU2hsZG1WdWRDNTBZWEpuWlhRdWMzUmhkR1VzSUhKbGMyOXNkbVVzSUhKbGFtVmpkQ2xjYmx4MFhIUmNkRngwZlZ4dVhIUmNkRngwWEhSd1pYSnRhWE56YVc5dVUzUmhkSFZ6TG1Ga1pFVjJaVzUwVEdsemRHVnVaWElvSjJOb1lXNW5aU2NzSUc5dVEyaGhibWRsS1Z4dVhIUmNkRngwWEhSeVpYTnZiSFpsVDNKU1pXcGxZM1JDWVhObFpFOXVVM1JoZEdVb2NHVnliV2x6YzJsdmJsTjBZWFIxY3k1emRHRjBaU3dnY21WemIyeDJaU3dnY21WcVpXTjBLVnh1WEhSY2RGeDBmU0JqWVhSamFDQW9aWEp5YjNJcElIdGNibHgwWEhSY2RGeDBjbVZxWldOMEtHVnljbTl5S1Z4dVhIUmNkRngwZlZ4dVhIUmNkSDFjYmx4MGZTbGNibjFjYmx4dVkyOXVjM1FnY21WemIyeDJaVTl5VW1WcVpXTjBRbUZ6WldSUGJsTjBZWFJsSUQwZ0tITjBZWFJsTENCeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNibHgwYzNkcGRHTm9JQ2h6ZEdGMFpTa2dlMXh1WEhSY2RHTmhjMlVnSjJSbGJtbGxaQ2M2WEc1Y2RGeDBYSFJ5WldwbFkzUW9ibVYzSUVSUFRVVjRZMlZ3ZEdsdmJpZ25VR1Z5YldsemMybHZiaUJrWlc1cFpXUW5MQ0FuVGs5VVgwRk1URTlYUlVSZlJWSlNKeWtwWEc1Y2RGeDBYSFJpY21WaGExeHVYSFJjZEdSbFptRjFiSFE2WEc1Y2RGeDBYSFJ5WlhOdmJIWmxLSE4wWVhSbEtWeHVYSFI5WEc1OVhHNGlMQ0pwYlhCdmNuUWdaMlYwVUdWeWJXbHpjMmx2YmlCbWNtOXRJQ2N1TDJkbGRGQmxjbTFwYzNOcGIyNG5YRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUJoSUhCeWIyMXBjMlVnY21WemIyeDJaV1FnZDJobGJpQjBhR1VnY0dWeWJXbHpjMmx2YmlCcGN5Qm5jbUZ1ZEdWa0lHSjVJSFJvWlNCMWMyVnlJR0Z1WkNCMGFHVWdjM1J5WldGdElHbHpJSEpsZEhKcFpYWmxaRnh1SUNvZ1FIQmhjbUZ0SUhCbGNtMXBjM05wYjI1T1lXMWxJQ0FnSUNBZ0lDQWdJQ0FnVG1GdFpTQnZaaUIwYUdVZ2NHVnliV2x6YzJsdmJpNGdRSE5sWlNCb2RIUndjem92TDNjell5NW5hWFJvZFdJdWFXOHZjR1Z5YldsemMybHZibk12STJWdWRXMWtaV1l0Y0dWeWJXbHpjMmx2Ym01aGJXVmNiaUFxSUVCd1lYSmhiU0J0WldScFlWTjBjbVZoYlVOdmJuTjBjbUZwYm5SeklDQWdJRU52Ym5OMGNtRnBiblJ6SUc5aWFtVmpkQzRnUUhObFpTQm9kSFJ3Y3pvdkwyUmxkbVZzYjNCbGNpNXRiM3BwYkd4aExtOXlaeTlsYmkxVlV5OWtiMk56TDFkbFlpOUJVRWt2VFdWa2FXRlRkSEpsWVcxRGIyNXpkSEpoYVc1MGMxeHVJQ29nUUhKbGRIVnlibk1nZTFCeWIyMXBjMlY5WEc0Z0tpOWNibVY0Y0c5eWRDQmtaV1poZFd4MElHRnplVzVqSUNod1pYSnRhWE56YVc5dVRtRnRaU3dnYldWa2FXRlRkSEpsWVcxRGIyNXpkSEpoYVc1MGN5a2dQVDRnZTF4dVhIUnlaWFIxY200Z2JtVjNJRkJ5YjIxcGMyVW9ZWE41Ym1NZ0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh1WEhSY2RHbG1JQ2doYm1GMmFXZGhkRzl5TG0xbFpHbGhSR1YyYVdObGN5a2dlMXh1WEhSY2RGeDBjbVZxWldOMEtHNWxkeUJFVDAxRmVHTmxjSFJwYjI0b0owMWxaR2xoUkdWMmFXTmxjeUJ1YjNRZ2MzVndjRzl5ZEdWa0p5d2dKMDVQVkY5R1QxVk9SRjlGVWxJbktTbGNibHgwWEhSOUlHVnNjMlVnZTF4dVhIUmNkRngwZEhKNUlIdGNibHgwWEhSY2RGeDBZMjl1YzNRZ1d5d2djM1J5WldGdFhTQTlJR0YzWVdsMElGQnliMjFwYzJVdVlXeHNLRnRjYmx4MFhIUmNkRngwWEhSaGQyRnBkQ0JuWlhSUVpYSnRhWE56YVc5dUtIQmxjbTFwYzNOcGIyNU9ZVzFsS1N4Y2JseDBYSFJjZEZ4MFhIUmhkMkZwZENCdVlYWnBaMkYwYjNJdWJXVmthV0ZFWlhacFkyVnpMbWRsZEZWelpYSk5aV1JwWVNodFpXUnBZVk4wY21WaGJVTnZibk4wY21GcGJuUnpLU3hjYmx4MFhIUmNkRngwWFNsY2JseDBYSFJjZEZ4MGNtVnpiMngyWlNoemRISmxZVzBwWEc1Y2RGeDBYSFI5SUdOaGRHTm9JQ2hsY25KdmNpa2dlMXh1WEhSY2RGeDBYSFJ5WldwbFkzUW9aWEp5YjNJcFhHNWNkRngwWEhSOVhHNWNkRngwZlZ4dVhIUjlLVnh1ZlZ4dUlsMHNJbTVoYldWeklqcGJJbkJsY20xcGMzTnBiMjVPWVcxbElpd2lVSEp2YldselpTSXNJbkpsYzI5c2RtVWlMQ0p5WldwbFkzUWlMQ0p1WVhacFoyRjBiM0lpTENKd1pYSnRhWE56YVc5dWN5SXNJa1JQVFVWNFkyVndkR2x2YmlJc0luRjFaWEo1SWl3aWJtRnRaU0lzSW5CbGNtMXBjM05wYjI1VGRHRjBkWE1pTENKdmJrTm9ZVzVuWlNJc0ltVjJaVzUwSWl3aWNtVnRiM1psUlhabGJuUk1hWE4wWlc1bGNpSXNJbkpsYzI5c2RtVlBjbEpsYW1WamRFSmhjMlZrVDI1VGRHRjBaU0lzSW5SaGNtZGxkQ0lzSW5OMFlYUmxJaXdpWVdSa1JYWmxiblJNYVhOMFpXNWxjaUlzSW0xbFpHbGhVM1J5WldGdFEyOXVjM1J5WVdsdWRITWlMQ0p0WldScFlVUmxkbWxqWlhNaUxDSm5aWFJRWlhKdGFYTnphVzl1SWl3aVoyVjBWWE5sY2sxbFpHbGhJaXdpWVd4c0lpd2ljM1J5WldGdElsMHNJbTFoY0hCcGJtZHpJam9pYlhkRFFVdEJMR3RFUVVGbExGZEJRVTlCTERSSFFVTmtMRWxCUVVsRExHOUVRVUZSTEZkQlFVOURMRVZCUVZORExEaEdRVU0zUWtNc1ZVRkJWVU1zTkVKQlEyUkdMRVZCUVU4c1NVRkJTVWNzWVVGQllTdzBRa0ZCTmtJc2EwVkJSM0pDUml4VlFVRlZReXhaUVVGWlJTeE5RVUZOTEVOQlFVVkRMRXRCUVUxU0xGZEJRVGRFVXl4VFFVTkJReXhGUVVGWExGTkJRVmhCTEVWQlFWbERMRWRCUTJwQ1JpeEZRVUZwUWtjc2IwSkJRVzlDTEZOQlFWVkdMRWRCUXk5RFJ5eEZRVUUwUWtZc1JVRkJUVWNzVDBGQlQwTXNUVUZCVDJJc1JVRkJVME1zU1VGRk1VUk5MRVZCUVdsQ1R5eHBRa0ZCYVVJc1UwRkJWVTRzUjBGRE5VTkhMRVZCUVRSQ1NpeEZRVUZwUWswc1RVRkJUMklzUlVGQlUwTXNjVVJCUlRkRVFTdzJUa0ZOUlZVc1JVRkJPRUlzVTBGQlEwVXNSVUZCVDJJc1JVRkJVME1zVlVGRE5VTlpMRTlCUTBZc1UwRkRTbG9zUlVGQlR5eEpRVUZKUnl4aFFVRmhMRzlDUVVGeFFpeHJRMEZITjBOS0xFVkJRVkZoTEcxRVEzWkNTU3hYUVVGUFppeEZRVUZuUW1sQ0xEUkhRVU01UWl4SlFVRkphRUlzYjBSQlFWRXNWMEZCVDBNc1JVRkJVME1zWjBkQlF6ZENReXhWUVVGVll5dzJRa0ZEWkdZc1JVRkJUeXhKUVVGSlJ5eGhRVUZoTERaQ1FVRTRRaXc0UkVGSE5VSk1MR2xDUVVOc1FtdENMRVZCUVdOdVFpeDFRMEZEWkVrc1ZVRkJWV01zWVVGQllVVXNZVUZCWVVnc09FUkJSbFpKTERoRFFVRjRRa01zVDBGSlZIQkNMRVZCUVZGdlFpeHhSRUZGVW01Q0luMD1cbiIsImltcG9ydCB7IGdldFVzZXJNZWRpYVN0cmVhbSB9IGZyb20gJ0B1bnRlbXBzL3VzZXItcGVybWlzc2lvbnMtdXRpbHMnXG5cbmNsYXNzIFNwZWVjaFJlY29nbml0aW9uV3JhcHBlciB7XG5cdHN0YXRpYyBkZWZhdWx0T3B0aW9ucyA9IHtcblx0XHRncmFtbWFyczogbnVsbCxcblx0XHRsYW5nOiAnZW4tVVMnLFxuXHRcdGNvbnRpbnVvdXM6IGZhbHNlLFxuXHRcdGludGVyaW1SZXN1bHRzOiBmYWxzZSxcblx0XHRtYXhBbHRlcm5hdGl2ZXM6IDEsXG5cdFx0c2VydmljZVVSSTogbnVsbCxcblx0fVxuXG5cdHN0YXRpYyBldmVudFR5cGVzID0ge1xuXHRcdEFVRElPX0VORDogJ2F1ZGlvZW5kJyxcblx0XHRBVURJT19TVEFSVDogJ2F1ZGlvc3RhcnQnLFxuXHRcdEVORDogJ2VuZCcsXG5cdFx0RVJST1I6ICdlcnJvcicsXG5cdFx0Tk9fTUFUQ0g6ICdub21hdGNoJyxcblx0XHRSRVNVTFQ6ICdyZXN1bHQnLFxuXHRcdFNPVU5EX0VORDogJ3NvdW5kZW5kJyxcblx0XHRTT1VORF9TVEFSVDogJ3NvdW5kc3RhcnQnLFxuXHRcdFNQRUVDSF9FTkQ6ICdzcGVlY2hlbmQnLFxuXHRcdFNQRUVDSF9TVEFSVDogJ3NwZWVjaHN0YXJ0Jyxcblx0XHRTVEFSVDogJ3N0YXJ0Jyxcblx0fVxuXG5cdHN0YXRpYyBnZXQgaXNTdXBwb3J0ZWQoKSB7XG5cdFx0cmV0dXJuICEhU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLl9yZXNvbHZlU3BlZWNoUmVjb2duaXRpb24oKVxuXHR9XG5cblx0c3RhdGljIHNldCBpc1N1cHBvcnRlZChfKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IHNldCBpc1N1cHBvcnRlZCBkaXJlY3RseS4nKVxuXHR9XG5cblx0X2luc3RhbmNlID0gbnVsbFxuXHRfbGlzdGVuZXJzID0gbnVsbFxuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRjb25zdCBTcGVlY2hSZWNvZ25pdGlvbiA9IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5fcmVzb2x2ZVNwZWVjaFJlY29nbml0aW9uKCkgfHwge31cblx0XHR0aGlzLl9pbnN0YW5jZSA9IG5ldyBTcGVlY2hSZWNvZ25pdGlvbigpXG5cdFx0dGhpcy5fbGlzdGVuZXJzID0ge31cblxuXHRcdE9iamVjdC5lbnRyaWVzKHtcblx0XHRcdC4uLlNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5kZWZhdWx0T3B0aW9ucyxcblx0XHRcdC4uLihvcHRpb25zIHx8IHt9KSxcblx0XHR9KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcblx0XHRcdGlmIChrZXkgPT09ICdncmFtbWFycycgJiYgIXZhbHVlKSB7XG5cdFx0XHRcdGNvbnN0IFNwZWVjaEdyYW1tYXJMaXN0ID0gU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLl9yZXNvbHZlU3BlZWNoR3JhbW1hckxpc3QoKSB8fCB7fVxuXHRcdFx0XHR2YWx1ZSA9IG5ldyBTcGVlY2hHcmFtbWFyTGlzdCgpXG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9pbnN0YW5jZVtrZXldID0gdmFsdWVcblx0XHR9KVxuXHR9XG5cblx0Z2V0IGluc3RhbmNlKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbnN0YW5jZVxuXHR9XG5cblx0c2V0IGluc3RhbmNlKF8pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW5ub3Qgc2V0IGluc3RhbmNlIGRpcmVjdGx5LicpXG5cdH1cblxuXHRhc3luYyBzdGFydCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3Qgc3RyZWFtID0gYXdhaXQgZ2V0VXNlck1lZGlhU3RyZWFtKCdtaWNyb3Bob25lJywgeyBhdWRpbzogdHJ1ZSB9KVxuXHRcdFx0XHRpZiAoIXN0cmVhbSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHRoZSBzdHJlYW0gZnJvbSBtZWRpYSBkZXZpY2UnKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX2luc3RhbmNlLnN0YXJ0KClcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuX2xpc3RlbmVycy5lcnJvclxuXHRcdFx0XHRpZiAoISFlcnJvckhhbmRsZXIpIHtcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIoZXJyb3IpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0c3RvcCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dGhpcy5faW5zdGFuY2Uuc3RvcCgpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdGFib3J0KCkge1xuXHRcdGlmICghIXRoaXMuX2luc3RhbmNlKSB7XG5cdFx0XHR0aGlzLl9pbnN0YW5jZS5hYm9ydCgpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdGFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBjYWxsYmFjaykge1xuXHRcdGlmICghIXRoaXMuX2luc3RhbmNlICYmIHRoaXMuX2luY2x1ZGVzRXZlbnRUeXBlKGV2ZW50VHlwZSkpIHtcblx0XHRcdGlmICghIXRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdKSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUpXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0bGV0IGFkZGl0aW9uYWxBcmdzID0gW11cblx0XHRcdFx0aWYgKGV2ZW50VHlwZSA9PT0gU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmV2ZW50VHlwZXMuUkVTVUxUKSB7XG5cdFx0XHRcdFx0aWYgKCEhZXZlbnQucmVzdWx0cyAmJiBldmVudC5yZXN1bHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGFkZGl0aW9uYWxBcmdzLnB1c2goZXZlbnQucmVzdWx0c1swXVswXS50cmFuc2NyaXB0KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCEhY2FsbGJhY2sgJiYgY2FsbGJhY2suYXBwbHkodGhpcywgWy4uLmFkZGl0aW9uYWxBcmdzLCBldmVudF0pXG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9pbnN0YW5jZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlcilcblxuXHRcdFx0dGhpcy5fbGlzdGVuZXJzW2V2ZW50VHlwZV0gPSBoYW5kbGVyXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdXG5cdFx0dGhpcy5faW5zdGFuY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIpXG5cblx0XHRkZWxldGUgdGhpcy5fbGlzdGVuZXJzW2V2ZW50VHlwZV1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRjbGVhbnVwKCkge1xuXHRcdHRoaXMuc3RvcCgpXG5cblx0XHRPYmplY3Qua2V5cyh0aGlzLl9saXN0ZW5lcnMpLmZvckVhY2goKGtleSkgPT4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGtleSkpXG5cdFx0dGhpcy5faW5zdGFuY2UgPSBudWxsXG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0X2luY2x1ZGVzRXZlbnRUeXBlKGV2ZW50VHlwZSkge1xuXHRcdHJldHVybiAhIU9iamVjdC52YWx1ZXMoU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmV2ZW50VHlwZXMpLmZpbmQoKHR5cGUpID0+IHR5cGUgPT09IGV2ZW50VHlwZSlcblx0fVxuXG5cdHN0YXRpYyBfcmVzb2x2ZVNwZWVjaFJlY29nbml0aW9uKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHR3aW5kb3cuU3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdHdpbmRvdy53ZWJraXRTcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0d2luZG93Lm1velNwZWVjaFJlY29nbml0aW9uIHx8XG5cdFx0XHR3aW5kb3cubXNTcGVlY2hSZWNvZ25pdGlvblxuXHRcdClcblx0fVxuXG5cdHN0YXRpYyBfcmVzb2x2ZVNwZWVjaEdyYW1tYXJMaXN0KCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHR3aW5kb3cuU3BlZWNoR3JhbW1hckxpc3QgfHxcblx0XHRcdHdpbmRvdy53ZWJraXRTcGVlY2hHcmFtbWFyTGlzdCB8fFxuXHRcdFx0d2luZG93Lm1velNwZWVjaEdyYW1tYXJMaXN0IHx8XG5cdFx0XHR3aW5kb3cubXNTcGVlY2hHcmFtbWFyTGlzdFxuXHRcdClcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXJcbiIsImV4cG9ydCBkZWZhdWx0ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbidcbiIsImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyIGZyb20gJy4uL2NvcmUvU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyJ1xuXG5jb25zdCB1c2VWb2NhbCA9IChsYW5nID0gJ2VuLVVTJywgZ3JhbW1hcnMgPSBudWxsLCBfX3JzSW5zdGFuY2UgPSBudWxsKSA9PiB7XG5cdGNvbnN0IHJlZiA9IHVzZVJlZihudWxsKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5pc1N1cHBvcnRlZCkge1xuXHRcdFx0cmVmLmN1cnJlbnQgPSBfX3JzSW5zdGFuY2UgfHwgbmV3IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlcih7IGxhbmcsIGdyYW1tYXJzIH0pXG5cdFx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0XHRyZWYuY3VycmVudC5hYm9ydCgpXG5cdFx0XHRcdHJlZi5jdXJyZW50LmNsZWFudXAoKVxuXHRcdFx0fVxuXHRcdH1cblx0fSwgW2xhbmcsIGdyYW1tYXJzLCBfX3JzSW5zdGFuY2VdKVxuXG5cdGNvbnN0IHN0YXJ0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdGlmIChyZWYuY3VycmVudCkge1xuXHRcdFx0cmVmLmN1cnJlbnQuc3RhcnQoKVxuXHRcdH1cblx0fSwgW10pXG5cblx0Y29uc3Qgc3RvcCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRpZiAocmVmLmN1cnJlbnQpIHtcblx0XHRcdHJlZi5jdXJyZW50LnN0b3AoKVxuXHRcdH1cblx0fSwgW10pXG5cblx0Y29uc3QgYWJvcnQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0aWYgKHJlZi5jdXJyZW50KSB7XG5cdFx0XHRyZWYuY3VycmVudC5hYm9ydCgpXG5cdFx0fVxuXHR9LCBbXSlcblxuXHRjb25zdCBzdWJzY3JpYmUgPSB1c2VDYWxsYmFjaygoZXZlbnRUeXBlLCBoYW5kbGVyKSA9PiB7XG5cdFx0aWYgKHJlZi5jdXJyZW50KSB7XG5cdFx0XHRyZWYuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlcilcblx0XHR9XG5cdH0sIFtdKVxuXG5cdGNvbnN0IHVuc3Vic2NyaWJlID0gdXNlQ2FsbGJhY2soKGV2ZW50VHlwZSwgaGFuZGxlcikgPT4ge1xuXHRcdGlmIChyZWYuY3VycmVudCkge1xuXHRcdFx0cmVmLmN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIpXG5cdFx0fVxuXHR9LCBbXSlcblxuXHRjb25zdCBjbGVhbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRpZiAocmVmLmN1cnJlbnQpIHtcblx0XHRcdHJlZi5jdXJyZW50LmNsZWFudXAoKVxuXHRcdH1cblx0fSwgW10pXG5cblx0cmV0dXJuIFtyZWYsIHsgc3RhcnQsIHN0b3AsIGFib3J0LCBzdWJzY3JpYmUsIHVuc3Vic2NyaWJlLCBjbGVhbiB9XVxufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VWb2NhbFxuXG4vLyBUT0RPOiBSZXR1cm4gdGhlIGluc3RhbmNlLCBub3QgdGhlIHJlZlxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuXG5jb25zdCBJY29uID0gKHsgY29sb3IsIGFjdGl2ZUNvbG9yLCBpc0FjdGl2ZSB9KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PHN2Z1xuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJfX2ljb24tcm9vdF9fXCJcblx0XHRcdHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuXHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdGhlaWdodD1cIjEwMCVcIlxuXHRcdFx0dmlld0JveD1cIjAgMCAyNCAyNFwiXG5cdFx0PlxuXHRcdFx0PGc+XG5cdFx0XHRcdDxwYXRoXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJfX2ljb24tcGF0aF9fXCJcblx0XHRcdFx0XHRmaWxsPXtjb2xvcn1cblx0XHRcdFx0XHRkPVwiTTEyIDE0YzEuNjYgMCAyLjk5LTEuMzQgMi45OS0zTDE1IDVjMC0xLjY2LTEuMzQtMy0zLTNTOSAzLjM0IDkgNXY2YzAgMS42NiAxLjM0IDMgMyAzem01LjMtM2MwIDMtMi41NCA1LjEtNS4zIDUuMVM2LjcgMTQgNi43IDExSDVjMCAzLjQxIDIuNzIgNi4yMyA2IDYuNzJWMjFoMnYtMy4yOGMzLjI4LS40OCA2LTMuMyA2LTYuNzJoLTEuN3pcIlxuXHRcdFx0XHQvPlxuXHRcdFx0XHR7aXNBY3RpdmUgJiYgPGNpcmNsZSBkYXRhLXRlc3RpZD1cIl9faWNvbi1hY3RpdmVfX1wiIGZpbGw9e2FjdGl2ZUNvbG9yfSBjeD1cIjE2XCIgY3k9XCI0XCIgcj1cIjRcIiAvPn1cblx0XHRcdDwvZz5cblx0XHQ8L3N2Zz5cblx0KVxufVxuXG5JY29uLnByb3BUeXBlcyA9IHtcblx0Y29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG5cdGFjdGl2ZUNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRpc0FjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG59XG5cbkljb24uZGVmYXVsdFByb3BzID0ge1xuXHRjb2xvcjogJ2JsYWNrJyxcblx0YWN0aXZlQ29sb3I6ICdyZWQnLFxuXHRpc0FjdGl2ZTogZmFsc2UsXG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb25cbiIsImltcG9ydCBSZWFjdCwgeyBjbG9uZUVsZW1lbnQsIGlzVmFsaWRFbGVtZW50LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5cbmltcG9ydCBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIgZnJvbSAnLi4vY29yZS9TcGVlY2hSZWNvZ25pdGlvbldyYXBwZXInXG5cbmltcG9ydCBpc0Z1bmMgZnJvbSAnLi4vdXRpbHMvaXNGdW5jJ1xuXG5pbXBvcnQgdXNlVm9jYWwgZnJvbSAnLi4vaG9va3MvdXNlVm9jYWwnXG5pbXBvcnQgdXNlVGltZW91dCBmcm9tICcuLi9ob29rcy91c2VUaW1lb3V0J1xuXG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24nXG5cbmNvbnN0IFZvY2FsID0gKHtcblx0Y2hpbGRyZW4sXG5cdGxhbmcsXG5cdGdyYW1tYXJzLFxuXHR0aW1lb3V0LFxuXHRhcmlhTGFiZWwsXG5cdHN0eWxlLFxuXHRjbGFzc05hbWUsXG5cdG91dGxpbmVTdHlsZSxcblx0b25TdGFydCxcblx0b25FbmQsXG5cdG9uU3BlZWNoU3RhcnQsXG5cdG9uU3BlZWNoRW5kLFxuXHRvblJlc3VsdCxcblx0b25FcnJvcixcblx0b25Ob01hdGNoLFxuXHRfX3JzSW5zdGFuY2UsXG59KSA9PiB7XG5cdGNvbnN0IGJ1dHRvblJlZiA9IHVzZVJlZihudWxsKVxuXHRjb25zdCBbaXNMaXN0ZW5pbmcsIHNldElzTGlzdGVuaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG5cdGNvbnN0IFssIHsgc3RhcnQsIHN0b3AsIHN1YnNjcmliZSwgdW5zdWJzY3JpYmUgfV0gPSB1c2VWb2NhbChsYW5nLCBncmFtbWFycywgX19yc0luc3RhbmNlKVxuXG5cdGNvbnN0IF9vbkVuZCA9IChlKSA9PiB7XG5cdFx0c3RvcFRpbWVyKClcblx0XHRzdG9wUmVjb2duaXRpb24oKVxuXG5cdFx0dW5zdWJzY3JpYmUoJ3N0YXJ0JywgX29uU3RhcnQpXG5cdFx0dW5zdWJzY3JpYmUoJ2VuZCcsIF9vbkVuZClcblx0XHR1bnN1YnNjcmliZSgnc3BlZWNoc3RhcnQnLCBfb25TcGVlY2hTdGFydClcblx0XHR1bnN1YnNjcmliZSgnc3BlZWNoZW5kJywgX29uU3BlZWNoRW5kKVxuXHRcdHVuc3Vic2NyaWJlKCdyZXN1bHQnLCBfb25SZXN1bHQpXG5cdFx0dW5zdWJzY3JpYmUoJ2Vycm9yJywgX29uRXJyb3IpXG5cdFx0dW5zdWJzY3JpYmUoJ25vbWF0Y2gnLCBfb25Ob01hdGNoKVxuXG5cdFx0ISFvbkVuZCAmJiBvbkVuZChlKVxuXHR9XG5cblx0Y29uc3QgW3N0YXJ0VGltZXIsIHN0b3BUaW1lcl0gPSB1c2VUaW1lb3V0KF9vbkVuZCwgdGltZW91dClcblxuXHRjb25zdCBzdGFydFJlY29nbml0aW9uID0gKCkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRzZXRJc0xpc3RlbmluZyh0cnVlKVxuXG5cdFx0XHRzdWJzY3JpYmUoJ3N0YXJ0JywgX29uU3RhcnQpXG5cdFx0XHRzdWJzY3JpYmUoJ2VuZCcsIF9vbkVuZClcblx0XHRcdHN1YnNjcmliZSgnc3BlZWNoc3RhcnQnLCBfb25TcGVlY2hTdGFydClcblx0XHRcdHN1YnNjcmliZSgnc3BlZWNoZW5kJywgX29uU3BlZWNoRW5kKVxuXHRcdFx0c3Vic2NyaWJlKCdyZXN1bHQnLCBfb25SZXN1bHQpXG5cdFx0XHRzdWJzY3JpYmUoJ2Vycm9yJywgX29uRXJyb3IpXG5cdFx0XHRzdWJzY3JpYmUoJ25vbWF0Y2gnLCBfb25Ob01hdGNoKVxuXG5cdFx0XHRzdGFydCgpXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdF9vbkVycm9yKGVycm9yKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHN0b3BSZWNvZ25pdGlvbiA9ICgpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0c2V0SXNMaXN0ZW5pbmcoZmFsc2UpXG5cblx0XHRcdHN0b3AoKVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHQhIW9uRXJyb3IgJiYgb25FcnJvcihlcnJvcilcblx0XHR9XG5cdH1cblxuXHRjb25zdCBfb25DbGljayA9ICgpID0+IHtcblx0XHRzdGFydFJlY29nbml0aW9uKClcblx0fVxuXG5cdGNvbnN0IF9vbkZvY3VzID0gKCkgPT4ge1xuXHRcdGlmICghY2xhc3NOYW1lICYmIG91dGxpbmVTdHlsZSkge1xuXHRcdFx0YnV0dG9uUmVmLmN1cnJlbnQuc3R5bGUub3V0bGluZSA9IG91dGxpbmVTdHlsZVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IF9vbkJsdXIgPSAoKSA9PiB7XG5cdFx0aWYgKCFjbGFzc05hbWUgJiYgb3V0bGluZVN0eWxlKSB7XG5cdFx0XHRidXR0b25SZWYuY3VycmVudC5zdHlsZS5vdXRsaW5lID0gJ25vbmUnXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgX29uU3RhcnQgPSAoZSkgPT4ge1xuXHRcdHN0YXJ0VGltZXIoKVxuXG5cdFx0ISFvblN0YXJ0ICYmIG9uU3RhcnQoZSlcblx0fVxuXG5cdGNvbnN0IF9vblNwZWVjaFN0YXJ0ID0gKGUpID0+IHtcblx0XHRzdG9wVGltZXIoKVxuXG5cdFx0ISFvblNwZWVjaFN0YXJ0ICYmIG9uU3BlZWNoU3RhcnQoZSlcblx0fVxuXG5cdGNvbnN0IF9vblNwZWVjaEVuZCA9IChlKSA9PiB7XG5cdFx0c3RhcnRUaW1lcigpXG5cblx0XHQhIW9uU3BlZWNoRW5kICYmIG9uU3BlZWNoRW5kKGUpXG5cdH1cblxuXHRjb25zdCBfb25SZXN1bHQgPSAocmVzdWx0LCBldmVudCkgPT4ge1xuXHRcdHN0b3BUaW1lcigpXG5cdFx0c3RvcFJlY29nbml0aW9uKClcblxuXHRcdCEhb25SZXN1bHQgJiYgb25SZXN1bHQocmVzdWx0LCBldmVudClcblx0fVxuXG5cdGNvbnN0IF9vbkVycm9yID0gKGVycm9yKSA9PiB7XG5cdFx0c3RvcFJlY29nbml0aW9uKClcblxuXHRcdCEhb25FcnJvciAmJiBvbkVycm9yKGVycm9yKVxuXHR9XG5cblx0Y29uc3QgX29uTm9NYXRjaCA9IChlKSA9PiB7XG5cdFx0c3RvcFRpbWVyKClcblx0XHRzdG9wUmVjb2duaXRpb24oKVxuXG5cdFx0ISFvbk5vTWF0Y2ggJiYgb25Ob01hdGNoKGUpXG5cdH1cblxuXHRjb25zdCBfcmVuZGVyRGVmYXVsdCA9ICgpID0+IChcblx0XHQ8YnV0dG9uXG5cdFx0XHRkYXRhLXRlc3RpZD1cIl9fdm9jYWwtcm9vdF9fXCJcblx0XHRcdHJlZj17YnV0dG9uUmVmfVxuXHRcdFx0cm9sZT1cImJ1dHRvblwiXG5cdFx0XHRhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG5cdFx0XHRzdHlsZT17XG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHRcdD8gbnVsbFxuXHRcdFx0XHRcdDoge1xuXHRcdFx0XHRcdFx0XHR3aWR0aDogMjQsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogMjQsXG5cdFx0XHRcdFx0XHRcdGJhY2tncm91bmQ6ICdub25lJyxcblx0XHRcdFx0XHRcdFx0Ym9yZGVyOiAnbm9uZScsXG5cdFx0XHRcdFx0XHRcdHBhZGRpbmc6IDAsXG5cdFx0XHRcdFx0XHRcdGN1cnNvcjogIWlzTGlzdGVuaW5nID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnLFxuXHRcdFx0XHRcdFx0XHQuLi5zdHlsZSxcblx0XHRcdFx0XHQgIH1cblx0XHRcdH1cblx0XHRcdGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuXHRcdFx0b25Gb2N1cz17X29uRm9jdXN9XG5cdFx0XHRvbkJsdXI9e19vbkJsdXJ9XG5cdFx0XHRvbkNsaWNrPXtfb25DbGlja31cblx0XHQ+XG5cdFx0XHQ8SWNvbiBpc0FjdGl2ZT17aXNMaXN0ZW5pbmd9IGljb25Db2xvcj1cIiNhYWFcIiAvPlxuXHRcdDwvYnV0dG9uPlxuXHQpXG5cblx0Y29uc3QgX3JlbmRlckNoaWxkcmVuID0gKGNoaWxkcmVuKSA9PiB7XG5cdFx0aWYgKFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5pc1N1cHBvcnRlZCkge1xuXHRcdFx0aWYgKGlzRnVuYyhjaGlsZHJlbikpIHtcblx0XHRcdFx0cmV0dXJuIGNoaWxkcmVuKHN0YXJ0UmVjb2duaXRpb24sIHN0b3BSZWNvZ25pdGlvbiwgaXNMaXN0ZW5pbmcpXG5cdFx0XHR9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuXHRcdFx0XHRyZXR1cm4gY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG5cdFx0XHRcdFx0Li4uKCFpc0xpc3RlbmluZyAmJiB7IG9uQ2xpY2s6IF9vbkNsaWNrIH0pLFxuXHRcdFx0XHR9KVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIF9yZW5kZXJEZWZhdWx0KClcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXG5cdHJldHVybiBfcmVuZGVyQ2hpbGRyZW4oY2hpbGRyZW4pXG59XG5cblZvY2FsLnByb3BUeXBlcyA9IHtcblx0LyoqIERlZmluZXMgdGhlIGxhbmd1YWdlIHVuZGVyc3Rvb2QgYnkgdGhlIHJlY29nbml0aW9uIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU3BlZWNoUmVjb2duaXRpb24vbGFuZykgKi9cblx0bGFuZzogUHJvcFR5cGVzLnN0cmluZyxcblx0LyoqIERlZmluZXMgdGhlIGdyYW1tYXJzIHVuZGVyc3Rvb2QgYnkgdGhlIHJlY29nbml0aW9uIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU3BlZWNoUmVjb2duaXRpb24vZ3JhbW1hcnMpICovXG5cdGdyYW1tYXJzOiBQcm9wVHlwZXMub2JqZWN0LFxuXHQvKiogRGVmaW5lcyB0aGUgdGltZSBpbiBtcyB0byB3YWl0IGJlZm9yZSBkaXNjYXJkaW5nIHRoZSByZWNvZ25pdGlvbiAqL1xuXHR0aW1lb3V0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHQvKiogRGVmaW5lcyB0aGUgYTExeSBsYWJlbCBmb3IgdGhlIGRlZmF1bHQgYnV0dG9uICovXG5cdGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcblx0LyoqIERlZmluZXMgdGhlIHN0eWxlcyBvZiB0aGUgZGVmYXVsdCBlbGVtZW50IGlmIGNsYXNzTmFtZSBpcyBub3Qgc3BlY2lmaWVkICovXG5cdHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXHQvKiogRGVmaW5lcyB0aGUgY2xhc3Mgb2YgdGhlIGRlZmF1bHQgZWxlbWVudCAqL1xuXHRjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cdC8qKiBEZWZpbmVzIHRoZSBkZWZhdWx0IHN0eWxlIG9mIHRoZSBmb2N1cyBvdXRsaW5lLiBpZiBudWxsIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyB1c2VkICovXG5cdG91dGxpbmVTdHlsZTogUHJvcFR5cGVzLnN0cmluZyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIHJlY29nbml0aW9uIHN0YXJ0cyAqL1xuXHRvblN0YXJ0OiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIHJlY29nbml0aW9uIGVuZHMgKi9cblx0b25FbmQ6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiB0aGUgc3BlZWNoIHN0YXJ0cyAqL1xuXHRvblNwZWVjaFN0YXJ0OiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIHNwZWVjaCBlbmRzICovXG5cdG9uU3BlZWNoRW5kOiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gYSByZXN1bHQgaXMgcmV0dXJuZWQgZnJvbSB0ZSByZWNvZ25pdGlvbiAqL1xuXHRvblJlc3VsdDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIGFuIGVycm9yIG9jY3VycyAqL1xuXHRvbkVycm9yOiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gbm8gcmVzdWx0IGNhbiBiZSByZWNvZ25pemVkICovXG5cdG9uTm9NYXRjaDogUHJvcFR5cGVzLmZ1bmMsXG59XG5cblZvY2FsLmRlZmF1bHRQcm9wcyA9IHtcblx0bGFuZzogJ2VuLVVTJyxcblx0Z3JhbW1hcnM6IG51bGwsXG5cdHRpbWVvdXQ6IDMwMDAsXG5cdGFyaWFMYWJlbDogJ3N0YXJ0IHJlY29nbml0aW9uJyxcblx0c3R5bGU6IG51bGwsXG5cdGNsYXNzTmFtZTogbnVsbCxcblx0b3V0bGluZVN0eWxlOiAnMnB4IHNvbGlkJyxcblx0b25TdGFydDogbnVsbCxcblx0b25FbmQ6IG51bGwsXG5cdG9uU3BlZWNoU3RhcnQ6IG51bGwsXG5cdG9uU3BlZWNoRW5kOiBudWxsLFxuXHRvblJlc3VsdDogbnVsbCxcblx0b25FcnJvcjogbnVsbCxcblx0b25Ob01hdGNoOiBudWxsLFxufVxuXG5leHBvcnQgZGVmYXVsdCBWb2NhbFxuIiwiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5cbmNvbnN0IHVzZVRpbWVvdXQgPSAoaGFuZGxlciwgdGltZW91dCA9IDApID0+IHtcblx0Y29uc3QgcmVmID0gdXNlUmVmKC0xKVxuXG5cdGNvbnN0IHN0b3AgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0Y2xlYXJUaW1lb3V0KHJlZi5jdXJyZW50KVxuXHRcdHJlZi5jdXJyZW50ID0gLTFcblx0fSwgW10pXG5cblx0Y29uc3Qgc3RhcnQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c3RvcCgpXG5cdFx0cmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KGhhbmRsZXIsIHRpbWVvdXQpXG5cdH0sIFtoYW5kbGVyLCB0aW1lb3V0LCBzdG9wXSlcblxuXHR1c2VFZmZlY3QoKCkgPT4gc3RvcCwgW3N0b3BdKVxuXG5cdHJldHVybiBbc3RhcnQsIHN0b3BdXG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZVRpbWVvdXRcblxuLy8gVE9ETzogUmV0dXJuIGEgcHJvbWlzZVxuIiwiaW1wb3J0IFZvY2FsIGZyb20gJy4vY29tcG9uZW50cy9Wb2NhbCdcbmltcG9ydCBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIgZnJvbSAnLi9jb3JlL1NwZWVjaFJlY29nbml0aW9uV3JhcHBlcidcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VWb2NhbCB9IGZyb20gJy4vaG9va3MvdXNlVm9jYWwnXG5leHBvcnQgY29uc3QgaXNTdXBwb3J0ZWQgPSBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuaXNTdXBwb3J0ZWRcblxuZXhwb3J0IGRlZmF1bHQgVm9jYWxcbiJdLCJuYW1lcyI6WyJlIiwiciIsInQiLCJuIiwiYSIsImkiLCJvIiwidSIsImMiLCJ2YWx1ZSIsImRvbmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJ0aGlzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJBcnJheSIsImlzQXJyYXkiLCJTeW1ib2wiLCJpdGVyYXRvciIsIk9iamVjdCIsIm5leHQiLCJwdXNoIiwibGVuZ3RoIiwicmV0dXJuIiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIlR5cGVFcnJvciIsInJlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJ3cmFwIiwicHJldiIsImFicnVwdCIsIm5hdmlnYXRvciIsInBlcm1pc3Npb25zIiwiRE9NRXhjZXB0aW9uIiwicXVlcnkiLCJzZW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInRhcmdldCIsInN0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInQwIiwiY2F0Y2giLCJzdG9wIiwicyIsIm1lZGlhRGV2aWNlcyIsInQxIiwiZ2V0VXNlck1lZGlhIiwidDIiLCJ0MyIsImFsbCIsInQ0IiwiU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyIiwib3B0aW9ucyIsIlNwZWVjaFJlY29nbml0aW9uIiwiX3Jlc29sdmVTcGVlY2hSZWNvZ25pdGlvbiIsIl9pbnN0YW5jZSIsIl9saXN0ZW5lcnMiLCJlbnRyaWVzIiwiZGVmYXVsdE9wdGlvbnMiLCJmb3JFYWNoIiwia2V5IiwiX3Jlc29sdmVTcGVlY2hHcmFtbWFyTGlzdCIsIl90aGlzIiwiXyIsIkVycm9yIiwiZ2V0VXNlck1lZGlhU3RyZWFtIiwiYXVkaW8iLCJzdGFydCIsImVycm9ySGFuZGxlciIsImVycm9yIiwiYWJvcnQiLCJldmVudFR5cGUiLCJjYWxsYmFjayIsIl9pbmNsdWRlc0V2ZW50VHlwZSIsImhhbmRsZXIiLCJldmVudCIsImFkZGl0aW9uYWxBcmdzIiwiZXZlbnRUeXBlcyIsIlJFU1VMVCIsInJlc3VsdHMiLCJ0cmFuc2NyaXB0IiwiX3RoaXMyIiwia2V5cyIsIl90aGlzMyIsInZhbHVlcyIsImZpbmQiLCJ0eXBlIiwid2luZG93Iiwid2Via2l0U3BlZWNoUmVjb2duaXRpb24iLCJtb3pTcGVlY2hSZWNvZ25pdGlvbiIsIm1zU3BlZWNoUmVjb2duaXRpb24iLCJTcGVlY2hHcmFtbWFyTGlzdCIsIndlYmtpdFNwZWVjaEdyYW1tYXJMaXN0IiwibW96U3BlZWNoR3JhbW1hckxpc3QiLCJtc1NwZWVjaEdyYW1tYXJMaXN0IiwiZ3JhbW1hcnMiLCJsYW5nIiwiY29udGludW91cyIsImludGVyaW1SZXN1bHRzIiwibWF4QWx0ZXJuYXRpdmVzIiwic2VydmljZVVSSSIsIkFVRElPX0VORCIsIkFVRElPX1NUQVJUIiwiRU5EIiwiRVJST1IiLCJOT19NQVRDSCIsIlNPVU5EX0VORCIsIlNPVU5EX1NUQVJUIiwiU1BFRUNIX0VORCIsIlNQRUVDSF9TVEFSVCIsIlNUQVJUIiwidXNlVm9jYWwiLCJfX3JzSW5zdGFuY2UiLCJyZWYiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJpc1N1cHBvcnRlZCIsImN1cnJlbnQiLCJjbGVhbnVwIiwidXNlQ2FsbGJhY2siLCJzdWJzY3JpYmUiLCJ1bnN1YnNjcmliZSIsImNsZWFuIiwiSWNvbiIsImNvbG9yIiwiYWN0aXZlQ29sb3IiLCJpc0FjdGl2ZSIsIlJlYWN0IiwieG1sbnMiLCJ3aWR0aCIsImhlaWdodCIsInZpZXdCb3giLCJmaWxsIiwiZCIsImN4IiwiY3kiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzdHJpbmciLCJib29sIiwiZGVmYXVsdFByb3BzIiwiVm9jYWwiLCJjaGlsZHJlbiIsInRpbWVvdXQiLCJhcmlhTGFiZWwiLCJzdHlsZSIsImNsYXNzTmFtZSIsIm91dGxpbmVTdHlsZSIsIm9uU3RhcnQiLCJvbkVuZCIsIm9uU3BlZWNoU3RhcnQiLCJvblNwZWVjaEVuZCIsIm9uUmVzdWx0Iiwib25FcnJvciIsIm9uTm9NYXRjaCIsImJ1dHRvblJlZiIsInVzZVN0YXRlIiwiaXNMaXN0ZW5pbmciLCJzZXRJc0xpc3RlbmluZyIsIl9vbkVuZCIsInN0b3BUaW1lciIsInN0b3BSZWNvZ25pdGlvbiIsIl9vblN0YXJ0IiwiX29uU3BlZWNoU3RhcnQiLCJfb25TcGVlY2hFbmQiLCJfb25SZXN1bHQiLCJfb25FcnJvciIsIl9vbk5vTWF0Y2giLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwidXNlVGltZW91dCIsInN0YXJ0VGltZXIiLCJzdGFydFJlY29nbml0aW9uIiwiX29uQ2xpY2siLCJfb25Gb2N1cyIsIm91dGxpbmUiLCJfb25CbHVyIiwicmVzdWx0IiwiaXNWYWxpZEVsZW1lbnQiLCJjbG9uZUVsZW1lbnQiLCJvbkNsaWNrIiwicm9sZSIsImJhY2tncm91bmQiLCJib3JkZXIiLCJwYWRkaW5nIiwiY3Vyc29yIiwib25Gb2N1cyIsIm9uQmx1ciIsImljb25Db2xvciIsIl9yZW5kZXJDaGlsZHJlbiIsIm9iamVjdCIsIm51bWJlciIsImZ1bmMiXSwibWFwcGluZ3MiOiJzbUVBQUEsU0FBU0EsRUFBRUEsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMs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 |
@@ -1,2 +0,2 @@ | ||
"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t=require("react"),n=e(t),r=e(require("prop-types"));function o(e,t,n,r,o,i,a){try{var c=e[i](a),u=c.value}catch(e){return void n(e)}c.done?t(u):Promise.resolve(u).then(r,o)}function i(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)}}function a(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),e}function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(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 s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?u(Object(n),!0).forEach((function(t){c(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,o=!1,i=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return n}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return f(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return f(e,t)}(e,t)||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 f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function p(e,t,n,r,o,i,a){try{var c=e[i](a),u=c.value}catch(e){return void n(e)}c.done?t(u):Promise.resolve(u).then(r,o)}function v(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){p(i,r,o,a,c,"next",e)}function c(e){p(i,r,o,a,c,"throw",e)}a(void 0)}))}}function h(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return n}}(e,t)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e,t)||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 d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var m=function(){var e=v(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=v(regeneratorRuntime.mark((function e(n,r){var o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.permissions){e.next=4;break}r(new DOMException("Permissions not supported","NOT_FOUND_ERR")),e.next=16;break;case 4:return e.prev=4,e.next=7,navigator.permissions.query({name:t});case 7:o=e.sent,i=function e(t){o.removeEventListener("change",e),b(t.target.state,n,r)},o.addEventListener("change",i),b(o.state,n,r),e.next=16;break;case 13:e.prev=13,e.t0=e.catch(4),r(e.t0);case 16:case"end":return e.stop()}}),e,null,[[4,13]])})));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)}}(),b=function(e,t,n){switch(e){case"denied":n(new DOMException("Permission denied","NOT_ALLOWED_ERR"));break;default:t(e)}},y=function(){var e=v(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=v(regeneratorRuntime.mark((function e(r,o){var i,a,c;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.mediaDevices){e.next=4;break}o(new DOMException("MediaDevices not supported","NOT_FOUND_ERR")),e.next=24;break;case 4:return e.prev=4,e.t0=Promise,e.next=8,m(t);case 8:return e.t1=e.sent,e.next=11,navigator.mediaDevices.getUserMedia(n);case 11:return e.t2=e.sent,e.t3=[e.t1,e.t2],e.next=15,e.t0.all.call(e.t0,e.t3);case 15:i=e.sent,a=h(i,2),c=a[1],r(c),e.next=24;break;case 21:e.prev=21,e.t4=e.catch(4),o(e.t4);case 24:case"end":return e.stop()}}),e,null,[[4,21]])})));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)}}(),g=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),c(this,"_instance",null),c(this,"_listeners",null);var r=e._resolveSpeechRecognition()||{};this._instance=new r,this._listeners={},Object.entries(s(s({},e.defaultOptions),t||{})).forEach((function(t){var r=l(t,2),o=r[0],i=r[1];"grammars"!==o||i||(i=new(e._resolveSpeechGrammarList()||{}));n._instance[o]=i}))}var t,n;return a(e,null,[{key:"isSupported",get:function(){return!!e._resolveSpeechRecognition()},set:function(e){throw new Error("You cannot set isSupported directly.")}}]),a(e,[{key:"start",value:(t=regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.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,y("microphone",{audio:!0});case 4:if(e.sent){e.next=7;break}throw new 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]])})),n=function(){var e=this,n=arguments;return new Promise((function(r,i){var a=t.apply(e,n);function c(e){o(a,r,i,c,u,"next",e)}function u(e){o(a,r,i,c,u,"throw",e)}c(void 0)}))},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,n){var r=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),n&&n.apply(r,[].concat(i,[o]))};this._instance.addEventListener(t,o),this._listeners[t]=o}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 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}();c(g,"defaultOptions",{grammars:null,lang:"en-US",continuous:!1,interimResults:!1,maxAlternatives:1,serviceURI:null}),c(g,"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 w=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"en-US",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o=t.useRef(null);t.useEffect((function(){if(g.isSupported)return o.current=r||new g({lang:e,grammars:n}),function(){o.current.abort(),o.current.cleanup()}}),[e,n,r]);var i=t.useCallback((function(){o.current&&o.current.start()}),[]),a=t.useCallback((function(){o.current&&o.current.stop()}),[]),c=t.useCallback((function(){o.current&&o.current.abort()}),[]),u=t.useCallback((function(e,t){o.current&&o.current.addEventListener(e,t)}),[]),s=t.useCallback((function(e,t){o.current&&o.current.removeEventListener(e,t)}),[]),l=t.useCallback((function(){o.current&&o.current.cleanup()}),[]);return[o,{start:i,stop:a,abort:c,subscribe:u,unsubscribe:s,clean:l}]},S=function(e){var t=e.color,r=e.activeColor,o=e.isActive;return n.createElement("svg",{"data-testid":"__icon-root__",xmlns:"http://www.w3.org/2000/svg",width:"100%",height:"100%",viewBox:"0 0 24 24"},n.createElement("g",null,n.createElement("path",{"data-testid":"__icon-path__",fill:t,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"}),o&&n.createElement("circle",{"data-testid":"__icon-active__",fill:r,cx:"16",cy:"4",r:"4"})))};S.propTypes={color:r.string,activeColor:r.string,isActive:r.bool},S.defaultProps={color:"black",activeColor:"red",isActive:!1};var _=function(e){var r=e.children,o=e.lang,i=e.grammars,a=e.timeout,c=e.ariaLabel,u=e.style,f=e.className,p=e.outlineStyle,v=e.onStart,h=e.onEnd,d=e.onSpeechStart,m=e.onSpeechEnd,b=e.onResult,y=e.onError,_=e.onNoMatch,E=e.__rsInstance,O=t.useRef(null),k=l(t.useState(!1),2),R=k[0],x=k[1],j=l(w(o,i,E),2)[1],T=j.start,A=j.stop,L=j.subscribe,P=j.unsubscribe,D=function e(t){U(),I(),P("start",q),P("end",e),P("speechstart",F),P("speechend",V),P("result",B),P("error",Y),P("nomatch",$),h&&h(t)},C=l(function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=t.useRef(-1),o=t.useCallback((function(){clearTimeout(r.current),r.current=-1}),[]),i=t.useCallback((function(){o(),r.current=setTimeout(e,n)}),[e,n,o]);return t.useEffect((function(){return o}),[o]),[i,o]}(D,a),2),N=C[0],U=C[1],M=function(){try{x(!0),L("start",q),L("end",D),L("speechstart",F),L("speechend",V),L("result",B),L("error",Y),L("nomatch",$),T()}catch(e){Y(e)}},I=function(){try{x(!1),A()}catch(e){y&&y(e)}},G=function(){M()},z=function(){!f&&p&&(O.current.style.outline=p)},H=function(){!f&&p&&(O.current.style.outline="none")},q=function(e){N(),v&&v(e)},F=function(e){U(),d&&d(e)},V=function(e){N(),m&&m(e)},B=function(e,t){U(),I(),b&&b(e,t)},Y=function(e){I(),y&&y(e)},$=function(e){U(),I(),_&&_(e)};return function(e){return g.isSupported?"function"==typeof e?e(M,I):t.isValidElement(e)?t.cloneElement(e,s({},!R&&{onClick:G})):n.createElement("button",{"data-testid":"__vocal-root__",ref:O,role:"button","aria-label":c,style:f?null:s({width:24,height:24,background:"none",border:"none",padding:0,cursor:R?"default":"pointer"},u),className:f,onFocus:z,onBlur:H,onClick:G},n.createElement(S,{isActive:R,iconColor:"#aaa"})):null}(r)};_.propTypes={lang:r.string,grammars:r.object,timeout:r.number,ariaLabel:r.string,style:r.object,className:r.string,outlineStyle:r.string,onStart:r.func,onEnd:r.func,onSpeechStart:r.func,onSpeechEnd:r.func,onResult:r.func,onError:r.func,onNoMatch:r.func},_.defaultProps={lang:"en-US",grammars:null,timeout:3e3,ariaLabel:"start recognition",style:null,className:null,outlineStyle:"2px solid",onStart:null,onEnd:null,onSpeechStart:null,onSpeechEnd:null,onResult:null,onError:null,onNoMatch:null};var E=g.isSupported;exports.default=_,exports.isSupported=E,exports.useVocal=w; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9AdW50ZW1wcy91c2VyLXBlcm1pc3Npb25zLXV0aWxzL2Rpc3QvaW5kZXguZXMuanMiLCIuLi9zcmMvY29yZS9TcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuanMiLCIuLi9zcmMvdXRpbHMvaXNGdW5jLmpzIiwiLi4vc3JjL2hvb2tzL3VzZVZvY2FsLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvSWNvbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1ZvY2FsLmpzIiwiLi4vc3JjL2hvb2tzL3VzZVRpbWVvdXQuanMiLCIuLi9zcmMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gZShlLHIsdCxuLGEsaSxvKXt0cnl7dmFyIHU9ZVtpXShvKSxjPXUudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdChlKX11LmRvbmU/cihjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIHIocil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGEsaSl7dmFyIG89ci5hcHBseSh0LG4pO2Z1bmN0aW9uIHUocil7ZShvLGEsaSx1LGMsXCJuZXh0XCIscil9ZnVuY3Rpb24gYyhyKXtlKG8sYSxpLHUsYyxcInRocm93XCIscil9dSh2b2lkIDApfSkpfX1mdW5jdGlvbiB0KGUscil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHIpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBTeW1ib2x8fCEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKSkpcmV0dXJuO3ZhciB0PVtdLG49ITAsYT0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHU9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXUubmV4dCgpKS5kb25lKSYmKHQucHVzaChvLnZhbHVlKSwhcnx8dC5sZW5ndGghPT1yKTtuPSEwKTt9Y2F0Y2goZSl7YT0hMCxpPWV9ZmluYWxseXt0cnl7bnx8bnVsbD09dS5yZXR1cm58fHUucmV0dXJuKCl9ZmluYWxseXtpZihhKXRocm93IGl9fXJldHVybiB0fShlLHIpfHxmdW5jdGlvbihlLHIpe2lmKCFlKXJldHVybjtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbihlLHIpO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKTtpZihcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20oZSk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBuKGUscil9KGUscil8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBuKGUscil7KG51bGw9PXJ8fHI+ZS5sZW5ndGgpJiYocj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAsbj1uZXcgQXJyYXkocik7dDxyO3QrKyluW3RdPWVbdF07cmV0dXJuIG59dmFyIGE9ZnVuY3Rpb24oKXt2YXIgZT1yKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKHQpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KFwicmV0dXJuXCIsbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZT1yKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKHIsbil7dmFyIGEsbztyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKG5hdmlnYXRvci5wZXJtaXNzaW9ucyl7ZS5uZXh0PTQ7YnJlYWt9bihuZXcgRE9NRXhjZXB0aW9uKFwiUGVybWlzc2lvbnMgbm90IHN1cHBvcnRlZFwiLFwiTk9UX0ZPVU5EX0VSUlwiKSksZS5uZXh0PTE2O2JyZWFrO2Nhc2UgNDpyZXR1cm4gZS5wcmV2PTQsZS5uZXh0PTcsbmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHtuYW1lOnR9KTtjYXNlIDc6YT1lLnNlbnQsbz1mdW5jdGlvbiBlKHQpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLGUpLGkodC50YXJnZXQuc3RhdGUscixuKX0sYS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsbyksaShhLnN0YXRlLHIsbiksZS5uZXh0PTE2O2JyZWFrO2Nhc2UgMTM6ZS5wcmV2PTEzLGUudDA9ZS5jYXRjaCg0KSxuKGUudDApO2Nhc2UgMTY6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzQsMTNdXSl9KSkpO3JldHVybiBmdW5jdGlvbihyLHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKTtjYXNlIDE6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKTtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxpPWZ1bmN0aW9uKGUscix0KXtzd2l0Y2goZSl7Y2FzZVwiZGVuaWVkXCI6dChuZXcgRE9NRXhjZXB0aW9uKFwiUGVybWlzc2lvbiBkZW5pZWRcIixcIk5PVF9BTExPV0VEX0VSUlwiKSk7YnJlYWs7ZGVmYXVsdDpyKGUpfX0sbz1mdW5jdGlvbigpe3ZhciBlPXIocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUobixpKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdChcInJldHVyblwiLG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGU9cihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZShyLG8pe3ZhciB1LGMscztyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKG5hdmlnYXRvci5tZWRpYURldmljZXMpe2UubmV4dD00O2JyZWFrfW8obmV3IERPTUV4Y2VwdGlvbihcIk1lZGlhRGV2aWNlcyBub3Qgc3VwcG9ydGVkXCIsXCJOT1RfRk9VTkRfRVJSXCIpKSxlLm5leHQ9MjQ7YnJlYWs7Y2FzZSA0OnJldHVybiBlLnByZXY9NCxlLnQwPVByb21pc2UsZS5uZXh0PTgsYShuKTtjYXNlIDg6cmV0dXJuIGUudDE9ZS5zZW50LGUubmV4dD0xMSxuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYShpKTtjYXNlIDExOnJldHVybiBlLnQyPWUuc2VudCxlLnQzPVtlLnQxLGUudDJdLGUubmV4dD0xNSxlLnQwLmFsbC5jYWxsKGUudDAsZS50Myk7Y2FzZSAxNTp1PWUuc2VudCxjPXQodSwyKSxzPWNbMV0scihzKSxlLm5leHQ9MjQ7YnJlYWs7Y2FzZSAyMTplLnByZXY9MjEsZS50ND1lLmNhdGNoKDQpLG8oZS50NCk7Y2FzZSAyNDpjYXNlXCJlbmRcIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbNCwyMV1dKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHIsdCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkpO2Nhc2UgMTpjYXNlXCJlbmRcIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbihyLHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7ZXhwb3J0e2EgYXMgZ2V0UGVybWlzc2lvbixvIGFzIGdldFVzZXJNZWRpYVN0cmVhbX07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1WlhNdWFuTWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTluWlhSUVpYSnRhWE56YVc5dUxtcHpJaXdpTGk0dmMzSmpMMmRsZEZWelpYSk5aV1JwWVZOMGNtVmhiUzVxY3lKZExDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ1lTQndjbTl0YVhObElISmxjMjlzZG1Wa0lIZG9aVzRnZEdobElIQmxjbTFwYzNOcGIyNGdhWE1nWjNKaGJuUmxaQ0JpZVNCMGFHVWdkWE5sY2x4dUlDb2dRSEJoY21GdElIQmxjbTFwYzNOcGIyNU9ZVzFsSUNBZ0lDQWdJQ0FnSUNBZ1RtRnRaU0J2WmlCMGFHVWdjR1Z5YldsemMybHZiaTRnUUhObFpTQm9kSFJ3Y3pvdkwzY3pZeTVuYVhSb2RXSXVhVzh2Y0dWeWJXbHpjMmx2Ym5NdkkyVnVkVzFrWldZdGNHVnliV2x6YzJsdmJtNWhiV1ZjYmlBcUlFQnlaWFIxY201eklIdFFjbTl0YVhObGZWeHVJQ292WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JoYzNsdVl5QW9jR1Z5YldsemMybHZiazVoYldVcElEMCtJSHRjYmx4MGNtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtHRnplVzVqSUNoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNibHgwWEhScFppQW9JVzVoZG1sbllYUnZjaTV3WlhKdGFYTnphVzl1Y3lrZ2UxeHVYSFJjZEZ4MGNtVnFaV04wS0c1bGR5QkVUMDFGZUdObGNIUnBiMjRvSjFCbGNtMXBjM05wYjI1eklHNXZkQ0J6ZFhCd2IzSjBaV1FuTENBblRrOVVYMFpQVlU1RVgwVlNVaWNwS1Z4dVhIUmNkSDBnWld4elpTQjdYRzVjZEZ4MFhIUjBjbmtnZTF4dVhIUmNkRngwWEhSamIyNXpkQ0J3WlhKdGFYTnphVzl1VTNSaGRIVnpJRDBnWVhkaGFYUWdibUYyYVdkaGRHOXlMbkJsY20xcGMzTnBiMjV6TG5GMVpYSjVLSHNnYm1GdFpUb2djR1Z5YldsemMybHZiazVoYldVZ2ZTbGNibHgwWEhSY2RGeDBZMjl1YzNRZ2IyNURhR0Z1WjJVZ1BTQW9aWFpsYm5RcElEMCtJSHRjYmx4MFhIUmNkRngwWEhSd1pYSnRhWE56YVc5dVUzUmhkSFZ6TG5KbGJXOTJaVVYyWlc1MFRHbHpkR1Z1WlhJb0oyTm9ZVzVuWlNjc0lHOXVRMmhoYm1kbEtWeHVYSFJjZEZ4MFhIUmNkSEpsYzI5c2RtVlBjbEpsYW1WamRFSmhjMlZrVDI1VGRHRjBaU2hsZG1WdWRDNTBZWEpuWlhRdWMzUmhkR1VzSUhKbGMyOXNkbVVzSUhKbGFtVmpkQ2xjYmx4MFhIUmNkRngwZlZ4dVhIUmNkRngwWEhSd1pYSnRhWE56YVc5dVUzUmhkSFZ6TG1Ga1pFVjJaVzUwVEdsemRHVnVaWElvSjJOb1lXNW5aU2NzSUc5dVEyaGhibWRsS1Z4dVhIUmNkRngwWEhSeVpYTnZiSFpsVDNKU1pXcGxZM1JDWVhObFpFOXVVM1JoZEdVb2NHVnliV2x6YzJsdmJsTjBZWFIxY3k1emRHRjBaU3dnY21WemIyeDJaU3dnY21WcVpXTjBLVnh1WEhSY2RGeDBmU0JqWVhSamFDQW9aWEp5YjNJcElIdGNibHgwWEhSY2RGeDBjbVZxWldOMEtHVnljbTl5S1Z4dVhIUmNkRngwZlZ4dVhIUmNkSDFjYmx4MGZTbGNibjFjYmx4dVkyOXVjM1FnY21WemIyeDJaVTl5VW1WcVpXTjBRbUZ6WldSUGJsTjBZWFJsSUQwZ0tITjBZWFJsTENCeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNibHgwYzNkcGRHTm9JQ2h6ZEdGMFpTa2dlMXh1WEhSY2RHTmhjMlVnSjJSbGJtbGxaQ2M2WEc1Y2RGeDBYSFJ5WldwbFkzUW9ibVYzSUVSUFRVVjRZMlZ3ZEdsdmJpZ25VR1Z5YldsemMybHZiaUJrWlc1cFpXUW5MQ0FuVGs5VVgwRk1URTlYUlVSZlJWSlNKeWtwWEc1Y2RGeDBYSFJpY21WaGExeHVYSFJjZEdSbFptRjFiSFE2WEc1Y2RGeDBYSFJ5WlhOdmJIWmxLSE4wWVhSbEtWeHVYSFI5WEc1OVhHNGlMQ0pwYlhCdmNuUWdaMlYwVUdWeWJXbHpjMmx2YmlCbWNtOXRJQ2N1TDJkbGRGQmxjbTFwYzNOcGIyNG5YRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUJoSUhCeWIyMXBjMlVnY21WemIyeDJaV1FnZDJobGJpQjBhR1VnY0dWeWJXbHpjMmx2YmlCcGN5Qm5jbUZ1ZEdWa0lHSjVJSFJvWlNCMWMyVnlJR0Z1WkNCMGFHVWdjM1J5WldGdElHbHpJSEpsZEhKcFpYWmxaRnh1SUNvZ1FIQmhjbUZ0SUhCbGNtMXBjM05wYjI1T1lXMWxJQ0FnSUNBZ0lDQWdJQ0FnVG1GdFpTQnZaaUIwYUdVZ2NHVnliV2x6YzJsdmJpNGdRSE5sWlNCb2RIUndjem92TDNjell5NW5hWFJvZFdJdWFXOHZjR1Z5YldsemMybHZibk12STJWdWRXMWtaV1l0Y0dWeWJXbHpjMmx2Ym01aGJXVmNiaUFxSUVCd1lYSmhiU0J0WldScFlWTjBjbVZoYlVOdmJuTjBjbUZwYm5SeklDQWdJRU52Ym5OMGNtRnBiblJ6SUc5aWFtVmpkQzRnUUhObFpTQm9kSFJ3Y3pvdkwyUmxkbVZzYjNCbGNpNXRiM3BwYkd4aExtOXlaeTlsYmkxVlV5OWtiMk56TDFkbFlpOUJVRWt2VFdWa2FXRlRkSEpsWVcxRGIyNXpkSEpoYVc1MGMxeHVJQ29nUUhKbGRIVnlibk1nZTFCeWIyMXBjMlY5WEc0Z0tpOWNibVY0Y0c5eWRDQmtaV1poZFd4MElHRnplVzVqSUNod1pYSnRhWE56YVc5dVRtRnRaU3dnYldWa2FXRlRkSEpsWVcxRGIyNXpkSEpoYVc1MGN5a2dQVDRnZTF4dVhIUnlaWFIxY200Z2JtVjNJRkJ5YjIxcGMyVW9ZWE41Ym1NZ0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh1WEhSY2RHbG1JQ2doYm1GMmFXZGhkRzl5TG0xbFpHbGhSR1YyYVdObGN5a2dlMXh1WEhSY2RGeDBjbVZxWldOMEtHNWxkeUJFVDAxRmVHTmxjSFJwYjI0b0owMWxaR2xoUkdWMmFXTmxjeUJ1YjNRZ2MzVndjRzl5ZEdWa0p5d2dKMDVQVkY5R1QxVk9SRjlGVWxJbktTbGNibHgwWEhSOUlHVnNjMlVnZTF4dVhIUmNkRngwZEhKNUlIdGNibHgwWEhSY2RGeDBZMjl1YzNRZ1d5d2djM1J5WldGdFhTQTlJR0YzWVdsMElGQnliMjFwYzJVdVlXeHNLRnRjYmx4MFhIUmNkRngwWEhSaGQyRnBkQ0JuWlhSUVpYSnRhWE56YVc5dUtIQmxjbTFwYzNOcGIyNU9ZVzFsS1N4Y2JseDBYSFJjZEZ4MFhIUmhkMkZwZENCdVlYWnBaMkYwYjNJdWJXVmthV0ZFWlhacFkyVnpMbWRsZEZWelpYSk5aV1JwWVNodFpXUnBZVk4wY21WaGJVTnZibk4wY21GcGJuUnpLU3hjYmx4MFhIUmNkRngwWFNsY2JseDBYSFJjZEZ4MGNtVnpiMngyWlNoemRISmxZVzBwWEc1Y2RGeDBYSFI5SUdOaGRHTm9JQ2hsY25KdmNpa2dlMXh1WEhSY2RGeDBYSFJ5WldwbFkzUW9aWEp5YjNJcFhHNWNkRngwWEhSOVhHNWNkRngwZlZ4dVhIUjlLVnh1ZlZ4dUlsMHNJbTVoYldWeklqcGJJbkJsY20xcGMzTnBiMjVPWVcxbElpd2lVSEp2YldselpTSXNJbkpsYzI5c2RtVWlMQ0p5WldwbFkzUWlMQ0p1WVhacFoyRjBiM0lpTENKd1pYSnRhWE56YVc5dWN5SXNJa1JQVFVWNFkyVndkR2x2YmlJc0luRjFaWEo1SWl3aWJtRnRaU0lzSW5CbGNtMXBjM05wYjI1VGRHRjBkWE1pTENKdmJrTm9ZVzVuWlNJc0ltVjJaVzUwSWl3aWNtVnRiM1psUlhabGJuUk1hWE4wWlc1bGNpSXNJbkpsYzI5c2RtVlBjbEpsYW1WamRFSmhjMlZrVDI1VGRHRjBaU0lzSW5SaGNtZGxkQ0lzSW5OMFlYUmxJaXdpWVdSa1JYWmxiblJNYVhOMFpXNWxjaUlzSW0xbFpHbGhVM1J5WldGdFEyOXVjM1J5WVdsdWRITWlMQ0p0WldScFlVUmxkbWxqWlhNaUxDSm5aWFJRWlhKdGFYTnphVzl1SWl3aVoyVjBWWE5sY2sxbFpHbGhJaXdpWVd4c0lpd2ljM1J5WldGdElsMHNJbTFoY0hCcGJtZHpJam9pYlhkRFFVdEJMR3RFUVVGbExGZEJRVTlCTERSSFFVTmtMRWxCUVVsRExHOUVRVUZSTEZkQlFVOURMRVZCUVZORExEaEdRVU0zUWtNc1ZVRkJWVU1zTkVKQlEyUkdMRVZCUVU4c1NVRkJTVWNzWVVGQllTdzBRa0ZCTmtJc2EwVkJSM0pDUml4VlFVRlZReXhaUVVGWlJTeE5RVUZOTEVOQlFVVkRMRXRCUVUxU0xGZEJRVGRFVXl4VFFVTkJReXhGUVVGWExGTkJRVmhCTEVWQlFWbERMRWRCUTJwQ1JpeEZRVUZwUWtjc2IwSkJRVzlDTEZOQlFWVkdMRWRCUXk5RFJ5eEZRVUUwUWtZc1JVRkJUVWNzVDBGQlQwTXNUVUZCVDJJc1JVRkJVME1zU1VGRk1VUk5MRVZCUVdsQ1R5eHBRa0ZCYVVJc1UwRkJWVTRzUjBGRE5VTkhMRVZCUVRSQ1NpeEZRVUZwUWswc1RVRkJUMklzUlVGQlUwTXNjVVJCUlRkRVFTdzJUa0ZOUlZVc1JVRkJPRUlzVTBGQlEwVXNSVUZCVDJJc1JVRkJVME1zVlVGRE5VTlpMRTlCUTBZc1UwRkRTbG9zUlVGQlR5eEpRVUZKUnl4aFFVRmhMRzlDUVVGeFFpeHJRMEZITjBOS0xFVkJRVkZoTEcxRVEzWkNTU3hYUVVGUFppeEZRVUZuUW1sQ0xEUkhRVU01UWl4SlFVRkphRUlzYjBSQlFWRXNWMEZCVDBNc1JVRkJVME1zWjBkQlF6ZENReXhWUVVGVll5dzJRa0ZEWkdZc1JVRkJUeXhKUVVGSlJ5eGhRVUZoTERaQ1FVRTRRaXc0UkVGSE5VSk1MR2xDUVVOc1FtdENMRVZCUVdOdVFpeDFRMEZEWkVrc1ZVRkJWV01zWVVGQllVVXNZVUZCWVVnc09FUkJSbFpKTERoRFFVRjRRa01zVDBGSlZIQkNMRVZCUVZGdlFpeHhSRUZGVW01Q0luMD1cbiIsImltcG9ydCB7IGdldFVzZXJNZWRpYVN0cmVhbSB9IGZyb20gJ0B1bnRlbXBzL3VzZXItcGVybWlzc2lvbnMtdXRpbHMnXG5cbmNsYXNzIFNwZWVjaFJlY29nbml0aW9uV3JhcHBlciB7XG5cdHN0YXRpYyBkZWZhdWx0T3B0aW9ucyA9IHtcblx0XHRncmFtbWFyczogbnVsbCxcblx0XHRsYW5nOiAnZW4tVVMnLFxuXHRcdGNvbnRpbnVvdXM6IGZhbHNlLFxuXHRcdGludGVyaW1SZXN1bHRzOiBmYWxzZSxcblx0XHRtYXhBbHRlcm5hdGl2ZXM6IDEsXG5cdFx0c2VydmljZVVSSTogbnVsbCxcblx0fVxuXG5cdHN0YXRpYyBldmVudFR5cGVzID0ge1xuXHRcdEFVRElPX0VORDogJ2F1ZGlvZW5kJyxcblx0XHRBVURJT19TVEFSVDogJ2F1ZGlvc3RhcnQnLFxuXHRcdEVORDogJ2VuZCcsXG5cdFx0RVJST1I6ICdlcnJvcicsXG5cdFx0Tk9fTUFUQ0g6ICdub21hdGNoJyxcblx0XHRSRVNVTFQ6ICdyZXN1bHQnLFxuXHRcdFNPVU5EX0VORDogJ3NvdW5kZW5kJyxcblx0XHRTT1VORF9TVEFSVDogJ3NvdW5kc3RhcnQnLFxuXHRcdFNQRUVDSF9FTkQ6ICdzcGVlY2hlbmQnLFxuXHRcdFNQRUVDSF9TVEFSVDogJ3NwZWVjaHN0YXJ0Jyxcblx0XHRTVEFSVDogJ3N0YXJ0Jyxcblx0fVxuXG5cdHN0YXRpYyBnZXQgaXNTdXBwb3J0ZWQoKSB7XG5cdFx0cmV0dXJuICEhU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLl9yZXNvbHZlU3BlZWNoUmVjb2duaXRpb24oKVxuXHR9XG5cblx0c3RhdGljIHNldCBpc1N1cHBvcnRlZChfKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IHNldCBpc1N1cHBvcnRlZCBkaXJlY3RseS4nKVxuXHR9XG5cblx0X2luc3RhbmNlID0gbnVsbFxuXHRfbGlzdGVuZXJzID0gbnVsbFxuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRjb25zdCBTcGVlY2hSZWNvZ25pdGlvbiA9IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5fcmVzb2x2ZVNwZWVjaFJlY29nbml0aW9uKCkgfHwge31cblx0XHR0aGlzLl9pbnN0YW5jZSA9IG5ldyBTcGVlY2hSZWNvZ25pdGlvbigpXG5cdFx0dGhpcy5fbGlzdGVuZXJzID0ge31cblxuXHRcdE9iamVjdC5lbnRyaWVzKHtcblx0XHRcdC4uLlNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5kZWZhdWx0T3B0aW9ucyxcblx0XHRcdC4uLihvcHRpb25zIHx8IHt9KSxcblx0XHR9KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcblx0XHRcdGlmIChrZXkgPT09ICdncmFtbWFycycgJiYgIXZhbHVlKSB7XG5cdFx0XHRcdGNvbnN0IFNwZWVjaEdyYW1tYXJMaXN0ID0gU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLl9yZXNvbHZlU3BlZWNoR3JhbW1hckxpc3QoKSB8fCB7fVxuXHRcdFx0XHR2YWx1ZSA9IG5ldyBTcGVlY2hHcmFtbWFyTGlzdCgpXG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9pbnN0YW5jZVtrZXldID0gdmFsdWVcblx0XHR9KVxuXHR9XG5cblx0Z2V0IGluc3RhbmNlKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbnN0YW5jZVxuXHR9XG5cblx0c2V0IGluc3RhbmNlKF8pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW5ub3Qgc2V0IGluc3RhbmNlIGRpcmVjdGx5LicpXG5cdH1cblxuXHRhc3luYyBzdGFydCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3Qgc3RyZWFtID0gYXdhaXQgZ2V0VXNlck1lZGlhU3RyZWFtKCdtaWNyb3Bob25lJywgeyBhdWRpbzogdHJ1ZSB9KVxuXHRcdFx0XHRpZiAoIXN0cmVhbSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHRoZSBzdHJlYW0gZnJvbSBtZWRpYSBkZXZpY2UnKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX2luc3RhbmNlLnN0YXJ0KClcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuX2xpc3RlbmVycy5lcnJvclxuXHRcdFx0XHRpZiAoISFlcnJvckhhbmRsZXIpIHtcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIoZXJyb3IpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0c3RvcCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dGhpcy5faW5zdGFuY2Uuc3RvcCgpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdGFib3J0KCkge1xuXHRcdGlmICghIXRoaXMuX2luc3RhbmNlKSB7XG5cdFx0XHR0aGlzLl9pbnN0YW5jZS5hYm9ydCgpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdGFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBjYWxsYmFjaykge1xuXHRcdGlmICghIXRoaXMuX2luc3RhbmNlICYmIHRoaXMuX2luY2x1ZGVzRXZlbnRUeXBlKGV2ZW50VHlwZSkpIHtcblx0XHRcdGlmICghIXRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdKSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUpXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0bGV0IGFkZGl0aW9uYWxBcmdzID0gW11cblx0XHRcdFx0aWYgKGV2ZW50VHlwZSA9PT0gU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmV2ZW50VHlwZXMuUkVTVUxUKSB7XG5cdFx0XHRcdFx0aWYgKCEhZXZlbnQucmVzdWx0cyAmJiBldmVudC5yZXN1bHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGFkZGl0aW9uYWxBcmdzLnB1c2goZXZlbnQucmVzdWx0c1swXVswXS50cmFuc2NyaXB0KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCEhY2FsbGJhY2sgJiYgY2FsbGJhY2suYXBwbHkodGhpcywgWy4uLmFkZGl0aW9uYWxBcmdzLCBldmVudF0pXG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9pbnN0YW5jZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlcilcblxuXHRcdFx0dGhpcy5fbGlzdGVuZXJzW2V2ZW50VHlwZV0gPSBoYW5kbGVyXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdXG5cdFx0dGhpcy5faW5zdGFuY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIpXG5cblx0XHRkZWxldGUgdGhpcy5fbGlzdGVuZXJzW2V2ZW50VHlwZV1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRjbGVhbnVwKCkge1xuXHRcdHRoaXMuc3RvcCgpXG5cblx0XHRPYmplY3Qua2V5cyh0aGlzLl9saXN0ZW5lcnMpLmZvckVhY2goKGtleSkgPT4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGtleSkpXG5cdFx0dGhpcy5faW5zdGFuY2UgPSBudWxsXG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0X2luY2x1ZGVzRXZlbnRUeXBlKGV2ZW50VHlwZSkge1xuXHRcdHJldHVybiAhIU9iamVjdC52YWx1ZXMoU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmV2ZW50VHlwZXMpLmZpbmQoKHR5cGUpID0+IHR5cGUgPT09IGV2ZW50VHlwZSlcblx0fVxuXG5cdHN0YXRpYyBfcmVzb2x2ZVNwZWVjaFJlY29nbml0aW9uKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHR3aW5kb3cuU3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdHdpbmRvdy53ZWJraXRTcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0d2luZG93Lm1velNwZWVjaFJlY29nbml0aW9uIHx8XG5cdFx0XHR3aW5kb3cubXNTcGVlY2hSZWNvZ25pdGlvblxuXHRcdClcblx0fVxuXG5cdHN0YXRpYyBfcmVzb2x2ZVNwZWVjaEdyYW1tYXJMaXN0KCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHR3aW5kb3cuU3BlZWNoR3JhbW1hckxpc3QgfHxcblx0XHRcdHdpbmRvdy53ZWJraXRTcGVlY2hHcmFtbWFyTGlzdCB8fFxuXHRcdFx0d2luZG93Lm1velNwZWVjaEdyYW1tYXJMaXN0IHx8XG5cdFx0XHR3aW5kb3cubXNTcGVlY2hHcmFtbWFyTGlzdFxuXHRcdClcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXJcbiIsImV4cG9ydCBkZWZhdWx0ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbidcbiIsImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyIGZyb20gJy4uL2NvcmUvU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyJ1xuXG5jb25zdCB1c2VWb2NhbCA9IChsYW5nID0gJ2VuLVVTJywgZ3JhbW1hcnMgPSBudWxsLCBfX3JzSW5zdGFuY2UgPSBudWxsKSA9PiB7XG5cdGNvbnN0IHJlZiA9IHVzZVJlZihudWxsKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5pc1N1cHBvcnRlZCkge1xuXHRcdFx0cmVmLmN1cnJlbnQgPSBfX3JzSW5zdGFuY2UgfHwgbmV3IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlcih7IGxhbmcsIGdyYW1tYXJzIH0pXG5cdFx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0XHRyZWYuY3VycmVudC5hYm9ydCgpXG5cdFx0XHRcdHJlZi5jdXJyZW50LmNsZWFudXAoKVxuXHRcdFx0fVxuXHRcdH1cblx0fSwgW2xhbmcsIGdyYW1tYXJzLCBfX3JzSW5zdGFuY2VdKVxuXG5cdGNvbnN0IHN0YXJ0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdGlmIChyZWYuY3VycmVudCkge1xuXHRcdFx0cmVmLmN1cnJlbnQuc3RhcnQoKVxuXHRcdH1cblx0fSwgW10pXG5cblx0Y29uc3Qgc3RvcCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRpZiAocmVmLmN1cnJlbnQpIHtcblx0XHRcdHJlZi5jdXJyZW50LnN0b3AoKVxuXHRcdH1cblx0fSwgW10pXG5cblx0Y29uc3QgYWJvcnQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0aWYgKHJlZi5jdXJyZW50KSB7XG5cdFx0XHRyZWYuY3VycmVudC5hYm9ydCgpXG5cdFx0fVxuXHR9LCBbXSlcblxuXHRjb25zdCBzdWJzY3JpYmUgPSB1c2VDYWxsYmFjaygoZXZlbnRUeXBlLCBoYW5kbGVyKSA9PiB7XG5cdFx0aWYgKHJlZi5jdXJyZW50KSB7XG5cdFx0XHRyZWYuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlcilcblx0XHR9XG5cdH0sIFtdKVxuXG5cdGNvbnN0IHVuc3Vic2NyaWJlID0gdXNlQ2FsbGJhY2soKGV2ZW50VHlwZSwgaGFuZGxlcikgPT4ge1xuXHRcdGlmIChyZWYuY3VycmVudCkge1xuXHRcdFx0cmVmLmN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIpXG5cdFx0fVxuXHR9LCBbXSlcblxuXHRjb25zdCBjbGVhbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRpZiAocmVmLmN1cnJlbnQpIHtcblx0XHRcdHJlZi5jdXJyZW50LmNsZWFudXAoKVxuXHRcdH1cblx0fSwgW10pXG5cblx0cmV0dXJuIFtyZWYsIHsgc3RhcnQsIHN0b3AsIGFib3J0LCBzdWJzY3JpYmUsIHVuc3Vic2NyaWJlLCBjbGVhbiB9XVxufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VWb2NhbFxuXG4vLyBUT0RPOiBSZXR1cm4gdGhlIGluc3RhbmNlLCBub3QgdGhlIHJlZlxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuXG5jb25zdCBJY29uID0gKHsgY29sb3IsIGFjdGl2ZUNvbG9yLCBpc0FjdGl2ZSB9KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PHN2Z1xuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJfX2ljb24tcm9vdF9fXCJcblx0XHRcdHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuXHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdGhlaWdodD1cIjEwMCVcIlxuXHRcdFx0dmlld0JveD1cIjAgMCAyNCAyNFwiXG5cdFx0PlxuXHRcdFx0PGc+XG5cdFx0XHRcdDxwYXRoXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJfX2ljb24tcGF0aF9fXCJcblx0XHRcdFx0XHRmaWxsPXtjb2xvcn1cblx0XHRcdFx0XHRkPVwiTTEyIDE0YzEuNjYgMCAyLjk5LTEuMzQgMi45OS0zTDE1IDVjMC0xLjY2LTEuMzQtMy0zLTNTOSAzLjM0IDkgNXY2YzAgMS42NiAxLjM0IDMgMyAzem01LjMtM2MwIDMtMi41NCA1LjEtNS4zIDUuMVM2LjcgMTQgNi43IDExSDVjMCAzLjQxIDIuNzIgNi4yMyA2IDYuNzJWMjFoMnYtMy4yOGMzLjI4LS40OCA2LTMuMyA2LTYuNzJoLTEuN3pcIlxuXHRcdFx0XHQvPlxuXHRcdFx0XHR7aXNBY3RpdmUgJiYgPGNpcmNsZSBkYXRhLXRlc3RpZD1cIl9faWNvbi1hY3RpdmVfX1wiIGZpbGw9e2FjdGl2ZUNvbG9yfSBjeD1cIjE2XCIgY3k9XCI0XCIgcj1cIjRcIiAvPn1cblx0XHRcdDwvZz5cblx0XHQ8L3N2Zz5cblx0KVxufVxuXG5JY29uLnByb3BUeXBlcyA9IHtcblx0Y29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG5cdGFjdGl2ZUNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRpc0FjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG59XG5cbkljb24uZGVmYXVsdFByb3BzID0ge1xuXHRjb2xvcjogJ2JsYWNrJyxcblx0YWN0aXZlQ29sb3I6ICdyZWQnLFxuXHRpc0FjdGl2ZTogZmFsc2UsXG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb25cbiIsImltcG9ydCBSZWFjdCwgeyBjbG9uZUVsZW1lbnQsIGlzVmFsaWRFbGVtZW50LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5cbmltcG9ydCBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIgZnJvbSAnLi4vY29yZS9TcGVlY2hSZWNvZ25pdGlvbldyYXBwZXInXG5cbmltcG9ydCBpc0Z1bmMgZnJvbSAnLi4vdXRpbHMvaXNGdW5jJ1xuXG5pbXBvcnQgdXNlVm9jYWwgZnJvbSAnLi4vaG9va3MvdXNlVm9jYWwnXG5pbXBvcnQgdXNlVGltZW91dCBmcm9tICcuLi9ob29rcy91c2VUaW1lb3V0J1xuXG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24nXG5cbmNvbnN0IFZvY2FsID0gKHtcblx0Y2hpbGRyZW4sXG5cdGxhbmcsXG5cdGdyYW1tYXJzLFxuXHR0aW1lb3V0LFxuXHRhcmlhTGFiZWwsXG5cdHN0eWxlLFxuXHRjbGFzc05hbWUsXG5cdG91dGxpbmVTdHlsZSxcblx0b25TdGFydCxcblx0b25FbmQsXG5cdG9uU3BlZWNoU3RhcnQsXG5cdG9uU3BlZWNoRW5kLFxuXHRvblJlc3VsdCxcblx0b25FcnJvcixcblx0b25Ob01hdGNoLFxuXHRfX3JzSW5zdGFuY2UsXG59KSA9PiB7XG5cdGNvbnN0IGJ1dHRvblJlZiA9IHVzZVJlZihudWxsKVxuXHRjb25zdCBbaXNMaXN0ZW5pbmcsIHNldElzTGlzdGVuaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG5cdGNvbnN0IFssIHsgc3RhcnQsIHN0b3AsIHN1YnNjcmliZSwgdW5zdWJzY3JpYmUgfV0gPSB1c2VWb2NhbChsYW5nLCBncmFtbWFycywgX19yc0luc3RhbmNlKVxuXG5cdGNvbnN0IF9vbkVuZCA9IChlKSA9PiB7XG5cdFx0c3RvcFRpbWVyKClcblx0XHRzdG9wUmVjb2duaXRpb24oKVxuXG5cdFx0dW5zdWJzY3JpYmUoJ3N0YXJ0JywgX29uU3RhcnQpXG5cdFx0dW5zdWJzY3JpYmUoJ2VuZCcsIF9vbkVuZClcblx0XHR1bnN1YnNjcmliZSgnc3BlZWNoc3RhcnQnLCBfb25TcGVlY2hTdGFydClcblx0XHR1bnN1YnNjcmliZSgnc3BlZWNoZW5kJywgX29uU3BlZWNoRW5kKVxuXHRcdHVuc3Vic2NyaWJlKCdyZXN1bHQnLCBfb25SZXN1bHQpXG5cdFx0dW5zdWJzY3JpYmUoJ2Vycm9yJywgX29uRXJyb3IpXG5cdFx0dW5zdWJzY3JpYmUoJ25vbWF0Y2gnLCBfb25Ob01hdGNoKVxuXG5cdFx0ISFvbkVuZCAmJiBvbkVuZChlKVxuXHR9XG5cblx0Y29uc3QgW3N0YXJ0VGltZXIsIHN0b3BUaW1lcl0gPSB1c2VUaW1lb3V0KF9vbkVuZCwgdGltZW91dClcblxuXHRjb25zdCBzdGFydFJlY29nbml0aW9uID0gKCkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRzZXRJc0xpc3RlbmluZyh0cnVlKVxuXG5cdFx0XHRzdWJzY3JpYmUoJ3N0YXJ0JywgX29uU3RhcnQpXG5cdFx0XHRzdWJzY3JpYmUoJ2VuZCcsIF9vbkVuZClcblx0XHRcdHN1YnNjcmliZSgnc3BlZWNoc3RhcnQnLCBfb25TcGVlY2hTdGFydClcblx0XHRcdHN1YnNjcmliZSgnc3BlZWNoZW5kJywgX29uU3BlZWNoRW5kKVxuXHRcdFx0c3Vic2NyaWJlKCdyZXN1bHQnLCBfb25SZXN1bHQpXG5cdFx0XHRzdWJzY3JpYmUoJ2Vycm9yJywgX29uRXJyb3IpXG5cdFx0XHRzdWJzY3JpYmUoJ25vbWF0Y2gnLCBfb25Ob01hdGNoKVxuXG5cdFx0XHRzdGFydCgpXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdF9vbkVycm9yKGVycm9yKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHN0b3BSZWNvZ25pdGlvbiA9ICgpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0c2V0SXNMaXN0ZW5pbmcoZmFsc2UpXG5cblx0XHRcdHN0b3AoKVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHQhIW9uRXJyb3IgJiYgb25FcnJvcihlcnJvcilcblx0XHR9XG5cdH1cblxuXHRjb25zdCBfb25DbGljayA9ICgpID0+IHtcblx0XHRzdGFydFJlY29nbml0aW9uKClcblx0fVxuXG5cdGNvbnN0IF9vbkZvY3VzID0gKCkgPT4ge1xuXHRcdGlmICghY2xhc3NOYW1lICYmIG91dGxpbmVTdHlsZSkge1xuXHRcdFx0YnV0dG9uUmVmLmN1cnJlbnQuc3R5bGUub3V0bGluZSA9IG91dGxpbmVTdHlsZVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IF9vbkJsdXIgPSAoKSA9PiB7XG5cdFx0aWYgKCFjbGFzc05hbWUgJiYgb3V0bGluZVN0eWxlKSB7XG5cdFx0XHRidXR0b25SZWYuY3VycmVudC5zdHlsZS5vdXRsaW5lID0gJ25vbmUnXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgX29uU3RhcnQgPSAoZSkgPT4ge1xuXHRcdHN0YXJ0VGltZXIoKVxuXG5cdFx0ISFvblN0YXJ0ICYmIG9uU3RhcnQoZSlcblx0fVxuXG5cdGNvbnN0IF9vblNwZWVjaFN0YXJ0ID0gKGUpID0+IHtcblx0XHRzdG9wVGltZXIoKVxuXG5cdFx0ISFvblNwZWVjaFN0YXJ0ICYmIG9uU3BlZWNoU3RhcnQoZSlcblx0fVxuXG5cdGNvbnN0IF9vblNwZWVjaEVuZCA9IChlKSA9PiB7XG5cdFx0c3RhcnRUaW1lcigpXG5cblx0XHQhIW9uU3BlZWNoRW5kICYmIG9uU3BlZWNoRW5kKGUpXG5cdH1cblxuXHRjb25zdCBfb25SZXN1bHQgPSAocmVzdWx0LCBldmVudCkgPT4ge1xuXHRcdHN0b3BUaW1lcigpXG5cdFx0c3RvcFJlY29nbml0aW9uKClcblxuXHRcdCEhb25SZXN1bHQgJiYgb25SZXN1bHQocmVzdWx0LCBldmVudClcblx0fVxuXG5cdGNvbnN0IF9vbkVycm9yID0gKGVycm9yKSA9PiB7XG5cdFx0c3RvcFJlY29nbml0aW9uKClcblxuXHRcdCEhb25FcnJvciAmJiBvbkVycm9yKGVycm9yKVxuXHR9XG5cblx0Y29uc3QgX29uTm9NYXRjaCA9IChlKSA9PiB7XG5cdFx0c3RvcFRpbWVyKClcblx0XHRzdG9wUmVjb2duaXRpb24oKVxuXG5cdFx0ISFvbk5vTWF0Y2ggJiYgb25Ob01hdGNoKGUpXG5cdH1cblxuXHRjb25zdCBfcmVuZGVyRGVmYXVsdCA9ICgpID0+IChcblx0XHQ8YnV0dG9uXG5cdFx0XHRkYXRhLXRlc3RpZD1cIl9fdm9jYWwtcm9vdF9fXCJcblx0XHRcdHJlZj17YnV0dG9uUmVmfVxuXHRcdFx0cm9sZT1cImJ1dHRvblwiXG5cdFx0XHRhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG5cdFx0XHRzdHlsZT17XG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHRcdD8gbnVsbFxuXHRcdFx0XHRcdDoge1xuXHRcdFx0XHRcdFx0XHR3aWR0aDogMjQsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogMjQsXG5cdFx0XHRcdFx0XHRcdGJhY2tncm91bmQ6ICdub25lJyxcblx0XHRcdFx0XHRcdFx0Ym9yZGVyOiAnbm9uZScsXG5cdFx0XHRcdFx0XHRcdHBhZGRpbmc6IDAsXG5cdFx0XHRcdFx0XHRcdGN1cnNvcjogIWlzTGlzdGVuaW5nID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnLFxuXHRcdFx0XHRcdFx0XHQuLi5zdHlsZSxcblx0XHRcdFx0XHQgIH1cblx0XHRcdH1cblx0XHRcdGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuXHRcdFx0b25Gb2N1cz17X29uRm9jdXN9XG5cdFx0XHRvbkJsdXI9e19vbkJsdXJ9XG5cdFx0XHRvbkNsaWNrPXtfb25DbGlja31cblx0XHQ+XG5cdFx0XHQ8SWNvbiBpc0FjdGl2ZT17aXNMaXN0ZW5pbmd9IGljb25Db2xvcj1cIiNhYWFcIiAvPlxuXHRcdDwvYnV0dG9uPlxuXHQpXG5cblx0Y29uc3QgX3JlbmRlckNoaWxkcmVuID0gKGNoaWxkcmVuKSA9PiB7XG5cdFx0aWYgKFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5pc1N1cHBvcnRlZCkge1xuXHRcdFx0aWYgKGlzRnVuYyhjaGlsZHJlbikpIHtcblx0XHRcdFx0cmV0dXJuIGNoaWxkcmVuKHN0YXJ0UmVjb2duaXRpb24sIHN0b3BSZWNvZ25pdGlvbilcblx0XHRcdH0gZWxzZSBpZiAoaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG5cdFx0XHRcdHJldHVybiBjbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcblx0XHRcdFx0XHQuLi4oIWlzTGlzdGVuaW5nICYmIHsgb25DbGljazogX29uQ2xpY2sgfSksXG5cdFx0XHRcdH0pXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gX3JlbmRlckRlZmF1bHQoKVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0cmV0dXJuIF9yZW5kZXJDaGlsZHJlbihjaGlsZHJlbilcbn1cblxuVm9jYWwucHJvcFR5cGVzID0ge1xuXHQvKiogRGVmaW5lcyB0aGUgbGFuZ3VhZ2UgdW5kZXJzdG9vZCBieSB0aGUgcmVjb2duaXRpb24gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TcGVlY2hSZWNvZ25pdGlvbi9sYW5nKSAqL1xuXHRsYW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHQvKiogRGVmaW5lcyB0aGUgZ3JhbW1hcnMgdW5kZXJzdG9vZCBieSB0aGUgcmVjb2duaXRpb24gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TcGVlY2hSZWNvZ25pdGlvbi9ncmFtbWFycykgKi9cblx0Z3JhbW1hcnM6IFByb3BUeXBlcy5vYmplY3QsXG5cdC8qKiBEZWZpbmVzIHRoZSB0aW1lIGluIG1zIHRvIHdhaXQgYmVmb3JlIGRpc2NhcmRpbmcgdGhlIHJlY29nbml0aW9uICovXG5cdHRpbWVvdXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdC8qKiBEZWZpbmVzIHRoZSBhMTF5IGxhYmVsIGZvciB0aGUgZGVmYXVsdCBidXR0b24gKi9cblx0YXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHQvKiogRGVmaW5lcyB0aGUgc3R5bGVzIG9mIHRoZSBkZWZhdWx0IGVsZW1lbnQgaWYgY2xhc3NOYW1lIGlzIG5vdCBzcGVjaWZpZWQgKi9cblx0c3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG5cdC8qKiBEZWZpbmVzIHRoZSBjbGFzcyBvZiB0aGUgZGVmYXVsdCBlbGVtZW50ICovXG5cdGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblx0LyoqIERlZmluZXMgdGhlIGRlZmF1bHQgc3R5bGUgb2YgdGhlIGZvY3VzIG91dGxpbmUuIGlmIG51bGwgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHVzZWQgKi9cblx0b3V0bGluZVN0eWxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiB0aGUgcmVjb2duaXRpb24gc3RhcnRzICovXG5cdG9uU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiB0aGUgcmVjb2duaXRpb24gZW5kcyAqL1xuXHRvbkVuZDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSBzcGVlY2ggc3RhcnRzICovXG5cdG9uU3BlZWNoU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiB0aGUgc3BlZWNoIGVuZHMgKi9cblx0b25TcGVlY2hFbmQ6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiBhIHJlc3VsdCBpcyByZXR1cm5lZCBmcm9tIHRlIHJlY29nbml0aW9uICovXG5cdG9uUmVzdWx0OiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gYW4gZXJyb3Igb2NjdXJzICovXG5cdG9uRXJyb3I6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiBubyByZXN1bHQgY2FuIGJlIHJlY29nbml6ZWQgKi9cblx0b25Ob01hdGNoOiBQcm9wVHlwZXMuZnVuYyxcbn1cblxuVm9jYWwuZGVmYXVsdFByb3BzID0ge1xuXHRsYW5nOiAnZW4tVVMnLFxuXHRncmFtbWFyczogbnVsbCxcblx0dGltZW91dDogMzAwMCxcblx0YXJpYUxhYmVsOiAnc3RhcnQgcmVjb2duaXRpb24nLFxuXHRzdHlsZTogbnVsbCxcblx0Y2xhc3NOYW1lOiBudWxsLFxuXHRvdXRsaW5lU3R5bGU6ICcycHggc29saWQnLFxuXHRvblN0YXJ0OiBudWxsLFxuXHRvbkVuZDogbnVsbCxcblx0b25TcGVlY2hTdGFydDogbnVsbCxcblx0b25TcGVlY2hFbmQ6IG51bGwsXG5cdG9uUmVzdWx0OiBudWxsLFxuXHRvbkVycm9yOiBudWxsLFxuXHRvbk5vTWF0Y2g6IG51bGwsXG59XG5cbmV4cG9ydCBkZWZhdWx0IFZvY2FsXG4iLCJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcblxuY29uc3QgdXNlVGltZW91dCA9IChoYW5kbGVyLCB0aW1lb3V0ID0gMCkgPT4ge1xuXHRjb25zdCByZWYgPSB1c2VSZWYoLTEpXG5cblx0Y29uc3Qgc3RvcCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRjbGVhclRpbWVvdXQocmVmLmN1cnJlbnQpXG5cdFx0cmVmLmN1cnJlbnQgPSAtMVxuXHR9LCBbXSlcblxuXHRjb25zdCBzdGFydCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzdG9wKClcblx0XHRyZWYuY3VycmVudCA9IHNldFRpbWVvdXQoaGFuZGxlciwgdGltZW91dClcblx0fSwgW2hhbmRsZXIsIHRpbWVvdXQsIHN0b3BdKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiBzdG9wLCBbc3RvcF0pXG5cblx0cmV0dXJuIFtzdGFydCwgc3RvcF1cbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlVGltZW91dFxuXG4vLyBUT0RPOiBSZXR1cm4gYSBwcm9taXNlXG4iLCJpbXBvcnQgVm9jYWwgZnJvbSAnLi9jb21wb25lbnRzL1ZvY2FsJ1xuaW1wb3J0IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlciBmcm9tICcuL2NvcmUvU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyJ1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZVZvY2FsIH0gZnJvbSAnLi9ob29rcy91c2VWb2NhbCdcbmV4cG9ydCBjb25zdCBpc1N1cHBvcnRlZCA9IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5pc1N1cHBvcnRlZFxuXG5leHBvcnQgZGVmYXVsdCBWb2NhbFxuIl0sIm5hbWVzIjpbImUiLCJyIiwidCIsIm4iLCJhIiwiaSIsIm8iLCJ1IiwiYyIsInZhbHVlIiwiZG9uZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsInRoaXMiLCJhcmd1bWVudHMiLCJhcHBseSIsIkFycmF5IiwiaXNBcnJheSIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiT2JqZWN0IiwibmV4dCIsInB1c2giLCJsZW5ndGgiLCJyZXR1cm4iLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiVHlwZUVycm9yIiwicmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIndyYXAiLCJwcmV2IiwiYWJydXB0IiwibmF2aWdhdG9yIiwicGVybWlzc2lvbnMiLCJET01FeGNlcHRpb24iLCJxdWVyeSIsInNlbnQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidGFyZ2V0Iiwic3RhdGUiLCJhZGRFdmVudExpc3RlbmVyIiwidDAiLCJjYXRjaCIsInN0b3AiLCJzIiwibWVkaWFEZXZpY2VzIiwidDEiLCJnZXRVc2VyTWVkaWEiLCJ0MiIsInQzIiwiYWxsIiwidDQiLCJTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIiLCJvcHRpb25zIiwiU3BlZWNoUmVjb2duaXRpb24iLCJfcmVzb2x2ZVNwZWVjaFJlY29nbml0aW9uIiwiX2luc3RhbmNlIiwiX2xpc3RlbmVycyIsImVudHJpZXMiLCJkZWZhdWx0T3B0aW9ucyIsImZvckVhY2giLCJrZXkiLCJfcmVzb2x2ZVNwZWVjaEdyYW1tYXJMaXN0IiwiX3RoaXMiLCJfIiwiRXJyb3IiLCJnZXRVc2VyTWVkaWFTdHJlYW0iLCJhdWRpbyIsInN0YXJ0IiwiZXJyb3JIYW5kbGVyIiwiZXJyb3IiLCJhYm9ydCIsImV2ZW50VHlwZSIsImNhbGxiYWNrIiwiX2luY2x1ZGVzRXZlbnRUeXBlIiwiaGFuZGxlciIsImV2ZW50IiwiYWRkaXRpb25hbEFyZ3MiLCJldmVudFR5cGVzIiwiUkVTVUxUIiwicmVzdWx0cyIsInRyYW5zY3JpcHQiLCJfdGhpczIiLCJrZXlzIiwiX3RoaXMzIiwidmFsdWVzIiwiZmluZCIsInR5cGUiLCJ3aW5kb3ciLCJ3ZWJraXRTcGVlY2hSZWNvZ25pdGlvbiIsIm1velNwZWVjaFJlY29nbml0aW9uIiwibXNTcGVlY2hSZWNvZ25pdGlvbiIsIlNwZWVjaEdyYW1tYXJMaXN0Iiwid2Via2l0U3BlZWNoR3JhbW1hckxpc3QiLCJtb3pTcGVlY2hHcmFtbWFyTGlzdCIsIm1zU3BlZWNoR3JhbW1hckxpc3QiLCJncmFtbWFycyIsImxhbmciLCJjb250aW51b3VzIiwiaW50ZXJpbVJlc3VsdHMiLCJtYXhBbHRlcm5hdGl2ZXMiLCJzZXJ2aWNlVVJJIiwiQVVESU9fRU5EIiwiQVVESU9fU1RBUlQiLCJFTkQiLCJFUlJPUiIsIk5PX01BVENIIiwiU09VTkRfRU5EIiwiU09VTkRfU1RBUlQiLCJTUEVFQ0hfRU5EIiwiU1BFRUNIX1NUQVJUIiwiU1RBUlQiLCJ1c2VWb2NhbCIsIl9fcnNJbnN0YW5jZSIsInJlZiIsInVzZVJlZiIsInVzZUVmZmVjdCIsImlzU3VwcG9ydGVkIiwiY3VycmVudCIsImNsZWFudXAiLCJ1c2VDYWxsYmFjayIsInN1YnNjcmliZSIsInVuc3Vic2NyaWJlIiwiY2xlYW4iLCJJY29uIiwiY29sb3IiLCJhY3RpdmVDb2xvciIsImlzQWN0aXZlIiwiUmVhY3QiLCJ4bWxucyIsIndpZHRoIiwiaGVpZ2h0Iiwidmlld0JveCIsImZpbGwiLCJkIiwiY3giLCJjeSIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsImJvb2wiLCJkZWZhdWx0UHJvcHMiLCJWb2NhbCIsImNoaWxkcmVuIiwidGltZW91dCIsImFyaWFMYWJlbCIsInN0eWxlIiwiY2xhc3NOYW1lIiwib3V0bGluZVN0eWxlIiwib25TdGFydCIsIm9uRW5kIiwib25TcGVlY2hTdGFydCIsIm9uU3BlZWNoRW5kIiwib25SZXN1bHQiLCJvbkVycm9yIiwib25Ob01hdGNoIiwiYnV0dG9uUmVmIiwidXNlU3RhdGUiLCJpc0xpc3RlbmluZyIsInNldElzTGlzdGVuaW5nIiwiX29uRW5kIiwic3RvcFRpbWVyIiwic3RvcFJlY29nbml0aW9uIiwiX29uU3RhcnQiLCJfb25TcGVlY2hTdGFydCIsIl9vblNwZWVjaEVuZCIsIl9vblJlc3VsdCIsIl9vbkVycm9yIiwiX29uTm9NYXRjaCIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJ1c2VUaW1lb3V0Iiwic3RhcnRUaW1lciIsInN0YXJ0UmVjb2duaXRpb24iLCJfb25DbGljayIsIl9vbkZvY3VzIiwib3V0bGluZSIsIl9vbkJsdXIiLCJyZXN1bHQiLCJpc1ZhbGlkRWxlbWVudCIsImNsb25lRWxlbWVudCIsIm9uQ2xpY2siLCJyb2xlIiwiYmFja2dyb3VuZCIsImJvcmRlciIsInBhZGRpbmciLCJjdXJzb3IiLCJvbkZvY3VzIiwib25CbHVyIiwiaWNvbkNvbG9yIiwiX3JlbmRlckNoaWxkcmVuIiwib2JqZWN0IiwibnVtYmVyIiwiZnVuYyJdLCJtYXBwaW5ncyI6InlwRUFBQSxTQUFTQSxFQUFFQSxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxHQUFHLElBQUksSUFBSUMs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 | ||
"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t=require("react"),n=e(t),r=e(require("prop-types"));function o(e,t,n,r,o,i,a){try{var c=e[i](a),u=c.value}catch(e){return void n(e)}c.done?t(u):Promise.resolve(u).then(r,o)}function i(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)}}function a(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),e}function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(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 s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?u(Object(n),!0).forEach((function(t){c(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,o=!1,i=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return n}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return f(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return f(e,t)}(e,t)||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 f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function p(e,t,n,r,o,i,a){try{var c=e[i](a),u=c.value}catch(e){return void n(e)}c.done?t(u):Promise.resolve(u).then(r,o)}function v(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){p(i,r,o,a,c,"next",e)}function c(e){p(i,r,o,a,c,"throw",e)}a(void 0)}))}}function h(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return n}}(e,t)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e,t)||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 d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var m=function(){var e=v(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=v(regeneratorRuntime.mark((function e(n,r){var o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.permissions){e.next=4;break}r(new DOMException("Permissions not supported","NOT_FOUND_ERR")),e.next=16;break;case 4:return e.prev=4,e.next=7,navigator.permissions.query({name:t});case 7:o=e.sent,i=function e(t){o.removeEventListener("change",e),b(t.target.state,n,r)},o.addEventListener("change",i),b(o.state,n,r),e.next=16;break;case 13:e.prev=13,e.t0=e.catch(4),r(e.t0);case 16:case"end":return e.stop()}}),e,null,[[4,13]])})));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)}}(),b=function(e,t,n){switch(e){case"denied":n(new DOMException("Permission denied","NOT_ALLOWED_ERR"));break;default:t(e)}},y=function(){var e=v(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=v(regeneratorRuntime.mark((function e(r,o){var i,a,c;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.mediaDevices){e.next=4;break}o(new DOMException("MediaDevices not supported","NOT_FOUND_ERR")),e.next=24;break;case 4:return e.prev=4,e.t0=Promise,e.next=8,m(t);case 8:return e.t1=e.sent,e.next=11,navigator.mediaDevices.getUserMedia(n);case 11:return e.t2=e.sent,e.t3=[e.t1,e.t2],e.next=15,e.t0.all.call(e.t0,e.t3);case 15:i=e.sent,a=h(i,2),c=a[1],r(c),e.next=24;break;case 21:e.prev=21,e.t4=e.catch(4),o(e.t4);case 24:case"end":return e.stop()}}),e,null,[[4,21]])})));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)}}(),g=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),c(this,"_instance",null),c(this,"_listeners",null);var r=e._resolveSpeechRecognition()||{};this._instance=new r,this._listeners={},Object.entries(s(s({},e.defaultOptions),t||{})).forEach((function(t){var r=l(t,2),o=r[0],i=r[1];"grammars"!==o||i||(i=new(e._resolveSpeechGrammarList()||{}));n._instance[o]=i}))}var t,n;return a(e,null,[{key:"isSupported",get:function(){return!!e._resolveSpeechRecognition()},set:function(e){throw new Error("You cannot set isSupported directly.")}}]),a(e,[{key:"start",value:(t=regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.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,y("microphone",{audio:!0});case 4:if(e.sent){e.next=7;break}throw new 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]])})),n=function(){var e=this,n=arguments;return new Promise((function(r,i){var a=t.apply(e,n);function c(e){o(a,r,i,c,u,"next",e)}function u(e){o(a,r,i,c,u,"throw",e)}c(void 0)}))},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,n){var r=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),n&&n.apply(r,[].concat(i,[o]))};this._instance.addEventListener(t,o),this._listeners[t]=o}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 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}();c(g,"defaultOptions",{grammars:null,lang:"en-US",continuous:!1,interimResults:!1,maxAlternatives:1,serviceURI:null}),c(g,"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 w=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"en-US",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o=t.useRef(null);t.useEffect((function(){if(g.isSupported)return o.current=r||new g({lang:e,grammars:n}),function(){o.current.abort(),o.current.cleanup()}}),[e,n,r]);var i=t.useCallback((function(){o.current&&o.current.start()}),[]),a=t.useCallback((function(){o.current&&o.current.stop()}),[]),c=t.useCallback((function(){o.current&&o.current.abort()}),[]),u=t.useCallback((function(e,t){o.current&&o.current.addEventListener(e,t)}),[]),s=t.useCallback((function(e,t){o.current&&o.current.removeEventListener(e,t)}),[]),l=t.useCallback((function(){o.current&&o.current.cleanup()}),[]);return[o,{start:i,stop:a,abort:c,subscribe:u,unsubscribe:s,clean:l}]},S=function(e){var t=e.color,r=e.activeColor,o=e.isActive;return n.createElement("svg",{"data-testid":"__icon-root__",xmlns:"http://www.w3.org/2000/svg",width:"100%",height:"100%",viewBox:"0 0 24 24"},n.createElement("g",null,n.createElement("path",{"data-testid":"__icon-path__",fill:t,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"}),o&&n.createElement("circle",{"data-testid":"__icon-active__",fill:r,cx:"16",cy:"4",r:"4"})))};S.propTypes={color:r.string,activeColor:r.string,isActive:r.bool},S.defaultProps={color:"black",activeColor:"red",isActive:!1};var _=function(e){var r=e.children,o=e.lang,i=e.grammars,a=e.timeout,c=e.ariaLabel,u=e.style,f=e.className,p=e.outlineStyle,v=e.onStart,h=e.onEnd,d=e.onSpeechStart,m=e.onSpeechEnd,b=e.onResult,y=e.onError,_=e.onNoMatch,E=e.__rsInstance,O=t.useRef(null),k=l(t.useState(!1),2),R=k[0],x=k[1],j=l(w(o,i,E),2)[1],T=j.start,A=j.stop,L=j.subscribe,P=j.unsubscribe,D=function e(t){U(),I(),P("start",q),P("end",e),P("speechstart",F),P("speechend",V),P("result",B),P("error",Y),P("nomatch",$),h&&h(t)},C=l(function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=t.useRef(-1),o=t.useCallback((function(){clearTimeout(r.current),r.current=-1}),[]),i=t.useCallback((function(){o(),r.current=setTimeout(e,n)}),[e,n,o]);return t.useEffect((function(){return o}),[o]),[i,o]}(D,a),2),N=C[0],U=C[1],M=function(){try{x(!0),L("start",q),L("end",D),L("speechstart",F),L("speechend",V),L("result",B),L("error",Y),L("nomatch",$),T()}catch(e){Y(e)}},I=function(){try{x(!1),A()}catch(e){y&&y(e)}},G=function(){M()},z=function(){!f&&p&&(O.current.style.outline=p)},H=function(){!f&&p&&(O.current.style.outline="none")},q=function(e){N(),v&&v(e)},F=function(e){U(),d&&d(e)},V=function(e){N(),m&&m(e)},B=function(e,t){U(),I(),b&&b(e,t)},Y=function(e){I(),y&&y(e)},$=function(e){U(),I(),_&&_(e)};return function(e){return g.isSupported?"function"==typeof e?e(M,I,R):t.isValidElement(e)?t.cloneElement(e,s({},!R&&{onClick:G})):n.createElement("button",{"data-testid":"__vocal-root__",ref:O,role:"button","aria-label":c,style:f?null:s({width:24,height:24,background:"none",border:"none",padding:0,cursor:R?"default":"pointer"},u),className:f,onFocus:z,onBlur:H,onClick:G},n.createElement(S,{isActive:R,iconColor:"#aaa"})):null}(r)};_.propTypes={lang:r.string,grammars:r.object,timeout:r.number,ariaLabel:r.string,style:r.object,className:r.string,outlineStyle:r.string,onStart:r.func,onEnd:r.func,onSpeechStart:r.func,onSpeechEnd:r.func,onResult:r.func,onError:r.func,onNoMatch:r.func},_.defaultProps={lang:"en-US",grammars:null,timeout:3e3,ariaLabel:"start recognition",style:null,className:null,outlineStyle:"2px solid",onStart:null,onEnd:null,onSpeechStart:null,onSpeechEnd:null,onResult:null,onError:null,onNoMatch:null};var E=g.isSupported;exports.default=_,exports.isSupported=E,exports.useVocal=w; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9AdW50ZW1wcy91c2VyLXBlcm1pc3Npb25zLXV0aWxzL2Rpc3QvaW5kZXguZXMuanMiLCIuLi9zcmMvY29yZS9TcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuanMiLCIuLi9zcmMvdXRpbHMvaXNGdW5jLmpzIiwiLi4vc3JjL2hvb2tzL3VzZVZvY2FsLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvSWNvbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1ZvY2FsLmpzIiwiLi4vc3JjL2hvb2tzL3VzZVRpbWVvdXQuanMiLCIuLi9zcmMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gZShlLHIsdCxuLGEsaSxvKXt0cnl7dmFyIHU9ZVtpXShvKSxjPXUudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdChlKX11LmRvbmU/cihjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIHIocil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGEsaSl7dmFyIG89ci5hcHBseSh0LG4pO2Z1bmN0aW9uIHUocil7ZShvLGEsaSx1LGMsXCJuZXh0XCIscil9ZnVuY3Rpb24gYyhyKXtlKG8sYSxpLHUsYyxcInRocm93XCIscil9dSh2b2lkIDApfSkpfX1mdW5jdGlvbiB0KGUscil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHIpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBTeW1ib2x8fCEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKSkpcmV0dXJuO3ZhciB0PVtdLG49ITAsYT0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHU9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXUubmV4dCgpKS5kb25lKSYmKHQucHVzaChvLnZhbHVlKSwhcnx8dC5sZW5ndGghPT1yKTtuPSEwKTt9Y2F0Y2goZSl7YT0hMCxpPWV9ZmluYWxseXt0cnl7bnx8bnVsbD09dS5yZXR1cm58fHUucmV0dXJuKCl9ZmluYWxseXtpZihhKXRocm93IGl9fXJldHVybiB0fShlLHIpfHxmdW5jdGlvbihlLHIpe2lmKCFlKXJldHVybjtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbihlLHIpO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKTtpZihcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20oZSk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBuKGUscil9KGUscil8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBuKGUscil7KG51bGw9PXJ8fHI+ZS5sZW5ndGgpJiYocj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAsbj1uZXcgQXJyYXkocik7dDxyO3QrKyluW3RdPWVbdF07cmV0dXJuIG59dmFyIGE9ZnVuY3Rpb24oKXt2YXIgZT1yKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKHQpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KFwicmV0dXJuXCIsbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZT1yKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKHIsbil7dmFyIGEsbztyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKG5hdmlnYXRvci5wZXJtaXNzaW9ucyl7ZS5uZXh0PTQ7YnJlYWt9bihuZXcgRE9NRXhjZXB0aW9uKFwiUGVybWlzc2lvbnMgbm90IHN1cHBvcnRlZFwiLFwiTk9UX0ZPVU5EX0VSUlwiKSksZS5uZXh0PTE2O2JyZWFrO2Nhc2UgNDpyZXR1cm4gZS5wcmV2PTQsZS5uZXh0PTcsbmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHtuYW1lOnR9KTtjYXNlIDc6YT1lLnNlbnQsbz1mdW5jdGlvbiBlKHQpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLGUpLGkodC50YXJnZXQuc3RhdGUscixuKX0sYS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsbyksaShhLnN0YXRlLHIsbiksZS5uZXh0PTE2O2JyZWFrO2Nhc2UgMTM6ZS5wcmV2PTEzLGUudDA9ZS5jYXRjaCg0KSxuKGUudDApO2Nhc2UgMTY6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzQsMTNdXSl9KSkpO3JldHVybiBmdW5jdGlvbihyLHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKTtjYXNlIDE6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKTtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxpPWZ1bmN0aW9uKGUscix0KXtzd2l0Y2goZSl7Y2FzZVwiZGVuaWVkXCI6dChuZXcgRE9NRXhjZXB0aW9uKFwiUGVybWlzc2lvbiBkZW5pZWRcIixcIk5PVF9BTExPV0VEX0VSUlwiKSk7YnJlYWs7ZGVmYXVsdDpyKGUpfX0sbz1mdW5jdGlvbigpe3ZhciBlPXIocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUobixpKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdChcInJldHVyblwiLG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGU9cihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZShyLG8pe3ZhciB1LGMscztyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKG5hdmlnYXRvci5tZWRpYURldmljZXMpe2UubmV4dD00O2JyZWFrfW8obmV3IERPTUV4Y2VwdGlvbihcIk1lZGlhRGV2aWNlcyBub3Qgc3VwcG9ydGVkXCIsXCJOT1RfRk9VTkRfRVJSXCIpKSxlLm5leHQ9MjQ7YnJlYWs7Y2FzZSA0OnJldHVybiBlLnByZXY9NCxlLnQwPVByb21pc2UsZS5uZXh0PTgsYShuKTtjYXNlIDg6cmV0dXJuIGUudDE9ZS5zZW50LGUubmV4dD0xMSxuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYShpKTtjYXNlIDExOnJldHVybiBlLnQyPWUuc2VudCxlLnQzPVtlLnQxLGUudDJdLGUubmV4dD0xNSxlLnQwLmFsbC5jYWxsKGUudDAsZS50Myk7Y2FzZSAxNTp1PWUuc2VudCxjPXQodSwyKSxzPWNbMV0scihzKSxlLm5leHQ9MjQ7YnJlYWs7Y2FzZSAyMTplLnByZXY9MjEsZS50ND1lLmNhdGNoKDQpLG8oZS50NCk7Y2FzZSAyNDpjYXNlXCJlbmRcIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbNCwyMV1dKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHIsdCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkpO2Nhc2UgMTpjYXNlXCJlbmRcIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbihyLHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7ZXhwb3J0e2EgYXMgZ2V0UGVybWlzc2lvbixvIGFzIGdldFVzZXJNZWRpYVN0cmVhbX07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1WlhNdWFuTWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTluWlhSUVpYSnRhWE56YVc5dUxtcHpJaXdpTGk0dmMzSmpMMmRsZEZWelpYSk5aV1JwWVZOMGNtVmhiUzVxY3lKZExDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ1lTQndjbTl0YVhObElISmxjMjlzZG1Wa0lIZG9aVzRnZEdobElIQmxjbTFwYzNOcGIyNGdhWE1nWjNKaGJuUmxaQ0JpZVNCMGFHVWdkWE5sY2x4dUlDb2dRSEJoY21GdElIQmxjbTFwYzNOcGIyNU9ZVzFsSUNBZ0lDQWdJQ0FnSUNBZ1RtRnRaU0J2WmlCMGFHVWdjR1Z5YldsemMybHZiaTRnUUhObFpTQm9kSFJ3Y3pvdkwzY3pZeTVuYVhSb2RXSXVhVzh2Y0dWeWJXbHpjMmx2Ym5NdkkyVnVkVzFrWldZdGNHVnliV2x6YzJsdmJtNWhiV1ZjYmlBcUlFQnlaWFIxY201eklIdFFjbTl0YVhObGZWeHVJQ292WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JoYzNsdVl5QW9jR1Z5YldsemMybHZiazVoYldVcElEMCtJSHRjYmx4MGNtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtHRnplVzVqSUNoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNibHgwWEhScFppQW9JVzVoZG1sbllYUnZjaTV3WlhKdGFYTnphVzl1Y3lrZ2UxeHVYSFJjZEZ4MGNtVnFaV04wS0c1bGR5QkVUMDFGZUdObGNIUnBiMjRvSjFCbGNtMXBjM05wYjI1eklHNXZkQ0J6ZFhCd2IzSjBaV1FuTENBblRrOVVYMFpQVlU1RVgwVlNVaWNwS1Z4dVhIUmNkSDBnWld4elpTQjdYRzVjZEZ4MFhIUjBjbmtnZTF4dVhIUmNkRngwWEhSamIyNXpkQ0J3WlhKdGFYTnphVzl1VTNSaGRIVnpJRDBnWVhkaGFYUWdibUYyYVdkaGRHOXlMbkJsY20xcGMzTnBiMjV6TG5GMVpYSjVLSHNnYm1GdFpUb2djR1Z5YldsemMybHZiazVoYldVZ2ZTbGNibHgwWEhSY2RGeDBZMjl1YzNRZ2IyNURhR0Z1WjJVZ1BTQW9aWFpsYm5RcElEMCtJSHRjYmx4MFhIUmNkRngwWEhSd1pYSnRhWE56YVc5dVUzUmhkSFZ6TG5KbGJXOTJaVVYyWlc1MFRHbHpkR1Z1WlhJb0oyTm9ZVzVuWlNjc0lHOXVRMmhoYm1kbEtWeHVYSFJjZEZ4MFhIUmNkSEpsYzI5c2RtVlBjbEpsYW1WamRFSmhjMlZrVDI1VGRHRjBaU2hsZG1WdWRDNTBZWEpuWlhRdWMzUmhkR1VzSUhKbGMyOXNkbVVzSUhKbGFtVmpkQ2xjYmx4MFhIUmNkRngwZlZ4dVhIUmNkRngwWEhSd1pYSnRhWE56YVc5dVUzUmhkSFZ6TG1Ga1pFVjJaVzUwVEdsemRHVnVaWElvSjJOb1lXNW5aU2NzSUc5dVEyaGhibWRsS1Z4dVhIUmNkRngwWEhSeVpYTnZiSFpsVDNKU1pXcGxZM1JDWVhObFpFOXVVM1JoZEdVb2NHVnliV2x6YzJsdmJsTjBZWFIxY3k1emRHRjBaU3dnY21WemIyeDJaU3dnY21WcVpXTjBLVnh1WEhSY2RGeDBmU0JqWVhSamFDQW9aWEp5YjNJcElIdGNibHgwWEhSY2RGeDBjbVZxWldOMEtHVnljbTl5S1Z4dVhIUmNkRngwZlZ4dVhIUmNkSDFjYmx4MGZTbGNibjFjYmx4dVkyOXVjM1FnY21WemIyeDJaVTl5VW1WcVpXTjBRbUZ6WldSUGJsTjBZWFJsSUQwZ0tITjBZWFJsTENCeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNibHgwYzNkcGRHTm9JQ2h6ZEdGMFpTa2dlMXh1WEhSY2RHTmhjMlVnSjJSbGJtbGxaQ2M2WEc1Y2RGeDBYSFJ5WldwbFkzUW9ibVYzSUVSUFRVVjRZMlZ3ZEdsdmJpZ25VR1Z5YldsemMybHZiaUJrWlc1cFpXUW5MQ0FuVGs5VVgwRk1URTlYUlVSZlJWSlNKeWtwWEc1Y2RGeDBYSFJpY21WaGExeHVYSFJjZEdSbFptRjFiSFE2WEc1Y2RGeDBYSFJ5WlhOdmJIWmxLSE4wWVhSbEtWeHVYSFI5WEc1OVhHNGlMQ0pwYlhCdmNuUWdaMlYwVUdWeWJXbHpjMmx2YmlCbWNtOXRJQ2N1TDJkbGRGQmxjbTFwYzNOcGIyNG5YRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUJoSUhCeWIyMXBjMlVnY21WemIyeDJaV1FnZDJobGJpQjBhR1VnY0dWeWJXbHpjMmx2YmlCcGN5Qm5jbUZ1ZEdWa0lHSjVJSFJvWlNCMWMyVnlJR0Z1WkNCMGFHVWdjM1J5WldGdElHbHpJSEpsZEhKcFpYWmxaRnh1SUNvZ1FIQmhjbUZ0SUhCbGNtMXBjM05wYjI1T1lXMWxJQ0FnSUNBZ0lDQWdJQ0FnVG1GdFpTQnZaaUIwYUdVZ2NHVnliV2x6YzJsdmJpNGdRSE5sWlNCb2RIUndjem92TDNjell5NW5hWFJvZFdJdWFXOHZjR1Z5YldsemMybHZibk12STJWdWRXMWtaV1l0Y0dWeWJXbHpjMmx2Ym01aGJXVmNiaUFxSUVCd1lYSmhiU0J0WldScFlWTjBjbVZoYlVOdmJuTjBjbUZwYm5SeklDQWdJRU52Ym5OMGNtRnBiblJ6SUc5aWFtVmpkQzRnUUhObFpTQm9kSFJ3Y3pvdkwyUmxkbVZzYjNCbGNpNXRiM3BwYkd4aExtOXlaeTlsYmkxVlV5OWtiMk56TDFkbFlpOUJVRWt2VFdWa2FXRlRkSEpsWVcxRGIyNXpkSEpoYVc1MGMxeHVJQ29nUUhKbGRIVnlibk1nZTFCeWIyMXBjMlY5WEc0Z0tpOWNibVY0Y0c5eWRDQmtaV1poZFd4MElHRnplVzVqSUNod1pYSnRhWE56YVc5dVRtRnRaU3dnYldWa2FXRlRkSEpsWVcxRGIyNXpkSEpoYVc1MGN5a2dQVDRnZTF4dVhIUnlaWFIxY200Z2JtVjNJRkJ5YjIxcGMyVW9ZWE41Ym1NZ0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh1WEhSY2RHbG1JQ2doYm1GMmFXZGhkRzl5TG0xbFpHbGhSR1YyYVdObGN5a2dlMXh1WEhSY2RGeDBjbVZxWldOMEtHNWxkeUJFVDAxRmVHTmxjSFJwYjI0b0owMWxaR2xoUkdWMmFXTmxjeUJ1YjNRZ2MzVndjRzl5ZEdWa0p5d2dKMDVQVkY5R1QxVk9SRjlGVWxJbktTbGNibHgwWEhSOUlHVnNjMlVnZTF4dVhIUmNkRngwZEhKNUlIdGNibHgwWEhSY2RGeDBZMjl1YzNRZ1d5d2djM1J5WldGdFhTQTlJR0YzWVdsMElGQnliMjFwYzJVdVlXeHNLRnRjYmx4MFhIUmNkRngwWEhSaGQyRnBkQ0JuWlhSUVpYSnRhWE56YVc5dUtIQmxjbTFwYzNOcGIyNU9ZVzFsS1N4Y2JseDBYSFJjZEZ4MFhIUmhkMkZwZENCdVlYWnBaMkYwYjNJdWJXVmthV0ZFWlhacFkyVnpMbWRsZEZWelpYSk5aV1JwWVNodFpXUnBZVk4wY21WaGJVTnZibk4wY21GcGJuUnpLU3hjYmx4MFhIUmNkRngwWFNsY2JseDBYSFJjZEZ4MGNtVnpiMngyWlNoemRISmxZVzBwWEc1Y2RGeDBYSFI5SUdOaGRHTm9JQ2hsY25KdmNpa2dlMXh1WEhSY2RGeDBYSFJ5WldwbFkzUW9aWEp5YjNJcFhHNWNkRngwWEhSOVhHNWNkRngwZlZ4dVhIUjlLVnh1ZlZ4dUlsMHNJbTVoYldWeklqcGJJbkJsY20xcGMzTnBiMjVPWVcxbElpd2lVSEp2YldselpTSXNJbkpsYzI5c2RtVWlMQ0p5WldwbFkzUWlMQ0p1WVhacFoyRjBiM0lpTENKd1pYSnRhWE56YVc5dWN5SXNJa1JQVFVWNFkyVndkR2x2YmlJc0luRjFaWEo1SWl3aWJtRnRaU0lzSW5CbGNtMXBjM05wYjI1VGRHRjBkWE1pTENKdmJrTm9ZVzVuWlNJc0ltVjJaVzUwSWl3aWNtVnRiM1psUlhabGJuUk1hWE4wWlc1bGNpSXNJbkpsYzI5c2RtVlBjbEpsYW1WamRFSmhjMlZrVDI1VGRHRjBaU0lzSW5SaGNtZGxkQ0lzSW5OMFlYUmxJaXdpWVdSa1JYWmxiblJNYVhOMFpXNWxjaUlzSW0xbFpHbGhVM1J5WldGdFEyOXVjM1J5WVdsdWRITWlMQ0p0WldScFlVUmxkbWxqWlhNaUxDSm5aWFJRWlhKdGFYTnphVzl1SWl3aVoyVjBWWE5sY2sxbFpHbGhJaXdpWVd4c0lpd2ljM1J5WldGdElsMHNJbTFoY0hCcGJtZHpJam9pYlhkRFFVdEJMR3RFUVVGbExGZEJRVTlCTERSSFFVTmtMRWxCUVVsRExHOUVRVUZSTEZkQlFVOURMRVZCUVZORExEaEdRVU0zUWtNc1ZVRkJWVU1zTkVKQlEyUkdMRVZCUVU4c1NVRkJTVWNzWVVGQllTdzBRa0ZCTmtJc2EwVkJSM0pDUml4VlFVRlZReXhaUVVGWlJTeE5RVUZOTEVOQlFVVkRMRXRCUVUxU0xGZEJRVGRFVXl4VFFVTkJReXhGUVVGWExGTkJRVmhCTEVWQlFWbERMRWRCUTJwQ1JpeEZRVUZwUWtjc2IwSkJRVzlDTEZOQlFWVkdMRWRCUXk5RFJ5eEZRVUUwUWtZc1JVRkJUVWNzVDBGQlQwTXNUVUZCVDJJc1JVRkJVME1zU1VGRk1VUk5MRVZCUVdsQ1R5eHBRa0ZCYVVJc1UwRkJWVTRzUjBGRE5VTkhMRVZCUVRSQ1NpeEZRVUZwUWswc1RVRkJUMklzUlVGQlUwTXNjVVJCUlRkRVFTdzJUa0ZOUlZVc1JVRkJPRUlzVTBGQlEwVXNSVUZCVDJJc1JVRkJVME1zVlVGRE5VTlpMRTlCUTBZc1UwRkRTbG9zUlVGQlR5eEpRVUZKUnl4aFFVRmhMRzlDUVVGeFFpeHJRMEZITjBOS0xFVkJRVkZoTEcxRVEzWkNTU3hYUVVGUFppeEZRVUZuUW1sQ0xEUkhRVU01UWl4SlFVRkphRUlzYjBSQlFWRXNWMEZCVDBNc1JVRkJVME1zWjBkQlF6ZENReXhWUVVGVll5dzJRa0ZEWkdZc1JVRkJUeXhKUVVGSlJ5eGhRVUZoTERaQ1FVRTRRaXc0UkVGSE5VSk1MR2xDUVVOc1FtdENMRVZCUVdOdVFpeDFRMEZEWkVrc1ZVRkJWV01zWVVGQllVVXNZVUZCWVVnc09FUkJSbFpKTERoRFFVRjRRa01zVDBGSlZIQkNMRVZCUVZGdlFpeHhSRUZGVW01Q0luMD1cbiIsImltcG9ydCB7IGdldFVzZXJNZWRpYVN0cmVhbSB9IGZyb20gJ0B1bnRlbXBzL3VzZXItcGVybWlzc2lvbnMtdXRpbHMnXG5cbmNsYXNzIFNwZWVjaFJlY29nbml0aW9uV3JhcHBlciB7XG5cdHN0YXRpYyBkZWZhdWx0T3B0aW9ucyA9IHtcblx0XHRncmFtbWFyczogbnVsbCxcblx0XHRsYW5nOiAnZW4tVVMnLFxuXHRcdGNvbnRpbnVvdXM6IGZhbHNlLFxuXHRcdGludGVyaW1SZXN1bHRzOiBmYWxzZSxcblx0XHRtYXhBbHRlcm5hdGl2ZXM6IDEsXG5cdFx0c2VydmljZVVSSTogbnVsbCxcblx0fVxuXG5cdHN0YXRpYyBldmVudFR5cGVzID0ge1xuXHRcdEFVRElPX0VORDogJ2F1ZGlvZW5kJyxcblx0XHRBVURJT19TVEFSVDogJ2F1ZGlvc3RhcnQnLFxuXHRcdEVORDogJ2VuZCcsXG5cdFx0RVJST1I6ICdlcnJvcicsXG5cdFx0Tk9fTUFUQ0g6ICdub21hdGNoJyxcblx0XHRSRVNVTFQ6ICdyZXN1bHQnLFxuXHRcdFNPVU5EX0VORDogJ3NvdW5kZW5kJyxcblx0XHRTT1VORF9TVEFSVDogJ3NvdW5kc3RhcnQnLFxuXHRcdFNQRUVDSF9FTkQ6ICdzcGVlY2hlbmQnLFxuXHRcdFNQRUVDSF9TVEFSVDogJ3NwZWVjaHN0YXJ0Jyxcblx0XHRTVEFSVDogJ3N0YXJ0Jyxcblx0fVxuXG5cdHN0YXRpYyBnZXQgaXNTdXBwb3J0ZWQoKSB7XG5cdFx0cmV0dXJuICEhU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLl9yZXNvbHZlU3BlZWNoUmVjb2duaXRpb24oKVxuXHR9XG5cblx0c3RhdGljIHNldCBpc1N1cHBvcnRlZChfKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IHNldCBpc1N1cHBvcnRlZCBkaXJlY3RseS4nKVxuXHR9XG5cblx0X2luc3RhbmNlID0gbnVsbFxuXHRfbGlzdGVuZXJzID0gbnVsbFxuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRjb25zdCBTcGVlY2hSZWNvZ25pdGlvbiA9IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5fcmVzb2x2ZVNwZWVjaFJlY29nbml0aW9uKCkgfHwge31cblx0XHR0aGlzLl9pbnN0YW5jZSA9IG5ldyBTcGVlY2hSZWNvZ25pdGlvbigpXG5cdFx0dGhpcy5fbGlzdGVuZXJzID0ge31cblxuXHRcdE9iamVjdC5lbnRyaWVzKHtcblx0XHRcdC4uLlNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5kZWZhdWx0T3B0aW9ucyxcblx0XHRcdC4uLihvcHRpb25zIHx8IHt9KSxcblx0XHR9KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcblx0XHRcdGlmIChrZXkgPT09ICdncmFtbWFycycgJiYgIXZhbHVlKSB7XG5cdFx0XHRcdGNvbnN0IFNwZWVjaEdyYW1tYXJMaXN0ID0gU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLl9yZXNvbHZlU3BlZWNoR3JhbW1hckxpc3QoKSB8fCB7fVxuXHRcdFx0XHR2YWx1ZSA9IG5ldyBTcGVlY2hHcmFtbWFyTGlzdCgpXG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9pbnN0YW5jZVtrZXldID0gdmFsdWVcblx0XHR9KVxuXHR9XG5cblx0Z2V0IGluc3RhbmNlKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbnN0YW5jZVxuXHR9XG5cblx0c2V0IGluc3RhbmNlKF8pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW5ub3Qgc2V0IGluc3RhbmNlIGRpcmVjdGx5LicpXG5cdH1cblxuXHRhc3luYyBzdGFydCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3Qgc3RyZWFtID0gYXdhaXQgZ2V0VXNlck1lZGlhU3RyZWFtKCdtaWNyb3Bob25lJywgeyBhdWRpbzogdHJ1ZSB9KVxuXHRcdFx0XHRpZiAoIXN0cmVhbSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHRoZSBzdHJlYW0gZnJvbSBtZWRpYSBkZXZpY2UnKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX2luc3RhbmNlLnN0YXJ0KClcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuX2xpc3RlbmVycy5lcnJvclxuXHRcdFx0XHRpZiAoISFlcnJvckhhbmRsZXIpIHtcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIoZXJyb3IpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0c3RvcCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dGhpcy5faW5zdGFuY2Uuc3RvcCgpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdGFib3J0KCkge1xuXHRcdGlmICghIXRoaXMuX2luc3RhbmNlKSB7XG5cdFx0XHR0aGlzLl9pbnN0YW5jZS5hYm9ydCgpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdGFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBjYWxsYmFjaykge1xuXHRcdGlmICghIXRoaXMuX2luc3RhbmNlICYmIHRoaXMuX2luY2x1ZGVzRXZlbnRUeXBlKGV2ZW50VHlwZSkpIHtcblx0XHRcdGlmICghIXRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdKSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUpXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0bGV0IGFkZGl0aW9uYWxBcmdzID0gW11cblx0XHRcdFx0aWYgKGV2ZW50VHlwZSA9PT0gU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmV2ZW50VHlwZXMuUkVTVUxUKSB7XG5cdFx0XHRcdFx0aWYgKCEhZXZlbnQucmVzdWx0cyAmJiBldmVudC5yZXN1bHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGFkZGl0aW9uYWxBcmdzLnB1c2goZXZlbnQucmVzdWx0c1swXVswXS50cmFuc2NyaXB0KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCEhY2FsbGJhY2sgJiYgY2FsbGJhY2suYXBwbHkodGhpcywgWy4uLmFkZGl0aW9uYWxBcmdzLCBldmVudF0pXG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9pbnN0YW5jZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlcilcblxuXHRcdFx0dGhpcy5fbGlzdGVuZXJzW2V2ZW50VHlwZV0gPSBoYW5kbGVyXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdXG5cdFx0dGhpcy5faW5zdGFuY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIpXG5cblx0XHRkZWxldGUgdGhpcy5fbGlzdGVuZXJzW2V2ZW50VHlwZV1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRjbGVhbnVwKCkge1xuXHRcdHRoaXMuc3RvcCgpXG5cblx0XHRPYmplY3Qua2V5cyh0aGlzLl9saXN0ZW5lcnMpLmZvckVhY2goKGtleSkgPT4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGtleSkpXG5cdFx0dGhpcy5faW5zdGFuY2UgPSBudWxsXG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0X2luY2x1ZGVzRXZlbnRUeXBlKGV2ZW50VHlwZSkge1xuXHRcdHJldHVybiAhIU9iamVjdC52YWx1ZXMoU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmV2ZW50VHlwZXMpLmZpbmQoKHR5cGUpID0+IHR5cGUgPT09IGV2ZW50VHlwZSlcblx0fVxuXG5cdHN0YXRpYyBfcmVzb2x2ZVNwZWVjaFJlY29nbml0aW9uKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHR3aW5kb3cuU3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdHdpbmRvdy53ZWJraXRTcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0d2luZG93Lm1velNwZWVjaFJlY29nbml0aW9uIHx8XG5cdFx0XHR3aW5kb3cubXNTcGVlY2hSZWNvZ25pdGlvblxuXHRcdClcblx0fVxuXG5cdHN0YXRpYyBfcmVzb2x2ZVNwZWVjaEdyYW1tYXJMaXN0KCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHR3aW5kb3cuU3BlZWNoR3JhbW1hckxpc3QgfHxcblx0XHRcdHdpbmRvdy53ZWJraXRTcGVlY2hHcmFtbWFyTGlzdCB8fFxuXHRcdFx0d2luZG93Lm1velNwZWVjaEdyYW1tYXJMaXN0IHx8XG5cdFx0XHR3aW5kb3cubXNTcGVlY2hHcmFtbWFyTGlzdFxuXHRcdClcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXJcbiIsImV4cG9ydCBkZWZhdWx0ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbidcbiIsImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyIGZyb20gJy4uL2NvcmUvU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyJ1xuXG5jb25zdCB1c2VWb2NhbCA9IChsYW5nID0gJ2VuLVVTJywgZ3JhbW1hcnMgPSBudWxsLCBfX3JzSW5zdGFuY2UgPSBudWxsKSA9PiB7XG5cdGNvbnN0IHJlZiA9IHVzZVJlZihudWxsKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5pc1N1cHBvcnRlZCkge1xuXHRcdFx0cmVmLmN1cnJlbnQgPSBfX3JzSW5zdGFuY2UgfHwgbmV3IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlcih7IGxhbmcsIGdyYW1tYXJzIH0pXG5cdFx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0XHRyZWYuY3VycmVudC5hYm9ydCgpXG5cdFx0XHRcdHJlZi5jdXJyZW50LmNsZWFudXAoKVxuXHRcdFx0fVxuXHRcdH1cblx0fSwgW2xhbmcsIGdyYW1tYXJzLCBfX3JzSW5zdGFuY2VdKVxuXG5cdGNvbnN0IHN0YXJ0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdGlmIChyZWYuY3VycmVudCkge1xuXHRcdFx0cmVmLmN1cnJlbnQuc3RhcnQoKVxuXHRcdH1cblx0fSwgW10pXG5cblx0Y29uc3Qgc3RvcCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRpZiAocmVmLmN1cnJlbnQpIHtcblx0XHRcdHJlZi5jdXJyZW50LnN0b3AoKVxuXHRcdH1cblx0fSwgW10pXG5cblx0Y29uc3QgYWJvcnQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0aWYgKHJlZi5jdXJyZW50KSB7XG5cdFx0XHRyZWYuY3VycmVudC5hYm9ydCgpXG5cdFx0fVxuXHR9LCBbXSlcblxuXHRjb25zdCBzdWJzY3JpYmUgPSB1c2VDYWxsYmFjaygoZXZlbnRUeXBlLCBoYW5kbGVyKSA9PiB7XG5cdFx0aWYgKHJlZi5jdXJyZW50KSB7XG5cdFx0XHRyZWYuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlcilcblx0XHR9XG5cdH0sIFtdKVxuXG5cdGNvbnN0IHVuc3Vic2NyaWJlID0gdXNlQ2FsbGJhY2soKGV2ZW50VHlwZSwgaGFuZGxlcikgPT4ge1xuXHRcdGlmIChyZWYuY3VycmVudCkge1xuXHRcdFx0cmVmLmN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIpXG5cdFx0fVxuXHR9LCBbXSlcblxuXHRjb25zdCBjbGVhbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRpZiAocmVmLmN1cnJlbnQpIHtcblx0XHRcdHJlZi5jdXJyZW50LmNsZWFudXAoKVxuXHRcdH1cblx0fSwgW10pXG5cblx0cmV0dXJuIFtyZWYsIHsgc3RhcnQsIHN0b3AsIGFib3J0LCBzdWJzY3JpYmUsIHVuc3Vic2NyaWJlLCBjbGVhbiB9XVxufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VWb2NhbFxuXG4vLyBUT0RPOiBSZXR1cm4gdGhlIGluc3RhbmNlLCBub3QgdGhlIHJlZlxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuXG5jb25zdCBJY29uID0gKHsgY29sb3IsIGFjdGl2ZUNvbG9yLCBpc0FjdGl2ZSB9KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PHN2Z1xuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJfX2ljb24tcm9vdF9fXCJcblx0XHRcdHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuXHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdGhlaWdodD1cIjEwMCVcIlxuXHRcdFx0dmlld0JveD1cIjAgMCAyNCAyNFwiXG5cdFx0PlxuXHRcdFx0PGc+XG5cdFx0XHRcdDxwYXRoXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJfX2ljb24tcGF0aF9fXCJcblx0XHRcdFx0XHRmaWxsPXtjb2xvcn1cblx0XHRcdFx0XHRkPVwiTTEyIDE0YzEuNjYgMCAyLjk5LTEuMzQgMi45OS0zTDE1IDVjMC0xLjY2LTEuMzQtMy0zLTNTOSAzLjM0IDkgNXY2YzAgMS42NiAxLjM0IDMgMyAzem01LjMtM2MwIDMtMi41NCA1LjEtNS4zIDUuMVM2LjcgMTQgNi43IDExSDVjMCAzLjQxIDIuNzIgNi4yMyA2IDYuNzJWMjFoMnYtMy4yOGMzLjI4LS40OCA2LTMuMyA2LTYuNzJoLTEuN3pcIlxuXHRcdFx0XHQvPlxuXHRcdFx0XHR7aXNBY3RpdmUgJiYgPGNpcmNsZSBkYXRhLXRlc3RpZD1cIl9faWNvbi1hY3RpdmVfX1wiIGZpbGw9e2FjdGl2ZUNvbG9yfSBjeD1cIjE2XCIgY3k9XCI0XCIgcj1cIjRcIiAvPn1cblx0XHRcdDwvZz5cblx0XHQ8L3N2Zz5cblx0KVxufVxuXG5JY29uLnByb3BUeXBlcyA9IHtcblx0Y29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG5cdGFjdGl2ZUNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRpc0FjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG59XG5cbkljb24uZGVmYXVsdFByb3BzID0ge1xuXHRjb2xvcjogJ2JsYWNrJyxcblx0YWN0aXZlQ29sb3I6ICdyZWQnLFxuXHRpc0FjdGl2ZTogZmFsc2UsXG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb25cbiIsImltcG9ydCBSZWFjdCwgeyBjbG9uZUVsZW1lbnQsIGlzVmFsaWRFbGVtZW50LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5cbmltcG9ydCBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIgZnJvbSAnLi4vY29yZS9TcGVlY2hSZWNvZ25pdGlvbldyYXBwZXInXG5cbmltcG9ydCBpc0Z1bmMgZnJvbSAnLi4vdXRpbHMvaXNGdW5jJ1xuXG5pbXBvcnQgdXNlVm9jYWwgZnJvbSAnLi4vaG9va3MvdXNlVm9jYWwnXG5pbXBvcnQgdXNlVGltZW91dCBmcm9tICcuLi9ob29rcy91c2VUaW1lb3V0J1xuXG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24nXG5cbmNvbnN0IFZvY2FsID0gKHtcblx0Y2hpbGRyZW4sXG5cdGxhbmcsXG5cdGdyYW1tYXJzLFxuXHR0aW1lb3V0LFxuXHRhcmlhTGFiZWwsXG5cdHN0eWxlLFxuXHRjbGFzc05hbWUsXG5cdG91dGxpbmVTdHlsZSxcblx0b25TdGFydCxcblx0b25FbmQsXG5cdG9uU3BlZWNoU3RhcnQsXG5cdG9uU3BlZWNoRW5kLFxuXHRvblJlc3VsdCxcblx0b25FcnJvcixcblx0b25Ob01hdGNoLFxuXHRfX3JzSW5zdGFuY2UsXG59KSA9PiB7XG5cdGNvbnN0IGJ1dHRvblJlZiA9IHVzZVJlZihudWxsKVxuXHRjb25zdCBbaXNMaXN0ZW5pbmcsIHNldElzTGlzdGVuaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG5cdGNvbnN0IFssIHsgc3RhcnQsIHN0b3AsIHN1YnNjcmliZSwgdW5zdWJzY3JpYmUgfV0gPSB1c2VWb2NhbChsYW5nLCBncmFtbWFycywgX19yc0luc3RhbmNlKVxuXG5cdGNvbnN0IF9vbkVuZCA9IChlKSA9PiB7XG5cdFx0c3RvcFRpbWVyKClcblx0XHRzdG9wUmVjb2duaXRpb24oKVxuXG5cdFx0dW5zdWJzY3JpYmUoJ3N0YXJ0JywgX29uU3RhcnQpXG5cdFx0dW5zdWJzY3JpYmUoJ2VuZCcsIF9vbkVuZClcblx0XHR1bnN1YnNjcmliZSgnc3BlZWNoc3RhcnQnLCBfb25TcGVlY2hTdGFydClcblx0XHR1bnN1YnNjcmliZSgnc3BlZWNoZW5kJywgX29uU3BlZWNoRW5kKVxuXHRcdHVuc3Vic2NyaWJlKCdyZXN1bHQnLCBfb25SZXN1bHQpXG5cdFx0dW5zdWJzY3JpYmUoJ2Vycm9yJywgX29uRXJyb3IpXG5cdFx0dW5zdWJzY3JpYmUoJ25vbWF0Y2gnLCBfb25Ob01hdGNoKVxuXG5cdFx0ISFvbkVuZCAmJiBvbkVuZChlKVxuXHR9XG5cblx0Y29uc3QgW3N0YXJ0VGltZXIsIHN0b3BUaW1lcl0gPSB1c2VUaW1lb3V0KF9vbkVuZCwgdGltZW91dClcblxuXHRjb25zdCBzdGFydFJlY29nbml0aW9uID0gKCkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRzZXRJc0xpc3RlbmluZyh0cnVlKVxuXG5cdFx0XHRzdWJzY3JpYmUoJ3N0YXJ0JywgX29uU3RhcnQpXG5cdFx0XHRzdWJzY3JpYmUoJ2VuZCcsIF9vbkVuZClcblx0XHRcdHN1YnNjcmliZSgnc3BlZWNoc3RhcnQnLCBfb25TcGVlY2hTdGFydClcblx0XHRcdHN1YnNjcmliZSgnc3BlZWNoZW5kJywgX29uU3BlZWNoRW5kKVxuXHRcdFx0c3Vic2NyaWJlKCdyZXN1bHQnLCBfb25SZXN1bHQpXG5cdFx0XHRzdWJzY3JpYmUoJ2Vycm9yJywgX29uRXJyb3IpXG5cdFx0XHRzdWJzY3JpYmUoJ25vbWF0Y2gnLCBfb25Ob01hdGNoKVxuXG5cdFx0XHRzdGFydCgpXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdF9vbkVycm9yKGVycm9yKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHN0b3BSZWNvZ25pdGlvbiA9ICgpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0c2V0SXNMaXN0ZW5pbmcoZmFsc2UpXG5cblx0XHRcdHN0b3AoKVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHQhIW9uRXJyb3IgJiYgb25FcnJvcihlcnJvcilcblx0XHR9XG5cdH1cblxuXHRjb25zdCBfb25DbGljayA9ICgpID0+IHtcblx0XHRzdGFydFJlY29nbml0aW9uKClcblx0fVxuXG5cdGNvbnN0IF9vbkZvY3VzID0gKCkgPT4ge1xuXHRcdGlmICghY2xhc3NOYW1lICYmIG91dGxpbmVTdHlsZSkge1xuXHRcdFx0YnV0dG9uUmVmLmN1cnJlbnQuc3R5bGUub3V0bGluZSA9IG91dGxpbmVTdHlsZVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IF9vbkJsdXIgPSAoKSA9PiB7XG5cdFx0aWYgKCFjbGFzc05hbWUgJiYgb3V0bGluZVN0eWxlKSB7XG5cdFx0XHRidXR0b25SZWYuY3VycmVudC5zdHlsZS5vdXRsaW5lID0gJ25vbmUnXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgX29uU3RhcnQgPSAoZSkgPT4ge1xuXHRcdHN0YXJ0VGltZXIoKVxuXG5cdFx0ISFvblN0YXJ0ICYmIG9uU3RhcnQoZSlcblx0fVxuXG5cdGNvbnN0IF9vblNwZWVjaFN0YXJ0ID0gKGUpID0+IHtcblx0XHRzdG9wVGltZXIoKVxuXG5cdFx0ISFvblNwZWVjaFN0YXJ0ICYmIG9uU3BlZWNoU3RhcnQoZSlcblx0fVxuXG5cdGNvbnN0IF9vblNwZWVjaEVuZCA9IChlKSA9PiB7XG5cdFx0c3RhcnRUaW1lcigpXG5cblx0XHQhIW9uU3BlZWNoRW5kICYmIG9uU3BlZWNoRW5kKGUpXG5cdH1cblxuXHRjb25zdCBfb25SZXN1bHQgPSAocmVzdWx0LCBldmVudCkgPT4ge1xuXHRcdHN0b3BUaW1lcigpXG5cdFx0c3RvcFJlY29nbml0aW9uKClcblxuXHRcdCEhb25SZXN1bHQgJiYgb25SZXN1bHQocmVzdWx0LCBldmVudClcblx0fVxuXG5cdGNvbnN0IF9vbkVycm9yID0gKGVycm9yKSA9PiB7XG5cdFx0c3RvcFJlY29nbml0aW9uKClcblxuXHRcdCEhb25FcnJvciAmJiBvbkVycm9yKGVycm9yKVxuXHR9XG5cblx0Y29uc3QgX29uTm9NYXRjaCA9IChlKSA9PiB7XG5cdFx0c3RvcFRpbWVyKClcblx0XHRzdG9wUmVjb2duaXRpb24oKVxuXG5cdFx0ISFvbk5vTWF0Y2ggJiYgb25Ob01hdGNoKGUpXG5cdH1cblxuXHRjb25zdCBfcmVuZGVyRGVmYXVsdCA9ICgpID0+IChcblx0XHQ8YnV0dG9uXG5cdFx0XHRkYXRhLXRlc3RpZD1cIl9fdm9jYWwtcm9vdF9fXCJcblx0XHRcdHJlZj17YnV0dG9uUmVmfVxuXHRcdFx0cm9sZT1cImJ1dHRvblwiXG5cdFx0XHRhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG5cdFx0XHRzdHlsZT17XG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHRcdD8gbnVsbFxuXHRcdFx0XHRcdDoge1xuXHRcdFx0XHRcdFx0XHR3aWR0aDogMjQsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogMjQsXG5cdFx0XHRcdFx0XHRcdGJhY2tncm91bmQ6ICdub25lJyxcblx0XHRcdFx0XHRcdFx0Ym9yZGVyOiAnbm9uZScsXG5cdFx0XHRcdFx0XHRcdHBhZGRpbmc6IDAsXG5cdFx0XHRcdFx0XHRcdGN1cnNvcjogIWlzTGlzdGVuaW5nID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnLFxuXHRcdFx0XHRcdFx0XHQuLi5zdHlsZSxcblx0XHRcdFx0XHQgIH1cblx0XHRcdH1cblx0XHRcdGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuXHRcdFx0b25Gb2N1cz17X29uRm9jdXN9XG5cdFx0XHRvbkJsdXI9e19vbkJsdXJ9XG5cdFx0XHRvbkNsaWNrPXtfb25DbGlja31cblx0XHQ+XG5cdFx0XHQ8SWNvbiBpc0FjdGl2ZT17aXNMaXN0ZW5pbmd9IGljb25Db2xvcj1cIiNhYWFcIiAvPlxuXHRcdDwvYnV0dG9uPlxuXHQpXG5cblx0Y29uc3QgX3JlbmRlckNoaWxkcmVuID0gKGNoaWxkcmVuKSA9PiB7XG5cdFx0aWYgKFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5pc1N1cHBvcnRlZCkge1xuXHRcdFx0aWYgKGlzRnVuYyhjaGlsZHJlbikpIHtcblx0XHRcdFx0cmV0dXJuIGNoaWxkcmVuKHN0YXJ0UmVjb2duaXRpb24sIHN0b3BSZWNvZ25pdGlvbiwgaXNMaXN0ZW5pbmcpXG5cdFx0XHR9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuXHRcdFx0XHRyZXR1cm4gY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG5cdFx0XHRcdFx0Li4uKCFpc0xpc3RlbmluZyAmJiB7IG9uQ2xpY2s6IF9vbkNsaWNrIH0pLFxuXHRcdFx0XHR9KVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIF9yZW5kZXJEZWZhdWx0KClcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXG5cdHJldHVybiBfcmVuZGVyQ2hpbGRyZW4oY2hpbGRyZW4pXG59XG5cblZvY2FsLnByb3BUeXBlcyA9IHtcblx0LyoqIERlZmluZXMgdGhlIGxhbmd1YWdlIHVuZGVyc3Rvb2QgYnkgdGhlIHJlY29nbml0aW9uIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU3BlZWNoUmVjb2duaXRpb24vbGFuZykgKi9cblx0bGFuZzogUHJvcFR5cGVzLnN0cmluZyxcblx0LyoqIERlZmluZXMgdGhlIGdyYW1tYXJzIHVuZGVyc3Rvb2QgYnkgdGhlIHJlY29nbml0aW9uIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU3BlZWNoUmVjb2duaXRpb24vZ3JhbW1hcnMpICovXG5cdGdyYW1tYXJzOiBQcm9wVHlwZXMub2JqZWN0LFxuXHQvKiogRGVmaW5lcyB0aGUgdGltZSBpbiBtcyB0byB3YWl0IGJlZm9yZSBkaXNjYXJkaW5nIHRoZSByZWNvZ25pdGlvbiAqL1xuXHR0aW1lb3V0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHQvKiogRGVmaW5lcyB0aGUgYTExeSBsYWJlbCBmb3IgdGhlIGRlZmF1bHQgYnV0dG9uICovXG5cdGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcblx0LyoqIERlZmluZXMgdGhlIHN0eWxlcyBvZiB0aGUgZGVmYXVsdCBlbGVtZW50IGlmIGNsYXNzTmFtZSBpcyBub3Qgc3BlY2lmaWVkICovXG5cdHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXHQvKiogRGVmaW5lcyB0aGUgY2xhc3Mgb2YgdGhlIGRlZmF1bHQgZWxlbWVudCAqL1xuXHRjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cdC8qKiBEZWZpbmVzIHRoZSBkZWZhdWx0IHN0eWxlIG9mIHRoZSBmb2N1cyBvdXRsaW5lLiBpZiBudWxsIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyB1c2VkICovXG5cdG91dGxpbmVTdHlsZTogUHJvcFR5cGVzLnN0cmluZyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIHJlY29nbml0aW9uIHN0YXJ0cyAqL1xuXHRvblN0YXJ0OiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIHJlY29nbml0aW9uIGVuZHMgKi9cblx0b25FbmQ6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiB0aGUgc3BlZWNoIHN0YXJ0cyAqL1xuXHRvblNwZWVjaFN0YXJ0OiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIHNwZWVjaCBlbmRzICovXG5cdG9uU3BlZWNoRW5kOiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gYSByZXN1bHQgaXMgcmV0dXJuZWQgZnJvbSB0ZSByZWNvZ25pdGlvbiAqL1xuXHRvblJlc3VsdDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIGFuIGVycm9yIG9jY3VycyAqL1xuXHRvbkVycm9yOiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gbm8gcmVzdWx0IGNhbiBiZSByZWNvZ25pemVkICovXG5cdG9uTm9NYXRjaDogUHJvcFR5cGVzLmZ1bmMsXG59XG5cblZvY2FsLmRlZmF1bHRQcm9wcyA9IHtcblx0bGFuZzogJ2VuLVVTJyxcblx0Z3JhbW1hcnM6IG51bGwsXG5cdHRpbWVvdXQ6IDMwMDAsXG5cdGFyaWFMYWJlbDogJ3N0YXJ0IHJlY29nbml0aW9uJyxcblx0c3R5bGU6IG51bGwsXG5cdGNsYXNzTmFtZTogbnVsbCxcblx0b3V0bGluZVN0eWxlOiAnMnB4IHNvbGlkJyxcblx0b25TdGFydDogbnVsbCxcblx0b25FbmQ6IG51bGwsXG5cdG9uU3BlZWNoU3RhcnQ6IG51bGwsXG5cdG9uU3BlZWNoRW5kOiBudWxsLFxuXHRvblJlc3VsdDogbnVsbCxcblx0b25FcnJvcjogbnVsbCxcblx0b25Ob01hdGNoOiBudWxsLFxufVxuXG5leHBvcnQgZGVmYXVsdCBWb2NhbFxuIiwiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5cbmNvbnN0IHVzZVRpbWVvdXQgPSAoaGFuZGxlciwgdGltZW91dCA9IDApID0+IHtcblx0Y29uc3QgcmVmID0gdXNlUmVmKC0xKVxuXG5cdGNvbnN0IHN0b3AgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0Y2xlYXJUaW1lb3V0KHJlZi5jdXJyZW50KVxuXHRcdHJlZi5jdXJyZW50ID0gLTFcblx0fSwgW10pXG5cblx0Y29uc3Qgc3RhcnQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c3RvcCgpXG5cdFx0cmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KGhhbmRsZXIsIHRpbWVvdXQpXG5cdH0sIFtoYW5kbGVyLCB0aW1lb3V0LCBzdG9wXSlcblxuXHR1c2VFZmZlY3QoKCkgPT4gc3RvcCwgW3N0b3BdKVxuXG5cdHJldHVybiBbc3RhcnQsIHN0b3BdXG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZVRpbWVvdXRcblxuLy8gVE9ETzogUmV0dXJuIGEgcHJvbWlzZVxuIiwiaW1wb3J0IFZvY2FsIGZyb20gJy4vY29tcG9uZW50cy9Wb2NhbCdcbmltcG9ydCBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIgZnJvbSAnLi9jb3JlL1NwZWVjaFJlY29nbml0aW9uV3JhcHBlcidcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VWb2NhbCB9IGZyb20gJy4vaG9va3MvdXNlVm9jYWwnXG5leHBvcnQgY29uc3QgaXNTdXBwb3J0ZWQgPSBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuaXNTdXBwb3J0ZWRcblxuZXhwb3J0IGRlZmF1bHQgVm9jYWxcbiJdLCJuYW1lcyI6WyJlIiwiciIsInQiLCJuIiwiYSIsImkiLCJvIiwidSIsImMiLCJ2YWx1ZSIsImRvbmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJ0aGlzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJBcnJheSIsImlzQXJyYXkiLCJTeW1ib2wiLCJpdGVyYXRvciIsIk9iamVjdCIsIm5leHQiLCJwdXNoIiwibGVuZ3RoIiwicmV0dXJuIiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIlR5cGVFcnJvciIsInJlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJ3cmFwIiwicHJldiIsImFicnVwdCIsIm5hdmlnYXRvciIsInBlcm1pc3Npb25zIiwiRE9NRXhjZXB0aW9uIiwicXVlcnkiLCJzZW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInRhcmdldCIsInN0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInQwIiwiY2F0Y2giLCJzdG9wIiwicyIsIm1lZGlhRGV2aWNlcyIsInQxIiwiZ2V0VXNlck1lZGlhIiwidDIiLCJ0MyIsImFsbCIsInQ0IiwiU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyIiwib3B0aW9ucyIsIlNwZWVjaFJlY29nbml0aW9uIiwiX3Jlc29sdmVTcGVlY2hSZWNvZ25pdGlvbiIsIl9pbnN0YW5jZSIsIl9saXN0ZW5lcnMiLCJlbnRyaWVzIiwiZGVmYXVsdE9wdGlvbnMiLCJmb3JFYWNoIiwia2V5IiwiX3Jlc29sdmVTcGVlY2hHcmFtbWFyTGlzdCIsIl90aGlzIiwiXyIsIkVycm9yIiwiZ2V0VXNlck1lZGlhU3RyZWFtIiwiYXVkaW8iLCJzdGFydCIsImVycm9ySGFuZGxlciIsImVycm9yIiwiYWJvcnQiLCJldmVudFR5cGUiLCJjYWxsYmFjayIsIl9pbmNsdWRlc0V2ZW50VHlwZSIsImhhbmRsZXIiLCJldmVudCIsImFkZGl0aW9uYWxBcmdzIiwiZXZlbnRUeXBlcyIsIlJFU1VMVCIsInJlc3VsdHMiLCJ0cmFuc2NyaXB0IiwiX3RoaXMyIiwia2V5cyIsIl90aGlzMyIsInZhbHVlcyIsImZpbmQiLCJ0eXBlIiwid2luZG93Iiwid2Via2l0U3BlZWNoUmVjb2duaXRpb24iLCJtb3pTcGVlY2hSZWNvZ25pdGlvbiIsIm1zU3BlZWNoUmVjb2duaXRpb24iLCJTcGVlY2hHcmFtbWFyTGlzdCIsIndlYmtpdFNwZWVjaEdyYW1tYXJMaXN0IiwibW96U3BlZWNoR3JhbW1hckxpc3QiLCJtc1NwZWVjaEdyYW1tYXJMaXN0IiwiZ3JhbW1hcnMiLCJsYW5nIiwiY29udGludW91cyIsImludGVyaW1SZXN1bHRzIiwibWF4QWx0ZXJuYXRpdmVzIiwic2VydmljZVVSSSIsIkFVRElPX0VORCIsIkFVRElPX1NUQVJUIiwiRU5EIiwiRVJST1IiLCJOT19NQVRDSCIsIlNPVU5EX0VORCIsIlNPVU5EX1NUQVJUIiwiU1BFRUNIX0VORCIsIlNQRUVDSF9TVEFSVCIsIlNUQVJUIiwidXNlVm9jYWwiLCJfX3JzSW5zdGFuY2UiLCJyZWYiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJpc1N1cHBvcnRlZCIsImN1cnJlbnQiLCJjbGVhbnVwIiwidXNlQ2FsbGJhY2siLCJzdWJzY3JpYmUiLCJ1bnN1YnNjcmliZSIsImNsZWFuIiwiSWNvbiIsImNvbG9yIiwiYWN0aXZlQ29sb3IiLCJpc0FjdGl2ZSIsIlJlYWN0IiwieG1sbnMiLCJ3aWR0aCIsImhlaWdodCIsInZpZXdCb3giLCJmaWxsIiwiZCIsImN4IiwiY3kiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzdHJpbmciLCJib29sIiwiZGVmYXVsdFByb3BzIiwiVm9jYWwiLCJjaGlsZHJlbiIsInRpbWVvdXQiLCJhcmlhTGFiZWwiLCJzdHlsZSIsImNsYXNzTmFtZSIsIm91dGxpbmVTdHlsZSIsIm9uU3RhcnQiLCJvbkVuZCIsIm9uU3BlZWNoU3RhcnQiLCJvblNwZWVjaEVuZCIsIm9uUmVzdWx0Iiwib25FcnJvciIsIm9uTm9NYXRjaCIsImJ1dHRvblJlZiIsInVzZVN0YXRlIiwiaXNMaXN0ZW5pbmciLCJzZXRJc0xpc3RlbmluZyIsIl9vbkVuZCIsInN0b3BUaW1lciIsInN0b3BSZWNvZ25pdGlvbiIsIl9vblN0YXJ0IiwiX29uU3BlZWNoU3RhcnQiLCJfb25TcGVlY2hFbmQiLCJfb25SZXN1bHQiLCJfb25FcnJvciIsIl9vbk5vTWF0Y2giLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwidXNlVGltZW91dCIsInN0YXJ0VGltZXIiLCJzdGFydFJlY29nbml0aW9uIiwiX29uQ2xpY2siLCJfb25Gb2N1cyIsIm91dGxpbmUiLCJfb25CbHVyIiwicmVzdWx0IiwiaXNWYWxpZEVsZW1lbnQiLCJjbG9uZUVsZW1lbnQiLCJvbkNsaWNrIiwicm9sZSIsImJhY2tncm91bmQiLCJib3JkZXIiLCJwYWRkaW5nIiwiY3Vyc29yIiwib25Gb2N1cyIsIm9uQmx1ciIsImljb25Db2xvciIsIl9yZW5kZXJDaGlsZHJlbiIsIm9iamVjdCIsIm51bWJlciIsImZ1bmMiXSwibWFwcGluZ3MiOiJ5cEVBQUEsU0FBU0EsRUFBRUEsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsR0FB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 |
@@ -1,2 +0,2 @@ | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["exports","react","prop-types"],t):t((e=e||self)["react-vocal"]={},e.React,e.PropTypes)}(this,(function(e,t,n){"use strict";var r="default"in t?t.default:t;function o(e,t,n,r,o,i,a){try{var c=e[i](a),u=c.value}catch(e){return void n(e)}c.done?t(u):Promise.resolve(u).then(r,o)}function i(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)}}function a(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),e}function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(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 s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?u(Object(n),!0).forEach((function(t){c(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,o=!1,i=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return n}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return f(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return f(e,t)}(e,t)||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 f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function p(e,t,n,r,o,i,a){try{var c=e[i](a),u=c.value}catch(e){return void n(e)}c.done?t(u):Promise.resolve(u).then(r,o)}function h(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){p(i,r,o,a,c,"next",e)}function c(e){p(i,r,o,a,c,"throw",e)}a(void 0)}))}}function v(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return n}}(e,t)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e,t)||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 d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}n=n&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n;var m=function(){var e=h(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=h(regeneratorRuntime.mark((function e(n,r){var o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.permissions){e.next=4;break}r(new DOMException("Permissions not supported","NOT_FOUND_ERR")),e.next=16;break;case 4:return e.prev=4,e.next=7,navigator.permissions.query({name:t});case 7:o=e.sent,i=function e(t){o.removeEventListener("change",e),y(t.target.state,n,r)},o.addEventListener("change",i),y(o.state,n,r),e.next=16;break;case 13:e.prev=13,e.t0=e.catch(4),r(e.t0);case 16:case"end":return e.stop()}}),e,null,[[4,13]])})));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)}}(),y=function(e,t,n){switch(e){case"denied":n(new DOMException("Permission denied","NOT_ALLOWED_ERR"));break;default:t(e)}},b=function(){var e=h(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=h(regeneratorRuntime.mark((function e(r,o){var i,a,c;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.mediaDevices){e.next=4;break}o(new DOMException("MediaDevices not supported","NOT_FOUND_ERR")),e.next=24;break;case 4:return e.prev=4,e.t0=Promise,e.next=8,m(t);case 8:return e.t1=e.sent,e.next=11,navigator.mediaDevices.getUserMedia(n);case 11:return e.t2=e.sent,e.t3=[e.t1,e.t2],e.next=15,e.t0.all.call(e.t0,e.t3);case 15:i=e.sent,a=v(i,2),c=a[1],r(c),e.next=24;break;case 21:e.prev=21,e.t4=e.catch(4),o(e.t4);case 24:case"end":return e.stop()}}),e,null,[[4,21]])})));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)}}(),g=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),c(this,"_instance",null),c(this,"_listeners",null);var r=e._resolveSpeechRecognition()||{};this._instance=new r,this._listeners={},Object.entries(s(s({},e.defaultOptions),t||{})).forEach((function(t){var r=l(t,2),o=r[0],i=r[1];"grammars"!==o||i||(i=new(e._resolveSpeechGrammarList()||{}));n._instance[o]=i}))}var t,n;return a(e,null,[{key:"isSupported",get:function(){return!!e._resolveSpeechRecognition()},set:function(e){throw new Error("You cannot set isSupported directly.")}}]),a(e,[{key:"start",value:(t=regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.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,b("microphone",{audio:!0});case 4:if(e.sent){e.next=7;break}throw new 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]])})),n=function(){var e=this,n=arguments;return new Promise((function(r,i){var a=t.apply(e,n);function c(e){o(a,r,i,c,u,"next",e)}function u(e){o(a,r,i,c,u,"throw",e)}c(void 0)}))},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,n){var r=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),n&&n.apply(r,[].concat(i,[o]))};this._instance.addEventListener(t,o),this._listeners[t]=o}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 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}();c(g,"defaultOptions",{grammars:null,lang:"en-US",continuous:!1,interimResults:!1,maxAlternatives:1,serviceURI:null}),c(g,"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 w=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"en-US",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o=t.useRef(null);t.useEffect((function(){if(g.isSupported)return o.current=r||new g({lang:e,grammars:n}),function(){o.current.abort(),o.current.cleanup()}}),[e,n,r]);var i=t.useCallback((function(){o.current&&o.current.start()}),[]),a=t.useCallback((function(){o.current&&o.current.stop()}),[]),c=t.useCallback((function(){o.current&&o.current.abort()}),[]),u=t.useCallback((function(e,t){o.current&&o.current.addEventListener(e,t)}),[]),s=t.useCallback((function(e,t){o.current&&o.current.removeEventListener(e,t)}),[]),l=t.useCallback((function(){o.current&&o.current.cleanup()}),[]);return[o,{start:i,stop:a,abort:c,subscribe:u,unsubscribe:s,clean:l}]},S=function(e){var t=e.color,n=e.activeColor,o=e.isActive;return r.createElement("svg",{"data-testid":"__icon-root__",xmlns:"http://www.w3.org/2000/svg",width:"100%",height:"100%",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{"data-testid":"__icon-path__",fill:t,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"}),o&&r.createElement("circle",{"data-testid":"__icon-active__",fill:n,cx:"16",cy:"4",r:"4"})))};S.propTypes={color:n.string,activeColor:n.string,isActive:n.bool},S.defaultProps={color:"black",activeColor:"red",isActive:!1};var _=function(e){var n=e.children,o=e.lang,i=e.grammars,a=e.timeout,c=e.ariaLabel,u=e.style,f=e.className,p=e.outlineStyle,h=e.onStart,v=e.onEnd,d=e.onSpeechStart,m=e.onSpeechEnd,y=e.onResult,b=e.onError,_=e.onNoMatch,E=e.__rsInstance,O=t.useRef(null),k=l(t.useState(!1),2),R=k[0],x=k[1],j=l(w(o,i,E),2)[1],T=j.start,P=j.stop,A=j.subscribe,L=j.unsubscribe,D=function e(t){U(),I(),L("start",q),L("end",e),L("speechstart",F),L("speechend",V),L("result",B),L("error",Y),L("nomatch",$),v&&v(t)},C=l(function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=t.useRef(-1),o=t.useCallback((function(){clearTimeout(r.current),r.current=-1}),[]),i=t.useCallback((function(){o(),r.current=setTimeout(e,n)}),[e,n,o]);return t.useEffect((function(){return o}),[o]),[i,o]}(D,a),2),N=C[0],U=C[1],M=function(){try{x(!0),A("start",q),A("end",D),A("speechstart",F),A("speechend",V),A("result",B),A("error",Y),A("nomatch",$),T()}catch(e){Y(e)}},I=function(){try{x(!1),P()}catch(e){b&&b(e)}},G=function(){M()},z=function(){!f&&p&&(O.current.style.outline=p)},H=function(){!f&&p&&(O.current.style.outline="none")},q=function(e){N(),h&&h(e)},F=function(e){U(),d&&d(e)},V=function(e){N(),m&&m(e)},B=function(e,t){U(),I(),y&&y(e,t)},Y=function(e){I(),b&&b(e)},$=function(e){U(),I(),_&&_(e)};return function(e){return g.isSupported?"function"==typeof e?e(M,I):t.isValidElement(e)?t.cloneElement(e,s({},!R&&{onClick:G})):r.createElement("button",{"data-testid":"__vocal-root__",ref:O,role:"button","aria-label":c,style:f?null:s({width:24,height:24,background:"none",border:"none",padding:0,cursor:R?"default":"pointer"},u),className:f,onFocus:z,onBlur:H,onClick:G},r.createElement(S,{isActive:R,iconColor:"#aaa"})):null}(n)};_.propTypes={lang:n.string,grammars:n.object,timeout:n.number,ariaLabel:n.string,style:n.object,className:n.string,outlineStyle:n.string,onStart:n.func,onEnd:n.func,onSpeechStart:n.func,onSpeechEnd:n.func,onResult:n.func,onError:n.func,onNoMatch:n.func},_.defaultProps={lang:"en-US",grammars:null,timeout:3e3,ariaLabel:"start recognition",style:null,className:null,outlineStyle:"2px solid",onStart:null,onEnd:null,onSpeechStart:null,onSpeechEnd:null,onResult:null,onError:null,onNoMatch:null};var E=g.isSupported;e.default=_,e.isSupported=E,e.useVocal=w,Object.defineProperty(e,"__esModule",{value:!0})})); | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgudW1kLmpzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvQHVudGVtcHMvdXNlci1wZXJtaXNzaW9ucy11dGlscy9kaXN0L2luZGV4LmVzLmpzIiwiLi4vc3JjL2NvcmUvU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmpzIiwiLi4vc3JjL2hvb2tzL3VzZVZvY2FsLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvSWNvbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1ZvY2FsLmpzIiwiLi4vc3JjL2hvb2tzL3VzZVRpbWVvdXQuanMiLCIuLi9zcmMvdXRpbHMvaXNGdW5jLmpzIiwiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGUoZSxyLHQsbixhLGksbyl7dHJ5e3ZhciB1PWVbaV0obyksYz11LnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHQoZSl9dS5kb25lP3IoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiByKHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihhLGkpe3ZhciBvPXIuYXBwbHkodCxuKTtmdW5jdGlvbiB1KHIpe2UobyxhLGksdSxjLFwibmV4dFwiLHIpfWZ1bmN0aW9uIGMocil7ZShvLGEsaSx1LGMsXCJ0aHJvd1wiLHIpfXUodm9pZCAwKX0pKX19ZnVuY3Rpb24gdChlLHIpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxyKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgU3ltYm9sfHwhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSkpKXJldHVybjt2YXIgdD1bXSxuPSEwLGE9ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbyx1PWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz11Lm5leHQoKSkuZG9uZSkmJih0LnB1c2goby52YWx1ZSksIXJ8fHQubGVuZ3RoIT09cik7bj0hMCk7fWNhdGNoKGUpe2E9ITAsaT1lfWZpbmFsbHl7dHJ5e258fG51bGw9PXUucmV0dXJufHx1LnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBpfX1yZXR1cm4gdH0oZSxyKXx8ZnVuY3Rpb24oZSxyKXtpZighZSlyZXR1cm47aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG4oZSxyKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7XCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSk7aWYoXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKGUpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gbihlLHIpfShlLHIpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gbihlLHIpeyhudWxsPT1yfHxyPmUubGVuZ3RoKSYmKHI9ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLG49bmV3IEFycmF5KHIpO3Q8cjt0Kyspblt0XT1lW3RdO3JldHVybiBufXZhciBhPWZ1bmN0aW9uKCl7dmFyIGU9cihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZSh0KXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdChcInJldHVyblwiLG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGU9cihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZShyLG4pe3ZhciBhLG87cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihuYXZpZ2F0b3IucGVybWlzc2lvbnMpe2UubmV4dD00O2JyZWFrfW4obmV3IERPTUV4Y2VwdGlvbihcIlBlcm1pc3Npb25zIG5vdCBzdXBwb3J0ZWRcIixcIk5PVF9GT1VORF9FUlJcIikpLGUubmV4dD0xNjticmVhaztjYXNlIDQ6cmV0dXJuIGUucHJldj00LGUubmV4dD03LG5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7bmFtZTp0fSk7Y2FzZSA3OmE9ZS5zZW50LG89ZnVuY3Rpb24gZSh0KXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixlKSxpKHQudGFyZ2V0LnN0YXRlLHIsbil9LGEuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLG8pLGkoYS5zdGF0ZSxyLG4pLGUubmV4dD0xNjticmVhaztjYXNlIDEzOmUucHJldj0xMyxlLnQwPWUuY2F0Y2goNCksbihlLnQwKTtjYXNlIDE2OmNhc2VcImVuZFwiOnJldHVybiBlLnN0b3AoKX19KSxlLG51bGwsW1s0LDEzXV0pfSkpKTtyZXR1cm4gZnVuY3Rpb24ocix0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSk7Y2FzZSAxOmNhc2VcImVuZFwiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksaT1mdW5jdGlvbihlLHIsdCl7c3dpdGNoKGUpe2Nhc2VcImRlbmllZFwiOnQobmV3IERPTUV4Y2VwdGlvbihcIlBlcm1pc3Npb24gZGVuaWVkXCIsXCJOT1RfQUxMT1dFRF9FUlJcIikpO2JyZWFrO2RlZmF1bHQ6cihlKX19LG89ZnVuY3Rpb24oKXt2YXIgZT1yKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKG4saSl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoXCJyZXR1cm5cIixuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBlPXIocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUocixvKXt2YXIgdSxjLHM7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihuYXZpZ2F0b3IubWVkaWFEZXZpY2VzKXtlLm5leHQ9NDticmVha31vKG5ldyBET01FeGNlcHRpb24oXCJNZWRpYURldmljZXMgbm90IHN1cHBvcnRlZFwiLFwiTk9UX0ZPVU5EX0VSUlwiKSksZS5uZXh0PTI0O2JyZWFrO2Nhc2UgNDpyZXR1cm4gZS5wcmV2PTQsZS50MD1Qcm9taXNlLGUubmV4dD04LGEobik7Y2FzZSA4OnJldHVybiBlLnQxPWUuc2VudCxlLm5leHQ9MTEsbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoaSk7Y2FzZSAxMTpyZXR1cm4gZS50Mj1lLnNlbnQsZS50Mz1bZS50MSxlLnQyXSxlLm5leHQ9MTUsZS50MC5hbGwuY2FsbChlLnQwLGUudDMpO2Nhc2UgMTU6dT1lLnNlbnQsYz10KHUsMikscz1jWzFdLHIocyksZS5uZXh0PTI0O2JyZWFrO2Nhc2UgMjE6ZS5wcmV2PTIxLGUudDQ9ZS5jYXRjaCg0KSxvKGUudDQpO2Nhc2UgMjQ6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzQsMjFdXSl9KSkpO3JldHVybiBmdW5jdGlvbihyLHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKTtjYXNlIDE6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKTtyZXR1cm4gZnVuY3Rpb24ocix0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpO2V4cG9ydHthIGFzIGdldFBlcm1pc3Npb24sbyBhcyBnZXRVc2VyTWVkaWFTdHJlYW19O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndVpYTXVhbk1pTENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5blpYUlFaWEp0YVhOemFXOXVMbXB6SWl3aUxpNHZjM0pqTDJkbGRGVnpaWEpOWldScFlWTjBjbVZoYlM1cWN5SmRMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRkpsZEhWeWJuTWdZU0J3Y205dGFYTmxJSEpsYzI5c2RtVmtJSGRvWlc0Z2RHaGxJSEJsY20xcGMzTnBiMjRnYVhNZ1ozSmhiblJsWkNCaWVTQjBhR1VnZFhObGNseHVJQ29nUUhCaGNtRnRJSEJsY20xcGMzTnBiMjVPWVcxbElDQWdJQ0FnSUNBZ0lDQWdUbUZ0WlNCdlppQjBhR1VnY0dWeWJXbHpjMmx2Ymk0Z1FITmxaU0JvZEhSd2N6b3ZMM2N6WXk1bmFYUm9kV0l1YVc4dmNHVnliV2x6YzJsdmJuTXZJMlZ1ZFcxa1pXWXRjR1Z5YldsemMybHZibTVoYldWY2JpQXFJRUJ5WlhSMWNtNXpJSHRRY205dGFYTmxmVnh1SUNvdlhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCaGMzbHVZeUFvY0dWeWJXbHpjMmx2Yms1aGJXVXBJRDArSUh0Y2JseDBjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLR0Z6ZVc1aklDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmx4MFhIUnBaaUFvSVc1aGRtbG5ZWFJ2Y2k1d1pYSnRhWE56YVc5dWN5a2dlMXh1WEhSY2RGeDBjbVZxWldOMEtHNWxkeUJFVDAxRmVHTmxjSFJwYjI0b0oxQmxjbTFwYzNOcGIyNXpJRzV2ZENCemRYQndiM0owWldRbkxDQW5UazlVWDBaUFZVNUVYMFZTVWljcEtWeHVYSFJjZEgwZ1pXeHpaU0I3WEc1Y2RGeDBYSFIwY25rZ2UxeHVYSFJjZEZ4MFhIUmpiMjV6ZENCd1pYSnRhWE56YVc5dVUzUmhkSFZ6SUQwZ1lYZGhhWFFnYm1GMmFXZGhkRzl5TG5CbGNtMXBjM05wYjI1ekxuRjFaWEo1S0hzZ2JtRnRaVG9nY0dWeWJXbHpjMmx2Yms1aGJXVWdmU2xjYmx4MFhIUmNkRngwWTI5dWMzUWdiMjVEYUdGdVoyVWdQU0FvWlhabGJuUXBJRDArSUh0Y2JseDBYSFJjZEZ4MFhIUndaWEp0YVhOemFXOXVVM1JoZEhWekxuSmxiVzkyWlVWMlpXNTBUR2x6ZEdWdVpYSW9KMk5vWVc1blpTY3NJRzl1UTJoaGJtZGxLVnh1WEhSY2RGeDBYSFJjZEhKbGMyOXNkbVZQY2xKbGFtVmpkRUpoYzJWa1QyNVRkR0YwWlNobGRtVnVkQzUwWVhKblpYUXVjM1JoZEdVc0lISmxjMjlzZG1Vc0lISmxhbVZqZENsY2JseDBYSFJjZEZ4MGZWeHVYSFJjZEZ4MFhIUndaWEp0YVhOemFXOXVVM1JoZEhWekxtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb0oyTm9ZVzVuWlNjc0lHOXVRMmhoYm1kbEtWeHVYSFJjZEZ4MFhIUnlaWE52YkhabFQzSlNaV3BsWTNSQ1lYTmxaRTl1VTNSaGRHVW9jR1Z5YldsemMybHZibE4wWVhSMWN5NXpkR0YwWlN3Z2NtVnpiMngyWlN3Z2NtVnFaV04wS1Z4dVhIUmNkRngwZlNCallYUmphQ0FvWlhKeWIzSXBJSHRjYmx4MFhIUmNkRngwY21WcVpXTjBLR1Z5Y205eUtWeHVYSFJjZEZ4MGZWeHVYSFJjZEgxY2JseDBmU2xjYm4xY2JseHVZMjl1YzNRZ2NtVnpiMngyWlU5eVVtVnFaV04wUW1GelpXUlBibE4wWVhSbElEMGdLSE4wWVhSbExDQnlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmx4MGMzZHBkR05vSUNoemRHRjBaU2tnZTF4dVhIUmNkR05oYzJVZ0oyUmxibWxsWkNjNlhHNWNkRngwWEhSeVpXcGxZM1FvYm1WM0lFUlBUVVY0WTJWd2RHbHZiaWduVUdWeWJXbHpjMmx2YmlCa1pXNXBaV1FuTENBblRrOVVYMEZNVEU5WFJVUmZSVkpTSnlrcFhHNWNkRngwWEhSaWNtVmhhMXh1WEhSY2RHUmxabUYxYkhRNlhHNWNkRngwWEhSeVpYTnZiSFpsS0hOMFlYUmxLVnh1WEhSOVhHNTlYRzRpTENKcGJYQnZjblFnWjJWMFVHVnliV2x6YzJsdmJpQm1jbTl0SUNjdUwyZGxkRkJsY20xcGMzTnBiMjRuWEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCaElIQnliMjFwYzJVZ2NtVnpiMngyWldRZ2QyaGxiaUIwYUdVZ2NHVnliV2x6YzJsdmJpQnBjeUJuY21GdWRHVmtJR0o1SUhSb1pTQjFjMlZ5SUdGdVpDQjBhR1VnYzNSeVpXRnRJR2x6SUhKbGRISnBaWFpsWkZ4dUlDb2dRSEJoY21GdElIQmxjbTFwYzNOcGIyNU9ZVzFsSUNBZ0lDQWdJQ0FnSUNBZ1RtRnRaU0J2WmlCMGFHVWdjR1Z5YldsemMybHZiaTRnUUhObFpTQm9kSFJ3Y3pvdkwzY3pZeTVuYVhSb2RXSXVhVzh2Y0dWeWJXbHpjMmx2Ym5NdkkyVnVkVzFrWldZdGNHVnliV2x6YzJsdmJtNWhiV1ZjYmlBcUlFQndZWEpoYlNCdFpXUnBZVk4wY21WaGJVTnZibk4wY21GcGJuUnpJQ0FnSUVOdmJuTjBjbUZwYm5SeklHOWlhbVZqZEM0Z1FITmxaU0JvZEhSd2N6b3ZMMlJsZG1Wc2IzQmxjaTV0YjNwcGJHeGhMbTl5Wnk5bGJpMVZVeTlrYjJOekwxZGxZaTlCVUVrdlRXVmthV0ZUZEhKbFlXMURiMjV6ZEhKaGFXNTBjMXh1SUNvZ1FISmxkSFZ5Ym5NZ2UxQnliMjFwYzJWOVhHNGdLaTljYm1WNGNHOXlkQ0JrWldaaGRXeDBJR0Z6ZVc1aklDaHdaWEp0YVhOemFXOXVUbUZ0WlN3Z2JXVmthV0ZUZEhKbFlXMURiMjV6ZEhKaGFXNTBjeWtnUFQ0Z2UxeHVYSFJ5WlhSMWNtNGdibVYzSUZCeWIyMXBjMlVvWVhONWJtTWdLSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dVhIUmNkR2xtSUNnaGJtRjJhV2RoZEc5eUxtMWxaR2xoUkdWMmFXTmxjeWtnZTF4dVhIUmNkRngwY21WcVpXTjBLRzVsZHlCRVQwMUZlR05sY0hScGIyNG9KMDFsWkdsaFJHVjJhV05sY3lCdWIzUWdjM1Z3Y0c5eWRHVmtKeXdnSjA1UFZGOUdUMVZPUkY5RlVsSW5LU2xjYmx4MFhIUjlJR1ZzYzJVZ2UxeHVYSFJjZEZ4MGRISjVJSHRjYmx4MFhIUmNkRngwWTI5dWMzUWdXeXdnYzNSeVpXRnRYU0E5SUdGM1lXbDBJRkJ5YjIxcGMyVXVZV3hzS0Z0Y2JseDBYSFJjZEZ4MFhIUmhkMkZwZENCblpYUlFaWEp0YVhOemFXOXVLSEJsY20xcGMzTnBiMjVPWVcxbEtTeGNibHgwWEhSY2RGeDBYSFJoZDJGcGRDQnVZWFpwWjJGMGIzSXViV1ZrYVdGRVpYWnBZMlZ6TG1kbGRGVnpaWEpOWldScFlTaHRaV1JwWVZOMGNtVmhiVU52Ym5OMGNtRnBiblJ6S1N4Y2JseDBYSFJjZEZ4MFhTbGNibHgwWEhSY2RGeDBjbVZ6YjJ4MlpTaHpkSEpsWVcwcFhHNWNkRngwWEhSOUlHTmhkR05vSUNobGNuSnZjaWtnZTF4dVhIUmNkRngwWEhSeVpXcGxZM1FvWlhKeWIzSXBYRzVjZEZ4MFhIUjlYRzVjZEZ4MGZWeHVYSFI5S1Z4dWZWeHVJbDBzSW01aGJXVnpJanBiSW5CbGNtMXBjM05wYjI1T1lXMWxJaXdpVUhKdmJXbHpaU0lzSW5KbGMyOXNkbVVpTENKeVpXcGxZM1FpTENKdVlYWnBaMkYwYjNJaUxDSndaWEp0YVhOemFXOXVjeUlzSWtSUFRVVjRZMlZ3ZEdsdmJpSXNJbkYxWlhKNUlpd2libUZ0WlNJc0luQmxjbTFwYzNOcGIyNVRkR0YwZFhNaUxDSnZia05vWVc1blpTSXNJbVYyWlc1MElpd2ljbVZ0YjNabFJYWmxiblJNYVhOMFpXNWxjaUlzSW5KbGMyOXNkbVZQY2xKbGFtVmpkRUpoYzJWa1QyNVRkR0YwWlNJc0luUmhjbWRsZENJc0luTjBZWFJsSWl3aVlXUmtSWFpsYm5STWFYTjBaVzVsY2lJc0ltMWxaR2xoVTNSeVpXRnRRMjl1YzNSeVlXbHVkSE1pTENKdFpXUnBZVVJsZG1salpYTWlMQ0puWlhSUVpYSnRhWE56YVc5dUlpd2laMlYwVlhObGNrMWxaR2xoSWl3aVlXeHNJaXdpYzNSeVpXRnRJbDBzSW0xaGNIQnBibWR6SWpvaWJYZERRVXRCTEd0RVFVRmxMRmRCUVU5QkxEUkhRVU5rTEVsQlFVbERMRzlFUVVGUkxGZEJRVTlETEVWQlFWTkRMRGhHUVVNM1FrTXNWVUZCVlVNc05FSkJRMlJHTEVWQlFVOHNTVUZCU1Vjc1lVRkJZU3cwUWtGQk5rSXNhMFZCUjNKQ1JpeFZRVUZWUXl4WlFVRlpSU3hOUVVGTkxFTkJRVVZETEV0QlFVMVNMRmRCUVRkRVV5eFRRVU5CUXl4RlFVRlhMRk5CUVZoQkxFVkJRVmxETEVkQlEycENSaXhGUVVGcFFrY3NiMEpCUVc5Q0xGTkJRVlZHTEVkQlF5OURSeXhGUVVFMFFrWXNSVUZCVFVjc1QwRkJUME1zVFVGQlQySXNSVUZCVTBNc1NVRkZNVVJOTEVWQlFXbENUeXhwUWtGQmFVSXNVMEZCVlU0c1IwRkROVU5ITEVWQlFUUkNTaXhGUVVGcFFrMHNUVUZCVDJJc1JVRkJVME1zY1VSQlJUZEVRU3cyVGtGTlJWVXNSVUZCT0VJc1UwRkJRMFVzUlVGQlQySXNSVUZCVTBNc1ZVRkROVU5aTEU5QlEwWXNVMEZEU2xvc1JVRkJUeXhKUVVGSlJ5eGhRVUZoTEc5Q1FVRnhRaXhyUTBGSE4wTktMRVZCUVZGaExHMUVRM1pDU1N4WFFVRlBaaXhGUVVGblFtbENMRFJIUVVNNVFpeEpRVUZKYUVJc2IwUkJRVkVzVjBGQlQwTXNSVUZCVTBNc1owZEJRemRDUXl4VlFVRlZZeXcyUWtGRFpHWXNSVUZCVHl4SlFVRkpSeXhoUVVGaExEWkNRVUU0UWl3NFJFRkhOVUpNTEdsQ1FVTnNRbXRDTEVWQlFXTnVRaXgxUTBGRFpFa3NWVUZCVldNc1lVRkJZVVVzWVVGQllVZ3NPRVJCUmxaSkxEaERRVUY0UWtNc1QwRkpWSEJDTEVWQlFWRnZRaXh4UkVGRlVtNUNJbjA9XG4iLCJpbXBvcnQgeyBnZXRVc2VyTWVkaWFTdHJlYW0gfSBmcm9tICdAdW50ZW1wcy91c2VyLXBlcm1pc3Npb25zLXV0aWxzJ1xuXG5jbGFzcyBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIge1xuXHRzdGF0aWMgZGVmYXVsdE9wdGlvbnMgPSB7XG5cdFx0Z3JhbW1hcnM6IG51bGwsXG5cdFx0bGFuZzogJ2VuLVVTJyxcblx0XHRjb250aW51b3VzOiBmYWxzZSxcblx0XHRpbnRlcmltUmVzdWx0czogZmFsc2UsXG5cdFx0bWF4QWx0ZXJuYXRpdmVzOiAxLFxuXHRcdHNlcnZpY2VVUkk6IG51bGwsXG5cdH1cblxuXHRzdGF0aWMgZXZlbnRUeXBlcyA9IHtcblx0XHRBVURJT19FTkQ6ICdhdWRpb2VuZCcsXG5cdFx0QVVESU9fU1RBUlQ6ICdhdWRpb3N0YXJ0Jyxcblx0XHRFTkQ6ICdlbmQnLFxuXHRcdEVSUk9SOiAnZXJyb3InLFxuXHRcdE5PX01BVENIOiAnbm9tYXRjaCcsXG5cdFx0UkVTVUxUOiAncmVzdWx0Jyxcblx0XHRTT1VORF9FTkQ6ICdzb3VuZGVuZCcsXG5cdFx0U09VTkRfU1RBUlQ6ICdzb3VuZHN0YXJ0Jyxcblx0XHRTUEVFQ0hfRU5EOiAnc3BlZWNoZW5kJyxcblx0XHRTUEVFQ0hfU1RBUlQ6ICdzcGVlY2hzdGFydCcsXG5cdFx0U1RBUlQ6ICdzdGFydCcsXG5cdH1cblxuXHRzdGF0aWMgZ2V0IGlzU3VwcG9ydGVkKCkge1xuXHRcdHJldHVybiAhIVNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5fcmVzb2x2ZVNwZWVjaFJlY29nbml0aW9uKClcblx0fVxuXG5cdHN0YXRpYyBzZXQgaXNTdXBwb3J0ZWQoXykge1xuXHRcdHRocm93IG5ldyBFcnJvcignWW91IGNhbm5vdCBzZXQgaXNTdXBwb3J0ZWQgZGlyZWN0bHkuJylcblx0fVxuXG5cdF9pbnN0YW5jZSA9IG51bGxcblx0X2xpc3RlbmVycyA9IG51bGxcblxuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0Y29uc3QgU3BlZWNoUmVjb2duaXRpb24gPSBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuX3Jlc29sdmVTcGVlY2hSZWNvZ25pdGlvbigpIHx8IHt9XG5cdFx0dGhpcy5faW5zdGFuY2UgPSBuZXcgU3BlZWNoUmVjb2duaXRpb24oKVxuXHRcdHRoaXMuX2xpc3RlbmVycyA9IHt9XG5cblx0XHRPYmplY3QuZW50cmllcyh7XG5cdFx0XHQuLi5TcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuZGVmYXVsdE9wdGlvbnMsXG5cdFx0XHQuLi4ob3B0aW9ucyB8fCB7fSksXG5cdFx0fSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG5cdFx0XHRpZiAoa2V5ID09PSAnZ3JhbW1hcnMnICYmICF2YWx1ZSkge1xuXHRcdFx0XHRjb25zdCBTcGVlY2hHcmFtbWFyTGlzdCA9IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5fcmVzb2x2ZVNwZWVjaEdyYW1tYXJMaXN0KCkgfHwge31cblx0XHRcdFx0dmFsdWUgPSBuZXcgU3BlZWNoR3JhbW1hckxpc3QoKVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5faW5zdGFuY2Vba2V5XSA9IHZhbHVlXG5cdFx0fSlcblx0fVxuXG5cdGdldCBpbnN0YW5jZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5zdGFuY2Vcblx0fVxuXG5cdHNldCBpbnN0YW5jZShfKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IHNldCBpbnN0YW5jZSBkaXJlY3RseS4nKVxuXHR9XG5cblx0YXN5bmMgc3RhcnQoKSB7XG5cdFx0aWYgKCEhdGhpcy5faW5zdGFuY2UpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHN0cmVhbSA9IGF3YWl0IGdldFVzZXJNZWRpYVN0cmVhbSgnbWljcm9waG9uZScsIHsgYXVkaW86IHRydWUgfSlcblx0XHRcdFx0aWYgKCFzdHJlYW0pIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZXRyaWV2ZSB0aGUgc3RyZWFtIGZyb20gbWVkaWEgZGV2aWNlJylcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9pbnN0YW5jZS5zdGFydCgpXG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLl9saXN0ZW5lcnMuZXJyb3Jcblx0XHRcdFx0aWYgKCEhZXJyb3JIYW5kbGVyKSB7XG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyKGVycm9yKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdHN0b3AoKSB7XG5cdFx0aWYgKCEhdGhpcy5faW5zdGFuY2UpIHtcblx0XHRcdHRoaXMuX2luc3RhbmNlLnN0b3AoKVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRhYm9ydCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dGhpcy5faW5zdGFuY2UuYWJvcnQoKVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRhZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2spIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSAmJiB0aGlzLl9pbmNsdWRlc0V2ZW50VHlwZShldmVudFR5cGUpKSB7XG5cdFx0XHRpZiAoISF0aGlzLl9saXN0ZW5lcnNbZXZlbnRUeXBlXSkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBoYW5kbGVyID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGxldCBhZGRpdGlvbmFsQXJncyA9IFtdXG5cdFx0XHRcdGlmIChldmVudFR5cGUgPT09IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5ldmVudFR5cGVzLlJFU1VMVCkge1xuXHRcdFx0XHRcdGlmICghIWV2ZW50LnJlc3VsdHMgJiYgZXZlbnQucmVzdWx0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRhZGRpdGlvbmFsQXJncy5wdXNoKGV2ZW50LnJlc3VsdHNbMF1bMF0udHJhbnNjcmlwdClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQhIWNhbGxiYWNrICYmIGNhbGxiYWNrLmFwcGx5KHRoaXMsIFsuLi5hZGRpdGlvbmFsQXJncywgZXZlbnRdKVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5faW5zdGFuY2UuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIpXG5cblx0XHRcdHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdID0gaGFuZGxlclxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRyZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSkge1xuXHRcdGNvbnN0IGhhbmRsZXIgPSB0aGlzLl9saXN0ZW5lcnNbZXZlbnRUeXBlXVxuXHRcdHRoaXMuX2luc3RhbmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyKVxuXG5cdFx0ZGVsZXRlIHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdXG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0Y2xlYW51cCgpIHtcblx0XHR0aGlzLnN0b3AoKVxuXG5cdFx0T2JqZWN0LmtleXModGhpcy5fbGlzdGVuZXJzKS5mb3JFYWNoKChrZXkpID0+IHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihrZXkpKVxuXHRcdHRoaXMuX2luc3RhbmNlID0gbnVsbFxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdF9pbmNsdWRlc0V2ZW50VHlwZShldmVudFR5cGUpIHtcblx0XHRyZXR1cm4gISFPYmplY3QudmFsdWVzKFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5ldmVudFR5cGVzKS5maW5kKCh0eXBlKSA9PiB0eXBlID09PSBldmVudFR5cGUpXG5cdH1cblxuXHRzdGF0aWMgX3Jlc29sdmVTcGVlY2hSZWNvZ25pdGlvbigpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0d2luZG93LlNwZWVjaFJlY29nbml0aW9uIHx8XG5cdFx0XHR3aW5kb3cud2Via2l0U3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdHdpbmRvdy5tb3pTcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0d2luZG93Lm1zU3BlZWNoUmVjb2duaXRpb25cblx0XHQpXG5cdH1cblxuXHRzdGF0aWMgX3Jlc29sdmVTcGVlY2hHcmFtbWFyTGlzdCgpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0d2luZG93LlNwZWVjaEdyYW1tYXJMaXN0IHx8XG5cdFx0XHR3aW5kb3cud2Via2l0U3BlZWNoR3JhbW1hckxpc3QgfHxcblx0XHRcdHdpbmRvdy5tb3pTcGVlY2hHcmFtbWFyTGlzdCB8fFxuXHRcdFx0d2luZG93Lm1zU3BlZWNoR3JhbW1hckxpc3Rcblx0XHQpXG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyXG4iLCJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlciBmcm9tICcuLi9jb3JlL1NwZWVjaFJlY29nbml0aW9uV3JhcHBlcidcblxuY29uc3QgdXNlVm9jYWwgPSAobGFuZyA9ICdlbi1VUycsIGdyYW1tYXJzID0gbnVsbCwgX19yc0luc3RhbmNlID0gbnVsbCkgPT4ge1xuXHRjb25zdCByZWYgPSB1c2VSZWYobnVsbClcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuaXNTdXBwb3J0ZWQpIHtcblx0XHRcdHJlZi5jdXJyZW50ID0gX19yc0luc3RhbmNlIHx8IG5ldyBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIoeyBsYW5nLCBncmFtbWFycyB9KVxuXHRcdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdFx0cmVmLmN1cnJlbnQuYWJvcnQoKVxuXHRcdFx0XHRyZWYuY3VycmVudC5jbGVhbnVwKClcblx0XHRcdH1cblx0XHR9XG5cdH0sIFtsYW5nLCBncmFtbWFycywgX19yc0luc3RhbmNlXSlcblxuXHRjb25zdCBzdGFydCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRpZiAocmVmLmN1cnJlbnQpIHtcblx0XHRcdHJlZi5jdXJyZW50LnN0YXJ0KClcblx0XHR9XG5cdH0sIFtdKVxuXG5cdGNvbnN0IHN0b3AgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0aWYgKHJlZi5jdXJyZW50KSB7XG5cdFx0XHRyZWYuY3VycmVudC5zdG9wKClcblx0XHR9XG5cdH0sIFtdKVxuXG5cdGNvbnN0IGFib3J0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdGlmIChyZWYuY3VycmVudCkge1xuXHRcdFx0cmVmLmN1cnJlbnQuYWJvcnQoKVxuXHRcdH1cblx0fSwgW10pXG5cblx0Y29uc3Qgc3Vic2NyaWJlID0gdXNlQ2FsbGJhY2soKGV2ZW50VHlwZSwgaGFuZGxlcikgPT4ge1xuXHRcdGlmIChyZWYuY3VycmVudCkge1xuXHRcdFx0cmVmLmN1cnJlbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIpXG5cdFx0fVxuXHR9LCBbXSlcblxuXHRjb25zdCB1bnN1YnNjcmliZSA9IHVzZUNhbGxiYWNrKChldmVudFR5cGUsIGhhbmRsZXIpID0+IHtcblx0XHRpZiAocmVmLmN1cnJlbnQpIHtcblx0XHRcdHJlZi5jdXJyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyKVxuXHRcdH1cblx0fSwgW10pXG5cblx0Y29uc3QgY2xlYW4gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0aWYgKHJlZi5jdXJyZW50KSB7XG5cdFx0XHRyZWYuY3VycmVudC5jbGVhbnVwKClcblx0XHR9XG5cdH0sIFtdKVxuXG5cdHJldHVybiBbcmVmLCB7IHN0YXJ0LCBzdG9wLCBhYm9ydCwgc3Vic2NyaWJlLCB1bnN1YnNjcmliZSwgY2xlYW4gfV1cbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlVm9jYWxcblxuLy8gVE9ETzogUmV0dXJuIHRoZSBpbnN0YW5jZSwgbm90IHRoZSByZWZcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcblxuY29uc3QgSWNvbiA9ICh7IGNvbG9yLCBhY3RpdmVDb2xvciwgaXNBY3RpdmUgfSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxzdmdcblx0XHRcdGRhdGEtdGVzdGlkPVwiX19pY29uLXJvb3RfX1wiXG5cdFx0XHR4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcblx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRoZWlnaHQ9XCIxMDAlXCJcblx0XHRcdHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuXHRcdD5cblx0XHRcdDxnPlxuXHRcdFx0XHQ8cGF0aFxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiX19pY29uLXBhdGhfX1wiXG5cdFx0XHRcdFx0ZmlsbD17Y29sb3J9XG5cdFx0XHRcdFx0ZD1cIk0xMiAxNGMxLjY2IDAgMi45OS0xLjM0IDIuOTktM0wxNSA1YzAtMS42Ni0xLjM0LTMtMy0zUzkgMy4zNCA5IDV2NmMwIDEuNjYgMS4zNCAzIDMgM3ptNS4zLTNjMCAzLTIuNTQgNS4xLTUuMyA1LjFTNi43IDE0IDYuNyAxMUg1YzAgMy40MSAyLjcyIDYuMjMgNiA2LjcyVjIxaDJ2LTMuMjhjMy4yOC0uNDggNi0zLjMgNi02LjcyaC0xLjd6XCJcblx0XHRcdFx0Lz5cblx0XHRcdFx0e2lzQWN0aXZlICYmIDxjaXJjbGUgZGF0YS10ZXN0aWQ9XCJfX2ljb24tYWN0aXZlX19cIiBmaWxsPXthY3RpdmVDb2xvcn0gY3g9XCIxNlwiIGN5PVwiNFwiIHI9XCI0XCIgLz59XG5cdFx0XHQ8L2c+XG5cdFx0PC9zdmc+XG5cdClcbn1cblxuSWNvbi5wcm9wVHlwZXMgPSB7XG5cdGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRhY3RpdmVDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcblx0aXNBY3RpdmU6IFByb3BUeXBlcy5ib29sLFxufVxuXG5JY29uLmRlZmF1bHRQcm9wcyA9IHtcblx0Y29sb3I6ICdibGFjaycsXG5cdGFjdGl2ZUNvbG9yOiAncmVkJyxcblx0aXNBY3RpdmU6IGZhbHNlLFxufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uXG4iLCJpbXBvcnQgUmVhY3QsIHsgY2xvbmVFbGVtZW50LCBpc1ZhbGlkRWxlbWVudCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuXG5pbXBvcnQgU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyIGZyb20gJy4uL2NvcmUvU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyJ1xuXG5pbXBvcnQgaXNGdW5jIGZyb20gJy4uL3V0aWxzL2lzRnVuYydcblxuaW1wb3J0IHVzZVZvY2FsIGZyb20gJy4uL2hvb2tzL3VzZVZvY2FsJ1xuaW1wb3J0IHVzZVRpbWVvdXQgZnJvbSAnLi4vaG9va3MvdXNlVGltZW91dCdcblxuaW1wb3J0IEljb24gZnJvbSAnLi9JY29uJ1xuXG5jb25zdCBWb2NhbCA9ICh7XG5cdGNoaWxkcmVuLFxuXHRsYW5nLFxuXHRncmFtbWFycyxcblx0dGltZW91dCxcblx0YXJpYUxhYmVsLFxuXHRzdHlsZSxcblx0Y2xhc3NOYW1lLFxuXHRvdXRsaW5lU3R5bGUsXG5cdG9uU3RhcnQsXG5cdG9uRW5kLFxuXHRvblNwZWVjaFN0YXJ0LFxuXHRvblNwZWVjaEVuZCxcblx0b25SZXN1bHQsXG5cdG9uRXJyb3IsXG5cdG9uTm9NYXRjaCxcblx0X19yc0luc3RhbmNlLFxufSkgPT4ge1xuXHRjb25zdCBidXR0b25SZWYgPSB1c2VSZWYobnVsbClcblx0Y29uc3QgW2lzTGlzdGVuaW5nLCBzZXRJc0xpc3RlbmluZ10gPSB1c2VTdGF0ZShmYWxzZSlcblxuXHRjb25zdCBbLCB7IHN0YXJ0LCBzdG9wLCBzdWJzY3JpYmUsIHVuc3Vic2NyaWJlIH1dID0gdXNlVm9jYWwobGFuZywgZ3JhbW1hcnMsIF9fcnNJbnN0YW5jZSlcblxuXHRjb25zdCBfb25FbmQgPSAoZSkgPT4ge1xuXHRcdHN0b3BUaW1lcigpXG5cdFx0c3RvcFJlY29nbml0aW9uKClcblxuXHRcdHVuc3Vic2NyaWJlKCdzdGFydCcsIF9vblN0YXJ0KVxuXHRcdHVuc3Vic2NyaWJlKCdlbmQnLCBfb25FbmQpXG5cdFx0dW5zdWJzY3JpYmUoJ3NwZWVjaHN0YXJ0JywgX29uU3BlZWNoU3RhcnQpXG5cdFx0dW5zdWJzY3JpYmUoJ3NwZWVjaGVuZCcsIF9vblNwZWVjaEVuZClcblx0XHR1bnN1YnNjcmliZSgncmVzdWx0JywgX29uUmVzdWx0KVxuXHRcdHVuc3Vic2NyaWJlKCdlcnJvcicsIF9vbkVycm9yKVxuXHRcdHVuc3Vic2NyaWJlKCdub21hdGNoJywgX29uTm9NYXRjaClcblxuXHRcdCEhb25FbmQgJiYgb25FbmQoZSlcblx0fVxuXG5cdGNvbnN0IFtzdGFydFRpbWVyLCBzdG9wVGltZXJdID0gdXNlVGltZW91dChfb25FbmQsIHRpbWVvdXQpXG5cblx0Y29uc3Qgc3RhcnRSZWNvZ25pdGlvbiA9ICgpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0c2V0SXNMaXN0ZW5pbmcodHJ1ZSlcblxuXHRcdFx0c3Vic2NyaWJlKCdzdGFydCcsIF9vblN0YXJ0KVxuXHRcdFx0c3Vic2NyaWJlKCdlbmQnLCBfb25FbmQpXG5cdFx0XHRzdWJzY3JpYmUoJ3NwZWVjaHN0YXJ0JywgX29uU3BlZWNoU3RhcnQpXG5cdFx0XHRzdWJzY3JpYmUoJ3NwZWVjaGVuZCcsIF9vblNwZWVjaEVuZClcblx0XHRcdHN1YnNjcmliZSgncmVzdWx0JywgX29uUmVzdWx0KVxuXHRcdFx0c3Vic2NyaWJlKCdlcnJvcicsIF9vbkVycm9yKVxuXHRcdFx0c3Vic2NyaWJlKCdub21hdGNoJywgX29uTm9NYXRjaClcblxuXHRcdFx0c3RhcnQoKVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRfb25FcnJvcihlcnJvcilcblx0XHR9XG5cdH1cblxuXHRjb25zdCBzdG9wUmVjb2duaXRpb24gPSAoKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdHNldElzTGlzdGVuaW5nKGZhbHNlKVxuXG5cdFx0XHRzdG9wKClcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0ISFvbkVycm9yICYmIG9uRXJyb3IoZXJyb3IpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgX29uQ2xpY2sgPSAoKSA9PiB7XG5cdFx0c3RhcnRSZWNvZ25pdGlvbigpXG5cdH1cblxuXHRjb25zdCBfb25Gb2N1cyA9ICgpID0+IHtcblx0XHRpZiAoIWNsYXNzTmFtZSAmJiBvdXRsaW5lU3R5bGUpIHtcblx0XHRcdGJ1dHRvblJlZi5jdXJyZW50LnN0eWxlLm91dGxpbmUgPSBvdXRsaW5lU3R5bGVcblx0XHR9XG5cdH1cblxuXHRjb25zdCBfb25CbHVyID0gKCkgPT4ge1xuXHRcdGlmICghY2xhc3NOYW1lICYmIG91dGxpbmVTdHlsZSkge1xuXHRcdFx0YnV0dG9uUmVmLmN1cnJlbnQuc3R5bGUub3V0bGluZSA9ICdub25lJ1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IF9vblN0YXJ0ID0gKGUpID0+IHtcblx0XHRzdGFydFRpbWVyKClcblxuXHRcdCEhb25TdGFydCAmJiBvblN0YXJ0KGUpXG5cdH1cblxuXHRjb25zdCBfb25TcGVlY2hTdGFydCA9IChlKSA9PiB7XG5cdFx0c3RvcFRpbWVyKClcblxuXHRcdCEhb25TcGVlY2hTdGFydCAmJiBvblNwZWVjaFN0YXJ0KGUpXG5cdH1cblxuXHRjb25zdCBfb25TcGVlY2hFbmQgPSAoZSkgPT4ge1xuXHRcdHN0YXJ0VGltZXIoKVxuXG5cdFx0ISFvblNwZWVjaEVuZCAmJiBvblNwZWVjaEVuZChlKVxuXHR9XG5cblx0Y29uc3QgX29uUmVzdWx0ID0gKHJlc3VsdCwgZXZlbnQpID0+IHtcblx0XHRzdG9wVGltZXIoKVxuXHRcdHN0b3BSZWNvZ25pdGlvbigpXG5cblx0XHQhIW9uUmVzdWx0ICYmIG9uUmVzdWx0KHJlc3VsdCwgZXZlbnQpXG5cdH1cblxuXHRjb25zdCBfb25FcnJvciA9IChlcnJvcikgPT4ge1xuXHRcdHN0b3BSZWNvZ25pdGlvbigpXG5cblx0XHQhIW9uRXJyb3IgJiYgb25FcnJvcihlcnJvcilcblx0fVxuXG5cdGNvbnN0IF9vbk5vTWF0Y2ggPSAoZSkgPT4ge1xuXHRcdHN0b3BUaW1lcigpXG5cdFx0c3RvcFJlY29nbml0aW9uKClcblxuXHRcdCEhb25Ob01hdGNoICYmIG9uTm9NYXRjaChlKVxuXHR9XG5cblx0Y29uc3QgX3JlbmRlckRlZmF1bHQgPSAoKSA9PiAoXG5cdFx0PGJ1dHRvblxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJfX3ZvY2FsLXJvb3RfX1wiXG5cdFx0XHRyZWY9e2J1dHRvblJlZn1cblx0XHRcdHJvbGU9XCJidXR0b25cIlxuXHRcdFx0YXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuXHRcdFx0c3R5bGU9e1xuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0XHQ/IG51bGxcblx0XHRcdFx0XHQ6IHtcblx0XHRcdFx0XHRcdFx0d2lkdGg6IDI0LFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IDI0LFxuXHRcdFx0XHRcdFx0XHRiYWNrZ3JvdW5kOiAnbm9uZScsXG5cdFx0XHRcdFx0XHRcdGJvcmRlcjogJ25vbmUnLFxuXHRcdFx0XHRcdFx0XHRwYWRkaW5nOiAwLFxuXHRcdFx0XHRcdFx0XHRjdXJzb3I6ICFpc0xpc3RlbmluZyA/ICdwb2ludGVyJyA6ICdkZWZhdWx0Jyxcblx0XHRcdFx0XHRcdFx0Li4uc3R5bGUsXG5cdFx0XHRcdFx0ICB9XG5cdFx0XHR9XG5cdFx0XHRjbGFzc05hbWU9e2NsYXNzTmFtZX1cblx0XHRcdG9uRm9jdXM9e19vbkZvY3VzfVxuXHRcdFx0b25CbHVyPXtfb25CbHVyfVxuXHRcdFx0b25DbGljaz17X29uQ2xpY2t9XG5cdFx0PlxuXHRcdFx0PEljb24gaXNBY3RpdmU9e2lzTGlzdGVuaW5nfSBpY29uQ29sb3I9XCIjYWFhXCIgLz5cblx0XHQ8L2J1dHRvbj5cblx0KVxuXG5cdGNvbnN0IF9yZW5kZXJDaGlsZHJlbiA9IChjaGlsZHJlbikgPT4ge1xuXHRcdGlmIChTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuaXNTdXBwb3J0ZWQpIHtcblx0XHRcdGlmIChpc0Z1bmMoY2hpbGRyZW4pKSB7XG5cdFx0XHRcdHJldHVybiBjaGlsZHJlbihzdGFydFJlY29nbml0aW9uLCBzdG9wUmVjb2duaXRpb24pXG5cdFx0XHR9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuXHRcdFx0XHRyZXR1cm4gY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG5cdFx0XHRcdFx0Li4uKCFpc0xpc3RlbmluZyAmJiB7IG9uQ2xpY2s6IF9vbkNsaWNrIH0pLFxuXHRcdFx0XHR9KVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIF9yZW5kZXJEZWZhdWx0KClcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXG5cdHJldHVybiBfcmVuZGVyQ2hpbGRyZW4oY2hpbGRyZW4pXG59XG5cblZvY2FsLnByb3BUeXBlcyA9IHtcblx0LyoqIERlZmluZXMgdGhlIGxhbmd1YWdlIHVuZGVyc3Rvb2QgYnkgdGhlIHJlY29nbml0aW9uIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU3BlZWNoUmVjb2duaXRpb24vbGFuZykgKi9cblx0bGFuZzogUHJvcFR5cGVzLnN0cmluZyxcblx0LyoqIERlZmluZXMgdGhlIGdyYW1tYXJzIHVuZGVyc3Rvb2QgYnkgdGhlIHJlY29nbml0aW9uIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU3BlZWNoUmVjb2duaXRpb24vZ3JhbW1hcnMpICovXG5cdGdyYW1tYXJzOiBQcm9wVHlwZXMub2JqZWN0LFxuXHQvKiogRGVmaW5lcyB0aGUgdGltZSBpbiBtcyB0byB3YWl0IGJlZm9yZSBkaXNjYXJkaW5nIHRoZSByZWNvZ25pdGlvbiAqL1xuXHR0aW1lb3V0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHQvKiogRGVmaW5lcyB0aGUgYTExeSBsYWJlbCBmb3IgdGhlIGRlZmF1bHQgYnV0dG9uICovXG5cdGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcblx0LyoqIERlZmluZXMgdGhlIHN0eWxlcyBvZiB0aGUgZGVmYXVsdCBlbGVtZW50IGlmIGNsYXNzTmFtZSBpcyBub3Qgc3BlY2lmaWVkICovXG5cdHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXHQvKiogRGVmaW5lcyB0aGUgY2xhc3Mgb2YgdGhlIGRlZmF1bHQgZWxlbWVudCAqL1xuXHRjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cdC8qKiBEZWZpbmVzIHRoZSBkZWZhdWx0IHN0eWxlIG9mIHRoZSBmb2N1cyBvdXRsaW5lLiBpZiBudWxsIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyB1c2VkICovXG5cdG91dGxpbmVTdHlsZTogUHJvcFR5cGVzLnN0cmluZyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIHJlY29nbml0aW9uIHN0YXJ0cyAqL1xuXHRvblN0YXJ0OiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIHJlY29nbml0aW9uIGVuZHMgKi9cblx0b25FbmQ6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiB0aGUgc3BlZWNoIHN0YXJ0cyAqL1xuXHRvblNwZWVjaFN0YXJ0OiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIHNwZWVjaCBlbmRzICovXG5cdG9uU3BlZWNoRW5kOiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gYSByZXN1bHQgaXMgcmV0dXJuZWQgZnJvbSB0ZSByZWNvZ25pdGlvbiAqL1xuXHRvblJlc3VsdDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIGFuIGVycm9yIG9jY3VycyAqL1xuXHRvbkVycm9yOiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gbm8gcmVzdWx0IGNhbiBiZSByZWNvZ25pemVkICovXG5cdG9uTm9NYXRjaDogUHJvcFR5cGVzLmZ1bmMsXG59XG5cblZvY2FsLmRlZmF1bHRQcm9wcyA9IHtcblx0bGFuZzogJ2VuLVVTJyxcblx0Z3JhbW1hcnM6IG51bGwsXG5cdHRpbWVvdXQ6IDMwMDAsXG5cdGFyaWFMYWJlbDogJ3N0YXJ0IHJlY29nbml0aW9uJyxcblx0c3R5bGU6IG51bGwsXG5cdGNsYXNzTmFtZTogbnVsbCxcblx0b3V0bGluZVN0eWxlOiAnMnB4IHNvbGlkJyxcblx0b25TdGFydDogbnVsbCxcblx0b25FbmQ6IG51bGwsXG5cdG9uU3BlZWNoU3RhcnQ6IG51bGwsXG5cdG9uU3BlZWNoRW5kOiBudWxsLFxuXHRvblJlc3VsdDogbnVsbCxcblx0b25FcnJvcjogbnVsbCxcblx0b25Ob01hdGNoOiBudWxsLFxufVxuXG5leHBvcnQgZGVmYXVsdCBWb2NhbFxuIiwiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5cbmNvbnN0IHVzZVRpbWVvdXQgPSAoaGFuZGxlciwgdGltZW91dCA9IDApID0+IHtcblx0Y29uc3QgcmVmID0gdXNlUmVmKC0xKVxuXG5cdGNvbnN0IHN0b3AgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0Y2xlYXJUaW1lb3V0KHJlZi5jdXJyZW50KVxuXHRcdHJlZi5jdXJyZW50ID0gLTFcblx0fSwgW10pXG5cblx0Y29uc3Qgc3RhcnQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c3RvcCgpXG5cdFx0cmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KGhhbmRsZXIsIHRpbWVvdXQpXG5cdH0sIFtoYW5kbGVyLCB0aW1lb3V0LCBzdG9wXSlcblxuXHR1c2VFZmZlY3QoKCkgPT4gc3RvcCwgW3N0b3BdKVxuXG5cdHJldHVybiBbc3RhcnQsIHN0b3BdXG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZVRpbWVvdXRcblxuLy8gVE9ETzogUmV0dXJuIGEgcHJvbWlzZVxuIiwiZXhwb3J0IGRlZmF1bHQgKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJ1xuIiwiaW1wb3J0IFZvY2FsIGZyb20gJy4vY29tcG9uZW50cy9Wb2NhbCdcbmltcG9ydCBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIgZnJvbSAnLi9jb3JlL1NwZWVjaFJlY29nbml0aW9uV3JhcHBlcidcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VWb2NhbCB9IGZyb20gJy4vaG9va3MvdXNlVm9jYWwnXG5leHBvcnQgY29uc3QgaXNTdXBwb3J0ZWQgPSBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuaXNTdXBwb3J0ZWRcblxuZXhwb3J0IGRlZmF1bHQgVm9jYWxcbiJdLCJuYW1lcyI6WyJlIiwiciIsInQiLCJuIiwiYSIsImkiLCJvIiwidSIsImMiLCJ2YWx1ZSIsImRvbmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJ0aGlzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJBcnJheSIsImlzQXJyYXkiLCJTeW1ib2wiLCJpdGVyYXRvciIsIk9iamVjdCIsIm5leHQiLCJwdXNoIiwibGVuZ3RoIiwicmV0dXJuIiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIlR5cGVFcnJvciIsInJlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJ3cmFwIiwicHJldiIsImFicnVwdCIsIm5hdmlnYXRvciIsInBlcm1pc3Npb25zIiwiRE9NRXhjZXB0aW9uIiwicXVlcnkiLCJzZW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInRhcmdldCIsInN0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInQwIiwiY2F0Y2giLCJzdG9wIiwicyIsIm1lZGlhRGV2aWNlcyIsInQxIiwiZ2V0VXNlck1lZGlhIiwidDIiLCJ0MyIsImFsbCIsInQ0IiwiU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyIiwib3B0aW9ucyIsIlNwZWVjaFJlY29nbml0aW9uIiwiX3Jlc29sdmVTcGVlY2hSZWNvZ25pdGlvbiIsIl9pbnN0YW5jZSIsIl9saXN0ZW5lcnMiLCJlbnRyaWVzIiwiZGVmYXVsdE9wdGlvbnMiLCJmb3JFYWNoIiwia2V5IiwiX3Jlc29sdmVTcGVlY2hHcmFtbWFyTGlzdCIsIl90aGlzIiwiXyIsIkVycm9yIiwiZ2V0VXNlck1lZGlhU3RyZWFtIiwiYXVkaW8iLCJzdGFydCIsImVycm9ySGFuZGxlciIsImVycm9yIiwiYWJvcnQiLCJldmVudFR5cGUiLCJjYWxsYmFjayIsIl9pbmNsdWRlc0V2ZW50VHlwZSIsImhhbmRsZXIiLCJldmVudCIsImFkZGl0aW9uYWxBcmdzIiwiZXZlbnRUeXBlcyIsIlJFU1VMVCIsInJlc3VsdHMiLCJ0cmFuc2NyaXB0IiwiX3RoaXMyIiwia2V5cyIsIl90aGlzMyIsInZhbHVlcyIsImZpbmQiLCJ0eXBlIiwid2luZG93Iiwid2Via2l0U3BlZWNoUmVjb2duaXRpb24iLCJtb3pTcGVlY2hSZWNvZ25pdGlvbiIsIm1zU3BlZWNoUmVjb2duaXRpb24iLCJTcGVlY2hHcmFtbWFyTGlzdCIsIndlYmtpdFNwZWVjaEdyYW1tYXJMaXN0IiwibW96U3BlZWNoR3JhbW1hckxpc3QiLCJtc1NwZWVjaEdyYW1tYXJMaXN0IiwiZ3JhbW1hcnMiLCJsYW5nIiwiY29udGludW91cyIsImludGVyaW1SZXN1bHRzIiwibWF4QWx0ZXJuYXRpdmVzIiwic2VydmljZVVSSSIsIkFVRElPX0VORCIsIkFVRElPX1NUQVJUIiwiRU5EIiwiRVJST1IiLCJOT19NQVRDSCIsIlNPVU5EX0VORCIsIlNPVU5EX1NUQVJUIiwiU1BFRUNIX0VORCIsIlNQRUVDSF9TVEFSVCIsIlNUQVJUIiwidXNlVm9jYWwiLCJfX3JzSW5zdGFuY2UiLCJyZWYiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJpc1N1cHBvcnRlZCIsImN1cnJlbnQiLCJjbGVhbnVwIiwidXNlQ2FsbGJhY2siLCJzdWJzY3JpYmUiLCJ1bnN1YnNjcmliZSIsImNsZWFuIiwiSWNvbiIsImNvbG9yIiwiYWN0aXZlQ29sb3IiLCJpc0FjdGl2ZSIsIlJlYWN0IiwieG1sbnMiLCJ3aWR0aCIsImhlaWdodCIsInZpZXdCb3giLCJmaWxsIiwiZCIsImN4IiwiY3kiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzdHJpbmciLCJib29sIiwiZGVmYXVsdFByb3BzIiwiVm9jYWwiLCJjaGlsZHJlbiIsInRpbWVvdXQiLCJhcmlhTGFiZWwiLCJzdHlsZSIsImNsYXNzTmFtZSIsIm91dGxpbmVTdHlsZSIsIm9uU3RhcnQiLCJvbkVuZCIsIm9uU3BlZWNoU3RhcnQiLCJvblNwZWVjaEVuZCIsIm9uUmVzdWx0Iiwib25FcnJvciIsIm9uTm9NYXRjaCIsImJ1dHRvblJlZiIsInVzZVN0YXRlIiwiaXNMaXN0ZW5pbmciLCJzZXRJc0xpc3RlbmluZyIsIl9vbkVuZCIsInN0b3BUaW1lciIsInN0b3BSZWNvZ25pdGlvbiIsIl9vblN0YXJ0IiwiX29uU3BlZWNoU3RhcnQiLCJfb25TcGVlY2hFbmQiLCJfb25SZXN1bHQiLCJfb25FcnJvciIsIl9vbk5vTWF0Y2giLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwidXNlVGltZW91dCIsInN0YXJ0VGltZXIiLCJzdGFydFJlY29nbml0aW9uIiwiX29uQ2xpY2siLCJfb25Gb2N1cyIsIm91dGxpbmUiLCJfb25CbHVyIiwicmVzdWx0IiwiaXNWYWxpZEVsZW1lbnQiLCJjbG9uZUVsZW1lbnQiLCJvbkNsaWNrIiwicm9sZSIsImJhY2tncm91bmQiLCJib3JkZXIiLCJwYWRkaW5nIiwiY3Vyc29yIiwib25Gb2N1cyIsIm9uQmx1ciIsImljb25Db2xvciIsIl9yZW5kZXJDaGlsZHJlbiIsIm9iamVjdCIsIm51bWJlciIsImZ1bmMiXSwibWFwcGluZ3MiOiJzeEVBQUEsU0FBU0EsRUFBRUEsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsR0FBRyxJQUFJLElB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 | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["exports","react","prop-types"],t):t((e=e||self)["react-vocal"]={},e.React,e.PropTypes)}(this,(function(e,t,n){"use strict";var r="default"in t?t.default:t;function o(e,t,n,r,o,i,a){try{var c=e[i](a),u=c.value}catch(e){return void n(e)}c.done?t(u):Promise.resolve(u).then(r,o)}function i(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)}}function a(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),e}function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(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 s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?u(Object(n),!0).forEach((function(t){c(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,o=!1,i=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return n}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return f(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return f(e,t)}(e,t)||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 f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function p(e,t,n,r,o,i,a){try{var c=e[i](a),u=c.value}catch(e){return void n(e)}c.done?t(u):Promise.resolve(u).then(r,o)}function h(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){p(i,r,o,a,c,"next",e)}function c(e){p(i,r,o,a,c,"throw",e)}a(void 0)}))}}function v(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return n}}(e,t)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e,t)||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 d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}n=n&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n;var m=function(){var e=h(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=h(regeneratorRuntime.mark((function e(n,r){var o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.permissions){e.next=4;break}r(new DOMException("Permissions not supported","NOT_FOUND_ERR")),e.next=16;break;case 4:return e.prev=4,e.next=7,navigator.permissions.query({name:t});case 7:o=e.sent,i=function e(t){o.removeEventListener("change",e),y(t.target.state,n,r)},o.addEventListener("change",i),y(o.state,n,r),e.next=16;break;case 13:e.prev=13,e.t0=e.catch(4),r(e.t0);case 16:case"end":return e.stop()}}),e,null,[[4,13]])})));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)}}(),y=function(e,t,n){switch(e){case"denied":n(new DOMException("Permission denied","NOT_ALLOWED_ERR"));break;default:t(e)}},b=function(){var e=h(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=h(regeneratorRuntime.mark((function e(r,o){var i,a,c;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.mediaDevices){e.next=4;break}o(new DOMException("MediaDevices not supported","NOT_FOUND_ERR")),e.next=24;break;case 4:return e.prev=4,e.t0=Promise,e.next=8,m(t);case 8:return e.t1=e.sent,e.next=11,navigator.mediaDevices.getUserMedia(n);case 11:return e.t2=e.sent,e.t3=[e.t1,e.t2],e.next=15,e.t0.all.call(e.t0,e.t3);case 15:i=e.sent,a=v(i,2),c=a[1],r(c),e.next=24;break;case 21:e.prev=21,e.t4=e.catch(4),o(e.t4);case 24:case"end":return e.stop()}}),e,null,[[4,21]])})));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)}}(),g=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),c(this,"_instance",null),c(this,"_listeners",null);var r=e._resolveSpeechRecognition()||{};this._instance=new r,this._listeners={},Object.entries(s(s({},e.defaultOptions),t||{})).forEach((function(t){var r=l(t,2),o=r[0],i=r[1];"grammars"!==o||i||(i=new(e._resolveSpeechGrammarList()||{}));n._instance[o]=i}))}var t,n;return a(e,null,[{key:"isSupported",get:function(){return!!e._resolveSpeechRecognition()},set:function(e){throw new Error("You cannot set isSupported directly.")}}]),a(e,[{key:"start",value:(t=regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.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,b("microphone",{audio:!0});case 4:if(e.sent){e.next=7;break}throw new 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]])})),n=function(){var e=this,n=arguments;return new Promise((function(r,i){var a=t.apply(e,n);function c(e){o(a,r,i,c,u,"next",e)}function u(e){o(a,r,i,c,u,"throw",e)}c(void 0)}))},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,n){var r=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),n&&n.apply(r,[].concat(i,[o]))};this._instance.addEventListener(t,o),this._listeners[t]=o}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 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}();c(g,"defaultOptions",{grammars:null,lang:"en-US",continuous:!1,interimResults:!1,maxAlternatives:1,serviceURI:null}),c(g,"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 w=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"en-US",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o=t.useRef(null);t.useEffect((function(){if(g.isSupported)return o.current=r||new g({lang:e,grammars:n}),function(){o.current.abort(),o.current.cleanup()}}),[e,n,r]);var i=t.useCallback((function(){o.current&&o.current.start()}),[]),a=t.useCallback((function(){o.current&&o.current.stop()}),[]),c=t.useCallback((function(){o.current&&o.current.abort()}),[]),u=t.useCallback((function(e,t){o.current&&o.current.addEventListener(e,t)}),[]),s=t.useCallback((function(e,t){o.current&&o.current.removeEventListener(e,t)}),[]),l=t.useCallback((function(){o.current&&o.current.cleanup()}),[]);return[o,{start:i,stop:a,abort:c,subscribe:u,unsubscribe:s,clean:l}]},S=function(e){var t=e.color,n=e.activeColor,o=e.isActive;return r.createElement("svg",{"data-testid":"__icon-root__",xmlns:"http://www.w3.org/2000/svg",width:"100%",height:"100%",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{"data-testid":"__icon-path__",fill:t,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"}),o&&r.createElement("circle",{"data-testid":"__icon-active__",fill:n,cx:"16",cy:"4",r:"4"})))};S.propTypes={color:n.string,activeColor:n.string,isActive:n.bool},S.defaultProps={color:"black",activeColor:"red",isActive:!1};var _=function(e){var n=e.children,o=e.lang,i=e.grammars,a=e.timeout,c=e.ariaLabel,u=e.style,f=e.className,p=e.outlineStyle,h=e.onStart,v=e.onEnd,d=e.onSpeechStart,m=e.onSpeechEnd,y=e.onResult,b=e.onError,_=e.onNoMatch,E=e.__rsInstance,O=t.useRef(null),k=l(t.useState(!1),2),R=k[0],x=k[1],j=l(w(o,i,E),2)[1],T=j.start,P=j.stop,A=j.subscribe,L=j.unsubscribe,D=function e(t){U(),I(),L("start",q),L("end",e),L("speechstart",F),L("speechend",V),L("result",B),L("error",Y),L("nomatch",$),v&&v(t)},C=l(function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=t.useRef(-1),o=t.useCallback((function(){clearTimeout(r.current),r.current=-1}),[]),i=t.useCallback((function(){o(),r.current=setTimeout(e,n)}),[e,n,o]);return t.useEffect((function(){return o}),[o]),[i,o]}(D,a),2),N=C[0],U=C[1],M=function(){try{x(!0),A("start",q),A("end",D),A("speechstart",F),A("speechend",V),A("result",B),A("error",Y),A("nomatch",$),T()}catch(e){Y(e)}},I=function(){try{x(!1),P()}catch(e){b&&b(e)}},G=function(){M()},z=function(){!f&&p&&(O.current.style.outline=p)},H=function(){!f&&p&&(O.current.style.outline="none")},q=function(e){N(),h&&h(e)},F=function(e){U(),d&&d(e)},V=function(e){N(),m&&m(e)},B=function(e,t){U(),I(),y&&y(e,t)},Y=function(e){I(),b&&b(e)},$=function(e){U(),I(),_&&_(e)};return function(e){return g.isSupported?"function"==typeof e?e(M,I,R):t.isValidElement(e)?t.cloneElement(e,s({},!R&&{onClick:G})):r.createElement("button",{"data-testid":"__vocal-root__",ref:O,role:"button","aria-label":c,style:f?null:s({width:24,height:24,background:"none",border:"none",padding:0,cursor:R?"default":"pointer"},u),className:f,onFocus:z,onBlur:H,onClick:G},r.createElement(S,{isActive:R,iconColor:"#aaa"})):null}(n)};_.propTypes={lang:n.string,grammars:n.object,timeout:n.number,ariaLabel:n.string,style:n.object,className:n.string,outlineStyle:n.string,onStart:n.func,onEnd:n.func,onSpeechStart:n.func,onSpeechEnd:n.func,onResult:n.func,onError:n.func,onNoMatch:n.func},_.defaultProps={lang:"en-US",grammars:null,timeout:3e3,ariaLabel:"start recognition",style:null,className:null,outlineStyle:"2px solid",onStart:null,onEnd:null,onSpeechStart:null,onSpeechEnd:null,onResult:null,onError:null,onNoMatch:null};var E=g.isSupported;e.default=_,e.isSupported=E,e.useVocal=w,Object.defineProperty(e,"__esModule",{value:!0})})); | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgudW1kLmpzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvQHVudGVtcHMvdXNlci1wZXJtaXNzaW9ucy11dGlscy9kaXN0L2luZGV4LmVzLmpzIiwiLi4vc3JjL2NvcmUvU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmpzIiwiLi4vc3JjL2hvb2tzL3VzZVZvY2FsLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvSWNvbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1ZvY2FsLmpzIiwiLi4vc3JjL2hvb2tzL3VzZVRpbWVvdXQuanMiLCIuLi9zcmMvdXRpbHMvaXNGdW5jLmpzIiwiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGUoZSxyLHQsbixhLGksbyl7dHJ5e3ZhciB1PWVbaV0obyksYz11LnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHQoZSl9dS5kb25lP3IoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiByKHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihhLGkpe3ZhciBvPXIuYXBwbHkodCxuKTtmdW5jdGlvbiB1KHIpe2UobyxhLGksdSxjLFwibmV4dFwiLHIpfWZ1bmN0aW9uIGMocil7ZShvLGEsaSx1LGMsXCJ0aHJvd1wiLHIpfXUodm9pZCAwKX0pKX19ZnVuY3Rpb24gdChlLHIpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxyKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgU3ltYm9sfHwhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSkpKXJldHVybjt2YXIgdD1bXSxuPSEwLGE9ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbyx1PWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz11Lm5leHQoKSkuZG9uZSkmJih0LnB1c2goby52YWx1ZSksIXJ8fHQubGVuZ3RoIT09cik7bj0hMCk7fWNhdGNoKGUpe2E9ITAsaT1lfWZpbmFsbHl7dHJ5e258fG51bGw9PXUucmV0dXJufHx1LnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBpfX1yZXR1cm4gdH0oZSxyKXx8ZnVuY3Rpb24oZSxyKXtpZighZSlyZXR1cm47aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG4oZSxyKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7XCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSk7aWYoXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKGUpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gbihlLHIpfShlLHIpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gbihlLHIpeyhudWxsPT1yfHxyPmUubGVuZ3RoKSYmKHI9ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLG49bmV3IEFycmF5KHIpO3Q8cjt0Kyspblt0XT1lW3RdO3JldHVybiBufXZhciBhPWZ1bmN0aW9uKCl7dmFyIGU9cihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZSh0KXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdChcInJldHVyblwiLG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGU9cihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZShyLG4pe3ZhciBhLG87cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihuYXZpZ2F0b3IucGVybWlzc2lvbnMpe2UubmV4dD00O2JyZWFrfW4obmV3IERPTUV4Y2VwdGlvbihcIlBlcm1pc3Npb25zIG5vdCBzdXBwb3J0ZWRcIixcIk5PVF9GT1VORF9FUlJcIikpLGUubmV4dD0xNjticmVhaztjYXNlIDQ6cmV0dXJuIGUucHJldj00LGUubmV4dD03LG5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7bmFtZTp0fSk7Y2FzZSA3OmE9ZS5zZW50LG89ZnVuY3Rpb24gZSh0KXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixlKSxpKHQudGFyZ2V0LnN0YXRlLHIsbil9LGEuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLG8pLGkoYS5zdGF0ZSxyLG4pLGUubmV4dD0xNjticmVhaztjYXNlIDEzOmUucHJldj0xMyxlLnQwPWUuY2F0Y2goNCksbihlLnQwKTtjYXNlIDE2OmNhc2VcImVuZFwiOnJldHVybiBlLnN0b3AoKX19KSxlLG51bGwsW1s0LDEzXV0pfSkpKTtyZXR1cm4gZnVuY3Rpb24ocix0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSk7Y2FzZSAxOmNhc2VcImVuZFwiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksaT1mdW5jdGlvbihlLHIsdCl7c3dpdGNoKGUpe2Nhc2VcImRlbmllZFwiOnQobmV3IERPTUV4Y2VwdGlvbihcIlBlcm1pc3Npb24gZGVuaWVkXCIsXCJOT1RfQUxMT1dFRF9FUlJcIikpO2JyZWFrO2RlZmF1bHQ6cihlKX19LG89ZnVuY3Rpb24oKXt2YXIgZT1yKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKG4saSl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoXCJyZXR1cm5cIixuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBlPXIocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUocixvKXt2YXIgdSxjLHM7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihuYXZpZ2F0b3IubWVkaWFEZXZpY2VzKXtlLm5leHQ9NDticmVha31vKG5ldyBET01FeGNlcHRpb24oXCJNZWRpYURldmljZXMgbm90IHN1cHBvcnRlZFwiLFwiTk9UX0ZPVU5EX0VSUlwiKSksZS5uZXh0PTI0O2JyZWFrO2Nhc2UgNDpyZXR1cm4gZS5wcmV2PTQsZS50MD1Qcm9taXNlLGUubmV4dD04LGEobik7Y2FzZSA4OnJldHVybiBlLnQxPWUuc2VudCxlLm5leHQ9MTEsbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoaSk7Y2FzZSAxMTpyZXR1cm4gZS50Mj1lLnNlbnQsZS50Mz1bZS50MSxlLnQyXSxlLm5leHQ9MTUsZS50MC5hbGwuY2FsbChlLnQwLGUudDMpO2Nhc2UgMTU6dT1lLnNlbnQsYz10KHUsMikscz1jWzFdLHIocyksZS5uZXh0PTI0O2JyZWFrO2Nhc2UgMjE6ZS5wcmV2PTIxLGUudDQ9ZS5jYXRjaCg0KSxvKGUudDQpO2Nhc2UgMjQ6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzQsMjFdXSl9KSkpO3JldHVybiBmdW5jdGlvbihyLHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKTtjYXNlIDE6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKTtyZXR1cm4gZnVuY3Rpb24ocix0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpO2V4cG9ydHthIGFzIGdldFBlcm1pc3Npb24sbyBhcyBnZXRVc2VyTWVkaWFTdHJlYW19O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndVpYTXVhbk1pTENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5blpYUlFaWEp0YVhOemFXOXVMbXB6SWl3aUxpNHZjM0pqTDJkbGRGVnpaWEpOWldScFlWTjBjbVZoYlM1cWN5SmRMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRkpsZEhWeWJuTWdZU0J3Y205dGFYTmxJSEpsYzI5c2RtVmtJSGRvWlc0Z2RHaGxJSEJsY20xcGMzTnBiMjRnYVhNZ1ozSmhiblJsWkNCaWVTQjBhR1VnZFhObGNseHVJQ29nUUhCaGNtRnRJSEJsY20xcGMzTnBiMjVPWVcxbElDQWdJQ0FnSUNBZ0lDQWdUbUZ0WlNCdlppQjBhR1VnY0dWeWJXbHpjMmx2Ymk0Z1FITmxaU0JvZEhSd2N6b3ZMM2N6WXk1bmFYUm9kV0l1YVc4dmNHVnliV2x6YzJsdmJuTXZJMlZ1ZFcxa1pXWXRjR1Z5YldsemMybHZibTVoYldWY2JpQXFJRUJ5WlhSMWNtNXpJSHRRY205dGFYTmxmVnh1SUNvdlhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCaGMzbHVZeUFvY0dWeWJXbHpjMmx2Yms1aGJXVXBJRDArSUh0Y2JseDBjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLR0Z6ZVc1aklDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmx4MFhIUnBaaUFvSVc1aGRtbG5ZWFJ2Y2k1d1pYSnRhWE56YVc5dWN5a2dlMXh1WEhSY2RGeDBjbVZxWldOMEtHNWxkeUJFVDAxRmVHTmxjSFJwYjI0b0oxQmxjbTFwYzNOcGIyNXpJRzV2ZENCemRYQndiM0owWldRbkxDQW5UazlVWDBaUFZVNUVYMFZTVWljcEtWeHVYSFJjZEgwZ1pXeHpaU0I3WEc1Y2RGeDBYSFIwY25rZ2UxeHVYSFJjZEZ4MFhIUmpiMjV6ZENCd1pYSnRhWE56YVc5dVUzUmhkSFZ6SUQwZ1lYZGhhWFFnYm1GMmFXZGhkRzl5TG5CbGNtMXBjM05wYjI1ekxuRjFaWEo1S0hzZ2JtRnRaVG9nY0dWeWJXbHpjMmx2Yms1aGJXVWdmU2xjYmx4MFhIUmNkRngwWTI5dWMzUWdiMjVEYUdGdVoyVWdQU0FvWlhabGJuUXBJRDArSUh0Y2JseDBYSFJjZEZ4MFhIUndaWEp0YVhOemFXOXVVM1JoZEhWekxuSmxiVzkyWlVWMlpXNTBUR2x6ZEdWdVpYSW9KMk5vWVc1blpTY3NJRzl1UTJoaGJtZGxLVnh1WEhSY2RGeDBYSFJjZEhKbGMyOXNkbVZQY2xKbGFtVmpkRUpoYzJWa1QyNVRkR0YwWlNobGRtVnVkQzUwWVhKblpYUXVjM1JoZEdVc0lISmxjMjlzZG1Vc0lISmxhbVZqZENsY2JseDBYSFJjZEZ4MGZWeHVYSFJjZEZ4MFhIUndaWEp0YVhOemFXOXVVM1JoZEhWekxtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb0oyTm9ZVzVuWlNjc0lHOXVRMmhoYm1kbEtWeHVYSFJjZEZ4MFhIUnlaWE52YkhabFQzSlNaV3BsWTNSQ1lYTmxaRTl1VTNSaGRHVW9jR1Z5YldsemMybHZibE4wWVhSMWN5NXpkR0YwWlN3Z2NtVnpiMngyWlN3Z2NtVnFaV04wS1Z4dVhIUmNkRngwZlNCallYUmphQ0FvWlhKeWIzSXBJSHRjYmx4MFhIUmNkRngwY21WcVpXTjBLR1Z5Y205eUtWeHVYSFJjZEZ4MGZWeHVYSFJjZEgxY2JseDBmU2xjYm4xY2JseHVZMjl1YzNRZ2NtVnpiMngyWlU5eVVtVnFaV04wUW1GelpXUlBibE4wWVhSbElEMGdLSE4wWVhSbExDQnlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmx4MGMzZHBkR05vSUNoemRHRjBaU2tnZTF4dVhIUmNkR05oYzJVZ0oyUmxibWxsWkNjNlhHNWNkRngwWEhSeVpXcGxZM1FvYm1WM0lFUlBUVVY0WTJWd2RHbHZiaWduVUdWeWJXbHpjMmx2YmlCa1pXNXBaV1FuTENBblRrOVVYMEZNVEU5WFJVUmZSVkpTSnlrcFhHNWNkRngwWEhSaWNtVmhhMXh1WEhSY2RHUmxabUYxYkhRNlhHNWNkRngwWEhSeVpYTnZiSFpsS0hOMFlYUmxLVnh1WEhSOVhHNTlYRzRpTENKcGJYQnZjblFnWjJWMFVHVnliV2x6YzJsdmJpQm1jbTl0SUNjdUwyZGxkRkJsY20xcGMzTnBiMjRuWEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCaElIQnliMjFwYzJVZ2NtVnpiMngyWldRZ2QyaGxiaUIwYUdVZ2NHVnliV2x6YzJsdmJpQnBjeUJuY21GdWRHVmtJR0o1SUhSb1pTQjFjMlZ5SUdGdVpDQjBhR1VnYzNSeVpXRnRJR2x6SUhKbGRISnBaWFpsWkZ4dUlDb2dRSEJoY21GdElIQmxjbTFwYzNOcGIyNU9ZVzFsSUNBZ0lDQWdJQ0FnSUNBZ1RtRnRaU0J2WmlCMGFHVWdjR1Z5YldsemMybHZiaTRnUUhObFpTQm9kSFJ3Y3pvdkwzY3pZeTVuYVhSb2RXSXVhVzh2Y0dWeWJXbHpjMmx2Ym5NdkkyVnVkVzFrWldZdGNHVnliV2x6YzJsdmJtNWhiV1ZjYmlBcUlFQndZWEpoYlNCdFpXUnBZVk4wY21WaGJVTnZibk4wY21GcGJuUnpJQ0FnSUVOdmJuTjBjbUZwYm5SeklHOWlhbVZqZEM0Z1FITmxaU0JvZEhSd2N6b3ZMMlJsZG1Wc2IzQmxjaTV0YjNwcGJHeGhMbTl5Wnk5bGJpMVZVeTlrYjJOekwxZGxZaTlCVUVrdlRXVmthV0ZUZEhKbFlXMURiMjV6ZEhKaGFXNTBjMXh1SUNvZ1FISmxkSFZ5Ym5NZ2UxQnliMjFwYzJWOVhHNGdLaTljYm1WNGNHOXlkQ0JrWldaaGRXeDBJR0Z6ZVc1aklDaHdaWEp0YVhOemFXOXVUbUZ0WlN3Z2JXVmthV0ZUZEhKbFlXMURiMjV6ZEhKaGFXNTBjeWtnUFQ0Z2UxeHVYSFJ5WlhSMWNtNGdibVYzSUZCeWIyMXBjMlVvWVhONWJtTWdLSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dVhIUmNkR2xtSUNnaGJtRjJhV2RoZEc5eUxtMWxaR2xoUkdWMmFXTmxjeWtnZTF4dVhIUmNkRngwY21WcVpXTjBLRzVsZHlCRVQwMUZlR05sY0hScGIyNG9KMDFsWkdsaFJHVjJhV05sY3lCdWIzUWdjM1Z3Y0c5eWRHVmtKeXdnSjA1UFZGOUdUMVZPUkY5RlVsSW5LU2xjYmx4MFhIUjlJR1ZzYzJVZ2UxeHVYSFJjZEZ4MGRISjVJSHRjYmx4MFhIUmNkRngwWTI5dWMzUWdXeXdnYzNSeVpXRnRYU0E5SUdGM1lXbDBJRkJ5YjIxcGMyVXVZV3hzS0Z0Y2JseDBYSFJjZEZ4MFhIUmhkMkZwZENCblpYUlFaWEp0YVhOemFXOXVLSEJsY20xcGMzTnBiMjVPWVcxbEtTeGNibHgwWEhSY2RGeDBYSFJoZDJGcGRDQnVZWFpwWjJGMGIzSXViV1ZrYVdGRVpYWnBZMlZ6TG1kbGRGVnpaWEpOWldScFlTaHRaV1JwWVZOMGNtVmhiVU52Ym5OMGNtRnBiblJ6S1N4Y2JseDBYSFJjZEZ4MFhTbGNibHgwWEhSY2RGeDBjbVZ6YjJ4MlpTaHpkSEpsWVcwcFhHNWNkRngwWEhSOUlHTmhkR05vSUNobGNuSnZjaWtnZTF4dVhIUmNkRngwWEhSeVpXcGxZM1FvWlhKeWIzSXBYRzVjZEZ4MFhIUjlYRzVjZEZ4MGZWeHVYSFI5S1Z4dWZWeHVJbDBzSW01aGJXVnpJanBiSW5CbGNtMXBjM05wYjI1T1lXMWxJaXdpVUhKdmJXbHpaU0lzSW5KbGMyOXNkbVVpTENKeVpXcGxZM1FpTENKdVlYWnBaMkYwYjNJaUxDSndaWEp0YVhOemFXOXVjeUlzSWtSUFRVVjRZMlZ3ZEdsdmJpSXNJbkYxWlhKNUlpd2libUZ0WlNJc0luQmxjbTFwYzNOcGIyNVRkR0YwZFhNaUxDSnZia05vWVc1blpTSXNJbVYyWlc1MElpd2ljbVZ0YjNabFJYWmxiblJNYVhOMFpXNWxjaUlzSW5KbGMyOXNkbVZQY2xKbGFtVmpkRUpoYzJWa1QyNVRkR0YwWlNJc0luUmhjbWRsZENJc0luTjBZWFJsSWl3aVlXUmtSWFpsYm5STWFYTjBaVzVsY2lJc0ltMWxaR2xoVTNSeVpXRnRRMjl1YzNSeVlXbHVkSE1pTENKdFpXUnBZVVJsZG1salpYTWlMQ0puWlhSUVpYSnRhWE56YVc5dUlpd2laMlYwVlhObGNrMWxaR2xoSWl3aVlXeHNJaXdpYzNSeVpXRnRJbDBzSW0xaGNIQnBibWR6SWpvaWJYZERRVXRCTEd0RVFVRmxMRmRCUVU5QkxEUkhRVU5rTEVsQlFVbERMRzlFUVVGUkxGZEJRVTlETEVWQlFWTkRMRGhHUVVNM1FrTXNWVUZCVlVNc05FSkJRMlJHTEVWQlFVOHNTVUZCU1Vjc1lVRkJZU3cwUWtGQk5rSXNhMFZCUjNKQ1JpeFZRVUZWUXl4WlFVRlpSU3hOUVVGTkxFTkJRVVZETEV0QlFVMVNMRmRCUVRkRVV5eFRRVU5CUXl4RlFVRlhMRk5CUVZoQkxFVkJRVmxETEVkQlEycENSaXhGUVVGcFFrY3NiMEpCUVc5Q0xGTkJRVlZHTEVkQlF5OURSeXhGUVVFMFFrWXNSVUZCVFVjc1QwRkJUME1zVFVGQlQySXNSVUZCVTBNc1NVRkZNVVJOTEVWQlFXbENUeXhwUWtGQmFVSXNVMEZCVlU0c1IwRkROVU5ITEVWQlFUUkNTaXhGUVVGcFFrMHNUVUZCVDJJc1JVRkJVME1zY1VSQlJUZEVRU3cyVGtGTlJWVXNSVUZCT0VJc1UwRkJRMFVzUlVGQlQySXNSVUZCVTBNc1ZVRkROVU5aTEU5QlEwWXNVMEZEU2xvc1JVRkJUeXhKUVVGSlJ5eGhRVUZoTEc5Q1FVRnhRaXhyUTBGSE4wTktMRVZCUVZGaExHMUVRM1pDU1N4WFFVRlBaaXhGUVVGblFtbENMRFJIUVVNNVFpeEpRVUZKYUVJc2IwUkJRVkVzVjBGQlQwTXNSVUZCVTBNc1owZEJRemRDUXl4VlFVRlZZeXcyUWtGRFpHWXNSVUZCVHl4SlFVRkpSeXhoUVVGaExEWkNRVUU0UWl3NFJFRkhOVUpNTEdsQ1FVTnNRbXRDTEVWQlFXTnVRaXgxUTBGRFpFa3NWVUZCVldNc1lVRkJZVVVzWVVGQllVZ3NPRVJCUmxaSkxEaERRVUY0UWtNc1QwRkpWSEJDTEVWQlFWRnZRaXh4UkVGRlVtNUNJbjA9XG4iLCJpbXBvcnQgeyBnZXRVc2VyTWVkaWFTdHJlYW0gfSBmcm9tICdAdW50ZW1wcy91c2VyLXBlcm1pc3Npb25zLXV0aWxzJ1xuXG5jbGFzcyBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIge1xuXHRzdGF0aWMgZGVmYXVsdE9wdGlvbnMgPSB7XG5cdFx0Z3JhbW1hcnM6IG51bGwsXG5cdFx0bGFuZzogJ2VuLVVTJyxcblx0XHRjb250aW51b3VzOiBmYWxzZSxcblx0XHRpbnRlcmltUmVzdWx0czogZmFsc2UsXG5cdFx0bWF4QWx0ZXJuYXRpdmVzOiAxLFxuXHRcdHNlcnZpY2VVUkk6IG51bGwsXG5cdH1cblxuXHRzdGF0aWMgZXZlbnRUeXBlcyA9IHtcblx0XHRBVURJT19FTkQ6ICdhdWRpb2VuZCcsXG5cdFx0QVVESU9fU1RBUlQ6ICdhdWRpb3N0YXJ0Jyxcblx0XHRFTkQ6ICdlbmQnLFxuXHRcdEVSUk9SOiAnZXJyb3InLFxuXHRcdE5PX01BVENIOiAnbm9tYXRjaCcsXG5cdFx0UkVTVUxUOiAncmVzdWx0Jyxcblx0XHRTT1VORF9FTkQ6ICdzb3VuZGVuZCcsXG5cdFx0U09VTkRfU1RBUlQ6ICdzb3VuZHN0YXJ0Jyxcblx0XHRTUEVFQ0hfRU5EOiAnc3BlZWNoZW5kJyxcblx0XHRTUEVFQ0hfU1RBUlQ6ICdzcGVlY2hzdGFydCcsXG5cdFx0U1RBUlQ6ICdzdGFydCcsXG5cdH1cblxuXHRzdGF0aWMgZ2V0IGlzU3VwcG9ydGVkKCkge1xuXHRcdHJldHVybiAhIVNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5fcmVzb2x2ZVNwZWVjaFJlY29nbml0aW9uKClcblx0fVxuXG5cdHN0YXRpYyBzZXQgaXNTdXBwb3J0ZWQoXykge1xuXHRcdHRocm93IG5ldyBFcnJvcignWW91IGNhbm5vdCBzZXQgaXNTdXBwb3J0ZWQgZGlyZWN0bHkuJylcblx0fVxuXG5cdF9pbnN0YW5jZSA9IG51bGxcblx0X2xpc3RlbmVycyA9IG51bGxcblxuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0Y29uc3QgU3BlZWNoUmVjb2duaXRpb24gPSBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuX3Jlc29sdmVTcGVlY2hSZWNvZ25pdGlvbigpIHx8IHt9XG5cdFx0dGhpcy5faW5zdGFuY2UgPSBuZXcgU3BlZWNoUmVjb2duaXRpb24oKVxuXHRcdHRoaXMuX2xpc3RlbmVycyA9IHt9XG5cblx0XHRPYmplY3QuZW50cmllcyh7XG5cdFx0XHQuLi5TcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuZGVmYXVsdE9wdGlvbnMsXG5cdFx0XHQuLi4ob3B0aW9ucyB8fCB7fSksXG5cdFx0fSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG5cdFx0XHRpZiAoa2V5ID09PSAnZ3JhbW1hcnMnICYmICF2YWx1ZSkge1xuXHRcdFx0XHRjb25zdCBTcGVlY2hHcmFtbWFyTGlzdCA9IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5fcmVzb2x2ZVNwZWVjaEdyYW1tYXJMaXN0KCkgfHwge31cblx0XHRcdFx0dmFsdWUgPSBuZXcgU3BlZWNoR3JhbW1hckxpc3QoKVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5faW5zdGFuY2Vba2V5XSA9IHZhbHVlXG5cdFx0fSlcblx0fVxuXG5cdGdldCBpbnN0YW5jZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5zdGFuY2Vcblx0fVxuXG5cdHNldCBpbnN0YW5jZShfKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IHNldCBpbnN0YW5jZSBkaXJlY3RseS4nKVxuXHR9XG5cblx0YXN5bmMgc3RhcnQoKSB7XG5cdFx0aWYgKCEhdGhpcy5faW5zdGFuY2UpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHN0cmVhbSA9IGF3YWl0IGdldFVzZXJNZWRpYVN0cmVhbSgnbWljcm9waG9uZScsIHsgYXVkaW86IHRydWUgfSlcblx0XHRcdFx0aWYgKCFzdHJlYW0pIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZXRyaWV2ZSB0aGUgc3RyZWFtIGZyb20gbWVkaWEgZGV2aWNlJylcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9pbnN0YW5jZS5zdGFydCgpXG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLl9saXN0ZW5lcnMuZXJyb3Jcblx0XHRcdFx0aWYgKCEhZXJyb3JIYW5kbGVyKSB7XG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyKGVycm9yKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdHN0b3AoKSB7XG5cdFx0aWYgKCEhdGhpcy5faW5zdGFuY2UpIHtcblx0XHRcdHRoaXMuX2luc3RhbmNlLnN0b3AoKVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRhYm9ydCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dGhpcy5faW5zdGFuY2UuYWJvcnQoKVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRhZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2spIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSAmJiB0aGlzLl9pbmNsdWRlc0V2ZW50VHlwZShldmVudFR5cGUpKSB7XG5cdFx0XHRpZiAoISF0aGlzLl9saXN0ZW5lcnNbZXZlbnRUeXBlXSkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBoYW5kbGVyID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGxldCBhZGRpdGlvbmFsQXJncyA9IFtdXG5cdFx0XHRcdGlmIChldmVudFR5cGUgPT09IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5ldmVudFR5cGVzLlJFU1VMVCkge1xuXHRcdFx0XHRcdGlmICghIWV2ZW50LnJlc3VsdHMgJiYgZXZlbnQucmVzdWx0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRhZGRpdGlvbmFsQXJncy5wdXNoKGV2ZW50LnJlc3VsdHNbMF1bMF0udHJhbnNjcmlwdClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQhIWNhbGxiYWNrICYmIGNhbGxiYWNrLmFwcGx5KHRoaXMsIFsuLi5hZGRpdGlvbmFsQXJncywgZXZlbnRdKVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5faW5zdGFuY2UuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIpXG5cblx0XHRcdHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdID0gaGFuZGxlclxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRyZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSkge1xuXHRcdGNvbnN0IGhhbmRsZXIgPSB0aGlzLl9saXN0ZW5lcnNbZXZlbnRUeXBlXVxuXHRcdHRoaXMuX2luc3RhbmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyKVxuXG5cdFx0ZGVsZXRlIHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdXG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0Y2xlYW51cCgpIHtcblx0XHR0aGlzLnN0b3AoKVxuXG5cdFx0T2JqZWN0LmtleXModGhpcy5fbGlzdGVuZXJzKS5mb3JFYWNoKChrZXkpID0+IHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihrZXkpKVxuXHRcdHRoaXMuX2luc3RhbmNlID0gbnVsbFxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdF9pbmNsdWRlc0V2ZW50VHlwZShldmVudFR5cGUpIHtcblx0XHRyZXR1cm4gISFPYmplY3QudmFsdWVzKFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5ldmVudFR5cGVzKS5maW5kKCh0eXBlKSA9PiB0eXBlID09PSBldmVudFR5cGUpXG5cdH1cblxuXHRzdGF0aWMgX3Jlc29sdmVTcGVlY2hSZWNvZ25pdGlvbigpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0d2luZG93LlNwZWVjaFJlY29nbml0aW9uIHx8XG5cdFx0XHR3aW5kb3cud2Via2l0U3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdHdpbmRvdy5tb3pTcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0d2luZG93Lm1zU3BlZWNoUmVjb2duaXRpb25cblx0XHQpXG5cdH1cblxuXHRzdGF0aWMgX3Jlc29sdmVTcGVlY2hHcmFtbWFyTGlzdCgpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0d2luZG93LlNwZWVjaEdyYW1tYXJMaXN0IHx8XG5cdFx0XHR3aW5kb3cud2Via2l0U3BlZWNoR3JhbW1hckxpc3QgfHxcblx0XHRcdHdpbmRvdy5tb3pTcGVlY2hHcmFtbWFyTGlzdCB8fFxuXHRcdFx0d2luZG93Lm1zU3BlZWNoR3JhbW1hckxpc3Rcblx0XHQpXG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyXG4iLCJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlciBmcm9tICcuLi9jb3JlL1NwZWVjaFJlY29nbml0aW9uV3JhcHBlcidcblxuY29uc3QgdXNlVm9jYWwgPSAobGFuZyA9ICdlbi1VUycsIGdyYW1tYXJzID0gbnVsbCwgX19yc0luc3RhbmNlID0gbnVsbCkgPT4ge1xuXHRjb25zdCByZWYgPSB1c2VSZWYobnVsbClcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuaXNTdXBwb3J0ZWQpIHtcblx0XHRcdHJlZi5jdXJyZW50ID0gX19yc0luc3RhbmNlIHx8IG5ldyBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIoeyBsYW5nLCBncmFtbWFycyB9KVxuXHRcdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdFx0cmVmLmN1cnJlbnQuYWJvcnQoKVxuXHRcdFx0XHRyZWYuY3VycmVudC5jbGVhbnVwKClcblx0XHRcdH1cblx0XHR9XG5cdH0sIFtsYW5nLCBncmFtbWFycywgX19yc0luc3RhbmNlXSlcblxuXHRjb25zdCBzdGFydCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRpZiAocmVmLmN1cnJlbnQpIHtcblx0XHRcdHJlZi5jdXJyZW50LnN0YXJ0KClcblx0XHR9XG5cdH0sIFtdKVxuXG5cdGNvbnN0IHN0b3AgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0aWYgKHJlZi5jdXJyZW50KSB7XG5cdFx0XHRyZWYuY3VycmVudC5zdG9wKClcblx0XHR9XG5cdH0sIFtdKVxuXG5cdGNvbnN0IGFib3J0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdGlmIChyZWYuY3VycmVudCkge1xuXHRcdFx0cmVmLmN1cnJlbnQuYWJvcnQoKVxuXHRcdH1cblx0fSwgW10pXG5cblx0Y29uc3Qgc3Vic2NyaWJlID0gdXNlQ2FsbGJhY2soKGV2ZW50VHlwZSwgaGFuZGxlcikgPT4ge1xuXHRcdGlmIChyZWYuY3VycmVudCkge1xuXHRcdFx0cmVmLmN1cnJlbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIpXG5cdFx0fVxuXHR9LCBbXSlcblxuXHRjb25zdCB1bnN1YnNjcmliZSA9IHVzZUNhbGxiYWNrKChldmVudFR5cGUsIGhhbmRsZXIpID0+IHtcblx0XHRpZiAocmVmLmN1cnJlbnQpIHtcblx0XHRcdHJlZi5jdXJyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyKVxuXHRcdH1cblx0fSwgW10pXG5cblx0Y29uc3QgY2xlYW4gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0aWYgKHJlZi5jdXJyZW50KSB7XG5cdFx0XHRyZWYuY3VycmVudC5jbGVhbnVwKClcblx0XHR9XG5cdH0sIFtdKVxuXG5cdHJldHVybiBbcmVmLCB7IHN0YXJ0LCBzdG9wLCBhYm9ydCwgc3Vic2NyaWJlLCB1bnN1YnNjcmliZSwgY2xlYW4gfV1cbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlVm9jYWxcblxuLy8gVE9ETzogUmV0dXJuIHRoZSBpbnN0YW5jZSwgbm90IHRoZSByZWZcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcblxuY29uc3QgSWNvbiA9ICh7IGNvbG9yLCBhY3RpdmVDb2xvciwgaXNBY3RpdmUgfSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxzdmdcblx0XHRcdGRhdGEtdGVzdGlkPVwiX19pY29uLXJvb3RfX1wiXG5cdFx0XHR4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcblx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRoZWlnaHQ9XCIxMDAlXCJcblx0XHRcdHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuXHRcdD5cblx0XHRcdDxnPlxuXHRcdFx0XHQ8cGF0aFxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiX19pY29uLXBhdGhfX1wiXG5cdFx0XHRcdFx0ZmlsbD17Y29sb3J9XG5cdFx0XHRcdFx0ZD1cIk0xMiAxNGMxLjY2IDAgMi45OS0xLjM0IDIuOTktM0wxNSA1YzAtMS42Ni0xLjM0LTMtMy0zUzkgMy4zNCA5IDV2NmMwIDEuNjYgMS4zNCAzIDMgM3ptNS4zLTNjMCAzLTIuNTQgNS4xLTUuMyA1LjFTNi43IDE0IDYuNyAxMUg1YzAgMy40MSAyLjcyIDYuMjMgNiA2LjcyVjIxaDJ2LTMuMjhjMy4yOC0uNDggNi0zLjMgNi02LjcyaC0xLjd6XCJcblx0XHRcdFx0Lz5cblx0XHRcdFx0e2lzQWN0aXZlICYmIDxjaXJjbGUgZGF0YS10ZXN0aWQ9XCJfX2ljb24tYWN0aXZlX19cIiBmaWxsPXthY3RpdmVDb2xvcn0gY3g9XCIxNlwiIGN5PVwiNFwiIHI9XCI0XCIgLz59XG5cdFx0XHQ8L2c+XG5cdFx0PC9zdmc+XG5cdClcbn1cblxuSWNvbi5wcm9wVHlwZXMgPSB7XG5cdGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRhY3RpdmVDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcblx0aXNBY3RpdmU6IFByb3BUeXBlcy5ib29sLFxufVxuXG5JY29uLmRlZmF1bHRQcm9wcyA9IHtcblx0Y29sb3I6ICdibGFjaycsXG5cdGFjdGl2ZUNvbG9yOiAncmVkJyxcblx0aXNBY3RpdmU6IGZhbHNlLFxufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uXG4iLCJpbXBvcnQgUmVhY3QsIHsgY2xvbmVFbGVtZW50LCBpc1ZhbGlkRWxlbWVudCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuXG5pbXBvcnQgU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyIGZyb20gJy4uL2NvcmUvU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyJ1xuXG5pbXBvcnQgaXNGdW5jIGZyb20gJy4uL3V0aWxzL2lzRnVuYydcblxuaW1wb3J0IHVzZVZvY2FsIGZyb20gJy4uL2hvb2tzL3VzZVZvY2FsJ1xuaW1wb3J0IHVzZVRpbWVvdXQgZnJvbSAnLi4vaG9va3MvdXNlVGltZW91dCdcblxuaW1wb3J0IEljb24gZnJvbSAnLi9JY29uJ1xuXG5jb25zdCBWb2NhbCA9ICh7XG5cdGNoaWxkcmVuLFxuXHRsYW5nLFxuXHRncmFtbWFycyxcblx0dGltZW91dCxcblx0YXJpYUxhYmVsLFxuXHRzdHlsZSxcblx0Y2xhc3NOYW1lLFxuXHRvdXRsaW5lU3R5bGUsXG5cdG9uU3RhcnQsXG5cdG9uRW5kLFxuXHRvblNwZWVjaFN0YXJ0LFxuXHRvblNwZWVjaEVuZCxcblx0b25SZXN1bHQsXG5cdG9uRXJyb3IsXG5cdG9uTm9NYXRjaCxcblx0X19yc0luc3RhbmNlLFxufSkgPT4ge1xuXHRjb25zdCBidXR0b25SZWYgPSB1c2VSZWYobnVsbClcblx0Y29uc3QgW2lzTGlzdGVuaW5nLCBzZXRJc0xpc3RlbmluZ10gPSB1c2VTdGF0ZShmYWxzZSlcblxuXHRjb25zdCBbLCB7IHN0YXJ0LCBzdG9wLCBzdWJzY3JpYmUsIHVuc3Vic2NyaWJlIH1dID0gdXNlVm9jYWwobGFuZywgZ3JhbW1hcnMsIF9fcnNJbnN0YW5jZSlcblxuXHRjb25zdCBfb25FbmQgPSAoZSkgPT4ge1xuXHRcdHN0b3BUaW1lcigpXG5cdFx0c3RvcFJlY29nbml0aW9uKClcblxuXHRcdHVuc3Vic2NyaWJlKCdzdGFydCcsIF9vblN0YXJ0KVxuXHRcdHVuc3Vic2NyaWJlKCdlbmQnLCBfb25FbmQpXG5cdFx0dW5zdWJzY3JpYmUoJ3NwZWVjaHN0YXJ0JywgX29uU3BlZWNoU3RhcnQpXG5cdFx0dW5zdWJzY3JpYmUoJ3NwZWVjaGVuZCcsIF9vblNwZWVjaEVuZClcblx0XHR1bnN1YnNjcmliZSgncmVzdWx0JywgX29uUmVzdWx0KVxuXHRcdHVuc3Vic2NyaWJlKCdlcnJvcicsIF9vbkVycm9yKVxuXHRcdHVuc3Vic2NyaWJlKCdub21hdGNoJywgX29uTm9NYXRjaClcblxuXHRcdCEhb25FbmQgJiYgb25FbmQoZSlcblx0fVxuXG5cdGNvbnN0IFtzdGFydFRpbWVyLCBzdG9wVGltZXJdID0gdXNlVGltZW91dChfb25FbmQsIHRpbWVvdXQpXG5cblx0Y29uc3Qgc3RhcnRSZWNvZ25pdGlvbiA9ICgpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0c2V0SXNMaXN0ZW5pbmcodHJ1ZSlcblxuXHRcdFx0c3Vic2NyaWJlKCdzdGFydCcsIF9vblN0YXJ0KVxuXHRcdFx0c3Vic2NyaWJlKCdlbmQnLCBfb25FbmQpXG5cdFx0XHRzdWJzY3JpYmUoJ3NwZWVjaHN0YXJ0JywgX29uU3BlZWNoU3RhcnQpXG5cdFx0XHRzdWJzY3JpYmUoJ3NwZWVjaGVuZCcsIF9vblNwZWVjaEVuZClcblx0XHRcdHN1YnNjcmliZSgncmVzdWx0JywgX29uUmVzdWx0KVxuXHRcdFx0c3Vic2NyaWJlKCdlcnJvcicsIF9vbkVycm9yKVxuXHRcdFx0c3Vic2NyaWJlKCdub21hdGNoJywgX29uTm9NYXRjaClcblxuXHRcdFx0c3RhcnQoKVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRfb25FcnJvcihlcnJvcilcblx0XHR9XG5cdH1cblxuXHRjb25zdCBzdG9wUmVjb2duaXRpb24gPSAoKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdHNldElzTGlzdGVuaW5nKGZhbHNlKVxuXG5cdFx0XHRzdG9wKClcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0ISFvbkVycm9yICYmIG9uRXJyb3IoZXJyb3IpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgX29uQ2xpY2sgPSAoKSA9PiB7XG5cdFx0c3RhcnRSZWNvZ25pdGlvbigpXG5cdH1cblxuXHRjb25zdCBfb25Gb2N1cyA9ICgpID0+IHtcblx0XHRpZiAoIWNsYXNzTmFtZSAmJiBvdXRsaW5lU3R5bGUpIHtcblx0XHRcdGJ1dHRvblJlZi5jdXJyZW50LnN0eWxlLm91dGxpbmUgPSBvdXRsaW5lU3R5bGVcblx0XHR9XG5cdH1cblxuXHRjb25zdCBfb25CbHVyID0gKCkgPT4ge1xuXHRcdGlmICghY2xhc3NOYW1lICYmIG91dGxpbmVTdHlsZSkge1xuXHRcdFx0YnV0dG9uUmVmLmN1cnJlbnQuc3R5bGUub3V0bGluZSA9ICdub25lJ1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IF9vblN0YXJ0ID0gKGUpID0+IHtcblx0XHRzdGFydFRpbWVyKClcblxuXHRcdCEhb25TdGFydCAmJiBvblN0YXJ0KGUpXG5cdH1cblxuXHRjb25zdCBfb25TcGVlY2hTdGFydCA9IChlKSA9PiB7XG5cdFx0c3RvcFRpbWVyKClcblxuXHRcdCEhb25TcGVlY2hTdGFydCAmJiBvblNwZWVjaFN0YXJ0KGUpXG5cdH1cblxuXHRjb25zdCBfb25TcGVlY2hFbmQgPSAoZSkgPT4ge1xuXHRcdHN0YXJ0VGltZXIoKVxuXG5cdFx0ISFvblNwZWVjaEVuZCAmJiBvblNwZWVjaEVuZChlKVxuXHR9XG5cblx0Y29uc3QgX29uUmVzdWx0ID0gKHJlc3VsdCwgZXZlbnQpID0+IHtcblx0XHRzdG9wVGltZXIoKVxuXHRcdHN0b3BSZWNvZ25pdGlvbigpXG5cblx0XHQhIW9uUmVzdWx0ICYmIG9uUmVzdWx0KHJlc3VsdCwgZXZlbnQpXG5cdH1cblxuXHRjb25zdCBfb25FcnJvciA9IChlcnJvcikgPT4ge1xuXHRcdHN0b3BSZWNvZ25pdGlvbigpXG5cblx0XHQhIW9uRXJyb3IgJiYgb25FcnJvcihlcnJvcilcblx0fVxuXG5cdGNvbnN0IF9vbk5vTWF0Y2ggPSAoZSkgPT4ge1xuXHRcdHN0b3BUaW1lcigpXG5cdFx0c3RvcFJlY29nbml0aW9uKClcblxuXHRcdCEhb25Ob01hdGNoICYmIG9uTm9NYXRjaChlKVxuXHR9XG5cblx0Y29uc3QgX3JlbmRlckRlZmF1bHQgPSAoKSA9PiAoXG5cdFx0PGJ1dHRvblxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJfX3ZvY2FsLXJvb3RfX1wiXG5cdFx0XHRyZWY9e2J1dHRvblJlZn1cblx0XHRcdHJvbGU9XCJidXR0b25cIlxuXHRcdFx0YXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuXHRcdFx0c3R5bGU9e1xuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0XHQ/IG51bGxcblx0XHRcdFx0XHQ6IHtcblx0XHRcdFx0XHRcdFx0d2lkdGg6IDI0LFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IDI0LFxuXHRcdFx0XHRcdFx0XHRiYWNrZ3JvdW5kOiAnbm9uZScsXG5cdFx0XHRcdFx0XHRcdGJvcmRlcjogJ25vbmUnLFxuXHRcdFx0XHRcdFx0XHRwYWRkaW5nOiAwLFxuXHRcdFx0XHRcdFx0XHRjdXJzb3I6ICFpc0xpc3RlbmluZyA/ICdwb2ludGVyJyA6ICdkZWZhdWx0Jyxcblx0XHRcdFx0XHRcdFx0Li4uc3R5bGUsXG5cdFx0XHRcdFx0ICB9XG5cdFx0XHR9XG5cdFx0XHRjbGFzc05hbWU9e2NsYXNzTmFtZX1cblx0XHRcdG9uRm9jdXM9e19vbkZvY3VzfVxuXHRcdFx0b25CbHVyPXtfb25CbHVyfVxuXHRcdFx0b25DbGljaz17X29uQ2xpY2t9XG5cdFx0PlxuXHRcdFx0PEljb24gaXNBY3RpdmU9e2lzTGlzdGVuaW5nfSBpY29uQ29sb3I9XCIjYWFhXCIgLz5cblx0XHQ8L2J1dHRvbj5cblx0KVxuXG5cdGNvbnN0IF9yZW5kZXJDaGlsZHJlbiA9IChjaGlsZHJlbikgPT4ge1xuXHRcdGlmIChTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuaXNTdXBwb3J0ZWQpIHtcblx0XHRcdGlmIChpc0Z1bmMoY2hpbGRyZW4pKSB7XG5cdFx0XHRcdHJldHVybiBjaGlsZHJlbihzdGFydFJlY29nbml0aW9uLCBzdG9wUmVjb2duaXRpb24sIGlzTGlzdGVuaW5nKVxuXHRcdFx0fSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcblx0XHRcdFx0cmV0dXJuIGNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuXHRcdFx0XHRcdC4uLighaXNMaXN0ZW5pbmcgJiYgeyBvbkNsaWNrOiBfb25DbGljayB9KSxcblx0XHRcdFx0fSlcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBfcmVuZGVyRGVmYXVsdCgpXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsXG5cdH1cblxuXHRyZXR1cm4gX3JlbmRlckNoaWxkcmVuKGNoaWxkcmVuKVxufVxuXG5Wb2NhbC5wcm9wVHlwZXMgPSB7XG5cdC8qKiBEZWZpbmVzIHRoZSBsYW5ndWFnZSB1bmRlcnN0b29kIGJ5IHRoZSByZWNvZ25pdGlvbiAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NwZWVjaFJlY29nbml0aW9uL2xhbmcpICovXG5cdGxhbmc6IFByb3BUeXBlcy5zdHJpbmcsXG5cdC8qKiBEZWZpbmVzIHRoZSBncmFtbWFycyB1bmRlcnN0b29kIGJ5IHRoZSByZWNvZ25pdGlvbiAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NwZWVjaFJlY29nbml0aW9uL2dyYW1tYXJzKSAqL1xuXHRncmFtbWFyczogUHJvcFR5cGVzLm9iamVjdCxcblx0LyoqIERlZmluZXMgdGhlIHRpbWUgaW4gbXMgdG8gd2FpdCBiZWZvcmUgZGlzY2FyZGluZyB0aGUgcmVjb2duaXRpb24gKi9cblx0dGltZW91dDogUHJvcFR5cGVzLm51bWJlcixcblx0LyoqIERlZmluZXMgdGhlIGExMXkgbGFiZWwgZm9yIHRoZSBkZWZhdWx0IGJ1dHRvbiAqL1xuXHRhcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG5cdC8qKiBEZWZpbmVzIHRoZSBzdHlsZXMgb2YgdGhlIGRlZmF1bHQgZWxlbWVudCBpZiBjbGFzc05hbWUgaXMgbm90IHNwZWNpZmllZCAqL1xuXHRzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcblx0LyoqIERlZmluZXMgdGhlIGNsYXNzIG9mIHRoZSBkZWZhdWx0IGVsZW1lbnQgKi9cblx0Y2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHQvKiogRGVmaW5lcyB0aGUgZGVmYXVsdCBzdHlsZSBvZiB0aGUgZm9jdXMgb3V0bGluZS4gaWYgbnVsbCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgdXNlZCAqL1xuXHRvdXRsaW5lU3R5bGU6IFByb3BUeXBlcy5zdHJpbmcsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSByZWNvZ25pdGlvbiBzdGFydHMgKi9cblx0b25TdGFydDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSByZWNvZ25pdGlvbiBlbmRzICovXG5cdG9uRW5kOiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIHNwZWVjaCBzdGFydHMgKi9cblx0b25TcGVlY2hTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSBzcGVlY2ggZW5kcyAqL1xuXHRvblNwZWVjaEVuZDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIGEgcmVzdWx0IGlzIHJldHVybmVkIGZyb20gdGUgcmVjb2duaXRpb24gKi9cblx0b25SZXN1bHQ6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMgKi9cblx0b25FcnJvcjogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIG5vIHJlc3VsdCBjYW4gYmUgcmVjb2duaXplZCAqL1xuXHRvbk5vTWF0Y2g6IFByb3BUeXBlcy5mdW5jLFxufVxuXG5Wb2NhbC5kZWZhdWx0UHJvcHMgPSB7XG5cdGxhbmc6ICdlbi1VUycsXG5cdGdyYW1tYXJzOiBudWxsLFxuXHR0aW1lb3V0OiAzMDAwLFxuXHRhcmlhTGFiZWw6ICdzdGFydCByZWNvZ25pdGlvbicsXG5cdHN0eWxlOiBudWxsLFxuXHRjbGFzc05hbWU6IG51bGwsXG5cdG91dGxpbmVTdHlsZTogJzJweCBzb2xpZCcsXG5cdG9uU3RhcnQ6IG51bGwsXG5cdG9uRW5kOiBudWxsLFxuXHRvblNwZWVjaFN0YXJ0OiBudWxsLFxuXHRvblNwZWVjaEVuZDogbnVsbCxcblx0b25SZXN1bHQ6IG51bGwsXG5cdG9uRXJyb3I6IG51bGwsXG5cdG9uTm9NYXRjaDogbnVsbCxcbn1cblxuZXhwb3J0IGRlZmF1bHQgVm9jYWxcbiIsImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuXG5jb25zdCB1c2VUaW1lb3V0ID0gKGhhbmRsZXIsIHRpbWVvdXQgPSAwKSA9PiB7XG5cdGNvbnN0IHJlZiA9IHVzZVJlZigtMSlcblxuXHRjb25zdCBzdG9wID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdGNsZWFyVGltZW91dChyZWYuY3VycmVudClcblx0XHRyZWYuY3VycmVudCA9IC0xXG5cdH0sIFtdKVxuXG5cdGNvbnN0IHN0YXJ0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdHN0b3AoKVxuXHRcdHJlZi5jdXJyZW50ID0gc2V0VGltZW91dChoYW5kbGVyLCB0aW1lb3V0KVxuXHR9LCBbaGFuZGxlciwgdGltZW91dCwgc3RvcF0pXG5cblx0dXNlRWZmZWN0KCgpID0+IHN0b3AsIFtzdG9wXSlcblxuXHRyZXR1cm4gW3N0YXJ0LCBzdG9wXVxufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VUaW1lb3V0XG5cbi8vIFRPRE86IFJldHVybiBhIHByb21pc2VcbiIsImV4cG9ydCBkZWZhdWx0ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbidcbiIsImltcG9ydCBWb2NhbCBmcm9tICcuL2NvbXBvbmVudHMvVm9jYWwnXG5pbXBvcnQgU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyIGZyb20gJy4vY29yZS9TcGVlY2hSZWNvZ25pdGlvbldyYXBwZXInXG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlVm9jYWwgfSBmcm9tICcuL2hvb2tzL3VzZVZvY2FsJ1xuZXhwb3J0IGNvbnN0IGlzU3VwcG9ydGVkID0gU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmlzU3VwcG9ydGVkXG5cbmV4cG9ydCBkZWZhdWx0IFZvY2FsXG4iXSwibmFtZXMiOlsiZSIsInIiLCJ0IiwibiIsImEiLCJpIiwibyIsInUiLCJjIiwidmFsdWUiLCJkb25lIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwidGhpcyIsImFyZ3VtZW50cyIsImFwcGx5IiwiQXJyYXkiLCJpc0FycmF5IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJPYmplY3QiLCJuZXh0IiwicHVzaCIsImxlbmd0aCIsInJldHVybiIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJUeXBlRXJyb3IiLCJyZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwid3JhcCIsInByZXYiLCJhYnJ1cHQiLCJuYXZpZ2F0b3IiLCJwZXJtaXNzaW9ucyIsIkRPTUV4Y2VwdGlvbiIsInF1ZXJ5Iiwic2VudCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ0YXJnZXQiLCJzdGF0ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJ0MCIsImNhdGNoIiwic3RvcCIsInMiLCJtZWRpYURldmljZXMiLCJ0MSIsImdldFVzZXJNZWRpYSIsInQyIiwidDMiLCJhbGwiLCJ0NCIsIlNwZWVjaFJlY29nbml0aW9uV3JhcHBlciIsIm9wdGlvbnMiLCJTcGVlY2hSZWNvZ25pdGlvbiIsIl9yZXNvbHZlU3BlZWNoUmVjb2duaXRpb24iLCJfaW5zdGFuY2UiLCJfbGlzdGVuZXJzIiwiZW50cmllcyIsImRlZmF1bHRPcHRpb25zIiwiZm9yRWFjaCIsImtleSIsIl9yZXNvbHZlU3BlZWNoR3JhbW1hckxpc3QiLCJfdGhpcyIsIl8iLCJFcnJvciIsImdldFVzZXJNZWRpYVN0cmVhbSIsImF1ZGlvIiwic3RhcnQiLCJlcnJvckhhbmRsZXIiLCJlcnJvciIsImFib3J0IiwiZXZlbnRUeXBlIiwiY2FsbGJhY2siLCJfaW5jbHVkZXNFdmVudFR5cGUiLCJoYW5kbGVyIiwiZXZlbnQiLCJhZGRpdGlvbmFsQXJncyIsImV2ZW50VHlwZXMiLCJSRVNVTFQiLCJyZXN1bHRzIiwidHJhbnNjcmlwdCIsIl90aGlzMiIsImtleXMiLCJfdGhpczMiLCJ2YWx1ZXMiLCJmaW5kIiwidHlwZSIsIndpbmRvdyIsIndlYmtpdFNwZWVjaFJlY29nbml0aW9uIiwibW96U3BlZWNoUmVjb2duaXRpb24iLCJtc1NwZWVjaFJlY29nbml0aW9uIiwiU3BlZWNoR3JhbW1hckxpc3QiLCJ3ZWJraXRTcGVlY2hHcmFtbWFyTGlzdCIsIm1velNwZWVjaEdyYW1tYXJMaXN0IiwibXNTcGVlY2hHcmFtbWFyTGlzdCIsImdyYW1tYXJzIiwibGFuZyIsImNvbnRpbnVvdXMiLCJpbnRlcmltUmVzdWx0cyIsIm1heEFsdGVybmF0aXZlcyIsInNlcnZpY2VVUkkiLCJBVURJT19FTkQiLCJBVURJT19TVEFSVCIsIkVORCIsIkVSUk9SIiwiTk9fTUFUQ0giLCJTT1VORF9FTkQiLCJTT1VORF9TVEFSVCIsIlNQRUVDSF9FTkQiLCJTUEVFQ0hfU1RBUlQiLCJTVEFSVCIsInVzZVZvY2FsIiwiX19yc0luc3RhbmNlIiwicmVmIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiaXNTdXBwb3J0ZWQiLCJjdXJyZW50IiwiY2xlYW51cCIsInVzZUNhbGxiYWNrIiwic3Vic2NyaWJlIiwidW5zdWJzY3JpYmUiLCJjbGVhbiIsIkljb24iLCJjb2xvciIsImFjdGl2ZUNvbG9yIiwiaXNBY3RpdmUiLCJSZWFjdCIsInhtbG5zIiwid2lkdGgiLCJoZWlnaHQiLCJ2aWV3Qm94IiwiZmlsbCIsImQiLCJjeCIsImN5IiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic3RyaW5nIiwiYm9vbCIsImRlZmF1bHRQcm9wcyIsIlZvY2FsIiwiY2hpbGRyZW4iLCJ0aW1lb3V0IiwiYXJpYUxhYmVsIiwic3R5bGUiLCJjbGFzc05hbWUiLCJvdXRsaW5lU3R5bGUiLCJvblN0YXJ0Iiwib25FbmQiLCJvblNwZWVjaFN0YXJ0Iiwib25TcGVlY2hFbmQiLCJvblJlc3VsdCIsIm9uRXJyb3IiLCJvbk5vTWF0Y2giLCJidXR0b25SZWYiLCJ1c2VTdGF0ZSIsImlzTGlzdGVuaW5nIiwic2V0SXNMaXN0ZW5pbmciLCJfb25FbmQiLCJzdG9wVGltZXIiLCJzdG9wUmVjb2duaXRpb24iLCJfb25TdGFydCIsIl9vblNwZWVjaFN0YXJ0IiwiX29uU3BlZWNoRW5kIiwiX29uUmVzdWx0IiwiX29uRXJyb3IiLCJfb25Ob01hdGNoIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsInVzZVRpbWVvdXQiLCJzdGFydFRpbWVyIiwic3RhcnRSZWNvZ25pdGlvbiIsIl9vbkNsaWNrIiwiX29uRm9jdXMiLCJvdXRsaW5lIiwiX29uQmx1ciIsInJlc3VsdCIsImlzVmFsaWRFbGVtZW50IiwiY2xvbmVFbGVtZW50Iiwib25DbGljayIsInJvbGUiLCJiYWNrZ3JvdW5kIiwiYm9yZGVyIiwicGFkZGluZyIsImN1cnNvciIsIm9uRm9jdXMiLCJvbkJsdXIiLCJpY29uQ29sb3IiLCJfcmVuZGVyQ2hpbGRyZW4iLCJvYmplY3QiLCJudW1iZXIiLCJmdW5jIl0sIm1hcHBpbmdzIjoic3hFQUFBLFNBQVNBLEVBQUVBLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUVD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 |
{ | ||
"name": "@untemps/react-vocal", | ||
"version": "1.4.1", | ||
"version": "1.5.0", | ||
"author": "Vincent Le Badezet <v.lebadezet@untemps.net>", | ||
@@ -5,0 +5,0 @@ "repository": "git@github.com:untemps/react-vocal.git", |
219
README.md
@@ -16,11 +16,16 @@ <p align="center"> | ||
:red_circle: <big><a href="https://untemps.github.io/react-vocal" target="_blank" rel="noopener">LIVE DEMO</a></big> :red_circle: | ||
:red_circle: <big><a href="https://untemps.github.io/react-vocal" target="_blank" rel="noopener">LIVE | ||
DEMO</a></big> :red_circle: | ||
## Disclaimer | ||
The [Web Speech API](https://developer.mozilla.org/fr/docs/Web/API/Web_Speech_API) is only supported by few browsers so far (see [caniuse](https://caniuse.com/#search=SpeechRecognition)). If the API is not available, the `Vocal` component won't display anything. | ||
The [Web Speech API](https://developer.mozilla.org/fr/docs/Web/API/Web_Speech_API) is only supported by few browsers so | ||
far (see [caniuse](https://caniuse.com/#search=SpeechRecognition)). If the API is not available, the `Vocal` component | ||
won't display anything. | ||
This component intends to catch a speech result as soon as possible. This can be a good fit for vocal commands or search field filling. For now on it does not support continuous speech (see [Roadmap](#roadmap) below). | ||
This component intends to catch a speech result as soon as possible. This can be a good fit for vocal commands or search | ||
field filling. For now on it does not support continuous speech (see [Roadmap](#roadmap) below). | ||
That means either a result is caught and returned or timeout is reached and the recognition is discarded. | ||
The `stop` function returned by children-as-function mechanism allows to prematurely discard the recognition before timeout elapses. | ||
The `stop` function returned by children-as-function mechanism allows to prematurely discard the recognition before | ||
timeout elapses. | ||
@@ -43,24 +48,24 @@ ## Installation | ||
const App = () => { | ||
const [result, setResult] = useState('') | ||
const _onVocalStart = () => { | ||
setResult('') | ||
} | ||
const _onVocalResult = (result) => { | ||
setResult(result) | ||
} | ||
return ( | ||
<div className="App"> | ||
<span style={{ position: 'relative' }}> | ||
<Vocal | ||
onStart={_onVocalStart} | ||
onResult={_onVocalResult} | ||
style={{ width: 16, position: 'absolute', right: 10, top: -2 }} | ||
/> | ||
<input defaultValue={result} style={{ width: 300, height: 40 }} /> | ||
</span> | ||
</div> | ||
) | ||
const [result, setResult] = useState('') | ||
const _onVocalStart = () => { | ||
setResult('') | ||
} | ||
const _onVocalResult = (result) => { | ||
setResult(result) | ||
} | ||
return ( | ||
<div className="App"> | ||
<span style={{position: 'relative'}}> | ||
<Vocal | ||
onStart={_onVocalStart} | ||
onResult={_onVocalResult} | ||
style={{width: 16, position: 'absolute', right: 10, top: -2}} | ||
/> | ||
<input defaultValue={result} style={{width: 300, height: 40}}/> | ||
</span> | ||
</div> | ||
) | ||
} | ||
@@ -74,7 +79,8 @@ ``` | ||
- Idle | ||
![Idle state](assets/icon-idle.png) | ||
![Idle state](assets/icon-idle.png) | ||
- Listening | ||
![Listening state](assets/icon-listening.png) | ||
![Listening state](assets/icon-listening.png) | ||
But you can provide your own component. | ||
But you can provide your own component. | ||
- With a simple React element: | ||
@@ -86,11 +92,13 @@ | ||
const App = () => { | ||
return ( | ||
<Vocal> | ||
<button>Start</button> | ||
</Vocal> | ||
) | ||
return ( | ||
<Vocal> | ||
<button>Start</button> | ||
</Vocal> | ||
) | ||
} | ||
``` | ||
In this case, a `onClick` handler is automatically attached to the component to start a recognition session. | ||
Only the first direct descendant of Vocal will receive the `onClick` handler. If you want to use a more complex hierarchy, use the function syntax below. | ||
Only the first direct descendant of Vocal will receive the `onClick` handler. If you want to use a more complex | ||
hierarchy, use the function syntax below. | ||
@@ -102,16 +110,36 @@ - With a function that returns a React element: | ||
const Play = () => <div style={{ | ||
width: 0, | ||
height: 0, | ||
marginLeft: 1, | ||
borderStyle: 'solid', | ||
borderWidth: '4px 0 4px 8px', | ||
borderColor: 'transparent transparent transparent black' | ||
}}/> | ||
const Stop = () => <div style={{ | ||
width: 8, | ||
height: 8, | ||
backgroundColor: 'black' | ||
}}/> | ||
const App = () => { | ||
return ( | ||
<Vocal>{(start, stop) => ( | ||
<div> | ||
<button onClick={start}>Start</button> | ||
<button onClick={stop}>Stop</button> | ||
</div> | ||
)}</Vocal> | ||
) | ||
return ( | ||
<Vocal>{(start, stop, isStarted) => ( | ||
<button style={{padding: 5}} onClick={isStarted ? stop : start}> | ||
{isStarted ? <Stop/> : <Play/>} | ||
</button> | ||
)}</Vocal> | ||
) | ||
} | ||
``` | ||
`start` allows to start a recognition session. `stop` stops it. | ||
The following parameters are passed to the function: | ||
| Arguments | Type | Description | | ||
| ------------- | ----------------- | ------------------------------------------------------------------------------------------------------------ | | ||
| start | func | The function used to start the recognition | | ||
| stop | func | The function used to stop the recognition | | ||
| isStarted | bool | A flag that indicates whether the recognition is started or not | | ||
#### API | ||
@@ -139,51 +167,51 @@ | ||
```javascript | ||
import React, { useState } from 'react' | ||
import { useVocal } from '@untemps/react-vocal' | ||
import React, {useState} from 'react' | ||
import {useVocal} from '@untemps/react-vocal' | ||
import Icon from './Icon' | ||
const App = () => { | ||
const [isListening, setIsListening] = useState(false) | ||
const [result, setResult] = useState('') | ||
const [, {start, subscribe}] = useVocal('fr_FR') | ||
const _onButtonClick = () => { | ||
setIsListening(true) | ||
subscribe('speechstart', _onVocalStart) | ||
subscribe('result', _onVocalResult) | ||
subscribe('error', _onVocalError) | ||
start() | ||
} | ||
const _onVocalStart = () => { | ||
setResult('') | ||
} | ||
const [isListening, setIsListening] = useState(false) | ||
const [result, setResult] = useState('') | ||
const _onVocalResult = (result) => { | ||
setIsListening(false) | ||
setResult(result) | ||
} | ||
const [, {start, subscribe}] = useVocal('fr_FR') | ||
const _onVocalError = (e) => { | ||
console.error(e) | ||
} | ||
const _onButtonClick = () => { | ||
setIsListening(true) | ||
return ( | ||
<div> | ||
<span style={{ position: 'relative' }}> | ||
<div | ||
role="button" | ||
aria-label="Vocal" | ||
tabIndex={0} | ||
style={{ width: 16, position: 'absolute', right: 10, top: 2 }} | ||
onClick={_onButtonClick} | ||
> | ||
<Icon color={isListening ? 'red': 'blue'} /> | ||
</div> | ||
<input defaultValue={result} style={{ width: 300, height: 40 }} /> | ||
</span> | ||
</div> | ||
) | ||
subscribe('speechstart', _onVocalStart) | ||
subscribe('result', _onVocalResult) | ||
subscribe('error', _onVocalError) | ||
start() | ||
} | ||
const _onVocalStart = () => { | ||
setResult('') | ||
} | ||
const _onVocalResult = (result) => { | ||
setIsListening(false) | ||
setResult(result) | ||
} | ||
const _onVocalError = (e) => { | ||
console.error(e) | ||
} | ||
return ( | ||
<div> | ||
<span style={{position: 'relative'}}> | ||
<div | ||
role="button" | ||
aria-label="Vocal" | ||
tabIndex={0} | ||
style={{width: 16, position: 'absolute', right: 10, top: 2}} | ||
onClick={_onButtonClick} | ||
> | ||
<Icon color={isListening ? 'red' : 'blue'}/> | ||
</div> | ||
<input defaultValue={result} style={{width: 300, height: 40}}/> | ||
</span> | ||
</div> | ||
) | ||
} | ||
@@ -227,7 +255,7 @@ ``` | ||
const App = () => { | ||
return isSupported ? ( | ||
<Vocal /> | ||
) : ( | ||
<p>Your browser does not support Web Speech API</p> | ||
) | ||
return isSupported ? ( | ||
<Vocal/> | ||
) : ( | ||
<p>Your browser does not support Web Speech API</p> | ||
) | ||
} | ||
@@ -254,3 +282,4 @@ ``` | ||
The process to grant microphone access permissions is automatically managed by the hook (internally used by the `Vocal` component). | ||
The process to grant microphone access permissions is automatically managed by the hook (internally used by the `Vocal` | ||
component). | ||
@@ -268,6 +297,8 @@ ## Development | ||
Contributions are warmly welcomed: | ||
- Fork the repository | ||
- Create a feature branch (preferred name convention: `[feature type]_[imperative verb]-[description of the feature]`) | ||
- Develop the feature AND write the tests (or write the tests AND develop the feature) | ||
- Commit your changes using [Angular Git Commit Guidelines](https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#-git-commit-guidelines) | ||
- Commit your changes | ||
using [Angular Git Commit Guidelines](https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#-git-commit-guidelines) | ||
- Submit a Pull Request | ||
@@ -274,0 +305,0 @@ |
@@ -166,3 +166,3 @@ import React, { cloneElement, isValidElement, useRef, useState } from 'react' | ||
if (isFunc(children)) { | ||
return children(startRecognition, stopRecognition) | ||
return children(startRecognition, stopRecognition, isListening) | ||
} else if (isValidElement(children)) { | ||
@@ -169,0 +169,0 @@ return cloneElement(children, { |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
248721
1776
301