| Server IP : 82.208.35.60 / Your IP : 216.73.216.89 Web Server : Apache/2.4.55 (FreeBSD) OpenSSL/1.1.1q-freebsd PHP/7.3.31 System : FreeBSD server7.d2m.cz 12.4-RELEASE-p9 FreeBSD 12.4-RELEASE-p9 GENERIC amd64 User : studiokobylisy_cz ( 1008) PHP Version : 7.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/air-sport_cz/www/admin939wizxmp/themes/new-theme/public/ |
Upload File : |
/*! For license information please see customer_address_form.bundle.js.LICENSE.txt */
(()=>{var t={53021:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=u(r(99663)),o=u(r(22600));function u(t){return t&&t.__esModule?t:{default:t}}var a=window.$,s=function(){function t(e,r,o){var u=this;(0,n.default)(this,t),this.$countryDniInput=a(r),this.$countryDniInputLabel=a(o),this.$countryInput=a(e),this.countryInputSelectedSelector=e+">option:selected",this.countryDniInputLabelDangerSelector=o+">span.text-danger",this.$countryDniInput.attr("required")||(this.$countryInput.on("change",(function(){return u.toggle()})),this.toggle())}return(0,o.default)(t,[{key:"toggle",value:function(){a(this.countryDniInputLabelDangerSelector).remove(),this.$countryDniInput.prop("required",!1),1===parseInt(a(this.countryInputSelectedSelector).attr("need_dni"),10)&&(this.$countryDniInput.prop("required",!0),this.$countryDniInputLabel.prepend(a('<span class="text-danger">*</span>')))}}]),t}();e.default=s},55622:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=u(r(99663)),o=u(r(22600));function u(t){return t&&t.__esModule?t:{default:t}}var a=window.$,s=function(){function t(e,r,o){var u=this;(0,n.default)(this,t),this.$countryPostcodeInput=a(r),this.$countryPostcodeInputLabel=a(o),this.$countryInput=a(e),this.countryInputSelectedSelector=e+">option:selected",this.countryPostcodeInputLabelDangerSelector=o+">span.text-danger",this.$countryPostcodeInput.attr("required")||(this.$countryInput.on("change",(function(){return u.toggle()})),this.toggle())}return(0,o.default)(t,[{key:"toggle",value:function(){a(this.countryPostcodeInputLabelDangerSelector).remove(),this.$countryPostcodeInput.prop("required",!1),1===parseInt(a(this.countryInputSelectedSelector).attr("need_postcode"),10)&&(this.$countryPostcodeInput.prop("required",!0),this.$countryPostcodeInputLabel.prepend(a('<span class="text-danger">*</span>')))}}]),t}();e.default=s},30850:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=a(r(88902)),o=a(r(99663)),u=a(r(22600));function a(t){return t&&t.__esModule?t:{default:t}}var s=window.$,i=function(){function t(e,r,n){var u=this;return(0,o.default)(this,t),this.$stateSelectionBlock=s(n),this.$countryStateSelector=s(r),this.$countryInput=s(e),this.$countryInput.on("change",(function(){return u.change()})),{}}return(0,u.default)(t,[{key:"change",value:function(){var t=this,e=this.$countryInput.val();""!==e&&s.get({url:this.$countryInput.data("states-url"),dataType:"json",data:{id_country:e}}).then((function(e){t.$countryStateSelector.empty(),(0,n.default)(e.states).forEach((function(r){t.$countryStateSelector.append(s("<option></option>").attr("value",e.states[r]).text(r))})),t.toggle()})).catch((function(t){void 0!==t.responseJSON&&window.showErrorMessage(t.responseJSON.message)}))}},{key:"toggle",value:function(){this.$stateSelectionBlock.toggleClass("d-none",!this.$countryStateSelector.find("option").length>0)}}]),t}();e.default=i},32185:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=a(r(88902)),o=a(r(99663)),u=a(r(22600));function a(t){return t&&t.__esModule?t:{default:t}}var s=window.$,i=function(){function t(e){var r=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];(0,o.default)(this,t),this.map=n,this.$emailInput=s(e),this.$emailInput.on("change",(function(){return r.change()}))}return(0,u.default)(t,[{key:"change",value:function(){var t=this;s.get({url:this.$emailInput.data("customer-information-url"),dataType:"json",data:{email:this.$emailInput.val()}}).then((function(e){(0,n.default)(t.map).forEach((function(r){void 0!==e[r]&&s(t.map[r]).val(e[r])}))})).catch((function(t){void 0!==t.responseJSON&&window.showErrorMessage(t.responseJSON.message)}))}}]),t}();e.default=i},47200:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={addressEmailInput:"#customer_address_customer_email",addressFirstnameInput:"#customer_address_first_name",addressLastnameInput:"#customer_address_last_name",addressCompanyInput:"#customer_address_company",addressCountrySelect:"#customer_address_id_country",addressStateSelect:"#customer_address_id_state",addressStateBlock:".js-address-state-select",addressDniInput:"#customer_address_dni",addressDniInputLabel:'label[for="customer_address_dni"]',addressPostcodeInput:"#customer_address_postcode",addressPostcodeInputLabel:'label[for="customer_address_postcode"]'}},32242:(t,e,r)=>{t.exports={default:r(33391),__esModule:!0}},88902:(t,e,r)=>{t.exports={default:r(98613),__esModule:!0}},99663:(t,e)=>{"use strict";e.__esModule=!0,e.default=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}},22600:(t,e,r)=>{"use strict";e.__esModule=!0;var n,o=(n=r(32242))&&n.__esModule?n:{default:n};e.default=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),(0,o.default)(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}()},33391:(t,e,r)=>{r(31477);var n=r(34579).Object;t.exports=function(t,e,r){return n.defineProperty(t,e,r)}},98613:(t,e,r)=>{r(40961),t.exports=r(34579).Object.keys},85663:t=>{t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},12159:(t,e,r)=>{var n=r(36727);t.exports=function(t){if(!n(t))throw TypeError(t+" is not an object!");return t}},57428:(t,e,r)=>{var n=r(7932),o=r(78728),u=r(16531);t.exports=function(t){return function(e,r,a){var s,i=n(e),c=o(i.length),d=u(a,c);if(t&&r!=r){for(;c>d;)if((s=i[d++])!=s)return!0}else for(;c>d;d++)if((t||d in i)&&i[d]===r)return t||d||0;return!t&&-1}}},32894:t=>{var e={}.toString;t.exports=function(t){return e.call(t).slice(8,-1)}},34579:t=>{var e=t.exports={version:"2.6.11"};"number"==typeof __e&&(__e=e)},19216:(t,e,r)=>{var n=r(85663);t.exports=function(t,e,r){if(n(t),void 0===e)return t;switch(r){case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,o){return t.call(e,r,n,o)}}return function(){return t.apply(e,arguments)}}},8333:t=>{t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},89666:(t,e,r)=>{t.exports=!r(7929)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},97467:(t,e,r)=>{var n=r(36727),o=r(33938).document,u=n(o)&&n(o.createElement);t.exports=function(t){return u?o.createElement(t):{}}},73338:t=>{t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},83856:(t,e,r)=>{var n=r(33938),o=r(34579),u=r(19216),a=r(41818),s=r(27069),i=function(t,e,r){var c,d,l,f=t&i.F,p=t&i.G,h=t&i.S,y=t&i.P,v=t&i.B,_=t&i.W,g=p?o:o[e]||(o[e]={}),m=g.prototype,I=p?n:h?n[e]:(n[e]||{}).prototype;for(c in p&&(r=e),r)(d=!f&&I&&void 0!==I[c])&&s(g,c)||(l=d?I[c]:r[c],g[c]=p&&"function"!=typeof I[c]?r[c]:v&&d?u(l,n):_&&I[c]==l?function(t){var e=function(e,r,n){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,r)}return new t(e,r,n)}return t.apply(this,arguments)};return e.prototype=t.prototype,e}(l):y&&"function"==typeof l?u(Function.call,l):l,y&&((g.virtual||(g.virtual={}))[c]=l,t&i.R&&m&&!m[c]&&a(m,c,l)))};i.F=1,i.G=2,i.S=4,i.P=8,i.B=16,i.W=32,i.U=64,i.R=128,t.exports=i},7929:t=>{t.exports=function(t){try{return!!t()}catch(t){return!0}}},33938:t=>{var e=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=e)},27069:t=>{var e={}.hasOwnProperty;t.exports=function(t,r){return e.call(t,r)}},41818:(t,e,r)=>{var n=r(4743),o=r(83101);t.exports=r(89666)?function(t,e,r){return n.f(t,e,o(1,r))}:function(t,e,r){return t[e]=r,t}},33758:(t,e,r)=>{t.exports=!r(89666)&&!r(7929)((function(){return 7!=Object.defineProperty(r(97467)("div"),"a",{get:function(){return 7}}).a}))},50799:(t,e,r)=>{var n=r(32894);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==n(t)?t.split(""):Object(t)}},36727:t=>{t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},16227:t=>{t.exports=!0},4743:(t,e,r)=>{var n=r(12159),o=r(33758),u=r(33206),a=Object.defineProperty;e.f=r(89666)?Object.defineProperty:function(t,e,r){if(n(t),e=u(e,!0),n(r),o)try{return a(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(t[e]=r.value),t}},12963:(t,e,r)=>{var n=r(27069),o=r(7932),u=r(57428)(!1),a=r(58989)("IE_PROTO");t.exports=function(t,e){var r,s=o(t),i=0,c=[];for(r in s)r!=a&&n(s,r)&&c.push(r);for(;e.length>i;)n(s,r=e[i++])&&(~u(c,r)||c.push(r));return c}},46162:(t,e,r)=>{var n=r(12963),o=r(73338);t.exports=Object.keys||function(t){return n(t,o)}},12584:(t,e,r)=>{var n=r(83856),o=r(34579),u=r(7929);t.exports=function(t,e){var r=(o.Object||{})[t]||Object[t],a={};a[t]=e(r),n(n.S+n.F*u((function(){r(1)})),"Object",a)}},83101:t=>{t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},58989:(t,e,r)=>{var n=r(20250)("keys"),o=r(65730);t.exports=function(t){return n[t]||(n[t]=o(t))}},20250:(t,e,r)=>{var n=r(34579),o=r(33938),u="__core-js_shared__",a=o[u]||(o[u]={});(t.exports=function(t,e){return a[t]||(a[t]=void 0!==e?e:{})})("versions",[]).push({version:n.version,mode:r(16227)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},16531:(t,e,r)=>{var n=r(11052),o=Math.max,u=Math.min;t.exports=function(t,e){return(t=n(t))<0?o(t+e,0):u(t,e)}},11052:t=>{var e=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:e)(t)}},7932:(t,e,r)=>{var n=r(50799),o=r(8333);t.exports=function(t){return n(o(t))}},78728:(t,e,r)=>{var n=r(11052),o=Math.min;t.exports=function(t){return t>0?o(n(t),9007199254740991):0}},66530:(t,e,r)=>{var n=r(8333);t.exports=function(t){return Object(n(t))}},33206:(t,e,r)=>{var n=r(36727);t.exports=function(t,e){if(!n(t))return t;var r,o;if(e&&"function"==typeof(r=t.toString)&&!n(o=r.call(t)))return o;if("function"==typeof(r=t.valueOf)&&!n(o=r.call(t)))return o;if(!e&&"function"==typeof(r=t.toString)&&!n(o=r.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},65730:t=>{var e=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++e+r).toString(36))}},31477:(t,e,r)=>{var n=r(83856);n(n.S+n.F*!r(89666),"Object",{defineProperty:r(4743).f})},40961:(t,e,r)=>{var n=r(66530),o=r(46162);r(12584)("keys",(function(){return function(t){return o(n(t))}}))}},e={};function r(n){var o=e[n];if(void 0!==o)return o.exports;var u=e[n]={exports:{}};return t[n](u,u.exports,r),u.exports}(()=>{"use strict";var t=a(r(32185)),e=a(r(30850)),n=a(r(53021)),o=a(r(55622)),u=a(r(47200));function a(t){return t&&t.__esModule?t:{default:t}}(0,window.$)(document).ready((function(){new t.default(u.default.addressEmailInput,{firstName:u.default.addressFirstnameInput,lastName:u.default.addressLastnameInput,company:u.default.addressCompanyInput}),new e.default(u.default.addressCountrySelect,u.default.addressStateSelect,u.default.addressStateBlock),new n.default(u.default.addressCountrySelect,u.default.addressDniInput,u.default.addressDniInputLabel),new o.default(u.default.addressCountrySelect,u.default.addressPostcodeInput,u.default.addressPostcodeInputLabel)}))})(),window.customer_address_form={}})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9jb21wb25lbnRzL2NvdW50cnktZG5pLXJlcXVpcmVkLXRvZ2dsZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy9jb3VudHJ5LXBvc3Rjb2RlLXJlcXVpcmVkLXRvZ2dsZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy9jb3VudHJ5LXN0YXRlLXNlbGVjdGlvbi10b2dnbGVyLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2NvbXBvbmVudHMvZm9ybS9hdXRvY29tcGxldGUtd2l0aC1lbWFpbC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9hZGRyZXNzL2FkZHJlc3MtZm9ybS1tYXAuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9rZXlzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RlZmluZWQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oYXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oaWRlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbGlicmFyeS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qtc2FwLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1hYnNvbHV0ZS1pbmRleC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdWlkLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzLmpzIiwid2VicGFjazovL1tuYW1lXS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9hZGRyZXNzL2Zvcm0uanMiXSwibmFtZXMiOlsiJCIsIndpbmRvdyIsIkNvdW50cnlEbmlSZXF1aXJlZFRvZ2dsZXIiLCJjb3VudHJ5SW5wdXRTZWxlY3RvciIsImNvdW50cnlEbmlJbnB1dCIsImNvdW50cnlEbmlJbnB1dExhYmVsIiwidGhpcyIsIiRjb3VudHJ5RG5pSW5wdXQiLCIkY291bnRyeURuaUlucHV0TGFiZWwiLCIkY291bnRyeUlucHV0IiwiY291bnRyeUlucHV0U2VsZWN0ZWRTZWxlY3RvciIsImNvdW50cnlEbmlJbnB1dExhYmVsRGFuZ2VyU2VsZWN0b3IiLCJhdHRyIiwib24iLCJ0b2dnbGUiLCJyZW1vdmUiLCJwcm9wIiwicGFyc2VJbnQiLCJwcmVwZW5kIiwiQ291bnRyeVBvc3Rjb2RlUmVxdWlyZWRUb2dnbGVyIiwiY291bnRyeVBvc3Rjb2RlSW5wdXQiLCJjb3VudHJ5UG9zdGNvZGVJbnB1dExhYmVsIiwiJGNvdW50cnlQb3N0Y29kZUlucHV0IiwiJGNvdW50cnlQb3N0Y29kZUlucHV0TGFiZWwiLCJjb3VudHJ5UG9zdGNvZGVJbnB1dExhYmVsRGFuZ2VyU2VsZWN0b3IiLCJDb3VudHJ5U3RhdGVTZWxlY3Rpb25Ub2dnbGVyIiwiY291bnRyeVN0YXRlU2VsZWN0b3IiLCJzdGF0ZVNlbGVjdGlvbkJsb2NrU2VsZWN0b3IiLCIkc3RhdGVTZWxlY3Rpb25CbG9jayIsIiRjb3VudHJ5U3RhdGVTZWxlY3RvciIsImNoYW5nZSIsImNvdW50cnlJZCIsInZhbCIsImdldCIsInVybCIsImRhdGEiLCJkYXRhVHlwZSIsImlkX2NvdW50cnkiLCJ0aGVuIiwicmVzcG9uc2UiLCJlbXB0eSIsInN0YXRlcyIsImZvckVhY2giLCJ2YWx1ZSIsImFwcGVuZCIsInRleHQiLCJjYXRjaCIsInJlc3BvbnNlSlNPTiIsInNob3dFcnJvck1lc3NhZ2UiLCJtZXNzYWdlIiwidG9nZ2xlQ2xhc3MiLCJmaW5kIiwibGVuZ3RoIiwiQXV0b2NvbXBsZXRlV2l0aEVtYWlsIiwiZW1haWxJbnB1dFNlbGVjdG9yIiwibWFwIiwiJGVtYWlsSW5wdXQiLCJlbWFpbCIsImtleSIsInVuZGVmaW5lZCIsImFkZHJlc3NFbWFpbElucHV0IiwiYWRkcmVzc0ZpcnN0bmFtZUlucHV0IiwiYWRkcmVzc0xhc3RuYW1lSW5wdXQiLCJhZGRyZXNzQ29tcGFueUlucHV0IiwiYWRkcmVzc0NvdW50cnlTZWxlY3QiLCJhZGRyZXNzU3RhdGVTZWxlY3QiLCJhZGRyZXNzU3RhdGVCbG9jayIsImFkZHJlc3NEbmlJbnB1dCIsImFkZHJlc3NEbmlJbnB1dExhYmVsIiwiYWRkcmVzc1Bvc3Rjb2RlSW5wdXQiLCJhZGRyZXNzUG9zdGNvZGVJbnB1dExhYmVsIiwibW9kdWxlIiwiZXhwb3J0cyIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIlR5cGVFcnJvciIsIm9iaiIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJpIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsInByb3RvdHlwZSIsIiRPYmplY3QiLCJpdCIsImRlc2MiLCJkZWZpbmVQcm9wZXJ0eSIsImlzT2JqZWN0IiwidG9JT2JqZWN0IiwidG9MZW5ndGgiLCJ0b0Fic29sdXRlSW5kZXgiLCJJU19JTkNMVURFUyIsIiR0aGlzIiwiZWwiLCJmcm9tSW5kZXgiLCJPIiwiaW5kZXgiLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsImNvcmUiLCJ2ZXJzaW9uIiwiX19lIiwiYUZ1bmN0aW9uIiwiZm4iLCJ0aGF0IiwiYSIsImIiLCJjIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJPYmplY3QiLCJkb2N1bWVudCIsImlzIiwiY3JlYXRlRWxlbWVudCIsInNwbGl0IiwiZ2xvYmFsIiwiY3R4IiwiaGlkZSIsImhhcyIsIiRleHBvcnQiLCJ0eXBlIiwibmFtZSIsInNvdXJjZSIsIm93biIsIm91dCIsIklTX0ZPUkNFRCIsIkYiLCJJU19HTE9CQUwiLCJHIiwiSVNfU1RBVElDIiwiUyIsIklTX1BST1RPIiwiUCIsIklTX0JJTkQiLCJCIiwiSVNfV1JBUCIsIlciLCJleHBQcm90byIsIkMiLCJGdW5jdGlvbiIsInZpcnR1YWwiLCJSIiwiVSIsImV4ZWMiLCJlIiwiTWF0aCIsInNlbGYiLCJfX2ciLCJoYXNPd25Qcm9wZXJ0eSIsImRQIiwiY3JlYXRlRGVzYyIsIm9iamVjdCIsImYiLCJjb2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImFuT2JqZWN0IiwiSUU4X0RPTV9ERUZJTkUiLCJ0b1ByaW1pdGl2ZSIsIkF0dHJpYnV0ZXMiLCJhcnJheUluZGV4T2YiLCJJRV9QUk9UTyIsIm5hbWVzIiwicmVzdWx0IiwicHVzaCIsIiRrZXlzIiwiZW51bUJ1Z0tleXMiLCJrZXlzIiwiZmFpbHMiLCJLRVkiLCJleHAiLCJiaXRtYXAiLCJzaGFyZWQiLCJ1aWQiLCJTSEFSRUQiLCJzdG9yZSIsIm1vZGUiLCJjb3B5cmlnaHQiLCJ0b0ludGVnZXIiLCJtYXgiLCJtaW4iLCJjZWlsIiwiZmxvb3IiLCJpc05hTiIsIklPYmplY3QiLCJkZWZpbmVkIiwidmFsdWVPZiIsImlkIiwicHgiLCJyYW5kb20iLCJjb25jYXQiLCJ0b09iamVjdCIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJyZWFkeSIsImFkZHJlc3NGb3JtTWFwIiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJjb21wYW55Il0sIm1hcHBpbmdzIjoiO2tMQXlCT0EsRUFBS0MsT0FBTEQsRUFrQmNFLEUsV0FDbkIsV0FBWUMsRUFBc0JDLEVBQWlCQyxHQUFzQixpQ0FDdkVDLEtBQUtDLGlCQUFtQlAsRUFBRUksR0FDMUJFLEtBQUtFLHNCQUF3QlIsRUFBRUssR0FDL0JDLEtBQUtHLGNBQWdCVCxFQUFFRyxHQUN2QkcsS0FBS0ksNkJBQWtDUCxFQUF2QyxtQkFDQUcsS0FBS0ssbUNBQXdDTixFQUE3QyxvQkFJSUMsS0FBS0MsaUJBQWlCSyxLQUFLLGNBSS9CTixLQUFLRyxjQUFjSSxHQUFHLFVBQVUsa0JBQU0sRUFBS0MsWUFHM0NSLEtBQUtRLFUsc0RBU0xkLEVBQUVNLEtBQUtLLG9DQUFvQ0ksU0FDM0NULEtBQUtDLGlCQUFpQlMsS0FBSyxZQUFZLEdBQ3FDLElBQXhFQyxTQUFTakIs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ZSI6ImN1c3RvbWVyX2FkZHJlc3NfZm9ybS5idW5kbGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuLyoqXG4gKiBUb2dnbGUgRE5JIGlucHV0IHJlcXVpcmVtZW50IG9uIGNvdW50cnkgc2VsZWN0aW9uXG4gKlxuICogVXNhZ2U6XG4gKlxuICogPCEtLSBDb3VudHJ5IHNlbGVjdCBvcHRpb25zIG11c3QgaGF2ZSBuZWVkX2RuaSBhdHRyaWJ1dGUgd2hlbiBuZWVkZWQgLS0+XG4gKiA8c2VsZWN0IG5hbWU9XCJpZF9jb3VudHJ5XCIgaWQ9XCJpZF9jb3VudHJ5XCIgc3RhdGVzLXVybD1cInBhdGgvdG8vc3RhdGVzL2FwaVwiPlxuICogICAuLi5cbiAqICAgPG9wdGlvbiB2YWx1ZT1cIjZcIiBuZWVkX2RuaT1cIjFcIj5TcGFpbjwvdmFsdWU+XG4gKiAgIC4uLlxuICogPC9zZWxlY3Q+XG4gKlxuICogSW4gSlM6XG4gKlxuICogbmV3IENvdW50cnlEbmlSZXF1aXJlZFRvZ2dsZXIoJyNpZF9jb3VudHJ5JywgJyNpZF9jb3VudHJ5X2RuaScsICdsYWJlbFtmb3I9XCJpZF9jb3VudHJ5X2RuaVwiXScpO1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb3VudHJ5RG5pUmVxdWlyZWRUb2dnbGVyIHtcbiAgY29uc3RydWN0b3IoY291bnRyeUlucHV0U2VsZWN0b3IsIGNvdW50cnlEbmlJbnB1dCwgY291bnRyeURuaUlucHV0TGFiZWwpIHtcbiAgICB0aGlzLiRjb3VudHJ5RG5pSW5wdXQgPSAkKGNvdW50cnlEbmlJbnB1dCk7XG4gICAgdGhpcy4kY291bnRyeURuaUlucHV0TGFiZWwgPSAkKGNvdW50cnlEbmlJbnB1dExhYmVsKTtcbiAgICB0aGlzLiRjb3VudHJ5SW5wdXQgPSAkKGNvdW50cnlJbnB1dFNlbGVjdG9yKTtcbiAgICB0aGlzLmNvdW50cnlJbnB1dFNlbGVjdGVkU2VsZWN0b3IgPSBgJHtjb3VudHJ5SW5wdXRTZWxlY3Rvcn0+b3B0aW9uOnNlbGVjdGVkYDtcbiAgICB0aGlzLmNvdW50cnlEbmlJbnB1dExhYmVsRGFuZ2VyU2VsZWN0b3IgPSBgJHtjb3VudHJ5RG5pSW5wdXRMYWJlbH0+c3Bhbi50ZXh0LWRhbmdlcmA7XG5cbiAgICAvLyBJZiBmaWVsZCBpcyByZXF1aXJlZCByZWdhcmRsZXNzIG9mIHRoZSBjb3VudHJ5XG4gICAgLy8ga2VlcCBpdCByZXF1aXJlZFxuICAgIGlmICh0aGlzLiRjb3VudHJ5RG5pSW5wdXQuYXR0cigncmVxdWlyZWQnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuJGNvdW50cnlJbnB1dC5vbignY2hhbmdlJywgKCkgPT4gdGhpcy50b2dnbGUoKSk7XG5cbiAgICAvLyB0b2dnbGUgb24gcGFnZSBsb2FkXG4gICAgdGhpcy50b2dnbGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIEROSSBpbnB1dCByZXF1aXJlZFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdG9nZ2xlKCkge1xuICAgICQodGhpcy5jb3VudHJ5RG5pSW5wdXRMYWJlbERhbmdlclNlbGVjdG9yKS5yZW1vdmUoKTtcbiAgICB0aGlzLiRjb3VudHJ5RG5pSW5wdXQucHJvcCgncmVxdWlyZWQnLCBmYWxzZSk7XG4gICAgaWYgKHBhcnNlSW50KCQodGhpcy5jb3VudHJ5SW5wdXRTZWxlY3RlZFNlbGVjdG9yKS5hdHRyKCduZWVkX2RuaScpLCAxMCkgPT09IDEpIHtcbiAgICAgIHRoaXMuJGNvdW50cnlEbmlJbnB1dC5wcm9wKCdyZXF1aXJlZCcsIHRydWUpO1xuICAgICAgdGhpcy4kY291bnRyeURuaUlucHV0TGFiZWwucHJlcGVuZCgkKCc8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj4nKSk7XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuLyoqXG4gKiBUb2dnbGUgUG9zdGNvZGUgaW5wdXQgcmVxdWlyZW1lbnQgb24gY291bnRyeSBzZWxlY3Rpb25cbiAqXG4gKiBVc2FnZTpcbiAqXG4gKiA8IS0tIENvdW50cnkgc2VsZWN0IG9wdGlvbnMgbXVzdCBoYXZlIG5lZWRfcG9zdGNvZGUgYXR0cmlidXRlIHdoZW4gbmVlZGVkIC0tPlxuICogPHNlbGVjdCBuYW1lPVwiaWRfY291bnRyeVwiIGlkPVwiaWRfY291bnRyeVwiIHN0YXRlcy11cmw9XCJwYXRoL3RvL3N0YXRlcy9hcGlcIj5cbiAqICAgLi4uXG4gKiAgIDxvcHRpb24gdmFsdWU9XCI2XCIgbmVlZF9wb3N0Y29kZT1cIjFcIj5TcGFpbjwvdmFsdWU+XG4gKiAgIC4uLlxuICogPC9zZWxlY3Q+XG4gKlxuICogSW4gSlM6XG4gKlxuICogbmV3IENvdW50cnlQb3N0Y29kZVJlcXVpcmVkVG9nZ2xlcignI2lkX2NvdW50cnknLCAnI2lkX2NvdW50cnlfcG9zdGNvZGUnLCAnbGFiZWxbZm9yPVwiaWRfY291bnRyeV9wb3N0Y29kZVwiXScpO1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb3VudHJ5UG9zdGNvZGVSZXF1aXJlZFRvZ2dsZXIge1xuICBjb25zdHJ1Y3Rvcihjb3VudHJ5SW5wdXRTZWxlY3RvciwgY291bnRyeVBvc3Rjb2RlSW5wdXQsIGNvdW50cnlQb3N0Y29kZUlucHV0TGFiZWwpIHtcbiAgICB0aGlzLiRjb3VudHJ5UG9zdGNvZGVJbnB1dCA9ICQoY291bnRyeVBvc3Rjb2RlSW5wdXQpO1xuICAgIHRoaXMuJGNvdW50cnlQb3N0Y29kZUlucHV0TGFiZWwgPSAkKGNvdW50cnlQb3N0Y29kZUlucHV0TGFiZWwpO1xuICAgIHRoaXMuJGNvdW50cnlJbnB1dCA9ICQoY291bnRyeUlucHV0U2VsZWN0b3IpO1xuICAgIHRoaXMuY291bnRyeUlucHV0U2VsZWN0ZWRTZWxlY3RvciA9IGAke2NvdW50cnlJbnB1dFNlbGVjdG9yfT5vcHRpb246c2VsZWN0ZWRgO1xuICAgIHRoaXMuY291bnRyeVBvc3Rjb2RlSW5wdXRMYWJlbERhbmdlclNlbGVjdG9yID0gYCR7Y291bnRyeVBvc3Rjb2RlSW5wdXRMYWJlbH0+c3Bhbi50ZXh0LWRhbmdlcmA7XG5cbiAgICAvLyBJZiBmaWVsZCBpcyByZXF1aXJlZCByZWdhcmRsZXNzIG9mIHRoZSBjb3VudHJ5XG4gICAgLy8ga2VlcCBpdCByZXF1aXJlZFxuICAgIGlmICh0aGlzLiRjb3VudHJ5UG9zdGNvZGVJbnB1dC5hdHRyKCdyZXF1aXJlZCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy4kY291bnRyeUlucHV0Lm9uKCdjaGFuZ2UnLCAoKSA9PiB0aGlzLnRvZ2dsZSgpKTtcblxuICAgIC8vIHRvZ2dsZSBvbiBwYWdlIGxvYWRcbiAgICB0aGlzLnRvZ2dsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgUG9zdGNvZGUgaW5wdXQgcmVxdWlyZWRcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICAkKHRoaXMuY291bnRyeVBvc3Rjb2RlSW5wdXRMYWJlbERhbmdlclNlbGVjdG9yKS5yZW1vdmUoKTtcbiAgICB0aGlzLiRjb3VudHJ5UG9zdGNvZGVJbnB1dC5wcm9wKCdyZXF1aXJlZCcsIGZhbHNlKTtcbiAgICBpZiAocGFyc2VJbnQoJCh0aGlzLmNvdW50cnlJbnB1dFNlbGVjdGVkU2VsZWN0b3IpLmF0dHIoJ25lZWRfcG9zdGNvZGUnKSwgMTApID09PSAxKSB7XG4gICAgICB0aGlzLiRjb3VudHJ5UG9zdGNvZGVJbnB1dC5wcm9wKCdyZXF1aXJlZCcsIHRydWUpO1xuICAgICAgdGhpcy4kY291bnRyeVBvc3Rjb2RlSW5wdXRMYWJlbC5wcmVwZW5kKCQoJzxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPicpKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG4vKipcbiAqIERpc3BsYXlzLCBmaWxscyBvciBoaWRlcyBTdGF0ZSBzZWxlY3Rpb24gYmxvY2sgZGVwZW5kaW5nIG9uIHNlbGVjdGVkIGNvdW50cnkuXG4gKlxuICogVXNhZ2U6XG4gKlxuICogPCEtLSBDb3VudHJ5IHNlbGVjdCBtdXN0IGhhdmUgdW5pcXVlIGlkZW50aWZpZXIgJiB1cmwgZm9yIHN0YXRlcyBBUEkgLS0+XG4gKiA8c2VsZWN0IG5hbWU9XCJpZF9jb3VudHJ5XCIgaWQ9XCJpZF9jb3VudHJ5XCIgc3RhdGVzLXVybD1cInBhdGgvdG8vc3RhdGVzL2FwaVwiPlxuICogICAuLi5cbiAqIDwvc2VsZWN0PlxuICpcbiAqIDwhLS0gSWYgc2VsZWN0ZWQgY291bnRyeSBkb2VzIG5vdCBoYXZlIHN0YXRlcywgdGhlbiB0aGlzIGJsb2NrIHdpbGwgYmUgaGlkZGVuIC0tPlxuICogPGRpdiBjbGFzcz1cImpzLXN0YXRlLXNlbGVjdGlvbi1ibG9ja1wiPlxuICogICA8c2VsZWN0IG5hbWU9XCJpZF9zdGF0ZVwiPlxuICogICAgIC4uLlxuICogICA8L3NlbGVjdD5cbiAqIDwvZGl2PlxuICpcbiAqIEluIEpTOlxuICpcbiAqIG5ldyBDb3VudHJ5U3RhdGVTZWxlY3Rpb25Ub2dnbGVyKCcjaWRfY291bnRyeScsICcjaWRfc3RhdGUnLCAnLmpzLXN0YXRlLXNlbGVjdGlvbi1ibG9jaycpO1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb3VudHJ5U3RhdGVTZWxlY3Rpb25Ub2dnbGVyIHtcbiAgY29uc3RydWN0b3IoY291bnRyeUlucHV0U2VsZWN0b3IsIGNvdW50cnlTdGF0ZVNlbGVjdG9yLCBzdGF0ZVNlbGVjdGlvbkJsb2NrU2VsZWN0b3IpIHtcbiAgICB0aGlzLiRzdGF0ZVNlbGVjdGlvbkJsb2NrID0gJChzdGF0ZVNlbGVjdGlvbkJsb2NrU2VsZWN0b3IpO1xuICAgIHRoaXMuJGNvdW50cnlTdGF0ZVNlbGVjdG9yID0gJChjb3VudHJ5U3RhdGVTZWxlY3Rvcik7XG4gICAgdGhpcy4kY291bnRyeUlucHV0ID0gJChjb3VudHJ5SW5wdXRTZWxlY3Rvcik7XG5cbiAgICB0aGlzLiRjb3VudHJ5SW5wdXQub24oJ2NoYW5nZScsICgpID0+IHRoaXMuY2hhbmdlKCkpO1xuXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSBTdGF0ZSBzZWxlY3Rpb25cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNoYW5nZSgpIHtcbiAgICBjb25zdCBjb3VudHJ5SWQgPSB0aGlzLiRjb3VudHJ5SW5wdXQudmFsKCk7XG5cbiAgICBpZiAoY291bnRyeUlkID09PSAnJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAkLmdldCh7XG4gICAgICB1cmw6IHRoaXMuJGNvdW50cnlJbnB1dC5kYXRhKCdzdGF0ZXMtdXJsJyksXG4gICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgICAgZGF0YToge1xuICAgICAgICBpZF9jb3VudHJ5OiBjb3VudHJ5SWQsXG4gICAgICB9LFxuICAgIH0pXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy4kY291bnRyeVN0YXRlU2VsZWN0b3IuZW1wdHkoKTtcblxuICAgICAgICBPYmplY3Qua2V5cyhyZXNwb25zZS5zdGF0ZXMpLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgdGhpcy4kY291bnRyeVN0YXRlU2VsZWN0b3IuYXBwZW5kKFxuICAgICAgICAgICAgJCgnPG9wdGlvbj48L29wdGlvbj4nKVxuICAgICAgICAgICAgICAuYXR0cigndmFsdWUnLCByZXNwb25zZS5zdGF0ZXNbdmFsdWVdKVxuICAgICAgICAgICAgICAudGV4dCh2YWx1ZSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy50b2dnbGUoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2UucmVzcG9uc2VKU09OICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHdpbmRvdy5zaG93RXJyb3JNZXNzYWdlKHJlc3BvbnNlLnJlc3BvbnNlSlNPTi5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICB0b2dnbGUoKSB7XG4gICAgdGhpcy4kc3RhdGVTZWxlY3Rpb25CbG9jay50b2dnbGVDbGFzcygnZC1ub25lJywgIXRoaXMuJGNvdW50cnlTdGF0ZVNlbGVjdG9yLmZpbmQoJ29wdGlvbicpLmxlbmd0aCA+IDApO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXV0b2NvbXBsZXRlV2l0aEVtYWlsIHtcbiAgY29uc3RydWN0b3IoZW1haWxJbnB1dFNlbGVjdG9yLCBtYXAgPSBbXSkge1xuICAgIHRoaXMubWFwID0gbWFwO1xuICAgIHRoaXMuJGVtYWlsSW5wdXQgPSAkKGVtYWlsSW5wdXRTZWxlY3Rvcik7XG4gICAgdGhpcy4kZW1haWxJbnB1dC5vbignY2hhbmdlJywgKCkgPT4gdGhpcy5jaGFuZ2UoKSk7XG4gIH1cblxuICBjaGFuZ2UoKSB7XG4gICAgJC5nZXQoe1xuICAgICAgdXJsOiB0aGlzLiRlbWFpbElucHV0LmRhdGEoJ2N1c3RvbWVyLWluZm9ybWF0aW9uLXVybCcpLFxuICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZW1haWw6IHRoaXMuJGVtYWlsSW5wdXQudmFsKCksXG4gICAgICB9LFxuICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLm1hcCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZVtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAkKHRoaXMubWFwW2tleV0pLnZhbChyZXNwb25zZVtrZXldKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goKHJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHJlc3BvbnNlLnJlc3BvbnNlSlNPTiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LnNob3dFcnJvck1lc3NhZ2UocmVzcG9uc2UucmVzcG9uc2VKU09OLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbi8qKlxuICogRGVmaW5lcyBhbGwgc2VsZWN0b3JzIHRoYXQgYXJlIHVzZWQgaW4gY3VzdG9tZXJzIGFkZHJlc3MgYWRkL2VkaXQgZm9ybS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQge1xuICBhZGRyZXNzRW1haWxJbnB1dDogJyNjdXN0b21lcl9hZGRyZXNzX2N1c3RvbWVyX2VtYWlsJyxcbiAgYWRkcmVzc0ZpcnN0bmFtZUlucHV0OiAnI2N1c3RvbWVyX2FkZHJlc3NfZmlyc3RfbmFtZScsXG4gIGFkZHJlc3NMYXN0bmFtZUlucHV0OiAnI2N1c3RvbWVyX2FkZHJlc3NfbGFzdF9uYW1lJyxcbiAgYWRkcmVzc0NvbXBhbnlJbnB1dDogJyNjdXN0b21lcl9hZGRyZXNzX2NvbXBhbnknLFxuICBhZGRyZXNzQ291bnRyeVNlbGVjdDogJyNjdXN0b21lcl9hZGRyZXNzX2lkX2NvdW50cnknLFxuICBhZGRyZXNzU3RhdGVTZWxlY3Q6ICcjY3VzdG9tZXJfYWRkcmVzc19pZF9zdGF0ZScsXG4gIGFkZHJlc3NTdGF0ZUJsb2NrOiAnLmpzLWFkZHJlc3Mtc3RhdGUtc2VsZWN0JyxcbiAgYWRkcmVzc0RuaUlucHV0OiAnI2N1c3RvbWVyX2FkZHJlc3NfZG5pJyxcbiAgYWRkcmVzc0RuaUlucHV0TGFiZWw6ICdsYWJlbFtmb3I9XCJjdXN0b21lcl9hZGRyZXNzX2RuaVwiXScsXG4gIGFkZHJlc3NQb3N0Y29kZUlucHV0OiAnI2N1c3RvbWVyX2FkZHJlc3NfcG9zdGNvZGUnLFxuICBhZGRyZXNzUG9zdGNvZGVJbnB1dExhYmVsOiAnbGFiZWxbZm9yPVwiY3VzdG9tZXJfYWRkcmVzc19wb3N0Y29kZVwiXScsXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2tleXNcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpO1xuXG52YXIgX2RlZmluZVByb3BlcnR5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RlZmluZVByb3BlcnR5KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICgwLCBfZGVmaW5lUHJvcGVydHkyLmRlZmF1bHQpKHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH07XG59KCk7IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xudmFyICRPYmplY3QgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKSB7XG4gIHJldHVybiAkT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Qua2V5cztcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi4xMScgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIElTX1dSQVAgPSB0eXBlICYgJGV4cG9ydC5XO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV07XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIga2V5LCBvd24sIG91dDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAob3duICYmIGhhcyhleHBvcnRzLCBrZXkpKSBjb250aW51ZTtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IG93biA/IHRhcmdldFtrZXldIDogc291cmNlW2tleV07XG4gICAgLy8gcHJldmVudCBnbG9iYWwgcG9sbHV0aW9uIGZvciBuYW1lc3BhY2VzXG4gICAgZXhwb3J0c1trZXldID0gSVNfR0xPQkFMICYmIHR5cGVvZiB0YXJnZXRba2V5XSAhPSAnZnVuY3Rpb24nID8gc291cmNlW2tleV1cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIDogSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpXG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZSB0aGVtIGluIGxpYnJhcnlcbiAgICA6IElTX1dSQVAgJiYgdGFyZ2V0W2tleV0gPT0gb3V0ID8gKGZ1bmN0aW9uIChDKSB7XG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQykge1xuICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEMoKTtcbiAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDKGEpO1xuICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEMoYSwgYik7XG4gICAgICAgICAgfSByZXR1cm4gbmV3IEMoYSwgYiwgYyk7XG4gICAgICAgIH0gcmV0dXJuIEMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgICBGW1BST1RPVFlQRV0gPSBDW1BST1RPVFlQRV07XG4gICAgICByZXR1cm4gRjtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICB9KShvdXQpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLm1ldGhvZHMuJU5BTUUlXG4gICAgaWYgKElTX1BST1RPKSB7XG4gICAgICAoZXhwb3J0cy52aXJ0dWFsIHx8IChleHBvcnRzLnZpcnR1YWwgPSB7fSkpW2tleV0gPSBvdXQ7XG4gICAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUucHJvdG90eXBlLiVOQU1FJVxuICAgICAgaWYgKHR5cGUgJiAkZXhwb3J0LlIgJiYgZXhwUHJvdG8gJiYgIWV4cFByb3RvW2tleV0pIGhpZGUoZXhwUHJvdG8sIGtleSwgb3V0KTtcbiAgICB9XG4gIH1cbn07XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gdHJ1ZTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07XG4iLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcbiIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwidmFyIGlkID0gMDtcbnZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjQgLyAxNS4yLjMuNiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnR5OiByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mIH0pO1xuIiwiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IEF1dG9jb21wbGV0ZVdpdGhFbWFpbCBmcm9tICdAY29tcG9uZW50cy9mb3JtL2F1dG9jb21wbGV0ZS13aXRoLWVtYWlsJztcbmltcG9ydCBDb3VudHJ5U3RhdGVTZWxlY3Rpb25Ub2dnbGVyIGZyb20gJ0Bjb21wb25lbnRzL2NvdW50cnktc3RhdGUtc2VsZWN0aW9uLXRvZ2dsZXInO1xuaW1wb3J0IENvdW50cnlEbmlSZXF1aXJlZFRvZ2dsZXIgZnJvbSAnQGNvbXBvbmVudHMvY291bnRyeS1kbmktcmVxdWlyZWQtdG9nZ2xlcic7XG5pbXBvcnQgQ291bnRyeVBvc3Rjb2RlUmVxdWlyZWRUb2dnbGVyIGZyb20gJ0Bjb21wb25lbnRzL2NvdW50cnktcG9zdGNvZGUtcmVxdWlyZWQtdG9nZ2xlcic7XG5pbXBvcnQgYWRkcmVzc0Zvcm1NYXAgZnJvbSAnLi9hZGRyZXNzLWZvcm0tbWFwJztcblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG4kKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gIG5ldyBBdXRvY29tcGxldGVXaXRoRW1haWwoXG4gICAgYWRkcmVzc0Zvcm1NYXAuYWRkcmVzc0VtYWlsSW5wdXQsXG4gICAge1xuICAgICAgZmlyc3ROYW1lOiBhZGRyZXNzRm9ybU1hcC5hZGRyZXNzRmlyc3RuYW1lSW5wdXQsXG4gICAgICBsYXN0TmFtZTogYWRkcmVzc0Zvcm1NYXAuYWRkcmVzc0xhc3RuYW1lSW5wdXQsXG4gICAgICBjb21wYW55OiBhZGRyZXNzRm9ybU1hcC5hZGRyZXNzQ29tcGFueUlucHV0LFxuICAgIH0sXG4gICk7XG4gIG5ldyBDb3VudHJ5U3RhdGVTZWxlY3Rpb25Ub2dnbGVyKFxuICAgIGFkZHJlc3NGb3JtTWFwLmFkZHJlc3NDb3VudHJ5U2VsZWN0LFxuICAgIGFkZHJlc3NGb3JtTWFwLmFkZHJlc3NTdGF0ZVNlbGVjdCxcbiAgICBhZGRyZXNzRm9ybU1hcC5hZGRyZXNzU3RhdGVCbG9jayxcbiAgKTtcbiAgbmV3IENvdW50cnlEbmlSZXF1aXJlZFRvZ2dsZXIoXG4gICAgYWRkcmVzc0Zvcm1NYXAuYWRkcmVzc0NvdW50cnlTZWxlY3QsXG4gICAgYWRkcmVzc0Zvcm1NYXAuYWRkcmVzc0RuaUlucHV0LFxuICAgIGFkZHJlc3NGb3JtTWFwLmFkZHJlc3NEbmlJbnB1dExhYmVsLFxuICApO1xuICBuZXcgQ291bnRyeVBvc3Rjb2RlUmVxdWlyZWRUb2dnbGVyKFxuICAgIGFkZHJlc3NGb3JtTWFwLmFkZHJlc3NDb3VudHJ5U2VsZWN0LFxuICAgIGFkZHJlc3NGb3JtTWFwLmFkZHJlc3NQb3N0Y29kZUlucHV0LFxuICAgIGFkZHJlc3NGb3JtTWFwLmFkZHJlc3NQb3N0Y29kZUlucHV0TGFiZWwsXG4gICk7XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=