mailgun.js 4.1.1 → 4.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
1
  /*! For license information please see mailgun.web.js.LICENSE.txt */
2
- !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.mailgun=e():t.mailgun=e()}(this,(function(){return(()=>{var t={48:function(t,e,r){"use strict";var n=(this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}})(r(475)),o=function(){function t(t){this.formData=t}return t.prototype.client=function(t){return new n.default(t,this.formData)},t}();t.exports=o},475:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=o(r(438)),i=o(r(373)),a=o(r(22)),u=o(r(747)),h=o(r(778)),p=o(r(750)),c=o(r(197)),f=o(r(277)),l=o(r(721)),d=o(r(345)),y=o(r(602)),m=o(r(126)),v=o(r(135)),b=o(r(60)),g=o(r(734)),_=function(t,e){var r=n({},t);if(r.url||(r.url="https://api.mailgun.net"),!r.username)throw new Error('Parameter "username" is required');if(!r.key)throw new Error('Parameter "key" is required');this.request=new s.default(r,e);var o=new v.default(this.request),_=new b.default(this.request),w=new g.default(this.request);this.domains=new i.default(this.request,_),this.webhooks=new p.default(this.request),this.events=new a.default(this.request),this.stats=new u.default(this.request),this.suppressions=new h.default(this.request),this.messages=new c.default(this.request),this.routes=new f.default(this.request),this.ips=new d.default(this.request),this.ip_pools=new y.default(this.request),this.lists=new m.default(this.request,o),this.validate=new l.default(this.request,w)};e.default=_},373:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.Domain=void 0;var s=o(r(78)),i=o(r(142)),a=function(t,e,r){this.name=t.name,this.require_tls=t.require_tls,this.skip_verification=t.skip_verification,this.state=t.state,this.wildcard=t.wildcard,this.spam_action=t.spam_action,this.created_at=t.created_at,this.smtp_password=t.smtp_password,this.smtp_login=t.smtp_login,this.type=t.type,this.receiving_dns_records=e||null,this.sending_dns_records=r||null};e.Domain=a;var u=function(){function t(t,e){this.request=t,this.domainCredentials=e}return t.prototype._parseMessage=function(t){return t.body},t.prototype._parseDomainList=function(t){return t.body.items.map((function(t){return new a(t)}))},t.prototype._parseDomain=function(t){return new a(t.body.domain,t.body.receiving_dns_records,t.body.sending_dns_records)},t.prototype._parseTrackingSettings=function(t){return t.body.tracking},t.prototype._parseTrackingUpdate=function(t){return t.body},t.prototype.list=function(t){var e=this;return this.request.get("/v3/domains",t).then((function(t){return e._parseDomainList(t)}))},t.prototype.get=function(t){var e=this;return this.request.get("/v3/domains/"+t).then((function(t){return e._parseDomain(t)}))},t.prototype.create=function(t){var e=this,r=n({},t);return"force_dkim_authority"in r&&"boolean"==typeof r.force_dkim_authority&&(r.force_dkim_authority="true"===r.toString()?"true":"false"),this.request.postWithFD("/v3/domains",r).then((function(t){return e._parseDomain(t)}))},t.prototype.destroy=function(t){var e=this;return this.request.delete("/v3/domains/"+t).then((function(t){return e._parseMessage(t)}))},t.prototype.getConnection=function(t){return this.request.get("/v3/domains/"+t+"/connection").then((function(t){return t})).then((function(t){return t.body.connection}))},t.prototype.updateConnection=function(t,e){return this.request.put("/v3/domains/"+t+"/connection",e).then((function(t){return t})).then((function(t){return t.body}))},t.prototype.getTracking=function(t){return this.request.get((0,s.default)("/v3/domains",t,"tracking")).then(this._parseTrackingSettings)},t.prototype.updateTracking=function(t,e,r){var n=this;if("boolean"==typeof(null==r?void 0:r.active))throw new i.default({status:400,statusText:"",body:{message:'Property "active" must contain string value.'}});return this.request.putWithFD((0,s.default)("/v3/domains",t,"tracking",e),r).then((function(t){return n._parseTrackingUpdate(t)}))},t.prototype.getIps=function(t){return this.request.get((0,s.default)("/v3/domains",t,"ips")).then((function(t){var e;return null===(e=null==t?void 0:t.body)||void 0===e?void 0:e.items}))},t.prototype.assignIp=function(t,e){return this.request.postWithFD((0,s.default)("/v3/domains",t,"ips"),{ip:e})},t.prototype.deleteIp=function(t,e){return this.request.delete((0,s.default)("/v3/domains",t,"ips",e))},t.prototype.linkIpPool=function(t,e){return this.request.postWithFD((0,s.default)("/v3/domains",t,"ips"),{pool_id:e})},t.prototype.unlinkIpPoll=function(t,e){var r="";if(e.pool_id&&e.ip)throw new i.default({status:400,statusText:"",body:{message:"Please specify either pool_id or ip (not both)"}});return e.pool_id?r="?pool_id="+e.pool_id:e.ip&&(r="?ip="+e.ip),this.request.delete((0,s.default)("/v3/domains",t,"ips","ip_pool",r))},t.prototype.updateDKIMAuthority=function(t,e){return this.request.put("/v3/domains/"+t+"/dkim_authority",{},{query:"self="+e.self}).then((function(t){return t})).then((function(t){return t.body}))},t.prototype.updateDKIMSelector=function(t,e){return this.request.put("/v3/domains/"+t+"/dkim_selector",{},{query:"dkim_selector="+e.dkimSelector}).then((function(t){return t}))},t.prototype.updateWebPrefix=function(t,e){return this.request.put("/v3/domains/"+t+"/web_prefix",{},{query:"web_prefix="+e.webPrefix}).then((function(t){return t}))},t}();e.default=u},60:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=n(r(78)),s=function(){function t(t){this.request=t,this.baseRoute="/v3/domains/"}return t.prototype._parseDomainCredentialsList=function(t){return{items:t.body.items,totalCount:t.body.total_count}},t.prototype._parseMessageResponse=function(t){return{status:t.status,message:t.body.message}},t.prototype._parseDeletedResponse=function(t){return{status:t.status,message:t.body.message,spec:t.body.spec}},t.prototype.list=function(t,e){var r=this;return this.request.get((0,o.default)(this.baseRoute,t,"/credentials"),e).then((function(t){return r._parseDomainCredentialsList(t)}))},t.prototype.create=function(t,e){var r=this;return this.request.postWithFD(""+this.baseRoute+t+"/credentials",e).then((function(t){return r._parseMessageResponse(t)}))},t.prototype.update=function(t,e,r){var n=this;return this.request.putWithFD(""+this.baseRoute+t+"/credentials/"+e,r).then((function(t){return n._parseMessageResponse(t)}))},t.prototype.destroy=function(t,e){var r=this;return this.request.delete(""+this.baseRoute+t+"/credentials/"+e).then((function(t){return r._parseDeletedResponse(t)}))},t}();e.default=s},142:function(t,e){"use strict";var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var o=function(t){function e(e){var r=e.status,n=e.statusText,o=e.message,s=e.body,i=void 0===s?{}:s,a=this,u=i.message,h=i.error;return(a=t.call(this)||this).stack="",a.status=r,a.message=o||h||n,a.details=u,a}return n(e,t),e}(Error);e.default=o},22:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=o(r(78)),i=function(){function t(t){this.request=t}return t.prototype._parsePageNumber=function(t){return t.split("/").pop()},t.prototype._parsePage=function(t,e){return{id:t,number:this._parsePageNumber(e),url:e}},t.prototype._parsePageLinks=function(t){var e=this;return Object.entries(t.body.paging).reduce((function(t,r){var n=r[0],o=r[1];return t[n]=e._parsePage(n,o),t}),{})},t.prototype._parseEventList=function(t){return{items:t.body.items,pages:this._parsePageLinks(t)}},t.prototype.get=function(t,e){var r,o=this,i=n({},e);return i&&i.page?(r=(0,s.default)("/v3",t,"events",i.page),delete i.page):r=(0,s.default)("/v3",t,"events"),this.request.get(r,i).then((function(t){return o._parseEventList(t)}))},t}();e.default=i},602:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.request=t}return t.prototype.list=function(t){var e=this;return this.request.get("/v1/ip_pools",t).then((function(t){return e.parseIpPoolsResponse(t)}))},t.prototype.create=function(t){return this.request.postWithFD("/v1/ip_pools",t).then((function(t){return null==t?void 0:t.body}))},t.prototype.update=function(t,e){return this.request.patchWithFD("/v1/ip_pools/"+t,e).then((function(t){return null==t?void 0:t.body}))},t.prototype.delete=function(t,e){return this.request.delete("/v1/ip_pools/"+t,e).then((function(t){return null==t?void 0:t.body}))},t.prototype.parseIpPoolsResponse=function(t){return t.body.ip_pools},t}();e.default=r},345:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.request=t}return t.prototype.list=function(t){var e=this;return this.request.get("/v3/ips",t).then((function(t){return e.parseIpsResponse(t)}))},t.prototype.get=function(t){var e=this;return this.request.get("/v3/ips/"+t).then((function(t){return e.parseIpsResponse(t)}))},t.prototype.parseIpsResponse=function(t){return t.body},t}();e.default=r},126:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){this.request=t,this.baseRoute="/v3/lists",this.members=e}return t.prototype.list=function(t){return this.request.get(this.baseRoute+"/pages",t).then((function(t){return t.body.items}))},t.prototype.get=function(t){return this.request.get(this.baseRoute+"/"+t).then((function(t){return t.body.list}))},t.prototype.create=function(t){return this.request.postWithFD(this.baseRoute,t).then((function(t){return t.body.list}))},t.prototype.update=function(t,e){return this.request.putWithFD(this.baseRoute+"/"+t,e).then((function(t){return t.body.list}))},t.prototype.destroy=function(t){return this.request.delete(this.baseRoute+"/"+t).then((function(t){return t.body}))},t}();e.default=r},135:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t){this.request=t,this.baseRoute="/v3/lists"}return t.prototype.checkAndUpdateData=function(t){var e=r({},t);return"object"==typeof t.vars&&(e.vars=JSON.stringify(e.vars)),"boolean"==typeof t.subscribed&&(e.subscribed=t.subscribed?"yes":"no"),e},t.prototype.listMembers=function(t,e){return this.request.get(this.baseRoute+"/"+t+"/members/pages",e).then((function(t){return t.body.items}))},t.prototype.getMember=function(t,e){return this.request.get(this.baseRoute+"/"+t+"/members/"+e).then((function(t){return t.body.member}))},t.prototype.createMember=function(t,e){var r=this.checkAndUpdateData(e);return this.request.postWithFD(this.baseRoute+"/"+t+"/members",r).then((function(t){return t.body.member}))},t.prototype.createMembers=function(t,e){var r={members:Array.isArray(e.members)?JSON.stringify(e.members):e.members,upsert:e.upsert};return this.request.postWithFD(this.baseRoute+"/"+t+"/members.json",r).then((function(t){return t.body}))},t.prototype.updateMember=function(t,e,r){var n=this.checkAndUpdateData(r);return this.request.putWithFD(this.baseRoute+"/"+t+"/members/"+e,n).then((function(t){return t.body.member}))},t.prototype.destroyMember=function(t,e){return this.request.delete(this.baseRoute+"/"+t+"/members/"+e).then((function(t){return t.body}))},t}();e.default=n},197:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.request=t}return t.prototype._parseResponse=function(t){return t.body?t.body:t},t.prototype.create=function(t,e){return e.message?this.request.postWithFD("/v3/"+t+"/messages.mime",e).then(this._parseResponse):this.request.postWithFD("/v3/"+t+"/messages",e).then(this._parseResponse)},t}();e.default=r},734:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.request=t}return t.prototype.list=function(){return this.request.get("/v4/address/validate/bulk").then((function(t){return t.body}))},t.prototype.get=function(t){return this.request.get("/v4/address/validate/bulk/"+t).then((function(t){return t.body}))},t.prototype.create=function(t,e){return this.request.postWithFD("/v4/address/validate/bulk/"+t,e).then((function(t){return t.body}))},t.prototype.destroy=function(t){return this.request.delete("/v4/address/validate/bulk/"+t).then((function(t){return t}))},t}();e.default=r},438:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,s){function i(t){try{u(n.next(t))}catch(t){s(t)}}function a(t){try{u(n.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(i,a)}u((n=n.apply(t,e||[])).next())}))},s=this&&this.__generator||function(t,e){var r,n,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var a=i(r(501)),u=i(r(78)),h=i(r(899)),p=i(r(142)),c=function(t){return"object"==typeof t&&"function"==typeof t.pipe};function f(t){return void 0!==t.getHeaders}var l=function(){function t(t,e){this.username=t.username,this.key=t.key,this.url=t.url,this.timeout=t.timeout,this.headers=t.headers||{},this.FormDataConstructor=e}return t.prototype.request=function(t,e,r){return o(this,void 0,void 0,(function(){var o,i,f,l,d,y,m,v;return s(this,(function(s){switch(s.label){case 0:return o=n({},r),i=a.default.encode(this.username+":"+this.key),f=n(n({Authorization:"Basic "+i},this.headers),null==o?void 0:o.headers),null==o||delete o.headers,f["Content-Type"]||delete f["Content-Type"],l=n({},o),(null==o?void 0:o.query)&&Object.getOwnPropertyNames(null==o?void 0:o.query).length>0&&(l.searchParams=o.query,delete l.query),[4,(0,h.default)((0,u.default)(this.url,e),n({method:t.toLocaleUpperCase(),headers:f,throwHttpErrors:!1,timeout:this.timeout},l))];case 1:return(null==(d=s.sent())?void 0:d.ok)?[3,6]:(null==d?void 0:d.body)&&c(d.body)?[4,(b=d.body,g=[],new Promise((function(t,e){b.on("data",(function(t){return g.push(t)})),b.on("error",e),b.on("end",(function(){return t(Buffer.concat(g).toString("utf8"))}))})))]:[3,3];case 2:return m=s.sent(),[3,5];case 3:return[4,null==d?void 0:d.json()];case 4:m=s.sent(),s.label=5;case 5:throw y=m,new p.default({status:null==d?void 0:d.status,statusText:null==d?void 0:d.statusText,body:{message:y}});case 6:return v={},[4,null==d?void 0:d.json()];case 7:return v.body=s.sent(),v.status=null==d?void 0:d.status,[2,v]}var b,g}))}))},t.prototype.query=function(t,e,r,o){return this.request(t,e,n({query:r},o))},t.prototype.command=function(t,e,r,o){return this.request(t,e,n({headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r},o))},t.prototype.get=function(t,e,r){return this.query("get",t,e,r)},t.prototype.head=function(t,e,r){return this.query("head",t,e,r)},t.prototype.options=function(t,e,r){return this.query("options",t,e,r)},t.prototype.post=function(t,e,r){return this.command("post",t,e,r)},t.prototype.postWithFD=function(t,e){if(!e)throw new Error("Please provide data object");var r=this.createFormData(e);return this.command("post",t,r,{headers:{"Content-Type":null}})},t.prototype.putWithFD=function(t,e){if(!e)throw new Error("Please provide data object");var r=this.createFormData(e);return this.command("put",t,r,{headers:{"Content-Type":null}})},t.prototype.patchWithFD=function(t,e){if(!e)throw new Error("Please provide data object");var r=this.createFormData(e);return this.command("patch",t,r,{headers:{"Content-Type":null}})},t.prototype.createFormData=function(t){var e=this;return Object.keys(t).filter((function(e){return t[e]})).reduce((function(r,n){return["attachment","inline","file"].includes(n)?(e.addFilesToFD(n,t[n],r),r):"message"===n?(e.addMimeDataToFD(n,t[n],r),r):(e.addCommonPropertyToFD(n,t[n],r),r)}),new this.FormDataConstructor)},t.prototype.addMimeDataToFD=function(t,e,r){f(r)?Buffer.isBuffer(e)&&r.append(t,e,{filename:"MimeMessage"}):r.append(t,e,"MimeMessage")},t.prototype.addFilesToFD=function(t,e,r){var o=function(t,e,r){var o=c(e)?e:e.data,s=function(t){if("object"!=typeof t||c(t))return{};var e=t.filename,r=t.contentType,o=t.knownLength;return n(n(n({},e?{filename:e}:{filename:"file"}),r&&{contentType:r}),o&&{knownLength:o})}(e);f(r)?r.append(t,o,s):r.append(t,o,s.filename)};Array.isArray(e)?e.forEach((function(e){o(t,e,r)})):o(t,e,r)},t.prototype.addCommonPropertyToFD=function(t,e,r){Array.isArray(e)?e.forEach((function(e){r.append(t,e)})):null!=e&&r.append(t,e)},t.prototype.put=function(t,e,r){return this.command("put",t,e,r)},t.prototype.patch=function(t,e,r){return this.command("patch",t,e,r)},t.prototype.delete=function(t,e,r){return this.command("delete",t,e,r)},t}();e.default=l},277:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.request=t}return t.prototype.list=function(t){return this.request.get("/v3/routes",t).then((function(t){return t.body.items}))},t.prototype.get=function(t){return this.request.get("/v3/routes/"+t).then((function(t){return t.body.route}))},t.prototype.create=function(t){return this.request.postWithFD("/v3/routes",t).then((function(t){return t.body.route}))},t.prototype.update=function(t,e){return this.request.putWithFD("/v3/routes/"+t,e).then((function(t){return t.body}))},t.prototype.destroy=function(t){return this.request.delete("/v3/routes/"+t).then((function(t){return t.body}))},t}();e.default=r},747:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=o(r(78)),i=function(t){this.start=new Date(t.start),this.end=new Date(t.end),this.resolution=t.resolution,this.stats=t.stats.map((function(t){var e=n({},t);return e.time=new Date(t.time),e}))},a=function(){function t(t){this.request=t}return t.prototype._parseStats=function(t){return new i(t.body)},t.prototype.getDomain=function(t,e){return this.request.get((0,s.default)("/v3",t,"stats/total"),e).then(this._parseStats)},t.prototype.getAccount=function(t){return this.request.get("/v3/stats/total",t).then(this._parseStats)},t}();e.default=a},778:function(t,e,r){"use strict";var n=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,s=e.length;o<s;o++)!n&&o in e||(n||(n=Array.prototype.slice.call(e,0,o)),n[o]=e[o]);return t.concat(n||Array.prototype.slice.call(e))},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=o(r(575)),i=o(r(78)),a={headers:{"Content-Type":"application/json"}},u=function(t){this.type="bounces",this.address=t.address,this.code=+t.code,this.error=t.error,this.created_at=new Date(t.created_at)},h=function(t){this.type="complaints",this.address=t.address,this.created_at=new Date(t.created_at)},p=function(t){this.type="unsubscribes",this.address=t.address,this.tags=t.tags,this.created_at=new Date(t.created_at)},c=function(t){this.type="whitelists",this.value=t.value,this.reason=t.reason,this.createdAt=new Date(t.createdAt)},f=function(){function t(t){this.request=t,this.models={bounces:u,complaints:h,unsubscribes:p,whitelists:c}}return t.prototype._parsePage=function(t,e){var r=s.default.parse(e,!0).query;return{id:t,page:r.page,address:r.address,url:e}},t.prototype._parsePageLinks=function(t){var e=this;return Object.entries(t.body.paging).reduce((function(t,r){var n=r[0],o=r[1];return t[n]=e._parsePage(n,o),t}),{})},t.prototype._parseList=function(t,e){var r={};return r.items=t.body.items.map((function(t){return new e(t)})),r.pages=this._parsePageLinks(t),r},t.prototype._parseItem=function(t,e){return new e(t.body)},t.prototype.createWhiteList=function(t,e){return this.request.postWithFD((0,i.default)("v3",t,"whitelists"),e,a).then((function(t){return t.body}))},t.prototype.list=function(t,e,r){var n=this,o=this.models[e];return this.request.get((0,i.default)("v3",t,e),r).then((function(t){return n._parseList(t,o)}))},t.prototype.get=function(t,e,r){var n=this,o=this.models[e];return this.request.get((0,i.default)("v3",t,e,encodeURIComponent(r))).then((function(t){return n._parseItem(t,o)}))},t.prototype.create=function(t,e,r){var o;return"whitelists"===e?this.createWhiteList(t,r):(o=Array.isArray(r)?n([],r,!0):[r],this.request.post((0,i.default)("v3",t,e),JSON.stringify(o),a).then((function(t){return t.body})))},t.prototype.destroy=function(t,e,r){return this.request.delete((0,i.default)("v3",t,e,encodeURIComponent(r))).then((function(t){return t.body}))},t}();e.default=f,t.exports=f},721:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){this.request=t,this.multipleValidation=e}return t.prototype.get=function(t){return this.request.get("/v4/address/validate",{address:t}).then((function(t){return t})).then((function(t){return t.body}))},t}();e.default=r},750:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=n(r(78)),s=function(t,e){this.id=t,this.url=e},i=function(){function t(t){this.request=t}return t.prototype._parseWebhookList=function(t){return t.body.webhooks},t.prototype._parseWebhookWithID=function(t){return function(e){var r,n=null===(r=null==e?void 0:e.body)||void 0===r?void 0:r.webhook,o=null==n?void 0:n.url;return o||(o=(null==n?void 0:n.urls)&&n.urls.length?n.urls[0]:null),new s(t,o)}},t.prototype._parseWebhookTest=function(t){return{code:t.body.code,message:t.body.message}},t.prototype.list=function(t,e){return this.request.get((0,o.default)("/v3/domains",t,"webhooks"),e).then(this._parseWebhookList)},t.prototype.get=function(t,e){return this.request.get((0,o.default)("/v3/domains",t,"webhooks",e)).then(this._parseWebhookWithID(e))},t.prototype.create=function(t,e,r,n){return void 0===n&&(n=!1),n?this.request.putWithFD((0,o.default)("/v3/domains",t,"webhooks",e,"test"),{url:r}).then(this._parseWebhookTest):this.request.postWithFD((0,o.default)("/v3/domains",t,"webhooks"),{id:e,url:r}).then(this._parseWebhookWithID(e))},t.prototype.update=function(t,e,r){return this.request.putWithFD((0,o.default)("/v3/domains",t,"webhooks",e),{url:r}).then(this._parseWebhookWithID(e))},t.prototype.destroy=function(t,e){return this.request.delete((0,o.default)("/v3/domains",t,"webhooks",e)).then(this._parseWebhookWithID(e))},t}();e.default=i},501:function(t,e,r){var n;t=r.nmd(t),function(o){var s=e,i=(t&&t.exports,"object"==typeof r.g&&r.g);i.global!==i&&i.window;var a=function(t){this.message=t};(a.prototype=new Error).name="InvalidCharacterError";var u=function(t){throw new a(t)},h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",p=/[\t\n\f\r ]/g,c={encode:function(t){t=String(t),/[^\0-\xFF]/.test(t)&&u("The string to be encoded contains characters outside of the Latin1 range.");for(var e,r,n,o,s=t.length%3,i="",a=-1,p=t.length-s;++a<p;)e=t.charCodeAt(a)<<16,r=t.charCodeAt(++a)<<8,n=t.charCodeAt(++a),i+=h.charAt((o=e+r+n)>>18&63)+h.charAt(o>>12&63)+h.charAt(o>>6&63)+h.charAt(63&o);return 2==s?(e=t.charCodeAt(a)<<8,r=t.charCodeAt(++a),i+=h.charAt((o=e+r)>>10)+h.charAt(o>>4&63)+h.charAt(o<<2&63)+"="):1==s&&(o=t.charCodeAt(a),i+=h.charAt(o>>2)+h.charAt(o<<4&63)+"=="),i},decode:function(t){var e=(t=String(t).replace(p,"")).length;e%4==0&&(e=(t=t.replace(/==?$/,"")).length),(e%4==1||/[^+a-zA-Z0-9/]/.test(t))&&u("Invalid character: the string to be decoded is not correctly encoded.");for(var r,n,o=0,s="",i=-1;++i<e;)n=h.indexOf(t.charAt(i)),r=o%4?64*r+n:n,o++%4&&(s+=String.fromCharCode(255&r>>(-2*o&6)));return s},version:"1.0.0"};void 0===(n=function(){return c}.call(e,r,e,t))||(t.exports=n)}()},899:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>j});const n={},o=t=>"undefined"!=typeof self&&self&&t in self?self:"undefined"!=typeof window&&window&&t in window?window:void 0!==r.g&&r.g&&t in r.g?r.g:"undefined"!=typeof globalThis&&globalThis?globalThis:void 0,s=["Headers","Request","Response","ReadableStream","fetch","AbortController","FormData"];for(const t of s)Object.defineProperty(n,t,{get(){const e=o(t),r=e&&e[t];return"function"==typeof r?r.bind(e):r}});const i=t=>null!==t&&"object"==typeof t,a="function"==typeof n.AbortController,u="function"==typeof n.ReadableStream,h="function"==typeof n.FormData,p=(t,e)=>{const r=new n.Headers(t||{}),o=e instanceof n.Headers,s=new n.Headers(e||{});for(const[t,e]of s)o&&"undefined"===e||void 0===e?r.delete(t):r.set(t,e);return r},c=(...t)=>{let e={},r={};for(const n of t){if(Array.isArray(n))Array.isArray(e)||(e=[]),e=[...e,...n];else if(i(n)){for(let[t,r]of Object.entries(n))i(r)&&t in e&&(r=c(e[t],r)),e={...e,[t]:r};i(n.headers)&&(r=p(r,n.headers))}e.headers=r}return e},f=["get","post","put","patch","head","delete"],l={json:"application/json",text:"text/*",formData:"multipart/form-data",arrayBuffer:"*/*",blob:"*/*"},d=[413,429,503],y=Symbol("stop");class HTTPError extends Error{constructor(t){super(t.statusText||String(0===t.status||t.status?t.status:"Unknown response error")),this.name="HTTPError",this.response=t}}class TimeoutError extends Error{constructor(t){super("Request timed out"),this.name="TimeoutError",this.request=t}}const m=t=>new Promise((e=>setTimeout(e,t))),v=t=>f.includes(t)?t.toUpperCase():t,b={limit:2,methods:["get","put","head","delete","options","trace"],statusCodes:[408,413,429,500,502,503,504],afterStatusCodes:d},g=(t={})=>{if("number"==typeof t)return{...b,limit:t};if(t.methods&&!Array.isArray(t.methods))throw new Error("retry.methods must be an array");if(t.statusCodes&&!Array.isArray(t.statusCodes))throw new Error("retry.statusCodes must be an array");return{...b,...t,afterStatusCodes:d}},_=2147483647;class Ky{constructor(t,e={}){if(this._retryCount=0,this._input=t,this._options={credentials:this._input.credentials||"same-origin",...e,headers:p(this._input.headers,e.headers),hooks:c({beforeRequest:[],beforeRetry:[],afterResponse:[]},e.hooks),method:v(e.method||this._input.method),prefixUrl:String(e.prefixUrl||""),retry:g(e.retry),throwHttpErrors:!1!==e.throwHttpErrors,timeout:void 0===e.timeout?1e4:e.timeout,fetch:e.fetch||n.fetch},"string"!=typeof this._input&&!(this._input instanceof URL||this._input instanceof n.Request))throw new TypeError("`input` must be a string, URL, or Request");if(this._options.prefixUrl&&"string"==typeof this._input){if(this._input.startsWith("/"))throw new Error("`input` must not begin with a slash when using `prefixUrl`");this._options.prefixUrl.endsWith("/")||(this._options.prefixUrl+="/"),this._input=this._options.prefixUrl+this._input}if(a&&(this.abortController=new n.AbortController,this._options.signal&&this._options.signal.addEventListener("abort",(()=>{this.abortController.abort()})),this._options.signal=this.abortController.signal),this.request=new n.Request(this._input,this._options),this._options.searchParams){const t="?"+new URLSearchParams(this._options.searchParams).toString(),e=this.request.url.replace(/(?:\?.*?)?(?=#|$)/,t);console.log("url ---------\x3e",e),!(h&&this._options.body instanceof n.FormData||this._options.body instanceof URLSearchParams)||this._options.headers&&this._options.headers["content-type"]||this.request.headers.delete("content-type"),this.request=new n.Request(new n.Request(e,this.request),this._options)}void 0!==this._options.json&&(this._options.body=JSON.stringify(this._options.json),this.request.headers.set("content-type","application/json"),this.request=new n.Request(this.request,{body:this._options.body}));const r=async()=>{if(this._options.timeout>_)throw new RangeError("The `timeout` option cannot be greater than 2147483647");await m(1);let t=await this._fetch();for(const e of this._options.hooks.afterResponse){const r=await e(this.request,this._options,this._decorateResponse(t.clone()));r instanceof n.Response&&(t=r)}if(this._decorateResponse(t),!t.ok&&this._options.throwHttpErrors)throw new HTTPError(t);if(this._options.onDownloadProgress){if("function"!=typeof this._options.onDownloadProgress)throw new TypeError("The `onDownloadProgress` option must be a function");if(!u)throw new Error("Streams are not supported in your environment. `ReadableStream` is missing.");return this._stream(t.clone(),this._options.onDownloadProgress)}return t},o=this._options.retry.methods.includes(this.request.method.toLowerCase())?this._retry(r):r();for(const[t,r]of Object.entries(l))o[t]=async()=>{this.request.headers.set("accept",this.request.headers.get("accept")||r);const n=(await o).clone();if("json"===t){if(204===n.status)return"";if(e.parseJson)return e.parseJson(await n.text())}return n[t]()};return o}_calculateRetryDelay(t){if(this._retryCount++,this._retryCount<this._options.retry.limit&&!(t instanceof TimeoutError)){if(t instanceof HTTPError){if(!this._options.retry.statusCodes.includes(t.response.status))return 0;const e=t.response.headers.get("Retry-After");if(e&&this._options.retry.afterStatusCodes.includes(t.response.status)){let t=Number(e);return Number.isNaN(t)?t=Date.parse(e)-Date.now():t*=1e3,void 0!==this._options.retry.maxRetryAfter&&t>this._options.retry.maxRetryAfter?0:t}if(413===t.response.status)return 0}return.3*2**(this._retryCount-1)*1e3}return 0}_decorateResponse(t){return this._options.parseJson&&(t.json=async()=>this._options.parseJson(await t.text())),t}async _retry(t){try{return await t()}catch(e){const r=Math.min(this._calculateRetryDelay(e),_);if(0!==r&&this._retryCount>0){await m(r);for(const t of this._options.hooks.beforeRetry){if(await t({request:this.request,options:this._options,error:e,retryCount:this._retryCount})===y)return}return this._retry(t)}if(this._options.throwHttpErrors)throw e}}async _fetch(){for(const t of this._options.hooks.beforeRequest){const e=await t(this.request,this._options);if(e instanceof Request){this.request=e;break}if(e instanceof Response)return e}return!1===this._options.timeout?this._options.fetch(this.request.clone()):(t=this.request.clone(),e=this.abortController,r=this._options,new Promise(((n,o)=>{const s=setTimeout((()=>{e&&e.abort(),o(new TimeoutError(t))}),r.timeout);r.fetch(t).then(n).catch(o).then((()=>{clearTimeout(s)}))})));var t,e,r}_stream(t,e){const r=Number(t.headers.get("content-length"))||0;let o=0;return new n.Response(new n.ReadableStream({start(n){const s=t.body.getReader();e&&e({percent:0,transferredBytes:0,totalBytes:r},new Uint8Array),async function t(){const{done:i,value:a}=await s.read();if(i)n.close();else{if(e){o+=a.byteLength;e({percent:0===r?0:o/r,transferredBytes:o,totalBytes:r},a)}n.enqueue(a),t()}}()}}))}}const w=(...t)=>{for(const e of t)if((!i(e)||Array.isArray(e))&&void 0!==e)throw new TypeError("The `options` argument must be an object");return c({},...t)},q=t=>{const e=(e,r)=>new Ky(e,w(t,r));for(const r of f)e[r]=(e,n)=>new Ky(e,w(t,n,{method:r}));return e.HTTPError=HTTPError,e.TimeoutError=TimeoutError,e.create=t=>q(w(t)),e.extend=e=>q(w(t,e)),e.stop=y,e},j=q()},971:function(t,e,r){var n;t=r.nmd(t),function(o){e&&e.nodeType,t&&t.nodeType;var s="object"==typeof r.g&&r.g;s.global!==s&&s.window!==s&&s.self;var i,a=2147483647,u=36,h=/^xn--/,p=/[^\x20-\x7E]/,c=/[\x2E\u3002\uFF0E\uFF61]/g,f={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},l=Math.floor,d=String.fromCharCode;function y(t){throw RangeError(f[t])}function m(t,e){for(var r=t.length,n=[];r--;)n[r]=e(t[r]);return n}function v(t,e){var r=t.split("@"),n="";return r.length>1&&(n=r[0]+"@",t=r[1]),n+m((t=t.replace(c,".")).split("."),e).join(".")}function b(t){for(var e,r,n=[],o=0,s=t.length;o<s;)(e=t.charCodeAt(o++))>=55296&&e<=56319&&o<s?56320==(64512&(r=t.charCodeAt(o++)))?n.push(((1023&e)<<10)+(1023&r)+65536):(n.push(e),o--):n.push(e);return n}function g(t){return m(t,(function(t){var e="";return t>65535&&(e+=d((t-=65536)>>>10&1023|55296),t=56320|1023&t),e+=d(t)})).join("")}function _(t,e){return t+22+75*(t<26)-((0!=e)<<5)}function w(t,e,r){var n=0;for(t=r?l(t/700):t>>1,t+=l(t/e);t>455;n+=u)t=l(t/35);return l(n+36*t/(t+38))}function q(t){var e,r,n,o,s,i,h,p,c,f,d,m=[],v=t.length,b=0,_=128,q=72;for((r=t.lastIndexOf("-"))<0&&(r=0),n=0;n<r;++n)t.charCodeAt(n)>=128&&y("not-basic"),m.push(t.charCodeAt(n));for(o=r>0?r+1:0;o<v;){for(s=b,i=1,h=u;o>=v&&y("invalid-input"),((p=(d=t.charCodeAt(o++))-48<10?d-22:d-65<26?d-65:d-97<26?d-97:u)>=u||p>l((a-b)/i))&&y("overflow"),b+=p*i,!(p<(c=h<=q?1:h>=q+26?26:h-q));h+=u)i>l(a/(f=u-c))&&y("overflow"),i*=f;q=w(b-s,e=m.length+1,0==s),l(b/e)>a-_&&y("overflow"),_+=l(b/e),b%=e,m.splice(b++,0,_)}return g(m)}function j(t){var e,r,n,o,s,i,h,p,c,f,m,v,g,q,j,D=[];for(v=(t=b(t)).length,e=128,r=0,s=72,i=0;i<v;++i)(m=t[i])<128&&D.push(d(m));for(n=o=D.length,o&&D.push("-");n<v;){for(h=a,i=0;i<v;++i)(m=t[i])>=e&&m<h&&(h=m);for(h-e>l((a-r)/(g=n+1))&&y("overflow"),r+=(h-e)*g,e=h,i=0;i<v;++i)if((m=t[i])<e&&++r>a&&y("overflow"),m==e){for(p=r,c=u;!(p<(f=c<=s?1:c>=s+26?26:c-s));c+=u)j=p-f,q=u-f,D.push(d(_(f+j%q,0))),p=l(j/q);D.push(d(_(p,0))),s=w(r,g,n==o),r=0,++n}++r,++e}return D.join("")}i={version:"1.3.2",ucs2:{decode:b,encode:g},decode:q,encode:j,toASCII:function(t){return v(t,(function(t){return p.test(t)?"xn--"+j(t):t}))},toUnicode:function(t){return v(t,(function(t){return h.test(t)?q(t.slice(4).toLowerCase()):t}))}},void 0===(n=function(){return i}.call(e,r,e,t))||(t.exports=n)}()},587:t=>{"use strict";function e(t,e){return Object.prototype.hasOwnProperty.call(t,e)}t.exports=function(t,r,n,o){r=r||"&",n=n||"=";var s={};if("string"!=typeof t||0===t.length)return s;var i=/\+/g;t=t.split(r);var a=1e3;o&&"number"==typeof o.maxKeys&&(a=o.maxKeys);var u=t.length;a>0&&u>a&&(u=a);for(var h=0;h<u;++h){var p,c,f,l,d=t[h].replace(i,"%20"),y=d.indexOf(n);y>=0?(p=d.substr(0,y),c=d.substr(y+1)):(p=d,c=""),f=decodeURIComponent(p),l=decodeURIComponent(c),e(s,f)?Array.isArray(s[f])?s[f].push(l):s[f]=[s[f],l]:s[f]=l}return s}},361:t=>{"use strict";var e=function(t){switch(typeof t){case"string":return t;case"boolean":return t?"true":"false";case"number":return isFinite(t)?t:"";default:return""}};t.exports=function(t,r,n,o){return r=r||"&",n=n||"=",null===t&&(t=void 0),"object"==typeof t?Object.keys(t).map((function(o){var s=encodeURIComponent(e(o))+n;return Array.isArray(t[o])?t[o].map((function(t){return s+encodeURIComponent(e(t))})).join(r):s+encodeURIComponent(e(t[o]))})).join(r):o?encodeURIComponent(e(o))+n+encodeURIComponent(e(t)):""}},673:(t,e,r)=>{"use strict";e.decode=e.parse=r(587),e.encode=e.stringify=r(361)},78:t=>{function e(t){return t.replace(/[\/]+/g,"/").replace(/\/\?/g,"?").replace(/\/\#/g,"#").replace(/\:\//g,"://")}t.exports=function(){var t=[].slice.call(arguments,0).join("/");return e(t)}},575:(t,e,r)=>{"use strict";var n=r(971),o=r(502);function s(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}e.parse=g,e.resolve=function(t,e){return g(t,!1,!0).resolve(e)},e.resolveObject=function(t,e){return t?g(t,!1,!0).resolveObject(e):e},e.format=function(t){o.isString(t)&&(t=g(t));return t instanceof s?t.format():s.prototype.format.call(t)},e.Url=s;var i=/^([a-z0-9.+-]+:)/i,a=/:[0-9]*$/,u=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,h=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),p=["'"].concat(h),c=["%","/","?",";","#"].concat(p),f=["/","?","#"],l=/^[+a-z0-9A-Z_-]{0,63}$/,d=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,y={javascript:!0,"javascript:":!0},m={javascript:!0,"javascript:":!0},v={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},b=r(673);function g(t,e,r){if(t&&o.isObject(t)&&t instanceof s)return t;var n=new s;return n.parse(t,e,r),n}s.prototype.parse=function(t,e,r){if(!o.isString(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var s=t.indexOf("?"),a=-1!==s&&s<t.indexOf("#")?"?":"#",h=t.split(a);h[0]=h[0].replace(/\\/g,"/");var g=t=h.join(a);if(g=g.trim(),!r&&1===t.split("#").length){var _=u.exec(g);if(_)return this.path=g,this.href=g,this.pathname=_[1],_[2]?(this.search=_[2],this.query=e?b.parse(this.search.substr(1)):this.search.substr(1)):e&&(this.search="",this.query={}),this}var w=i.exec(g);if(w){var q=(w=w[0]).toLowerCase();this.protocol=q,g=g.substr(w.length)}if(r||w||g.match(/^\/\/[^@\/]+@[^@\/]+/)){var j="//"===g.substr(0,2);!j||w&&m[w]||(g=g.substr(2),this.slashes=!0)}if(!m[w]&&(j||w&&!v[w])){for(var D,O,R=-1,x=0;x<f.length;x++){-1!==(C=g.indexOf(f[x]))&&(-1===R||C<R)&&(R=C)}-1!==(O=-1===R?g.lastIndexOf("@"):g.lastIndexOf("@",R))&&(D=g.slice(0,O),g=g.slice(O+1),this.auth=decodeURIComponent(D)),R=-1;for(x=0;x<c.length;x++){var C;-1!==(C=g.indexOf(c[x]))&&(-1===R||C<R)&&(R=C)}-1===R&&(R=g.length),this.host=g.slice(0,R),g=g.slice(R),this.parseHost(),this.hostname=this.hostname||"";var k="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!k)for(var P=this.hostname.split(/\./),A=(x=0,P.length);x<A;x++){var T=P[x];if(T&&!T.match(l)){for(var F="",M=0,E=T.length;M<E;M++)T.charCodeAt(M)>127?F+="x":F+=T[M];if(!F.match(l)){var S=P.slice(0,x),W=P.slice(x+1),I=T.match(d);I&&(S.push(I[1]),W.unshift(I[2])),W.length&&(g="/"+W.join(".")+g),this.hostname=S.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),k||(this.hostname=n.toASCII(this.hostname));var U=this.port?":"+this.port:"",L=this.hostname||"";this.host=L+U,this.href+=this.host,k&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==g[0]&&(g="/"+g))}if(!y[q])for(x=0,A=p.length;x<A;x++){var N=p[x];if(-1!==g.indexOf(N)){var H=encodeURIComponent(N);H===N&&(H=escape(N)),g=g.split(N).join(H)}}var B=g.indexOf("#");-1!==B&&(this.hash=g.substr(B),g=g.slice(0,B));var J=g.indexOf("?");if(-1!==J?(this.search=g.substr(J),this.query=g.substr(J+1),e&&(this.query=b.parse(this.query)),g=g.slice(0,J)):e&&(this.search="",this.query={}),g&&(this.pathname=g),v[q]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){U=this.pathname||"";var K=this.search||"";this.path=U+K}return this.href=this.format(),this},s.prototype.format=function(){var t=this.auth||"";t&&(t=(t=encodeURIComponent(t)).replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",n=this.hash||"",s=!1,i="";this.host?s=t+this.host:this.hostname&&(s=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(s+=":"+this.port)),this.query&&o.isObject(this.query)&&Object.keys(this.query).length&&(i=b.stringify(this.query));var a=this.search||i&&"?"+i||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||v[e])&&!1!==s?(s="//"+(s||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):s||(s=""),n&&"#"!==n.charAt(0)&&(n="#"+n),a&&"?"!==a.charAt(0)&&(a="?"+a),e+s+(r=r.replace(/[?#]/g,(function(t){return encodeURIComponent(t)})))+(a=a.replace("#","%23"))+n},s.prototype.resolve=function(t){return this.resolveObject(g(t,!1,!0)).format()},s.prototype.resolveObject=function(t){if(o.isString(t)){var e=new s;e.parse(t,!1,!0),t=e}for(var r=new s,n=Object.keys(this),i=0;i<n.length;i++){var a=n[i];r[a]=this[a]}if(r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol){for(var u=Object.keys(t),h=0;h<u.length;h++){var p=u[h];"protocol"!==p&&(r[p]=t[p])}return v[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r}if(t.protocol&&t.protocol!==r.protocol){if(!v[t.protocol]){for(var c=Object.keys(t),f=0;f<c.length;f++){var l=c[f];r[l]=t[l]}return r.href=r.format(),r}if(r.protocol=t.protocol,t.host||m[t.protocol])r.pathname=t.pathname;else{for(var d=(t.pathname||"").split("/");d.length&&!(t.host=d.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==d[0]&&d.unshift(""),d.length<2&&d.unshift(""),r.pathname=d.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var y=r.pathname||"",b=r.search||"";r.path=y+b}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var g=r.pathname&&"/"===r.pathname.charAt(0),_=t.host||t.pathname&&"/"===t.pathname.charAt(0),w=_||g||r.host&&t.pathname,q=w,j=r.pathname&&r.pathname.split("/")||[],D=(d=t.pathname&&t.pathname.split("/")||[],r.protocol&&!v[r.protocol]);if(D&&(r.hostname="",r.port=null,r.host&&(""===j[0]?j[0]=r.host:j.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===d[0]?d[0]=t.host:d.unshift(t.host)),t.host=null),w=w&&(""===d[0]||""===j[0])),_)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,j=d;else if(d.length)j||(j=[]),j.pop(),j=j.concat(d),r.search=t.search,r.query=t.query;else if(!o.isNullOrUndefined(t.search)){if(D)r.hostname=r.host=j.shift(),(k=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=k.shift(),r.host=r.hostname=k.shift());return r.search=t.search,r.query=t.query,o.isNull(r.pathname)&&o.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!j.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var O=j.slice(-1)[0],R=(r.host||t.host||j.length>1)&&("."===O||".."===O)||""===O,x=0,C=j.length;C>=0;C--)"."===(O=j[C])?j.splice(C,1):".."===O?(j.splice(C,1),x++):x&&(j.splice(C,1),x--);if(!w&&!q)for(;x--;x)j.unshift("..");!w||""===j[0]||j[0]&&"/"===j[0].charAt(0)||j.unshift(""),R&&"/"!==j.join("/").substr(-1)&&j.push("");var k,P=""===j[0]||j[0]&&"/"===j[0].charAt(0);D&&(r.hostname=r.host=P?"":j.length?j.shift():"",(k=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=k.shift(),r.host=r.hostname=k.shift()));return(w=w||r.host&&j.length)&&!P&&j.unshift(""),j.length?r.pathname=j.join("/"):(r.pathname=null,r.path=null),o.isNull(r.pathname)&&o.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},s.prototype.parseHost=function(){var t=this.host,e=a.exec(t);e&&(":"!==(e=e[0])&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},502:t=>{"use strict";t.exports={isString:function(t){return"string"==typeof t},isObject:function(t){return"object"==typeof t&&null!==t},isNull:function(t){return null===t},isNullOrUndefined:function(t){return null==t}}}},e={};function r(n){var o=e[n];if(void 0!==o)return o.exports;var s=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(s.exports,s,s.exports,r),s.loaded=!0,s.exports}return r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),r(48)})()}));
3
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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T0FOQXFqQixFQUFvQkgsR0FBVS9HLEtBQUtsYyxFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTaWpCLEdBRzNFaGpCLEVBQU9takIsUUFBUyxFQUdUbmpCLEVBQU9ELGVDdkJmaWpCLEVBQW9CblUsRUFBSSxDQUFDOU8sRUFBU3NqQixLQUNqQyxJQUFJLElBQUl4aUIsS0FBT3dpQixFQUNYTCxFQUFvQk0sRUFBRUQsRUFBWXhpQixLQUFTbWlCLEVBQW9CTSxFQUFFdmpCLEVBQVNjLElBQzVFc0csT0FBT3lLLGVBQWU3UixFQUFTYyxFQUFLLENBQUUwaUIsWUFBWSxFQUFNM2YsSUFBS3lmLEVBQVd4aUIsTUNKM0VtaUIsRUFBb0JqVCxFQUFJLFdBQ3ZCLEdBQTBCLGlCQUFmMkIsV0FBeUIsT0FBT0EsV0FDM0MsSUFDQyxPQUFPdlIsTUFBUSxJQUFJcWpCLFNBQVMsY0FBYixHQUNkLE1BQU9DLEdBQ1IsR0FBc0IsaUJBQVh4VCxPQUFxQixPQUFPQSxRQUxqQixHQ0F4QitTLEVBQW9CTSxFQUFJLENBQUM5VyxFQUFLeVAsSUFBVTlVLE9BQU9nSixVQUFVNkwsZUFBZUUsS0FBSzFQLEVBQUt5UCxHQ0NsRitHLEVBQW9CVSxFQUFLM2pCLElBQ0gsb0JBQVh3VCxRQUEwQkEsT0FBT29RLGFBQzFDeGMsT0FBT3lLLGVBQWU3UixFQUFTd1QsT0FBT29RLFlBQWEsQ0FBRXJYLE1BQU8sV0FFN0RuRixPQUFPeUssZUFBZTdSLEVBQVMsYUFBYyxDQUFFdU0sT0FBTyxLQ0x2RDBXLEVBQW9CWSxJQUFPNWpCLElBQzFCQSxFQUFPNmpCLE1BQVEsR0FDVjdqQixFQUFPOGpCLFdBQVU5akIsRUFBTzhqQixTQUFXLElBQ2pDOWpCLEdDQWtCZ2pCLEVBQW9CLEtsQ085QyIsInNvdXJjZXMiOlsid2VicGFjazovL21haWxndW4vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL21haWxndW4vLi9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL2NsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL2RvbWFpbnMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9kb21haW5zQ3JlZGVudGlhbHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9lcnJvci50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL2V2ZW50cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL2lwLXBvb2xzLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvaXBzLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvbGlzdHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9tYWlsTGlzdE1lbWJlcnMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9tZXNzYWdlcy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL211bHRpcGxlVmFsaWRhdGlvbi50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL3JlcXVlc3QudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9yb3V0ZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9zdGF0cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL3N1cHByZXNzaW9ucy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL3ZhbGlkYXRlLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvd2ViaG9va3MudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9iYXNlLTY0L2Jhc2U2NC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2t5L2luZGV4LmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvcHVueWNvZGUvcHVueWNvZGUuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy9kZWNvZGUuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy9lbmNvZGUuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL3VybC1qb2luL2xpYi91cmwtam9pbi5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL3VybC91cmwuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy91cmwvdXRpbC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL21haWxndW4vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL21haWxndW4vd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9tYWlsZ3VuL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vbWFpbGd1bi93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL21haWxndW4vd2VicGFjay9ydW50aW1lL25vZGUgbW9kdWxlIGRlY29yYXRvciIsIndlYnBhY2s6Ly9tYWlsZ3VuL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJtYWlsZ3VuXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIm1haWxndW5cIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCJpbXBvcnQgQ2xpZW50IGZyb20gJy4vbGliL2NsaWVudCc7XG5pbXBvcnQgeyBJbnB1dEZvcm1EYXRhIH0gZnJvbSAnLi9saWIvaW50ZXJmYWNlcy9JRm9ybURhdGEnO1xuaW1wb3J0IE9wdGlvbnMgZnJvbSAnLi9saWIvaW50ZXJmYWNlcy9PcHRpb25zJztcblxuY2xhc3MgTWFpbGd1biB7XG4gIHByaXZhdGUgZm9ybURhdGE6IElucHV0Rm9ybURhdGFcblxuICBjb25zdHJ1Y3RvcihGb3JtRGF0YTogSW5wdXRGb3JtRGF0YSkge1xuICAgIHRoaXMuZm9ybURhdGEgPSBGb3JtRGF0YTtcbiAgfVxuXG4gIGNsaWVudChvcHRpb25zOiBPcHRpb25zKSA6IENsaWVudCB7XG4gICAgcmV0dXJuIG5ldyBDbGllbnQob3B0aW9ucywgdGhpcy5mb3JtRGF0YSk7XG4gIH1cbn1cblxuZXhwb3J0ID0gTWFpbGd1bjtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCBPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9PcHRpb25zJztcbmltcG9ydCBSZXF1ZXN0T3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvUmVxdWVzdE9wdGlvbnMnO1xuXG5pbXBvcnQgRG9tYWluQ2xpZW50IGZyb20gJy4vZG9tYWlucyc7XG5pbXBvcnQgRXZlbnRDbGllbnQgZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IFN0YXRzQ2xpZW50IGZyb20gJy4vc3RhdHMnO1xuaW1wb3J0IFN1cHByZXNzaW9uQ2xpZW50IGZyb20gJy4vc3VwcHJlc3Npb25zJztcbmltcG9ydCBXZWJob29rQ2xpZW50IGZyb20gJy4vd2ViaG9va3MnO1xuaW1wb3J0IE1lc3NhZ2VzQ2xpZW50IGZyb20gJy4vbWVzc2FnZXMnO1xuaW1wb3J0IFJvdXRlc0NsaWVudCBmcm9tICcuL3JvdXRlcyc7XG5pbXBvcnQgVmFsaWRhdGVDbGllbnQgZnJvbSAnLi92YWxpZGF0ZSc7XG5pbXBvcnQgSXBzQ2xpZW50IGZyb20gJy4vaXBzJztcbmltcG9ydCBJcFBvb2xzQ2xpZW50IGZyb20gJy4vaXAtcG9vbHMnO1xuaW1wb3J0IExpc3RzQ2xpZW50IGZyb20gJy4vbGlzdHMnO1xuaW1wb3J0IE1haWxMaXN0c01lbWJlcnMgZnJvbSAnLi9tYWlsTGlzdE1lbWJlcnMnO1xuaW1wb3J0IHsgSW5wdXRGb3JtRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9JRm9ybURhdGEnO1xuaW1wb3J0IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IGZyb20gJy4vZG9tYWluc0NyZWRlbnRpYWxzJztcbmltcG9ydCBNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQgZnJvbSAnLi9tdWx0aXBsZVZhbGlkYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGllbnQge1xuICBwcml2YXRlIHJlcXVlc3Q7XG5cbiAgcHVibGljIGRvbWFpbnM7XG4gIHB1YmxpYyB3ZWJob29rcztcbiAgcHVibGljIGV2ZW50cztcbiAgcHVibGljIHN0YXRzO1xuICBwdWJsaWMgc3VwcHJlc3Npb25zO1xuICBwdWJsaWMgbWVzc2FnZXM7XG4gIHB1YmxpYyByb3V0ZXM7XG4gIHB1YmxpYyB2YWxpZGF0ZTtcbiAgcHVibGljIGlwcztcbiAgcHVibGljIGlwX3Bvb2xzO1xuICBwdWJsaWMgbGlzdHM7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucywgZm9ybURhdGE6IElucHV0Rm9ybURhdGEpIHtcbiAgICBjb25zdCBjb25maWc6IFJlcXVlc3RPcHRpb25zID0geyAuLi5vcHRpb25zIH0gYXMgUmVxdWVzdE9wdGlvbnM7XG5cbiAgICBpZiAoIWNvbmZpZy51cmwpIHtcbiAgICAgIGNvbmZpZy51cmwgPSAnaHR0cHM6Ly9hcGkubWFpbGd1bi5uZXQnO1xuICAgIH1cblxuICAgIGlmICghY29uZmlnLnVzZXJuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciBcInVzZXJuYW1lXCIgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZy5rZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVyIFwia2V5XCIgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgdGhpcy5yZXF1ZXN0ID0gbmV3IFJlcXVlc3QoY29uZmlnLCBmb3JtRGF0YSk7XG4gICAgY29uc3QgbWFpbExpc3RzTWVtYmVycyA9IG5ldyBNYWlsTGlzdHNNZW1iZXJzKHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgZG9tYWluQ3JlZGVudGlhbHNDbGllbnQgPSBuZXcgRG9tYWluQ3JlZGVudGlhbHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICBjb25zdCBtdWx0aXBsZVZhbGlkYXRpb25DbGllbnQgPSBuZXcgTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50KHRoaXMucmVxdWVzdCk7XG5cbiAgICB0aGlzLmRvbWFpbnMgPSBuZXcgRG9tYWluQ2xpZW50KHRoaXMucmVxdWVzdCwgZG9tYWluQ3JlZGVudGlhbHNDbGllbnQpO1xuICAgIHRoaXMud2ViaG9va3MgPSBuZXcgV2ViaG9va0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuZXZlbnRzID0gbmV3IEV2ZW50Q2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5zdGF0cyA9IG5ldyBTdGF0c0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuc3VwcHJlc3Npb25zID0gbmV3IFN1cHByZXNzaW9uQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5tZXNzYWdlcyA9IG5ldyBNZXNzYWdlc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMucm91dGVzID0gbmV3IFJvdXRlc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuaXBzID0gbmV3IElwc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuaXBfcG9vbHMgPSBuZXcgSXBQb29sc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMubGlzdHMgPSBuZXcgTGlzdHNDbGllbnQodGhpcy5yZXF1ZXN0LCBtYWlsTGlzdHNNZW1iZXJzKTtcbiAgICB0aGlzLnZhbGlkYXRlID0gbmV3IFZhbGlkYXRlQ2xpZW50KHRoaXMucmVxdWVzdCwgbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50KTtcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5pbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQge1xuICBEb21haW5SZXNwb25zZURhdGEsXG4gIERlc3Ryb3llZERvbWFpblJlc3BvbnNlLFxuICBEb21haW5zUXVlcnksXG4gIERvbWFpbkluZm8sXG4gIERvbWFpbkxpc3RSZXNwb25zZURhdGEsXG4gIERvbWFpblNob3J0RGF0YSxcbiAgRE5TUmVjb3JkLFxuICBDb25uZWN0aW9uU2V0dGluZ3NSZXNwb25zZSxcbiAgQ29ubmVjdGlvblNldHRpbmdzLFxuICBVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzLFxuICBVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzUmVzLFxuICBES0lNQXV0aG9yaXR5SW5mbyxcbiAgVXBkYXRlZERLSU1BdXRob3JpdHksXG4gIFVwZGF0ZWRES0lNQXV0aG9yaXR5UmVzcG9uc2UsXG4gIERLSU1TZWxlY3RvckluZm8sXG4gIFVwZGF0ZWRES0lNU2VsZWN0b3JSZXNwb25zZSxcbiAgV2ViUHJlZml4SW5mbyxcbiAgVXBkYXRlZFdlYlByZWZpeFJlc3BvbnNlLFxuICBSZXBsYWNlbWVudEZvclBvb2wsXG4gIE1lc3NhZ2VSZXNwb25zZSxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL0RvbWFpbnMnO1xuXG5pbXBvcnQgQVBJUmVzcG9uc2UgZnJvbSAnLi9pbnRlcmZhY2VzL0FwaVJlc3BvbnNlJztcbmltcG9ydCBBUElFcnJvciBmcm9tICcuL2Vycm9yJztcbmltcG9ydCBBUElFcnJvck9wdGlvbnMgZnJvbSAnLi9pbnRlcmZhY2VzL0FQSUVycm9yT3B0aW9ucyc7XG5cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5pbXBvcnQge1xuICBEb21haW5UcmFja2luZ1Jlc3BvbnNlLFxuICBEb21haW5UcmFja2luZ0RhdGEsXG4gIE9wZW5UcmFja2luZ0luZm8sXG4gIENsaWNrVHJhY2tpbmdJbmZvLFxuICBVbnN1YnNjcmliZVRyYWNraW5nSW5mbyxcbiAgVXBkYXRlRG9tYWluVHJhY2tpbmdSZXNwb25zZSxcbiAgVXBkYXRlZE9wZW5UcmFja2luZ1xufSBmcm9tICcuL2ludGVyZmFjZXMvRG9tYWluVHJhY2tpbmcnO1xuaW1wb3J0IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IGZyb20gJy4vZG9tYWluc0NyZWRlbnRpYWxzJztcblxuZXhwb3J0IGNsYXNzIERvbWFpbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgcmVxdWlyZV90bHM6IGJvb2xlYW47XG4gIHNraXBfdmVyaWZpY2F0aW9uOiBib29sZWFuO1xuICBzdGF0ZTogc3RyaW5nO1xuICB3aWxkY2FyZDogYm9vbGVhbjtcbiAgc3BhbV9hY3Rpb246IHN0cmluZztcbiAgY3JlYXRlZF9hdDogc3RyaW5nO1xuICBzbXRwX3Bhc3N3b3JkOiBzdHJpbmc7XG4gIHNtdHBfbG9naW46IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICByZWNlaXZpbmdfZG5zX3JlY29yZHM6IEROU1JlY29yZFtdIHwgbnVsbDtcbiAgc2VuZGluZ19kbnNfcmVjb3JkczogRE5TUmVjb3JkW10gfCBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IERvbWFpblNob3J0RGF0YSwgcmVjZWl2aW5nPzogRE5TUmVjb3JkW10gfCBudWxsLCBzZW5kaW5nPzogRE5TUmVjb3JkW10gfCBudWxsKSB7XG4gICAgdGhpcy5uYW1lID0gZGF0YS5uYW1lO1xuICAgIHRoaXMucmVxdWlyZV90bHMgPSBkYXRhLnJlcXVpcmVfdGxzO1xuICAgIHRoaXMuc2tpcF92ZXJpZmljYXRpb24gPSBkYXRhLnNraXBfdmVyaWZpY2F0aW9uO1xuICAgIHRoaXMuc3RhdGUgPSBkYXRhLnN0YXRlO1xuICAgIHRoaXMud2lsZGNhcmQgPSBkYXRhLndpbGRjYXJkO1xuICAgIHRoaXMuc3BhbV9hY3Rpb24gPSBkYXRhLnNwYW1fYWN0aW9uO1xuICAgIHRoaXMuY3JlYXRlZF9hdCA9IGRhdGEuY3JlYXRlZF9hdDtcbiAgICB0aGlzLnNtdHBfcGFzc3dvcmQgPSBkYXRhLnNtdHBfcGFzc3dvcmQ7XG4gICAgdGhpcy5zbXRwX2xvZ2luID0gZGF0YS5zbXRwX2xvZ2luO1xuICAgIHRoaXMudHlwZSA9IGRhdGEudHlwZTtcblxuICAgIHRoaXMucmVjZWl2aW5nX2Ruc19yZWNvcmRzID0gcmVjZWl2aW5nIHx8IG51bGw7XG4gICAgdGhpcy5zZW5kaW5nX2Ruc19yZWNvcmRzID0gc2VuZGluZyB8fCBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpbkNsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHB1YmxpYyBkb21haW5DcmVkZW50aWFsczogRG9tYWluQ3JlZGVudGlhbHNDbGllbnQ7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCwgZG9tYWluQ3JlZGVudGlhbHNDbGllbnQ6IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmRvbWFpbkNyZWRlbnRpYWxzID0gZG9tYWluQ3JlZGVudGlhbHNDbGllbnQ7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZU1lc3NhZ2UocmVzcG9uc2U6IERlc3Ryb3llZERvbWFpblJlc3BvbnNlKSA6IE1lc3NhZ2VSZXNwb25zZSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZURvbWFpbkxpc3QocmVzcG9uc2U6IERvbWFpbkxpc3RSZXNwb25zZURhdGEpOiBEb21haW5bXSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHkuaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gbmV3IERvbWFpbihpdGVtKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlRG9tYWluKHJlc3BvbnNlOiBEb21haW5SZXNwb25zZURhdGEpOiBEb21haW4ge1xuICAgIHJldHVybiBuZXcgRG9tYWluKFxuICAgICAgcmVzcG9uc2UuYm9keS5kb21haW4sXG4gICAgICByZXNwb25zZS5ib2R5LnJlY2VpdmluZ19kbnNfcmVjb3JkcyxcbiAgICAgIHJlc3BvbnNlLmJvZHkuc2VuZGluZ19kbnNfcmVjb3Jkc1xuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZVRyYWNraW5nU2V0dGluZ3MocmVzcG9uc2U6IERvbWFpblRyYWNraW5nUmVzcG9uc2UpIDogRG9tYWluVHJhY2tpbmdEYXRhIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keS50cmFja2luZztcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlVHJhY2tpbmdVcGRhdGUocmVzcG9uc2U6IFVwZGF0ZURvbWFpblRyYWNraW5nUmVzcG9uc2UpIDpVcGRhdGVkT3BlblRyYWNraW5nIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgfVxuXG4gIGxpc3QocXVlcnk/OiBEb21haW5zUXVlcnkpOiBQcm9taXNlPERvbWFpbltdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92My9kb21haW5zJywgcXVlcnkpXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluTGlzdChyZXMgYXMgRG9tYWluTGlzdFJlc3BvbnNlRGF0YSkpO1xuICB9XG5cbiAgZ2V0KGRvbWFpbjogc3RyaW5nKSA6IFByb21pc2U8RG9tYWluPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYC92My9kb21haW5zLyR7ZG9tYWlufWApXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluKHJlcyBhcyBEb21haW5SZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIGNyZWF0ZShkYXRhOiBEb21haW5JbmZvKSA6IFByb21pc2U8RG9tYWluPiB7XG4gICAgY29uc3QgcG9zdE9iaiA9IHsgLi4uZGF0YSB9O1xuICAgIGlmICgnZm9yY2VfZGtpbV9hdXRob3JpdHknIGluIHBvc3RPYmogJiYgdHlwZW9mIHBvc3RPYmouZm9yY2VfZGtpbV9hdXRob3JpdHkgPT09ICdib29sZWFuJykge1xuICAgICAgcG9zdE9iai5mb3JjZV9ka2ltX2F1dGhvcml0eSA9IHBvc3RPYmoudG9TdHJpbmcoKSA9PT0gJ3RydWUnID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoJy92My9kb21haW5zJywgcG9zdE9iailcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW4ocmVzIGFzIERvbWFpblJlc3BvbnNlRGF0YSkpO1xuICB9XG5cbiAgZGVzdHJveShkb21haW46IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYC92My9kb21haW5zLyR7ZG9tYWlufWApXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlTWVzc2FnZShyZXMgYXMgRGVzdHJveWVkRG9tYWluUmVzcG9uc2UpKTtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb24oZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPENvbm5lY3Rpb25TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vY29ubmVjdGlvbmApXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBDb25uZWN0aW9uU2V0dGluZ3NSZXNwb25zZSlcbiAgICAgIC50aGVuKChyZXM6Q29ubmVjdGlvblNldHRpbmdzUmVzcG9uc2UpID0+IHJlcy5ib2R5LmNvbm5lY3Rpb24gYXMgQ29ubmVjdGlvblNldHRpbmdzKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbm5lY3Rpb24oZG9tYWluOiBzdHJpbmcsIGRhdGE6IENvbm5lY3Rpb25TZXR0aW5ncyk6IFByb21pc2U8VXBkYXRlZENvbm5lY3Rpb25TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vY29ubmVjdGlvbmAsIGRhdGEpXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzUmVzKVxuICAgICAgLnRoZW4oKHJlczpVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzUmVzKSA9PiByZXMuYm9keSBhcyBVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzKTtcbiAgfVxuXG4gIC8vIFRyYWNraW5nXG5cbiAgZ2V0VHJhY2tpbmcoZG9tYWluOiBzdHJpbmcpIDogUHJvbWlzZTxEb21haW5UcmFja2luZ0RhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3RyYWNraW5nJykpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVRyYWNraW5nU2V0dGluZ3MpO1xuICB9XG5cbiAgdXBkYXRlVHJhY2tpbmcoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGRhdGE6IE9wZW5UcmFja2luZ0luZm8gfCBDbGlja1RyYWNraW5nSW5mbyB8IFVuc3Vic2NyaWJlVHJhY2tpbmdJbmZvXG4gICk6IFByb21pc2U8VXBkYXRlZE9wZW5UcmFja2luZz4ge1xuICAgIGlmICh0eXBlb2YgZGF0YT8uYWN0aXZlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBBUElFcnJvcih7IHN0YXR1czogNDAwLCBzdGF0dXNUZXh0OiAnJywgYm9keTogeyBtZXNzYWdlOiAnUHJvcGVydHkgXCJhY3RpdmVcIiBtdXN0IGNvbnRhaW4gc3RyaW5nIHZhbHVlLicgfSB9IGFzIEFQSUVycm9yT3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAndHJhY2tpbmcnLCB0eXBlKSwgZGF0YSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VUcmFja2luZ1VwZGF0ZShyZXMgYXMgVXBkYXRlRG9tYWluVHJhY2tpbmdSZXNwb25zZSkpO1xuICB9XG5cbiAgLy8gSVBzXG5cbiAgZ2V0SXBzKGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJykpXG4gICAgICAudGhlbigocmVzcG9uc2U6IEFQSVJlc3BvbnNlKSA9PiByZXNwb25zZT8uYm9keT8uaXRlbXMpO1xuICB9XG5cbiAgYXNzaWduSXAoZG9tYWluOiBzdHJpbmcsIGlwOiBzdHJpbmcpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJyksIHsgaXAgfSk7XG4gIH1cblxuICBkZWxldGVJcChkb21haW46IHN0cmluZywgaXA6IHN0cmluZyk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycsIGlwKSk7XG4gIH1cblxuICBsaW5rSXBQb29sKGRvbWFpbjogc3RyaW5nLCBwb29sX2lkOiBzdHJpbmcpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJyksIHsgcG9vbF9pZCB9KTtcbiAgfVxuXG4gIHVubGlua0lwUG9sbChkb21haW46IHN0cmluZywgcmVwbGFjZW1lbnQ6IFJlcGxhY2VtZW50Rm9yUG9vbCk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBsZXQgc2VhcmNoUGFyYW1zID0gJyc7XG4gICAgaWYgKHJlcGxhY2VtZW50LnBvb2xfaWQgJiYgcmVwbGFjZW1lbnQuaXApIHtcbiAgICAgIHRocm93IG5ldyBBUElFcnJvcih7IHN0YXR1czogNDAwLCBzdGF0dXNUZXh0OiAnJywgYm9keTogeyBtZXNzYWdlOiAnUGxlYXNlIHNwZWNpZnkgZWl0aGVyIHBvb2xfaWQgb3IgaXAgKG5vdCBib3RoKScgfSB9IGFzIEFQSUVycm9yT3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmIChyZXBsYWNlbWVudC5wb29sX2lkKSB7XG4gICAgICBzZWFyY2hQYXJhbXMgPSBgP3Bvb2xfaWQ9JHtyZXBsYWNlbWVudC5wb29sX2lkfWA7XG4gICAgfSBlbHNlIGlmIChyZXBsYWNlbWVudC5pcCkge1xuICAgICAgc2VhcmNoUGFyYW1zID0gYD9pcD0ke3JlcGxhY2VtZW50LmlwfWA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJywgJ2lwX3Bvb2wnLCBzZWFyY2hQYXJhbXMpKTtcbiAgfVxuXG4gIHVwZGF0ZURLSU1BdXRob3JpdHkoZG9tYWluOiBzdHJpbmcsIGRhdGE6IERLSU1BdXRob3JpdHlJbmZvKTogUHJvbWlzZTxVcGRhdGVkREtJTUF1dGhvcml0eT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vZGtpbV9hdXRob3JpdHlgLCB7fSwgeyBxdWVyeTogYHNlbGY9JHtkYXRhLnNlbGZ9YCB9KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMpXG4gICAgICAudGhlbigocmVzIDogVXBkYXRlZERLSU1BdXRob3JpdHlSZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgVXBkYXRlZERLSU1BdXRob3JpdHkpO1xuICB9XG5cbiAgdXBkYXRlREtJTVNlbGVjdG9yKGRvbWFpbjogc3RyaW5nLCBkYXRhOiBES0lNU2VsZWN0b3JJbmZvKTogUHJvbWlzZTxVcGRhdGVkREtJTVNlbGVjdG9yUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dChgL3YzL2RvbWFpbnMvJHtkb21haW59L2RraW1fc2VsZWN0b3JgLCB7fSwgeyBxdWVyeTogYGRraW1fc2VsZWN0b3I9JHtkYXRhLmRraW1TZWxlY3Rvcn1gIH0pXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBVcGRhdGVkREtJTVNlbGVjdG9yUmVzcG9uc2UpO1xuICB9XG5cbiAgdXBkYXRlV2ViUHJlZml4KGRvbWFpbjogc3RyaW5nLCBkYXRhOiBXZWJQcmVmaXhJbmZvKTogUHJvbWlzZTxVcGRhdGVkV2ViUHJlZml4UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dChgL3YzL2RvbWFpbnMvJHtkb21haW59L3dlYl9wcmVmaXhgLCB7fSwgeyBxdWVyeTogYHdlYl9wcmVmaXg9JHtkYXRhLndlYlByZWZpeH1gIH0pXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBVcGRhdGVkV2ViUHJlZml4UmVzcG9uc2UpO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgQVBJUmVzcG9uc2UgZnJvbSAnLi9pbnRlcmZhY2VzL0FwaVJlc3BvbnNlJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmltcG9ydCB7XG4gIENyZWF0ZWRVcGRhdGVkRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZSxcbiAgRGVsZXRlZERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2UsXG4gIERvbWFpbkNyZWRlbnRpYWxzLFxuICBEb21haW5DcmVkZW50aWFsc0xpc3QsXG4gIERvbWFpbkNyZWRlbnRpYWxzUXVlcnksXG4gIERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VEYXRhLFxuICBEb21haW5DcmVkZW50aWFsc1Jlc3VsdCxcbiAgSURvbWFpbkNyZWRlbnRpYWxzLFxuICBVcGRhdGVEb21haW5DcmVkZW50aWFsc0RhdGFcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL0RvbWFpbkNyZWRlbnRpYWxzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tYWluQ3JlZGVudGlhbHNDbGllbnQgaW1wbGVtZW50cyBJRG9tYWluQ3JlZGVudGlhbHMge1xuICBiYXNlUm91dGU6IHN0cmluZztcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmJhc2VSb3V0ZSA9ICcvdjMvZG9tYWlucy8nO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VEb21haW5DcmVkZW50aWFsc0xpc3QoXG4gICAgcmVzcG9uc2U6IERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VEYXRhXG4gICk6IERvbWFpbkNyZWRlbnRpYWxzTGlzdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiByZXNwb25zZS5ib2R5Lml0ZW1zLFxuICAgICAgdG90YWxDb3VudDogcmVzcG9uc2UuYm9keS50b3RhbF9jb3VudFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZU1lc3NhZ2VSZXNwb25zZShcbiAgICByZXNwb25zZTogQ3JlYXRlZFVwZGF0ZWREb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlXG4gICk6IERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZVxuICAgIH0gYXMgRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlRGVsZXRlZFJlc3BvbnNlKFxuICAgIHJlc3BvbnNlOkRlbGV0ZWREb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlXG4gICk6IERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZSxcbiAgICAgIHNwZWM6IHJlc3BvbnNlLmJvZHkuc3BlY1xuICAgIH0gYXMgRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQ7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgbGlzdChkb21haW46IHN0cmluZywgcXVlcnk/OiBEb21haW5DcmVkZW50aWFsc1F1ZXJ5KTogUHJvbWlzZTxEb21haW5DcmVkZW50aWFsc0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvY3JlZGVudGlhbHMnKSwgcXVlcnkpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluQ3JlZGVudGlhbHNMaXN0KHJlcyBhcyBEb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlRGF0YSlcbiAgICAgICk7XG4gIH1cblxuICBjcmVhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluQ3JlZGVudGlhbHNcbiAgKTogUHJvbWlzZTxEb21haW5DcmVkZW50aWFsc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0ke2RvbWFpbn0vY3JlZGVudGlhbHNgLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlTWVzc2FnZVJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgdXBkYXRlKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGNyZWRlbnRpYWxzTG9naW46IHN0cmluZyxcbiAgICBkYXRhOiBVcGRhdGVEb21haW5DcmVkZW50aWFsc0RhdGFcbiAgKTogUHJvbWlzZTxEb21haW5DcmVkZW50aWFsc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfSR7ZG9tYWlufS9jcmVkZW50aWFscy8ke2NyZWRlbnRpYWxzTG9naW59YCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZU1lc3NhZ2VSZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIGRlc3Ryb3koXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgY3JlZGVudGlhbHNMb2dpbjogc3RyaW5nXG4gICk6IFByb21pc2U8RG9tYWluQ3JlZGVudGlhbHNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0ke2RvbWFpbn0vY3JlZGVudGlhbHMvJHtjcmVkZW50aWFsc0xvZ2lufWApXG4gICAgICAudGhlbigocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEZWxldGVkUmVzcG9uc2UocmVzKSk7XG4gIH1cbn1cbiIsImltcG9ydCBBUElFcnJvck9wdGlvbnMgZnJvbSAnLi9pbnRlcmZhY2VzL0FQSUVycm9yT3B0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFQSUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBzdGF0dXM6IG51bWJlciB8IHN0cmluZztcbiAgc3RhY2s6IHN0cmluZztcbiAgZGV0YWlsczogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBzdGF0dXMsXG4gICAgc3RhdHVzVGV4dCxcbiAgICBtZXNzYWdlLFxuICAgIGJvZHkgPSB7fVxuICB9OiBBUElFcnJvck9wdGlvbnMpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2U6IGJvZHlNZXNzYWdlLCBlcnJvciB9ID0gYm9keTtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgZXJyb3IgfHwgc3RhdHVzVGV4dDtcbiAgICB0aGlzLmRldGFpbHMgPSBib2R5TWVzc2FnZTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IHtcbiAgRXZlbnRzTGlzdCwgRXZlbnRzUGFnZSwgRXZlbnRzUmVzcG9uc2UsIFBhZ2VzTGlzdCwgUGFnZXNMaXN0QWNjdW11bGF0b3IsIFBhcnNlZFBhZ2VzTGlzdFxufSBmcm9tICcuL2ludGVyZmFjZXMvRXZlbnRzJztcblxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXZlbnRDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgX3BhcnNlUGFnZU51bWJlcih1cmw6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc3BsaXQoJy8nKS5wb3AoKTtcbiAgfVxuXG4gIF9wYXJzZVBhZ2UoaWQ6IHN0cmluZywgdXJsOiBzdHJpbmcpIDogRXZlbnRzUGFnZSB7XG4gICAgcmV0dXJuIHsgaWQsIG51bWJlcjogdGhpcy5fcGFyc2VQYWdlTnVtYmVyKHVybCksIHVybCB9O1xuICB9XG5cbiAgX3BhcnNlUGFnZUxpbmtzKHJlc3BvbnNlOiBFdmVudHNSZXNwb25zZSkgOiBQYXJzZWRQYWdlc0xpc3Qge1xuICAgIGNvbnN0IHBhZ2VzID0gT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuYm9keS5wYWdpbmcgYXMgUGFnZXNMaXN0KTtcbiAgICByZXR1cm4gcGFnZXMucmVkdWNlKFxuICAgICAgKGFjYzogUGFnZXNMaXN0QWNjdW11bGF0b3IsIGVudHJpZTogW3VybDogc3RyaW5nLCBpZDogc3RyaW5nXSkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IGVudHJpZVswXTtcbiAgICAgICAgY29uc3QgdXJsID0gZW50cmllWzFdO1xuICAgICAgICBhY2NbaWRdID0gdGhpcy5fcGFyc2VQYWdlKGlkLCB1cmwpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge31cbiAgICApIGFzIHVua25vd24gYXMgUGFyc2VkUGFnZXNMaXN0O1xuICB9XG5cbiAgX3BhcnNlRXZlbnRMaXN0KHJlc3BvbnNlOiBFdmVudHNSZXNwb25zZSkgOiBFdmVudHNMaXN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHJlc3BvbnNlLmJvZHkuaXRlbXMsXG4gICAgICBwYWdlczogdGhpcy5fcGFyc2VQYWdlTGlua3MocmVzcG9uc2UpXG4gICAgfTtcbiAgfVxuXG4gIGdldChkb21haW46IHN0cmluZywgcXVlcnk/OiB7IHBhZ2U6IHN0cmluZyB9KSA6IFByb21pc2U8RXZlbnRzTGlzdD4ge1xuICAgIGxldCB1cmw7XG4gICAgY29uc3QgcXVlcnlDb3B5ID0geyAuLi5xdWVyeSB9O1xuICAgIGlmIChxdWVyeUNvcHkgJiYgcXVlcnlDb3B5LnBhZ2UpIHtcbiAgICAgIHVybCA9IHVybGpvaW4oJy92MycsIGRvbWFpbiwgJ2V2ZW50cycsIHF1ZXJ5Q29weS5wYWdlKTtcbiAgICAgIGRlbGV0ZSBxdWVyeUNvcHkucGFnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsID0gdXJsam9pbignL3YzJywgZG9tYWluLCAnZXZlbnRzJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybCwgcXVlcnlDb3B5KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBFdmVudHNSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VFdmVudExpc3QocmVzcG9uc2UpKTtcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5pbXBvcnQgeyBJcFBvb2wsIElwUG9vbExpc3RSZXNwb25zZSwgSXBQb29sVXBkYXRlRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9JcFBvb2xzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXBQb29sc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBsaXN0KHF1ZXJ5OiBhbnkpOiBQcm9taXNlPElwUG9vbFtdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92MS9pcF9wb29scycsIHF1ZXJ5KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBJcFBvb2xMaXN0UmVzcG9uc2UpID0+IHRoaXMucGFyc2VJcFBvb2xzUmVzcG9uc2UocmVzcG9uc2UpKTtcbiAgfVxuXG4gIGNyZWF0ZShkYXRhOiB7IG5hbWU6IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcsIGlwcz86IHN0cmluZ1tdIH0pIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoJy92MS9pcF9wb29scycsIGRhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2U6IHsgYm9keTogeyBtZXNzYWdlOiBzdHJpbmcsIHBvb2xfaWQ6IHN0cmluZyB9IH0pID0+IHJlc3BvbnNlPy5ib2R5KTtcbiAgfVxuXG4gIHVwZGF0ZShwb29sSWQ6IHN0cmluZywgZGF0YTogSXBQb29sVXBkYXRlRGF0YSkgOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucGF0Y2hXaXRoRkQoYC92MS9pcF9wb29scy8ke3Bvb2xJZH1gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiB7IGJvZHk6IGFueSB9KSA9PiByZXNwb25zZT8uYm9keSk7XG4gIH1cblxuICBkZWxldGUocG9vbElkOiBzdHJpbmcsIGRhdGE6IHsgaWQ6IHN0cmluZywgcG9vbF9pZDogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgL3YxL2lwX3Bvb2xzLyR7cG9vbElkfWAsIGRhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2U6IHsgYm9keTogYW55IH0pID0+IHJlc3BvbnNlPy5ib2R5KTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VJcFBvb2xzUmVzcG9uc2UocmVzcG9uc2U6IHsgYm9keTogYW55IHwgYW55IH0pIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keS5pcF9wb29scztcbiAgfVxufVxuIiwiaW1wb3J0IE1nUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHsgSXBEYXRhLCBJcHNMaXN0UmVzcG9uc2VCb2R5IH0gZnJvbSAnLi9pbnRlcmZhY2VzL0lwcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwc0NsaWVudCB7XG4gIHJlcXVlc3Q6IE1nUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBNZ1JlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgbGlzdChxdWVyeTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92My9pcHMnLCBxdWVyeSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogeyBib2R5OiBJcHNMaXN0UmVzcG9uc2VCb2R5IH0pID0+IHRoaXMucGFyc2VJcHNSZXNwb25zZShyZXNwb25zZSkpO1xuICB9XG5cbiAgZ2V0KGlwOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgL3YzL2lwcy8ke2lwfWApXG4gICAgICAudGhlbigocmVzcG9uc2U6IHsgYm9keTogSXBEYXRhIH0pID0+IHRoaXMucGFyc2VJcHNSZXNwb25zZShyZXNwb25zZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUlwc1Jlc3BvbnNlKHJlc3BvbnNlOiB7IGJvZHk6IElwc0xpc3RSZXNwb25zZUJvZHkgfCBJcERhdGEgfSkge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG59XG4iLCJpbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHtcbiAgTGlzdHNRdWVyeSxcbiAgQ3JlYXRlVXBkYXRlTGlzdCxcbiAgRGVzdHJveWVkTGlzdCxcbiAgTWFpbGluZ0xpc3Rcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL2xpc3RzJztcbmltcG9ydCB7IElNYWlsTGlzdHNNZW1iZXJzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL21haWxMaXN0TWVtYmVycyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpc3RzQ2xpZW50IHtcbiAgYmFzZVJvdXRlOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIG1lbWJlcnM6IElNYWlsTGlzdHNNZW1iZXJzO1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QsIG1lbWJlcnM6SU1haWxMaXN0c01lbWJlcnMpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My9saXN0cyc7XG4gICAgdGhpcy5tZW1iZXJzID0gbWVtYmVycztcbiAgfVxuXG4gIGxpc3QocXVlcnk/OiBMaXN0c1F1ZXJ5KTogUHJvbWlzZTxNYWlsaW5nTGlzdFtdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYCR7dGhpcy5iYXNlUm91dGV9L3BhZ2VzYCwgcXVlcnkpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkuaXRlbXMgYXMgTWFpbGluZ0xpc3RbXSk7XG4gIH1cblxuICBnZXQobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPE1haWxpbmdMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfWApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubGlzdCBhcyBNYWlsaW5nTGlzdCk7XG4gIH1cblxuICBjcmVhdGUoZGF0YTogQ3JlYXRlVXBkYXRlTGlzdCk6IFByb21pc2U8TWFpbGluZ0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodGhpcy5iYXNlUm91dGUsIGRhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubGlzdCBhcyBNYWlsaW5nTGlzdCk7XG4gIH1cblxuICB1cGRhdGUobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsIGRhdGE6IENyZWF0ZVVwZGF0ZUxpc3QpOiBQcm9taXNlPE1haWxpbmdMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfWAsIGRhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubGlzdCBhcyBNYWlsaW5nTGlzdCk7XG4gIH1cblxuICBkZXN0cm95KG1haWxMaXN0QWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxEZXN0cm95ZWRMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfWApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkgYXMgRGVzdHJveWVkTGlzdCk7XG4gIH1cbn1cbiIsImltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5pbXBvcnQge1xuICBNYWlsTGlzdE1lbWJlcnNRdWVyeSxcbiAgSU1haWxMaXN0c01lbWJlcnMsXG4gIENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVycyxcbiAgTWFpbExpc3RNZW1iZXIsXG4gIE11bHRpcGxlTWVtYmVyc0RhdGEsXG4gIE11bHRpcGxlTWVtYmVyc1JlcURhdGEsXG4gIERlbGV0ZWRNZW1iZXIsXG4gIENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1JlcSxcbiAgTmV3TXVsdGlwbGVNZW1iZXJzUmVzcG9uc2Vcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL21haWxMaXN0TWVtYmVycyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxMaXN0c01lbWJlcnMgaW1wbGVtZW50cyBJTWFpbExpc3RzTWVtYmVycyB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My9saXN0cyc7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQW5kVXBkYXRlRGF0YShkYXRhOiBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnMpIHtcbiAgICBjb25zdCBuZXdEYXRhID0geyAuLi5kYXRhIH07XG5cbiAgICBpZiAodHlwZW9mIGRhdGEudmFycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG5ld0RhdGEudmFycyA9IEpTT04uc3RyaW5naWZ5KG5ld0RhdGEudmFycyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhLnN1YnNjcmliZWQgPT09ICdib29sZWFuJykge1xuICAgICAgbmV3RGF0YS5zdWJzY3JpYmVkID0gZGF0YS5zdWJzY3JpYmVkID8gJ3llcycgOiAnbm8nO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdEYXRhIGFzIENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1JlcTtcbiAgfVxuXG4gIGxpc3RNZW1iZXJzKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBxdWVyeT86IE1haWxMaXN0TWVtYmVyc1F1ZXJ5KTogUHJvbWlzZTxNYWlsTGlzdE1lbWJlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzL3BhZ2VzYCwgcXVlcnkpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkuaXRlbXMgYXMgTWFpbExpc3RNZW1iZXJbXSk7XG4gIH1cblxuICBnZXRNZW1iZXIobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsIG1haWxMaXN0TWVtYmVyQWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxNYWlsTGlzdE1lbWJlcj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy8ke21haWxMaXN0TWVtYmVyQWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lm1lbWJlciBhcyBNYWlsTGlzdE1lbWJlcik7XG4gIH1cblxuICBjcmVhdGVNZW1iZXIoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGF0YTogQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzXG4gICk6IFByb21pc2U8TWFpbExpc3RNZW1iZXI+IHtcbiAgICBjb25zdCByZXFEYXRhID0gdGhpcy5jaGVja0FuZFVwZGF0ZURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVyc2AsIHJlcURhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubWVtYmVyIGFzIE1haWxMaXN0TWVtYmVyKTtcbiAgfVxuXG4gIGNyZWF0ZU1lbWJlcnMoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGF0YTogTXVsdGlwbGVNZW1iZXJzRGF0YVxuICApOiBQcm9taXNlPE5ld011bHRpcGxlTWVtYmVyc1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgbmV3RGF0YTogTXVsdGlwbGVNZW1iZXJzUmVxRGF0YSA9IHtcbiAgICAgIG1lbWJlcnM6IEFycmF5LmlzQXJyYXkoZGF0YS5tZW1iZXJzKSA/IEpTT04uc3RyaW5naWZ5KGRhdGEubWVtYmVycykgOiBkYXRhLm1lbWJlcnMsXG4gICAgICB1cHNlcnQ6IGRhdGEudXBzZXJ0XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMuanNvbmAsIG5ld0RhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkgYXMgTmV3TXVsdGlwbGVNZW1iZXJzUmVzcG9uc2UpO1xuICB9XG5cbiAgdXBkYXRlTWVtYmVyKFxuICAgIG1haWxMaXN0QWRkcmVzczogc3RyaW5nLFxuICAgIG1haWxMaXN0TWVtYmVyQWRkcmVzczogc3RyaW5nLFxuICAgIGRhdGE6IENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1xuICApOiBQcm9taXNlPE1haWxMaXN0TWVtYmVyPiB7XG4gICAgY29uc3QgcmVxRGF0YSA9IHRoaXMuY2hlY2tBbmRVcGRhdGVEYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy8ke21haWxMaXN0TWVtYmVyQWRkcmVzc31gLCByZXFEYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lm1lbWJlciBhcyBNYWlsTGlzdE1lbWJlcik7XG4gIH1cblxuICBkZXN0cm95TWVtYmVyKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBtYWlsTGlzdE1lbWJlckFkZHJlc3M6IHN0cmluZykgOiBQcm9taXNlPERlbGV0ZWRNZW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMvJHttYWlsTGlzdE1lbWJlckFkZHJlc3N9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSBhcyBEZWxldGVkTWVtYmVyKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVzc2FnZXNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgX3BhcnNlUmVzcG9uc2UocmVzcG9uc2U6IHsgYm9keTogYW55IH0pIHtcbiAgICBpZiAocmVzcG9uc2UuYm9keSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgY3JlYXRlKGRvbWFpbjogc3RyaW5nLCBkYXRhOiBhbnkpIHtcbiAgICBpZiAoZGF0YS5tZXNzYWdlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYC92My8ke2RvbWFpbn0vbWVzc2FnZXMubWltZWAsIGRhdGEpXG4gICAgICAgIC50aGVuKHRoaXMuX3BhcnNlUmVzcG9uc2UpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgL3YzLyR7ZG9tYWlufS9tZXNzYWdlc2AsIGRhdGEpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVJlc3BvbnNlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgQ2FuY2VsZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2IsXG4gIENyZWF0ZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2IsXG4gIElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYixcbiAgTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHRcbn1cbiAgZnJvbSAnLi9pbnRlcmZhY2VzL011bHRpcGxlVmFsaWRhdGlvbic7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQgaW1wbGVtZW50cyBJTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIGxpc3QoKTogUHJvbWlzZTxNdWx0aXBsZVZhbGlkYXRpb25Kb2JzTGlzdFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrJylcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSBhcyBNdWx0aXBsZVZhbGlkYXRpb25Kb2JzTGlzdFJlc3VsdCk7XG4gIH1cblxuICBnZXQobGlzdElkOiBzdHJpbmcpOiBQcm9taXNlPE11bHRpcGxlVmFsaWRhdGlvbkpvYj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrLyR7bGlzdElkfWApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkpO1xuICB9XG5cbiAgY3JlYXRlKGxpc3RJZDogc3RyaW5nLCBmaWxlOiBhbnkpOiBQcm9taXNlPENyZWF0ZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2I+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYC92NC9hZGRyZXNzL3ZhbGlkYXRlL2J1bGsvJHtsaXN0SWR9YCwgZmlsZSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSk7XG4gIH1cblxuICBkZXN0cm95KGxpc3RJZDogc3RyaW5nKTogUHJvbWlzZTxDYW5jZWxlZE11bHRpcGxlVmFsaWRhdGlvbkpvYj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrLyR7bGlzdElkfWApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlKTtcbiAgfVxufVxuIiwiaW1wb3J0IE5vZGVGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IGJhc2U2NCBmcm9tICdiYXNlLTY0JztcbmltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBreSBmcm9tICdreS11bml2ZXJzYWwnO1xuaW1wb3J0IEFQSUVycm9yIGZyb20gJy4vZXJyb3InO1xuaW1wb3J0IFJlcXVlc3RPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9SZXF1ZXN0T3B0aW9ucyc7XG5pbXBvcnQgQVBJRXJyb3JPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9BUElFcnJvck9wdGlvbnMnO1xuaW1wb3J0IHsgSW5wdXRGb3JtRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9JRm9ybURhdGEnO1xuaW1wb3J0IEFQSVJlc3BvbnNlIGZyb20gJy4vaW50ZXJmYWNlcy9BcGlSZXNwb25zZSc7XG5cbmNvbnN0IGlzU3RyZWFtID0gKGF0dGFjaG1lbnQ6IGFueSkgPT4gdHlwZW9mIGF0dGFjaG1lbnQgPT09ICdvYmplY3QnICYmIHR5cGVvZiBhdHRhY2htZW50LnBpcGUgPT09ICdmdW5jdGlvbic7XG5cbmZ1bmN0aW9uIGlzTm9kZUZvcm1EYXRhKGZvcm1EYXRhSW5zdGFuY2U6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhKVxuICA6IGZvcm1EYXRhSW5zdGFuY2UgaXMgTm9kZUZvcm1EYXRhIHtcbiAgcmV0dXJuICg8Tm9kZUZvcm1EYXRhPmZvcm1EYXRhSW5zdGFuY2UpLmdldEhlYWRlcnMgIT09IHVuZGVmaW5lZDtcbn1cblxuY29uc3QgZ2V0QXR0YWNobWVudE9wdGlvbnMgPSAoaXRlbTogYW55KToge1xuICBmaWxlbmFtZT86IHN0cmluZyxcbiAgY29udGVudFR5cGU/OiBzdHJpbmcsXG4gIGtub3duTGVuZ3RoPzogbnVtYmVyXG59ID0+IHtcbiAgaWYgKHR5cGVvZiBpdGVtICE9PSAnb2JqZWN0JyB8fCBpc1N0cmVhbShpdGVtKSkgcmV0dXJuIHt9O1xuXG4gIGNvbnN0IHtcbiAgICBmaWxlbmFtZSxcbiAgICBjb250ZW50VHlwZSxcbiAgICBrbm93bkxlbmd0aFxuICB9ID0gaXRlbTtcblxuICByZXR1cm4ge1xuICAgIC4uLihmaWxlbmFtZSA/IHsgZmlsZW5hbWUgfSA6IHsgZmlsZW5hbWU6ICdmaWxlJyB9KSxcbiAgICAuLi4oY29udGVudFR5cGUgJiYgeyBjb250ZW50VHlwZSB9KSxcbiAgICAuLi4oa25vd25MZW5ndGggJiYgeyBrbm93bkxlbmd0aCB9KVxuICB9O1xufTtcblxuY29uc3Qgc3RyZWFtVG9TdHJpbmcgPSAoc3RyZWFtOiBhbnkpID0+IHtcbiAgY29uc3QgY2h1bmtzOiBhbnkgPSBbXTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzdHJlYW0ub24oJ2RhdGEnLCAoY2h1bms6IGFueSkgPT4gY2h1bmtzLnB1c2goY2h1bmspKTtcbiAgICBzdHJlYW0ub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICBzdHJlYW0ub24oJ2VuZCcsICgpID0+IHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpLnRvU3RyaW5nKCd1dGY4JykpKTtcbiAgfSk7XG59O1xuXG5jbGFzcyBSZXF1ZXN0IHtcbiAgcHJpdmF0ZSB1c2VybmFtZTogc3RyaW5nO1xuICBwcml2YXRlIGtleTogc3RyaW5nO1xuICBwcml2YXRlIHVybDogc3RyaW5nO1xuICBwcml2YXRlIHRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBoZWFkZXJzOiBhbnk7XG4gIHByaXZhdGUgRm9ybURhdGFDb25zdHJ1Y3RvcjogSW5wdXRGb3JtRGF0YTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucywgZm9ybURhdGE6IElucHV0Rm9ybURhdGEpIHtcbiAgICB0aGlzLnVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZTtcbiAgICB0aGlzLmtleSA9IG9wdGlvbnMua2V5O1xuICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmwgYXMgc3RyaW5nO1xuICAgIHRoaXMudGltZW91dCA9IG9wdGlvbnMudGltZW91dDtcbiAgICB0aGlzLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge307XG4gICAgdGhpcy5Gb3JtRGF0YUNvbnN0cnVjdG9yID0gZm9ybURhdGE7XG4gIH1cblxuICBhc3luYyByZXF1ZXN0KG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZywgaW5wdXRPcHRpb25zPzogYW55KTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7IC4uLmlucHV0T3B0aW9ucyB9O1xuICAgIGNvbnN0IGJhc2ljID0gYmFzZTY0LmVuY29kZShgJHt0aGlzLnVzZXJuYW1lfToke3RoaXMua2V5fWApO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICBBdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY31gLFxuICAgICAgLi4udGhpcy5oZWFkZXJzLFxuICAgICAgLi4ub3B0aW9ucz8uaGVhZGVyc1xuICAgIH07XG5cbiAgICBkZWxldGUgb3B0aW9ucz8uaGVhZGVycztcblxuICAgIGlmICghaGVhZGVyc1snQ29udGVudC1UeXBlJ10pIHtcbiAgICAgIC8vIGZvciBmb3JtLWRhdGEgaXQgd2lsbCBiZSBOdWxsIHNvIHdlIG5lZWQgdG8gcmVtb3ZlIGl0XG4gICAgICBkZWxldGUgaGVhZGVyc1snQ29udGVudC1UeXBlJ107XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zID0geyAuLi5vcHRpb25zIH07XG5cbiAgICBpZiAob3B0aW9ucz8ucXVlcnkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob3B0aW9ucz8ucXVlcnkpLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcmFtcy5zZWFyY2hQYXJhbXMgPSBvcHRpb25zLnF1ZXJ5O1xuICAgICAgZGVsZXRlIHBhcmFtcy5xdWVyeTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGt5KFxuICAgICAgdXJsam9pbih0aGlzLnVybCwgdXJsKSxcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiBtZXRob2QudG9Mb2NhbGVVcHBlckNhc2UoKSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgdGhyb3dIdHRwRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgICAuLi5wYXJhbXNcbiAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKCFyZXNwb25zZT8ub2spIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSByZXNwb25zZT8uYm9keSAmJiBpc1N0cmVhbShyZXNwb25zZS5ib2R5KVxuICAgICAgICA/IGF3YWl0IHN0cmVhbVRvU3RyaW5nKHJlc3BvbnNlLmJvZHkpXG4gICAgICAgIDogYXdhaXQgcmVzcG9uc2U/Lmpzb24oKTtcblxuICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKHtcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZT8uc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZT8uc3RhdHVzVGV4dCxcbiAgICAgICAgYm9keTogeyBtZXNzYWdlIH1cbiAgICAgIH0gYXMgQVBJRXJyb3JPcHRpb25zKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXMgPSB7XG4gICAgICBib2R5OiBhd2FpdCByZXNwb25zZT8uanNvbigpLFxuICAgICAgc3RhdHVzOiByZXNwb25zZT8uc3RhdHVzXG4gICAgfTtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBxdWVyeShtZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcsIHF1ZXJ5OiBhbnksIG9wdGlvbnM/OiBhbnkpIDogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWV0aG9kLCB1cmwsIHsgcXVlcnksIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICBjb21tYW5kKG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZywgZGF0YTogYW55LCBvcHRpb25zPzogYW55KSA6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1ldGhvZCwgdXJsLCB7XG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB9LFxuICAgICAgYm9keTogZGF0YSxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9KTtcbiAgfVxuXG4gIGdldCh1cmw6IHN0cmluZywgcXVlcnk/OiBhbnksIG9wdGlvbnM/OiBhbnkpIDogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5KCdnZXQnLCB1cmwsIHF1ZXJ5LCBvcHRpb25zKTtcbiAgfVxuXG4gIGhlYWQodXJsOiBzdHJpbmcsIHF1ZXJ5OiBhbnksIG9wdGlvbnM6IGFueSkgOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkoJ2hlYWQnLCB1cmwsIHF1ZXJ5LCBvcHRpb25zKTtcbiAgfVxuXG4gIG9wdGlvbnModXJsOiBzdHJpbmcsIHF1ZXJ5OiBhbnksIG9wdGlvbnM6IGFueSkgOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkoJ29wdGlvbnMnLCB1cmwsIHF1ZXJ5LCBvcHRpb25zKTtcbiAgfVxuXG4gIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE6IGFueSwgb3B0aW9ucz86IGFueSkgOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncG9zdCcsIHVybCwgZGF0YSwgb3B0aW9ucyk7XG4gIH1cblxuICBwb3N0V2l0aEZEKHVybDogc3RyaW5nLCBkYXRhOiBhbnkpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBwcm92aWRlIGRhdGEgb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogbnVsbCB9XG4gICAgfTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuY3JlYXRlRm9ybURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncG9zdCcsIHVybCwgZm9ybURhdGEsIHBhcmFtcyk7XG4gIH1cblxuICBwdXRXaXRoRkQodXJsOiBzdHJpbmcsIGRhdGE6IGFueSk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHByb3ZpZGUgZGF0YSBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiBudWxsIH1cbiAgICB9O1xuICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5jcmVhdGVGb3JtRGF0YShkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwdXQnLCB1cmwsIGZvcm1EYXRhLCBwYXJhbXMpO1xuICB9XG5cbiAgcGF0Y2hXaXRoRkQodXJsOiBzdHJpbmcsIGRhdGE6IGFueSk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHByb3ZpZGUgZGF0YSBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiBudWxsIH1cbiAgICB9O1xuICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5jcmVhdGVGb3JtRGF0YShkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwYXRjaCcsIHVybCwgZm9ybURhdGEsIHBhcmFtcyk7XG4gIH1cblxuICBjcmVhdGVGb3JtRGF0YShkYXRhOiBhbnkpOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YSB7XG4gICAgY29uc3QgZm9ybURhdGE6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhID0gT2JqZWN0LmtleXMoZGF0YSlcbiAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZGF0YVtrZXldOyB9KVxuICAgICAgLnJlZHVjZSgoZm9ybURhdGFBY2M6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhLCBrZXkpID0+IHtcbiAgICAgICAgY29uc3QgZmlsZUtleXMgPSBbJ2F0dGFjaG1lbnQnLCAnaW5saW5lJywgJ2ZpbGUnXTtcbiAgICAgICAgaWYgKGZpbGVLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICB0aGlzLmFkZEZpbGVzVG9GRChrZXksIGRhdGFba2V5XSwgZm9ybURhdGFBY2MpO1xuICAgICAgICAgIHJldHVybiBmb3JtRGF0YUFjYztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgPT09ICdtZXNzYWdlJykgeyAvLyBtaW1lIG1lc3NhZ2VcbiAgICAgICAgICB0aGlzLmFkZE1pbWVEYXRhVG9GRChrZXksIGRhdGFba2V5XSwgZm9ybURhdGFBY2MpO1xuICAgICAgICAgIHJldHVybiBmb3JtRGF0YUFjYztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWRkQ29tbW9uUHJvcGVydHlUb0ZEKGtleSwgZGF0YVtrZXldLCBmb3JtRGF0YUFjYyk7XG4gICAgICAgIHJldHVybiBmb3JtRGF0YUFjYztcbiAgICAgIH0sIG5ldyB0aGlzLkZvcm1EYXRhQ29uc3RydWN0b3IoKSk7XG4gICAgcmV0dXJuIGZvcm1EYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRNaW1lRGF0YVRvRkQoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgZGF0YTogQnVmZmVyIHwgQmxvYixcbiAgICBmb3JtRGF0YUluc3RhbmNlOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICApOiB2b2lkIHtcbiAgICBpZiAoaXNOb2RlRm9ybURhdGEoZm9ybURhdGFJbnN0YW5jZSkpIHtcbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgZm9ybURhdGFJbnN0YW5jZS5hcHBlbmQoa2V5LCBkYXRhLCB7IGZpbGVuYW1lOiAnTWltZU1lc3NhZ2UnIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3JtRGF0YUluc3RhbmNlLmFwcGVuZChrZXksIGRhdGEgYXMgQmxvYiwgJ01pbWVNZXNzYWdlJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRGaWxlc1RvRkQoXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueSxcbiAgICBmb3JtRGF0YUluc3RhbmNlOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBhcHBlbmRGaWxlVG9GRCA9IChcbiAgICAgIGtleTogc3RyaW5nLFxuICAgICAgb2JqOiBhbnksXG4gICAgICBmb3JtRGF0YTogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGFcbiAgICApOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGlzU3RyZWFtRGF0YSA9IGlzU3RyZWFtKG9iaik7XG4gICAgICBjb25zdCBvYmpEYXRhID0gaXNTdHJlYW1EYXRhID8gb2JqIDogb2JqLmRhdGE7XG4gICAgICAvLyBnZXRBdHRhY2htZW50T3B0aW9ucyBzaG91bGQgYmUgY2FsbGVkIHdpdGggb2JqIHBhcmFtZXRlciB0byBwcmV2ZW50IGxvb3NpbmcgZmlsZW5hbWVcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBnZXRBdHRhY2htZW50T3B0aW9ucyhvYmopO1xuICAgICAgaWYgKGlzTm9kZUZvcm1EYXRhKGZvcm1EYXRhKSkge1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBvYmpEYXRhLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgb2JqRGF0YSwgb3B0aW9ucy5maWxlbmFtZSk7XG4gICAgfTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBhcHBlbmRGaWxlVG9GRChwcm9wZXJ0eU5hbWUsIGl0ZW0sIGZvcm1EYXRhSW5zdGFuY2UpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZEZpbGVUb0ZEKHByb3BlcnR5TmFtZSwgdmFsdWUsIGZvcm1EYXRhSW5zdGFuY2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkQ29tbW9uUHJvcGVydHlUb0ZEKFxuICAgIGtleTogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnksXG4gICAgZm9ybURhdGFBY2M6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhXG4gICk6IHZvaWQge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAoaXRlbTogYW55KSB7XG4gICAgICAgIGZvcm1EYXRhQWNjLmFwcGVuZChrZXksIGl0ZW0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICBmb3JtRGF0YUFjYy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHV0KHVybDogc3RyaW5nLCBkYXRhOiBhbnksIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncHV0JywgdXJsLCBkYXRhLCBvcHRpb25zKTtcbiAgfVxuXG4gIHBhdGNoKHVybDogc3RyaW5nLCBkYXRhOiBhbnksIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncGF0Y2gnLCB1cmwsIGRhdGEsIG9wdGlvbnMpO1xuICB9XG5cbiAgZGVsZXRlKHVybDogc3RyaW5nLCBkYXRhPzogYW55LCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ2RlbGV0ZScsIHVybCwgZGF0YSwgb3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVxdWVzdDtcbiIsImltcG9ydCB7XG4gIENyZWF0ZVVwZGF0ZVJvdXRlRGF0YSwgRGVzdHJveVJvdXRlUmVzcG9uc2UsIFJvdXRlLCBSb3V0ZXNMaXN0UXVlcnksIFVwZGF0ZVJvdXRlUmVzcG9uc2Vcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL3JvdXRlcyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb3V0ZXNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgbGlzdChxdWVyeTogUm91dGVzTGlzdFF1ZXJ5KTogUHJvbWlzZTxSb3V0ZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92My9yb3V0ZXMnLCBxdWVyeSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5pdGVtcyk7XG4gIH1cblxuICBnZXQoaWQ6IHN0cmluZyk6IFByb21pc2U8Um91dGU+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgL3YzL3JvdXRlcy8ke2lkfWApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkucm91dGUpO1xuICB9XG5cbiAgY3JlYXRlKGRhdGE6IENyZWF0ZVVwZGF0ZVJvdXRlRGF0YSk6IFByb21pc2U8Um91dGU+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoJy92My9yb3V0ZXMnLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5LnJvdXRlKTtcbiAgfVxuXG4gIHVwZGF0ZShpZDogc3RyaW5nLCBkYXRhOiBDcmVhdGVVcGRhdGVSb3V0ZURhdGEpOiBQcm9taXNlPFVwZGF0ZVJvdXRlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRChgL3YzL3JvdXRlcy8ke2lkfWAsIGRhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkpO1xuICB9XG5cbiAgZGVzdHJveShpZDogc3RyaW5nKTogUHJvbWlzZTxEZXN0cm95Um91dGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjMvcm91dGVzLyR7aWR9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5pbXBvcnQgU3RhdHNPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9TdGF0c09wdGlvbnMnO1xuXG5jbGFzcyBTdGF0cyB7XG4gIHN0YXJ0OiBEYXRlO1xuICBlbmQ6IERhdGU7XG4gIHJlc29sdXRpb246IHN0cmluZztcbiAgc3RhdHM6IGFueTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBTdGF0c09wdGlvbnMpIHtcbiAgICB0aGlzLnN0YXJ0ID0gbmV3IERhdGUoZGF0YS5zdGFydCk7XG4gICAgdGhpcy5lbmQgPSBuZXcgRGF0ZShkYXRhLmVuZCk7XG4gICAgdGhpcy5yZXNvbHV0aW9uID0gZGF0YS5yZXNvbHV0aW9uO1xuICAgIHRoaXMuc3RhdHMgPSBkYXRhLnN0YXRzLm1hcChmdW5jdGlvbiAoc3RhdDogeyB0aW1lOiBzdHJpbmcgfCBEYXRlIH0pIHtcbiAgICAgIGNvbnN0IHJlcyA9IHsgLi4uc3RhdCB9O1xuICAgICAgcmVzLnRpbWUgPSBuZXcgRGF0ZShzdGF0LnRpbWUpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGF0c0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBfcGFyc2VTdGF0cyhyZXNwb25zZTogeyBib2R5OiBTdGF0c09wdGlvbnMgfSkge1xuICAgIHJldHVybiBuZXcgU3RhdHMocmVzcG9uc2UuYm9keSk7XG4gIH1cblxuICBnZXREb21haW4oZG9tYWluOiBzdHJpbmcsIHF1ZXJ5OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMnLCBkb21haW4sICdzdGF0cy90b3RhbCcpLCBxdWVyeSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlU3RhdHMpO1xuICB9XG5cbiAgZ2V0QWNjb3VudChxdWVyeTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92My9zdGF0cy90b3RhbCcsIHF1ZXJ5KVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VTdGF0cyk7XG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuaW1wb3J0IHVybCBmcm9tICd1cmwnO1xuaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHtcbiAgQm91bmNlRGF0YSxcbiAgQ29tcGxhaW50RGF0YSxcbiAgVW5zdWJzY3JpYmVEYXRhLFxuICBXaGl0ZUxpc3REYXRhXG59IGZyb20gJy4vaW50ZXJmYWNlcy9TdXByZXNzaW9ucyc7XG5cbmNvbnN0IGNyZWF0ZU9wdGlvbnMgPSB7XG4gIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9XG59O1xuXG5jbGFzcyBCb3VuY2Uge1xuICB0eXBlOiBzdHJpbmc7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY29kZTogbnVtYmVyO1xuICBlcnJvcjogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IEJvdW5jZURhdGEpIHtcbiAgICB0aGlzLnR5cGUgPSAnYm91bmNlcyc7XG4gICAgdGhpcy5hZGRyZXNzID0gZGF0YS5hZGRyZXNzO1xuICAgIHRoaXMuY29kZSA9ICtkYXRhLmNvZGU7XG4gICAgdGhpcy5lcnJvciA9IGRhdGEuZXJyb3I7XG4gICAgdGhpcy5jcmVhdGVkX2F0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KTtcbiAgfVxufVxuXG5jbGFzcyBDb21wbGFpbnQge1xuICB0eXBlOiBzdHJpbmc7XG4gIGFkZHJlc3M6IGFueTtcbiAgY3JlYXRlZF9hdDogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBDb21wbGFpbnREYXRhKSB7XG4gICAgdGhpcy50eXBlID0gJ2NvbXBsYWludHMnO1xuICAgIHRoaXMuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcztcbiAgICB0aGlzLmNyZWF0ZWRfYXQgPSBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQpO1xuICB9XG59XG5cbmNsYXNzIFVuc3Vic2NyaWJlIHtcbiAgdHlwZTogc3RyaW5nO1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIHRhZ3M6IGFueTtcbiAgY3JlYXRlZF9hdDogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBVbnN1YnNjcmliZURhdGEpIHtcbiAgICB0aGlzLnR5cGUgPSAndW5zdWJzY3JpYmVzJztcbiAgICB0aGlzLmFkZHJlc3MgPSBkYXRhLmFkZHJlc3M7XG4gICAgdGhpcy50YWdzID0gZGF0YS50YWdzO1xuICAgIHRoaXMuY3JlYXRlZF9hdCA9IG5ldyBEYXRlKGRhdGEuY3JlYXRlZF9hdCk7XG4gIH1cbn1cblxuY2xhc3MgV2hpdGVMaXN0IHtcbiAgdHlwZTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICByZWFzb246IHN0cmluZztcbiAgY3JlYXRlZEF0OiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFdoaXRlTGlzdERhdGEpIHtcbiAgICB0aGlzLnR5cGUgPSAnd2hpdGVsaXN0cyc7XG4gICAgdGhpcy52YWx1ZSA9IGRhdGEudmFsdWU7XG4gICAgdGhpcy5yZWFzb24gPSBkYXRhLnJlYXNvbjtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IG5ldyBEYXRlKGRhdGEuY3JlYXRlZEF0KTtcbiAgfVxufVxuXG50eXBlIFRNb2RlbCA9IHR5cGVvZiBCb3VuY2UgfCB0eXBlb2YgQ29tcGxhaW50IHwgdHlwZW9mIFVuc3Vic2NyaWJlIHwgdHlwZW9mIFdoaXRlTGlzdDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3VwcHJlc3Npb25DbGllbnQge1xuICByZXF1ZXN0OiBhbnk7XG4gIG1vZGVsczoge1xuICAgIGJvdW5jZXM6IHR5cGVvZiBCb3VuY2U7XG4gICAgY29tcGxhaW50czogdHlwZW9mIENvbXBsYWludDtcbiAgICB1bnN1YnNjcmliZXM6IHR5cGVvZiBVbnN1YnNjcmliZTtcbiAgICB3aGl0ZWxpc3RzOiB0eXBlb2YgV2hpdGVMaXN0O1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubW9kZWxzID0ge1xuICAgICAgYm91bmNlczogQm91bmNlLFxuICAgICAgY29tcGxhaW50czogQ29tcGxhaW50LFxuICAgICAgdW5zdWJzY3JpYmVzOiBVbnN1YnNjcmliZSxcbiAgICAgIHdoaXRlbGlzdHM6IFdoaXRlTGlzdCxcbiAgICB9O1xuICB9XG5cbiAgX3BhcnNlUGFnZShpZDogc3RyaW5nLCBwYWdlVXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJzZWRVcmwgPSB1cmwucGFyc2UocGFnZVVybCwgdHJ1ZSk7XG4gICAgY29uc3QgeyBxdWVyeSB9ID0gcGFyc2VkVXJsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgcGFnZTogcXVlcnkucGFnZSxcbiAgICAgIGFkZHJlc3M6IHF1ZXJ5LmFkZHJlc3MsXG4gICAgICB1cmw6IHBhZ2VVcmxcbiAgICB9O1xuICB9XG5cbiAgX3BhcnNlUGFnZUxpbmtzKHJlc3BvbnNlOiB7IGJvZHk6IHsgcGFnaW5nOiBhbnkgfSB9KSB7XG4gICAgY29uc3QgcGFnZXMgPSBPYmplY3QuZW50cmllcyhyZXNwb25zZS5ib2R5LnBhZ2luZyk7XG4gICAgcmV0dXJuIHBhZ2VzLnJlZHVjZShcbiAgICAgIChhY2M6IGFueSwgW2lkLCBwYWdlVXJsXTogW3BhZ2VVcmw6IHN0cmluZywgaWQ6IHN0cmluZ10pID0+IHtcbiAgICAgICAgYWNjW2lkXSA9IHRoaXMuX3BhcnNlUGFnZShpZCwgcGFnZVVybCk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fVxuICAgICk7XG4gIH1cblxuICBfcGFyc2VMaXN0KHJlc3BvbnNlOiB7IGJvZHk6IHsgaXRlbXM6IGFueSwgcGFnaW5nOiBhbnkgfSB9LCBNb2RlbDogVE1vZGVsKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIGFueTtcblxuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zLm1hcCgoZDogYW55KSA9PiBuZXcgTW9kZWwoZCkpO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMuX3BhcnNlUGFnZUxpbmtzKHJlc3BvbnNlKTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgX3BhcnNlSXRlbShyZXNwb25zZTogeyBib2R5OiBhbnkgfSwgTW9kZWw6IFRNb2RlbCkge1xuICAgIHJldHVybiBuZXcgTW9kZWwocmVzcG9uc2UuYm9keSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVdoaXRlTGlzdChkb21haW46IHN0cmluZywgZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLnBvc3RXaXRoRkQodXJsam9pbigndjMnLCBkb21haW4sICd3aGl0ZWxpc3RzJyksIGRhdGEsIGNyZWF0ZU9wdGlvbnMpXG4gICAgICAudGhlbigocmVzcG9uc2U6IHsgYm9keTogYW55IH0pID0+IHJlc3BvbnNlLmJvZHkpO1xuICB9XG5cbiAgbGlzdChkb21haW46IHN0cmluZywgdHlwZTogc3RyaW5nLCBxdWVyeTogYW55KSB7XG4gICAgY29uc3QgbW9kZWwgPSAodGhpcy5tb2RlbHMgYXMgYW55KVt0eXBlXTtcblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5nZXQodXJsam9pbigndjMnLCBkb21haW4sIHR5cGUpLCBxdWVyeSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogeyBib2R5OiB7IGl0ZW1zOiBhbnksIHBhZ2luZzogYW55IH0gfSkgPT4gdGhpcy5fcGFyc2VMaXN0KHJlc3BvbnNlLCBtb2RlbCkpO1xuICB9XG5cbiAgZ2V0KGRvbWFpbjogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIGFkZHJlc3M6IHN0cmluZykge1xuICAgIGNvbnN0IG1vZGVsID0gKHRoaXMubW9kZWxzIGFzIGFueSlbdHlwZV07XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0XG4gICAgICAuZ2V0KHVybGpvaW4oJ3YzJywgZG9tYWluLCB0eXBlLCBlbmNvZGVVUklDb21wb25lbnQoYWRkcmVzcykpKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiB7IGJvZHk6IGFueSB9KSA9PiB0aGlzLl9wYXJzZUl0ZW0ocmVzcG9uc2UsIG1vZGVsKSk7XG4gIH1cblxuICBjcmVhdGUoZG9tYWluOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgZGF0YTogYW55KSB7XG4gICAgLy8gc3VwcG9ydHMgYWRkaW5nIG11bHRpcGxlIHN1cHByZXNzaW9ucyBieSBkZWZhdWx0XG4gICAgbGV0IHBvc3REYXRhO1xuICAgIGlmICh0eXBlID09PSAnd2hpdGVsaXN0cycpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVdoaXRlTGlzdChkb21haW4sIGRhdGEpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgcG9zdERhdGEgPSBbZGF0YV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvc3REYXRhID0gWy4uLmRhdGFdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5wb3N0KHVybGpvaW4oJ3YzJywgZG9tYWluLCB0eXBlKSwgSlNPTi5zdHJpbmdpZnkocG9zdERhdGEpLCBjcmVhdGVPcHRpb25zKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiB7IGJvZHk6IGFueSB9KSA9PiByZXNwb25zZS5ib2R5KTtcbiAgfVxuXG4gIGRlc3Ryb3koZG9tYWluOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgYWRkcmVzczogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLmRlbGV0ZSh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSwgZW5jb2RlVVJJQ29tcG9uZW50KGFkZHJlc3MpKSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogeyBib2R5OiBhbnkgfSkgPT4gcmVzcG9uc2UuYm9keSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTdXBwcmVzc2lvbkNsaWVudDtcbiIsImltcG9ydCBBUElSZXNwb25zZSBmcm9tICcuL2ludGVyZmFjZXMvQXBpUmVzcG9uc2UnO1xuaW1wb3J0IHsgSU11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9NdWx0aXBsZVZhbGlkYXRpb24nO1xuaW1wb3J0IHsgVmFsaWRhdGlvblJlc3VsdCwgVmFsaWRhdGlvblJlc3BvbnNlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL1ZhbGlkYXRlJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZhbGlkYXRlQ2xpZW50IHtcbiAgcHVibGljIG11bHRpcGxlVmFsaWRhdGlvbjtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0LCBtdWx0aXBsZVZhbGlkYXRpb25DbGllbnQ6IElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubXVsdGlwbGVWYWxpZGF0aW9uID0gbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50O1xuICB9XG5cbiAgZ2V0KGFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjQvYWRkcmVzcy92YWxpZGF0ZScsIHsgYWRkcmVzcyB9KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlIDogQVBJUmVzcG9uc2UpID0+IHJlc3BvbnNlKVxuICAgICAgLnRoZW4oKHJlcyA6IFZhbGlkYXRpb25SZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgVmFsaWRhdGlvblJlc3VsdCk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcblxuaW1wb3J0IHtcbiAgVmFsaWRhdGlvblJlc3BvbnNlLFxuICBXZWJob29rTGlzdCxcbiAgV2ViaG9va1Jlc3BvbnNlLFxuICBXZWJob29rc1F1ZXJ5XG59IGZyb20gJy4vaW50ZXJmYWNlcy9XZWJob29rcyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5jbGFzcyBXZWJob29rIHtcbiAgaWQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgdXJsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViaG9va0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBfcGFyc2VXZWJob29rTGlzdChyZXNwb25zZTogeyBib2R5OiB7IHdlYmhvb2tzOiBXZWJob29rTGlzdCB9IH0pOiBXZWJob29rTGlzdCB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHkud2ViaG9va3M7XG4gIH1cblxuICBfcGFyc2VXZWJob29rV2l0aElEKGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc3BvbnNlOiBXZWJob29rUmVzcG9uc2UpOiBXZWJob29rIHtcbiAgICAgIGNvbnN0IHdlYmhvb2tSZXNwb25zZSA9IHJlc3BvbnNlPy5ib2R5Py53ZWJob29rO1xuICAgICAgbGV0IHVybCA9IHdlYmhvb2tSZXNwb25zZT8udXJsO1xuICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgdXJsID0gd2ViaG9va1Jlc3BvbnNlPy51cmxzICYmIHdlYmhvb2tSZXNwb25zZS51cmxzLmxlbmd0aCA/IHdlYmhvb2tSZXNwb25zZS51cmxzWzBdIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgV2ViaG9vayhpZCwgdXJsKTtcbiAgICB9O1xuICB9XG5cbiAgX3BhcnNlV2ViaG9va1Rlc3QocmVzcG9uc2U6IHsgYm9keTogeyBjb2RlOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZyB9IH0pXG4gIDoge2NvZGU6IG51bWJlciwgbWVzc2FnZTpzdHJpbmd9IHtcbiAgICByZXR1cm4geyBjb2RlOiByZXNwb25zZS5ib2R5LmNvZGUsIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZSB9IGFzIFZhbGlkYXRpb25SZXNwb25zZTtcbiAgfVxuXG4gIGxpc3QoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5OiBXZWJob29rc1F1ZXJ5KTogUHJvbWlzZTxXZWJob29rTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnKSwgcXVlcnkpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tMaXN0KTtcbiAgfVxuXG4gIGdldChkb21haW46IHN0cmluZywgaWQ6IHN0cmluZyk6IFByb21pc2U8V2ViaG9vaz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnLCBpZCkpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tXaXRoSUQoaWQpKTtcbiAgfVxuXG4gIGNyZWF0ZShkb21haW46IHN0cmluZyxcbiAgICBpZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIHRlc3QgPSBmYWxzZSk6IFByb21pc2U8V2ViaG9vayB8IFZhbGlkYXRpb25SZXNwb25zZT4ge1xuICAgIGlmICh0ZXN0KSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJywgaWQsICd0ZXN0JyksIHsgdXJsIH0pXG4gICAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1Rlc3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJyksIHsgaWQsIHVybCB9KVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rV2l0aElEKGlkKSk7XG4gIH1cblxuICB1cGRhdGUoZG9tYWluOiBzdHJpbmcsIGlkOiBzdHJpbmcsIHVybDogc3RyaW5nKTogUHJvbWlzZTxXZWJob29rPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkKSwgeyB1cmwgfSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1dpdGhJRChpZCkpO1xuICB9XG5cbiAgZGVzdHJveShkb21haW46IHN0cmluZywgaWQ6IHN0cmluZykgOiBQcm9taXNlPFdlYmhvb2s+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJywgaWQpKVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rV2l0aElEKGlkKSk7XG4gIH1cbn1cbiIsIi8qISBodHRwczovL210aHMuYmUvYmFzZTY0IHYxLjAuMCBieSBAbWF0aGlhcyB8IE1JVCBsaWNlbnNlICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZXMgYGV4cG9ydHNgLlxuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzO1xuXG5cdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLlxuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0bW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMgJiYgbW9kdWxlO1xuXG5cdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgLCBmcm9tIE5vZGUuanMgb3IgQnJvd3NlcmlmaWVkIGNvZGUsIGFuZCB1c2Vcblx0Ly8gaXQgYXMgYHJvb3RgLlxuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbC53aW5kb3cgPT09IGZyZWVHbG9iYWwpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdHZhciBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XG5cdFx0dGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcblx0fTtcblx0SW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcjtcblx0SW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0ludmFsaWRDaGFyYWN0ZXJFcnJvcic7XG5cblx0dmFyIGVycm9yID0gZnVuY3Rpb24obWVzc2FnZSkge1xuXHRcdC8vIE5vdGU6IHRoZSBlcnJvciBtZXNzYWdlcyB1c2VkIHRocm91Z2hvdXQgdGhpcyBmaWxlIG1hdGNoIHRob3NlIHVzZWQgYnlcblx0XHQvLyB0aGUgbmF0aXZlIGBhdG9iYC9gYnRvYWAgaW1wbGVtZW50YXRpb24gaW4gQ2hyb21pdW0uXG5cdFx0dGhyb3cgbmV3IEludmFsaWRDaGFyYWN0ZXJFcnJvcihtZXNzYWdlKTtcblx0fTtcblxuXHR2YXIgVEFCTEUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XG5cdC8vIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvY29tbW9uLW1pY3Jvc3ludGF4ZXMuaHRtbCNzcGFjZS1jaGFyYWN0ZXJcblx0dmFyIFJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMgPSAvW1xcdFxcblxcZlxcciBdL2c7XG5cblx0Ly8gYGRlY29kZWAgaXMgZGVzaWduZWQgdG8gYmUgZnVsbHkgY29tcGF0aWJsZSB3aXRoIGBhdG9iYCBhcyBkZXNjcmliZWQgaW4gdGhlXG5cdC8vIEhUTUwgU3RhbmRhcmQuIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYXRvYlxuXHQvLyBUaGUgb3B0aW1pemVkIGJhc2U2NC1kZWNvZGluZyBhbGdvcml0aG0gdXNlZCBpcyBiYXNlZCBvbiBAYXRr4oCZcyBleGNlbGxlbnRcblx0Ly8gaW1wbGVtZW50YXRpb24uIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2F0ay8xMDIwMzk2XG5cdHZhciBkZWNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xuXHRcdGlucHV0ID0gU3RyaW5nKGlucHV0KVxuXHRcdFx0LnJlcGxhY2UoUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUywgJycpO1xuXHRcdHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cdFx0aWYgKGxlbmd0aCAlIDQgPT0gMCkge1xuXHRcdFx0aW5wdXQgPSBpbnB1dC5yZXBsYWNlKC89PT8kLywgJycpO1xuXHRcdFx0bGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHRsZW5ndGggJSA0ID09IDEgfHxcblx0XHRcdC8vIGh0dHA6Ly93aGF0d2cub3JnL0MjYWxwaGFudW1lcmljLWFzY2lpLWNoYXJhY3RlcnNcblx0XHRcdC9bXithLXpBLVowLTkvXS8udGVzdChpbnB1dClcblx0XHQpIHtcblx0XHRcdGVycm9yKFxuXHRcdFx0XHQnSW52YWxpZCBjaGFyYWN0ZXI6IHRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuJ1xuXHRcdFx0KTtcblx0XHR9XG5cdFx0dmFyIGJpdENvdW50ZXIgPSAwO1xuXHRcdHZhciBiaXRTdG9yYWdlO1xuXHRcdHZhciBidWZmZXI7XG5cdFx0dmFyIG91dHB1dCA9ICcnO1xuXHRcdHZhciBwb3NpdGlvbiA9IC0xO1xuXHRcdHdoaWxlICgrK3Bvc2l0aW9uIDwgbGVuZ3RoKSB7XG5cdFx0XHRidWZmZXIgPSBUQUJMRS5pbmRleE9mKGlucHV0LmNoYXJBdChwb3NpdGlvbikpO1xuXHRcdFx0Yml0U3RvcmFnZSA9IGJpdENvdW50ZXIgJSA0ID8gYml0U3RvcmFnZSAqIDY0ICsgYnVmZmVyIDogYnVmZmVyO1xuXHRcdFx0Ly8gVW5sZXNzIHRoaXMgaXMgdGhlIGZpcnN0IG9mIGEgZ3JvdXAgb2YgNCBjaGFyYWN0ZXJz4oCmXG5cdFx0XHRpZiAoYml0Q291bnRlcisrICUgNCkge1xuXHRcdFx0XHQvLyDigKZjb252ZXJ0IHRoZSBmaXJzdCA4IGJpdHMgdG8gYSBzaW5nbGUgQVNDSUkgY2hhcmFjdGVyLlxuXHRcdFx0XHRvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShcblx0XHRcdFx0XHQweEZGICYgYml0U3RvcmFnZSA+PiAoLTIgKiBiaXRDb3VudGVyICYgNilcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fTtcblxuXHQvLyBgZW5jb2RlYCBpcyBkZXNpZ25lZCB0byBiZSBmdWxseSBjb21wYXRpYmxlIHdpdGggYGJ0b2FgIGFzIGRlc2NyaWJlZCBpbiB0aGVcblx0Ly8gSFRNTCBTdGFuZGFyZDogaHR0cDovL3doYXR3Zy5vcmcvaHRtbC93ZWJhcHBhcGlzLmh0bWwjZG9tLXdpbmRvd2Jhc2U2NC1idG9hXG5cdHZhciBlbmNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xuXHRcdGlucHV0ID0gU3RyaW5nKGlucHV0KTtcblx0XHRpZiAoL1teXFwwLVxceEZGXS8udGVzdChpbnB1dCkpIHtcblx0XHRcdC8vIE5vdGU6IG5vIG5lZWQgdG8gc3BlY2lhbC1jYXNlIGFzdHJhbCBzeW1ib2xzIGhlcmUsIGFzIHN1cnJvZ2F0ZXMgYXJlXG5cdFx0XHQvLyBtYXRjaGVkLCBhbmQgdGhlIGlucHV0IGlzIHN1cHBvc2VkIHRvIG9ubHkgY29udGFpbiBBU0NJSSBhbnl3YXkuXG5cdFx0XHRlcnJvcihcblx0XHRcdFx0J1RoZSBzdHJpbmcgdG8gYmUgZW5jb2RlZCBjb250YWlucyBjaGFyYWN0ZXJzIG91dHNpZGUgb2YgdGhlICcgK1xuXHRcdFx0XHQnTGF0aW4xIHJhbmdlLidcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHZhciBwYWRkaW5nID0gaW5wdXQubGVuZ3RoICUgMztcblx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0dmFyIHBvc2l0aW9uID0gLTE7XG5cdFx0dmFyIGE7XG5cdFx0dmFyIGI7XG5cdFx0dmFyIGM7XG5cdFx0dmFyIGJ1ZmZlcjtcblx0XHQvLyBNYWtlIHN1cmUgYW55IHBhZGRpbmcgaXMgaGFuZGxlZCBvdXRzaWRlIG9mIHRoZSBsb29wLlxuXHRcdHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGggLSBwYWRkaW5nO1xuXG5cdFx0d2hpbGUgKCsrcG9zaXRpb24gPCBsZW5ndGgpIHtcblx0XHRcdC8vIFJlYWQgdGhyZWUgYnl0ZXMsIGkuZS4gMjQgYml0cy5cblx0XHRcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCAxNjtcblx0XHRcdGIgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pIDw8IDg7XG5cdFx0XHRjID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKTtcblx0XHRcdGJ1ZmZlciA9IGEgKyBiICsgYztcblx0XHRcdC8vIFR1cm4gdGhlIDI0IGJpdHMgaW50byBmb3VyIGNodW5rcyBvZiA2IGJpdHMgZWFjaCwgYW5kIGFwcGVuZCB0aGVcblx0XHRcdC8vIG1hdGNoaW5nIGNoYXJhY3RlciBmb3IgZWFjaCBvZiB0aGVtIHRvIHRoZSBvdXRwdXQuXG5cdFx0XHRvdXRwdXQgKz0gKFxuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDE4ICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDEyICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDYgJiAweDNGKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgJiAweDNGKVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAocGFkZGluZyA9PSAyKSB7XG5cdFx0XHRhID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbikgPDwgODtcblx0XHRcdGIgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xuXHRcdFx0YnVmZmVyID0gYSArIGI7XG5cdFx0XHRvdXRwdXQgKz0gKFxuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDEwKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdCgoYnVmZmVyID4+IDQpICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA8PCAyKSAmIDB4M0YpICtcblx0XHRcdFx0Jz0nXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAocGFkZGluZyA9PSAxKSB7XG5cdFx0XHRidWZmZXIgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcblx0XHRcdG91dHB1dCArPSAoXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA8PCA0KSAmIDB4M0YpICtcblx0XHRcdFx0Jz09J1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9O1xuXG5cdHZhciBiYXNlNjQgPSB7XG5cdFx0J2VuY29kZSc6IGVuY29kZSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCd2ZXJzaW9uJzogJzEuMC4wJ1xuXHR9O1xuXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGJhc2U2NDtcblx0XHR9KTtcblx0fVx0ZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgIWZyZWVFeHBvcnRzLm5vZGVUeXBlKSB7XG5cdFx0aWYgKGZyZWVNb2R1bGUpIHsgLy8gaW4gTm9kZS5qcyBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IGJhc2U2NDtcblx0XHR9IGVsc2UgeyAvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yICh2YXIga2V5IGluIGJhc2U2NCkge1xuXHRcdFx0XHRiYXNlNjQuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IGJhc2U2NFtrZXldKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7IC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LmJhc2U2NCA9IGJhc2U2NDtcblx0fVxuXG59KHRoaXMpKTtcbiIsIi8qISBNSVQgTGljZW5zZSDCqSBTaW5kcmUgU29yaHVzICovXG5cbmNvbnN0IGdsb2JhbHMgPSB7fTtcblxuY29uc3QgZ2V0R2xvYmFsID0gcHJvcGVydHkgPT4ge1xuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHNlbGYgJiYgcHJvcGVydHkgaW4gc2VsZikge1xuXHRcdHJldHVybiBzZWxmO1xuXHR9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdyAmJiBwcm9wZXJ0eSBpbiB3aW5kb3cpIHtcblx0XHRyZXR1cm4gd2luZG93O1xuXHR9XG5cblx0aWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbCAmJiBwcm9wZXJ0eSBpbiBnbG9iYWwpIHtcblx0XHRyZXR1cm4gZ2xvYmFsO1xuXHR9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzKSB7XG5cdFx0cmV0dXJuIGdsb2JhbFRoaXM7XG5cdH1cbn07XG5cbmNvbnN0IGdsb2JhbFByb3BlcnRpZXMgPSBbXG5cdCdIZWFkZXJzJyxcblx0J1JlcXVlc3QnLFxuXHQnUmVzcG9uc2UnLFxuXHQnUmVhZGFibGVTdHJlYW0nLFxuXHQnZmV0Y2gnLFxuXHQnQWJvcnRDb250cm9sbGVyJyxcblx0J0Zvcm1EYXRhJ1xuXTtcblxuZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBnbG9iYWxQcm9wZXJ0aWVzKSB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxzLCBwcm9wZXJ0eSwge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IGdsb2JhbE9iamVjdCA9IGdldEdsb2JhbChwcm9wZXJ0eSk7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IGdsb2JhbE9iamVjdCAmJiBnbG9iYWxPYmplY3RbcHJvcGVydHldO1xuXHRcdFx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLmJpbmQoZ2xvYmFsT2JqZWN0KSA6IHZhbHVlO1xuXHRcdH1cblx0fSk7XG59XG5cbmNvbnN0IGlzT2JqZWN0ID0gdmFsdWUgPT4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JztcbmNvbnN0IHN1cHBvcnRzQWJvcnRDb250cm9sbGVyID0gdHlwZW9mIGdsb2JhbHMuQWJvcnRDb250cm9sbGVyID09PSAnZnVuY3Rpb24nO1xuY29uc3Qgc3VwcG9ydHNTdHJlYW1zID0gdHlwZW9mIGdsb2JhbHMuUmVhZGFibGVTdHJlYW0gPT09ICdmdW5jdGlvbic7XG5jb25zdCBzdXBwb3J0c0Zvcm1EYXRhID0gdHlwZW9mIGdsb2JhbHMuRm9ybURhdGEgPT09ICdmdW5jdGlvbic7XG5cbmNvbnN0IG1lcmdlSGVhZGVycyA9IChzb3VyY2UxLCBzb3VyY2UyKSA9PiB7XG5cdGNvbnN0IHJlc3VsdCA9IG5ldyBnbG9iYWxzLkhlYWRlcnMoc291cmNlMSB8fCB7fSk7XG5cdGNvbnN0IGlzSGVhZGVyc0luc3RhbmNlID0gc291cmNlMiBpbnN0YW5jZW9mIGdsb2JhbHMuSGVhZGVycztcblx0Y29uc3Qgc291cmNlID0gbmV3IGdsb2JhbHMuSGVhZGVycyhzb3VyY2UyIHx8IHt9KTtcblxuXHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBzb3VyY2UpIHtcblx0XHRpZiAoKGlzSGVhZGVyc0luc3RhbmNlICYmIHZhbHVlID09PSAndW5kZWZpbmVkJykgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmVzdWx0LmRlbGV0ZShrZXkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHQuc2V0KGtleSwgdmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCBkZWVwTWVyZ2UgPSAoLi4uc291cmNlcykgPT4ge1xuXHRsZXQgcmV0dXJuVmFsdWUgPSB7fTtcblx0bGV0IGhlYWRlcnMgPSB7fTtcblxuXHRmb3IgKGNvbnN0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuXHRcdFx0aWYgKCEoQXJyYXkuaXNBcnJheShyZXR1cm5WYWx1ZSkpKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlID0gW107XG5cdFx0XHR9XG5cblx0XHRcdHJldHVyblZhbHVlID0gWy4uLnJldHVyblZhbHVlLCAuLi5zb3VyY2VdO1xuXHRcdH0gZWxzZSBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuXHRcdFx0Zm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkpIHtcblx0XHRcdFx0aWYgKGlzT2JqZWN0KHZhbHVlKSAmJiAoa2V5IGluIHJldHVyblZhbHVlKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gZGVlcE1lcmdlKHJldHVyblZhbHVlW2tleV0sIHZhbHVlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVyblZhbHVlID0gey4uLnJldHVyblZhbHVlLCBba2V5XTogdmFsdWV9O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPYmplY3Qoc291cmNlLmhlYWRlcnMpKSB7XG5cdFx0XHRcdGhlYWRlcnMgPSBtZXJnZUhlYWRlcnMoaGVhZGVycywgc291cmNlLmhlYWRlcnMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVyblZhbHVlLmhlYWRlcnMgPSBoZWFkZXJzO1xuXHR9XG5cblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuY29uc3QgcmVxdWVzdE1ldGhvZHMgPSBbXG5cdCdnZXQnLFxuXHQncG9zdCcsXG5cdCdwdXQnLFxuXHQncGF0Y2gnLFxuXHQnaGVhZCcsXG5cdCdkZWxldGUnXG5dO1xuXG5jb25zdCByZXNwb25zZVR5cGVzID0ge1xuXHRqc29uOiAnYXBwbGljYXRpb24vanNvbicsXG5cdHRleHQ6ICd0ZXh0LyonLFxuXHRmb3JtRGF0YTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxuXHRhcnJheUJ1ZmZlcjogJyovKicsXG5cdGJsb2I6ICcqLyonXG59O1xuXG5jb25zdCByZXRyeU1ldGhvZHMgPSBbXG5cdCdnZXQnLFxuXHQncHV0Jyxcblx0J2hlYWQnLFxuXHQnZGVsZXRlJyxcblx0J29wdGlvbnMnLFxuXHQndHJhY2UnXG5dO1xuXG5jb25zdCByZXRyeVN0YXR1c0NvZGVzID0gW1xuXHQ0MDgsXG5cdDQxMyxcblx0NDI5LFxuXHQ1MDAsXG5cdDUwMixcblx0NTAzLFxuXHQ1MDRcbl07XG5cbmNvbnN0IHJldHJ5QWZ0ZXJTdGF0dXNDb2RlcyA9IFtcblx0NDEzLFxuXHQ0MjksXG5cdDUwM1xuXTtcblxuY29uc3Qgc3RvcCA9IFN5bWJvbCgnc3RvcCcpO1xuXG5jbGFzcyBIVFRQRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG5cdFx0Ly8gU2V0IHRoZSBtZXNzYWdlIHRvIHRoZSBzdGF0dXMgdGV4dCwgc3VjaCBhcyBVbmF1dGhvcml6ZWQsXG5cdFx0Ly8gd2l0aCBzb21lIGZhbGxiYWNrcy4gVGhpcyBtZXNzYWdlIHNob3VsZCBuZXZlciBiZSB1bmRlZmluZWQuXG5cdFx0c3VwZXIoXG5cdFx0XHRyZXNwb25zZS5zdGF0dXNUZXh0IHx8XG5cdFx0XHRTdHJpbmcoXG5cdFx0XHRcdChyZXNwb25zZS5zdGF0dXMgPT09IDAgfHwgcmVzcG9uc2Uuc3RhdHVzKSA/XG5cdFx0XHRcdFx0cmVzcG9uc2Uuc3RhdHVzIDogJ1Vua25vd24gcmVzcG9uc2UgZXJyb3InXG5cdFx0XHQpXG5cdFx0KTtcblx0XHR0aGlzLm5hbWUgPSAnSFRUUEVycm9yJztcblx0XHR0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG5cdH1cbn1cblxuY2xhc3MgVGltZW91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRjb25zdHJ1Y3RvcihyZXF1ZXN0KSB7XG5cdFx0c3VwZXIoJ1JlcXVlc3QgdGltZWQgb3V0Jyk7XG5cdFx0dGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG5cdFx0dGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcblx0fVxufVxuXG5jb25zdCBkZWxheSA9IG1zID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuXG4vLyBgUHJvbWlzZS5yYWNlKClgIHdvcmthcm91bmQgKCM5MSlcbmNvbnN0IHRpbWVvdXQgPSAocmVxdWVzdCwgYWJvcnRDb250cm9sbGVyLCBvcHRpb25zKSA9PlxuXHRuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0Y29uc3QgdGltZW91dElEID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAoYWJvcnRDb250cm9sbGVyKSB7XG5cdFx0XHRcdGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZWplY3QobmV3IFRpbWVvdXRFcnJvcihyZXF1ZXN0KSk7XG5cdFx0fSwgb3B0aW9ucy50aW1lb3V0KTtcblxuXHRcdC8qIGVzbGludC1kaXNhYmxlIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLXRoZW4gKi9cblx0XHRvcHRpb25zLmZldGNoKHJlcXVlc3QpXG5cdFx0XHQudGhlbihyZXNvbHZlKVxuXHRcdFx0LmNhdGNoKHJlamVjdClcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXRJRCk7XG5cdFx0XHR9KTtcblx0XHQvKiBlc2xpbnQtZW5hYmxlIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLXRoZW4gKi9cblx0fSk7XG5cbmNvbnN0IG5vcm1hbGl6ZVJlcXVlc3RNZXRob2QgPSBpbnB1dCA9PiByZXF1ZXN0TWV0aG9kcy5pbmNsdWRlcyhpbnB1dCkgPyBpbnB1dC50b1VwcGVyQ2FzZSgpIDogaW5wdXQ7XG5cbmNvbnN0IGRlZmF1bHRSZXRyeU9wdGlvbnMgPSB7XG5cdGxpbWl0OiAyLFxuXHRtZXRob2RzOiByZXRyeU1ldGhvZHMsXG5cdHN0YXR1c0NvZGVzOiByZXRyeVN0YXR1c0NvZGVzLFxuXHRhZnRlclN0YXR1c0NvZGVzOiByZXRyeUFmdGVyU3RhdHVzQ29kZXNcbn07XG5cbmNvbnN0IG5vcm1hbGl6ZVJldHJ5T3B0aW9ucyA9IChyZXRyeSA9IHt9KSA9PiB7XG5cdGlmICh0eXBlb2YgcmV0cnkgPT09ICdudW1iZXInKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLmRlZmF1bHRSZXRyeU9wdGlvbnMsXG5cdFx0XHRsaW1pdDogcmV0cnlcblx0XHR9O1xuXHR9XG5cblx0aWYgKHJldHJ5Lm1ldGhvZHMgJiYgIUFycmF5LmlzQXJyYXkocmV0cnkubWV0aG9kcykpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ3JldHJ5Lm1ldGhvZHMgbXVzdCBiZSBhbiBhcnJheScpO1xuXHR9XG5cblx0aWYgKHJldHJ5LnN0YXR1c0NvZGVzICYmICFBcnJheS5pc0FycmF5KHJldHJ5LnN0YXR1c0NvZGVzKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcigncmV0cnkuc3RhdHVzQ29kZXMgbXVzdCBiZSBhbiBhcnJheScpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHQuLi5kZWZhdWx0UmV0cnlPcHRpb25zLFxuXHRcdC4uLnJldHJ5LFxuXHRcdGFmdGVyU3RhdHVzQ29kZXM6IHJldHJ5QWZ0ZXJTdGF0dXNDb2Rlc1xuXHR9O1xufTtcblxuLy8gVGhlIG1heGltdW0gdmFsdWUgb2YgYSAzMmJpdCBpbnQgKHNlZSBpc3N1ZSAjMTE3KVxuY29uc3QgbWF4U2FmZVRpbWVvdXQgPSAyMTQ3NDgzNjQ3O1xuXG5jbGFzcyBLeSB7XG5cdGNvbnN0cnVjdG9yKGlucHV0LCBvcHRpb25zID0ge30pIHtcblx0XHR0aGlzLl9yZXRyeUNvdW50ID0gMDtcblx0XHR0aGlzLl9pbnB1dCA9IGlucHV0O1xuXHRcdHRoaXMuX29wdGlvbnMgPSB7XG5cdFx0XHQvLyBUT0RPOiBjcmVkZW50aWFscyBjYW4gYmUgcmVtb3ZlZCB3aGVuIHRoZSBzcGVjIGNoYW5nZSBpcyBpbXBsZW1lbnRlZCBpbiBhbGwgYnJvd3NlcnMuIENvbnRleHQ6IGh0dHBzOi8vd3d3LmNocm9tZXN0YXR1cy5jb20vZmVhdHVyZS80NTM5NDczMzEyMzUwMjA4XG5cdFx0XHRjcmVkZW50aWFsczogdGhpcy5faW5wdXQuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJyxcblx0XHRcdC4uLm9wdGlvbnMsXG5cdFx0XHRoZWFkZXJzOiBtZXJnZUhlYWRlcnModGhpcy5faW5wdXQuaGVhZGVycywgb3B0aW9ucy5oZWFkZXJzKSxcblx0XHRcdGhvb2tzOiBkZWVwTWVyZ2Uoe1xuXHRcdFx0XHRiZWZvcmVSZXF1ZXN0OiBbXSxcblx0XHRcdFx0YmVmb3JlUmV0cnk6IFtdLFxuXHRcdFx0XHRhZnRlclJlc3BvbnNlOiBbXVxuXHRcdFx0fSwgb3B0aW9ucy5ob29rcyksXG5cdFx0XHRtZXRob2Q6IG5vcm1hbGl6ZVJlcXVlc3RNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5faW5wdXQubWV0aG9kKSxcblx0XHRcdHByZWZpeFVybDogU3RyaW5nKG9wdGlvbnMucHJlZml4VXJsIHx8ICcnKSxcblx0XHRcdHJldHJ5OiBub3JtYWxpemVSZXRyeU9wdGlvbnMob3B0aW9ucy5yZXRyeSksXG5cdFx0XHR0aHJvd0h0dHBFcnJvcnM6IG9wdGlvbnMudGhyb3dIdHRwRXJyb3JzICE9PSBmYWxzZSxcblx0XHRcdHRpbWVvdXQ6IHR5cGVvZiBvcHRpb25zLnRpbWVvdXQgPT09ICd1bmRlZmluZWQnID8gMTAwMDAgOiBvcHRpb25zLnRpbWVvdXQsXG5cdFx0XHRmZXRjaDogb3B0aW9ucy5mZXRjaCB8fCBnbG9iYWxzLmZldGNoXG5cdFx0fTtcblxuXHRcdGlmICh0eXBlb2YgdGhpcy5faW5wdXQgIT09ICdzdHJpbmcnICYmICEodGhpcy5faW5wdXQgaW5zdGFuY2VvZiBVUkwgfHwgdGhpcy5faW5wdXQgaW5zdGFuY2VvZiBnbG9iYWxzLlJlcXVlc3QpKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdgaW5wdXRgIG11c3QgYmUgYSBzdHJpbmcsIFVSTCwgb3IgUmVxdWVzdCcpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9vcHRpb25zLnByZWZpeFVybCAmJiB0eXBlb2YgdGhpcy5faW5wdXQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRpZiAodGhpcy5faW5wdXQuc3RhcnRzV2l0aCgnLycpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignYGlucHV0YCBtdXN0IG5vdCBiZWdpbiB3aXRoIGEgc2xhc2ggd2hlbiB1c2luZyBgcHJlZml4VXJsYCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXRoaXMuX29wdGlvbnMucHJlZml4VXJsLmVuZHNXaXRoKCcvJykpIHtcblx0XHRcdFx0dGhpcy5fb3B0aW9ucy5wcmVmaXhVcmwgKz0gJy8nO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9pbnB1dCA9IHRoaXMuX29wdGlvbnMucHJlZml4VXJsICsgdGhpcy5faW5wdXQ7XG5cdFx0fVxuXG5cdFx0aWYgKHN1cHBvcnRzQWJvcnRDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLmFib3J0Q29udHJvbGxlciA9IG5ldyBnbG9iYWxzLkFib3J0Q29udHJvbGxlcigpO1xuXHRcdFx0aWYgKHRoaXMuX29wdGlvbnMuc2lnbmFsKSB7XG5cdFx0XHRcdHRoaXMuX29wdGlvbnMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9vcHRpb25zLnNpZ25hbCA9IHRoaXMuYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcblx0XHR9XG5cblx0XHR0aGlzLnJlcXVlc3QgPSBuZXcgZ2xvYmFscy5SZXF1ZXN0KHRoaXMuX2lucHV0LCB0aGlzLl9vcHRpb25zKTtcblxuXHRcdGlmICh0aGlzLl9vcHRpb25zLnNlYXJjaFBhcmFtcykge1xuXHRcdFx0Y29uc3Qgc2VhcmNoUGFyYW1zID0gJz8nICsgbmV3IFVSTFNlYXJjaFBhcmFtcyh0aGlzLl9vcHRpb25zLnNlYXJjaFBhcmFtcykudG9TdHJpbmcoKTtcblx0XHRcdGNvbnN0IHVybCA9IHRoaXMucmVxdWVzdC51cmwucmVwbGFjZSgvKD86XFw/Lio/KT8oPz0jfCQpLywgc2VhcmNoUGFyYW1zKTtcblx0XHRcdGNvbnNvbGUubG9nKCd1cmwgLS0tLS0tLS0tPicsIHVybCk7XG5cdFx0XHQvLyBUbyBwcm92aWRlIGNvcnJlY3QgZm9ybSBib3VuZGFyeSwgQ29udGVudC1UeXBlIGhlYWRlciBzaG91bGQgYmUgZGVsZXRlZCBlYWNoIHRpbWUgd2hlbiBuZXcgUmVxdWVzdCBpbnN0YW50aWF0ZWQgZnJvbSBhbm90aGVyIG9uZVxuXHRcdFx0aWYgKCgoc3VwcG9ydHNGb3JtRGF0YSAmJiB0aGlzLl9vcHRpb25zLmJvZHkgaW5zdGFuY2VvZiBnbG9iYWxzLkZvcm1EYXRhKSB8fCB0aGlzLl9vcHRpb25zLmJvZHkgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpICYmICEodGhpcy5fb3B0aW9ucy5oZWFkZXJzICYmIHRoaXMuX29wdGlvbnMuaGVhZGVyc1snY29udGVudC10eXBlJ10pKSB7XG5cdFx0XHRcdHRoaXMucmVxdWVzdC5oZWFkZXJzLmRlbGV0ZSgnY29udGVudC10eXBlJyk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMucmVxdWVzdCA9IG5ldyBnbG9iYWxzLlJlcXVlc3QobmV3IGdsb2JhbHMuUmVxdWVzdCh1cmwsIHRoaXMucmVxdWVzdCksIHRoaXMuX29wdGlvbnMpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9vcHRpb25zLmpzb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5fb3B0aW9ucy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkodGhpcy5fb3B0aW9ucy5qc29uKTtcblx0XHRcdHRoaXMucmVxdWVzdC5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcblx0XHRcdHRoaXMucmVxdWVzdCA9IG5ldyBnbG9iYWxzLlJlcXVlc3QodGhpcy5yZXF1ZXN0LCB7Ym9keTogdGhpcy5fb3B0aW9ucy5ib2R5fSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZm4gPSBhc3luYyAoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fb3B0aW9ucy50aW1lb3V0ID4gbWF4U2FmZVRpbWVvdXQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoYFRoZSBcXGB0aW1lb3V0XFxgIG9wdGlvbiBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuICR7bWF4U2FmZVRpbWVvdXR9YCk7XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IGRlbGF5KDEpO1xuXHRcdFx0bGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5fZmV0Y2goKTtcblxuXHRcdFx0Zm9yIChjb25zdCBob29rIG9mIHRoaXMuX29wdGlvbnMuaG9va3MuYWZ0ZXJSZXNwb25zZSkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuXHRcdFx0XHRjb25zdCBtb2RpZmllZFJlc3BvbnNlID0gYXdhaXQgaG9vayhcblx0XHRcdFx0XHR0aGlzLnJlcXVlc3QsXG5cdFx0XHRcdFx0dGhpcy5fb3B0aW9ucyxcblx0XHRcdFx0XHR0aGlzLl9kZWNvcmF0ZVJlc3BvbnNlKHJlc3BvbnNlLmNsb25lKCkpXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0aWYgKG1vZGlmaWVkUmVzcG9uc2UgaW5zdGFuY2VvZiBnbG9iYWxzLlJlc3BvbnNlKSB7XG5cdFx0XHRcdFx0cmVzcG9uc2UgPSBtb2RpZmllZFJlc3BvbnNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX2RlY29yYXRlUmVzcG9uc2UocmVzcG9uc2UpO1xuXG5cdFx0XHRpZiAoIXJlc3BvbnNlLm9rICYmIHRoaXMuX29wdGlvbnMudGhyb3dIdHRwRXJyb3JzKSB7XG5cdFx0XHRcdHRocm93IG5ldyBIVFRQRXJyb3IocmVzcG9uc2UpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBgb25Eb3dubG9hZFByb2dyZXNzYCBpcyBwYXNzZWQsIGl0IHVzZXMgdGhlIHN0cmVhbSBBUEkgaW50ZXJuYWxseVxuXHRcdFx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0XHRcdGlmICh0aGlzLl9vcHRpb25zLm9uRG93bmxvYWRQcm9ncmVzcykge1xuXHRcdFx0XHRpZiAodHlwZW9mIHRoaXMuX29wdGlvbnMub25Eb3dubG9hZFByb2dyZXNzICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGBvbkRvd25sb2FkUHJvZ3Jlc3NgIG9wdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghc3VwcG9ydHNTdHJlYW1zKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdTdHJlYW1zIGFyZSBub3Qgc3VwcG9ydGVkIGluIHlvdXIgZW52aXJvbm1lbnQuIGBSZWFkYWJsZVN0cmVhbWAgaXMgbWlzc2luZy4nKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0aGlzLl9zdHJlYW0ocmVzcG9uc2UuY2xvbmUoKSwgdGhpcy5fb3B0aW9ucy5vbkRvd25sb2FkUHJvZ3Jlc3MpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzcG9uc2U7XG5cdFx0fTtcblxuXHRcdGNvbnN0IGlzUmV0cmlhYmxlTWV0aG9kID0gdGhpcy5fb3B0aW9ucy5yZXRyeS5tZXRob2RzLmluY2x1ZGVzKHRoaXMucmVxdWVzdC5tZXRob2QudG9Mb3dlckNhc2UoKSk7XG5cdFx0Y29uc3QgcmVzdWx0ID0gaXNSZXRyaWFibGVNZXRob2QgPyB0aGlzLl9yZXRyeShmbikgOiBmbigpO1xuXG5cdFx0Zm9yIChjb25zdCBbdHlwZSwgbWltZVR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKHJlc3BvbnNlVHlwZXMpKSB7XG5cdFx0XHRyZXN1bHRbdHlwZV0gPSBhc3luYyAoKSA9PiB7XG5cdFx0XHRcdHRoaXMucmVxdWVzdC5oZWFkZXJzLnNldCgnYWNjZXB0JywgdGhpcy5yZXF1ZXN0LmhlYWRlcnMuZ2V0KCdhY2NlcHQnKSB8fCBtaW1lVHlwZSk7XG5cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSAoYXdhaXQgcmVzdWx0KS5jbG9uZSgpO1xuXG5cdFx0XHRcdGlmICh0eXBlID09PSAnanNvbicpIHtcblx0XHRcdFx0XHRpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpIHtcblx0XHRcdFx0XHRcdHJldHVybiAnJztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAob3B0aW9ucy5wYXJzZUpzb24pIHtcblx0XHRcdFx0XHRcdHJldHVybiBvcHRpb25zLnBhcnNlSnNvbihhd2FpdCByZXNwb25zZS50ZXh0KCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByZXNwb25zZVt0eXBlXSgpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0X2NhbGN1bGF0ZVJldHJ5RGVsYXkoZXJyb3IpIHtcblx0XHR0aGlzLl9yZXRyeUNvdW50Kys7XG5cblx0XHRpZiAodGhpcy5fcmV0cnlDb3VudCA8IHRoaXMuX29wdGlvbnMucmV0cnkubGltaXQgJiYgIShlcnJvciBpbnN0YW5jZW9mIFRpbWVvdXRFcnJvcikpIHtcblx0XHRcdGlmIChlcnJvciBpbnN0YW5jZW9mIEhUVFBFcnJvcikge1xuXHRcdFx0XHRpZiAoIXRoaXMuX29wdGlvbnMucmV0cnkuc3RhdHVzQ29kZXMuaW5jbHVkZXMoZXJyb3IucmVzcG9uc2Uuc3RhdHVzKSkge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcmV0cnlBZnRlciA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdSZXRyeS1BZnRlcicpO1xuXHRcdFx0XHRpZiAocmV0cnlBZnRlciAmJiB0aGlzLl9vcHRpb25zLnJldHJ5LmFmdGVyU3RhdHVzQ29kZXMuaW5jbHVkZXMoZXJyb3IucmVzcG9uc2Uuc3RhdHVzKSkge1xuXHRcdFx0XHRcdGxldCBhZnRlciA9IE51bWJlcihyZXRyeUFmdGVyKTtcblx0XHRcdFx0XHRpZiAoTnVtYmVyLmlzTmFOKGFmdGVyKSkge1xuXHRcdFx0XHRcdFx0YWZ0ZXIgPSBEYXRlLnBhcnNlKHJldHJ5QWZ0ZXIpIC0gRGF0ZS5ub3coKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YWZ0ZXIgKj0gMTAwMDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAodHlwZW9mIHRoaXMuX29wdGlvbnMucmV0cnkubWF4UmV0cnlBZnRlciAhPT0gJ3VuZGVmaW5lZCcgJiYgYWZ0ZXIgPiB0aGlzLl9vcHRpb25zLnJldHJ5Lm1heFJldHJ5QWZ0ZXIpIHtcblx0XHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBhZnRlcjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChlcnJvci5yZXNwb25zZS5zdGF0dXMgPT09IDQxMykge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IEJBQ0tPRkZfRkFDVE9SID0gMC4zO1xuXHRcdFx0cmV0dXJuIEJBQ0tPRkZfRkFDVE9SICogKDIgKiogKHRoaXMuX3JldHJ5Q291bnQgLSAxKSkgKiAxMDAwO1xuXHRcdH1cblxuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0X2RlY29yYXRlUmVzcG9uc2UocmVzcG9uc2UpIHtcblx0XHRpZiAodGhpcy5fb3B0aW9ucy5wYXJzZUpzb24pIHtcblx0XHRcdHJlc3BvbnNlLmpzb24gPSBhc3luYyAoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9vcHRpb25zLnBhcnNlSnNvbihhd2FpdCByZXNwb25zZS50ZXh0KCkpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzcG9uc2U7XG5cdH1cblxuXHRhc3luYyBfcmV0cnkoZm4pIHtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGF3YWl0IGZuKCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnN0IG1zID0gTWF0aC5taW4odGhpcy5fY2FsY3VsYXRlUmV0cnlEZWxheShlcnJvciksIG1heFNhZmVUaW1lb3V0KTtcblx0XHRcdGlmIChtcyAhPT0gMCAmJiB0aGlzLl9yZXRyeUNvdW50ID4gMCkge1xuXHRcdFx0XHRhd2FpdCBkZWxheShtcyk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBob29rIG9mIHRoaXMuX29wdGlvbnMuaG9va3MuYmVmb3JlUmV0cnkpIHtcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuXHRcdFx0XHRcdGNvbnN0IGhvb2tSZXN1bHQgPSBhd2FpdCBob29rKHtcblx0XHRcdFx0XHRcdHJlcXVlc3Q6IHRoaXMucmVxdWVzdCxcblx0XHRcdFx0XHRcdG9wdGlvbnM6IHRoaXMuX29wdGlvbnMsXG5cdFx0XHRcdFx0XHRlcnJvcixcblx0XHRcdFx0XHRcdHJldHJ5Q291bnQ6IHRoaXMuX3JldHJ5Q291bnRcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdC8vIElmIGBzdG9wYCBpcyByZXR1cm5lZCBmcm9tIHRoZSBob29rLCB0aGUgcmV0cnkgcHJvY2VzcyBpcyBzdG9wcGVkXG5cdFx0XHRcdFx0aWYgKGhvb2tSZXN1bHQgPT09IHN0b3ApIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5fcmV0cnkoZm4pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5fb3B0aW9ucy50aHJvd0h0dHBFcnJvcnMpIHtcblx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgX2ZldGNoKCkge1xuXHRcdGZvciAoY29uc3QgaG9vayBvZiB0aGlzLl9vcHRpb25zLmhvb2tzLmJlZm9yZVJlcXVlc3QpIHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG5cdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCBob29rKHRoaXMucmVxdWVzdCwgdGhpcy5fb3B0aW9ucyk7XG5cblx0XHRcdGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG5cdFx0XHRcdHRoaXMucmVxdWVzdCA9IHJlc3VsdDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZXNwb25zZSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9vcHRpb25zLnRpbWVvdXQgPT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fb3B0aW9ucy5mZXRjaCh0aGlzLnJlcXVlc3QuY2xvbmUoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRpbWVvdXQodGhpcy5yZXF1ZXN0LmNsb25lKCksIHRoaXMuYWJvcnRDb250cm9sbGVyLCB0aGlzLl9vcHRpb25zKTtcblx0fVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF9zdHJlYW0ocmVzcG9uc2UsIG9uRG93bmxvYWRQcm9ncmVzcykge1xuXHRcdGNvbnN0IHRvdGFsQnl0ZXMgPSBOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykpIHx8IDA7XG5cdFx0bGV0IHRyYW5zZmVycmVkQnl0ZXMgPSAwO1xuXG5cdFx0cmV0dXJuIG5ldyBnbG9iYWxzLlJlc3BvbnNlKFxuXHRcdFx0bmV3IGdsb2JhbHMuUmVhZGFibGVTdHJlYW0oe1xuXHRcdFx0XHRzdGFydChjb250cm9sbGVyKSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKTtcblxuXHRcdFx0XHRcdGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MpIHtcblx0XHRcdFx0XHRcdG9uRG93bmxvYWRQcm9ncmVzcyh7cGVyY2VudDogMCwgdHJhbnNmZXJyZWRCeXRlczogMCwgdG90YWxCeXRlc30sIG5ldyBVaW50OEFycmF5KCkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGFzeW5jIGZ1bmN0aW9uIHJlYWQoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB7ZG9uZSwgdmFsdWV9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcblx0XHRcdFx0XHRcdGlmIChkb25lKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAob25Eb3dubG9hZFByb2dyZXNzKSB7XG5cdFx0XHRcdFx0XHRcdHRyYW5zZmVycmVkQnl0ZXMgKz0gdmFsdWUuYnl0ZUxlbmd0aDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcGVyY2VudCA9IHRvdGFsQnl0ZXMgPT09IDAgPyAwIDogdHJhbnNmZXJyZWRCeXRlcyAvIHRvdGFsQnl0ZXM7XG5cdFx0XHRcdFx0XHRcdG9uRG93bmxvYWRQcm9ncmVzcyh7cGVyY2VudCwgdHJhbnNmZXJyZWRCeXRlcywgdG90YWxCeXRlc30sIHZhbHVlKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29udHJvbGxlci5lbnF1ZXVlKHZhbHVlKTtcblx0XHRcdFx0XHRcdHJlYWQoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZWFkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0KTtcblx0fVxufVxuXG5jb25zdCB2YWxpZGF0ZUFuZE1lcmdlID0gKC4uLnNvdXJjZXMpID0+IHtcblx0Zm9yIChjb25zdCBzb3VyY2Ugb2Ygc291cmNlcykge1xuXHRcdGlmICgoIWlzT2JqZWN0KHNvdXJjZSkgfHwgQXJyYXkuaXNBcnJheShzb3VyY2UpKSAmJiB0eXBlb2Ygc291cmNlICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGBvcHRpb25zYCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBkZWVwTWVyZ2Uoe30sIC4uLnNvdXJjZXMpO1xufTtcblxuY29uc3QgY3JlYXRlSW5zdGFuY2UgPSBkZWZhdWx0cyA9PiB7XG5cdGNvbnN0IGt5ID0gKGlucHV0LCBvcHRpb25zKSA9PiBuZXcgS3koaW5wdXQsIHZhbGlkYXRlQW5kTWVyZ2UoZGVmYXVsdHMsIG9wdGlvbnMpKTtcblxuXHRmb3IgKGNvbnN0IG1ldGhvZCBvZiByZXF1ZXN0TWV0aG9kcykge1xuXHRcdGt5W21ldGhvZF0gPSAoaW5wdXQsIG9wdGlvbnMpID0+IG5ldyBLeShpbnB1dCwgdmFsaWRhdGVBbmRNZXJnZShkZWZhdWx0cywgb3B0aW9ucywge21ldGhvZH0pKTtcblx0fVxuXG5cdGt5LkhUVFBFcnJvciA9IEhUVFBFcnJvcjtcblx0a3kuVGltZW91dEVycm9yID0gVGltZW91dEVycm9yO1xuXHRreS5jcmVhdGUgPSBuZXdEZWZhdWx0cyA9PiBjcmVhdGVJbnN0YW5jZSh2YWxpZGF0ZUFuZE1lcmdlKG5ld0RlZmF1bHRzKSk7XG5cdGt5LmV4dGVuZCA9IG5ld0RlZmF1bHRzID0+IGNyZWF0ZUluc3RhbmNlKHZhbGlkYXRlQW5kTWVyZ2UoZGVmYXVsdHMsIG5ld0RlZmF1bHRzKSk7XG5cdGt5LnN0b3AgPSBzdG9wO1xuXG5cdHJldHVybiBreTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUluc3RhbmNlKCk7XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjMuMiBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ5MiNzZWN0aW9uLTMuNFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZnVuY3Rpb24gYWRhcHQoZGVsdGEsIG51bVBvaW50cywgZmlyc3RUaW1lKSB7XG5cdFx0dmFyIGsgPSAwO1xuXHRcdGRlbHRhID0gZmlyc3RUaW1lID8gZmxvb3IoZGVsdGEgLyBkYW1wKSA6IGRlbHRhID4+IDE7XG5cdFx0ZGVsdGEgKz0gZmxvb3IoZGVsdGEgLyBudW1Qb2ludHMpO1xuXHRcdGZvciAoLyogbm8gaW5pdGlhbGl6YXRpb24gKi87IGRlbHRhID4gYmFzZU1pbnVzVE1pbiAqIHRNYXggPj4gMTsgayArPSBiYXNlKSB7XG5cdFx0XHRkZWx0YSA9IGZsb29yKGRlbHRhIC8gYmFzZU1pbnVzVE1pbik7XG5cdFx0fVxuXHRcdHJldHVybiBmbG9vcihrICsgKGJhc2VNaW51c1RNaW4gKyAxKSAqIGRlbHRhIC8gKGRlbHRhICsgc2tldykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scyB0byBhIHN0cmluZyBvZiBVbmljb2RlXG5cdCAqIHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGRlY29kZShpbnB1dCkge1xuXHRcdC8vIERvbid0IHVzZSBVQ1MtMlxuXHRcdHZhciBvdXRwdXQgPSBbXSxcblx0XHQgICAgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGgsXG5cdFx0ICAgIG91dCxcblx0XHQgICAgaSA9IDAsXG5cdFx0ICAgIG4gPSBpbml0aWFsTixcblx0XHQgICAgYmlhcyA9IGluaXRpYWxCaWFzLFxuXHRcdCAgICBiYXNpYyxcblx0XHQgICAgaixcblx0XHQgICAgaW5kZXgsXG5cdFx0ICAgIG9sZGksXG5cdFx0ICAgIHcsXG5cdFx0ICAgIGssXG5cdFx0ICAgIGRpZ2l0LFxuXHRcdCAgICB0LFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgYmFzZU1pbnVzVDtcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHM6IGxldCBgYmFzaWNgIGJlIHRoZSBudW1iZXIgb2YgaW5wdXQgY29kZVxuXHRcdC8vIHBvaW50cyBiZWZvcmUgdGhlIGxhc3QgZGVsaW1pdGVyLCBvciBgMGAgaWYgdGhlcmUgaXMgbm9uZSwgdGhlbiBjb3B5XG5cdFx0Ly8gdGhlIGZpcnN0IGJhc2ljIGNvZGUgcG9pbnRzIHRvIHRoZSBvdXRwdXQuXG5cblx0XHRiYXNpYyA9IGlucHV0Lmxhc3RJbmRleE9mKGRlbGltaXRlcik7XG5cdFx0aWYgKGJhc2ljIDwgMCkge1xuXHRcdFx0YmFzaWMgPSAwO1xuXHRcdH1cblxuXHRcdGZvciAoaiA9IDA7IGogPCBiYXNpYzsgKytqKSB7XG5cdFx0XHQvLyBpZiBpdCdzIG5vdCBhIGJhc2ljIGNvZGUgcG9pbnRcblx0XHRcdGlmIChpbnB1dC5jaGFyQ29kZUF0KGopID49IDB4ODApIHtcblx0XHRcdFx0ZXJyb3IoJ25vdC1iYXNpYycpO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0LnB1c2goaW5wdXQuY2hhckNvZGVBdChqKSk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBkZWNvZGluZyBsb29wOiBzdGFydCBqdXN0IGFmdGVyIHRoZSBsYXN0IGRlbGltaXRlciBpZiBhbnkgYmFzaWMgY29kZVxuXHRcdC8vIHBvaW50cyB3ZXJlIGNvcGllZDsgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvdGhlcndpc2UuXG5cblx0XHRmb3IgKGluZGV4ID0gYmFzaWMgPiAwID8gYmFzaWMgKyAxIDogMDsgaW5kZXggPCBpbnB1dExlbmd0aDsgLyogbm8gZmluYWwgZXhwcmVzc2lvbiAqLykge1xuXG5cdFx0XHQvLyBgaW5kZXhgIGlzIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgY29uc3VtZWQuXG5cdFx0XHQvLyBEZWNvZGUgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciBpbnRvIGBkZWx0YWAsXG5cdFx0XHQvLyB3aGljaCBnZXRzIGFkZGVkIHRvIGBpYC4gVGhlIG92ZXJmbG93IGNoZWNraW5nIGlzIGVhc2llclxuXHRcdFx0Ly8gaWYgd2UgaW5jcmVhc2UgYGlgIGFzIHdlIGdvLCB0aGVuIHN1YnRyYWN0IG9mZiBpdHMgc3RhcnRpbmdcblx0XHRcdC8vIHZhbHVlIGF0IHRoZSBlbmQgdG8gb2J0YWluIGBkZWx0YWAuXG5cdFx0XHRmb3IgKG9sZGkgPSBpLCB3ID0gMSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cblx0XHRcdFx0aWYgKGluZGV4ID49IGlucHV0TGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ2ludmFsaWQtaW5wdXQnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRpZ2l0ID0gYmFzaWNUb0RpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXgrKykpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA+PSBiYXNlIHx8IGRpZ2l0ID4gZmxvb3IoKG1heEludCAtIGkpIC8gdykpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGkgKz0gZGlnaXQgKiB3O1xuXHRcdFx0XHR0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPCB0KSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdGlmICh3ID4gZmxvb3IobWF4SW50IC8gYmFzZU1pbnVzVCkpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHcgKj0gYmFzZU1pbnVzVDtcblxuXHRcdFx0fVxuXG5cdFx0XHRvdXQgPSBvdXRwdXQubGVuZ3RoICsgMTtcblx0XHRcdGJpYXMgPSBhZGFwdChpIC0gb2xkaSwgb3V0LCBvbGRpID09IDApO1xuXG5cdFx0XHQvLyBgaWAgd2FzIHN1cHBvc2VkIHRvIHdyYXAgYXJvdW5kIGZyb20gYG91dGAgdG8gYDBgLFxuXHRcdFx0Ly8gaW5jcmVtZW50aW5nIGBuYCBlYWNoIHRpbWUsIHNvIHdlJ2xsIGZpeCB0aGF0IG5vdzpcblx0XHRcdGlmIChmbG9vcihpIC8gb3V0KSA+IG1heEludCAtIG4pIHtcblx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdG4gKz0gZmxvb3IoaSAvIG91dCk7XG5cdFx0XHRpICU9IG91dDtcblxuXHRcdFx0Ly8gSW5zZXJ0IGBuYCBhdCBwb3NpdGlvbiBgaWAgb2YgdGhlIG91dHB1dFxuXHRcdFx0b3V0cHV0LnNwbGljZShpKyssIDAsIG4pO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVjczJlbmNvZGUob3V0cHV0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMgKGUuZy4gYSBkb21haW4gbmFtZSBsYWJlbCkgdG8gYVxuXHQgKiBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBlbmNvZGUoaW5wdXQpIHtcblx0XHR2YXIgbixcblx0XHQgICAgZGVsdGEsXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50LFxuXHRcdCAgICBiYXNpY0xlbmd0aCxcblx0XHQgICAgYmlhcyxcblx0XHQgICAgaixcblx0XHQgICAgbSxcblx0XHQgICAgcSxcblx0XHQgICAgayxcblx0XHQgICAgdCxcblx0XHQgICAgY3VycmVudFZhbHVlLFxuXHRcdCAgICBvdXRwdXQgPSBbXSxcblx0XHQgICAgLyoqIGBpbnB1dExlbmd0aGAgd2lsbCBob2xkIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgaW4gYGlucHV0YC4gKi9cblx0XHQgICAgaW5wdXRMZW5ndGgsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsXG5cdFx0ICAgIGJhc2VNaW51c1QsXG5cdFx0ICAgIHFNaW51c1Q7XG5cblx0XHQvLyBDb252ZXJ0IHRoZSBpbnB1dCBpbiBVQ1MtMiB0byBVbmljb2RlXG5cdFx0aW5wdXQgPSB1Y3MyZGVjb2RlKGlucHV0KTtcblxuXHRcdC8vIENhY2hlIHRoZSBsZW5ndGhcblx0XHRpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblxuXHRcdC8vIEluaXRpYWxpemUgdGhlIHN0YXRlXG5cdFx0biA9IGluaXRpYWxOO1xuXHRcdGRlbHRhID0gMDtcblx0XHRiaWFzID0gaW5pdGlhbEJpYXM7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzXG5cdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IDB4ODApIHtcblx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGN1cnJlbnRWYWx1ZSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGhhbmRsZWRDUENvdW50ID0gYmFzaWNMZW5ndGggPSBvdXRwdXQubGVuZ3RoO1xuXG5cdFx0Ly8gYGhhbmRsZWRDUENvdW50YCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XG5cdFx0Ly8gYGJhc2ljTGVuZ3RoYCBpcyB0aGUgbnVtYmVyIG9mIGJhc2ljIGNvZGUgcG9pbnRzLlxuXG5cdFx0Ly8gRmluaXNoIHRoZSBiYXNpYyBzdHJpbmcgLSBpZiBpdCBpcyBub3QgZW1wdHkgLSB3aXRoIGEgZGVsaW1pdGVyXG5cdFx0aWYgKGJhc2ljTGVuZ3RoKSB7XG5cdFx0XHRvdXRwdXQucHVzaChkZWxpbWl0ZXIpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZW5jb2RpbmcgbG9vcDpcblx0XHR3aGlsZSAoaGFuZGxlZENQQ291bnQgPCBpbnB1dExlbmd0aCkge1xuXG5cdFx0XHQvLyBBbGwgbm9uLWJhc2ljIGNvZGUgcG9pbnRzIDwgbiBoYXZlIGJlZW4gaGFuZGxlZCBhbHJlYWR5LiBGaW5kIHRoZSBuZXh0XG5cdFx0XHQvLyBsYXJnZXIgb25lOlxuXHRcdFx0Zm9yIChtID0gbWF4SW50LCBqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPj0gbiAmJiBjdXJyZW50VmFsdWUgPCBtKSB7XG5cdFx0XHRcdFx0bSA9IGN1cnJlbnRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJbmNyZWFzZSBgZGVsdGFgIGVub3VnaCB0byBhZHZhbmNlIHRoZSBkZWNvZGVyJ3MgPG4saT4gc3RhdGUgdG8gPG0sMD4sXG5cdFx0XHQvLyBidXQgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvd1xuXHRcdFx0aGFuZGxlZENQQ291bnRQbHVzT25lID0gaGFuZGxlZENQQ291bnQgKyAxO1xuXHRcdFx0aWYgKG0gLSBuID4gZmxvb3IoKG1heEludCAtIGRlbHRhKSAvIGhhbmRsZWRDUENvdW50UGx1c09uZSkpIHtcblx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdGRlbHRhICs9IChtIC0gbikgKiBoYW5kbGVkQ1BDb3VudFBsdXNPbmU7XG5cdFx0XHRuID0gbTtcblxuXHRcdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IG4gJiYgKytkZWx0YSA+IG1heEludCkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA9PSBuKSB7XG5cdFx0XHRcdFx0Ly8gUmVwcmVzZW50IGRlbHRhIGFzIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXJcblx0XHRcdFx0XHRmb3IgKHEgPSBkZWx0YSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cdFx0XHRcdFx0XHR0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblx0XHRcdFx0XHRcdGlmIChxIDwgdCkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHFNaW51c1QgPSBxIC0gdDtcblx0XHRcdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0XHRcdG91dHB1dC5wdXNoKFxuXHRcdFx0XHRcdFx0XHRzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHQgKyBxTWludXNUICUgYmFzZU1pbnVzVCwgMCkpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cSA9IGZsb29yKHFNaW51c1QgLyBiYXNlTWludXNUKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHEsIDApKSk7XG5cdFx0XHRcdFx0YmlhcyA9IGFkYXB0KGRlbHRhLCBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsIGhhbmRsZWRDUENvdW50ID09IGJhc2ljTGVuZ3RoKTtcblx0XHRcdFx0XHRkZWx0YSA9IDA7XG5cdFx0XHRcdFx0KytoYW5kbGVkQ1BDb3VudDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQrK2RlbHRhO1xuXHRcdFx0KytuO1xuXG5cdFx0fVxuXHRcdHJldHVybiBvdXRwdXQuam9pbignJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgb3IgYW4gZW1haWwgYWRkcmVzc1xuXHQgKiB0byBVbmljb2RlLiBPbmx5IHRoZSBQdW55Y29kZWQgcGFydHMgb2YgdGhlIGlucHV0IHdpbGwgYmUgY29udmVydGVkLCBpLmUuXG5cdCAqIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IG9uIGEgc3RyaW5nIHRoYXQgaGFzIGFscmVhZHkgYmVlblxuXHQgKiBjb252ZXJ0ZWQgdG8gVW5pY29kZS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGVkIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogY29udmVydCB0byBVbmljb2RlLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgVW5pY29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gUHVueWNvZGVcblx0ICogc3RyaW5nLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9Vbmljb2RlKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhQdW55Y29kZS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyBkZWNvZGUoc3RyaW5nLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpXG5cdFx0XHRcdDogc3RyaW5nO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgVW5pY29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgb3IgYW4gZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBQdW55Y29kZS4gT25seSB0aGUgbm9uLUFTQ0lJIHBhcnRzIG9mIHRoZSBkb21haW4gbmFtZSB3aWxsIGJlIGNvbnZlcnRlZCxcblx0ICogaS5lLiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCB3aXRoIGEgZG9tYWluIHRoYXQncyBhbHJlYWR5IGluXG5cdCAqIEFTQ0lJLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvIGNvbnZlcnQsIGFzIGFcblx0ICogVW5pY29kZSBzdHJpbmcuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBQdW55Y29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gZG9tYWluIG5hbWUgb3Jcblx0ICogZW1haWwgYWRkcmVzcy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvQVNDSUkoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleE5vbkFTQ0lJLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/ICd4bi0tJyArIGVuY29kZShzdHJpbmcpXG5cdFx0XHRcdDogc3RyaW5nO1xuXHRcdH0pO1xuXHR9XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0LyoqIERlZmluZSB0aGUgcHVibGljIEFQSSAqL1xuXHRwdW55Y29kZSA9IHtcblx0XHQvKipcblx0XHQgKiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgUHVueWNvZGUuanMgdmVyc2lvbiBudW1iZXIuXG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgU3RyaW5nXG5cdFx0ICovXG5cdFx0J3ZlcnNpb24nOiAnMS4zLjInLFxuXHRcdC8qKlxuXHRcdCAqIEFuIG9iamVjdCBvZiBtZXRob2RzIHRvIGNvbnZlcnQgZnJvbSBKYXZhU2NyaXB0J3MgaW50ZXJuYWwgY2hhcmFjdGVyXG5cdFx0ICogcmVwcmVzZW50YXRpb24gKFVDUy0yKSB0byBVbmljb2RlIGNvZGUgcG9pbnRzLCBhbmQgYmFjay5cblx0XHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBPYmplY3Rcblx0XHQgKi9cblx0XHQndWNzMic6IHtcblx0XHRcdCdkZWNvZGUnOiB1Y3MyZGVjb2RlLFxuXHRcdFx0J2VuY29kZSc6IHVjczJlbmNvZGVcblx0XHR9LFxuXHRcdCdkZWNvZGUnOiBkZWNvZGUsXG5cdFx0J2VuY29kZSc6IGVuY29kZSxcblx0XHQndG9BU0NJSSc6IHRvQVNDSUksXG5cdFx0J3RvVW5pY29kZSc6IHRvVW5pY29kZVxuXHR9O1xuXG5cdC8qKiBFeHBvc2UgYHB1bnljb2RlYCAqL1xuXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcblx0Ly8gbGlrZSB0aGUgZm9sbG93aW5nOlxuXHRpZiAoXG5cdFx0dHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmXG5cdFx0dHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcgJiZcblx0XHRkZWZpbmUuYW1kXG5cdCkge1xuXHRcdGRlZmluZSgncHVueWNvZGUnLCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBwdW55Y29kZTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChmcmVlRXhwb3J0cyAmJiBmcmVlTW9kdWxlKSB7XG5cdFx0aWYgKG1vZHVsZS5leHBvcnRzID09IGZyZWVFeHBvcnRzKSB7IC8vIGluIE5vZGUuanMgb3IgUmluZ29KUyB2MC44LjArXG5cdFx0XHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBwdW55Y29kZTtcblx0XHR9IGVsc2UgeyAvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHsgLy8gaW4gUmhpbm8gb3IgYSB3ZWIgYnJvd3NlclxuXHRcdHJvb3QucHVueWNvZGUgPSBwdW55Y29kZTtcblx0fVxuXG59KHRoaXMpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8vIElmIG9iai5oYXNPd25Qcm9wZXJ0eSBoYXMgYmVlbiBvdmVycmlkZGVuLCB0aGVuIGNhbGxpbmdcbi8vIG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSB3aWxsIGJyZWFrLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vam95ZW50L25vZGUvaXNzdWVzLzE3MDdcbmZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ocXMsIHNlcCwgZXEsIG9wdGlvbnMpIHtcbiAgc2VwID0gc2VwIHx8ICcmJztcbiAgZXEgPSBlcSB8fCAnPSc7XG4gIHZhciBvYmogPSB7fTtcblxuICBpZiAodHlwZW9mIHFzICE9PSAnc3RyaW5nJyB8fCBxcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgdmFyIHJlZ2V4cCA9IC9cXCsvZztcbiAgcXMgPSBxcy5zcGxpdChzZXApO1xuXG4gIHZhciBtYXhLZXlzID0gMTAwMDtcbiAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMubWF4S2V5cyA9PT0gJ251bWJlcicpIHtcbiAgICBtYXhLZXlzID0gb3B0aW9ucy5tYXhLZXlzO1xuICB9XG5cbiAgdmFyIGxlbiA9IHFzLmxlbmd0aDtcbiAgLy8gbWF4S2V5cyA8PSAwIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIG5vdCBsaW1pdCBrZXlzIGNvdW50XG4gIGlmIChtYXhLZXlzID4gMCAmJiBsZW4gPiBtYXhLZXlzKSB7XG4gICAgbGVuID0gbWF4S2V5cztcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgeCA9IHFzW2ldLnJlcGxhY2UocmVnZXhwLCAnJTIwJyksXG4gICAgICAgIGlkeCA9IHguaW5kZXhPZihlcSksXG4gICAgICAgIGtzdHIsIHZzdHIsIGssIHY7XG5cbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIGtzdHIgPSB4LnN1YnN0cigwLCBpZHgpO1xuICAgICAgdnN0ciA9IHguc3Vic3RyKGlkeCArIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrc3RyID0geDtcbiAgICAgIHZzdHIgPSAnJztcbiAgICB9XG5cbiAgICBrID0gZGVjb2RlVVJJQ29tcG9uZW50KGtzdHIpO1xuICAgIHYgPSBkZWNvZGVVUklDb21wb25lbnQodnN0cik7XG5cbiAgICBpZiAoIWhhc093blByb3BlcnR5KG9iaiwgaykpIHtcbiAgICAgIG9ialtrXSA9IHY7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9ialtrXSkpIHtcbiAgICAgIG9ialtrXS5wdXNoKHYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmpba10gPSBbb2JqW2tdLCB2XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gb2JqW2tdLm1hcChmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsImZ1bmN0aW9uIG5vcm1hbGl6ZSAoc3RyKSB7XG4gIHJldHVybiBzdHJcbiAgICAgICAgICAucmVwbGFjZSgvW1xcL10rL2csICcvJylcbiAgICAgICAgICAucmVwbGFjZSgvXFwvXFw/L2csICc/JylcbiAgICAgICAgICAucmVwbGFjZSgvXFwvXFwjL2csICcjJylcbiAgICAgICAgICAucmVwbGFjZSgvXFw6XFwvL2csICc6Ly8nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBqb2luZWQgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCkuam9pbignLycpO1xuICByZXR1cm4gbm9ybWFsaXplKGpvaW5lZCk7XG59OyIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBwdW55Y29kZSA9IHJlcXVpcmUoJ3B1bnljb2RlJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gU3BlY2lhbCBjYXNlIGZvciBhIHNpbXBsZSBwYXRoIFVSTFxuICAgIHNpbXBsZVBhdGhQYXR0ZXJuID0gL14oXFwvXFwvPyg/IVxcLylbXlxcP1xcc10qKShcXD9bXlxcc10qKT8kLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlsrYS16MC05QS1aXy1dezAsNjN9JC8sXG4gICAgaG9zdG5hbWVQYXJ0U3RhcnQgPSAvXihbK2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgdXRpbC5pc09iamVjdCh1cmwpICYmIHVybCBpbnN0YW5jZW9mIFVybCkgcmV0dXJuIHVybDtcblxuICB2YXIgdSA9IG5ldyBVcmw7XG4gIHUucGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCk7XG4gIHJldHVybiB1O1xufVxuXG5VcmwucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24odXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAoIXV0aWwuaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICAvLyBDb3B5IGNocm9tZSwgSUUsIG9wZXJhIGJhY2tzbGFzaC1oYW5kbGluZyBiZWhhdmlvci5cbiAgLy8gQmFjayBzbGFzaGVzIGJlZm9yZSB0aGUgcXVlcnkgc3RyaW5nIGdldCBjb252ZXJ0ZWQgdG8gZm9yd2FyZCBzbGFzaGVzXG4gIC8vIFNlZTogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTI1OTE2XG4gIHZhciBxdWVyeUluZGV4ID0gdXJsLmluZGV4T2YoJz8nKSxcbiAgICAgIHNwbGl0dGVyID1cbiAgICAgICAgICAocXVlcnlJbmRleCAhPT0gLTEgJiYgcXVlcnlJbmRleCA8IHVybC5pbmRleE9mKCcjJykpID8gJz8nIDogJyMnLFxuICAgICAgdVNwbGl0ID0gdXJsLnNwbGl0KHNwbGl0dGVyKSxcbiAgICAgIHNsYXNoUmVnZXggPSAvXFxcXC9nO1xuICB1U3BsaXRbMF0gPSB1U3BsaXRbMF0ucmVwbGFjZShzbGFzaFJlZ2V4LCAnLycpO1xuICB1cmwgPSB1U3BsaXQuam9pbihzcGxpdHRlcik7XG5cbiAgdmFyIHJlc3QgPSB1cmw7XG5cbiAgLy8gdHJpbSBiZWZvcmUgcHJvY2VlZGluZy5cbiAgLy8gVGhpcyBpcyB0byBzdXBwb3J0IHBhcnNlIHN0dWZmIGxpa2UgXCIgIGh0dHA6Ly9mb28uY29tICBcXG5cIlxuICByZXN0ID0gcmVzdC50cmltKCk7XG5cbiAgaWYgKCFzbGFzaGVzRGVub3RlSG9zdCAmJiB1cmwuc3BsaXQoJyMnKS5sZW5ndGggPT09IDEpIHtcbiAgICAvLyBUcnkgZmFzdCBwYXRoIHJlZ2V4cFxuICAgIHZhciBzaW1wbGVQYXRoID0gc2ltcGxlUGF0aFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgICBpZiAoc2ltcGxlUGF0aCkge1xuICAgICAgdGhpcy5wYXRoID0gcmVzdDtcbiAgICAgIHRoaXMuaHJlZiA9IHJlc3Q7XG4gICAgICB0aGlzLnBhdGhuYW1lID0gc2ltcGxlUGF0aFsxXTtcbiAgICAgIGlmIChzaW1wbGVQYXRoWzJdKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoID0gc2ltcGxlUGF0aFsyXTtcbiAgICAgICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5zZWFyY2guc3Vic3RyKDEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5zZWFyY2guc3Vic3RyKDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZWFyY2ggPSAnJztcbiAgICAgICAgdGhpcy5xdWVyeSA9IHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9XG5cbiAgdmFyIHByb3RvID0gcHJvdG9jb2xQYXR0ZXJuLmV4ZWMocmVzdCk7XG4gIGlmIChwcm90bykge1xuICAgIHByb3RvID0gcHJvdG9bMF07XG4gICAgdmFyIGxvd2VyUHJvdG8gPSBwcm90by50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMucHJvdG9jb2wgPSBsb3dlclByb3RvO1xuICAgIHJlc3QgPSByZXN0LnN1YnN0cihwcm90by5sZW5ndGgpO1xuICB9XG5cbiAgLy8gZmlndXJlIG91dCBpZiBpdCdzIGdvdCBhIGhvc3RcbiAgLy8gdXNlckBzZXJ2ZXIgaXMgKmFsd2F5cyogaW50ZXJwcmV0ZWQgYXMgYSBob3N0bmFtZSwgYW5kIHVybFxuICAvLyByZXNvbHV0aW9uIHdpbGwgdHJlYXQgLy9mb28vYmFyIGFzIGhvc3Q9Zm9vLHBhdGg9YmFyIGJlY2F1c2UgdGhhdCdzXG4gIC8vIGhvdyB0aGUgYnJvd3NlciByZXNvbHZlcyByZWxhdGl2ZSBVUkxzLlxuICBpZiAoc2xhc2hlc0Rlbm90ZUhvc3QgfHwgcHJvdG8gfHwgcmVzdC5tYXRjaCgvXlxcL1xcL1teQFxcL10rQFteQFxcL10rLykpIHtcbiAgICB2YXIgc2xhc2hlcyA9IHJlc3Quc3Vic3RyKDAsIDIpID09PSAnLy8nO1xuICAgIGlmIChzbGFzaGVzICYmICEocHJvdG8gJiYgaG9zdGxlc3NQcm90b2NvbFtwcm90b10pKSB7XG4gICAgICByZXN0ID0gcmVzdC5zdWJzdHIoMik7XG4gICAgICB0aGlzLnNsYXNoZXMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghaG9zdGxlc3NQcm90b2NvbFtwcm90b10gJiZcbiAgICAgIChzbGFzaGVzIHx8IChwcm90byAmJiAhc2xhc2hlZFByb3RvY29sW3Byb3RvXSkpKSB7XG5cbiAgICAvLyB0aGVyZSdzIGEgaG9zdG5hbWUuXG4gICAgLy8gdGhlIGZpcnN0IGluc3RhbmNlIG9mIC8sID8sIDssIG9yICMgZW5kcyB0aGUgaG9zdC5cbiAgICAvL1xuICAgIC8vIElmIHRoZXJlIGlzIGFuIEAgaW4gdGhlIGhvc3RuYW1lLCB0aGVuIG5vbi1ob3N0IGNoYXJzICphcmUqIGFsbG93ZWRcbiAgICAvLyB0byB0aGUgbGVmdCBvZiB0aGUgbGFzdCBAIHNpZ24sIHVubGVzcyBzb21lIGhvc3QtZW5kaW5nIGNoYXJhY3RlclxuICAgIC8vIGNvbWVzICpiZWZvcmUqIHRoZSBALXNpZ24uXG4gICAgLy8gVVJMcyBhcmUgb2Jub3hpb3VzLlxuICAgIC8vXG4gICAgLy8gZXg6XG4gICAgLy8gaHR0cDovL2FAYkBjLyA9PiB1c2VyOmFAYiBob3N0OmNcbiAgICAvLyBodHRwOi8vYUBiP0BjID0+IHVzZXI6YSBob3N0OmMgcGF0aDovP0BjXG5cbiAgICAvLyB2MC4xMiBUT0RPKGlzYWFjcyk6IFRoaXMgaXMgbm90IHF1aXRlIGhvdyBDaHJvbWUgZG9lcyB0aGluZ3MuXG4gICAgLy8gUmV2aWV3IG91ciB0ZXN0IGNhc2UgYWdhaW5zdCBicm93c2VycyBtb3JlIGNvbXByZWhlbnNpdmVseS5cblxuICAgIC8vIGZpbmQgdGhlIGZpcnN0IGluc3RhbmNlIG9mIGFueSBob3N0RW5kaW5nQ2hhcnNcbiAgICB2YXIgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9zdEVuZGluZ0NoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKGhvc3RFbmRpbmdDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuXG4gICAgLy8gYXQgdGhpcyBwb2ludCwgZWl0aGVyIHdlIGhhdmUgYW4gZXhwbGljaXQgcG9pbnQgd2hlcmUgdGhlXG4gICAgLy8gYXV0aCBwb3J0aW9uIGNhbm5vdCBnbyBwYXN0LCBvciB0aGUgbGFzdCBAIGNoYXIgaXMgdGhlIGRlY2lkZXIuXG4gICAgdmFyIGF1dGgsIGF0U2lnbjtcbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpIHtcbiAgICAgIC8vIGF0U2lnbiBjYW4gYmUgYW55d2hlcmUuXG4gICAgICBhdFNpZ24gPSByZXN0Lmxhc3RJbmRleE9mKCdAJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGF0U2lnbiBtdXN0IGJlIGluIGF1dGggcG9ydGlvbi5cbiAgICAgIC8vIGh0dHA6Ly9hQGIvY0BkID0+IGhvc3Q6YiBhdXRoOmEgcGF0aDovY0BkXG4gICAgICBhdFNpZ24gPSByZXN0Lmxhc3RJbmRleE9mKCdAJywgaG9zdEVuZCk7XG4gICAgfVxuXG4gICAgLy8gTm93IHdlIGhhdmUgYSBwb3J0aW9uIHdoaWNoIGlzIGRlZmluaXRlbHkgdGhlIGF1dGguXG4gICAgLy8gUHVsbCB0aGF0IG9mZi5cbiAgICBpZiAoYXRTaWduICE9PSAtMSkge1xuICAgICAgYXV0aCA9IHJlc3Quc2xpY2UoMCwgYXRTaWduKTtcbiAgICAgIHJlc3QgPSByZXN0LnNsaWNlKGF0U2lnbiArIDEpO1xuICAgICAgdGhpcy5hdXRoID0gZGVjb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIH1cblxuICAgIC8vIHRoZSBob3N0IGlzIHRoZSByZW1haW5pbmcgdG8gdGhlIGxlZnQgb2YgdGhlIGZpcnN0IG5vbi1ob3N0IGNoYXJcbiAgICBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub25Ib3N0Q2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2Yobm9uSG9zdENoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG4gICAgLy8gaWYgd2Ugc3RpbGwgaGF2ZSBub3QgaGl0IGl0LCB0aGVuIHRoZSBlbnRpcmUgdGhpbmcgaXMgYSBob3N0LlxuICAgIGlmIChob3N0RW5kID09PSAtMSlcbiAgICAgIGhvc3RFbmQgPSByZXN0Lmxlbmd0aDtcblxuICAgIHRoaXMuaG9zdCA9IHJlc3Quc2xpY2UoMCwgaG9zdEVuZCk7XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoaG9zdEVuZCk7XG5cbiAgICAvLyBwdWxsIG91dCBwb3J0LlxuICAgIHRoaXMucGFyc2VIb3N0KCk7XG5cbiAgICAvLyB3ZSd2ZSBpbmRpY2F0ZWQgdGhhdCB0aGVyZSBpcyBhIGhvc3RuYW1lLFxuICAgIC8vIHNvIGV2ZW4gaWYgaXQncyBlbXB0eSwgaXQgaGFzIHRvIGJlIHByZXNlbnQuXG4gICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG5cbiAgICAvLyBpZiBob3N0bmFtZSBiZWdpbnMgd2l0aCBbIGFuZCBlbmRzIHdpdGggXVxuICAgIC8vIGFzc3VtZSB0aGF0IGl0J3MgYW4gSVB2NiBhZGRyZXNzLlxuICAgIHZhciBpcHY2SG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lWzBdID09PSAnWycgJiZcbiAgICAgICAgdGhpcy5ob3N0bmFtZVt0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDFdID09PSAnXSc7XG5cbiAgICAvLyB2YWxpZGF0ZSBhIGxpdHRsZS5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgdmFyIGhvc3RwYXJ0cyA9IHRoaXMuaG9zdG5hbWUuc3BsaXQoL1xcLi8pO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBob3N0cGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZhciBwYXJ0ID0gaG9zdHBhcnRzW2ldO1xuICAgICAgICBpZiAoIXBhcnQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIXBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICB2YXIgbmV3cGFydCA9ICcnO1xuICAgICAgICAgIGZvciAodmFyIGogPSAwLCBrID0gcGFydC5sZW5ndGg7IGogPCBrOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChwYXJ0LmNoYXJDb2RlQXQoaikgPiAxMjcpIHtcbiAgICAgICAgICAgICAgLy8gd2UgcmVwbGFjZSBub24tQVNDSUkgY2hhciB3aXRoIGEgdGVtcG9yYXJ5IHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgIC8vIHdlIG5lZWQgdGhpcyB0byBtYWtlIHN1cmUgc2l6ZSBvZiBob3N0bmFtZSBpcyBub3RcbiAgICAgICAgICAgICAgLy8gYnJva2VuIGJ5IHJlcGxhY2luZyBub24tQVNDSUkgYnkgbm90aGluZ1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9ICd4JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gcGFydFtqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gd2UgdGVzdCBhZ2FpbiB3aXRoIEFTQ0lJIGNoYXIgb25seVxuICAgICAgICAgIGlmICghbmV3cGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgICAgdmFyIHZhbGlkUGFydHMgPSBob3N0cGFydHMuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICB2YXIgbm90SG9zdCA9IGhvc3RwYXJ0cy5zbGljZShpICsgMSk7XG4gICAgICAgICAgICB2YXIgYml0ID0gcGFydC5tYXRjaChob3N0bmFtZVBhcnRTdGFydCk7XG4gICAgICAgICAgICBpZiAoYml0KSB7XG4gICAgICAgICAgICAgIHZhbGlkUGFydHMucHVzaChiaXRbMV0pO1xuICAgICAgICAgICAgICBub3RIb3N0LnVuc2hpZnQoYml0WzJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub3RIb3N0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXN0ID0gJy8nICsgbm90SG9zdC5qb2luKCcuJykgKyByZXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ob3N0bmFtZSA9IHZhbGlkUGFydHMuam9pbignLicpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaG9zdG5hbWUubGVuZ3RoID4gaG9zdG5hbWVNYXhMZW4pIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaG9zdG5hbWVzIGFyZSBhbHdheXMgbG93ZXIgY2FzZS5cbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIC8vIElETkEgU3VwcG9ydDogUmV0dXJucyBhIHB1bnljb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGF2ZSBub24tQVNDSUkgY2hhcmFjdGVycywgaS5lLiBpdCBkb2Vzbid0IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgQVNDSUktb25seS5cbiAgICAgIHRoaXMuaG9zdG5hbWUgPSBwdW55Y29kZS50b0FTQ0lJKHRoaXMuaG9zdG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBwID0gdGhpcy5wb3J0ID8gJzonICsgdGhpcy5wb3J0IDogJyc7XG4gICAgdmFyIGggPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuICAgIHRoaXMuaG9zdCA9IGggKyBwO1xuICAgIHRoaXMuaHJlZiArPSB0aGlzLmhvc3Q7XG5cbiAgICAvLyBzdHJpcCBbIGFuZCBdIGZyb20gdGhlIGhvc3RuYW1lXG4gICAgLy8gdGhlIGhvc3QgZmllbGQgc3RpbGwgcmV0YWlucyB0aGVtLCB0aG91Z2hcbiAgICBpZiAoaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS5zdWJzdHIoMSwgdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIGlmIChyZXN0WzBdICE9PSAnLycpIHtcbiAgICAgICAgcmVzdCA9ICcvJyArIHJlc3Q7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gbm93IHJlc3QgaXMgc2V0IHRvIHRoZSBwb3N0LWhvc3Qgc3R1ZmYuXG4gIC8vIGNob3Agb2ZmIGFueSBkZWxpbSBjaGFycy5cbiAgaWYgKCF1bnNhZmVQcm90b2NvbFtsb3dlclByb3RvXSkge1xuXG4gICAgLy8gRmlyc3QsIG1ha2UgMTAwJSBzdXJlIHRoYXQgYW55IFwiYXV0b0VzY2FwZVwiIGNoYXJzIGdldFxuICAgIC8vIGVzY2FwZWQsIGV2ZW4gaWYgZW5jb2RlVVJJQ29tcG9uZW50IGRvZXNuJ3QgdGhpbmsgdGhleVxuICAgIC8vIG5lZWQgdG8gYmUuXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhdXRvRXNjYXBlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIGFlID0gYXV0b0VzY2FwZVtpXTtcbiAgICAgIGlmIChyZXN0LmluZGV4T2YoYWUpID09PSAtMSlcbiAgICAgICAgY29udGludWU7XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKHV0aWwuaXNTdHJpbmcob2JqKSkgb2JqID0gdXJsUGFyc2Uob2JqKTtcbiAgaWYgKCEob2JqIGluc3RhbmNlb2YgVXJsKSkgcmV0dXJuIFVybC5wcm90b3R5cGUuZm9ybWF0LmNhbGwob2JqKTtcbiAgcmV0dXJuIG9iai5mb3JtYXQoKTtcbn1cblxuVXJsLnByb3RvdHlwZS5mb3JtYXQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGF1dGggPSB0aGlzLmF1dGggfHwgJyc7XG4gIGlmIChhdXRoKSB7XG4gICAgYXV0aCA9IGVuY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICBhdXRoID0gYXV0aC5yZXBsYWNlKC8lM0EvaSwgJzonKTtcbiAgICBhdXRoICs9ICdAJztcbiAgfVxuXG4gIHZhciBwcm90b2NvbCA9IHRoaXMucHJvdG9jb2wgfHwgJycsXG4gICAgICBwYXRobmFtZSA9IHRoaXMucGF0aG5hbWUgfHwgJycsXG4gICAgICBoYXNoID0gdGhpcy5oYXNoIHx8ICcnLFxuICAgICAgaG9zdCA9IGZhbHNlLFxuICAgICAgcXVlcnkgPSAnJztcblxuICBpZiAodGhpcy5ob3N0KSB7XG4gICAgaG9zdCA9IGF1dGggKyB0aGlzLmhvc3Q7XG4gIH0gZWxzZSBpZiAodGhpcy5ob3N0bmFtZSkge1xuICAgIGhvc3QgPSBhdXRoICsgKHRoaXMuaG9zdG5hbWUuaW5kZXhPZignOicpID09PSAtMSA/XG4gICAgICAgIHRoaXMuaG9zdG5hbWUgOlxuICAgICAgICAnWycgKyB0aGlzLmhvc3RuYW1lICsgJ10nKTtcbiAgICBpZiAodGhpcy5wb3J0KSB7XG4gICAgICBob3N0ICs9ICc6JyArIHRoaXMucG9ydDtcbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy5xdWVyeSAmJlxuICAgICAgdXRpbC5pc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAodXRpbC5pc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgdmFyIHRrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gIGZvciAodmFyIHRrID0gMDsgdGsgPCB0a2V5cy5sZW5ndGg7IHRrKyspIHtcbiAgICB2YXIgdGtleSA9IHRrZXlzW3RrXTtcbiAgICByZXN1bHRbdGtleV0gPSB0aGlzW3RrZXldO1xuICB9XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICB2YXIgcmtleXMgPSBPYmplY3Qua2V5cyhyZWxhdGl2ZSk7XG4gICAgZm9yICh2YXIgcmsgPSAwOyByayA8IHJrZXlzLmxlbmd0aDsgcmsrKykge1xuICAgICAgdmFyIHJrZXkgPSBya2V5c1tya107XG4gICAgICBpZiAocmtleSAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W3JrZXldID0gcmVsYXRpdmVbcmtleV07XG4gICAgfVxuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMocmVsYXRpdmUpO1xuICAgICAgZm9yICh2YXIgdiA9IDA7IHYgPCBrZXlzLmxlbmd0aDsgdisrKSB7XG4gICAgICAgIHZhciBrID0ga2V5c1t2XTtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9XG4gICAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmVzdWx0LnByb3RvY29sID0gcmVsYXRpdmUucHJvdG9jb2w7XG4gICAgaWYgKCFyZWxhdGl2ZS5ob3N0ICYmICFob3N0bGVzc1Byb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgdmFyIHJlbFBhdGggPSAocmVsYXRpdmUucGF0aG5hbWUgfHwgJycpLnNwbGl0KCcvJyk7XG4gICAgICB3aGlsZSAocmVsUGF0aC5sZW5ndGggJiYgIShyZWxhdGl2ZS5ob3N0ID0gcmVsUGF0aC5zaGlmdCgpKSk7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3QpIHJlbGF0aXZlLmhvc3QgPSAnJztcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdG5hbWUpIHJlbGF0aXZlLmhvc3RuYW1lID0gJyc7XG4gICAgICBpZiAocmVsUGF0aFswXSAhPT0gJycpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICBpZiAocmVsUGF0aC5sZW5ndGggPCAyKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsUGF0aC5qb2luKCcvJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbGF0aXZlLnBhdGhuYW1lO1xuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHJlc3VsdC5ob3N0ID0gcmVsYXRpdmUuaG9zdCB8fCAnJztcbiAgICByZXN1bHQuYXV0aCA9IHJlbGF0aXZlLmF1dGg7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVsYXRpdmUuaG9zdG5hbWUgfHwgcmVsYXRpdmUuaG9zdDtcbiAgICByZXN1bHQucG9ydCA9IHJlbGF0aXZlLnBvcnQ7XG4gICAgLy8gdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnBhdGhuYW1lIHx8IHJlc3VsdC5zZWFyY2gpIHtcbiAgICAgIHZhciBwID0gcmVzdWx0LnBhdGhuYW1lIHx8ICcnO1xuICAgICAgdmFyIHMgPSByZXN1bHQuc2VhcmNoIHx8ICcnO1xuICAgICAgcmVzdWx0LnBhdGggPSBwICsgcztcbiAgICB9XG4gICAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB2YXIgaXNTb3VyY2VBYnMgPSAocmVzdWx0LnBhdGhuYW1lICYmIHJlc3VsdC5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJyksXG4gICAgICBpc1JlbEFicyA9IChcbiAgICAgICAgICByZWxhdGl2ZS5ob3N0IHx8XG4gICAgICAgICAgcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLydcbiAgICAgICksXG4gICAgICBtdXN0RW5kQWJzID0gKGlzUmVsQWJzIHx8IGlzU291cmNlQWJzIHx8XG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuaG9zdCAmJiByZWxhdGl2ZS5wYXRobmFtZSkpLFxuICAgICAgcmVtb3ZlQWxsRG90cyA9IG11c3RFbmRBYnMsXG4gICAgICBzcmNQYXRoID0gcmVzdWx0LnBhdGhuYW1lICYmIHJlc3VsdC5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcmVsUGF0aCA9IHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICBwc3ljaG90aWMgPSByZXN1bHQucHJvdG9jb2wgJiYgIXNsYXNoZWRQcm90b2NvbFtyZXN1bHQucHJvdG9jb2xdO1xuXG4gIC8vIGlmIHRoZSB1cmwgaXMgYSBub24tc2xhc2hlZCB1cmwsIHRoZW4gcmVsYXRpdmVcbiAgLy8gbGlua3MgbGlrZSAuLi8uLiBzaG91bGQgYmUgYWJsZVxuICAvLyB0byBjcmF3bCB1cCB0byB0aGUgaG9zdG5hbWUsIGFzIHdlbGwuICBUaGlzIGlzIHN0cmFuZ2UuXG4gIC8vIHJlc3VsdC5wcm90b2NvbCBoYXMgYWxyZWFkeSBiZWVuIHNldCBieSBub3cuXG4gIC8vIExhdGVyIG9uLCBwdXQgdGhlIGZpcnN0IHBhdGggcGFydCBpbnRvIHRoZSBob3N0IGZpZWxkLlxuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gJyc7XG4gICAgcmVzdWx0LnBvcnQgPSBudWxsO1xuICAgIGlmIChyZXN1bHQuaG9zdCkge1xuICAgICAgaWYgKHNyY1BhdGhbMF0gPT09ICcnKSBzcmNQYXRoWzBdID0gcmVzdWx0Lmhvc3Q7XG4gICAgICBlbHNlIHNyY1BhdGgudW5zaGlmdChyZXN1bHQuaG9zdCk7XG4gICAgfVxuICAgIHJlc3VsdC5ob3N0ID0gJyc7XG4gICAgaWYgKHJlbGF0aXZlLnByb3RvY29sKSB7XG4gICAgICByZWxhdGl2ZS5ob3N0bmFtZSA9IG51bGw7XG4gICAgICByZWxhdGl2ZS5wb3J0ID0gbnVsbDtcbiAgICAgIGlmIChyZWxhdGl2ZS5ob3N0KSB7XG4gICAgICAgIGlmIChyZWxQYXRoWzBdID09PSAnJykgcmVsUGF0aFswXSA9IHJlbGF0aXZlLmhvc3Q7XG4gICAgICAgIGVsc2UgcmVsUGF0aC51bnNoaWZ0KHJlbGF0aXZlLmhvc3QpO1xuICAgICAgfVxuICAgICAgcmVsYXRpdmUuaG9zdCA9IG51bGw7XG4gICAgfVxuICAgIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzICYmIChyZWxQYXRoWzBdID09PSAnJyB8fCBzcmNQYXRoWzBdID09PSAnJyk7XG4gIH1cblxuICBpZiAoaXNSZWxBYnMpIHtcbiAgICAvLyBpdCdzIGFic29sdXRlLlxuICAgIHJlc3VsdC5ob3N0ID0gKHJlbGF0aXZlLmhvc3QgfHwgcmVsYXRpdmUuaG9zdCA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3QgOiByZXN1bHQuaG9zdDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAocmVsYXRpdmUuaG9zdG5hbWUgfHwgcmVsYXRpdmUuaG9zdG5hbWUgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgOiByZXN1bHQuaG9zdG5hbWU7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICBzcmNQYXRoID0gcmVsUGF0aDtcbiAgICAvLyBmYWxsIHRocm91Z2ggdG8gdGhlIGRvdC1oYW5kbGluZyBiZWxvdy5cbiAgfSBlbHNlIGlmIChyZWxQYXRoLmxlbmd0aCkge1xuICAgIC8vIGl0J3MgcmVsYXRpdmVcbiAgICAvLyB0aHJvdyBhd2F5IHRoZSBleGlzdGluZyBmaWxlLCBhbmQgdGFrZSB0aGUgbmV3IHBhdGggaW5zdGVhZC5cbiAgICBpZiAoIXNyY1BhdGgpIHNyY1BhdGggPSBbXTtcbiAgICBzcmNQYXRoLnBvcCgpO1xuICAgIHNyY1BhdGggPSBzcmNQYXRoLmNvbmNhdChyZWxQYXRoKTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICB9IGVsc2UgaWYgKCF1dGlsLmlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbGx5IGhhcHBlbnMgaW4gY2FzZXMgbGlrZVxuICAgICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ob3N0LnNwbGl0KCdAJykgOiBmYWxzZTtcbiAgICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgICByZXN1bHQuaG9zdCA9IHJlc3VsdC5ob3N0bmFtZSA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKCF1dGlsLmlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICF1dGlsLmlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCB8fCBzcmNQYXRoLmxlbmd0aCA+IDEpICYmXG4gICAgICAobGFzdCA9PT0gJy4nIHx8IGxhc3QgPT09ICcuLicpIHx8IGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PT0gJy4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwLS07XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIHBhdGggaXMgYWxsb3dlZCB0byBnbyBhYm92ZSB0aGUgcm9vdCwgcmVzdG9yZSBsZWFkaW5nIC4uc1xuICBpZiAoIW11c3RFbmRBYnMgJiYgIXJlbW92ZUFsbERvdHMpIHtcbiAgICBmb3IgKDsgdXAtLTsgdXApIHtcbiAgICAgIHNyY1BhdGgudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAobXVzdEVuZEFicyAmJiBzcmNQYXRoWzBdICE9PSAnJyAmJlxuICAgICAgKCFzcmNQYXRoWzBdIHx8IHNyY1BhdGhbMF0uY2hhckF0KDApICE9PSAnLycpKSB7XG4gICAgc3JjUGF0aC51bnNoaWZ0KCcnKTtcbiAgfVxuXG4gIGlmIChoYXNUcmFpbGluZ1NsYXNoICYmIChzcmNQYXRoLmpvaW4oJy8nKS5zdWJzdHIoLTEpICE9PSAnLycpKSB7XG4gICAgc3JjUGF0aC5wdXNoKCcnKTtcbiAgfVxuXG4gIHZhciBpc0Fic29sdXRlID0gc3JjUGF0aFswXSA9PT0gJycgfHxcbiAgICAgIChzcmNQYXRoWzBdICYmIHNyY1BhdGhbMF0uY2hhckF0KDApID09PSAnLycpO1xuXG4gIC8vIHB1dCB0aGUgaG9zdCBiYWNrXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IGlzQWJzb2x1dGUgPyAnJyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNQYXRoLmxlbmd0aCA/IHNyY1BhdGguc2hpZnQoKSA6ICcnO1xuICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAvL3RoaXMgZXNwZWNpYWxseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghdXRpbC5pc051bGwocmVzdWx0LnBhdGhuYW1lKSB8fCAhdXRpbC5pc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNTdHJpbmc6IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB0eXBlb2YoYXJnKSA9PT0gJ3N0cmluZyc7XG4gIH0sXG4gIGlzT2JqZWN0OiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gdHlwZW9mKGFyZykgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbiAgfSxcbiAgaXNOdWxsOiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gYXJnID09PSBudWxsO1xuICB9LFxuICBpc051bGxPclVuZGVmaW5lZDogZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGFyZyA9PSBudWxsO1xuICB9XG59O1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0bG9hZGVkOiBmYWxzZSxcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG5cdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5ubWQgPSAobW9kdWxlKSA9PiB7XG5cdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdHJldHVybiBtb2R1bGU7XG59OyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XG4iXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwidGhpcyIsIkZvcm1EYXRhIiwiZm9ybURhdGEiLCJjbGllbnQiLCJvcHRpb25zIiwiTWFpbGd1biIsImNvbmZpZyIsInVybCIsInVzZXJuYW1lIiwiRXJyb3IiLCJrZXkiLCJyZXF1ZXN0IiwibWFpbExpc3RzTWVtYmVycyIsImRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IiwibXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IiwiZG9tYWlucyIsIndlYmhvb2tzIiwiZXZlbnRzIiwic3RhdHMiLCJzdXBwcmVzc2lvbnMiLCJtZXNzYWdlcyIsInJvdXRlcyIsImlwcyIsImlwX3Bvb2xzIiwibGlzdHMiLCJ2YWxpZGF0ZSIsImRhdGEiLCJyZWNlaXZpbmciLCJzZW5kaW5nIiwibmFtZSIsInJlcXVpcmVfdGxzIiwic2tpcF92ZXJpZmljYXRpb24iLCJzdGF0ZSIsIndpbGRjYXJkIiwic3BhbV9hY3Rpb24iLCJjcmVhdGVkX2F0Iiwic210cF9wYXNzd29yZCIsInNtdHBfbG9naW4iLCJ0eXBlIiwicmVjZWl2aW5nX2Ruc19yZWNvcmRzIiwic2VuZGluZ19kbnNfcmVjb3JkcyIsIkRvbWFpbiIsImRvbWFpbkNyZWRlbnRpYWxzIiwiX3BhcnNlTWVzc2FnZSIsInJlc3BvbnNlIiwiYm9keSIsIl9wYXJzZURvbWFpbkxpc3QiLCJpdGVtcyIsIm1hcCIsIml0ZW0iLCJfcGFyc2VEb21haW4iLCJkb21haW4iLCJfcGFyc2VUcmFja2luZ1NldHRpbmdzIiwidHJhY2tpbmciLCJfcGFyc2VUcmFja2luZ1VwZGF0ZSIsImxpc3QiLCJxdWVyeSIsImdldCIsInRoZW4iLCJyZXMiLCJjcmVhdGUiLCJwb3N0T2JqIiwiZm9yY2VfZGtpbV9hdXRob3JpdHkiLCJ0b1N0cmluZyIsInBvc3RXaXRoRkQiLCJkZXN0cm95IiwiZGVsZXRlIiwiZ2V0Q29ubmVjdGlvbiIsInVwZGF0ZUNvbm5lY3Rpb24iLCJwdXQiLCJnZXRUcmFja2luZyIsInVwZGF0ZVRyYWNraW5nIiwiYWN0aXZlIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsIm1lc3NhZ2UiLCJwdXRXaXRoRkQiLCJnZXRJcHMiLCJhc3NpZ25JcCIsImlwIiwiZGVsZXRlSXAiLCJsaW5rSXBQb29sIiwicG9vbF9pZCIsInVubGlua0lwUG9sbCIsInJlcGxhY2VtZW50Iiwic2VhcmNoUGFyYW1zIiwidXBkYXRlREtJTUF1dGhvcml0eSIsInNlbGYiLCJ1cGRhdGVES0lNU2VsZWN0b3IiLCJka2ltU2VsZWN0b3IiLCJ1cGRhdGVXZWJQcmVmaXgiLCJ3ZWJQcmVmaXgiLCJiYXNlUm91dGUiLCJfcGFyc2VEb21haW5DcmVkZW50aWFsc0xpc3QiLCJ0b3RhbENvdW50IiwidG90YWxfY291bnQiLCJfcGFyc2VNZXNzYWdlUmVzcG9uc2UiLCJfcGFyc2VEZWxldGVkUmVzcG9uc2UiLCJzcGVjIiwidXBkYXRlIiwiY3JlZGVudGlhbHNMb2dpbiIsImJvZHlNZXNzYWdlIiwiZXJyb3IiLCJzdGFjayIsImRldGFpbHMiLCJfcGFyc2VQYWdlTnVtYmVyIiwic3BsaXQiLCJwb3AiLCJfcGFyc2VQYWdlIiwiaWQiLCJudW1iZXIiLCJfcGFyc2VQYWdlTGlua3MiLCJPYmplY3QiLCJlbnRyaWVzIiwicGFnaW5nIiwicmVkdWNlIiwiYWNjIiwiZW50cmllIiwiX3BhcnNlRXZlbnRMaXN0IiwicGFnZXMiLCJxdWVyeUNvcHkiLCJwYWdlIiwicGFyc2VJcFBvb2xzUmVzcG9uc2UiLCJwb29sSWQiLCJwYXRjaFdpdGhGRCIsInBhcnNlSXBzUmVzcG9uc2UiLCJtZW1iZXJzIiwibWFpbExpc3RBZGRyZXNzIiwiY2hlY2tBbmRVcGRhdGVEYXRhIiwibmV3RGF0YSIsInZhcnMiLCJKU09OIiwic3RyaW5naWZ5Iiwic3Vic2NyaWJlZCIsImxpc3RNZW1iZXJzIiwiZ2V0TWVtYmVyIiwibWFpbExpc3RNZW1iZXJBZGRyZXNzIiwiY3JlYXRlTWVtYmVyIiwicmVxRGF0YSIsImNyZWF0ZU1lbWJlcnMiLCJBcnJheSIsImlzQXJyYXkiLCJ1cHNlcnQiLCJ1cGRhdGVNZW1iZXIiLCJkZXN0cm95TWVtYmVyIiwiX3BhcnNlUmVzcG9uc2UiLCJsaXN0SWQiLCJmaWxlIiwiaXNTdHJlYW0iLCJhdHRhY2htZW50IiwicGlwZSIsImlzTm9kZUZvcm1EYXRhIiwiZm9ybURhdGFJbnN0YW5jZSIsInVuZGVmaW5lZCIsImdldEhlYWRlcnMiLCJ0aW1lb3V0IiwiaGVhZGVycyIsIkZvcm1EYXRhQ29uc3RydWN0b3IiLCJtZXRob2QiLCJpbnB1dE9wdGlvbnMiLCJiYXNpYyIsImVuY29kZSIsIkF1dGhvcml6YXRpb24iLCJwYXJhbXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwibGVuZ3RoIiwidG9Mb2NhbGVVcHBlckNhc2UiLCJ0aHJvd0h0dHBFcnJvcnMiLCJvayIsInN0cmVhbSIsImNodW5rcyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwib24iLCJjaHVuayIsInB1c2giLCJCdWZmZXIiLCJjb25jYXQiLCJqc29uIiwiY29tbWFuZCIsImhlYWQiLCJwb3N0IiwiY3JlYXRlRm9ybURhdGEiLCJrZXlzIiwiZmlsdGVyIiwiZm9ybURhdGFBY2MiLCJpbmNsdWRlcyIsImFkZEZpbGVzVG9GRCIsImFkZE1pbWVEYXRhVG9GRCIsImFkZENvbW1vblByb3BlcnR5VG9GRCIsImlzQnVmZmVyIiwiYXBwZW5kIiwiZmlsZW5hbWUiLCJwcm9wZXJ0eU5hbWUiLCJ2YWx1ZSIsImFwcGVuZEZpbGVUb0ZEIiwib2JqIiwib2JqRGF0YSIsImNvbnRlbnRUeXBlIiwia25vd25MZW5ndGgiLCJnZXRBdHRhY2htZW50T3B0aW9ucyIsImZvckVhY2giLCJwYXRjaCIsIlJlcXVlc3QiLCJzdGFydCIsIkRhdGUiLCJlbmQiLCJyZXNvbHV0aW9uIiwic3RhdCIsInRpbWUiLCJfcGFyc2VTdGF0cyIsIlN0YXRzIiwiZ2V0RG9tYWluIiwiZ2V0QWNjb3VudCIsImNyZWF0ZU9wdGlvbnMiLCJhZGRyZXNzIiwiY29kZSIsInRhZ3MiLCJyZWFzb24iLCJjcmVhdGVkQXQiLCJtb2RlbHMiLCJib3VuY2VzIiwiQm91bmNlIiwiY29tcGxhaW50cyIsIkNvbXBsYWludCIsInVuc3Vic2NyaWJlcyIsIlVuc3Vic2NyaWJlIiwid2hpdGVsaXN0cyIsIldoaXRlTGlzdCIsInBhZ2VVcmwiLCJwYXJzZSIsIl9wYXJzZUxpc3QiLCJNb2RlbCIsImQiLCJfcGFyc2VJdGVtIiwiY3JlYXRlV2hpdGVMaXN0IiwibW9kZWwiLCJlbmNvZGVVUklDb21wb25lbnQiLCJwb3N0RGF0YSIsIlN1cHByZXNzaW9uQ2xpZW50IiwibXVsdGlwbGVWYWxpZGF0aW9uIiwiX3BhcnNlV2ViaG9va0xpc3QiLCJfcGFyc2VXZWJob29rV2l0aElEIiwid2ViaG9va1Jlc3BvbnNlIiwid2ViaG9vayIsInVybHMiLCJXZWJob29rIiwiX3BhcnNlV2ViaG9va1Rlc3QiLCJ0ZXN0IiwiZnJlZUV4cG9ydHMiLCJmcmVlR2xvYmFsIiwiZyIsImdsb2JhbCIsIndpbmRvdyIsIkludmFsaWRDaGFyYWN0ZXJFcnJvciIsInByb3RvdHlwZSIsIlRBQkxFIiwiUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUyIsImJhc2U2NCIsImlucHV0IiwiU3RyaW5nIiwiYSIsImIiLCJjIiwiYnVmZmVyIiwicGFkZGluZyIsIm91dHB1dCIsInBvc2l0aW9uIiwiY2hhckNvZGVBdCIsImNoYXJBdCIsInJlcGxhY2UiLCJiaXRTdG9yYWdlIiwiYml0Q291bnRlciIsImluZGV4T2YiLCJmcm9tQ2hhckNvZGUiLCJnbG9iYWxzIiwiZ2V0R2xvYmFsIiwicHJvcGVydHkiLCJnbG9iYWxUaGlzIiwiZ2xvYmFsUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiZ2xvYmFsT2JqZWN0IiwiYmluZCIsImlzT2JqZWN0Iiwic3VwcG9ydHNBYm9ydENvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJzdXBwb3J0c1N0cmVhbXMiLCJSZWFkYWJsZVN0cmVhbSIsInN1cHBvcnRzRm9ybURhdGEiLCJtZXJnZUhlYWRlcnMiLCJzb3VyY2UxIiwic291cmNlMiIsInJlc3VsdCIsIkhlYWRlcnMiLCJpc0hlYWRlcnNJbnN0YW5jZSIsInNvdXJjZSIsInNldCIsImRlZXBNZXJnZSIsInNvdXJjZXMiLCJyZXR1cm5WYWx1ZSIsInJlcXVlc3RNZXRob2RzIiwicmVzcG9uc2VUeXBlcyIsInRleHQiLCJhcnJheUJ1ZmZlciIsImJsb2IiLCJyZXRyeUFmdGVyU3RhdHVzQ29kZXMiLCJzdG9wIiwiU3ltYm9sIiwiSFRUUEVycm9yIiwiY29uc3RydWN0b3IiLCJzdXBlciIsIlRpbWVvdXRFcnJvciIsImRlbGF5IiwibXMiLCJzZXRUaW1lb3V0Iiwibm9ybWFsaXplUmVxdWVzdE1ldGhvZCIsInRvVXBwZXJDYXNlIiwiZGVmYXVsdFJldHJ5T3B0aW9ucyIsImxpbWl0IiwibWV0aG9kcyIsInN0YXR1c0NvZGVzIiwiYWZ0ZXJTdGF0dXNDb2RlcyIsIm5vcm1hbGl6ZVJldHJ5T3B0aW9ucyIsInJldHJ5IiwibWF4U2FmZVRpbWVvdXQiLCJLeSIsIl9yZXRyeUNvdW50IiwiX2lucHV0IiwiX29wdGlvbnMiLCJjcmVkZW50aWFscyIsImhvb2tzIiwiYmVmb3JlUmVxdWVzdCIsImJlZm9yZVJldHJ5IiwiYWZ0ZXJSZXNwb25zZSIsInByZWZpeFVybCIsImZldGNoIiwiVVJMIiwiVHlwZUVycm9yIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwiYWJvcnRDb250cm9sbGVyIiwic2lnbmFsIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFib3J0IiwiVVJMU2VhcmNoUGFyYW1zIiwiY29uc29sZSIsImxvZyIsImZuIiwiYXN5bmMiLCJSYW5nZUVycm9yIiwiX2ZldGNoIiwiaG9vayIsIm1vZGlmaWVkUmVzcG9uc2UiLCJfZGVjb3JhdGVSZXNwb25zZSIsImNsb25lIiwiUmVzcG9uc2UiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJfc3RyZWFtIiwidG9Mb3dlckNhc2UiLCJfcmV0cnkiLCJtaW1lVHlwZSIsInBhcnNlSnNvbiIsIl9jYWxjdWxhdGVSZXRyeURlbGF5IiwicmV0cnlBZnRlciIsImFmdGVyIiwiTnVtYmVyIiwiaXNOYU4iLCJub3ciLCJtYXhSZXRyeUFmdGVyIiwiTWF0aCIsIm1pbiIsInJldHJ5Q291bnQiLCJ0aW1lb3V0SUQiLCJjYXRjaCIsImNsZWFyVGltZW91dCIsInRvdGFsQnl0ZXMiLCJ0cmFuc2ZlcnJlZEJ5dGVzIiwiY29udHJvbGxlciIsInJlYWRlciIsImdldFJlYWRlciIsInBlcmNlbnQiLCJVaW50OEFycmF5IiwicmVhZCIsImRvbmUiLCJjbG9zZSIsImJ5dGVMZW5ndGgiLCJlbnF1ZXVlIiwidmFsaWRhdGVBbmRNZXJnZSIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdHMiLCJreSIsIm5ld0RlZmF1bHRzIiwiZXh0ZW5kIiwibm9kZVR5cGUiLCJwdW55Y29kZSIsIm1heEludCIsImJhc2UiLCJyZWdleFB1bnljb2RlIiwicmVnZXhOb25BU0NJSSIsInJlZ2V4U2VwYXJhdG9ycyIsImVycm9ycyIsImZsb29yIiwic3RyaW5nRnJvbUNoYXJDb2RlIiwiYXJyYXkiLCJtYXBEb21haW4iLCJzdHJpbmciLCJwYXJ0cyIsImpvaW4iLCJ1Y3MyZGVjb2RlIiwiZXh0cmEiLCJjb3VudGVyIiwidWNzMmVuY29kZSIsImRpZ2l0VG9CYXNpYyIsImRpZ2l0IiwiZmxhZyIsImFkYXB0IiwiZGVsdGEiLCJudW1Qb2ludHMiLCJmaXJzdFRpbWUiLCJrIiwiYmFzZU1pbnVzVE1pbiIsImRlY29kZSIsIm91dCIsImoiLCJpbmRleCIsIm9sZGkiLCJ3IiwidCIsImJhc2VNaW51c1QiLCJjb2RlUG9pbnQiLCJpbnB1dExlbmd0aCIsImkiLCJuIiwiYmlhcyIsImxhc3RJbmRleE9mIiwic3BsaWNlIiwiaGFuZGxlZENQQ291bnQiLCJiYXNpY0xlbmd0aCIsIm0iLCJxIiwiY3VycmVudFZhbHVlIiwiaGFuZGxlZENQQ291bnRQbHVzT25lIiwicU1pbnVzVCIsInNsaWNlIiwiaGFzT3duUHJvcGVydHkiLCJwcm9wIiwiY2FsbCIsInFzIiwic2VwIiwiZXEiLCJyZWdleHAiLCJtYXhLZXlzIiwibGVuIiwia3N0ciIsInZzdHIiLCJ2IiwieCIsImlkeCIsInN1YnN0ciIsImRlY29kZVVSSUNvbXBvbmVudCIsInN0cmluZ2lmeVByaW1pdGl2ZSIsImlzRmluaXRlIiwia3MiLCJub3JtYWxpemUiLCJzdHIiLCJqb2luZWQiLCJhcmd1bWVudHMiLCJ1dGlsIiwiVXJsIiwicHJvdG9jb2wiLCJzbGFzaGVzIiwiYXV0aCIsImhvc3QiLCJwb3J0IiwiaG9zdG5hbWUiLCJoYXNoIiwic2VhcmNoIiwicGF0aG5hbWUiLCJwYXRoIiwiaHJlZiIsInVybFBhcnNlIiwicmVsYXRpdmUiLCJyZXNvbHZlT2JqZWN0IiwiZm9ybWF0IiwiaXNTdHJpbmciLCJwcm90b2NvbFBhdHRlcm4iLCJwb3J0UGF0dGVybiIsInNpbXBsZVBhdGhQYXR0ZXJuIiwidW53aXNlIiwiYXV0b0VzY2FwZSIsIm5vbkhvc3RDaGFycyIsImhvc3RFbmRpbmdDaGFycyIsImhvc3RuYW1lUGFydFBhdHRlcm4iLCJob3N0bmFtZVBhcnRTdGFydCIsInVuc2FmZVByb3RvY29sIiwiaG9zdGxlc3NQcm90b2NvbCIsInNsYXNoZWRQcm90b2NvbCIsInF1ZXJ5c3RyaW5nIiwicGFyc2VRdWVyeVN0cmluZyIsInNsYXNoZXNEZW5vdGVIb3N0IiwidSIsInF1ZXJ5SW5kZXgiLCJzcGxpdHRlciIsInVTcGxpdCIsInJlc3QiLCJ0cmltIiwic2ltcGxlUGF0aCIsImV4ZWMiLCJwcm90byIsImxvd2VyUHJvdG8iLCJtYXRjaCIsImF0U2lnbiIsImhvc3RFbmQiLCJoZWMiLCJwYXJzZUhvc3QiLCJpcHY2SG9zdG5hbWUiLCJob3N0cGFydHMiLCJsIiwicGFydCIsIm5ld3BhcnQiLCJ2YWxpZFBhcnRzIiwibm90SG9zdCIsImJpdCIsInVuc2hpZnQiLCJ0b0FTQ0lJIiwicCIsImgiLCJhZSIsImVzYyIsImVzY2FwZSIsInFtIiwicyIsInJlbCIsInRrZXlzIiwidGsiLCJ0a2V5IiwicmtleXMiLCJyayIsInJrZXkiLCJyZWxQYXRoIiwic2hpZnQiLCJpc1NvdXJjZUFicyIsImlzUmVsQWJzIiwibXVzdEVuZEFicyIsInJlbW92ZUFsbERvdHMiLCJzcmNQYXRoIiwicHN5Y2hvdGljIiwiaXNOdWxsT3JVbmRlZmluZWQiLCJhdXRoSW5Ib3N0IiwiaXNOdWxsIiwibGFzdCIsImhhc1RyYWlsaW5nU2xhc2giLCJ1cCIsImlzQWJzb2x1dGUiLCJhcmciLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJsb2FkZWQiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZGVmaW5pdGlvbiIsIm8iLCJlbnVtZXJhYmxlIiwiRnVuY3Rpb24iLCJlIiwiciIsInRvU3RyaW5nVGFnIiwibm1kIiwicGF0aHMiLCJjaGlsZHJlbiJdLCJzb3VyY2VSb290IjoiIn0=
2
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.mailgun=e():t.mailgun=e()}(this,(function(){return(()=>{var t={48:function(t,e,r){"use strict";var n=(this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}})(r(475)),o=function(){function t(t){this.formData=t}return t.prototype.client=function(t){return new n.default(t,this.formData)},t}();t.exports=o},475:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=o(r(438)),i=o(r(373)),a=o(r(22)),u=o(r(747)),h=o(r(778)),p=o(r(750)),c=o(r(197)),f=o(r(277)),l=o(r(721)),d=o(r(345)),y=o(r(602)),m=o(r(126)),v=o(r(135)),b=o(r(60)),g=o(r(734)),_=function(t,e){var r=n({},t);if(r.url||(r.url="https://api.mailgun.net"),!r.username)throw new Error('Parameter "username" is required');if(!r.key)throw new Error('Parameter "key" is required');this.request=new s.default(r,e);var o=new v.default(this.request),_=new b.default(this.request),w=new g.default(this.request);this.domains=new i.default(this.request,_),this.webhooks=new p.default(this.request),this.events=new a.default(this.request),this.stats=new u.default(this.request),this.suppressions=new h.default(this.request),this.messages=new c.default(this.request),this.routes=new f.default(this.request),this.ips=new d.default(this.request),this.ip_pools=new y.default(this.request),this.lists=new m.default(this.request,o),this.validate=new l.default(this.request,w)};e.default=_},373:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.Domain=void 0;var s=o(r(78)),i=o(r(142)),a=function(t,e,r){this.name=t.name,this.require_tls=t.require_tls,this.skip_verification=t.skip_verification,this.state=t.state,this.wildcard=t.wildcard,this.spam_action=t.spam_action,this.created_at=t.created_at,this.smtp_password=t.smtp_password,this.smtp_login=t.smtp_login,this.type=t.type,this.receiving_dns_records=e||null,this.sending_dns_records=r||null};e.Domain=a;var u=function(){function t(t,e){this.request=t,this.domainCredentials=e}return t.prototype._parseMessage=function(t){return t.body},t.prototype._parseDomainList=function(t){return t.body.items.map((function(t){return new a(t)}))},t.prototype._parseDomain=function(t){return new a(t.body.domain,t.body.receiving_dns_records,t.body.sending_dns_records)},t.prototype._parseTrackingSettings=function(t){return t.body.tracking},t.prototype._parseTrackingUpdate=function(t){return t.body},t.prototype.list=function(t){var e=this;return this.request.get("/v3/domains",t).then((function(t){return e._parseDomainList(t)}))},t.prototype.get=function(t){var e=this;return this.request.get("/v3/domains/"+t).then((function(t){return e._parseDomain(t)}))},t.prototype.create=function(t){var e=this,r=n({},t);return"force_dkim_authority"in r&&"boolean"==typeof r.force_dkim_authority&&(r.force_dkim_authority="true"===r.toString()?"true":"false"),this.request.postWithFD("/v3/domains",r).then((function(t){return e._parseDomain(t)}))},t.prototype.destroy=function(t){var e=this;return this.request.delete("/v3/domains/"+t).then((function(t){return e._parseMessage(t)}))},t.prototype.getConnection=function(t){return this.request.get("/v3/domains/"+t+"/connection").then((function(t){return t})).then((function(t){return t.body.connection}))},t.prototype.updateConnection=function(t,e){return this.request.put("/v3/domains/"+t+"/connection",e).then((function(t){return t})).then((function(t){return t.body}))},t.prototype.getTracking=function(t){return this.request.get((0,s.default)("/v3/domains",t,"tracking")).then(this._parseTrackingSettings)},t.prototype.updateTracking=function(t,e,r){var n=this;if("boolean"==typeof(null==r?void 0:r.active))throw new i.default({status:400,statusText:"",body:{message:'Property "active" must contain string value.'}});return this.request.putWithFD((0,s.default)("/v3/domains",t,"tracking",e),r).then((function(t){return n._parseTrackingUpdate(t)}))},t.prototype.getIps=function(t){return this.request.get((0,s.default)("/v3/domains",t,"ips")).then((function(t){var e;return null===(e=null==t?void 0:t.body)||void 0===e?void 0:e.items}))},t.prototype.assignIp=function(t,e){return this.request.postWithFD((0,s.default)("/v3/domains",t,"ips"),{ip:e})},t.prototype.deleteIp=function(t,e){return this.request.delete((0,s.default)("/v3/domains",t,"ips",e))},t.prototype.linkIpPool=function(t,e){return this.request.postWithFD((0,s.default)("/v3/domains",t,"ips"),{pool_id:e})},t.prototype.unlinkIpPoll=function(t,e){var r="";if(e.pool_id&&e.ip)throw new i.default({status:400,statusText:"",body:{message:"Please specify either pool_id or ip (not both)"}});return e.pool_id?r="?pool_id="+e.pool_id:e.ip&&(r="?ip="+e.ip),this.request.delete((0,s.default)("/v3/domains",t,"ips","ip_pool",r))},t.prototype.updateDKIMAuthority=function(t,e){return this.request.put("/v3/domains/"+t+"/dkim_authority",{},{query:"self="+e.self}).then((function(t){return t})).then((function(t){return t.body}))},t.prototype.updateDKIMSelector=function(t,e){return this.request.put("/v3/domains/"+t+"/dkim_selector",{},{query:"dkim_selector="+e.dkimSelector}).then((function(t){return t}))},t.prototype.updateWebPrefix=function(t,e){return this.request.put("/v3/domains/"+t+"/web_prefix",{},{query:"web_prefix="+e.webPrefix}).then((function(t){return t}))},t}();e.default=u},60:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=n(r(78)),s=function(){function t(t){this.request=t,this.baseRoute="/v3/domains/"}return t.prototype._parseDomainCredentialsList=function(t){return{items:t.body.items,totalCount:t.body.total_count}},t.prototype._parseMessageResponse=function(t){return{status:t.status,message:t.body.message}},t.prototype._parseDeletedResponse=function(t){return{status:t.status,message:t.body.message,spec:t.body.spec}},t.prototype.list=function(t,e){var r=this;return this.request.get((0,o.default)(this.baseRoute,t,"/credentials"),e).then((function(t){return r._parseDomainCredentialsList(t)}))},t.prototype.create=function(t,e){var r=this;return this.request.postWithFD(""+this.baseRoute+t+"/credentials",e).then((function(t){return r._parseMessageResponse(t)}))},t.prototype.update=function(t,e,r){var n=this;return this.request.putWithFD(""+this.baseRoute+t+"/credentials/"+e,r).then((function(t){return n._parseMessageResponse(t)}))},t.prototype.destroy=function(t,e){var r=this;return this.request.delete(""+this.baseRoute+t+"/credentials/"+e).then((function(t){return r._parseDeletedResponse(t)}))},t}();e.default=s},142:function(t,e){"use strict";var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var o=function(t){function e(e){var r=e.status,n=e.statusText,o=e.message,s=e.body,i=void 0===s?{}:s,a=this,u=i.message,h=i.error;return(a=t.call(this)||this).stack="",a.status=r,a.message=o||h||n,a.details=u,a}return n(e,t),e}(Error);e.default=o},22:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=o(r(78)),i=function(){function t(t){this.request=t}return t.prototype._parsePageNumber=function(t){return t.split("/").pop()},t.prototype._parsePage=function(t,e){return{id:t,number:this._parsePageNumber(e),url:e}},t.prototype._parsePageLinks=function(t){var e=this;return Object.entries(t.body.paging).reduce((function(t,r){var n=r[0],o=r[1];return t[n]=e._parsePage(n,o),t}),{})},t.prototype._parseEventList=function(t){return{items:t.body.items,pages:this._parsePageLinks(t)}},t.prototype.get=function(t,e){var r,o=this,i=n({},e);return i&&i.page?(r=(0,s.default)("/v3",t,"events",i.page),delete i.page):r=(0,s.default)("/v3",t,"events"),this.request.get(r,i).then((function(t){return o._parseEventList(t)}))},t}();e.default=i},602:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.request=t}return t.prototype.list=function(t){var e=this;return this.request.get("/v1/ip_pools",t).then((function(t){return e.parseIpPoolsResponse(t)}))},t.prototype.create=function(t){return this.request.postWithFD("/v1/ip_pools",t).then((function(t){return null==t?void 0:t.body}))},t.prototype.update=function(t,e){return this.request.patchWithFD("/v1/ip_pools/"+t,e).then((function(t){return null==t?void 0:t.body}))},t.prototype.delete=function(t,e){return this.request.delete("/v1/ip_pools/"+t,e).then((function(t){return null==t?void 0:t.body}))},t.prototype.parseIpPoolsResponse=function(t){return t.body.ip_pools},t}();e.default=r},345:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.request=t}return t.prototype.list=function(t){var e=this;return this.request.get("/v3/ips",t).then((function(t){return e.parseIpsResponse(t)}))},t.prototype.get=function(t){var e=this;return this.request.get("/v3/ips/"+t).then((function(t){return e.parseIpsResponse(t)}))},t.prototype.parseIpsResponse=function(t){return t.body},t}();e.default=r},126:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){this.request=t,this.baseRoute="/v3/lists",this.members=e}return t.prototype.list=function(t){return this.request.get(this.baseRoute+"/pages",t).then((function(t){return t.body.items}))},t.prototype.get=function(t){return this.request.get(this.baseRoute+"/"+t).then((function(t){return t.body.list}))},t.prototype.create=function(t){return this.request.postWithFD(this.baseRoute,t).then((function(t){return t.body.list}))},t.prototype.update=function(t,e){return this.request.putWithFD(this.baseRoute+"/"+t,e).then((function(t){return t.body.list}))},t.prototype.destroy=function(t){return this.request.delete(this.baseRoute+"/"+t).then((function(t){return t.body}))},t}();e.default=r},135:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t){this.request=t,this.baseRoute="/v3/lists"}return t.prototype.checkAndUpdateData=function(t){var e=r({},t);return"object"==typeof t.vars&&(e.vars=JSON.stringify(e.vars)),"boolean"==typeof t.subscribed&&(e.subscribed=t.subscribed?"yes":"no"),e},t.prototype.listMembers=function(t,e){return this.request.get(this.baseRoute+"/"+t+"/members/pages",e).then((function(t){return t.body.items}))},t.prototype.getMember=function(t,e){return this.request.get(this.baseRoute+"/"+t+"/members/"+e).then((function(t){return t.body.member}))},t.prototype.createMember=function(t,e){var r=this.checkAndUpdateData(e);return this.request.postWithFD(this.baseRoute+"/"+t+"/members",r).then((function(t){return t.body.member}))},t.prototype.createMembers=function(t,e){var r={members:Array.isArray(e.members)?JSON.stringify(e.members):e.members,upsert:e.upsert};return this.request.postWithFD(this.baseRoute+"/"+t+"/members.json",r).then((function(t){return t.body}))},t.prototype.updateMember=function(t,e,r){var n=this.checkAndUpdateData(r);return this.request.putWithFD(this.baseRoute+"/"+t+"/members/"+e,n).then((function(t){return t.body.member}))},t.prototype.destroyMember=function(t,e){return this.request.delete(this.baseRoute+"/"+t+"/members/"+e).then((function(t){return t.body}))},t}();e.default=n},197:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.request=t}return t.prototype._parseResponse=function(t){return t.body?t.body:t},t.prototype.create=function(t,e){return e.message?this.request.postWithFD("/v3/"+t+"/messages.mime",e).then(this._parseResponse):this.request.postWithFD("/v3/"+t+"/messages",e).then(this._parseResponse)},t}();e.default=r},734:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.request=t}return t.prototype.list=function(){return this.request.get("/v4/address/validate/bulk").then((function(t){return t.body}))},t.prototype.get=function(t){return this.request.get("/v4/address/validate/bulk/"+t).then((function(t){return t.body}))},t.prototype.create=function(t,e){return this.request.postWithFD("/v4/address/validate/bulk/"+t,e).then((function(t){return t.body}))},t.prototype.destroy=function(t){return this.request.delete("/v4/address/validate/bulk/"+t).then((function(t){return t}))},t}();e.default=r},438:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,s){function i(t){try{u(n.next(t))}catch(t){s(t)}}function a(t){try{u(n.throw(t))}catch(t){s(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(i,a)}u((n=n.apply(t,e||[])).next())}))},s=this&&this.__generator||function(t,e){var r,n,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var a=i(r(501)),u=i(r(78)),h=i(r(899)),p=i(r(142)),c=function(t){return"object"==typeof t&&"function"==typeof t.pipe};function f(t){return void 0!==t.getHeaders}var l=function(){function t(t,e){this.username=t.username,this.key=t.key,this.url=t.url,this.timeout=t.timeout,this.headers=t.headers||{},this.FormDataConstructor=e}return t.prototype.request=function(t,e,r){return o(this,void 0,void 0,(function(){var o,i,f,l,d,y,m,v;return s(this,(function(s){switch(s.label){case 0:return o=n({},r),i=a.default.encode(this.username+":"+this.key),f=n(n({Authorization:"Basic "+i},this.headers),null==o?void 0:o.headers),null==o||delete o.headers,f["Content-Type"]||delete f["Content-Type"],l=n({},o),(null==o?void 0:o.query)&&Object.getOwnPropertyNames(null==o?void 0:o.query).length>0&&(l.searchParams=o.query,delete l.query),[4,(0,h.default)((0,u.default)(this.url,e),n({method:t.toLocaleUpperCase(),headers:f,throwHttpErrors:!1,timeout:this.timeout},l))];case 1:return(null==(d=s.sent())?void 0:d.ok)?[3,6]:(null==d?void 0:d.body)&&c(d.body)?[4,(b=d.body,g=[],new Promise((function(t,e){b.on("data",(function(t){return g.push(t)})),b.on("error",e),b.on("end",(function(){return t(Buffer.concat(g).toString("utf8"))}))})))]:[3,3];case 2:return m=s.sent(),[3,5];case 3:return[4,null==d?void 0:d.json()];case 4:m=s.sent(),s.label=5;case 5:throw y=m,new p.default({status:null==d?void 0:d.status,statusText:null==d?void 0:d.statusText,body:{message:y}});case 6:return v={},[4,null==d?void 0:d.json()];case 7:return v.body=s.sent(),v.status=null==d?void 0:d.status,[2,v]}var b,g}))}))},t.prototype.query=function(t,e,r,o){return this.request(t,e,n({query:r},o))},t.prototype.command=function(t,e,r,o){return this.request(t,e,n({headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r},o))},t.prototype.get=function(t,e,r){return this.query("get",t,e,r)},t.prototype.head=function(t,e,r){return this.query("head",t,e,r)},t.prototype.options=function(t,e,r){return this.query("options",t,e,r)},t.prototype.post=function(t,e,r){return this.command("post",t,e,r)},t.prototype.postWithFD=function(t,e){if(!e)throw new Error("Please provide data object");var r=this.createFormData(e);return this.command("post",t,r,{headers:{"Content-Type":null}})},t.prototype.putWithFD=function(t,e){if(!e)throw new Error("Please provide data object");var r=this.createFormData(e);return this.command("put",t,r,{headers:{"Content-Type":null}})},t.prototype.patchWithFD=function(t,e){if(!e)throw new Error("Please provide data object");var r=this.createFormData(e);return this.command("patch",t,r,{headers:{"Content-Type":null}})},t.prototype.createFormData=function(t){var e=this;return Object.keys(t).filter((function(e){return t[e]})).reduce((function(r,n){return["attachment","inline","file"].includes(n)?(e.addFilesToFD(n,t[n],r),r):"message"===n?(e.addMimeDataToFD(n,t[n],r),r):(e.addCommonPropertyToFD(n,t[n],r),r)}),new this.FormDataConstructor)},t.prototype.addMimeDataToFD=function(t,e,r){f(r)?Buffer.isBuffer(e)&&r.append(t,e,{filename:"MimeMessage"}):r.append(t,e,"MimeMessage")},t.prototype.addFilesToFD=function(t,e,r){var o=function(t,e,r){var o=c(e)?e:e.data,s=function(t){if("object"!=typeof t||c(t))return{};var e=t.filename,r=t.contentType,o=t.knownLength;return n(n(n({},e?{filename:e}:{filename:"file"}),r&&{contentType:r}),o&&{knownLength:o})}(e);f(r)?r.append(t,o,s):r.append(t,o,s.filename)};Array.isArray(e)?e.forEach((function(e){o(t,e,r)})):o(t,e,r)},t.prototype.addCommonPropertyToFD=function(t,e,r){Array.isArray(e)?e.forEach((function(e){r.append(t,e)})):null!=e&&r.append(t,e)},t.prototype.put=function(t,e,r){return this.command("put",t,e,r)},t.prototype.patch=function(t,e,r){return this.command("patch",t,e,r)},t.prototype.delete=function(t,e,r){return this.command("delete",t,e,r)},t}();e.default=l},277:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.request=t}return t.prototype.list=function(t){return this.request.get("/v3/routes",t).then((function(t){return t.body.items}))},t.prototype.get=function(t){return this.request.get("/v3/routes/"+t).then((function(t){return t.body.route}))},t.prototype.create=function(t){return this.request.postWithFD("/v3/routes",t).then((function(t){return t.body.route}))},t.prototype.update=function(t,e){return this.request.putWithFD("/v3/routes/"+t,e).then((function(t){return t.body}))},t.prototype.destroy=function(t){return this.request.delete("/v3/routes/"+t).then((function(t){return t.body}))},t}();e.default=r},747:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,s=e.length;o<s;o++)!n&&o in e||(n||(n=Array.prototype.slice.call(e,0,o)),n[o]=e[o]);return t.concat(n||Array.prototype.slice.call(e))},s=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=s(r(78)),a=function(t){this.start=new Date(t.start),this.end=new Date(t.end),this.resolution=t.resolution,this.stats=t.stats.map((function(t){var e=n({},t);return e.time=new Date(t.time),e}))},u=function(){function t(t){this.request=t}return t.prototype.prepareSearchParams=function(t){var e=[];return"object"==typeof t&&Object.keys(t).length&&(e=Object.entries(t).reduce((function(t,e){var r=e[0],n=e[1];if(Array.isArray(n)&&n.length){var s=n.map((function(t){return[r,t]}));return o(o([],t,!0),s,!0)}return t.push([r,n]),t}),[])),e},t.prototype._parseStats=function(t){return new a(t.body)},t.prototype.getDomain=function(t,e){var r=this.prepareSearchParams(e);return this.request.get((0,i.default)("/v3",t,"stats/total"),r).then(this._parseStats)},t.prototype.getAccount=function(t){var e=this.prepareSearchParams(t);return this.request.get("/v3/stats/total",e).then(this._parseStats)},t}();e.default=u},778:function(t,e,r){"use strict";var n=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,s=e.length;o<s;o++)!n&&o in e||(n||(n=Array.prototype.slice.call(e,0,o)),n[o]=e[o]);return t.concat(n||Array.prototype.slice.call(e))},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=o(r(575)),i=o(r(78)),a={headers:{"Content-Type":"application/json"}},u=function(t){this.type="bounces",this.address=t.address,this.code=+t.code,this.error=t.error,this.created_at=new Date(t.created_at)},h=function(t){this.type="complaints",this.address=t.address,this.created_at=new Date(t.created_at)},p=function(t){this.type="unsubscribes",this.address=t.address,this.tags=t.tags,this.created_at=new Date(t.created_at)},c=function(t){this.type="whitelists",this.value=t.value,this.reason=t.reason,this.createdAt=new Date(t.createdAt)},f=function(){function t(t){this.request=t,this.models={bounces:u,complaints:h,unsubscribes:p,whitelists:c}}return t.prototype._parsePage=function(t,e){var r=s.default.parse(e,!0).query;return{id:t,page:r.page,address:r.address,url:e}},t.prototype._parsePageLinks=function(t){var e=this;return Object.entries(t.body.paging).reduce((function(t,r){var n=r[0],o=r[1];return t[n]=e._parsePage(n,o),t}),{})},t.prototype._parseList=function(t,e){var r={};return r.items=t.body.items.map((function(t){return new e(t)})),r.pages=this._parsePageLinks(t),r},t.prototype._parseItem=function(t,e){return new e(t.body)},t.prototype.createWhiteList=function(t,e){return this.request.postWithFD((0,i.default)("v3",t,"whitelists"),e,a).then((function(t){return t.body}))},t.prototype.list=function(t,e,r){var n=this,o=this.models[e];return this.request.get((0,i.default)("v3",t,e),r).then((function(t){return n._parseList(t,o)}))},t.prototype.get=function(t,e,r){var n=this,o=this.models[e];return this.request.get((0,i.default)("v3",t,e,encodeURIComponent(r))).then((function(t){return n._parseItem(t,o)}))},t.prototype.create=function(t,e,r){var o;return"whitelists"===e?this.createWhiteList(t,r):(o=Array.isArray(r)?n([],r,!0):[r],this.request.post((0,i.default)("v3",t,e),JSON.stringify(o),a).then((function(t){return t.body})))},t.prototype.destroy=function(t,e,r){return this.request.delete((0,i.default)("v3",t,e,encodeURIComponent(r))).then((function(t){return t.body}))},t}();e.default=f,t.exports=f},721:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){this.request=t,this.multipleValidation=e}return t.prototype.get=function(t){return this.request.get("/v4/address/validate",{address:t}).then((function(t){return t})).then((function(t){return t.body}))},t}();e.default=r},750:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=n(r(78)),s=function(t,e){this.id=t,this.url=e},i=function(){function t(t){this.request=t}return t.prototype._parseWebhookList=function(t){return t.body.webhooks},t.prototype._parseWebhookWithID=function(t){return function(e){var r,n=null===(r=null==e?void 0:e.body)||void 0===r?void 0:r.webhook,o=null==n?void 0:n.url;return o||(o=(null==n?void 0:n.urls)&&n.urls.length?n.urls[0]:null),new s(t,o)}},t.prototype._parseWebhookTest=function(t){return{code:t.body.code,message:t.body.message}},t.prototype.list=function(t,e){return this.request.get((0,o.default)("/v3/domains",t,"webhooks"),e).then(this._parseWebhookList)},t.prototype.get=function(t,e){return this.request.get((0,o.default)("/v3/domains",t,"webhooks",e)).then(this._parseWebhookWithID(e))},t.prototype.create=function(t,e,r,n){return void 0===n&&(n=!1),n?this.request.putWithFD((0,o.default)("/v3/domains",t,"webhooks",e,"test"),{url:r}).then(this._parseWebhookTest):this.request.postWithFD((0,o.default)("/v3/domains",t,"webhooks"),{id:e,url:r}).then(this._parseWebhookWithID(e))},t.prototype.update=function(t,e,r){return this.request.putWithFD((0,o.default)("/v3/domains",t,"webhooks",e),{url:r}).then(this._parseWebhookWithID(e))},t.prototype.destroy=function(t,e){return this.request.delete((0,o.default)("/v3/domains",t,"webhooks",e)).then(this._parseWebhookWithID(e))},t}();e.default=i},501:function(t,e,r){var n;t=r.nmd(t),function(o){var s=e,i=(t&&t.exports,"object"==typeof r.g&&r.g);i.global!==i&&i.window;var a=function(t){this.message=t};(a.prototype=new Error).name="InvalidCharacterError";var u=function(t){throw new a(t)},h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",p=/[\t\n\f\r ]/g,c={encode:function(t){t=String(t),/[^\0-\xFF]/.test(t)&&u("The string to be encoded contains characters outside of the Latin1 range.");for(var e,r,n,o,s=t.length%3,i="",a=-1,p=t.length-s;++a<p;)e=t.charCodeAt(a)<<16,r=t.charCodeAt(++a)<<8,n=t.charCodeAt(++a),i+=h.charAt((o=e+r+n)>>18&63)+h.charAt(o>>12&63)+h.charAt(o>>6&63)+h.charAt(63&o);return 2==s?(e=t.charCodeAt(a)<<8,r=t.charCodeAt(++a),i+=h.charAt((o=e+r)>>10)+h.charAt(o>>4&63)+h.charAt(o<<2&63)+"="):1==s&&(o=t.charCodeAt(a),i+=h.charAt(o>>2)+h.charAt(o<<4&63)+"=="),i},decode:function(t){var e=(t=String(t).replace(p,"")).length;e%4==0&&(e=(t=t.replace(/==?$/,"")).length),(e%4==1||/[^+a-zA-Z0-9/]/.test(t))&&u("Invalid character: the string to be decoded is not correctly encoded.");for(var r,n,o=0,s="",i=-1;++i<e;)n=h.indexOf(t.charAt(i)),r=o%4?64*r+n:n,o++%4&&(s+=String.fromCharCode(255&r>>(-2*o&6)));return s},version:"1.0.0"};void 0===(n=function(){return c}.call(e,r,e,t))||(t.exports=n)}()},899:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>j});const n={},o=t=>"undefined"!=typeof self&&self&&t in self?self:"undefined"!=typeof window&&window&&t in window?window:void 0!==r.g&&r.g&&t in r.g?r.g:"undefined"!=typeof globalThis&&globalThis?globalThis:void 0,s=["Headers","Request","Response","ReadableStream","fetch","AbortController","FormData"];for(const t of s)Object.defineProperty(n,t,{get(){const e=o(t),r=e&&e[t];return"function"==typeof r?r.bind(e):r}});const i=t=>null!==t&&"object"==typeof t,a="function"==typeof n.AbortController,u="function"==typeof n.ReadableStream,h="function"==typeof n.FormData,p=(t,e)=>{const r=new n.Headers(t||{}),o=e instanceof n.Headers,s=new n.Headers(e||{});for(const[t,e]of s)o&&"undefined"===e||void 0===e?r.delete(t):r.set(t,e);return r},c=(...t)=>{let e={},r={};for(const n of t){if(Array.isArray(n))Array.isArray(e)||(e=[]),e=[...e,...n];else if(i(n)){for(let[t,r]of Object.entries(n))i(r)&&t in e&&(r=c(e[t],r)),e={...e,[t]:r};i(n.headers)&&(r=p(r,n.headers))}e.headers=r}return e},f=["get","post","put","patch","head","delete"],l={json:"application/json",text:"text/*",formData:"multipart/form-data",arrayBuffer:"*/*",blob:"*/*"},d=[413,429,503],y=Symbol("stop");class HTTPError extends Error{constructor(t){super(t.statusText||String(0===t.status||t.status?t.status:"Unknown response error")),this.name="HTTPError",this.response=t}}class TimeoutError extends Error{constructor(t){super("Request timed out"),this.name="TimeoutError",this.request=t}}const m=t=>new Promise((e=>setTimeout(e,t))),v=t=>f.includes(t)?t.toUpperCase():t,b={limit:2,methods:["get","put","head","delete","options","trace"],statusCodes:[408,413,429,500,502,503,504],afterStatusCodes:d},g=(t={})=>{if("number"==typeof t)return{...b,limit:t};if(t.methods&&!Array.isArray(t.methods))throw new Error("retry.methods must be an array");if(t.statusCodes&&!Array.isArray(t.statusCodes))throw new Error("retry.statusCodes must be an array");return{...b,...t,afterStatusCodes:d}},_=2147483647;class Ky{constructor(t,e={}){if(this._retryCount=0,this._input=t,this._options={credentials:this._input.credentials||"same-origin",...e,headers:p(this._input.headers,e.headers),hooks:c({beforeRequest:[],beforeRetry:[],afterResponse:[]},e.hooks),method:v(e.method||this._input.method),prefixUrl:String(e.prefixUrl||""),retry:g(e.retry),throwHttpErrors:!1!==e.throwHttpErrors,timeout:void 0===e.timeout?1e4:e.timeout,fetch:e.fetch||n.fetch},"string"!=typeof this._input&&!(this._input instanceof URL||this._input instanceof n.Request))throw new TypeError("`input` must be a string, URL, or Request");if(this._options.prefixUrl&&"string"==typeof this._input){if(this._input.startsWith("/"))throw new Error("`input` must not begin with a slash when using `prefixUrl`");this._options.prefixUrl.endsWith("/")||(this._options.prefixUrl+="/"),this._input=this._options.prefixUrl+this._input}if(a&&(this.abortController=new n.AbortController,this._options.signal&&this._options.signal.addEventListener("abort",(()=>{this.abortController.abort()})),this._options.signal=this.abortController.signal),this.request=new n.Request(this._input,this._options),this._options.searchParams){const t="?"+new URLSearchParams(this._options.searchParams).toString(),e=this.request.url.replace(/(?:\?.*?)?(?=#|$)/,t);console.log("url ---------\x3e",e),!(h&&this._options.body instanceof n.FormData||this._options.body instanceof URLSearchParams)||this._options.headers&&this._options.headers["content-type"]||this.request.headers.delete("content-type"),this.request=new n.Request(new n.Request(e,this.request),this._options)}void 0!==this._options.json&&(this._options.body=JSON.stringify(this._options.json),this.request.headers.set("content-type","application/json"),this.request=new n.Request(this.request,{body:this._options.body}));const r=async()=>{if(this._options.timeout>_)throw new RangeError("The `timeout` option cannot be greater than 2147483647");await m(1);let t=await this._fetch();for(const e of this._options.hooks.afterResponse){const r=await e(this.request,this._options,this._decorateResponse(t.clone()));r instanceof n.Response&&(t=r)}if(this._decorateResponse(t),!t.ok&&this._options.throwHttpErrors)throw new HTTPError(t);if(this._options.onDownloadProgress){if("function"!=typeof this._options.onDownloadProgress)throw new TypeError("The `onDownloadProgress` option must be a function");if(!u)throw new Error("Streams are not supported in your environment. `ReadableStream` is missing.");return this._stream(t.clone(),this._options.onDownloadProgress)}return t},o=this._options.retry.methods.includes(this.request.method.toLowerCase())?this._retry(r):r();for(const[t,r]of Object.entries(l))o[t]=async()=>{this.request.headers.set("accept",this.request.headers.get("accept")||r);const n=(await o).clone();if("json"===t){if(204===n.status)return"";if(e.parseJson)return e.parseJson(await n.text())}return n[t]()};return o}_calculateRetryDelay(t){if(this._retryCount++,this._retryCount<this._options.retry.limit&&!(t instanceof TimeoutError)){if(t instanceof HTTPError){if(!this._options.retry.statusCodes.includes(t.response.status))return 0;const e=t.response.headers.get("Retry-After");if(e&&this._options.retry.afterStatusCodes.includes(t.response.status)){let t=Number(e);return Number.isNaN(t)?t=Date.parse(e)-Date.now():t*=1e3,void 0!==this._options.retry.maxRetryAfter&&t>this._options.retry.maxRetryAfter?0:t}if(413===t.response.status)return 0}return.3*2**(this._retryCount-1)*1e3}return 0}_decorateResponse(t){return this._options.parseJson&&(t.json=async()=>this._options.parseJson(await t.text())),t}async _retry(t){try{return await t()}catch(e){const r=Math.min(this._calculateRetryDelay(e),_);if(0!==r&&this._retryCount>0){await m(r);for(const t of this._options.hooks.beforeRetry){if(await t({request:this.request,options:this._options,error:e,retryCount:this._retryCount})===y)return}return this._retry(t)}if(this._options.throwHttpErrors)throw e}}async _fetch(){for(const t of this._options.hooks.beforeRequest){const e=await t(this.request,this._options);if(e instanceof Request){this.request=e;break}if(e instanceof Response)return e}return!1===this._options.timeout?this._options.fetch(this.request.clone()):(t=this.request.clone(),e=this.abortController,r=this._options,new Promise(((n,o)=>{const s=setTimeout((()=>{e&&e.abort(),o(new TimeoutError(t))}),r.timeout);r.fetch(t).then(n).catch(o).then((()=>{clearTimeout(s)}))})));var t,e,r}_stream(t,e){const r=Number(t.headers.get("content-length"))||0;let o=0;return new n.Response(new n.ReadableStream({start(n){const s=t.body.getReader();e&&e({percent:0,transferredBytes:0,totalBytes:r},new Uint8Array),async function t(){const{done:i,value:a}=await s.read();if(i)n.close();else{if(e){o+=a.byteLength;e({percent:0===r?0:o/r,transferredBytes:o,totalBytes:r},a)}n.enqueue(a),t()}}()}}))}}const w=(...t)=>{for(const e of t)if((!i(e)||Array.isArray(e))&&void 0!==e)throw new TypeError("The `options` argument must be an object");return c({},...t)},q=t=>{const e=(e,r)=>new Ky(e,w(t,r));for(const r of f)e[r]=(e,n)=>new Ky(e,w(t,n,{method:r}));return e.HTTPError=HTTPError,e.TimeoutError=TimeoutError,e.create=t=>q(w(t)),e.extend=e=>q(w(t,e)),e.stop=y,e},j=q()},971:function(t,e,r){var n;t=r.nmd(t),function(o){e&&e.nodeType,t&&t.nodeType;var s="object"==typeof r.g&&r.g;s.global!==s&&s.window!==s&&s.self;var i,a=2147483647,u=36,h=/^xn--/,p=/[^\x20-\x7E]/,c=/[\x2E\u3002\uFF0E\uFF61]/g,f={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},l=Math.floor,d=String.fromCharCode;function y(t){throw RangeError(f[t])}function m(t,e){for(var r=t.length,n=[];r--;)n[r]=e(t[r]);return n}function v(t,e){var r=t.split("@"),n="";return r.length>1&&(n=r[0]+"@",t=r[1]),n+m((t=t.replace(c,".")).split("."),e).join(".")}function b(t){for(var e,r,n=[],o=0,s=t.length;o<s;)(e=t.charCodeAt(o++))>=55296&&e<=56319&&o<s?56320==(64512&(r=t.charCodeAt(o++)))?n.push(((1023&e)<<10)+(1023&r)+65536):(n.push(e),o--):n.push(e);return n}function g(t){return m(t,(function(t){var e="";return t>65535&&(e+=d((t-=65536)>>>10&1023|55296),t=56320|1023&t),e+=d(t)})).join("")}function _(t,e){return t+22+75*(t<26)-((0!=e)<<5)}function w(t,e,r){var n=0;for(t=r?l(t/700):t>>1,t+=l(t/e);t>455;n+=u)t=l(t/35);return l(n+36*t/(t+38))}function q(t){var e,r,n,o,s,i,h,p,c,f,d,m=[],v=t.length,b=0,_=128,q=72;for((r=t.lastIndexOf("-"))<0&&(r=0),n=0;n<r;++n)t.charCodeAt(n)>=128&&y("not-basic"),m.push(t.charCodeAt(n));for(o=r>0?r+1:0;o<v;){for(s=b,i=1,h=u;o>=v&&y("invalid-input"),((p=(d=t.charCodeAt(o++))-48<10?d-22:d-65<26?d-65:d-97<26?d-97:u)>=u||p>l((a-b)/i))&&y("overflow"),b+=p*i,!(p<(c=h<=q?1:h>=q+26?26:h-q));h+=u)i>l(a/(f=u-c))&&y("overflow"),i*=f;q=w(b-s,e=m.length+1,0==s),l(b/e)>a-_&&y("overflow"),_+=l(b/e),b%=e,m.splice(b++,0,_)}return g(m)}function j(t){var e,r,n,o,s,i,h,p,c,f,m,v,g,q,j,D=[];for(v=(t=b(t)).length,e=128,r=0,s=72,i=0;i<v;++i)(m=t[i])<128&&D.push(d(m));for(n=o=D.length,o&&D.push("-");n<v;){for(h=a,i=0;i<v;++i)(m=t[i])>=e&&m<h&&(h=m);for(h-e>l((a-r)/(g=n+1))&&y("overflow"),r+=(h-e)*g,e=h,i=0;i<v;++i)if((m=t[i])<e&&++r>a&&y("overflow"),m==e){for(p=r,c=u;!(p<(f=c<=s?1:c>=s+26?26:c-s));c+=u)j=p-f,q=u-f,D.push(d(_(f+j%q,0))),p=l(j/q);D.push(d(_(p,0))),s=w(r,g,n==o),r=0,++n}++r,++e}return D.join("")}i={version:"1.3.2",ucs2:{decode:b,encode:g},decode:q,encode:j,toASCII:function(t){return v(t,(function(t){return p.test(t)?"xn--"+j(t):t}))},toUnicode:function(t){return v(t,(function(t){return h.test(t)?q(t.slice(4).toLowerCase()):t}))}},void 0===(n=function(){return i}.call(e,r,e,t))||(t.exports=n)}()},587:t=>{"use strict";function e(t,e){return Object.prototype.hasOwnProperty.call(t,e)}t.exports=function(t,r,n,o){r=r||"&",n=n||"=";var s={};if("string"!=typeof t||0===t.length)return s;var i=/\+/g;t=t.split(r);var a=1e3;o&&"number"==typeof o.maxKeys&&(a=o.maxKeys);var u=t.length;a>0&&u>a&&(u=a);for(var h=0;h<u;++h){var p,c,f,l,d=t[h].replace(i,"%20"),y=d.indexOf(n);y>=0?(p=d.substr(0,y),c=d.substr(y+1)):(p=d,c=""),f=decodeURIComponent(p),l=decodeURIComponent(c),e(s,f)?Array.isArray(s[f])?s[f].push(l):s[f]=[s[f],l]:s[f]=l}return s}},361:t=>{"use strict";var e=function(t){switch(typeof t){case"string":return t;case"boolean":return t?"true":"false";case"number":return isFinite(t)?t:"";default:return""}};t.exports=function(t,r,n,o){return r=r||"&",n=n||"=",null===t&&(t=void 0),"object"==typeof t?Object.keys(t).map((function(o){var s=encodeURIComponent(e(o))+n;return Array.isArray(t[o])?t[o].map((function(t){return s+encodeURIComponent(e(t))})).join(r):s+encodeURIComponent(e(t[o]))})).join(r):o?encodeURIComponent(e(o))+n+encodeURIComponent(e(t)):""}},673:(t,e,r)=>{"use strict";e.decode=e.parse=r(587),e.encode=e.stringify=r(361)},78:t=>{function e(t){return t.replace(/[\/]+/g,"/").replace(/\/\?/g,"?").replace(/\/\#/g,"#").replace(/\:\//g,"://")}t.exports=function(){var t=[].slice.call(arguments,0).join("/");return e(t)}},575:(t,e,r)=>{"use strict";var n=r(971),o=r(502);function s(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}e.parse=g,e.resolve=function(t,e){return g(t,!1,!0).resolve(e)},e.resolveObject=function(t,e){return t?g(t,!1,!0).resolveObject(e):e},e.format=function(t){o.isString(t)&&(t=g(t));return t instanceof s?t.format():s.prototype.format.call(t)},e.Url=s;var i=/^([a-z0-9.+-]+:)/i,a=/:[0-9]*$/,u=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,h=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),p=["'"].concat(h),c=["%","/","?",";","#"].concat(p),f=["/","?","#"],l=/^[+a-z0-9A-Z_-]{0,63}$/,d=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,y={javascript:!0,"javascript:":!0},m={javascript:!0,"javascript:":!0},v={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},b=r(673);function g(t,e,r){if(t&&o.isObject(t)&&t instanceof s)return t;var n=new s;return n.parse(t,e,r),n}s.prototype.parse=function(t,e,r){if(!o.isString(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var s=t.indexOf("?"),a=-1!==s&&s<t.indexOf("#")?"?":"#",h=t.split(a);h[0]=h[0].replace(/\\/g,"/");var g=t=h.join(a);if(g=g.trim(),!r&&1===t.split("#").length){var _=u.exec(g);if(_)return this.path=g,this.href=g,this.pathname=_[1],_[2]?(this.search=_[2],this.query=e?b.parse(this.search.substr(1)):this.search.substr(1)):e&&(this.search="",this.query={}),this}var w=i.exec(g);if(w){var q=(w=w[0]).toLowerCase();this.protocol=q,g=g.substr(w.length)}if(r||w||g.match(/^\/\/[^@\/]+@[^@\/]+/)){var j="//"===g.substr(0,2);!j||w&&m[w]||(g=g.substr(2),this.slashes=!0)}if(!m[w]&&(j||w&&!v[w])){for(var D,O,R=-1,x=0;x<f.length;x++){-1!==(A=g.indexOf(f[x]))&&(-1===R||A<R)&&(R=A)}-1!==(O=-1===R?g.lastIndexOf("@"):g.lastIndexOf("@",R))&&(D=g.slice(0,O),g=g.slice(O+1),this.auth=decodeURIComponent(D)),R=-1;for(x=0;x<c.length;x++){var A;-1!==(A=g.indexOf(c[x]))&&(-1===R||A<R)&&(R=A)}-1===R&&(R=g.length),this.host=g.slice(0,R),g=g.slice(R),this.parseHost(),this.hostname=this.hostname||"";var P="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!P)for(var k=this.hostname.split(/\./),C=(x=0,k.length);x<C;x++){var T=k[x];if(T&&!T.match(l)){for(var F="",M=0,S=T.length;M<S;M++)T.charCodeAt(M)>127?F+="x":F+=T[M];if(!F.match(l)){var E=k.slice(0,x),W=k.slice(x+1),I=T.match(d);I&&(E.push(I[1]),W.unshift(I[2])),W.length&&(g="/"+W.join(".")+g),this.hostname=E.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),P||(this.hostname=n.toASCII(this.hostname));var U=this.port?":"+this.port:"",L=this.hostname||"";this.host=L+U,this.href+=this.host,P&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==g[0]&&(g="/"+g))}if(!y[q])for(x=0,C=p.length;x<C;x++){var N=p[x];if(-1!==g.indexOf(N)){var H=encodeURIComponent(N);H===N&&(H=escape(N)),g=g.split(N).join(H)}}var B=g.indexOf("#");-1!==B&&(this.hash=g.substr(B),g=g.slice(0,B));var J=g.indexOf("?");if(-1!==J?(this.search=g.substr(J),this.query=g.substr(J+1),e&&(this.query=b.parse(this.query)),g=g.slice(0,J)):e&&(this.search="",this.query={}),g&&(this.pathname=g),v[q]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){U=this.pathname||"";var K=this.search||"";this.path=U+K}return this.href=this.format(),this},s.prototype.format=function(){var t=this.auth||"";t&&(t=(t=encodeURIComponent(t)).replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",n=this.hash||"",s=!1,i="";this.host?s=t+this.host:this.hostname&&(s=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(s+=":"+this.port)),this.query&&o.isObject(this.query)&&Object.keys(this.query).length&&(i=b.stringify(this.query));var a=this.search||i&&"?"+i||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||v[e])&&!1!==s?(s="//"+(s||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):s||(s=""),n&&"#"!==n.charAt(0)&&(n="#"+n),a&&"?"!==a.charAt(0)&&(a="?"+a),e+s+(r=r.replace(/[?#]/g,(function(t){return encodeURIComponent(t)})))+(a=a.replace("#","%23"))+n},s.prototype.resolve=function(t){return this.resolveObject(g(t,!1,!0)).format()},s.prototype.resolveObject=function(t){if(o.isString(t)){var e=new s;e.parse(t,!1,!0),t=e}for(var r=new s,n=Object.keys(this),i=0;i<n.length;i++){var a=n[i];r[a]=this[a]}if(r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol){for(var u=Object.keys(t),h=0;h<u.length;h++){var p=u[h];"protocol"!==p&&(r[p]=t[p])}return v[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r}if(t.protocol&&t.protocol!==r.protocol){if(!v[t.protocol]){for(var c=Object.keys(t),f=0;f<c.length;f++){var l=c[f];r[l]=t[l]}return r.href=r.format(),r}if(r.protocol=t.protocol,t.host||m[t.protocol])r.pathname=t.pathname;else{for(var d=(t.pathname||"").split("/");d.length&&!(t.host=d.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==d[0]&&d.unshift(""),d.length<2&&d.unshift(""),r.pathname=d.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var y=r.pathname||"",b=r.search||"";r.path=y+b}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var g=r.pathname&&"/"===r.pathname.charAt(0),_=t.host||t.pathname&&"/"===t.pathname.charAt(0),w=_||g||r.host&&t.pathname,q=w,j=r.pathname&&r.pathname.split("/")||[],D=(d=t.pathname&&t.pathname.split("/")||[],r.protocol&&!v[r.protocol]);if(D&&(r.hostname="",r.port=null,r.host&&(""===j[0]?j[0]=r.host:j.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===d[0]?d[0]=t.host:d.unshift(t.host)),t.host=null),w=w&&(""===d[0]||""===j[0])),_)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,j=d;else if(d.length)j||(j=[]),j.pop(),j=j.concat(d),r.search=t.search,r.query=t.query;else if(!o.isNullOrUndefined(t.search)){if(D)r.hostname=r.host=j.shift(),(P=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=P.shift(),r.host=r.hostname=P.shift());return r.search=t.search,r.query=t.query,o.isNull(r.pathname)&&o.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!j.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var O=j.slice(-1)[0],R=(r.host||t.host||j.length>1)&&("."===O||".."===O)||""===O,x=0,A=j.length;A>=0;A--)"."===(O=j[A])?j.splice(A,1):".."===O?(j.splice(A,1),x++):x&&(j.splice(A,1),x--);if(!w&&!q)for(;x--;x)j.unshift("..");!w||""===j[0]||j[0]&&"/"===j[0].charAt(0)||j.unshift(""),R&&"/"!==j.join("/").substr(-1)&&j.push("");var P,k=""===j[0]||j[0]&&"/"===j[0].charAt(0);D&&(r.hostname=r.host=k?"":j.length?j.shift():"",(P=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=P.shift(),r.host=r.hostname=P.shift()));return(w=w||r.host&&j.length)&&!k&&j.unshift(""),j.length?r.pathname=j.join("/"):(r.pathname=null,r.path=null),o.isNull(r.pathname)&&o.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},s.prototype.parseHost=function(){var t=this.host,e=a.exec(t);e&&(":"!==(e=e[0])&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},502:t=>{"use strict";t.exports={isString:function(t){return"string"==typeof t},isObject:function(t){return"object"==typeof t&&null!==t},isNull:function(t){return null===t},isNullOrUndefined:function(t){return null==t}}}},e={};function r(n){var o=e[n];if(void 0!==o)return o.exports;var s=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(s.exports,s,s.exports,r),s.loaded=!0,s.exports}return r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),r(48)})()}));
3
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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Qk0sRUFBSSxDQUFDbFgsRUFBSzZQLElBQVVsVixPQUFPb0osVUFBVTZMLGVBQWVFLEtBQUs5UCxFQUFLNlAsR0NDbEYrRyxFQUFvQlUsRUFBSy9qQixJQUNILG9CQUFYNFQsUUFBMEJBLE9BQU9vUSxhQUMxQzVjLE9BQU82SyxlQUFlalMsRUFBUzRULE9BQU9vUSxZQUFhLENBQUV6WCxNQUFPLFdBRTdEbkYsT0FBTzZLLGVBQWVqUyxFQUFTLGFBQWMsQ0FBRXVNLE9BQU8sS0NMdkQ4VyxFQUFvQlksSUFBT2hrQixJQUMxQkEsRUFBT2lrQixNQUFRLEdBQ1Zqa0IsRUFBT2trQixXQUFVbGtCLEVBQU9ra0IsU0FBVyxJQUNqQ2xrQixHQ0FrQm9qQixFQUFvQixLbENPOUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9tYWlsZ3VuL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9jbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9kb21haW5zLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvZG9tYWluc0NyZWRlbnRpYWxzLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvZXJyb3IudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9ldmVudHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9pcC1wb29scy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL2lwcy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL2xpc3RzLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvbWFpbExpc3RNZW1iZXJzLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvbWVzc2FnZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9tdWx0aXBsZVZhbGlkYXRpb24udHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9yZXF1ZXN0LnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvcm91dGVzLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvc3RhdHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9zdXBwcmVzc2lvbnMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi92YWxpZGF0ZS50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL3dlYmhvb2tzLnRzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvYmFzZS02NC9iYXNlNjQuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9reS9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmcvZGVjb2RlLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmcvZW5jb2RlLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmcvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy91cmwtam9pbi9saWIvdXJsLWpvaW4uanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy91cmwvdXJsLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvdXJsL3V0aWwuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9tYWlsZ3VuL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9tYWlsZ3VuL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vbWFpbGd1bi93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL21haWxndW4vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9tYWlsZ3VuL3dlYnBhY2svcnVudGltZS9ub2RlIG1vZHVsZSBkZWNvcmF0b3IiLCJ3ZWJwYWNrOi8vbWFpbGd1bi93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wibWFpbGd1blwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJtYWlsZ3VuXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiaW1wb3J0IENsaWVudCBmcm9tICcuL2xpYi9jbGllbnQnO1xuaW1wb3J0IHsgSW5wdXRGb3JtRGF0YSB9IGZyb20gJy4vbGliL2ludGVyZmFjZXMvSUZvcm1EYXRhJztcbmltcG9ydCBPcHRpb25zIGZyb20gJy4vbGliL2ludGVyZmFjZXMvT3B0aW9ucyc7XG5cbmNsYXNzIE1haWxndW4ge1xuICBwcml2YXRlIGZvcm1EYXRhOiBJbnB1dEZvcm1EYXRhXG5cbiAgY29uc3RydWN0b3IoRm9ybURhdGE6IElucHV0Rm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gRm9ybURhdGE7XG4gIH1cblxuICBjbGllbnQob3B0aW9uczogT3B0aW9ucykgOiBDbGllbnQge1xuICAgIHJldHVybiBuZXcgQ2xpZW50KG9wdGlvbnMsIHRoaXMuZm9ybURhdGEpO1xuICB9XG59XG5cbmV4cG9ydCA9IE1haWxndW47XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5pbXBvcnQgT3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvT3B0aW9ucyc7XG5pbXBvcnQgUmVxdWVzdE9wdGlvbnMgZnJvbSAnLi9pbnRlcmZhY2VzL1JlcXVlc3RPcHRpb25zJztcblxuaW1wb3J0IERvbWFpbkNsaWVudCBmcm9tICcuL2RvbWFpbnMnO1xuaW1wb3J0IEV2ZW50Q2xpZW50IGZyb20gJy4vZXZlbnRzJztcbmltcG9ydCBTdGF0c0NsaWVudCBmcm9tICcuL3N0YXRzJztcbmltcG9ydCBTdXBwcmVzc2lvbkNsaWVudCBmcm9tICcuL3N1cHByZXNzaW9ucyc7XG5pbXBvcnQgV2ViaG9va0NsaWVudCBmcm9tICcuL3dlYmhvb2tzJztcbmltcG9ydCBNZXNzYWdlc0NsaWVudCBmcm9tICcuL21lc3NhZ2VzJztcbmltcG9ydCBSb3V0ZXNDbGllbnQgZnJvbSAnLi9yb3V0ZXMnO1xuaW1wb3J0IFZhbGlkYXRlQ2xpZW50IGZyb20gJy4vdmFsaWRhdGUnO1xuaW1wb3J0IElwc0NsaWVudCBmcm9tICcuL2lwcyc7XG5pbXBvcnQgSXBQb29sc0NsaWVudCBmcm9tICcuL2lwLXBvb2xzJztcbmltcG9ydCBMaXN0c0NsaWVudCBmcm9tICcuL2xpc3RzJztcbmltcG9ydCBNYWlsTGlzdHNNZW1iZXJzIGZyb20gJy4vbWFpbExpc3RNZW1iZXJzJztcbmltcG9ydCB7IElucHV0Rm9ybURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvSUZvcm1EYXRhJztcbmltcG9ydCBEb21haW5DcmVkZW50aWFsc0NsaWVudCBmcm9tICcuL2RvbWFpbnNDcmVkZW50aWFscyc7XG5pbXBvcnQgTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IGZyb20gJy4vbXVsdGlwbGVWYWxpZGF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xpZW50IHtcbiAgcHJpdmF0ZSByZXF1ZXN0O1xuXG4gIHB1YmxpYyBkb21haW5zO1xuICBwdWJsaWMgd2ViaG9va3M7XG4gIHB1YmxpYyBldmVudHM7XG4gIHB1YmxpYyBzdGF0cztcbiAgcHVibGljIHN1cHByZXNzaW9ucztcbiAgcHVibGljIG1lc3NhZ2VzO1xuICBwdWJsaWMgcm91dGVzO1xuICBwdWJsaWMgdmFsaWRhdGU7XG4gIHB1YmxpYyBpcHM7XG4gIHB1YmxpYyBpcF9wb29scztcbiAgcHVibGljIGxpc3RzO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMsIGZvcm1EYXRhOiBJbnB1dEZvcm1EYXRhKSB7XG4gICAgY29uc3QgY29uZmlnOiBSZXF1ZXN0T3B0aW9ucyA9IHsgLi4ub3B0aW9ucyB9IGFzIFJlcXVlc3RPcHRpb25zO1xuXG4gICAgaWYgKCFjb25maWcudXJsKSB7XG4gICAgICBjb25maWcudXJsID0gJ2h0dHBzOi8vYXBpLm1haWxndW4ubmV0JztcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZy51c2VybmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgXCJ1c2VybmFtZVwiIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFjb25maWcua2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciBcImtleVwiIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHRoaXMucmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGNvbmZpZywgZm9ybURhdGEpO1xuICAgIGNvbnN0IG1haWxMaXN0c01lbWJlcnMgPSBuZXcgTWFpbExpc3RzTWVtYmVycyh0aGlzLnJlcXVlc3QpO1xuICAgIGNvbnN0IGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50ID0gbmV3IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50ID0gbmV3IE11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCh0aGlzLnJlcXVlc3QpO1xuXG4gICAgdGhpcy5kb21haW5zID0gbmV3IERvbWFpbkNsaWVudCh0aGlzLnJlcXVlc3QsIGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50KTtcbiAgICB0aGlzLndlYmhvb2tzID0gbmV3IFdlYmhvb2tDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLmV2ZW50cyA9IG5ldyBFdmVudENsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuc3RhdHMgPSBuZXcgU3RhdHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLnN1cHByZXNzaW9ucyA9IG5ldyBTdXBwcmVzc2lvbkNsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMubWVzc2FnZXMgPSBuZXcgTWVzc2FnZXNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLnJvdXRlcyA9IG5ldyBSb3V0ZXNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLmlwcyA9IG5ldyBJcHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLmlwX3Bvb2xzID0gbmV3IElwUG9vbHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLmxpc3RzID0gbmV3IExpc3RzQ2xpZW50KHRoaXMucmVxdWVzdCwgbWFpbExpc3RzTWVtYmVycyk7XG4gICAgdGhpcy52YWxpZGF0ZSA9IG5ldyBWYWxpZGF0ZUNsaWVudCh0aGlzLnJlcXVlc3QsIG11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCk7XG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IHtcbiAgRG9tYWluUmVzcG9uc2VEYXRhLFxuICBEZXN0cm95ZWREb21haW5SZXNwb25zZSxcbiAgRG9tYWluc1F1ZXJ5LFxuICBEb21haW5JbmZvLFxuICBEb21haW5MaXN0UmVzcG9uc2VEYXRhLFxuICBEb21haW5TaG9ydERhdGEsXG4gIEROU1JlY29yZCxcbiAgQ29ubmVjdGlvblNldHRpbmdzUmVzcG9uc2UsXG4gIENvbm5lY3Rpb25TZXR0aW5ncyxcbiAgVXBkYXRlZENvbm5lY3Rpb25TZXR0aW5ncyxcbiAgVXBkYXRlZENvbm5lY3Rpb25TZXR0aW5nc1JlcyxcbiAgREtJTUF1dGhvcml0eUluZm8sXG4gIFVwZGF0ZWRES0lNQXV0aG9yaXR5LFxuICBVcGRhdGVkREtJTUF1dGhvcml0eVJlc3BvbnNlLFxuICBES0lNU2VsZWN0b3JJbmZvLFxuICBVcGRhdGVkREtJTVNlbGVjdG9yUmVzcG9uc2UsXG4gIFdlYlByZWZpeEluZm8sXG4gIFVwZGF0ZWRXZWJQcmVmaXhSZXNwb25zZSxcbiAgUmVwbGFjZW1lbnRGb3JQb29sLFxuICBNZXNzYWdlUmVzcG9uc2UsXG59IGZyb20gJy4vaW50ZXJmYWNlcy9Eb21haW5zJztcblxuaW1wb3J0IEFQSVJlc3BvbnNlIGZyb20gJy4vaW50ZXJmYWNlcy9BcGlSZXNwb25zZSc7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9lcnJvcic7XG5pbXBvcnQgQVBJRXJyb3JPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9BUElFcnJvck9wdGlvbnMnO1xuXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHtcbiAgRG9tYWluVHJhY2tpbmdSZXNwb25zZSxcbiAgRG9tYWluVHJhY2tpbmdEYXRhLFxuICBPcGVuVHJhY2tpbmdJbmZvLFxuICBDbGlja1RyYWNraW5nSW5mbyxcbiAgVW5zdWJzY3JpYmVUcmFja2luZ0luZm8sXG4gIFVwZGF0ZURvbWFpblRyYWNraW5nUmVzcG9uc2UsXG4gIFVwZGF0ZWRPcGVuVHJhY2tpbmdcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL0RvbWFpblRyYWNraW5nJztcbmltcG9ydCBEb21haW5DcmVkZW50aWFsc0NsaWVudCBmcm9tICcuL2RvbWFpbnNDcmVkZW50aWFscyc7XG5cbmV4cG9ydCBjbGFzcyBEb21haW4ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHJlcXVpcmVfdGxzOiBib29sZWFuO1xuICBza2lwX3ZlcmlmaWNhdGlvbjogYm9vbGVhbjtcbiAgc3RhdGU6IHN0cmluZztcbiAgd2lsZGNhcmQ6IGJvb2xlYW47XG4gIHNwYW1fYWN0aW9uOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgc210cF9wYXNzd29yZDogc3RyaW5nO1xuICBzbXRwX2xvZ2luOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgcmVjZWl2aW5nX2Ruc19yZWNvcmRzOiBETlNSZWNvcmRbXSB8IG51bGw7XG4gIHNlbmRpbmdfZG5zX3JlY29yZHM6IEROU1JlY29yZFtdIHwgbnVsbDtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBEb21haW5TaG9ydERhdGEsIHJlY2VpdmluZz86IEROU1JlY29yZFtdIHwgbnVsbCwgc2VuZGluZz86IEROU1JlY29yZFtdIHwgbnVsbCkge1xuICAgIHRoaXMubmFtZSA9IGRhdGEubmFtZTtcbiAgICB0aGlzLnJlcXVpcmVfdGxzID0gZGF0YS5yZXF1aXJlX3RscztcbiAgICB0aGlzLnNraXBfdmVyaWZpY2F0aW9uID0gZGF0YS5za2lwX3ZlcmlmaWNhdGlvbjtcbiAgICB0aGlzLnN0YXRlID0gZGF0YS5zdGF0ZTtcbiAgICB0aGlzLndpbGRjYXJkID0gZGF0YS53aWxkY2FyZDtcbiAgICB0aGlzLnNwYW1fYWN0aW9uID0gZGF0YS5zcGFtX2FjdGlvbjtcbiAgICB0aGlzLmNyZWF0ZWRfYXQgPSBkYXRhLmNyZWF0ZWRfYXQ7XG4gICAgdGhpcy5zbXRwX3Bhc3N3b3JkID0gZGF0YS5zbXRwX3Bhc3N3b3JkO1xuICAgIHRoaXMuc210cF9sb2dpbiA9IGRhdGEuc210cF9sb2dpbjtcbiAgICB0aGlzLnR5cGUgPSBkYXRhLnR5cGU7XG5cbiAgICB0aGlzLnJlY2VpdmluZ19kbnNfcmVjb3JkcyA9IHJlY2VpdmluZyB8fCBudWxsO1xuICAgIHRoaXMuc2VuZGluZ19kbnNfcmVjb3JkcyA9IHNlbmRpbmcgfHwgbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5DbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwdWJsaWMgZG9tYWluQ3JlZGVudGlhbHM6IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QsIGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50OiBEb21haW5DcmVkZW50aWFsc0NsaWVudCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5kb21haW5DcmVkZW50aWFscyA9IGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VNZXNzYWdlKHJlc3BvbnNlOiBEZXN0cm95ZWREb21haW5SZXNwb25zZSkgOiBNZXNzYWdlUmVzcG9uc2Uge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VEb21haW5MaXN0KHJlc3BvbnNlOiBEb21haW5MaXN0UmVzcG9uc2VEYXRhKTogRG9tYWluW10ge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5Lml0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIG5ldyBEb21haW4oaXRlbSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZURvbWFpbihyZXNwb25zZTogRG9tYWluUmVzcG9uc2VEYXRhKTogRG9tYWluIHtcbiAgICByZXR1cm4gbmV3IERvbWFpbihcbiAgICAgIHJlc3BvbnNlLmJvZHkuZG9tYWluLFxuICAgICAgcmVzcG9uc2UuYm9keS5yZWNlaXZpbmdfZG5zX3JlY29yZHMsXG4gICAgICByZXNwb25zZS5ib2R5LnNlbmRpbmdfZG5zX3JlY29yZHNcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VUcmFja2luZ1NldHRpbmdzKHJlc3BvbnNlOiBEb21haW5UcmFja2luZ1Jlc3BvbnNlKSA6IERvbWFpblRyYWNraW5nRGF0YSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHkudHJhY2tpbmc7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZVRyYWNraW5nVXBkYXRlKHJlc3BvbnNlOiBVcGRhdGVEb21haW5UcmFja2luZ1Jlc3BvbnNlKSA6VXBkYXRlZE9wZW5UcmFja2luZyB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XG4gIH1cblxuICBsaXN0KHF1ZXJ5PzogRG9tYWluc1F1ZXJ5KTogUHJvbWlzZTxEb21haW5bXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjMvZG9tYWlucycsIHF1ZXJ5KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURvbWFpbkxpc3QocmVzIGFzIERvbWFpbkxpc3RSZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIGdldChkb21haW46IHN0cmluZykgOiBQcm9taXNlPERvbWFpbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn1gKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURvbWFpbihyZXMgYXMgRG9tYWluUmVzcG9uc2VEYXRhKSk7XG4gIH1cblxuICBjcmVhdGUoZGF0YTogRG9tYWluSW5mbykgOiBQcm9taXNlPERvbWFpbj4ge1xuICAgIGNvbnN0IHBvc3RPYmogPSB7IC4uLmRhdGEgfTtcbiAgICBpZiAoJ2ZvcmNlX2RraW1fYXV0aG9yaXR5JyBpbiBwb3N0T2JqICYmIHR5cGVvZiBwb3N0T2JqLmZvcmNlX2RraW1fYXV0aG9yaXR5ID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHBvc3RPYmouZm9yY2VfZGtpbV9hdXRob3JpdHkgPSBwb3N0T2JqLnRvU3RyaW5nKCkgPT09ICd0cnVlJyA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKCcvdjMvZG9tYWlucycsIHBvc3RPYmopXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluKHJlcyBhcyBEb21haW5SZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIGRlc3Ryb3koZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPE1lc3NhZ2VSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjMvZG9tYWlucy8ke2RvbWFpbn1gKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZU1lc3NhZ2UocmVzIGFzIERlc3Ryb3llZERvbWFpblJlc3BvbnNlKSk7XG4gIH1cblxuICBnZXRDb25uZWN0aW9uKGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxDb25uZWN0aW9uU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgL3YzL2RvbWFpbnMvJHtkb21haW59L2Nvbm5lY3Rpb25gKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgQ29ubmVjdGlvblNldHRpbmdzUmVzcG9uc2UpXG4gICAgICAudGhlbigocmVzOkNvbm5lY3Rpb25TZXR0aW5nc1Jlc3BvbnNlKSA9PiByZXMuYm9keS5jb25uZWN0aW9uIGFzIENvbm5lY3Rpb25TZXR0aW5ncyk7XG4gIH1cblxuICB1cGRhdGVDb25uZWN0aW9uKGRvbWFpbjogc3RyaW5nLCBkYXRhOiBDb25uZWN0aW9uU2V0dGluZ3MpOiBQcm9taXNlPFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dChgL3YzL2RvbWFpbnMvJHtkb21haW59L2Nvbm5lY3Rpb25gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZENvbm5lY3Rpb25TZXR0aW5nc1JlcylcbiAgICAgIC50aGVuKChyZXM6VXBkYXRlZENvbm5lY3Rpb25TZXR0aW5nc1JlcykgPT4gcmVzLmJvZHkgYXMgVXBkYXRlZENvbm5lY3Rpb25TZXR0aW5ncyk7XG4gIH1cblxuICAvLyBUcmFja2luZ1xuXG4gIGdldFRyYWNraW5nKGRvbWFpbjogc3RyaW5nKSA6IFByb21pc2U8RG9tYWluVHJhY2tpbmdEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd0cmFja2luZycpKVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VUcmFja2luZ1NldHRpbmdzKTtcbiAgfVxuXG4gIHVwZGF0ZVRyYWNraW5nKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBkYXRhOiBPcGVuVHJhY2tpbmdJbmZvIHwgQ2xpY2tUcmFja2luZ0luZm8gfCBVbnN1YnNjcmliZVRyYWNraW5nSW5mb1xuICApOiBQcm9taXNlPFVwZGF0ZWRPcGVuVHJhY2tpbmc+IHtcbiAgICBpZiAodHlwZW9mIGRhdGE/LmFjdGl2ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoeyBzdGF0dXM6IDQwMCwgc3RhdHVzVGV4dDogJycsIGJvZHk6IHsgbWVzc2FnZTogJ1Byb3BlcnR5IFwiYWN0aXZlXCIgbXVzdCBjb250YWluIHN0cmluZyB2YWx1ZS4nIH0gfSBhcyBBUElFcnJvck9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3RyYWNraW5nJywgdHlwZSksIGRhdGEpXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlVHJhY2tpbmdVcGRhdGUocmVzIGFzIFVwZGF0ZURvbWFpblRyYWNraW5nUmVzcG9uc2UpKTtcbiAgfVxuXG4gIC8vIElQc1xuXG4gIGdldElwcyhkb21haW46IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycpKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBBUElSZXNwb25zZSkgPT4gcmVzcG9uc2U/LmJvZHk/Lml0ZW1zKTtcbiAgfVxuXG4gIGFzc2lnbklwKGRvbWFpbjogc3RyaW5nLCBpcDogc3RyaW5nKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycpLCB7IGlwIH0pO1xuICB9XG5cbiAgZGVsZXRlSXAoZG9tYWluOiBzdHJpbmcsIGlwOiBzdHJpbmcpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICdpcHMnLCBpcCkpO1xuICB9XG5cbiAgbGlua0lwUG9vbChkb21haW46IHN0cmluZywgcG9vbF9pZDogc3RyaW5nKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycpLCB7IHBvb2xfaWQgfSk7XG4gIH1cblxuICB1bmxpbmtJcFBvbGwoZG9tYWluOiBzdHJpbmcsIHJlcGxhY2VtZW50OiBSZXBsYWNlbWVudEZvclBvb2wpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgbGV0IHNlYXJjaFBhcmFtcyA9ICcnO1xuICAgIGlmIChyZXBsYWNlbWVudC5wb29sX2lkICYmIHJlcGxhY2VtZW50LmlwKSB7XG4gICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoeyBzdGF0dXM6IDQwMCwgc3RhdHVzVGV4dDogJycsIGJvZHk6IHsgbWVzc2FnZTogJ1BsZWFzZSBzcGVjaWZ5IGVpdGhlciBwb29sX2lkIG9yIGlwIChub3QgYm90aCknIH0gfSBhcyBBUElFcnJvck9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAocmVwbGFjZW1lbnQucG9vbF9pZCkge1xuICAgICAgc2VhcmNoUGFyYW1zID0gYD9wb29sX2lkPSR7cmVwbGFjZW1lbnQucG9vbF9pZH1gO1xuICAgIH0gZWxzZSBpZiAocmVwbGFjZW1lbnQuaXApIHtcbiAgICAgIHNlYXJjaFBhcmFtcyA9IGA/aXA9JHtyZXBsYWNlbWVudC5pcH1gO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycsICdpcF9wb29sJywgc2VhcmNoUGFyYW1zKSk7XG4gIH1cblxuICB1cGRhdGVES0lNQXV0aG9yaXR5KGRvbWFpbjogc3RyaW5nLCBkYXRhOiBES0lNQXV0aG9yaXR5SW5mbyk6IFByb21pc2U8VXBkYXRlZERLSU1BdXRob3JpdHk+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dChgL3YzL2RvbWFpbnMvJHtkb21haW59L2RraW1fYXV0aG9yaXR5YCwge30sIHsgcXVlcnk6IGBzZWxmPSR7ZGF0YS5zZWxmfWAgfSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gcmVzKVxuICAgICAgLnRoZW4oKHJlcyA6IFVwZGF0ZWRES0lNQXV0aG9yaXR5UmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIFVwZGF0ZWRES0lNQXV0aG9yaXR5KTtcbiAgfVxuXG4gIHVwZGF0ZURLSU1TZWxlY3Rvcihkb21haW46IHN0cmluZywgZGF0YTogREtJTVNlbGVjdG9ySW5mbyk6IFByb21pc2U8VXBkYXRlZERLSU1TZWxlY3RvclJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS9ka2ltX3NlbGVjdG9yYCwge30sIHsgcXVlcnk6IGBka2ltX3NlbGVjdG9yPSR7ZGF0YS5ka2ltU2VsZWN0b3J9YCB9KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZERLSU1TZWxlY3RvclJlc3BvbnNlKTtcbiAgfVxuXG4gIHVwZGF0ZVdlYlByZWZpeChkb21haW46IHN0cmluZywgZGF0YTogV2ViUHJlZml4SW5mbyk6IFByb21pc2U8VXBkYXRlZFdlYlByZWZpeFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS93ZWJfcHJlZml4YCwge30sIHsgcXVlcnk6IGB3ZWJfcHJlZml4PSR7ZGF0YS53ZWJQcmVmaXh9YCB9KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZFdlYlByZWZpeFJlc3BvbnNlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IEFQSVJlc3BvbnNlIGZyb20gJy4vaW50ZXJmYWNlcy9BcGlSZXNwb25zZSc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5pbXBvcnQge1xuICBDcmVhdGVkVXBkYXRlZERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2UsXG4gIERlbGV0ZWREb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlLFxuICBEb21haW5DcmVkZW50aWFscyxcbiAgRG9tYWluQ3JlZGVudGlhbHNMaXN0LFxuICBEb21haW5DcmVkZW50aWFsc1F1ZXJ5LFxuICBEb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlRGF0YSxcbiAgRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQsXG4gIElEb21haW5DcmVkZW50aWFscyxcbiAgVXBkYXRlRG9tYWluQ3JlZGVudGlhbHNEYXRhXG59IGZyb20gJy4vaW50ZXJmYWNlcy9Eb21haW5DcmVkZW50aWFscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IGltcGxlbWVudHMgSURvbWFpbkNyZWRlbnRpYWxzIHtcbiAgYmFzZVJvdXRlOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5iYXNlUm91dGUgPSAnL3YzL2RvbWFpbnMvJztcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlRG9tYWluQ3JlZGVudGlhbHNMaXN0KFxuICAgIHJlc3BvbnNlOiBEb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlRGF0YVxuICApOiBEb21haW5DcmVkZW50aWFsc0xpc3Qge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczogcmVzcG9uc2UuYm9keS5pdGVtcyxcbiAgICAgIHRvdGFsQ291bnQ6IHJlc3BvbnNlLmJvZHkudG90YWxfY291bnRcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VNZXNzYWdlUmVzcG9uc2UoXG4gICAgcmVzcG9uc2U6IENyZWF0ZWRVcGRhdGVkRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZVxuICApOiBEb21haW5DcmVkZW50aWFsc1Jlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2VcbiAgICB9IGFzIERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZURlbGV0ZWRSZXNwb25zZShcbiAgICByZXNwb25zZTpEZWxldGVkRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZVxuICApOiBEb21haW5DcmVkZW50aWFsc1Jlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2UsXG4gICAgICBzcGVjOiByZXNwb25zZS5ib2R5LnNwZWNcbiAgICB9IGFzIERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGxpc3QoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogRG9tYWluQ3JlZGVudGlhbHNRdWVyeSk6IFByb21pc2U8RG9tYWluQ3JlZGVudGlhbHNMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL2NyZWRlbnRpYWxzJyksIHF1ZXJ5KVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURvbWFpbkNyZWRlbnRpYWxzTGlzdChyZXMgYXMgRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZURhdGEpXG4gICAgICApO1xuICB9XG5cbiAgY3JlYXRlKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGRhdGE6IERvbWFpbkNyZWRlbnRpYWxzXG4gICk6IFByb21pc2U8RG9tYWluQ3JlZGVudGlhbHNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9JHtkb21haW59L2NyZWRlbnRpYWxzYCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZU1lc3NhZ2VSZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIHVwZGF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBjcmVkZW50aWFsc0xvZ2luOiBzdHJpbmcsXG4gICAgZGF0YTogVXBkYXRlRG9tYWluQ3JlZGVudGlhbHNEYXRhXG4gICk6IFByb21pc2U8RG9tYWluQ3JlZGVudGlhbHNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0ke2RvbWFpbn0vY3JlZGVudGlhbHMvJHtjcmVkZW50aWFsc0xvZ2lufWAsIGRhdGEpXG4gICAgICAudGhlbigocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VNZXNzYWdlUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICBkZXN0cm95KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGNyZWRlbnRpYWxzTG9naW46IHN0cmluZ1xuICApOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYCR7dGhpcy5iYXNlUm91dGV9JHtkb21haW59L2NyZWRlbnRpYWxzLyR7Y3JlZGVudGlhbHNMb2dpbn1gKVxuICAgICAgLnRoZW4oKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRGVsZXRlZFJlc3BvbnNlKHJlcykpO1xuICB9XG59XG4iLCJpbXBvcnQgQVBJRXJyb3JPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9BUElFcnJvck9wdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBUElFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgc3RhdHVzOiBudW1iZXIgfCBzdHJpbmc7XG4gIHN0YWNrOiBzdHJpbmc7XG4gIGRldGFpbHM6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgc3RhdHVzLFxuICAgIHN0YXR1c1RleHQsXG4gICAgbWVzc2FnZSxcbiAgICBib2R5ID0ge31cbiAgfTogQVBJRXJyb3JPcHRpb25zKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlOiBib2R5TWVzc2FnZSwgZXJyb3IgfSA9IGJvZHk7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8IGVycm9yIHx8IHN0YXR1c1RleHQ7XG4gICAgdGhpcy5kZXRhaWxzID0gYm9keU1lc3NhZ2U7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCB7XG4gIEV2ZW50c0xpc3QsIEV2ZW50c1BhZ2UsIEV2ZW50c1Jlc3BvbnNlLCBQYWdlc0xpc3QsIFBhZ2VzTGlzdEFjY3VtdWxhdG9yLCBQYXJzZWRQYWdlc0xpc3Rcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL0V2ZW50cyc7XG5cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50Q2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIF9wYXJzZVBhZ2VOdW1iZXIodXJsOiBzdHJpbmcpIDogc3RyaW5nIHtcbiAgICByZXR1cm4gdXJsLnNwbGl0KCcvJykucG9wKCk7XG4gIH1cblxuICBfcGFyc2VQYWdlKGlkOiBzdHJpbmcsIHVybDogc3RyaW5nKSA6IEV2ZW50c1BhZ2Uge1xuICAgIHJldHVybiB7IGlkLCBudW1iZXI6IHRoaXMuX3BhcnNlUGFnZU51bWJlcih1cmwpLCB1cmwgfTtcbiAgfVxuXG4gIF9wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZTogRXZlbnRzUmVzcG9uc2UpIDogUGFyc2VkUGFnZXNMaXN0IHtcbiAgICBjb25zdCBwYWdlcyA9IE9iamVjdC5lbnRyaWVzKHJlc3BvbnNlLmJvZHkucGFnaW5nIGFzIFBhZ2VzTGlzdCk7XG4gICAgcmV0dXJuIHBhZ2VzLnJlZHVjZShcbiAgICAgIChhY2M6IFBhZ2VzTGlzdEFjY3VtdWxhdG9yLCBlbnRyaWU6IFt1cmw6IHN0cmluZywgaWQ6IHN0cmluZ10pID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSBlbnRyaWVbMF07XG4gICAgICAgIGNvbnN0IHVybCA9IGVudHJpZVsxXTtcbiAgICAgICAgYWNjW2lkXSA9IHRoaXMuX3BhcnNlUGFnZShpZCwgdXJsKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9XG4gICAgKSBhcyB1bmtub3duIGFzIFBhcnNlZFBhZ2VzTGlzdDtcbiAgfVxuXG4gIF9wYXJzZUV2ZW50TGlzdChyZXNwb25zZTogRXZlbnRzUmVzcG9uc2UpIDogRXZlbnRzTGlzdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiByZXNwb25zZS5ib2R5Lml0ZW1zLFxuICAgICAgcGFnZXM6IHRoaXMuX3BhcnNlUGFnZUxpbmtzKHJlc3BvbnNlKVxuICAgIH07XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogeyBwYWdlOiBzdHJpbmcgfSkgOiBQcm9taXNlPEV2ZW50c0xpc3Q+IHtcbiAgICBsZXQgdXJsO1xuICAgIGNvbnN0IHF1ZXJ5Q29weSA9IHsgLi4ucXVlcnkgfTtcbiAgICBpZiAocXVlcnlDb3B5ICYmIHF1ZXJ5Q29weS5wYWdlKSB7XG4gICAgICB1cmwgPSB1cmxqb2luKCcvdjMnLCBkb21haW4sICdldmVudHMnLCBxdWVyeUNvcHkucGFnZSk7XG4gICAgICBkZWxldGUgcXVlcnlDb3B5LnBhZ2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVybCA9IHVybGpvaW4oJy92MycsIGRvbWFpbiwgJ2V2ZW50cycpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmwsIHF1ZXJ5Q29weSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogRXZlbnRzUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRXZlbnRMaXN0KHJlc3BvbnNlKSk7XG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuaW1wb3J0IHsgSXBQb29sLCBJcFBvb2xMaXN0UmVzcG9uc2UsIElwUG9vbFVwZGF0ZURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvSXBQb29scyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwUG9vbHNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgbGlzdChxdWVyeTogYW55KTogUHJvbWlzZTxJcFBvb2xbXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjEvaXBfcG9vbHMnLCBxdWVyeSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogSXBQb29sTGlzdFJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlSXBQb29sc1Jlc3BvbnNlKHJlc3BvbnNlKSk7XG4gIH1cblxuICBjcmVhdGUoZGF0YTogeyBuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nLCBpcHM/OiBzdHJpbmdbXSB9KSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKCcvdjEvaXBfcG9vbHMnLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiB7IGJvZHk6IHsgbWVzc2FnZTogc3RyaW5nLCBwb29sX2lkOiBzdHJpbmcgfSB9KSA9PiByZXNwb25zZT8uYm9keSk7XG4gIH1cblxuICB1cGRhdGUocG9vbElkOiBzdHJpbmcsIGRhdGE6IElwUG9vbFVwZGF0ZURhdGEpIDogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBhdGNoV2l0aEZEKGAvdjEvaXBfcG9vbHMvJHtwb29sSWR9YCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogeyBib2R5OiBhbnkgfSkgPT4gcmVzcG9uc2U/LmJvZHkpO1xuICB9XG5cbiAgZGVsZXRlKHBvb2xJZDogc3RyaW5nLCBkYXRhOiB7IGlkOiBzdHJpbmcsIHBvb2xfaWQ6IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYC92MS9pcF9wb29scy8ke3Bvb2xJZH1gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiB7IGJvZHk6IGFueSB9KSA9PiByZXNwb25zZT8uYm9keSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSXBQb29sc1Jlc3BvbnNlKHJlc3BvbnNlOiB7IGJvZHk6IGFueSB8IGFueSB9KSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHkuaXBfcG9vbHM7XG4gIH1cbn1cbiIsImltcG9ydCBNZ1JlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7IElwRGF0YSwgSXBzTGlzdFJlc3BvbnNlQm9keSB9IGZyb20gJy4vaW50ZXJmYWNlcy9JcHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJcHNDbGllbnQge1xuICByZXF1ZXN0OiBNZ1JlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogTWdSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIGxpc3QocXVlcnk6IGFueSkge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjMvaXBzJywgcXVlcnkpXG4gICAgICAudGhlbigocmVzcG9uc2U6IHsgYm9keTogSXBzTGlzdFJlc3BvbnNlQm9keSB9KSA9PiB0aGlzLnBhcnNlSXBzUmVzcG9uc2UocmVzcG9uc2UpKTtcbiAgfVxuXG4gIGdldChpcDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYC92My9pcHMvJHtpcH1gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiB7IGJvZHk6IElwRGF0YSB9KSA9PiB0aGlzLnBhcnNlSXBzUmVzcG9uc2UocmVzcG9uc2UpKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VJcHNSZXNwb25zZShyZXNwb25zZTogeyBib2R5OiBJcHNMaXN0UmVzcG9uc2VCb2R5IHwgSXBEYXRhIH0pIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7XG4gIExpc3RzUXVlcnksXG4gIENyZWF0ZVVwZGF0ZUxpc3QsXG4gIERlc3Ryb3llZExpc3QsXG4gIE1haWxpbmdMaXN0XG59IGZyb20gJy4vaW50ZXJmYWNlcy9saXN0cyc7XG5pbXBvcnQgeyBJTWFpbExpc3RzTWVtYmVycyB9IGZyb20gJy4vaW50ZXJmYWNlcy9tYWlsTGlzdE1lbWJlcnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaXN0c0NsaWVudCB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBtZW1iZXJzOiBJTWFpbExpc3RzTWVtYmVycztcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0LCBtZW1iZXJzOklNYWlsTGlzdHNNZW1iZXJzKSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmJhc2VSb3V0ZSA9ICcvdjMvbGlzdHMnO1xuICAgIHRoaXMubWVtYmVycyA9IG1lbWJlcnM7XG4gIH1cblxuICBsaXN0KHF1ZXJ5PzogTGlzdHNRdWVyeSk6IFByb21pc2U8TWFpbGluZ0xpc3RbXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS9wYWdlc2AsIHF1ZXJ5KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lml0ZW1zIGFzIE1haWxpbmdMaXN0W10pO1xuICB9XG5cbiAgZ2V0KG1haWxMaXN0QWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxNYWlsaW5nTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgY3JlYXRlKGRhdGE6IENyZWF0ZVVwZGF0ZUxpc3QpOiBQcm9taXNlPE1haWxpbmdMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHRoaXMuYmFzZVJvdXRlLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgdXBkYXRlKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBkYXRhOiBDcmVhdGVVcGRhdGVMaXN0KTogUHJvbWlzZTxNYWlsaW5nTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgZGVzdHJveShtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8RGVzdHJveWVkTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5IGFzIERlc3Ryb3llZExpc3QpO1xuICB9XG59XG4iLCJpbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHtcbiAgTWFpbExpc3RNZW1iZXJzUXVlcnksXG4gIElNYWlsTGlzdHNNZW1iZXJzLFxuICBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnMsXG4gIE1haWxMaXN0TWVtYmVyLFxuICBNdWx0aXBsZU1lbWJlcnNEYXRhLFxuICBNdWx0aXBsZU1lbWJlcnNSZXFEYXRhLFxuICBEZWxldGVkTWVtYmVyLFxuICBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnNSZXEsXG4gIE5ld011bHRpcGxlTWVtYmVyc1Jlc3BvbnNlXG59IGZyb20gJy4vaW50ZXJmYWNlcy9tYWlsTGlzdE1lbWJlcnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYWlsTGlzdHNNZW1iZXJzIGltcGxlbWVudHMgSU1haWxMaXN0c01lbWJlcnMge1xuICBiYXNlUm91dGU6IHN0cmluZztcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmJhc2VSb3V0ZSA9ICcvdjMvbGlzdHMnO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0FuZFVwZGF0ZURhdGEoZGF0YTogQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzKSB7XG4gICAgY29uc3QgbmV3RGF0YSA9IHsgLi4uZGF0YSB9O1xuXG4gICAgaWYgKHR5cGVvZiBkYXRhLnZhcnMgPT09ICdvYmplY3QnKSB7XG4gICAgICBuZXdEYXRhLnZhcnMgPSBKU09OLnN0cmluZ2lmeShuZXdEYXRhLnZhcnMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YS5zdWJzY3JpYmVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgIG5ld0RhdGEuc3Vic2NyaWJlZCA9IGRhdGEuc3Vic2NyaWJlZCA/ICd5ZXMnIDogJ25vJztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3RGF0YSBhcyBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnNSZXE7XG4gIH1cblxuICBsaXN0TWVtYmVycyhtYWlsTGlzdEFkZHJlc3M6IHN0cmluZywgcXVlcnk/OiBNYWlsTGlzdE1lbWJlcnNRdWVyeSk6IFByb21pc2U8TWFpbExpc3RNZW1iZXJbXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy9wYWdlc2AsIHF1ZXJ5KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lml0ZW1zIGFzIE1haWxMaXN0TWVtYmVyW10pO1xuICB9XG5cbiAgZ2V0TWVtYmVyKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBtYWlsTGlzdE1lbWJlckFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8TWFpbExpc3RNZW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMvJHttYWlsTGlzdE1lbWJlckFkZHJlc3N9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5tZW1iZXIgYXMgTWFpbExpc3RNZW1iZXIpO1xuICB9XG5cbiAgY3JlYXRlTWVtYmVyKFxuICAgIG1haWxMaXN0QWRkcmVzczogc3RyaW5nLFxuICAgIGRhdGE6IENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1xuICApOiBQcm9taXNlPE1haWxMaXN0TWVtYmVyPiB7XG4gICAgY29uc3QgcmVxRGF0YSA9IHRoaXMuY2hlY2tBbmRVcGRhdGVEYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnNgLCByZXFEYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lm1lbWJlciBhcyBNYWlsTGlzdE1lbWJlcik7XG4gIH1cblxuICBjcmVhdGVNZW1iZXJzKFxuICAgIG1haWxMaXN0QWRkcmVzczogc3RyaW5nLFxuICAgIGRhdGE6IE11bHRpcGxlTWVtYmVyc0RhdGFcbiAgKTogUHJvbWlzZTxOZXdNdWx0aXBsZU1lbWJlcnNSZXNwb25zZT4ge1xuICAgIGNvbnN0IG5ld0RhdGE6IE11bHRpcGxlTWVtYmVyc1JlcURhdGEgPSB7XG4gICAgICBtZW1iZXJzOiBBcnJheS5pc0FycmF5KGRhdGEubWVtYmVycykgPyBKU09OLnN0cmluZ2lmeShkYXRhLm1lbWJlcnMpIDogZGF0YS5tZW1iZXJzLFxuICAgICAgdXBzZXJ0OiBkYXRhLnVwc2VydFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzLmpzb25gLCBuZXdEYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5IGFzIE5ld011bHRpcGxlTWVtYmVyc1Jlc3BvbnNlKTtcbiAgfVxuXG4gIHVwZGF0ZU1lbWJlcihcbiAgICBtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyxcbiAgICBtYWlsTGlzdE1lbWJlckFkZHJlc3M6IHN0cmluZyxcbiAgICBkYXRhOiBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnNcbiAgKTogUHJvbWlzZTxNYWlsTGlzdE1lbWJlcj4ge1xuICAgIGNvbnN0IHJlcURhdGEgPSB0aGlzLmNoZWNrQW5kVXBkYXRlRGF0YShkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMvJHttYWlsTGlzdE1lbWJlckFkZHJlc3N9YCwgcmVxRGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5tZW1iZXIgYXMgTWFpbExpc3RNZW1iZXIpO1xuICB9XG5cbiAgZGVzdHJveU1lbWJlcihtYWlsTGlzdEFkZHJlc3M6IHN0cmluZywgbWFpbExpc3RNZW1iZXJBZGRyZXNzOiBzdHJpbmcpIDogUHJvbWlzZTxEZWxldGVkTWVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzLyR7bWFpbExpc3RNZW1iZXJBZGRyZXNzfWApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkgYXMgRGVsZXRlZE1lbWJlcik7XG4gIH1cbn1cbiIsImltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lc3NhZ2VzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIF9wYXJzZVJlc3BvbnNlKHJlc3BvbnNlOiB7IGJvZHk6IGFueSB9KSB7XG4gICAgaWYgKHJlc3BvbnNlLmJvZHkpIHtcbiAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIGNyZWF0ZShkb21haW46IHN0cmluZywgZGF0YTogYW55KSB7XG4gICAgaWYgKGRhdGEubWVzc2FnZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAvdjMvJHtkb21haW59L21lc3NhZ2VzLm1pbWVgLCBkYXRhKVxuICAgICAgICAudGhlbih0aGlzLl9wYXJzZVJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYC92My8ke2RvbWFpbn0vbWVzc2FnZXNgLCBkYXRhKVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VSZXNwb25zZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIENhbmNlbGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iLFxuICBDcmVhdGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iLFxuICBJTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50LFxuICBNdWx0aXBsZVZhbGlkYXRpb25Kb2IsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzdWx0XG59XG4gIGZyb20gJy4vaW50ZXJmYWNlcy9NdWx0aXBsZVZhbGlkYXRpb24nO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IGltcGxlbWVudHMgSU11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBsaXN0KCk6IFByb21pc2U8TXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3Y0L2FkZHJlc3MvdmFsaWRhdGUvYnVsaycpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkgYXMgTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQpO1xuICB9XG5cbiAgZ2V0KGxpc3RJZDogc3RyaW5nKTogUHJvbWlzZTxNdWx0aXBsZVZhbGlkYXRpb25Kb2I+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgL3Y0L2FkZHJlc3MvdmFsaWRhdGUvYnVsay8ke2xpc3RJZH1gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5KTtcbiAgfVxuXG4gIGNyZWF0ZShsaXN0SWQ6IHN0cmluZywgZmlsZTogYW55KTogUHJvbWlzZTxDcmVhdGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrLyR7bGlzdElkfWAsIGZpbGUpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkpO1xuICB9XG5cbiAgZGVzdHJveShsaXN0SWQ6IHN0cmluZyk6IFByb21pc2U8Q2FuY2VsZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2I+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgL3Y0L2FkZHJlc3MvdmFsaWRhdGUvYnVsay8ke2xpc3RJZH1gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZSk7XG4gIH1cbn1cbiIsImltcG9ydCBOb2RlRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCBiYXNlNjQgZnJvbSAnYmFzZS02NCc7XG5pbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQga3kgZnJvbSAna3ktdW5pdmVyc2FsJztcbmltcG9ydCBBUElFcnJvciBmcm9tICcuL2Vycm9yJztcbmltcG9ydCBSZXF1ZXN0T3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvUmVxdWVzdE9wdGlvbnMnO1xuaW1wb3J0IEFQSUVycm9yT3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvQVBJRXJyb3JPcHRpb25zJztcbmltcG9ydCB7IElucHV0Rm9ybURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvSUZvcm1EYXRhJztcbmltcG9ydCBBUElSZXNwb25zZSBmcm9tICcuL2ludGVyZmFjZXMvQXBpUmVzcG9uc2UnO1xuXG5jb25zdCBpc1N0cmVhbSA9IChhdHRhY2htZW50OiBhbnkpID0+IHR5cGVvZiBhdHRhY2htZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgYXR0YWNobWVudC5waXBlID09PSAnZnVuY3Rpb24nO1xuXG5mdW5jdGlvbiBpc05vZGVGb3JtRGF0YShmb3JtRGF0YUluc3RhbmNlOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YSlcbiAgOiBmb3JtRGF0YUluc3RhbmNlIGlzIE5vZGVGb3JtRGF0YSB7XG4gIHJldHVybiAoPE5vZGVGb3JtRGF0YT5mb3JtRGF0YUluc3RhbmNlKS5nZXRIZWFkZXJzICE9PSB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IGdldEF0dGFjaG1lbnRPcHRpb25zID0gKGl0ZW06IGFueSk6IHtcbiAgZmlsZW5hbWU/OiBzdHJpbmcsXG4gIGNvbnRlbnRUeXBlPzogc3RyaW5nLFxuICBrbm93bkxlbmd0aD86IG51bWJlclxufSA9PiB7XG4gIGlmICh0eXBlb2YgaXRlbSAhPT0gJ29iamVjdCcgfHwgaXNTdHJlYW0oaXRlbSkpIHJldHVybiB7fTtcblxuICBjb25zdCB7XG4gICAgZmlsZW5hbWUsXG4gICAgY29udGVudFR5cGUsXG4gICAga25vd25MZW5ndGhcbiAgfSA9IGl0ZW07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi4oZmlsZW5hbWUgPyB7IGZpbGVuYW1lIH0gOiB7IGZpbGVuYW1lOiAnZmlsZScgfSksXG4gICAgLi4uKGNvbnRlbnRUeXBlICYmIHsgY29udGVudFR5cGUgfSksXG4gICAgLi4uKGtub3duTGVuZ3RoICYmIHsga25vd25MZW5ndGggfSlcbiAgfTtcbn07XG5cbmNvbnN0IHN0cmVhbVRvU3RyaW5nID0gKHN0cmVhbTogYW55KSA9PiB7XG4gIGNvbnN0IGNodW5rczogYW55ID0gW107XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc3RyZWFtLm9uKCdkYXRhJywgKGNodW5rOiBhbnkpID0+IGNodW5rcy5wdXNoKGNodW5rKSk7XG4gICAgc3RyZWFtLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gICAgc3RyZWFtLm9uKCdlbmQnLCAoKSA9PiByZXNvbHZlKEJ1ZmZlci5jb25jYXQoY2h1bmtzKS50b1N0cmluZygndXRmOCcpKSk7XG4gIH0pO1xufTtcblxuY2xhc3MgUmVxdWVzdCB7XG4gIHByaXZhdGUgdXNlcm5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBrZXk6IHN0cmluZztcbiAgcHJpdmF0ZSB1cmw6IHN0cmluZztcbiAgcHJpdmF0ZSB0aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgaGVhZGVyczogYW55O1xuICBwcml2YXRlIEZvcm1EYXRhQ29uc3RydWN0b3I6IElucHV0Rm9ybURhdGE7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogUmVxdWVzdE9wdGlvbnMsIGZvcm1EYXRhOiBJbnB1dEZvcm1EYXRhKSB7XG4gICAgdGhpcy51c2VybmFtZSA9IG9wdGlvbnMudXNlcm5hbWU7XG4gICAgdGhpcy5rZXkgPSBvcHRpb25zLmtleTtcbiAgICB0aGlzLnVybCA9IG9wdGlvbnMudXJsIGFzIHN0cmluZztcbiAgICB0aGlzLnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQ7XG4gICAgdGhpcy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgIHRoaXMuRm9ybURhdGFDb25zdHJ1Y3RvciA9IGZvcm1EYXRhO1xuICB9XG5cbiAgYXN5bmMgcmVxdWVzdChtZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcsIGlucHV0T3B0aW9ucz86IGFueSk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBjb25zdCBvcHRpb25zID0geyAuLi5pbnB1dE9wdGlvbnMgfTtcbiAgICBjb25zdCBiYXNpYyA9IGJhc2U2NC5lbmNvZGUoYCR7dGhpcy51c2VybmFtZX06JHt0aGlzLmtleX1gKTtcbiAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWN9YCxcbiAgICAgIC4uLnRoaXMuaGVhZGVycyxcbiAgICAgIC4uLm9wdGlvbnM/LmhlYWRlcnNcbiAgICB9O1xuXG4gICAgZGVsZXRlIG9wdGlvbnM/LmhlYWRlcnM7XG5cbiAgICBpZiAoIWhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSB7XG4gICAgICAvLyBmb3IgZm9ybS1kYXRhIGl0IHdpbGwgYmUgTnVsbCBzbyB3ZSBuZWVkIHRvIHJlbW92ZSBpdFxuICAgICAgZGVsZXRlIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4ub3B0aW9ucyB9O1xuXG4gICAgaWYgKG9wdGlvbnM/LnF1ZXJ5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9wdGlvbnM/LnF1ZXJ5KS5sZW5ndGggPiAwKSB7XG4gICAgICBwYXJhbXMuc2VhcmNoUGFyYW1zID0gb3B0aW9ucy5xdWVyeTtcbiAgICAgIGRlbGV0ZSBwYXJhbXMucXVlcnk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBreShcbiAgICAgIHVybGpvaW4odGhpcy51cmwsIHVybCksXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogbWV0aG9kLnRvTG9jYWxlVXBwZXJDYXNlKCksXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHRocm93SHR0cEVycm9yczogZmFsc2UsXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgLi4ucGFyYW1zXG4gICAgICB9XG4gICAgKTtcblxuICAgIGlmICghcmVzcG9uc2U/Lm9rKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gcmVzcG9uc2U/LmJvZHkgJiYgaXNTdHJlYW0ocmVzcG9uc2UuYm9keSlcbiAgICAgICAgPyBhd2FpdCBzdHJlYW1Ub1N0cmluZyhyZXNwb25zZS5ib2R5KVxuICAgICAgICA6IGF3YWl0IHJlc3BvbnNlPy5qc29uKCk7XG5cbiAgICAgIHRocm93IG5ldyBBUElFcnJvcih7XG4gICAgICAgIHN0YXR1czogcmVzcG9uc2U/LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2U/LnN0YXR1c1RleHQsXG4gICAgICAgIGJvZHk6IHsgbWVzc2FnZSB9XG4gICAgICB9IGFzIEFQSUVycm9yT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzID0ge1xuICAgICAgYm9keTogYXdhaXQgcmVzcG9uc2U/Lmpzb24oKSxcbiAgICAgIHN0YXR1czogcmVzcG9uc2U/LnN0YXR1c1xuICAgIH07XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcXVlcnkobWV0aG9kOiBzdHJpbmcsIHVybDogc3RyaW5nLCBxdWVyeTogYW55LCBvcHRpb25zPzogYW55KSA6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1ldGhvZCwgdXJsLCB7IHF1ZXJ5LCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgY29tbWFuZChtZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcsIGRhdGE6IGFueSwgb3B0aW9ucz86IGFueSkgOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXRob2QsIHVybCwge1xuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgfSxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSk7XG4gIH1cblxuICBnZXQodXJsOiBzdHJpbmcsIHF1ZXJ5PzogYW55LCBvcHRpb25zPzogYW55KSA6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeSgnZ2V0JywgdXJsLCBxdWVyeSwgb3B0aW9ucyk7XG4gIH1cblxuICBoZWFkKHVybDogc3RyaW5nLCBxdWVyeTogYW55LCBvcHRpb25zOiBhbnkpIDogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5KCdoZWFkJywgdXJsLCBxdWVyeSwgb3B0aW9ucyk7XG4gIH1cblxuICBvcHRpb25zKHVybDogc3RyaW5nLCBxdWVyeTogYW55LCBvcHRpb25zOiBhbnkpIDogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5KCdvcHRpb25zJywgdXJsLCBxdWVyeSwgb3B0aW9ucyk7XG4gIH1cblxuICBwb3N0KHVybDogc3RyaW5nLCBkYXRhOiBhbnksIG9wdGlvbnM/OiBhbnkpIDogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3Bvc3QnLCB1cmwsIGRhdGEsIG9wdGlvbnMpO1xuICB9XG5cbiAgcG9zdFdpdGhGRCh1cmw6IHN0cmluZywgZGF0YTogYW55KTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGlmICghZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgcHJvdmlkZSBkYXRhIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6IG51bGwgfVxuICAgIH07XG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmNyZWF0ZUZvcm1EYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3Bvc3QnLCB1cmwsIGZvcm1EYXRhLCBwYXJhbXMpO1xuICB9XG5cbiAgcHV0V2l0aEZEKHVybDogc3RyaW5nLCBkYXRhOiBhbnkpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBwcm92aWRlIGRhdGEgb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogbnVsbCB9XG4gICAgfTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuY3JlYXRlRm9ybURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncHV0JywgdXJsLCBmb3JtRGF0YSwgcGFyYW1zKTtcbiAgfVxuXG4gIHBhdGNoV2l0aEZEKHVybDogc3RyaW5nLCBkYXRhOiBhbnkpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBwcm92aWRlIGRhdGEgb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogbnVsbCB9XG4gICAgfTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuY3JlYXRlRm9ybURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncGF0Y2gnLCB1cmwsIGZvcm1EYXRhLCBwYXJhbXMpO1xuICB9XG5cbiAgY3JlYXRlRm9ybURhdGEoZGF0YTogYW55KTogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGEge1xuICAgIGNvbnN0IGZvcm1EYXRhOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YSA9IE9iamVjdC5rZXlzKGRhdGEpXG4gICAgICAuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGRhdGFba2V5XTsgfSlcbiAgICAgIC5yZWR1Y2UoKGZvcm1EYXRhQWNjOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YSwga2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVLZXlzID0gWydhdHRhY2htZW50JywgJ2lubGluZScsICdmaWxlJ107XG4gICAgICAgIGlmIChmaWxlS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgdGhpcy5hZGRGaWxlc1RvRkQoa2V5LCBkYXRhW2tleV0sIGZvcm1EYXRhQWNjKTtcbiAgICAgICAgICByZXR1cm4gZm9ybURhdGFBY2M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ID09PSAnbWVzc2FnZScpIHsgLy8gbWltZSBtZXNzYWdlXG4gICAgICAgICAgdGhpcy5hZGRNaW1lRGF0YVRvRkQoa2V5LCBkYXRhW2tleV0sIGZvcm1EYXRhQWNjKTtcbiAgICAgICAgICByZXR1cm4gZm9ybURhdGFBY2M7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZENvbW1vblByb3BlcnR5VG9GRChrZXksIGRhdGFba2V5XSwgZm9ybURhdGFBY2MpO1xuICAgICAgICByZXR1cm4gZm9ybURhdGFBY2M7XG4gICAgICB9LCBuZXcgdGhpcy5Gb3JtRGF0YUNvbnN0cnVjdG9yKCkpO1xuICAgIHJldHVybiBmb3JtRGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkTWltZURhdGFUb0ZEKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGRhdGE6IEJ1ZmZlciB8IEJsb2IsXG4gICAgZm9ybURhdGFJbnN0YW5jZTogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGFcbiAgKTogdm9pZCB7XG4gICAgaWYgKGlzTm9kZUZvcm1EYXRhKGZvcm1EYXRhSW5zdGFuY2UpKSB7XG4gICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgICAgIGZvcm1EYXRhSW5zdGFuY2UuYXBwZW5kKGtleSwgZGF0YSwgeyBmaWxlbmFtZTogJ01pbWVNZXNzYWdlJyB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybURhdGFJbnN0YW5jZS5hcHBlbmQoa2V5LCBkYXRhIGFzIEJsb2IsICdNaW1lTWVzc2FnZScpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkRmlsZXNUb0ZEKFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnksXG4gICAgZm9ybURhdGFJbnN0YW5jZTogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGFcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgYXBwZW5kRmlsZVRvRkQgPSAoXG4gICAgICBrZXk6IHN0cmluZyxcbiAgICAgIG9iajogYW55LFxuICAgICAgZm9ybURhdGE6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhXG4gICAgKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBpc1N0cmVhbURhdGEgPSBpc1N0cmVhbShvYmopO1xuICAgICAgY29uc3Qgb2JqRGF0YSA9IGlzU3RyZWFtRGF0YSA/IG9iaiA6IG9iai5kYXRhO1xuICAgICAgLy8gZ2V0QXR0YWNobWVudE9wdGlvbnMgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIG9iaiBwYXJhbWV0ZXIgdG8gcHJldmVudCBsb29zaW5nIGZpbGVuYW1lXG4gICAgICBjb25zdCBvcHRpb25zID0gZ2V0QXR0YWNobWVudE9wdGlvbnMob2JqKTtcbiAgICAgIGlmIChpc05vZGVGb3JtRGF0YShmb3JtRGF0YSkpIHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgb2JqRGF0YSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIG9iakRhdGEsIG9wdGlvbnMuZmlsZW5hbWUpO1xuICAgIH07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgYXBwZW5kRmlsZVRvRkQocHJvcGVydHlOYW1lLCBpdGVtLCBmb3JtRGF0YUluc3RhbmNlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRGaWxlVG9GRChwcm9wZXJ0eU5hbWUsIHZhbHVlLCBmb3JtRGF0YUluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZENvbW1vblByb3BlcnR5VG9GRChcbiAgICBrZXk6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIGZvcm1EYXRhQWNjOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICApOiB2b2lkIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW06IGFueSkge1xuICAgICAgICBmb3JtRGF0YUFjYy5hcHBlbmQoa2V5LCBpdGVtKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgZm9ybURhdGFBY2MuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1dCh1cmw6IHN0cmluZywgZGF0YTogYW55LCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3B1dCcsIHVybCwgZGF0YSwgb3B0aW9ucyk7XG4gIH1cblxuICBwYXRjaCh1cmw6IHN0cmluZywgZGF0YTogYW55LCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3BhdGNoJywgdXJsLCBkYXRhLCBvcHRpb25zKTtcbiAgfVxuXG4gIGRlbGV0ZSh1cmw6IHN0cmluZywgZGF0YT86IGFueSwgb3B0aW9ucz86IGFueSk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdkZWxldGUnLCB1cmwsIGRhdGEsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3Q7XG4iLCJpbXBvcnQge1xuICBDcmVhdGVVcGRhdGVSb3V0ZURhdGEsIERlc3Ryb3lSb3V0ZVJlc3BvbnNlLCBSb3V0ZSwgUm91dGVzTGlzdFF1ZXJ5LCBVcGRhdGVSb3V0ZVJlc3BvbnNlXG59IGZyb20gJy4vaW50ZXJmYWNlcy9yb3V0ZXMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm91dGVzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIGxpc3QocXVlcnk6IFJvdXRlc0xpc3RRdWVyeSk6IFByb21pc2U8Um91dGVbXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjMvcm91dGVzJywgcXVlcnkpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkuaXRlbXMpO1xuICB9XG5cbiAgZ2V0KGlkOiBzdHJpbmcpOiBQcm9taXNlPFJvdXRlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYC92My9yb3V0ZXMvJHtpZH1gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5LnJvdXRlKTtcbiAgfVxuXG4gIGNyZWF0ZShkYXRhOiBDcmVhdGVVcGRhdGVSb3V0ZURhdGEpOiBQcm9taXNlPFJvdXRlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKCcvdjMvcm91dGVzJywgZGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5yb3V0ZSk7XG4gIH1cblxuICB1cGRhdGUoaWQ6IHN0cmluZywgZGF0YTogQ3JlYXRlVXBkYXRlUm91dGVEYXRhKTogUHJvbWlzZTxVcGRhdGVSb3V0ZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQoYC92My9yb3V0ZXMvJHtpZH1gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5KTtcbiAgfVxuXG4gIGRlc3Ryb3koaWQ6IHN0cmluZyk6IFByb21pc2U8RGVzdHJveVJvdXRlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgL3YzL3JvdXRlcy8ke2lkfWApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkpO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHsgU3RhdHNRdWVyeSwgU3RhdHNPcHRpb25zLCBTdGF0IH0gZnJvbSAnLi9pbnRlcmZhY2VzL1N0YXRzT3B0aW9ucyc7XG5cbmNsYXNzIFN0YXRzIHtcbiAgc3RhcnQ6IERhdGU7XG4gIGVuZDogRGF0ZTtcbiAgcmVzb2x1dGlvbjogc3RyaW5nO1xuICBzdGF0czogU3RhdFtdO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFN0YXRzT3B0aW9ucykge1xuICAgIHRoaXMuc3RhcnQgPSBuZXcgRGF0ZShkYXRhLnN0YXJ0KTtcbiAgICB0aGlzLmVuZCA9IG5ldyBEYXRlKGRhdGEuZW5kKTtcbiAgICB0aGlzLnJlc29sdXRpb24gPSBkYXRhLnJlc29sdXRpb247XG4gICAgdGhpcy5zdGF0cyA9IGRhdGEuc3RhdHMubWFwKGZ1bmN0aW9uIChzdGF0OiBTdGF0KSB7XG4gICAgICBjb25zdCByZXMgPSB7IC4uLnN0YXQgfTtcbiAgICAgIHJlcy50aW1lID0gbmV3IERhdGUoc3RhdC50aW1lKTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdHNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlU2VhcmNoUGFyYW1zKHF1ZXJ5OiBTdGF0c1F1ZXJ5KTogQXJyYXk8QXJyYXk8c3RyaW5nPj4ge1xuICAgIGxldCBzZWFyY2hQYXJhbXMgPSBbXTtcbiAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhxdWVyeSkubGVuZ3RoKSB7XG4gICAgICBzZWFyY2hQYXJhbXMgPSBPYmplY3QuZW50cmllcyhxdWVyeSkucmVkdWNlKChhcnJheVdpdGhQYWlycywgY3VycmVudFBhaXIpID0+IHtcbiAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gY3VycmVudFBhaXI7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCByZXBlYXRlZFByb3BlcnR5ID0gdmFsdWUubWFwKChpdGVtKSA9PiBba2V5LCBpdGVtXSk7XG4gICAgICAgICAgcmV0dXJuIFsuLi5hcnJheVdpdGhQYWlycywgLi4ucmVwZWF0ZWRQcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICAgICAgYXJyYXlXaXRoUGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgICByZXR1cm4gYXJyYXlXaXRoUGFpcnM7XG4gICAgICB9LCBbXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlYXJjaFBhcmFtcztcbiAgfVxuXG4gIF9wYXJzZVN0YXRzKHJlc3BvbnNlOiB7IGJvZHk6IFN0YXRzT3B0aW9ucyB9KTogU3RhdHMge1xuICAgIHJldHVybiBuZXcgU3RhdHMocmVzcG9uc2UuYm9keSk7XG4gIH1cblxuICBnZXREb21haW4oZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogU3RhdHNRdWVyeSk6IFByb21pc2U8U3RhdHM+IHtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB0aGlzLnByZXBhcmVTZWFyY2hQYXJhbXMocXVlcnkpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92MycsIGRvbWFpbiwgJ3N0YXRzL3RvdGFsJyksIHNlYXJjaFBhcmFtcylcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlU3RhdHMpO1xuICB9XG5cbiAgZ2V0QWNjb3VudChxdWVyeT86IFN0YXRzUXVlcnkpOiBQcm9taXNlPFN0YXRzPiB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdGhpcy5wcmVwYXJlU2VhcmNoUGFyYW1zKHF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3YzL3N0YXRzL3RvdGFsJywgc2VhcmNoUGFyYW1zKVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VTdGF0cyk7XG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuaW1wb3J0IHVybCBmcm9tICd1cmwnO1xuaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHtcbiAgQm91bmNlRGF0YSxcbiAgQ29tcGxhaW50RGF0YSxcbiAgVW5zdWJzY3JpYmVEYXRhLFxuICBXaGl0ZUxpc3REYXRhXG59IGZyb20gJy4vaW50ZXJmYWNlcy9TdXByZXNzaW9ucyc7XG5cbmNvbnN0IGNyZWF0ZU9wdGlvbnMgPSB7XG4gIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9XG59O1xuXG5jbGFzcyBCb3VuY2Uge1xuICB0eXBlOiBzdHJpbmc7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY29kZTogbnVtYmVyO1xuICBlcnJvcjogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IEJvdW5jZURhdGEpIHtcbiAgICB0aGlzLnR5cGUgPSAnYm91bmNlcyc7XG4gICAgdGhpcy5hZGRyZXNzID0gZGF0YS5hZGRyZXNzO1xuICAgIHRoaXMuY29kZSA9ICtkYXRhLmNvZGU7XG4gICAgdGhpcy5lcnJvciA9IGRhdGEuZXJyb3I7XG4gICAgdGhpcy5jcmVhdGVkX2F0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KTtcbiAgfVxufVxuXG5jbGFzcyBDb21wbGFpbnQge1xuICB0eXBlOiBzdHJpbmc7XG4gIGFkZHJlc3M6IGFueTtcbiAgY3JlYXRlZF9hdDogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBDb21wbGFpbnREYXRhKSB7XG4gICAgdGhpcy50eXBlID0gJ2NvbXBsYWludHMnO1xuICAgIHRoaXMuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcztcbiAgICB0aGlzLmNyZWF0ZWRfYXQgPSBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQpO1xuICB9XG59XG5cbmNsYXNzIFVuc3Vic2NyaWJlIHtcbiAgdHlwZTogc3RyaW5nO1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIHRhZ3M6IGFueTtcbiAgY3JlYXRlZF9hdDogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBVbnN1YnNjcmliZURhdGEpIHtcbiAgICB0aGlzLnR5cGUgPSAndW5zdWJzY3JpYmVzJztcbiAgICB0aGlzLmFkZHJlc3MgPSBkYXRhLmFkZHJlc3M7XG4gICAgdGhpcy50YWdzID0gZGF0YS50YWdzO1xuICAgIHRoaXMuY3JlYXRlZF9hdCA9IG5ldyBEYXRlKGRhdGEuY3JlYXRlZF9hdCk7XG4gIH1cbn1cblxuY2xhc3MgV2hpdGVMaXN0IHtcbiAgdHlwZTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICByZWFzb246IHN0cmluZztcbiAgY3JlYXRlZEF0OiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFdoaXRlTGlzdERhdGEpIHtcbiAgICB0aGlzLnR5cGUgPSAnd2hpdGVsaXN0cyc7XG4gICAgdGhpcy52YWx1ZSA9IGRhdGEudmFsdWU7XG4gICAgdGhpcy5yZWFzb24gPSBkYXRhLnJlYXNvbjtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IG5ldyBEYXRlKGRhdGEuY3JlYXRlZEF0KTtcbiAgfVxufVxuXG50eXBlIFRNb2RlbCA9IHR5cGVvZiBCb3VuY2UgfCB0eXBlb2YgQ29tcGxhaW50IHwgdHlwZW9mIFVuc3Vic2NyaWJlIHwgdHlwZW9mIFdoaXRlTGlzdDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3VwcHJlc3Npb25DbGllbnQge1xuICByZXF1ZXN0OiBhbnk7XG4gIG1vZGVsczoge1xuICAgIGJvdW5jZXM6IHR5cGVvZiBCb3VuY2U7XG4gICAgY29tcGxhaW50czogdHlwZW9mIENvbXBsYWludDtcbiAgICB1bnN1YnNjcmliZXM6IHR5cGVvZiBVbnN1YnNjcmliZTtcbiAgICB3aGl0ZWxpc3RzOiB0eXBlb2YgV2hpdGVMaXN0O1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubW9kZWxzID0ge1xuICAgICAgYm91bmNlczogQm91bmNlLFxuICAgICAgY29tcGxhaW50czogQ29tcGxhaW50LFxuICAgICAgdW5zdWJzY3JpYmVzOiBVbnN1YnNjcmliZSxcbiAgICAgIHdoaXRlbGlzdHM6IFdoaXRlTGlzdCxcbiAgICB9O1xuICB9XG5cbiAgX3BhcnNlUGFnZShpZDogc3RyaW5nLCBwYWdlVXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJzZWRVcmwgPSB1cmwucGFyc2UocGFnZVVybCwgdHJ1ZSk7XG4gICAgY29uc3QgeyBxdWVyeSB9ID0gcGFyc2VkVXJsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgcGFnZTogcXVlcnkucGFnZSxcbiAgICAgIGFkZHJlc3M6IHF1ZXJ5LmFkZHJlc3MsXG4gICAgICB1cmw6IHBhZ2VVcmxcbiAgICB9O1xuICB9XG5cbiAgX3BhcnNlUGFnZUxpbmtzKHJlc3BvbnNlOiB7IGJvZHk6IHsgcGFnaW5nOiBhbnkgfSB9KSB7XG4gICAgY29uc3QgcGFnZXMgPSBPYmplY3QuZW50cmllcyhyZXNwb25zZS5ib2R5LnBhZ2luZyk7XG4gICAgcmV0dXJuIHBhZ2VzLnJlZHVjZShcbiAgICAgIChhY2M6IGFueSwgW2lkLCBwYWdlVXJsXTogW3BhZ2VVcmw6IHN0cmluZywgaWQ6IHN0cmluZ10pID0+IHtcbiAgICAgICAgYWNjW2lkXSA9IHRoaXMuX3BhcnNlUGFnZShpZCwgcGFnZVVybCk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fVxuICAgICk7XG4gIH1cblxuICBfcGFyc2VMaXN0KHJlc3BvbnNlOiB7IGJvZHk6IHsgaXRlbXM6IGFueSwgcGFnaW5nOiBhbnkgfSB9LCBNb2RlbDogVE1vZGVsKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIGFueTtcblxuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zLm1hcCgoZDogYW55KSA9PiBuZXcgTW9kZWwoZCkpO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMuX3BhcnNlUGFnZUxpbmtzKHJlc3BvbnNlKTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgX3BhcnNlSXRlbShyZXNwb25zZTogeyBib2R5OiBhbnkgfSwgTW9kZWw6IFRNb2RlbCkge1xuICAgIHJldHVybiBuZXcgTW9kZWwocmVzcG9uc2UuYm9keSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVdoaXRlTGlzdChkb21haW46IHN0cmluZywgZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLnBvc3RXaXRoRkQodXJsam9pbigndjMnLCBkb21haW4sICd3aGl0ZWxpc3RzJyksIGRhdGEsIGNyZWF0ZU9wdGlvbnMpXG4gICAgICAudGhlbigocmVzcG9uc2U6IHsgYm9keTogYW55IH0pID0+IHJlc3BvbnNlLmJvZHkpO1xuICB9XG5cbiAgbGlzdChkb21haW46IHN0cmluZywgdHlwZTogc3RyaW5nLCBxdWVyeTogYW55KSB7XG4gICAgY29uc3QgbW9kZWwgPSAodGhpcy5tb2RlbHMgYXMgYW55KVt0eXBlXTtcblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5nZXQodXJsam9pbigndjMnLCBkb21haW4sIHR5cGUpLCBxdWVyeSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogeyBib2R5OiB7IGl0ZW1zOiBhbnksIHBhZ2luZzogYW55IH0gfSkgPT4gdGhpcy5fcGFyc2VMaXN0KHJlc3BvbnNlLCBtb2RlbCkpO1xuICB9XG5cbiAgZ2V0KGRvbWFpbjogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIGFkZHJlc3M6IHN0cmluZykge1xuICAgIGNvbnN0IG1vZGVsID0gKHRoaXMubW9kZWxzIGFzIGFueSlbdHlwZV07XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0XG4gICAgICAuZ2V0KHVybGpvaW4oJ3YzJywgZG9tYWluLCB0eXBlLCBlbmNvZGVVUklDb21wb25lbnQoYWRkcmVzcykpKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiB7IGJvZHk6IGFueSB9KSA9PiB0aGlzLl9wYXJzZUl0ZW0ocmVzcG9uc2UsIG1vZGVsKSk7XG4gIH1cblxuICBjcmVhdGUoZG9tYWluOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgZGF0YTogYW55KSB7XG4gICAgLy8gc3VwcG9ydHMgYWRkaW5nIG11bHRpcGxlIHN1cHByZXNzaW9ucyBieSBkZWZhdWx0XG4gICAgbGV0IHBvc3REYXRhO1xuICAgIGlmICh0eXBlID09PSAnd2hpdGVsaXN0cycpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVdoaXRlTGlzdChkb21haW4sIGRhdGEpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgcG9zdERhdGEgPSBbZGF0YV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvc3REYXRhID0gWy4uLmRhdGFdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5wb3N0KHVybGpvaW4oJ3YzJywgZG9tYWluLCB0eXBlKSwgSlNPTi5zdHJpbmdpZnkocG9zdERhdGEpLCBjcmVhdGVPcHRpb25zKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiB7IGJvZHk6IGFueSB9KSA9PiByZXNwb25zZS5ib2R5KTtcbiAgfVxuXG4gIGRlc3Ryb3koZG9tYWluOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgYWRkcmVzczogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLmRlbGV0ZSh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSwgZW5jb2RlVVJJQ29tcG9uZW50KGFkZHJlc3MpKSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogeyBib2R5OiBhbnkgfSkgPT4gcmVzcG9uc2UuYm9keSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTdXBwcmVzc2lvbkNsaWVudDtcbiIsImltcG9ydCBBUElSZXNwb25zZSBmcm9tICcuL2ludGVyZmFjZXMvQXBpUmVzcG9uc2UnO1xuaW1wb3J0IHsgSU11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9NdWx0aXBsZVZhbGlkYXRpb24nO1xuaW1wb3J0IHsgVmFsaWRhdGlvblJlc3VsdCwgVmFsaWRhdGlvblJlc3BvbnNlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL1ZhbGlkYXRlJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZhbGlkYXRlQ2xpZW50IHtcbiAgcHVibGljIG11bHRpcGxlVmFsaWRhdGlvbjtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0LCBtdWx0aXBsZVZhbGlkYXRpb25DbGllbnQ6IElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubXVsdGlwbGVWYWxpZGF0aW9uID0gbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50O1xuICB9XG5cbiAgZ2V0KGFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjQvYWRkcmVzcy92YWxpZGF0ZScsIHsgYWRkcmVzcyB9KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlIDogQVBJUmVzcG9uc2UpID0+IHJlc3BvbnNlKVxuICAgICAgLnRoZW4oKHJlcyA6IFZhbGlkYXRpb25SZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgVmFsaWRhdGlvblJlc3VsdCk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcblxuaW1wb3J0IHtcbiAgVmFsaWRhdGlvblJlc3BvbnNlLFxuICBXZWJob29rTGlzdCxcbiAgV2ViaG9va1Jlc3BvbnNlLFxuICBXZWJob29rc1F1ZXJ5XG59IGZyb20gJy4vaW50ZXJmYWNlcy9XZWJob29rcyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5jbGFzcyBXZWJob29rIHtcbiAgaWQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgdXJsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViaG9va0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBfcGFyc2VXZWJob29rTGlzdChyZXNwb25zZTogeyBib2R5OiB7IHdlYmhvb2tzOiBXZWJob29rTGlzdCB9IH0pOiBXZWJob29rTGlzdCB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHkud2ViaG9va3M7XG4gIH1cblxuICBfcGFyc2VXZWJob29rV2l0aElEKGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc3BvbnNlOiBXZWJob29rUmVzcG9uc2UpOiBXZWJob29rIHtcbiAgICAgIGNvbnN0IHdlYmhvb2tSZXNwb25zZSA9IHJlc3BvbnNlPy5ib2R5Py53ZWJob29rO1xuICAgICAgbGV0IHVybCA9IHdlYmhvb2tSZXNwb25zZT8udXJsO1xuICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgdXJsID0gd2ViaG9va1Jlc3BvbnNlPy51cmxzICYmIHdlYmhvb2tSZXNwb25zZS51cmxzLmxlbmd0aCA/IHdlYmhvb2tSZXNwb25zZS51cmxzWzBdIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgV2ViaG9vayhpZCwgdXJsKTtcbiAgICB9O1xuICB9XG5cbiAgX3BhcnNlV2ViaG9va1Rlc3QocmVzcG9uc2U6IHsgYm9keTogeyBjb2RlOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZyB9IH0pXG4gIDoge2NvZGU6IG51bWJlciwgbWVzc2FnZTpzdHJpbmd9IHtcbiAgICByZXR1cm4geyBjb2RlOiByZXNwb25zZS5ib2R5LmNvZGUsIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZSB9IGFzIFZhbGlkYXRpb25SZXNwb25zZTtcbiAgfVxuXG4gIGxpc3QoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5OiBXZWJob29rc1F1ZXJ5KTogUHJvbWlzZTxXZWJob29rTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnKSwgcXVlcnkpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tMaXN0KTtcbiAgfVxuXG4gIGdldChkb21haW46IHN0cmluZywgaWQ6IHN0cmluZyk6IFByb21pc2U8V2ViaG9vaz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnLCBpZCkpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tXaXRoSUQoaWQpKTtcbiAgfVxuXG4gIGNyZWF0ZShkb21haW46IHN0cmluZyxcbiAgICBpZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIHRlc3QgPSBmYWxzZSk6IFByb21pc2U8V2ViaG9vayB8IFZhbGlkYXRpb25SZXNwb25zZT4ge1xuICAgIGlmICh0ZXN0KSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJywgaWQsICd0ZXN0JyksIHsgdXJsIH0pXG4gICAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1Rlc3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJyksIHsgaWQsIHVybCB9KVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rV2l0aElEKGlkKSk7XG4gIH1cblxuICB1cGRhdGUoZG9tYWluOiBzdHJpbmcsIGlkOiBzdHJpbmcsIHVybDogc3RyaW5nKTogUHJvbWlzZTxXZWJob29rPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkKSwgeyB1cmwgfSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1dpdGhJRChpZCkpO1xuICB9XG5cbiAgZGVzdHJveShkb21haW46IHN0cmluZywgaWQ6IHN0cmluZykgOiBQcm9taXNlPFdlYmhvb2s+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJywgaWQpKVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rV2l0aElEKGlkKSk7XG4gIH1cbn1cbiIsIi8qISBodHRwczovL210aHMuYmUvYmFzZTY0IHYxLjAuMCBieSBAbWF0aGlhcyB8IE1JVCBsaWNlbnNlICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZXMgYGV4cG9ydHNgLlxuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzO1xuXG5cdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLlxuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0bW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMgJiYgbW9kdWxlO1xuXG5cdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgLCBmcm9tIE5vZGUuanMgb3IgQnJvd3NlcmlmaWVkIGNvZGUsIGFuZCB1c2Vcblx0Ly8gaXQgYXMgYHJvb3RgLlxuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbC53aW5kb3cgPT09IGZyZWVHbG9iYWwpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdHZhciBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XG5cdFx0dGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcblx0fTtcblx0SW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcjtcblx0SW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0ludmFsaWRDaGFyYWN0ZXJFcnJvcic7XG5cblx0dmFyIGVycm9yID0gZnVuY3Rpb24obWVzc2FnZSkge1xuXHRcdC8vIE5vdGU6IHRoZSBlcnJvciBtZXNzYWdlcyB1c2VkIHRocm91Z2hvdXQgdGhpcyBmaWxlIG1hdGNoIHRob3NlIHVzZWQgYnlcblx0XHQvLyB0aGUgbmF0aXZlIGBhdG9iYC9gYnRvYWAgaW1wbGVtZW50YXRpb24gaW4gQ2hyb21pdW0uXG5cdFx0dGhyb3cgbmV3IEludmFsaWRDaGFyYWN0ZXJFcnJvcihtZXNzYWdlKTtcblx0fTtcblxuXHR2YXIgVEFCTEUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XG5cdC8vIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvY29tbW9uLW1pY3Jvc3ludGF4ZXMuaHRtbCNzcGFjZS1jaGFyYWN0ZXJcblx0dmFyIFJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMgPSAvW1xcdFxcblxcZlxcciBdL2c7XG5cblx0Ly8gYGRlY29kZWAgaXMgZGVzaWduZWQgdG8gYmUgZnVsbHkgY29tcGF0aWJsZSB3aXRoIGBhdG9iYCBhcyBkZXNjcmliZWQgaW4gdGhlXG5cdC8vIEhUTUwgU3RhbmRhcmQuIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYXRvYlxuXHQvLyBUaGUgb3B0aW1pemVkIGJhc2U2NC1kZWNvZGluZyBhbGdvcml0aG0gdXNlZCBpcyBiYXNlZCBvbiBAYXRr4oCZcyBleGNlbGxlbnRcblx0Ly8gaW1wbGVtZW50YXRpb24uIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2F0ay8xMDIwMzk2XG5cdHZhciBkZWNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xuXHRcdGlucHV0ID0gU3RyaW5nKGlucHV0KVxuXHRcdFx0LnJlcGxhY2UoUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUywgJycpO1xuXHRcdHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cdFx0aWYgKGxlbmd0aCAlIDQgPT0gMCkge1xuXHRcdFx0aW5wdXQgPSBpbnB1dC5yZXBsYWNlKC89PT8kLywgJycpO1xuXHRcdFx0bGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHRsZW5ndGggJSA0ID09IDEgfHxcblx0XHRcdC8vIGh0dHA6Ly93aGF0d2cub3JnL0MjYWxwaGFudW1lcmljLWFzY2lpLWNoYXJhY3RlcnNcblx0XHRcdC9bXithLXpBLVowLTkvXS8udGVzdChpbnB1dClcblx0XHQpIHtcblx0XHRcdGVycm9yKFxuXHRcdFx0XHQnSW52YWxpZCBjaGFyYWN0ZXI6IHRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuJ1xuXHRcdFx0KTtcblx0XHR9XG5cdFx0dmFyIGJpdENvdW50ZXIgPSAwO1xuXHRcdHZhciBiaXRTdG9yYWdlO1xuXHRcdHZhciBidWZmZXI7XG5cdFx0dmFyIG91dHB1dCA9ICcnO1xuXHRcdHZhciBwb3NpdGlvbiA9IC0xO1xuXHRcdHdoaWxlICgrK3Bvc2l0aW9uIDwgbGVuZ3RoKSB7XG5cdFx0XHRidWZmZXIgPSBUQUJMRS5pbmRleE9mKGlucHV0LmNoYXJBdChwb3NpdGlvbikpO1xuXHRcdFx0Yml0U3RvcmFnZSA9IGJpdENvdW50ZXIgJSA0ID8gYml0U3RvcmFnZSAqIDY0ICsgYnVmZmVyIDogYnVmZmVyO1xuXHRcdFx0Ly8gVW5sZXNzIHRoaXMgaXMgdGhlIGZpcnN0IG9mIGEgZ3JvdXAgb2YgNCBjaGFyYWN0ZXJz4oCmXG5cdFx0XHRpZiAoYml0Q291bnRlcisrICUgNCkge1xuXHRcdFx0XHQvLyDigKZjb252ZXJ0IHRoZSBmaXJzdCA4IGJpdHMgdG8gYSBzaW5nbGUgQVNDSUkgY2hhcmFjdGVyLlxuXHRcdFx0XHRvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShcblx0XHRcdFx0XHQweEZGICYgYml0U3RvcmFnZSA+PiAoLTIgKiBiaXRDb3VudGVyICYgNilcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fTtcblxuXHQvLyBgZW5jb2RlYCBpcyBkZXNpZ25lZCB0byBiZSBmdWxseSBjb21wYXRpYmxlIHdpdGggYGJ0b2FgIGFzIGRlc2NyaWJlZCBpbiB0aGVcblx0Ly8gSFRNTCBTdGFuZGFyZDogaHR0cDovL3doYXR3Zy5vcmcvaHRtbC93ZWJhcHBhcGlzLmh0bWwjZG9tLXdpbmRvd2Jhc2U2NC1idG9hXG5cdHZhciBlbmNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xuXHRcdGlucHV0ID0gU3RyaW5nKGlucHV0KTtcblx0XHRpZiAoL1teXFwwLVxceEZGXS8udGVzdChpbnB1dCkpIHtcblx0XHRcdC8vIE5vdGU6IG5vIG5lZWQgdG8gc3BlY2lhbC1jYXNlIGFzdHJhbCBzeW1ib2xzIGhlcmUsIGFzIHN1cnJvZ2F0ZXMgYXJlXG5cdFx0XHQvLyBtYXRjaGVkLCBhbmQgdGhlIGlucHV0IGlzIHN1cHBvc2VkIHRvIG9ubHkgY29udGFpbiBBU0NJSSBhbnl3YXkuXG5cdFx0XHRlcnJvcihcblx0XHRcdFx0J1RoZSBzdHJpbmcgdG8gYmUgZW5jb2RlZCBjb250YWlucyBjaGFyYWN0ZXJzIG91dHNpZGUgb2YgdGhlICcgK1xuXHRcdFx0XHQnTGF0aW4xIHJhbmdlLidcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHZhciBwYWRkaW5nID0gaW5wdXQubGVuZ3RoICUgMztcblx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0dmFyIHBvc2l0aW9uID0gLTE7XG5cdFx0dmFyIGE7XG5cdFx0dmFyIGI7XG5cdFx0dmFyIGM7XG5cdFx0dmFyIGJ1ZmZlcjtcblx0XHQvLyBNYWtlIHN1cmUgYW55IHBhZGRpbmcgaXMgaGFuZGxlZCBvdXRzaWRlIG9mIHRoZSBsb29wLlxuXHRcdHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGggLSBwYWRkaW5nO1xuXG5cdFx0d2hpbGUgKCsrcG9zaXRpb24gPCBsZW5ndGgpIHtcblx0XHRcdC8vIFJlYWQgdGhyZWUgYnl0ZXMsIGkuZS4gMjQgYml0cy5cblx0XHRcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCAxNjtcblx0XHRcdGIgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pIDw8IDg7XG5cdFx0XHRjID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKTtcblx0XHRcdGJ1ZmZlciA9IGEgKyBiICsgYztcblx0XHRcdC8vIFR1cm4gdGhlIDI0IGJpdHMgaW50byBmb3VyIGNodW5rcyBvZiA2IGJpdHMgZWFjaCwgYW5kIGFwcGVuZCB0aGVcblx0XHRcdC8vIG1hdGNoaW5nIGNoYXJhY3RlciBmb3IgZWFjaCBvZiB0aGVtIHRvIHRoZSBvdXRwdXQuXG5cdFx0XHRvdXRwdXQgKz0gKFxuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDE4ICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDEyICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDYgJiAweDNGKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgJiAweDNGKVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAocGFkZGluZyA9PSAyKSB7XG5cdFx0XHRhID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbikgPDwgODtcblx0XHRcdGIgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xuXHRcdFx0YnVmZmVyID0gYSArIGI7XG5cdFx0XHRvdXRwdXQgKz0gKFxuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDEwKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdCgoYnVmZmVyID4+IDQpICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA8PCAyKSAmIDB4M0YpICtcblx0XHRcdFx0Jz0nXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAocGFkZGluZyA9PSAxKSB7XG5cdFx0XHRidWZmZXIgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcblx0XHRcdG91dHB1dCArPSAoXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA8PCA0KSAmIDB4M0YpICtcblx0XHRcdFx0Jz09J1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9O1xuXG5cdHZhciBiYXNlNjQgPSB7XG5cdFx0J2VuY29kZSc6IGVuY29kZSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCd2ZXJzaW9uJzogJzEuMC4wJ1xuXHR9O1xuXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGJhc2U2NDtcblx0XHR9KTtcblx0fVx0ZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgIWZyZWVFeHBvcnRzLm5vZGVUeXBlKSB7XG5cdFx0aWYgKGZyZWVNb2R1bGUpIHsgLy8gaW4gTm9kZS5qcyBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IGJhc2U2NDtcblx0XHR9IGVsc2UgeyAvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yICh2YXIga2V5IGluIGJhc2U2NCkge1xuXHRcdFx0XHRiYXNlNjQuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IGJhc2U2NFtrZXldKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7IC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LmJhc2U2NCA9IGJhc2U2NDtcblx0fVxuXG59KHRoaXMpKTtcbiIsIi8qISBNSVQgTGljZW5zZSDCqSBTaW5kcmUgU29yaHVzICovXG5cbmNvbnN0IGdsb2JhbHMgPSB7fTtcblxuY29uc3QgZ2V0R2xvYmFsID0gcHJvcGVydHkgPT4ge1xuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHNlbGYgJiYgcHJvcGVydHkgaW4gc2VsZikge1xuXHRcdHJldHVybiBzZWxmO1xuXHR9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdyAmJiBwcm9wZXJ0eSBpbiB3aW5kb3cpIHtcblx0XHRyZXR1cm4gd2luZG93O1xuXHR9XG5cblx0aWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbCAmJiBwcm9wZXJ0eSBpbiBnbG9iYWwpIHtcblx0XHRyZXR1cm4gZ2xvYmFsO1xuXHR9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzKSB7XG5cdFx0cmV0dXJuIGdsb2JhbFRoaXM7XG5cdH1cbn07XG5cbmNvbnN0IGdsb2JhbFByb3BlcnRpZXMgPSBbXG5cdCdIZWFkZXJzJyxcblx0J1JlcXVlc3QnLFxuXHQnUmVzcG9uc2UnLFxuXHQnUmVhZGFibGVTdHJlYW0nLFxuXHQnZmV0Y2gnLFxuXHQnQWJvcnRDb250cm9sbGVyJyxcblx0J0Zvcm1EYXRhJ1xuXTtcblxuZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBnbG9iYWxQcm9wZXJ0aWVzKSB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxzLCBwcm9wZXJ0eSwge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IGdsb2JhbE9iamVjdCA9IGdldEdsb2JhbChwcm9wZXJ0eSk7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IGdsb2JhbE9iamVjdCAmJiBnbG9iYWxPYmplY3RbcHJvcGVydHldO1xuXHRcdFx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLmJpbmQoZ2xvYmFsT2JqZWN0KSA6IHZhbHVlO1xuXHRcdH1cblx0fSk7XG59XG5cbmNvbnN0IGlzT2JqZWN0ID0gdmFsdWUgPT4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JztcbmNvbnN0IHN1cHBvcnRzQWJvcnRDb250cm9sbGVyID0gdHlwZW9mIGdsb2JhbHMuQWJvcnRDb250cm9sbGVyID09PSAnZnVuY3Rpb24nO1xuY29uc3Qgc3VwcG9ydHNTdHJlYW1zID0gdHlwZW9mIGdsb2JhbHMuUmVhZGFibGVTdHJlYW0gPT09ICdmdW5jdGlvbic7XG5jb25zdCBzdXBwb3J0c0Zvcm1EYXRhID0gdHlwZW9mIGdsb2JhbHMuRm9ybURhdGEgPT09ICdmdW5jdGlvbic7XG5cbmNvbnN0IG1lcmdlSGVhZGVycyA9IChzb3VyY2UxLCBzb3VyY2UyKSA9PiB7XG5cdGNvbnN0IHJlc3VsdCA9IG5ldyBnbG9iYWxzLkhlYWRlcnMoc291cmNlMSB8fCB7fSk7XG5cdGNvbnN0IGlzSGVhZGVyc0luc3RhbmNlID0gc291cmNlMiBpbnN0YW5jZW9mIGdsb2JhbHMuSGVhZGVycztcblx0Y29uc3Qgc291cmNlID0gbmV3IGdsb2JhbHMuSGVhZGVycyhzb3VyY2UyIHx8IHt9KTtcblxuXHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBzb3VyY2UpIHtcblx0XHRpZiAoKGlzSGVhZGVyc0luc3RhbmNlICYmIHZhbHVlID09PSAndW5kZWZpbmVkJykgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmVzdWx0LmRlbGV0ZShrZXkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHQuc2V0KGtleSwgdmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCBkZWVwTWVyZ2UgPSAoLi4uc291cmNlcykgPT4ge1xuXHRsZXQgcmV0dXJuVmFsdWUgPSB7fTtcblx0bGV0IGhlYWRlcnMgPSB7fTtcblxuXHRmb3IgKGNvbnN0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuXHRcdFx0aWYgKCEoQXJyYXkuaXNBcnJheShyZXR1cm5WYWx1ZSkpKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlID0gW107XG5cdFx0XHR9XG5cblx0XHRcdHJldHVyblZhbHVlID0gWy4uLnJldHVyblZhbHVlLCAuLi5zb3VyY2VdO1xuXHRcdH0gZWxzZSBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuXHRcdFx0Zm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkpIHtcblx0XHRcdFx0aWYgKGlzT2JqZWN0KHZhbHVlKSAmJiAoa2V5IGluIHJldHVyblZhbHVlKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gZGVlcE1lcmdlKHJldHVyblZhbHVlW2tleV0sIHZhbHVlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVyblZhbHVlID0gey4uLnJldHVyblZhbHVlLCBba2V5XTogdmFsdWV9O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPYmplY3Qoc291cmNlLmhlYWRlcnMpKSB7XG5cdFx0XHRcdGhlYWRlcnMgPSBtZXJnZUhlYWRlcnMoaGVhZGVycywgc291cmNlLmhlYWRlcnMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVyblZhbHVlLmhlYWRlcnMgPSBoZWFkZXJzO1xuXHR9XG5cblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuY29uc3QgcmVxdWVzdE1ldGhvZHMgPSBbXG5cdCdnZXQnLFxuXHQncG9zdCcsXG5cdCdwdXQnLFxuXHQncGF0Y2gnLFxuXHQnaGVhZCcsXG5cdCdkZWxldGUnXG5dO1xuXG5jb25zdCByZXNwb25zZVR5cGVzID0ge1xuXHRqc29uOiAnYXBwbGljYXRpb24vanNvbicsXG5cdHRleHQ6ICd0ZXh0LyonLFxuXHRmb3JtRGF0YTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxuXHRhcnJheUJ1ZmZlcjogJyovKicsXG5cdGJsb2I6ICcqLyonXG59O1xuXG5jb25zdCByZXRyeU1ldGhvZHMgPSBbXG5cdCdnZXQnLFxuXHQncHV0Jyxcblx0J2hlYWQnLFxuXHQnZGVsZXRlJyxcblx0J29wdGlvbnMnLFxuXHQndHJhY2UnXG5dO1xuXG5jb25zdCByZXRyeVN0YXR1c0NvZGVzID0gW1xuXHQ0MDgsXG5cdDQxMyxcblx0NDI5LFxuXHQ1MDAsXG5cdDUwMixcblx0NTAzLFxuXHQ1MDRcbl07XG5cbmNvbnN0IHJldHJ5QWZ0ZXJTdGF0dXNDb2RlcyA9IFtcblx0NDEzLFxuXHQ0MjksXG5cdDUwM1xuXTtcblxuY29uc3Qgc3RvcCA9IFN5bWJvbCgnc3RvcCcpO1xuXG5jbGFzcyBIVFRQRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG5cdFx0Ly8gU2V0IHRoZSBtZXNzYWdlIHRvIHRoZSBzdGF0dXMgdGV4dCwgc3VjaCBhcyBVbmF1dGhvcml6ZWQsXG5cdFx0Ly8gd2l0aCBzb21lIGZhbGxiYWNrcy4gVGhpcyBtZXNzYWdlIHNob3VsZCBuZXZlciBiZSB1bmRlZmluZWQuXG5cdFx0c3VwZXIoXG5cdFx0XHRyZXNwb25zZS5zdGF0dXNUZXh0IHx8XG5cdFx0XHRTdHJpbmcoXG5cdFx0XHRcdChyZXNwb25zZS5zdGF0dXMgPT09IDAgfHwgcmVzcG9uc2Uuc3RhdHVzKSA/XG5cdFx0XHRcdFx0cmVzcG9uc2Uuc3RhdHVzIDogJ1Vua25vd24gcmVzcG9uc2UgZXJyb3InXG5cdFx0XHQpXG5cdFx0KTtcblx0XHR0aGlzLm5hbWUgPSAnSFRUUEVycm9yJztcblx0XHR0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG5cdH1cbn1cblxuY2xhc3MgVGltZW91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRjb25zdHJ1Y3RvcihyZXF1ZXN0KSB7XG5cdFx0c3VwZXIoJ1JlcXVlc3QgdGltZWQgb3V0Jyk7XG5cdFx0dGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG5cdFx0dGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcblx0fVxufVxuXG5jb25zdCBkZWxheSA9IG1zID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuXG4vLyBgUHJvbWlzZS5yYWNlKClgIHdvcmthcm91bmQgKCM5MSlcbmNvbnN0IHRpbWVvdXQgPSAocmVxdWVzdCwgYWJvcnRDb250cm9sbGVyLCBvcHRpb25zKSA9PlxuXHRuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0Y29uc3QgdGltZW91dElEID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAoYWJvcnRDb250cm9sbGVyKSB7XG5cdFx0XHRcdGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZWplY3QobmV3IFRpbWVvdXRFcnJvcihyZXF1ZXN0KSk7XG5cdFx0fSwgb3B0aW9ucy50aW1lb3V0KTtcblxuXHRcdC8qIGVzbGludC1kaXNhYmxlIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLXRoZW4gKi9cblx0XHRvcHRpb25zLmZldGNoKHJlcXVlc3QpXG5cdFx0XHQudGhlbihyZXNvbHZlKVxuXHRcdFx0LmNhdGNoKHJlamVjdClcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXRJRCk7XG5cdFx0XHR9KTtcblx0XHQvKiBlc2xpbnQtZW5hYmxlIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLXRoZW4gKi9cblx0fSk7XG5cbmNvbnN0IG5vcm1hbGl6ZVJlcXVlc3RNZXRob2QgPSBpbnB1dCA9PiByZXF1ZXN0TWV0aG9kcy5pbmNsdWRlcyhpbnB1dCkgPyBpbnB1dC50b1VwcGVyQ2FzZSgpIDogaW5wdXQ7XG5cbmNvbnN0IGRlZmF1bHRSZXRyeU9wdGlvbnMgPSB7XG5cdGxpbWl0OiAyLFxuXHRtZXRob2RzOiByZXRyeU1ldGhvZHMsXG5cdHN0YXR1c0NvZGVzOiByZXRyeVN0YXR1c0NvZGVzLFxuXHRhZnRlclN0YXR1c0NvZGVzOiByZXRyeUFmdGVyU3RhdHVzQ29kZXNcbn07XG5cbmNvbnN0IG5vcm1hbGl6ZVJldHJ5T3B0aW9ucyA9IChyZXRyeSA9IHt9KSA9PiB7XG5cdGlmICh0eXBlb2YgcmV0cnkgPT09ICdudW1iZXInKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLmRlZmF1bHRSZXRyeU9wdGlvbnMsXG5cdFx0XHRsaW1pdDogcmV0cnlcblx0XHR9O1xuXHR9XG5cblx0aWYgKHJldHJ5Lm1ldGhvZHMgJiYgIUFycmF5LmlzQXJyYXkocmV0cnkubWV0aG9kcykpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ3JldHJ5Lm1ldGhvZHMgbXVzdCBiZSBhbiBhcnJheScpO1xuXHR9XG5cblx0aWYgKHJldHJ5LnN0YXR1c0NvZGVzICYmICFBcnJheS5pc0FycmF5KHJldHJ5LnN0YXR1c0NvZGVzKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcigncmV0cnkuc3RhdHVzQ29kZXMgbXVzdCBiZSBhbiBhcnJheScpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHQuLi5kZWZhdWx0UmV0cnlPcHRpb25zLFxuXHRcdC4uLnJldHJ5LFxuXHRcdGFmdGVyU3RhdHVzQ29kZXM6IHJldHJ5QWZ0ZXJTdGF0dXNDb2Rlc1xuXHR9O1xufTtcblxuLy8gVGhlIG1heGltdW0gdmFsdWUgb2YgYSAzMmJpdCBpbnQgKHNlZSBpc3N1ZSAjMTE3KVxuY29uc3QgbWF4U2FmZVRpbWVvdXQgPSAyMTQ3NDgzNjQ3O1xuXG5jbGFzcyBLeSB7XG5cdGNvbnN0cnVjdG9yKGlucHV0LCBvcHRpb25zID0ge30pIHtcblx0XHR0aGlzLl9yZXRyeUNvdW50ID0gMDtcblx0XHR0aGlzLl9pbnB1dCA9IGlucHV0O1xuXHRcdHRoaXMuX29wdGlvbnMgPSB7XG5cdFx0XHQvLyBUT0RPOiBjcmVkZW50aWFscyBjYW4gYmUgcmVtb3ZlZCB3aGVuIHRoZSBzcGVjIGNoYW5nZSBpcyBpbXBsZW1lbnRlZCBpbiBhbGwgYnJvd3NlcnMuIENvbnRleHQ6IGh0dHBzOi8vd3d3LmNocm9tZXN0YXR1cy5jb20vZmVhdHVyZS80NTM5NDczMzEyMzUwMjA4XG5cdFx0XHRjcmVkZW50aWFsczogdGhpcy5faW5wdXQuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJyxcblx0XHRcdC4uLm9wdGlvbnMsXG5cdFx0XHRoZWFkZXJzOiBtZXJnZUhlYWRlcnModGhpcy5faW5wdXQuaGVhZGVycywgb3B0aW9ucy5oZWFkZXJzKSxcblx0XHRcdGhvb2tzOiBkZWVwTWVyZ2Uoe1xuXHRcdFx0XHRiZWZvcmVSZXF1ZXN0OiBbXSxcblx0XHRcdFx0YmVmb3JlUmV0cnk6IFtdLFxuXHRcdFx0XHRhZnRlclJlc3BvbnNlOiBbXVxuXHRcdFx0fSwgb3B0aW9ucy5ob29rcyksXG5cdFx0XHRtZXRob2Q6IG5vcm1hbGl6ZVJlcXVlc3RNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5faW5wdXQubWV0aG9kKSxcblx0XHRcdHByZWZpeFVybDogU3RyaW5nKG9wdGlvbnMucHJlZml4VXJsIHx8ICcnKSxcblx0XHRcdHJldHJ5OiBub3JtYWxpemVSZXRyeU9wdGlvbnMob3B0aW9ucy5yZXRyeSksXG5cdFx0XHR0aHJvd0h0dHBFcnJvcnM6IG9wdGlvbnMudGhyb3dIdHRwRXJyb3JzICE9PSBmYWxzZSxcblx0XHRcdHRpbWVvdXQ6IHR5cGVvZiBvcHRpb25zLnRpbWVvdXQgPT09ICd1bmRlZmluZWQnID8gMTAwMDAgOiBvcHRpb25zLnRpbWVvdXQsXG5cdFx0XHRmZXRjaDogb3B0aW9ucy5mZXRjaCB8fCBnbG9iYWxzLmZldGNoXG5cdFx0fTtcblxuXHRcdGlmICh0eXBlb2YgdGhpcy5faW5wdXQgIT09ICdzdHJpbmcnICYmICEodGhpcy5faW5wdXQgaW5zdGFuY2VvZiBVUkwgfHwgdGhpcy5faW5wdXQgaW5zdGFuY2VvZiBnbG9iYWxzLlJlcXVlc3QpKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdgaW5wdXRgIG11c3QgYmUgYSBzdHJpbmcsIFVSTCwgb3IgUmVxdWVzdCcpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9vcHRpb25zLnByZWZpeFVybCAmJiB0eXBlb2YgdGhpcy5faW5wdXQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRpZiAodGhpcy5faW5wdXQuc3RhcnRzV2l0aCgnLycpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignYGlucHV0YCBtdXN0IG5vdCBiZWdpbiB3aXRoIGEgc2xhc2ggd2hlbiB1c2luZyBgcHJlZml4VXJsYCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXRoaXMuX29wdGlvbnMucHJlZml4VXJsLmVuZHNXaXRoKCcvJykpIHtcblx0XHRcdFx0dGhpcy5fb3B0aW9ucy5wcmVmaXhVcmwgKz0gJy8nO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9pbnB1dCA9IHRoaXMuX29wdGlvbnMucHJlZml4VXJsICsgdGhpcy5faW5wdXQ7XG5cdFx0fVxuXG5cdFx0aWYgKHN1cHBvcnRzQWJvcnRDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLmFib3J0Q29udHJvbGxlciA9IG5ldyBnbG9iYWxzLkFib3J0Q29udHJvbGxlcigpO1xuXHRcdFx0aWYgKHRoaXMuX29wdGlvbnMuc2lnbmFsKSB7XG5cdFx0XHRcdHRoaXMuX29wdGlvbnMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9vcHRpb25zLnNpZ25hbCA9IHRoaXMuYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcblx0XHR9XG5cblx0XHR0aGlzLnJlcXVlc3QgPSBuZXcgZ2xvYmFscy5SZXF1ZXN0KHRoaXMuX2lucHV0LCB0aGlzLl9vcHRpb25zKTtcblxuXHRcdGlmICh0aGlzLl9vcHRpb25zLnNlYXJjaFBhcmFtcykge1xuXHRcdFx0Y29uc3Qgc2VhcmNoUGFyYW1zID0gJz8nICsgbmV3IFVSTFNlYXJjaFBhcmFtcyh0aGlzLl9vcHRpb25zLnNlYXJjaFBhcmFtcykudG9TdHJpbmcoKTtcblx0XHRcdGNvbnN0IHVybCA9IHRoaXMucmVxdWVzdC51cmwucmVwbGFjZSgvKD86XFw/Lio/KT8oPz0jfCQpLywgc2VhcmNoUGFyYW1zKTtcblx0XHRcdGNvbnNvbGUubG9nKCd1cmwgLS0tLS0tLS0tPicsIHVybCk7XG5cdFx0XHQvLyBUbyBwcm92aWRlIGNvcnJlY3QgZm9ybSBib3VuZGFyeSwgQ29udGVudC1UeXBlIGhlYWRlciBzaG91bGQgYmUgZGVsZXRlZCBlYWNoIHRpbWUgd2hlbiBuZXcgUmVxdWVzdCBpbnN0YW50aWF0ZWQgZnJvbSBhbm90aGVyIG9uZVxuXHRcdFx0aWYgKCgoc3VwcG9ydHNGb3JtRGF0YSAmJiB0aGlzLl9vcHRpb25zLmJvZHkgaW5zdGFuY2VvZiBnbG9iYWxzLkZvcm1EYXRhKSB8fCB0aGlzLl9vcHRpb25zLmJvZHkgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpICYmICEodGhpcy5fb3B0aW9ucy5oZWFkZXJzICYmIHRoaXMuX29wdGlvbnMuaGVhZGVyc1snY29udGVudC10eXBlJ10pKSB7XG5cdFx0XHRcdHRoaXMucmVxdWVzdC5oZWFkZXJzLmRlbGV0ZSgnY29udGVudC10eXBlJyk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMucmVxdWVzdCA9IG5ldyBnbG9iYWxzLlJlcXVlc3QobmV3IGdsb2JhbHMuUmVxdWVzdCh1cmwsIHRoaXMucmVxdWVzdCksIHRoaXMuX29wdGlvbnMpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9vcHRpb25zLmpzb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5fb3B0aW9ucy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkodGhpcy5fb3B0aW9ucy5qc29uKTtcblx0XHRcdHRoaXMucmVxdWVzdC5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcblx0XHRcdHRoaXMucmVxdWVzdCA9IG5ldyBnbG9iYWxzLlJlcXVlc3QodGhpcy5yZXF1ZXN0LCB7Ym9keTogdGhpcy5fb3B0aW9ucy5ib2R5fSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZm4gPSBhc3luYyAoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fb3B0aW9ucy50aW1lb3V0ID4gbWF4U2FmZVRpbWVvdXQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoYFRoZSBcXGB0aW1lb3V0XFxgIG9wdGlvbiBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuICR7bWF4U2FmZVRpbWVvdXR9YCk7XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IGRlbGF5KDEpO1xuXHRcdFx0bGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5fZmV0Y2goKTtcblxuXHRcdFx0Zm9yIChjb25zdCBob29rIG9mIHRoaXMuX29wdGlvbnMuaG9va3MuYWZ0ZXJSZXNwb25zZSkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuXHRcdFx0XHRjb25zdCBtb2RpZmllZFJlc3BvbnNlID0gYXdhaXQgaG9vayhcblx0XHRcdFx0XHR0aGlzLnJlcXVlc3QsXG5cdFx0XHRcdFx0dGhpcy5fb3B0aW9ucyxcblx0XHRcdFx0XHR0aGlzLl9kZWNvcmF0ZVJlc3BvbnNlKHJlc3BvbnNlLmNsb25lKCkpXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0aWYgKG1vZGlmaWVkUmVzcG9uc2UgaW5zdGFuY2VvZiBnbG9iYWxzLlJlc3BvbnNlKSB7XG5cdFx0XHRcdFx0cmVzcG9uc2UgPSBtb2RpZmllZFJlc3BvbnNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX2RlY29yYXRlUmVzcG9uc2UocmVzcG9uc2UpO1xuXG5cdFx0XHRpZiAoIXJlc3BvbnNlLm9rICYmIHRoaXMuX29wdGlvbnMudGhyb3dIdHRwRXJyb3JzKSB7XG5cdFx0XHRcdHRocm93IG5ldyBIVFRQRXJyb3IocmVzcG9uc2UpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBgb25Eb3dubG9hZFByb2dyZXNzYCBpcyBwYXNzZWQsIGl0IHVzZXMgdGhlIHN0cmVhbSBBUEkgaW50ZXJuYWxseVxuXHRcdFx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0XHRcdGlmICh0aGlzLl9vcHRpb25zLm9uRG93bmxvYWRQcm9ncmVzcykge1xuXHRcdFx0XHRpZiAodHlwZW9mIHRoaXMuX29wdGlvbnMub25Eb3dubG9hZFByb2dyZXNzICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGBvbkRvd25sb2FkUHJvZ3Jlc3NgIG9wdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghc3VwcG9ydHNTdHJlYW1zKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdTdHJlYW1zIGFyZSBub3Qgc3VwcG9ydGVkIGluIHlvdXIgZW52aXJvbm1lbnQuIGBSZWFkYWJsZVN0cmVhbWAgaXMgbWlzc2luZy4nKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0aGlzLl9zdHJlYW0ocmVzcG9uc2UuY2xvbmUoKSwgdGhpcy5fb3B0aW9ucy5vbkRvd25sb2FkUHJvZ3Jlc3MpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzcG9uc2U7XG5cdFx0fTtcblxuXHRcdGNvbnN0IGlzUmV0cmlhYmxlTWV0aG9kID0gdGhpcy5fb3B0aW9ucy5yZXRyeS5tZXRob2RzLmluY2x1ZGVzKHRoaXMucmVxdWVzdC5tZXRob2QudG9Mb3dlckNhc2UoKSk7XG5cdFx0Y29uc3QgcmVzdWx0ID0gaXNSZXRyaWFibGVNZXRob2QgPyB0aGlzLl9yZXRyeShmbikgOiBmbigpO1xuXG5cdFx0Zm9yIChjb25zdCBbdHlwZSwgbWltZVR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKHJlc3BvbnNlVHlwZXMpKSB7XG5cdFx0XHRyZXN1bHRbdHlwZV0gPSBhc3luYyAoKSA9PiB7XG5cdFx0XHRcdHRoaXMucmVxdWVzdC5oZWFkZXJzLnNldCgnYWNjZXB0JywgdGhpcy5yZXF1ZXN0LmhlYWRlcnMuZ2V0KCdhY2NlcHQnKSB8fCBtaW1lVHlwZSk7XG5cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSAoYXdhaXQgcmVzdWx0KS5jbG9uZSgpO1xuXG5cdFx0XHRcdGlmICh0eXBlID09PSAnanNvbicpIHtcblx0XHRcdFx0XHRpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpIHtcblx0XHRcdFx0XHRcdHJldHVybiAnJztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAob3B0aW9ucy5wYXJzZUpzb24pIHtcblx0XHRcdFx0XHRcdHJldHVybiBvcHRpb25zLnBhcnNlSnNvbihhd2FpdCByZXNwb25zZS50ZXh0KCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByZXNwb25zZVt0eXBlXSgpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0X2NhbGN1bGF0ZVJldHJ5RGVsYXkoZXJyb3IpIHtcblx0XHR0aGlzLl9yZXRyeUNvdW50Kys7XG5cblx0XHRpZiAodGhpcy5fcmV0cnlDb3VudCA8IHRoaXMuX29wdGlvbnMucmV0cnkubGltaXQgJiYgIShlcnJvciBpbnN0YW5jZW9mIFRpbWVvdXRFcnJvcikpIHtcblx0XHRcdGlmIChlcnJvciBpbnN0YW5jZW9mIEhUVFBFcnJvcikge1xuXHRcdFx0XHRpZiAoIXRoaXMuX29wdGlvbnMucmV0cnkuc3RhdHVzQ29kZXMuaW5jbHVkZXMoZXJyb3IucmVzcG9uc2Uuc3RhdHVzKSkge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcmV0cnlBZnRlciA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdSZXRyeS1BZnRlcicpO1xuXHRcdFx0XHRpZiAocmV0cnlBZnRlciAmJiB0aGlzLl9vcHRpb25zLnJldHJ5LmFmdGVyU3RhdHVzQ29kZXMuaW5jbHVkZXMoZXJyb3IucmVzcG9uc2Uuc3RhdHVzKSkge1xuXHRcdFx0XHRcdGxldCBhZnRlciA9IE51bWJlcihyZXRyeUFmdGVyKTtcblx0XHRcdFx0XHRpZiAoTnVtYmVyLmlzTmFOKGFmdGVyKSkge1xuXHRcdFx0XHRcdFx0YWZ0ZXIgPSBEYXRlLnBhcnNlKHJldHJ5QWZ0ZXIpIC0gRGF0ZS5ub3coKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YWZ0ZXIgKj0gMTAwMDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAodHlwZW9mIHRoaXMuX29wdGlvbnMucmV0cnkubWF4UmV0cnlBZnRlciAhPT0gJ3VuZGVmaW5lZCcgJiYgYWZ0ZXIgPiB0aGlzLl9vcHRpb25zLnJldHJ5Lm1heFJldHJ5QWZ0ZXIpIHtcblx0XHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBhZnRlcjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChlcnJvci5yZXNwb25zZS5zdGF0dXMgPT09IDQxMykge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IEJBQ0tPRkZfRkFDVE9SID0gMC4zO1xuXHRcdFx0cmV0dXJuIEJBQ0tPRkZfRkFDVE9SICogKDIgKiogKHRoaXMuX3JldHJ5Q291bnQgLSAxKSkgKiAxMDAwO1xuXHRcdH1cblxuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0X2RlY29yYXRlUmVzcG9uc2UocmVzcG9uc2UpIHtcblx0XHRpZiAodGhpcy5fb3B0aW9ucy5wYXJzZUpzb24pIHtcblx0XHRcdHJlc3BvbnNlLmpzb24gPSBhc3luYyAoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9vcHRpb25zLnBhcnNlSnNvbihhd2FpdCByZXNwb25zZS50ZXh0KCkpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzcG9uc2U7XG5cdH1cblxuXHRhc3luYyBfcmV0cnkoZm4pIHtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGF3YWl0IGZuKCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnN0IG1zID0gTWF0aC5taW4odGhpcy5fY2FsY3VsYXRlUmV0cnlEZWxheShlcnJvciksIG1heFNhZmVUaW1lb3V0KTtcblx0XHRcdGlmIChtcyAhPT0gMCAmJiB0aGlzLl9yZXRyeUNvdW50ID4gMCkge1xuXHRcdFx0XHRhd2FpdCBkZWxheShtcyk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBob29rIG9mIHRoaXMuX29wdGlvbnMuaG9va3MuYmVmb3JlUmV0cnkpIHtcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuXHRcdFx0XHRcdGNvbnN0IGhvb2tSZXN1bHQgPSBhd2FpdCBob29rKHtcblx0XHRcdFx0XHRcdHJlcXVlc3Q6IHRoaXMucmVxdWVzdCxcblx0XHRcdFx0XHRcdG9wdGlvbnM6IHRoaXMuX29wdGlvbnMsXG5cdFx0XHRcdFx0XHRlcnJvcixcblx0XHRcdFx0XHRcdHJldHJ5Q291bnQ6IHRoaXMuX3JldHJ5Q291bnRcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdC8vIElmIGBzdG9wYCBpcyByZXR1cm5lZCBmcm9tIHRoZSBob29rLCB0aGUgcmV0cnkgcHJvY2VzcyBpcyBzdG9wcGVkXG5cdFx0XHRcdFx0aWYgKGhvb2tSZXN1bHQgPT09IHN0b3ApIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5fcmV0cnkoZm4pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5fb3B0aW9ucy50aHJvd0h0dHBFcnJvcnMpIHtcblx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgX2ZldGNoKCkge1xuXHRcdGZvciAoY29uc3QgaG9vayBvZiB0aGlzLl9vcHRpb25zLmhvb2tzLmJlZm9yZVJlcXVlc3QpIHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG5cdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCBob29rKHRoaXMucmVxdWVzdCwgdGhpcy5fb3B0aW9ucyk7XG5cblx0XHRcdGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG5cdFx0XHRcdHRoaXMucmVxdWVzdCA9IHJlc3VsdDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZXNwb25zZSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9vcHRpb25zLnRpbWVvdXQgPT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fb3B0aW9ucy5mZXRjaCh0aGlzLnJlcXVlc3QuY2xvbmUoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRpbWVvdXQodGhpcy5yZXF1ZXN0LmNsb25lKCksIHRoaXMuYWJvcnRDb250cm9sbGVyLCB0aGlzLl9vcHRpb25zKTtcblx0fVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF9zdHJlYW0ocmVzcG9uc2UsIG9uRG93bmxvYWRQcm9ncmVzcykge1xuXHRcdGNvbnN0IHRvdGFsQnl0ZXMgPSBOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykpIHx8IDA7XG5cdFx0bGV0IHRyYW5zZmVycmVkQnl0ZXMgPSAwO1xuXG5cdFx0cmV0dXJuIG5ldyBnbG9iYWxzLlJlc3BvbnNlKFxuXHRcdFx0bmV3IGdsb2JhbHMuUmVhZGFibGVTdHJlYW0oe1xuXHRcdFx0XHRzdGFydChjb250cm9sbGVyKSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKTtcblxuXHRcdFx0XHRcdGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MpIHtcblx0XHRcdFx0XHRcdG9uRG93bmxvYWRQcm9ncmVzcyh7cGVyY2VudDogMCwgdHJhbnNmZXJyZWRCeXRlczogMCwgdG90YWxCeXRlc30sIG5ldyBVaW50OEFycmF5KCkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGFzeW5jIGZ1bmN0aW9uIHJlYWQoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB7ZG9uZSwgdmFsdWV9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcblx0XHRcdFx0XHRcdGlmIChkb25lKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAob25Eb3dubG9hZFByb2dyZXNzKSB7XG5cdFx0XHRcdFx0XHRcdHRyYW5zZmVycmVkQnl0ZXMgKz0gdmFsdWUuYnl0ZUxlbmd0aDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcGVyY2VudCA9IHRvdGFsQnl0ZXMgPT09IDAgPyAwIDogdHJhbnNmZXJyZWRCeXRlcyAvIHRvdGFsQnl0ZXM7XG5cdFx0XHRcdFx0XHRcdG9uRG93bmxvYWRQcm9ncmVzcyh7cGVyY2VudCwgdHJhbnNmZXJyZWRCeXRlcywgdG90YWxCeXRlc30sIHZhbHVlKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29udHJvbGxlci5lbnF1ZXVlKHZhbHVlKTtcblx0XHRcdFx0XHRcdHJlYWQoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZWFkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0KTtcblx0fVxufVxuXG5jb25zdCB2YWxpZGF0ZUFuZE1lcmdlID0gKC4uLnNvdXJjZXMpID0+IHtcblx0Zm9yIChjb25zdCBzb3VyY2Ugb2Ygc291cmNlcykge1xuXHRcdGlmICgoIWlzT2JqZWN0KHNvdXJjZSkgfHwgQXJyYXkuaXNBcnJheShzb3VyY2UpKSAmJiB0eXBlb2Ygc291cmNlICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGBvcHRpb25zYCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBkZWVwTWVyZ2Uoe30sIC4uLnNvdXJjZXMpO1xufTtcblxuY29uc3QgY3JlYXRlSW5zdGFuY2UgPSBkZWZhdWx0cyA9PiB7XG5cdGNvbnN0IGt5ID0gKGlucHV0LCBvcHRpb25zKSA9PiBuZXcgS3koaW5wdXQsIHZhbGlkYXRlQW5kTWVyZ2UoZGVmYXVsdHMsIG9wdGlvbnMpKTtcblxuXHRmb3IgKGNvbnN0IG1ldGhvZCBvZiByZXF1ZXN0TWV0aG9kcykge1xuXHRcdGt5W21ldGhvZF0gPSAoaW5wdXQsIG9wdGlvbnMpID0+IG5ldyBLeShpbnB1dCwgdmFsaWRhdGVBbmRNZXJnZShkZWZhdWx0cywgb3B0aW9ucywge21ldGhvZH0pKTtcblx0fVxuXG5cdGt5LkhUVFBFcnJvciA9IEhUVFBFcnJvcjtcblx0a3kuVGltZW91dEVycm9yID0gVGltZW91dEVycm9yO1xuXHRreS5jcmVhdGUgPSBuZXdEZWZhdWx0cyA9PiBjcmVhdGVJbnN0YW5jZSh2YWxpZGF0ZUFuZE1lcmdlKG5ld0RlZmF1bHRzKSk7XG5cdGt5LmV4dGVuZCA9IG5ld0RlZmF1bHRzID0+IGNyZWF0ZUluc3RhbmNlKHZhbGlkYXRlQW5kTWVyZ2UoZGVmYXVsdHMsIG5ld0RlZmF1bHRzKSk7XG5cdGt5LnN0b3AgPSBzdG9wO1xuXG5cdHJldHVybiBreTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUluc3RhbmNlKCk7XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjMuMiBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ5MiNzZWN0aW9uLTMuNFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZnVuY3Rpb24gYWRhcHQoZGVsdGEsIG51bVBvaW50cywgZmlyc3RUaW1lKSB7XG5cdFx0dmFyIGsgPSAwO1xuXHRcdGRlbHRhID0gZmlyc3RUaW1lID8gZmxvb3IoZGVsdGEgLyBkYW1wKSA6IGRlbHRhID4+IDE7XG5cdFx0ZGVsdGEgKz0gZmxvb3IoZGVsdGEgLyBudW1Qb2ludHMpO1xuXHRcdGZvciAoLyogbm8gaW5pdGlhbGl6YXRpb24gKi87IGRlbHRhID4gYmFzZU1pbnVzVE1pbiAqIHRNYXggPj4gMTsgayArPSBiYXNlKSB7XG5cdFx0XHRkZWx0YSA9IGZsb29yKGRlbHRhIC8gYmFzZU1pbnVzVE1pbik7XG5cdFx0fVxuXHRcdHJldHVybiBmbG9vcihrICsgKGJhc2VNaW51c1RNaW4gKyAxKSAqIGRlbHRhIC8gKGRlbHRhICsgc2tldykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scyB0byBhIHN0cmluZyBvZiBVbmljb2RlXG5cdCAqIHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGRlY29kZShpbnB1dCkge1xuXHRcdC8vIERvbid0IHVzZSBVQ1MtMlxuXHRcdHZhciBvdXRwdXQgPSBbXSxcblx0XHQgICAgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGgsXG5cdFx0ICAgIG91dCxcblx0XHQgICAgaSA9IDAsXG5cdFx0ICAgIG4gPSBpbml0aWFsTixcblx0XHQgICAgYmlhcyA9IGluaXRpYWxCaWFzLFxuXHRcdCAgICBiYXNpYyxcblx0XHQgICAgaixcblx0XHQgICAgaW5kZXgsXG5cdFx0ICAgIG9sZGksXG5cdFx0ICAgIHcsXG5cdFx0ICAgIGssXG5cdFx0ICAgIGRpZ2l0LFxuXHRcdCAgICB0LFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgYmFzZU1pbnVzVDtcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHM6IGxldCBgYmFzaWNgIGJlIHRoZSBudW1iZXIgb2YgaW5wdXQgY29kZVxuXHRcdC8vIHBvaW50cyBiZWZvcmUgdGhlIGxhc3QgZGVsaW1pdGVyLCBvciBgMGAgaWYgdGhlcmUgaXMgbm9uZSwgdGhlbiBjb3B5XG5cdFx0Ly8gdGhlIGZpcnN0IGJhc2ljIGNvZGUgcG9pbnRzIHRvIHRoZSBvdXRwdXQuXG5cblx0XHRiYXNpYyA9IGlucHV0Lmxhc3RJbmRleE9mKGRlbGltaXRlcik7XG5cdFx0aWYgKGJhc2ljIDwgMCkge1xuXHRcdFx0YmFzaWMgPSAwO1xuXHRcdH1cblxuXHRcdGZvciAoaiA9IDA7IGogPCBiYXNpYzsgKytqKSB7XG5cdFx0XHQvLyBpZiBpdCdzIG5vdCBhIGJhc2ljIGNvZGUgcG9pbnRcblx0XHRcdGlmIChpbnB1dC5jaGFyQ29kZUF0KGopID49IDB4ODApIHtcblx0XHRcdFx0ZXJyb3IoJ25vdC1iYXNpYycpO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0LnB1c2goaW5wdXQuY2hhckNvZGVBdChqKSk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBkZWNvZGluZyBsb29wOiBzdGFydCBqdXN0IGFmdGVyIHRoZSBsYXN0IGRlbGltaXRlciBpZiBhbnkgYmFzaWMgY29kZVxuXHRcdC8vIHBvaW50cyB3ZXJlIGNvcGllZDsgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvdGhlcndpc2UuXG5cblx0XHRmb3IgKGluZGV4ID0gYmFzaWMgPiAwID8gYmFzaWMgKyAxIDogMDsgaW5kZXggPCBpbnB1dExlbmd0aDsgLyogbm8gZmluYWwgZXhwcmVzc2lvbiAqLykge1xuXG5cdFx0XHQvLyBgaW5kZXhgIGlzIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgY29uc3VtZWQuXG5cdFx0XHQvLyBEZWNvZGUgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciBpbnRvIGBkZWx0YWAsXG5cdFx0XHQvLyB3aGljaCBnZXRzIGFkZGVkIHRvIGBpYC4gVGhlIG92ZXJmbG93IGNoZWNraW5nIGlzIGVhc2llclxuXHRcdFx0Ly8gaWYgd2UgaW5jcmVhc2UgYGlgIGFzIHdlIGdvLCB0aGVuIHN1YnRyYWN0IG9mZiBpdHMgc3RhcnRpbmdcblx0XHRcdC8vIHZhbHVlIGF0IHRoZSBlbmQgdG8gb2J0YWluIGBkZWx0YWAuXG5cdFx0XHRmb3IgKG9sZGkgPSBpLCB3ID0gMSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cblx0XHRcdFx0aWYgKGluZGV4ID49IGlucHV0TGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ2ludmFsaWQtaW5wdXQnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRpZ2l0ID0gYmFzaWNUb0RpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXgrKykpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA+PSBiYXNlIHx8IGRpZ2l0ID4gZmxvb3IoKG1heEludCAtIGkpIC8gdykpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGkgKz0gZGlnaXQgKiB3O1xuXHRcdFx0XHR0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPCB0KSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdGlmICh3ID4gZmxvb3IobWF4SW50IC8gYmFzZU1pbnVzVCkpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHcgKj0gYmFzZU1pbnVzVDtcblxuXHRcdFx0fVxuXG5cdFx0XHRvdXQgPSBvdXRwdXQubGVuZ3RoICsgMTtcblx0XHRcdGJpYXMgPSBhZGFwdChpIC0gb2xkaSwgb3V0LCBvbGRpID09IDApO1xuXG5cdFx0XHQvLyBgaWAgd2FzIHN1cHBvc2VkIHRvIHdyYXAgYXJvdW5kIGZyb20gYG91dGAgdG8gYDBgLFxuXHRcdFx0Ly8gaW5jcmVtZW50aW5nIGBuYCBlYWNoIHRpbWUsIHNvIHdlJ2xsIGZpeCB0aGF0IG5vdzpcblx0XHRcdGlmIChmbG9vcihpIC8gb3V0KSA+IG1heEludCAtIG4pIHtcblx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdG4gKz0gZmxvb3IoaSAvIG91dCk7XG5cdFx0XHRpICU9IG91dDtcblxuXHRcdFx0Ly8gSW5zZXJ0IGBuYCBhdCBwb3NpdGlvbiBgaWAgb2YgdGhlIG91dHB1dFxuXHRcdFx0b3V0cHV0LnNwbGljZShpKyssIDAsIG4pO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVjczJlbmNvZGUob3V0cHV0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMgKGUuZy4gYSBkb21haW4gbmFtZSBsYWJlbCkgdG8gYVxuXHQgKiBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBlbmNvZGUoaW5wdXQpIHtcblx0XHR2YXIgbixcblx0XHQgICAgZGVsdGEsXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50LFxuXHRcdCAgICBiYXNpY0xlbmd0aCxcblx0XHQgICAgYmlhcyxcblx0XHQgICAgaixcblx0XHQgICAgbSxcblx0XHQgICAgcSxcblx0XHQgICAgayxcblx0XHQgICAgdCxcblx0XHQgICAgY3VycmVudFZhbHVlLFxuXHRcdCAgICBvdXRwdXQgPSBbXSxcblx0XHQgICAgLyoqIGBpbnB1dExlbmd0aGAgd2lsbCBob2xkIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgaW4gYGlucHV0YC4gKi9cblx0XHQgICAgaW5wdXRMZW5ndGgsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsXG5cdFx0ICAgIGJhc2VNaW51c1QsXG5cdFx0ICAgIHFNaW51c1Q7XG5cblx0XHQvLyBDb252ZXJ0IHRoZSBpbnB1dCBpbiBVQ1MtMiB0byBVbmljb2RlXG5cdFx0aW5wdXQgPSB1Y3MyZGVjb2RlKGlucHV0KTtcblxuXHRcdC8vIENhY2hlIHRoZSBsZW5ndGhcblx0XHRpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblxuXHRcdC8vIEluaXRpYWxpemUgdGhlIHN0YXRlXG5cdFx0biA9IGluaXRpYWxOO1xuXHRcdGRlbHRhID0gMDtcblx0XHRiaWFzID0gaW5pdGlhbEJpYXM7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzXG5cdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IDB4ODApIHtcblx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGN1cnJlbnRWYWx1ZSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGhhbmRsZWRDUENvdW50ID0gYmFzaWNMZW5ndGggPSBvdXRwdXQubGVuZ3RoO1xuXG5cdFx0Ly8gYGhhbmRsZWRDUENvdW50YCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XG5cdFx0Ly8gYGJhc2ljTGVuZ3RoYCBpcyB0aGUgbnVtYmVyIG9mIGJhc2ljIGNvZGUgcG9pbnRzLlxuXG5cdFx0Ly8gRmluaXNoIHRoZSBiYXNpYyBzdHJpbmcgLSBpZiBpdCBpcyBub3QgZW1wdHkgLSB3aXRoIGEgZGVsaW1pdGVyXG5cdFx0aWYgKGJhc2ljTGVuZ3RoKSB7XG5cdFx0XHRvdXRwdXQucHVzaChkZWxpbWl0ZXIpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZW5jb2RpbmcgbG9vcDpcblx0XHR3aGlsZSAoaGFuZGxlZENQQ291bnQgPCBpbnB1dExlbmd0aCkge1xuXG5cdFx0XHQvLyBBbGwgbm9uLWJhc2ljIGNvZGUgcG9pbnRzIDwgbiBoYXZlIGJlZW4gaGFuZGxlZCBhbHJlYWR5LiBGaW5kIHRoZSBuZXh0XG5cdFx0XHQvLyBsYXJnZXIgb25lOlxuXHRcdFx0Zm9yIChtID0gbWF4SW50LCBqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPj0gbiAmJiBjdXJyZW50VmFsdWUgPCBtKSB7XG5cdFx0XHRcdFx0bSA9IGN1cnJlbnRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJbmNyZWFzZSBgZGVsdGFgIGVub3VnaCB0byBhZHZhbmNlIHRoZSBkZWNvZGVyJ3MgPG4saT4gc3RhdGUgdG8gPG0sMD4sXG5cdFx0XHQvLyBidXQgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvd1xuXHRcdFx0aGFuZGxlZENQQ291bnRQbHVzT25lID0gaGFuZGxlZENQQ291bnQgKyAxO1xuXHRcdFx0aWYgKG0gLSBuID4gZmxvb3IoKG1heEludCAtIGRlbHRhKSAvIGhhbmRsZWRDUENvdW50UGx1c09uZSkpIHtcblx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdGRlbHRhICs9IChtIC0gbikgKiBoYW5kbGVkQ1BDb3VudFBsdXNPbmU7XG5cdFx0XHRuID0gbTtcblxuXHRcdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IG4gJiYgKytkZWx0YSA+IG1heEludCkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA9PSBuKSB7XG5cdFx0XHRcdFx0Ly8gUmVwcmVzZW50IGRlbHRhIGFzIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXJcblx0XHRcdFx0XHRmb3IgKHEgPSBkZWx0YSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cdFx0XHRcdFx0XHR0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblx0XHRcdFx0XHRcdGlmIChxIDwgdCkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHFNaW51c1QgPSBxIC0gdDtcblx0XHRcdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0XHRcdG91dHB1dC5wdXNoKFxuXHRcdFx0XHRcdFx0XHRzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHQgKyBxTWludXNUICUgYmFzZU1pbnVzVCwgMCkpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cSA9IGZsb29yKHFNaW51c1QgLyBiYXNlTWludXNUKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHEsIDApKSk7XG5cdFx0XHRcdFx0YmlhcyA9IGFkYXB0KGRlbHRhLCBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsIGhhbmRsZWRDUENvdW50ID09IGJhc2ljTGVuZ3RoKTtcblx0XHRcdFx0XHRkZWx0YSA9IDA7XG5cdFx0XHRcdFx0KytoYW5kbGVkQ1BDb3VudDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQrK2RlbHRhO1xuXHRcdFx0KytuO1xuXG5cdFx0fVxuXHRcdHJldHVybiBvdXRwdXQuam9pbignJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgb3IgYW4gZW1haWwgYWRkcmVzc1xuXHQgKiB0byBVbmljb2RlLiBPbmx5IHRoZSBQdW55Y29kZWQgcGFydHMgb2YgdGhlIGlucHV0IHdpbGwgYmUgY29udmVydGVkLCBpLmUuXG5cdCAqIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IG9uIGEgc3RyaW5nIHRoYXQgaGFzIGFscmVhZHkgYmVlblxuXHQgKiBjb252ZXJ0ZWQgdG8gVW5pY29kZS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGVkIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogY29udmVydCB0byBVbmljb2RlLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgVW5pY29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gUHVueWNvZGVcblx0ICogc3RyaW5nLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9Vbmljb2RlKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhQdW55Y29kZS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyBkZWNvZGUoc3RyaW5nLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpXG5cdFx0XHRcdDogc3RyaW5nO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgVW5pY29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgb3IgYW4gZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBQdW55Y29kZS4gT25seSB0aGUgbm9uLUFTQ0lJIHBhcnRzIG9mIHRoZSBkb21haW4gbmFtZSB3aWxsIGJlIGNvbnZlcnRlZCxcblx0ICogaS5lLiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCB3aXRoIGEgZG9tYWluIHRoYXQncyBhbHJlYWR5IGluXG5cdCAqIEFTQ0lJLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvIGNvbnZlcnQsIGFzIGFcblx0ICogVW5pY29kZSBzdHJpbmcuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBQdW55Y29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gZG9tYWluIG5hbWUgb3Jcblx0ICogZW1haWwgYWRkcmVzcy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvQVNDSUkoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleE5vbkFTQ0lJLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/ICd4bi0tJyArIGVuY29kZShzdHJpbmcpXG5cdFx0XHRcdDogc3RyaW5nO1xuXHRcdH0pO1xuXHR9XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0LyoqIERlZmluZSB0aGUgcHVibGljIEFQSSAqL1xuXHRwdW55Y29kZSA9IHtcblx0XHQvKipcblx0XHQgKiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgUHVueWNvZGUuanMgdmVyc2lvbiBudW1iZXIuXG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgU3RyaW5nXG5cdFx0ICovXG5cdFx0J3ZlcnNpb24nOiAnMS4zLjInLFxuXHRcdC8qKlxuXHRcdCAqIEFuIG9iamVjdCBvZiBtZXRob2RzIHRvIGNvbnZlcnQgZnJvbSBKYXZhU2NyaXB0J3MgaW50ZXJuYWwgY2hhcmFjdGVyXG5cdFx0ICogcmVwcmVzZW50YXRpb24gKFVDUy0yKSB0byBVbmljb2RlIGNvZGUgcG9pbnRzLCBhbmQgYmFjay5cblx0XHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBPYmplY3Rcblx0XHQgKi9cblx0XHQndWNzMic6IHtcblx0XHRcdCdkZWNvZGUnOiB1Y3MyZGVjb2RlLFxuXHRcdFx0J2VuY29kZSc6IHVjczJlbmNvZGVcblx0XHR9LFxuXHRcdCdkZWNvZGUnOiBkZWNvZGUsXG5cdFx0J2VuY29kZSc6IGVuY29kZSxcblx0XHQndG9BU0NJSSc6IHRvQVNDSUksXG5cdFx0J3RvVW5pY29kZSc6IHRvVW5pY29kZVxuXHR9O1xuXG5cdC8qKiBFeHBvc2UgYHB1bnljb2RlYCAqL1xuXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcblx0Ly8gbGlrZSB0aGUgZm9sbG93aW5nOlxuXHRpZiAoXG5cdFx0dHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmXG5cdFx0dHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcgJiZcblx0XHRkZWZpbmUuYW1kXG5cdCkge1xuXHRcdGRlZmluZSgncHVueWNvZGUnLCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBwdW55Y29kZTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChmcmVlRXhwb3J0cyAmJiBmcmVlTW9kdWxlKSB7XG5cdFx0aWYgKG1vZHVsZS5leHBvcnRzID09IGZyZWVFeHBvcnRzKSB7IC8vIGluIE5vZGUuanMgb3IgUmluZ29KUyB2MC44LjArXG5cdFx0XHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBwdW55Y29kZTtcblx0XHR9IGVsc2UgeyAvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHsgLy8gaW4gUmhpbm8gb3IgYSB3ZWIgYnJvd3NlclxuXHRcdHJvb3QucHVueWNvZGUgPSBwdW55Y29kZTtcblx0fVxuXG59KHRoaXMpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8vIElmIG9iai5oYXNPd25Qcm9wZXJ0eSBoYXMgYmVlbiBvdmVycmlkZGVuLCB0aGVuIGNhbGxpbmdcbi8vIG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSB3aWxsIGJyZWFrLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vam95ZW50L25vZGUvaXNzdWVzLzE3MDdcbmZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ocXMsIHNlcCwgZXEsIG9wdGlvbnMpIHtcbiAgc2VwID0gc2VwIHx8ICcmJztcbiAgZXEgPSBlcSB8fCAnPSc7XG4gIHZhciBvYmogPSB7fTtcblxuICBpZiAodHlwZW9mIHFzICE9PSAnc3RyaW5nJyB8fCBxcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgdmFyIHJlZ2V4cCA9IC9cXCsvZztcbiAgcXMgPSBxcy5zcGxpdChzZXApO1xuXG4gIHZhciBtYXhLZXlzID0gMTAwMDtcbiAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMubWF4S2V5cyA9PT0gJ251bWJlcicpIHtcbiAgICBtYXhLZXlzID0gb3B0aW9ucy5tYXhLZXlzO1xuICB9XG5cbiAgdmFyIGxlbiA9IHFzLmxlbmd0aDtcbiAgLy8gbWF4S2V5cyA8PSAwIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIG5vdCBsaW1pdCBrZXlzIGNvdW50XG4gIGlmIChtYXhLZXlzID4gMCAmJiBsZW4gPiBtYXhLZXlzKSB7XG4gICAgbGVuID0gbWF4S2V5cztcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgeCA9IHFzW2ldLnJlcGxhY2UocmVnZXhwLCAnJTIwJyksXG4gICAgICAgIGlkeCA9IHguaW5kZXhPZihlcSksXG4gICAgICAgIGtzdHIsIHZzdHIsIGssIHY7XG5cbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIGtzdHIgPSB4LnN1YnN0cigwLCBpZHgpO1xuICAgICAgdnN0ciA9IHguc3Vic3RyKGlkeCArIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrc3RyID0geDtcbiAgICAgIHZzdHIgPSAnJztcbiAgICB9XG5cbiAgICBrID0gZGVjb2RlVVJJQ29tcG9uZW50KGtzdHIpO1xuICAgIHYgPSBkZWNvZGVVUklDb21wb25lbnQodnN0cik7XG5cbiAgICBpZiAoIWhhc093blByb3BlcnR5KG9iaiwgaykpIHtcbiAgICAgIG9ialtrXSA9IHY7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9ialtrXSkpIHtcbiAgICAgIG9ialtrXS5wdXNoKHYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmpba10gPSBbb2JqW2tdLCB2XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gb2JqW2tdLm1hcChmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsImZ1bmN0aW9uIG5vcm1hbGl6ZSAoc3RyKSB7XG4gIHJldHVybiBzdHJcbiAgICAgICAgICAucmVwbGFjZSgvW1xcL10rL2csICcvJylcbiAgICAgICAgICAucmVwbGFjZSgvXFwvXFw/L2csICc/JylcbiAgICAgICAgICAucmVwbGFjZSgvXFwvXFwjL2csICcjJylcbiAgICAgICAgICAucmVwbGFjZSgvXFw6XFwvL2csICc6Ly8nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBqb2luZWQgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCkuam9pbignLycpO1xuICByZXR1cm4gbm9ybWFsaXplKGpvaW5lZCk7XG59OyIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBwdW55Y29kZSA9IHJlcXVpcmUoJ3B1bnljb2RlJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gU3BlY2lhbCBjYXNlIGZvciBhIHNpbXBsZSBwYXRoIFVSTFxuICAgIHNpbXBsZVBhdGhQYXR0ZXJuID0gL14oXFwvXFwvPyg/IVxcLylbXlxcP1xcc10qKShcXD9bXlxcc10qKT8kLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlsrYS16MC05QS1aXy1dezAsNjN9JC8sXG4gICAgaG9zdG5hbWVQYXJ0U3RhcnQgPSAvXihbK2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgdXRpbC5pc09iamVjdCh1cmwpICYmIHVybCBpbnN0YW5jZW9mIFVybCkgcmV0dXJuIHVybDtcblxuICB2YXIgdSA9IG5ldyBVcmw7XG4gIHUucGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCk7XG4gIHJldHVybiB1O1xufVxuXG5VcmwucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24odXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAoIXV0aWwuaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICAvLyBDb3B5IGNocm9tZSwgSUUsIG9wZXJhIGJhY2tzbGFzaC1oYW5kbGluZyBiZWhhdmlvci5cbiAgLy8gQmFjayBzbGFzaGVzIGJlZm9yZSB0aGUgcXVlcnkgc3RyaW5nIGdldCBjb252ZXJ0ZWQgdG8gZm9yd2FyZCBzbGFzaGVzXG4gIC8vIFNlZTogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTI1OTE2XG4gIHZhciBxdWVyeUluZGV4ID0gdXJsLmluZGV4T2YoJz8nKSxcbiAgICAgIHNwbGl0dGVyID1cbiAgICAgICAgICAocXVlcnlJbmRleCAhPT0gLTEgJiYgcXVlcnlJbmRleCA8IHVybC5pbmRleE9mKCcjJykpID8gJz8nIDogJyMnLFxuICAgICAgdVNwbGl0ID0gdXJsLnNwbGl0KHNwbGl0dGVyKSxcbiAgICAgIHNsYXNoUmVnZXggPSAvXFxcXC9nO1xuICB1U3BsaXRbMF0gPSB1U3BsaXRbMF0ucmVwbGFjZShzbGFzaFJlZ2V4LCAnLycpO1xuICB1cmwgPSB1U3BsaXQuam9pbihzcGxpdHRlcik7XG5cbiAgdmFyIHJlc3QgPSB1cmw7XG5cbiAgLy8gdHJpbSBiZWZvcmUgcHJvY2VlZGluZy5cbiAgLy8gVGhpcyBpcyB0byBzdXBwb3J0IHBhcnNlIHN0dWZmIGxpa2UgXCIgIGh0dHA6Ly9mb28uY29tICBcXG5cIlxuICByZXN0ID0gcmVzdC50cmltKCk7XG5cbiAgaWYgKCFzbGFzaGVzRGVub3RlSG9zdCAmJiB1cmwuc3BsaXQoJyMnKS5sZW5ndGggPT09IDEpIHtcbiAgICAvLyBUcnkgZmFzdCBwYXRoIHJlZ2V4cFxuICAgIHZhciBzaW1wbGVQYXRoID0gc2ltcGxlUGF0aFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgICBpZiAoc2ltcGxlUGF0aCkge1xuICAgICAgdGhpcy5wYXRoID0gcmVzdDtcbiAgICAgIHRoaXMuaHJlZiA9IHJlc3Q7XG4gICAgICB0aGlzLnBhdGhuYW1lID0gc2ltcGxlUGF0aFsxXTtcbiAgICAgIGlmIChzaW1wbGVQYXRoWzJdKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoID0gc2ltcGxlUGF0aFsyXTtcbiAgICAgICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5zZWFyY2guc3Vic3RyKDEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5zZWFyY2guc3Vic3RyKDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZWFyY2ggPSAnJztcbiAgICAgICAgdGhpcy5xdWVyeSA9IHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9XG5cbiAgdmFyIHByb3RvID0gcHJvdG9jb2xQYXR0ZXJuLmV4ZWMocmVzdCk7XG4gIGlmIChwcm90bykge1xuICAgIHByb3RvID0gcHJvdG9bMF07XG4gICAgdmFyIGxvd2VyUHJvdG8gPSBwcm90by50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMucHJvdG9jb2wgPSBsb3dlclByb3RvO1xuICAgIHJlc3QgPSByZXN0LnN1YnN0cihwcm90by5sZW5ndGgpO1xuICB9XG5cbiAgLy8gZmlndXJlIG91dCBpZiBpdCdzIGdvdCBhIGhvc3RcbiAgLy8gdXNlckBzZXJ2ZXIgaXMgKmFsd2F5cyogaW50ZXJwcmV0ZWQgYXMgYSBob3N0bmFtZSwgYW5kIHVybFxuICAvLyByZXNvbHV0aW9uIHdpbGwgdHJlYXQgLy9mb28vYmFyIGFzIGhvc3Q9Zm9vLHBhdGg9YmFyIGJlY2F1c2UgdGhhdCdzXG4gIC8vIGhvdyB0aGUgYnJvd3NlciByZXNvbHZlcyByZWxhdGl2ZSBVUkxzLlxuICBpZiAoc2xhc2hlc0Rlbm90ZUhvc3QgfHwgcHJvdG8gfHwgcmVzdC5tYXRjaCgvXlxcL1xcL1teQFxcL10rQFteQFxcL10rLykpIHtcbiAgICB2YXIgc2xhc2hlcyA9IHJlc3Quc3Vic3RyKDAsIDIpID09PSAnLy8nO1xuICAgIGlmIChzbGFzaGVzICYmICEocHJvdG8gJiYgaG9zdGxlc3NQcm90b2NvbFtwcm90b10pKSB7XG4gICAgICByZXN0ID0gcmVzdC5zdWJzdHIoMik7XG4gICAgICB0aGlzLnNsYXNoZXMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghaG9zdGxlc3NQcm90b2NvbFtwcm90b10gJiZcbiAgICAgIChzbGFzaGVzIHx8IChwcm90byAmJiAhc2xhc2hlZFByb3RvY29sW3Byb3RvXSkpKSB7XG5cbiAgICAvLyB0aGVyZSdzIGEgaG9zdG5hbWUuXG4gICAgLy8gdGhlIGZpcnN0IGluc3RhbmNlIG9mIC8sID8sIDssIG9yICMgZW5kcyB0aGUgaG9zdC5cbiAgICAvL1xuICAgIC8vIElmIHRoZXJlIGlzIGFuIEAgaW4gdGhlIGhvc3RuYW1lLCB0aGVuIG5vbi1ob3N0IGNoYXJzICphcmUqIGFsbG93ZWRcbiAgICAvLyB0byB0aGUgbGVmdCBvZiB0aGUgbGFzdCBAIHNpZ24sIHVubGVzcyBzb21lIGhvc3QtZW5kaW5nIGNoYXJhY3RlclxuICAgIC8vIGNvbWVzICpiZWZvcmUqIHRoZSBALXNpZ24uXG4gICAgLy8gVVJMcyBhcmUgb2Jub3hpb3VzLlxuICAgIC8vXG4gICAgLy8gZXg6XG4gICAgLy8gaHR0cDovL2FAYkBjLyA9PiB1c2VyOmFAYiBob3N0OmNcbiAgICAvLyBodHRwOi8vYUBiP0BjID0+IHVzZXI6YSBob3N0OmMgcGF0aDovP0BjXG5cbiAgICAvLyB2MC4xMiBUT0RPKGlzYWFjcyk6IFRoaXMgaXMgbm90IHF1aXRlIGhvdyBDaHJvbWUgZG9lcyB0aGluZ3MuXG4gICAgLy8gUmV2aWV3IG91ciB0ZXN0IGNhc2UgYWdhaW5zdCBicm93c2VycyBtb3JlIGNvbXByZWhlbnNpdmVseS5cblxuICAgIC8vIGZpbmQgdGhlIGZpcnN0IGluc3RhbmNlIG9mIGFueSBob3N0RW5kaW5nQ2hhcnNcbiAgICB2YXIgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9zdEVuZGluZ0NoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKGhvc3RFbmRpbmdDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuXG4gICAgLy8gYXQgdGhpcyBwb2ludCwgZWl0aGVyIHdlIGhhdmUgYW4gZXhwbGljaXQgcG9pbnQgd2hlcmUgdGhlXG4gICAgLy8gYXV0aCBwb3J0aW9uIGNhbm5vdCBnbyBwYXN0LCBvciB0aGUgbGFzdCBAIGNoYXIgaXMgdGhlIGRlY2lkZXIuXG4gICAgdmFyIGF1dGgsIGF0U2lnbjtcbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpIHtcbiAgICAgIC8vIGF0U2lnbiBjYW4gYmUgYW55d2hlcmUuXG4gICAgICBhdFNpZ24gPSByZXN0Lmxhc3RJbmRleE9mKCdAJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGF0U2lnbiBtdXN0IGJlIGluIGF1dGggcG9ydGlvbi5cbiAgICAgIC8vIGh0dHA6Ly9hQGIvY0BkID0+IGhvc3Q6YiBhdXRoOmEgcGF0aDovY0BkXG4gICAgICBhdFNpZ24gPSByZXN0Lmxhc3RJbmRleE9mKCdAJywgaG9zdEVuZCk7XG4gICAgfVxuXG4gICAgLy8gTm93IHdlIGhhdmUgYSBwb3J0aW9uIHdoaWNoIGlzIGRlZmluaXRlbHkgdGhlIGF1dGguXG4gICAgLy8gUHVsbCB0aGF0IG9mZi5cbiAgICBpZiAoYXRTaWduICE9PSAtMSkge1xuICAgICAgYXV0aCA9IHJlc3Quc2xpY2UoMCwgYXRTaWduKTtcbiAgICAgIHJlc3QgPSByZXN0LnNsaWNlKGF0U2lnbiArIDEpO1xuICAgICAgdGhpcy5hdXRoID0gZGVjb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIH1cblxuICAgIC8vIHRoZSBob3N0IGlzIHRoZSByZW1haW5pbmcgdG8gdGhlIGxlZnQgb2YgdGhlIGZpcnN0IG5vbi1ob3N0IGNoYXJcbiAgICBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub25Ib3N0Q2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2Yobm9uSG9zdENoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG4gICAgLy8gaWYgd2Ugc3RpbGwgaGF2ZSBub3QgaGl0IGl0LCB0aGVuIHRoZSBlbnRpcmUgdGhpbmcgaXMgYSBob3N0LlxuICAgIGlmIChob3N0RW5kID09PSAtMSlcbiAgICAgIGhvc3RFbmQgPSByZXN0Lmxlbmd0aDtcblxuICAgIHRoaXMuaG9zdCA9IHJlc3Quc2xpY2UoMCwgaG9zdEVuZCk7XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoaG9zdEVuZCk7XG5cbiAgICAvLyBwdWxsIG91dCBwb3J0LlxuICAgIHRoaXMucGFyc2VIb3N0KCk7XG5cbiAgICAvLyB3ZSd2ZSBpbmRpY2F0ZWQgdGhhdCB0aGVyZSBpcyBhIGhvc3RuYW1lLFxuICAgIC8vIHNvIGV2ZW4gaWYgaXQncyBlbXB0eSwgaXQgaGFzIHRvIGJlIHByZXNlbnQuXG4gICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG5cbiAgICAvLyBpZiBob3N0bmFtZSBiZWdpbnMgd2l0aCBbIGFuZCBlbmRzIHdpdGggXVxuICAgIC8vIGFzc3VtZSB0aGF0IGl0J3MgYW4gSVB2NiBhZGRyZXNzLlxuICAgIHZhciBpcHY2SG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lWzBdID09PSAnWycgJiZcbiAgICAgICAgdGhpcy5ob3N0bmFtZVt0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDFdID09PSAnXSc7XG5cbiAgICAvLyB2YWxpZGF0ZSBhIGxpdHRsZS5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgdmFyIGhvc3RwYXJ0cyA9IHRoaXMuaG9zdG5hbWUuc3BsaXQoL1xcLi8pO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBob3N0cGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZhciBwYXJ0ID0gaG9zdHBhcnRzW2ldO1xuICAgICAgICBpZiAoIXBhcnQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIXBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICB2YXIgbmV3cGFydCA9ICcnO1xuICAgICAgICAgIGZvciAodmFyIGogPSAwLCBrID0gcGFydC5sZW5ndGg7IGogPCBrOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChwYXJ0LmNoYXJDb2RlQXQoaikgPiAxMjcpIHtcbiAgICAgICAgICAgICAgLy8gd2UgcmVwbGFjZSBub24tQVNDSUkgY2hhciB3aXRoIGEgdGVtcG9yYXJ5IHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgIC8vIHdlIG5lZWQgdGhpcyB0byBtYWtlIHN1cmUgc2l6ZSBvZiBob3N0bmFtZSBpcyBub3RcbiAgICAgICAgICAgICAgLy8gYnJva2VuIGJ5IHJlcGxhY2luZyBub24tQVNDSUkgYnkgbm90aGluZ1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9ICd4JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gcGFydFtqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gd2UgdGVzdCBhZ2FpbiB3aXRoIEFTQ0lJIGNoYXIgb25seVxuICAgICAgICAgIGlmICghbmV3cGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgICAgdmFyIHZhbGlkUGFydHMgPSBob3N0cGFydHMuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICB2YXIgbm90SG9zdCA9IGhvc3RwYXJ0cy5zbGljZShpICsgMSk7XG4gICAgICAgICAgICB2YXIgYml0ID0gcGFydC5tYXRjaChob3N0bmFtZVBhcnRTdGFydCk7XG4gICAgICAgICAgICBpZiAoYml0KSB7XG4gICAgICAgICAgICAgIHZhbGlkUGFydHMucHVzaChiaXRbMV0pO1xuICAgICAgICAgICAgICBub3RIb3N0LnVuc2hpZnQoYml0WzJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub3RIb3N0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXN0ID0gJy8nICsgbm90SG9zdC5qb2luKCcuJykgKyByZXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ob3N0bmFtZSA9IHZhbGlkUGFydHMuam9pbignLicpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaG9zdG5hbWUubGVuZ3RoID4gaG9zdG5hbWVNYXhMZW4pIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaG9zdG5hbWVzIGFyZSBhbHdheXMgbG93ZXIgY2FzZS5cbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIC8vIElETkEgU3VwcG9ydDogUmV0dXJucyBhIHB1bnljb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGF2ZSBub24tQVNDSUkgY2hhcmFjdGVycywgaS5lLiBpdCBkb2Vzbid0IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgQVNDSUktb25seS5cbiAgICAgIHRoaXMuaG9zdG5hbWUgPSBwdW55Y29kZS50b0FTQ0lJKHRoaXMuaG9zdG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBwID0gdGhpcy5wb3J0ID8gJzonICsgdGhpcy5wb3J0IDogJyc7XG4gICAgdmFyIGggPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuICAgIHRoaXMuaG9zdCA9IGggKyBwO1xuICAgIHRoaXMuaHJlZiArPSB0aGlzLmhvc3Q7XG5cbiAgICAvLyBzdHJpcCBbIGFuZCBdIGZyb20gdGhlIGhvc3RuYW1lXG4gICAgLy8gdGhlIGhvc3QgZmllbGQgc3RpbGwgcmV0YWlucyB0aGVtLCB0aG91Z2hcbiAgICBpZiAoaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS5zdWJzdHIoMSwgdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIGlmIChyZXN0WzBdICE9PSAnLycpIHtcbiAgICAgICAgcmVzdCA9ICcvJyArIHJlc3Q7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gbm93IHJlc3QgaXMgc2V0IHRvIHRoZSBwb3N0LWhvc3Qgc3R1ZmYuXG4gIC8vIGNob3Agb2ZmIGFueSBkZWxpbSBjaGFycy5cbiAgaWYgKCF1bnNhZmVQcm90b2NvbFtsb3dlclByb3RvXSkge1xuXG4gICAgLy8gRmlyc3QsIG1ha2UgMTAwJSBzdXJlIHRoYXQgYW55IFwiYXV0b0VzY2FwZVwiIGNoYXJzIGdldFxuICAgIC8vIGVzY2FwZWQsIGV2ZW4gaWYgZW5jb2RlVVJJQ29tcG9uZW50IGRvZXNuJ3QgdGhpbmsgdGhleVxuICAgIC8vIG5lZWQgdG8gYmUuXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhdXRvRXNjYXBlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIGFlID0gYXV0b0VzY2FwZVtpXTtcbiAgICAgIGlmIChyZXN0LmluZGV4T2YoYWUpID09PSAtMSlcbiAgICAgICAgY29udGludWU7XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKHV0aWwuaXNTdHJpbmcob2JqKSkgb2JqID0gdXJsUGFyc2Uob2JqKTtcbiAgaWYgKCEob2JqIGluc3RhbmNlb2YgVXJsKSkgcmV0dXJuIFVybC5wcm90b3R5cGUuZm9ybWF0LmNhbGwob2JqKTtcbiAgcmV0dXJuIG9iai5mb3JtYXQoKTtcbn1cblxuVXJsLnByb3RvdHlwZS5mb3JtYXQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGF1dGggPSB0aGlzLmF1dGggfHwgJyc7XG4gIGlmIChhdXRoKSB7XG4gICAgYXV0aCA9IGVuY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICBhdXRoID0gYXV0aC5yZXBsYWNlKC8lM0EvaSwgJzonKTtcbiAgICBhdXRoICs9ICdAJztcbiAgfVxuXG4gIHZhciBwcm90b2NvbCA9IHRoaXMucHJvdG9jb2wgfHwgJycsXG4gICAgICBwYXRobmFtZSA9IHRoaXMucGF0aG5hbWUgfHwgJycsXG4gICAgICBoYXNoID0gdGhpcy5oYXNoIHx8ICcnLFxuICAgICAgaG9zdCA9IGZhbHNlLFxuICAgICAgcXVlcnkgPSAnJztcblxuICBpZiAodGhpcy5ob3N0KSB7XG4gICAgaG9zdCA9IGF1dGggKyB0aGlzLmhvc3Q7XG4gIH0gZWxzZSBpZiAodGhpcy5ob3N0bmFtZSkge1xuICAgIGhvc3QgPSBhdXRoICsgKHRoaXMuaG9zdG5hbWUuaW5kZXhPZignOicpID09PSAtMSA/XG4gICAgICAgIHRoaXMuaG9zdG5hbWUgOlxuICAgICAgICAnWycgKyB0aGlzLmhvc3RuYW1lICsgJ10nKTtcbiAgICBpZiAodGhpcy5wb3J0KSB7XG4gICAgICBob3N0ICs9ICc6JyArIHRoaXMucG9ydDtcbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy5xdWVyeSAmJlxuICAgICAgdXRpbC5pc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAodXRpbC5pc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgdmFyIHRrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gIGZvciAodmFyIHRrID0gMDsgdGsgPCB0a2V5cy5sZW5ndGg7IHRrKyspIHtcbiAgICB2YXIgdGtleSA9IHRrZXlzW3RrXTtcbiAgICByZXN1bHRbdGtleV0gPSB0aGlzW3RrZXldO1xuICB9XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICB2YXIgcmtleXMgPSBPYmplY3Qua2V5cyhyZWxhdGl2ZSk7XG4gICAgZm9yICh2YXIgcmsgPSAwOyByayA8IHJrZXlzLmxlbmd0aDsgcmsrKykge1xuICAgICAgdmFyIHJrZXkgPSBya2V5c1tya107XG4gICAgICBpZiAocmtleSAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W3JrZXldID0gcmVsYXRpdmVbcmtleV07XG4gICAgfVxuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMocmVsYXRpdmUpO1xuICAgICAgZm9yICh2YXIgdiA9IDA7IHYgPCBrZXlzLmxlbmd0aDsgdisrKSB7XG4gICAgICAgIHZhciBrID0ga2V5c1t2XTtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9XG4gICAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmVzdWx0LnByb3RvY29sID0gcmVsYXRpdmUucHJvdG9jb2w7XG4gICAgaWYgKCFyZWxhdGl2ZS5ob3N0ICYmICFob3N0bGVzc1Byb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgdmFyIHJlbFBhdGggPSAocmVsYXRpdmUucGF0aG5hbWUgfHwgJycpLnNwbGl0KCcvJyk7XG4gICAgICB3aGlsZSAocmVsUGF0aC5sZW5ndGggJiYgIShyZWxhdGl2ZS5ob3N0ID0gcmVsUGF0aC5zaGlmdCgpKSk7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3QpIHJlbGF0aXZlLmhvc3QgPSAnJztcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdG5hbWUpIHJlbGF0aXZlLmhvc3RuYW1lID0gJyc7XG4gICAgICBpZiAocmVsUGF0aFswXSAhPT0gJycpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICBpZiAocmVsUGF0aC5sZW5ndGggPCAyKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsUGF0aC5qb2luKCcvJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbGF0aXZlLnBhdGhuYW1lO1xuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHJlc3VsdC5ob3N0ID0gcmVsYXRpdmUuaG9zdCB8fCAnJztcbiAgICByZXN1bHQuYXV0aCA9IHJlbGF0aXZlLmF1dGg7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVsYXRpdmUuaG9zdG5hbWUgfHwgcmVsYXRpdmUuaG9zdDtcbiAgICByZXN1bHQucG9ydCA9IHJlbGF0aXZlLnBvcnQ7XG4gICAgLy8gdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnBhdGhuYW1lIHx8IHJlc3VsdC5zZWFyY2gpIHtcbiAgICAgIHZhciBwID0gcmVzdWx0LnBhdGhuYW1lIHx8ICcnO1xuICAgICAgdmFyIHMgPSByZXN1bHQuc2VhcmNoIHx8ICcnO1xuICAgICAgcmVzdWx0LnBhdGggPSBwICsgcztcbiAgICB9XG4gICAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB2YXIgaXNTb3VyY2VBYnMgPSAocmVzdWx0LnBhdGhuYW1lICYmIHJlc3VsdC5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJyksXG4gICAgICBpc1JlbEFicyA9IChcbiAgICAgICAgICByZWxhdGl2ZS5ob3N0IHx8XG4gICAgICAgICAgcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLydcbiAgICAgICksXG4gICAgICBtdXN0RW5kQWJzID0gKGlzUmVsQWJzIHx8IGlzU291cmNlQWJzIHx8XG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuaG9zdCAmJiByZWxhdGl2ZS5wYXRobmFtZSkpLFxuICAgICAgcmVtb3ZlQWxsRG90cyA9IG11c3RFbmRBYnMsXG4gICAgICBzcmNQYXRoID0gcmVzdWx0LnBhdGhuYW1lICYmIHJlc3VsdC5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcmVsUGF0aCA9IHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICBwc3ljaG90aWMgPSByZXN1bHQucHJvdG9jb2wgJiYgIXNsYXNoZWRQcm90b2NvbFtyZXN1bHQucHJvdG9jb2xdO1xuXG4gIC8vIGlmIHRoZSB1cmwgaXMgYSBub24tc2xhc2hlZCB1cmwsIHRoZW4gcmVsYXRpdmVcbiAgLy8gbGlua3MgbGlrZSAuLi8uLiBzaG91bGQgYmUgYWJsZVxuICAvLyB0byBjcmF3bCB1cCB0byB0aGUgaG9zdG5hbWUsIGFzIHdlbGwuICBUaGlzIGlzIHN0cmFuZ2UuXG4gIC8vIHJlc3VsdC5wcm90b2NvbCBoYXMgYWxyZWFkeSBiZWVuIHNldCBieSBub3cuXG4gIC8vIExhdGVyIG9uLCBwdXQgdGhlIGZpcnN0IHBhdGggcGFydCBpbnRvIHRoZSBob3N0IGZpZWxkLlxuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gJyc7XG4gICAgcmVzdWx0LnBvcnQgPSBudWxsO1xuICAgIGlmIChyZXN1bHQuaG9zdCkge1xuICAgICAgaWYgKHNyY1BhdGhbMF0gPT09ICcnKSBzcmNQYXRoWzBdID0gcmVzdWx0Lmhvc3Q7XG4gICAgICBlbHNlIHNyY1BhdGgudW5zaGlmdChyZXN1bHQuaG9zdCk7XG4gICAgfVxuICAgIHJlc3VsdC5ob3N0ID0gJyc7XG4gICAgaWYgKHJlbGF0aXZlLnByb3RvY29sKSB7XG4gICAgICByZWxhdGl2ZS5ob3N0bmFtZSA9IG51bGw7XG4gICAgICByZWxhdGl2ZS5wb3J0ID0gbnVsbDtcbiAgICAgIGlmIChyZWxhdGl2ZS5ob3N0KSB7XG4gICAgICAgIGlmIChyZWxQYXRoWzBdID09PSAnJykgcmVsUGF0aFswXSA9IHJlbGF0aXZlLmhvc3Q7XG4gICAgICAgIGVsc2UgcmVsUGF0aC51bnNoaWZ0KHJlbGF0aXZlLmhvc3QpO1xuICAgICAgfVxuICAgICAgcmVsYXRpdmUuaG9zdCA9IG51bGw7XG4gICAgfVxuICAgIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzICYmIChyZWxQYXRoWzBdID09PSAnJyB8fCBzcmNQYXRoWzBdID09PSAnJyk7XG4gIH1cblxuICBpZiAoaXNSZWxBYnMpIHtcbiAgICAvLyBpdCdzIGFic29sdXRlLlxuICAgIHJlc3VsdC5ob3N0ID0gKHJlbGF0aXZlLmhvc3QgfHwgcmVsYXRpdmUuaG9zdCA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3QgOiByZXN1bHQuaG9zdDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAocmVsYXRpdmUuaG9zdG5hbWUgfHwgcmVsYXRpdmUuaG9zdG5hbWUgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgOiByZXN1bHQuaG9zdG5hbWU7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICBzcmNQYXRoID0gcmVsUGF0aDtcbiAgICAvLyBmYWxsIHRocm91Z2ggdG8gdGhlIGRvdC1oYW5kbGluZyBiZWxvdy5cbiAgfSBlbHNlIGlmIChyZWxQYXRoLmxlbmd0aCkge1xuICAgIC8vIGl0J3MgcmVsYXRpdmVcbiAgICAvLyB0aHJvdyBhd2F5IHRoZSBleGlzdGluZyBmaWxlLCBhbmQgdGFrZSB0aGUgbmV3IHBhdGggaW5zdGVhZC5cbiAgICBpZiAoIXNyY1BhdGgpIHNyY1BhdGggPSBbXTtcbiAgICBzcmNQYXRoLnBvcCgpO1xuICAgIHNyY1BhdGggPSBzcmNQYXRoLmNvbmNhdChyZWxQYXRoKTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICB9IGVsc2UgaWYgKCF1dGlsLmlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbGx5IGhhcHBlbnMgaW4gY2FzZXMgbGlrZVxuICAgICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ob3N0LnNwbGl0KCdAJykgOiBmYWxzZTtcbiAgICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgICByZXN1bHQuaG9zdCA9IHJlc3VsdC5ob3N0bmFtZSA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKCF1dGlsLmlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICF1dGlsLmlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCB8fCBzcmNQYXRoLmxlbmd0aCA+IDEpICYmXG4gICAgICAobGFzdCA9PT0gJy4nIHx8IGxhc3QgPT09ICcuLicpIHx8IGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PT0gJy4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwLS07XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIHBhdGggaXMgYWxsb3dlZCB0byBnbyBhYm92ZSB0aGUgcm9vdCwgcmVzdG9yZSBsZWFkaW5nIC4uc1xuICBpZiAoIW11c3RFbmRBYnMgJiYgIXJlbW92ZUFsbERvdHMpIHtcbiAgICBmb3IgKDsgdXAtLTsgdXApIHtcbiAgICAgIHNyY1BhdGgudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAobXVzdEVuZEFicyAmJiBzcmNQYXRoWzBdICE9PSAnJyAmJlxuICAgICAgKCFzcmNQYXRoWzBdIHx8IHNyY1BhdGhbMF0uY2hhckF0KDApICE9PSAnLycpKSB7XG4gICAgc3JjUGF0aC51bnNoaWZ0KCcnKTtcbiAgfVxuXG4gIGlmIChoYXNUcmFpbGluZ1NsYXNoICYmIChzcmNQYXRoLmpvaW4oJy8nKS5zdWJzdHIoLTEpICE9PSAnLycpKSB7XG4gICAgc3JjUGF0aC5wdXNoKCcnKTtcbiAgfVxuXG4gIHZhciBpc0Fic29sdXRlID0gc3JjUGF0aFswXSA9PT0gJycgfHxcbiAgICAgIChzcmNQYXRoWzBdICYmIHNyY1BhdGhbMF0uY2hhckF0KDApID09PSAnLycpO1xuXG4gIC8vIHB1dCB0aGUgaG9zdCBiYWNrXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IGlzQWJzb2x1dGUgPyAnJyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNQYXRoLmxlbmd0aCA/IHNyY1BhdGguc2hpZnQoKSA6ICcnO1xuICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAvL3RoaXMgZXNwZWNpYWxseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghdXRpbC5pc051bGwocmVzdWx0LnBhdGhuYW1lKSB8fCAhdXRpbC5pc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNTdHJpbmc6IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB0eXBlb2YoYXJnKSA9PT0gJ3N0cmluZyc7XG4gIH0sXG4gIGlzT2JqZWN0OiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gdHlwZW9mKGFyZykgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbiAgfSxcbiAgaXNOdWxsOiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gYXJnID09PSBudWxsO1xuICB9LFxuICBpc051bGxPclVuZGVmaW5lZDogZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGFyZyA9PSBudWxsO1xuICB9XG59O1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0bG9hZGVkOiBmYWxzZSxcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG5cdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5ubWQgPSAobW9kdWxlKSA9PiB7XG5cdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdHJldHVybiBtb2R1bGU7XG59OyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XG4iXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwidGhpcyIsIkZvcm1EYXRhIiwiZm9ybURhdGEiLCJjbGllbnQiLCJvcHRpb25zIiwiTWFpbGd1biIsImNvbmZpZyIsInVybCIsInVzZXJuYW1lIiwiRXJyb3IiLCJrZXkiLCJyZXF1ZXN0IiwibWFpbExpc3RzTWVtYmVycyIsImRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IiwibXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IiwiZG9tYWlucyIsIndlYmhvb2tzIiwiZXZlbnRzIiwic3RhdHMiLCJzdXBwcmVzc2lvbnMiLCJtZXNzYWdlcyIsInJvdXRlcyIsImlwcyIsImlwX3Bvb2xzIiwibGlzdHMiLCJ2YWxpZGF0ZSIsImRhdGEiLCJyZWNlaXZpbmciLCJzZW5kaW5nIiwibmFtZSIsInJlcXVpcmVfdGxzIiwic2tpcF92ZXJpZmljYXRpb24iLCJzdGF0ZSIsIndpbGRjYXJkIiwic3BhbV9hY3Rpb24iLCJjcmVhdGVkX2F0Iiwic210cF9wYXNzd29yZCIsInNtdHBfbG9naW4iLCJ0eXBlIiwicmVjZWl2aW5nX2Ruc19yZWNvcmRzIiwic2VuZGluZ19kbnNfcmVjb3JkcyIsIkRvbWFpbiIsImRvbWFpbkNyZWRlbnRpYWxzIiwiX3BhcnNlTWVzc2FnZSIsInJlc3BvbnNlIiwiYm9keSIsIl9wYXJzZURvbWFpbkxpc3QiLCJpdGVtcyIsIm1hcCIsIml0ZW0iLCJfcGFyc2VEb21haW4iLCJkb21haW4iLCJfcGFyc2VUcmFja2luZ1NldHRpbmdzIiwidHJhY2tpbmciLCJfcGFyc2VUcmFja2luZ1VwZGF0ZSIsImxpc3QiLCJxdWVyeSIsImdldCIsInRoZW4iLCJyZXMiLCJjcmVhdGUiLCJwb3N0T2JqIiwiZm9yY2VfZGtpbV9hdXRob3JpdHkiLCJ0b1N0cmluZyIsInBvc3RXaXRoRkQiLCJkZXN0cm95IiwiZGVsZXRlIiwiZ2V0Q29ubmVjdGlvbiIsInVwZGF0ZUNvbm5lY3Rpb24iLCJwdXQiLCJnZXRUcmFja2luZyIsInVwZGF0ZVRyYWNraW5nIiwiYWN0aXZlIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsIm1lc3NhZ2UiLCJwdXRXaXRoRkQiLCJnZXRJcHMiLCJhc3NpZ25JcCIsImlwIiwiZGVsZXRlSXAiLCJsaW5rSXBQb29sIiwicG9vbF9pZCIsInVubGlua0lwUG9sbCIsInJlcGxhY2VtZW50Iiwic2VhcmNoUGFyYW1zIiwidXBkYXRlREtJTUF1dGhvcml0eSIsInNlbGYiLCJ1cGRhdGVES0lNU2VsZWN0b3IiLCJka2ltU2VsZWN0b3IiLCJ1cGRhdGVXZWJQcmVmaXgiLCJ3ZWJQcmVmaXgiLCJiYXNlUm91dGUiLCJfcGFyc2VEb21haW5DcmVkZW50aWFsc0xpc3QiLCJ0b3RhbENvdW50IiwidG90YWxfY291bnQiLCJfcGFyc2VNZXNzYWdlUmVzcG9uc2UiLCJfcGFyc2VEZWxldGVkUmVzcG9uc2UiLCJzcGVjIiwidXBkYXRlIiwiY3JlZGVudGlhbHNMb2dpbiIsImJvZHlNZXNzYWdlIiwiZXJyb3IiLCJzdGFjayIsImRldGFpbHMiLCJfcGFyc2VQYWdlTnVtYmVyIiwic3BsaXQiLCJwb3AiLCJfcGFyc2VQYWdlIiwiaWQiLCJudW1iZXIiLCJfcGFyc2VQYWdlTGlua3MiLCJPYmplY3QiLCJlbnRyaWVzIiwicGFnaW5nIiwicmVkdWNlIiwiYWNjIiwiZW50cmllIiwiX3BhcnNlRXZlbnRMaXN0IiwicGFnZXMiLCJxdWVyeUNvcHkiLCJwYWdlIiwicGFyc2VJcFBvb2xzUmVzcG9uc2UiLCJwb29sSWQiLCJwYXRjaFdpdGhGRCIsInBhcnNlSXBzUmVzcG9uc2UiLCJtZW1iZXJzIiwibWFpbExpc3RBZGRyZXNzIiwiY2hlY2tBbmRVcGRhdGVEYXRhIiwibmV3RGF0YSIsInZhcnMiLCJKU09OIiwic3RyaW5naWZ5Iiwic3Vic2NyaWJlZCIsImxpc3RNZW1iZXJzIiwiZ2V0TWVtYmVyIiwibWFpbExpc3RNZW1iZXJBZGRyZXNzIiwiY3JlYXRlTWVtYmVyIiwicmVxRGF0YSIsImNyZWF0ZU1lbWJlcnMiLCJBcnJheSIsImlzQXJyYXkiLCJ1cHNlcnQiLCJ1cGRhdGVNZW1iZXIiLCJkZXN0cm95TWVtYmVyIiwiX3BhcnNlUmVzcG9uc2UiLCJsaXN0SWQiLCJmaWxlIiwiaXNTdHJlYW0iLCJhdHRhY2htZW50IiwicGlwZSIsImlzTm9kZUZvcm1EYXRhIiwiZm9ybURhdGFJbnN0YW5jZSIsInVuZGVmaW5lZCIsImdldEhlYWRlcnMiLCJ0aW1lb3V0IiwiaGVhZGVycyIsIkZvcm1EYXRhQ29uc3RydWN0b3IiLCJtZXRob2QiLCJpbnB1dE9wdGlvbnMiLCJiYXNpYyIsImVuY29kZSIsIkF1dGhvcml6YXRpb24iLCJwYXJhbXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwibGVuZ3RoIiwidG9Mb2NhbGVVcHBlckNhc2UiLCJ0aHJvd0h0dHBFcnJvcnMiLCJvayIsInN0cmVhbSIsImNodW5rcyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwib24iLCJjaHVuayIsInB1c2giLCJCdWZmZXIiLCJjb25jYXQiLCJqc29uIiwiY29tbWFuZCIsImhlYWQiLCJwb3N0IiwiY3JlYXRlRm9ybURhdGEiLCJrZXlzIiwiZmlsdGVyIiwiZm9ybURhdGFBY2MiLCJpbmNsdWRlcyIsImFkZEZpbGVzVG9GRCIsImFkZE1pbWVEYXRhVG9GRCIsImFkZENvbW1vblByb3BlcnR5VG9GRCIsImlzQnVmZmVyIiwiYXBwZW5kIiwiZmlsZW5hbWUiLCJwcm9wZXJ0eU5hbWUiLCJ2YWx1ZSIsImFwcGVuZEZpbGVUb0ZEIiwib2JqIiwib2JqRGF0YSIsImNvbnRlbnRUeXBlIiwia25vd25MZW5ndGgiLCJnZXRBdHRhY2htZW50T3B0aW9ucyIsImZvckVhY2giLCJwYXRjaCIsIlJlcXVlc3QiLCJzdGFydCIsIkRhdGUiLCJlbmQiLCJyZXNvbHV0aW9uIiwic3RhdCIsInRpbWUiLCJwcmVwYXJlU2VhcmNoUGFyYW1zIiwiYXJyYXlXaXRoUGFpcnMiLCJjdXJyZW50UGFpciIsInJlcGVhdGVkUHJvcGVydHkiLCJfcGFyc2VTdGF0cyIsIlN0YXRzIiwiZ2V0RG9tYWluIiwiZ2V0QWNjb3VudCIsImNyZWF0ZU9wdGlvbnMiLCJhZGRyZXNzIiwiY29kZSIsInRhZ3MiLCJyZWFzb24iLCJjcmVhdGVkQXQiLCJtb2RlbHMiLCJib3VuY2VzIiwiQm91bmNlIiwiY29tcGxhaW50cyIsIkNvbXBsYWludCIsInVuc3Vic2NyaWJlcyIsIlVuc3Vic2NyaWJlIiwid2hpdGVsaXN0cyIsIldoaXRlTGlzdCIsInBhZ2VVcmwiLCJwYXJzZSIsIl9wYXJzZUxpc3QiLCJNb2RlbCIsImQiLCJfcGFyc2VJdGVtIiwiY3JlYXRlV2hpdGVMaXN0IiwibW9kZWwiLCJlbmNvZGVVUklDb21wb25lbnQiLCJwb3N0RGF0YSIsIlN1cHByZXNzaW9uQ2xpZW50IiwibXVsdGlwbGVWYWxpZGF0aW9uIiwiX3BhcnNlV2ViaG9va0xpc3QiLCJfcGFyc2VXZWJob29rV2l0aElEIiwid2ViaG9va1Jlc3BvbnNlIiwid2ViaG9vayIsInVybHMiLCJXZWJob29rIiwiX3BhcnNlV2ViaG9va1Rlc3QiLCJ0ZXN0IiwiZnJlZUV4cG9ydHMiLCJmcmVlR2xvYmFsIiwiZyIsImdsb2JhbCIsIndpbmRvdyIsIkludmFsaWRDaGFyYWN0ZXJFcnJvciIsInByb3RvdHlwZSIsIlRBQkxFIiwiUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUyIsImJhc2U2NCIsImlucHV0IiwiU3RyaW5nIiwiYSIsImIiLCJjIiwiYnVmZmVyIiwicGFkZGluZyIsIm91dHB1dCIsInBvc2l0aW9uIiwiY2hhckNvZGVBdCIsImNoYXJBdCIsInJlcGxhY2UiLCJiaXRTdG9yYWdlIiwiYml0Q291bnRlciIsImluZGV4T2YiLCJmcm9tQ2hhckNvZGUiLCJnbG9iYWxzIiwiZ2V0R2xvYmFsIiwicHJvcGVydHkiLCJnbG9iYWxUaGlzIiwiZ2xvYmFsUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiZ2xvYmFsT2JqZWN0IiwiYmluZCIsImlzT2JqZWN0Iiwic3VwcG9ydHNBYm9ydENvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJzdXBwb3J0c1N0cmVhbXMiLCJSZWFkYWJsZVN0cmVhbSIsInN1cHBvcnRzRm9ybURhdGEiLCJtZXJnZUhlYWRlcnMiLCJzb3VyY2UxIiwic291cmNlMiIsInJlc3VsdCIsIkhlYWRlcnMiLCJpc0hlYWRlcnNJbnN0YW5jZSIsInNvdXJjZSIsInNldCIsImRlZXBNZXJnZSIsInNvdXJjZXMiLCJyZXR1cm5WYWx1ZSIsInJlcXVlc3RNZXRob2RzIiwicmVzcG9uc2VUeXBlcyIsInRleHQiLCJhcnJheUJ1ZmZlciIsImJsb2IiLCJyZXRyeUFmdGVyU3RhdHVzQ29kZXMiLCJzdG9wIiwiU3ltYm9sIiwiSFRUUEVycm9yIiwiY29uc3RydWN0b3IiLCJzdXBlciIsIlRpbWVvdXRFcnJvciIsImRlbGF5IiwibXMiLCJzZXRUaW1lb3V0Iiwibm9ybWFsaXplUmVxdWVzdE1ldGhvZCIsInRvVXBwZXJDYXNlIiwiZGVmYXVsdFJldHJ5T3B0aW9ucyIsImxpbWl0IiwibWV0aG9kcyIsInN0YXR1c0NvZGVzIiwiYWZ0ZXJTdGF0dXNDb2RlcyIsIm5vcm1hbGl6ZVJldHJ5T3B0aW9ucyIsInJldHJ5IiwibWF4U2FmZVRpbWVvdXQiLCJLeSIsIl9yZXRyeUNvdW50IiwiX2lucHV0IiwiX29wdGlvbnMiLCJjcmVkZW50aWFscyIsImhvb2tzIiwiYmVmb3JlUmVxdWVzdCIsImJlZm9yZVJldHJ5IiwiYWZ0ZXJSZXNwb25zZSIsInByZWZpeFVybCIsImZldGNoIiwiVVJMIiwiVHlwZUVycm9yIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwiYWJvcnRDb250cm9sbGVyIiwic2lnbmFsIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFib3J0IiwiVVJMU2VhcmNoUGFyYW1zIiwiY29uc29sZSIsImxvZyIsImZuIiwiYXN5bmMiLCJSYW5nZUVycm9yIiwiX2ZldGNoIiwiaG9vayIsIm1vZGlmaWVkUmVzcG9uc2UiLCJfZGVjb3JhdGVSZXNwb25zZSIsImNsb25lIiwiUmVzcG9uc2UiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJfc3RyZWFtIiwidG9Mb3dlckNhc2UiLCJfcmV0cnkiLCJtaW1lVHlwZSIsInBhcnNlSnNvbiIsIl9jYWxjdWxhdGVSZXRyeURlbGF5IiwicmV0cnlBZnRlciIsImFmdGVyIiwiTnVtYmVyIiwiaXNOYU4iLCJub3ciLCJtYXhSZXRyeUFmdGVyIiwiTWF0aCIsIm1pbiIsInJldHJ5Q291bnQiLCJ0aW1lb3V0SUQiLCJjYXRjaCIsImNsZWFyVGltZW91dCIsInRvdGFsQnl0ZXMiLCJ0cmFuc2ZlcnJlZEJ5dGVzIiwiY29udHJvbGxlciIsInJlYWRlciIsImdldFJlYWRlciIsInBlcmNlbnQiLCJVaW50OEFycmF5IiwicmVhZCIsImRvbmUiLCJjbG9zZSIsImJ5dGVMZW5ndGgiLCJlbnF1ZXVlIiwidmFsaWRhdGVBbmRNZXJnZSIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdHMiLCJreSIsIm5ld0RlZmF1bHRzIiwiZXh0ZW5kIiwibm9kZVR5cGUiLCJwdW55Y29kZSIsIm1heEludCIsImJhc2UiLCJyZWdleFB1bnljb2RlIiwicmVnZXhOb25BU0NJSSIsInJlZ2V4U2VwYXJhdG9ycyIsImVycm9ycyIsImZsb29yIiwic3RyaW5nRnJvbUNoYXJDb2RlIiwiYXJyYXkiLCJtYXBEb21haW4iLCJzdHJpbmciLCJwYXJ0cyIsImpvaW4iLCJ1Y3MyZGVjb2RlIiwiZXh0cmEiLCJjb3VudGVyIiwidWNzMmVuY29kZSIsImRpZ2l0VG9CYXNpYyIsImRpZ2l0IiwiZmxhZyIsImFkYXB0IiwiZGVsdGEiLCJudW1Qb2ludHMiLCJmaXJzdFRpbWUiLCJrIiwiYmFzZU1pbnVzVE1pbiIsImRlY29kZSIsIm91dCIsImoiLCJpbmRleCIsIm9sZGkiLCJ3IiwidCIsImJhc2VNaW51c1QiLCJjb2RlUG9pbnQiLCJpbnB1dExlbmd0aCIsImkiLCJuIiwiYmlhcyIsImxhc3RJbmRleE9mIiwic3BsaWNlIiwiaGFuZGxlZENQQ291bnQiLCJiYXNpY0xlbmd0aCIsIm0iLCJxIiwiY3VycmVudFZhbHVlIiwiaGFuZGxlZENQQ291bnRQbHVzT25lIiwicU1pbnVzVCIsInNsaWNlIiwiaGFzT3duUHJvcGVydHkiLCJwcm9wIiwiY2FsbCIsInFzIiwic2VwIiwiZXEiLCJyZWdleHAiLCJtYXhLZXlzIiwibGVuIiwia3N0ciIsInZzdHIiLCJ2IiwieCIsImlkeCIsInN1YnN0ciIsImRlY29kZVVSSUNvbXBvbmVudCIsInN0cmluZ2lmeVByaW1pdGl2ZSIsImlzRmluaXRlIiwia3MiLCJub3JtYWxpemUiLCJzdHIiLCJqb2luZWQiLCJhcmd1bWVudHMiLCJ1dGlsIiwiVXJsIiwicHJvdG9jb2wiLCJzbGFzaGVzIiwiYXV0aCIsImhvc3QiLCJwb3J0IiwiaG9zdG5hbWUiLCJoYXNoIiwic2VhcmNoIiwicGF0aG5hbWUiLCJwYXRoIiwiaHJlZiIsInVybFBhcnNlIiwicmVsYXRpdmUiLCJyZXNvbHZlT2JqZWN0IiwiZm9ybWF0IiwiaXNTdHJpbmciLCJwcm90b2NvbFBhdHRlcm4iLCJwb3J0UGF0dGVybiIsInNpbXBsZVBhdGhQYXR0ZXJuIiwidW53aXNlIiwiYXV0b0VzY2FwZSIsIm5vbkhvc3RDaGFycyIsImhvc3RFbmRpbmdDaGFycyIsImhvc3RuYW1lUGFydFBhdHRlcm4iLCJob3N0bmFtZVBhcnRTdGFydCIsInVuc2FmZVByb3RvY29sIiwiaG9zdGxlc3NQcm90b2NvbCIsInNsYXNoZWRQcm90b2NvbCIsInF1ZXJ5c3RyaW5nIiwicGFyc2VRdWVyeVN0cmluZyIsInNsYXNoZXNEZW5vdGVIb3N0IiwidSIsInF1ZXJ5SW5kZXgiLCJzcGxpdHRlciIsInVTcGxpdCIsInJlc3QiLCJ0cmltIiwic2ltcGxlUGF0aCIsImV4ZWMiLCJwcm90byIsImxvd2VyUHJvdG8iLCJtYXRjaCIsImF0U2lnbiIsImhvc3RFbmQiLCJoZWMiLCJwYXJzZUhvc3QiLCJpcHY2SG9zdG5hbWUiLCJob3N0cGFydHMiLCJsIiwicGFydCIsIm5ld3BhcnQiLCJ2YWxpZFBhcnRzIiwibm90SG9zdCIsImJpdCIsInVuc2hpZnQiLCJ0b0FTQ0lJIiwicCIsImgiLCJhZSIsImVzYyIsImVzY2FwZSIsInFtIiwicyIsInJlbCIsInRrZXlzIiwidGsiLCJ0a2V5IiwicmtleXMiLCJyayIsInJrZXkiLCJyZWxQYXRoIiwic2hpZnQiLCJpc1NvdXJjZUFicyIsImlzUmVsQWJzIiwibXVzdEVuZEFicyIsInJlbW92ZUFsbERvdHMiLCJzcmNQYXRoIiwicHN5Y2hvdGljIiwiaXNOdWxsT3JVbmRlZmluZWQiLCJhdXRoSW5Ib3N0IiwiaXNOdWxsIiwibGFzdCIsImhhc1RyYWlsaW5nU2xhc2giLCJ1cCIsImlzQWJzb2x1dGUiLCJhcmciLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJsb2FkZWQiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZGVmaW5pdGlvbiIsIm8iLCJlbnVtZXJhYmxlIiwiRnVuY3Rpb24iLCJlIiwiciIsInRvU3RyaW5nVGFnIiwibm1kIiwicGF0aHMiLCJjaGlsZHJlbiJdLCJzb3VyY2VSb290IjoiIn0=