UNPKG

node-red-contrib-chatbot

Version:

REDBot a Chat bot for a full featured chat bot for Telegram, Facebook Messenger and Slack. Almost no coding skills required

13 lines 45.6 kB
(self.webpackChunknode_red_contrib_chatbot=self.webpackChunknode_red_contrib_chatbot||[]).push([[460],{63460:(e,t,l)=>{"use strict";l.r(t);var r=l(67294),n=l(18985),a=l(78971),i=l(85631),o=l(16790);l(83751);const s=e=>"location"===e?"#5E8263":e?"#D36135":e?"#595D88":"#000000";l(54641);const c=()=>r.createElement(i.Z,{className:"map-marker",icon:"map-marker",size:"2x",style:{color:"red"}});var m=l(95990),u=l(73727),p=l(18499),d=l(87596),h=l(82122),g=l(69873),b=l(40660),y=l(45697),E=l.n(y),v=l(96486),w=l.n(v),f=l(94184),k=l.n(f);function x(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}class _ extends r.Component{render(){const{thumb:e,height:t,width:l,maxWidth:n,maxHeight:a}=this.props,i=t/l;let o=Math.floor(i*n);o>a&&(o=a);const s={backgroundImage:`url(${e})`,backgroundPosition:"center",width:`${n}px`,height:`${o}px`};return r.createElement("div",{style:s})}}x(_,"propTypes",{thumb:E().string,height:E().number,width:E().number,maxWidth:E().number,maxHeight:E().number,onClick:E().func}),x(_,"defaultProps",{thumb:null,height:null,width:null,maxWidth:200,maxHeight:400,onClick:()=>{}});const P=_;function C(){return C=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var l=arguments[t];for(var r in l)Object.prototype.hasOwnProperty.call(l,r)&&(e[r]=l[r])}return e},C.apply(this,arguments)}const S=({topic:e,ts:t,content:l,onDelete:n,onZoom:a,thumb:i,image:o,width:s,height:c,maxHeight:m,...u})=>{let p;return w().isEmpty(i)||(p=r.createElement(P,{thumb:i,topic:e,width:s,height:c,maxHeight:m,onClick:()=>{console.log("clicked"),a({})}})),r.createElement(g.Z,C({title:e},u,{onMouseLeave:()=>{}}),r.createElement("div",{className:"popover-map-marker"},"vario"))};function D(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}S.propTypes={topic:E().string,thumb:E().string,image:E().string,content:E().string,ts:E().instanceOf(Date),onDelete:E().func,width:E().number,height:E().number},S.defaultProps={topic:null,thumb:null,image:null,content:null,ts:null,onDelete:()=>{},width:null,height:null};class Z extends r.Component{constructor(e){super(e),this.handleLoaded=this.handleLoaded.bind(this),this.handleClick=this.handleClick.bind(this);const{thumb:t}=e;this.state={needPreload:!w().isEmpty(t),preload:!1,width:null,height:null}}componentDidMount(){const{type:e,color:t}=this.props;null!=this.tooltip&&"tooltip"===e&&(this.tooltip.querySelector(".rs-tooltip-inner").style.backgroundColor=t,this.tooltip.querySelector(".rs-tooltip-arrow").style.backgroundColor=t)}handleLoaded(e){this.setState({preload:!1,width:e.target.width,height:e.target.height},(()=>this.trigger.show()))}handleClick(e){e.preventDefault(),e.stopPropagation();const{thumb:t}=this.props;w().isEmpty(t)?this.trigger.show():this.setState({preload:!0})}render(){const{children:e,point:t,text:l,type:n,popover:a,showPopover:o,thumb:s,image:c,inkColor:m,maxHeight:u,onDeletePoint:p,onShowImage:d}=this.props;let{icon:y,color:E,size:v}=this.props;const{height:f,width:x,preload:_,needPreload:P}=this.state;let C;switch(w().isEmpty(y)&&(y="map-marker"),w().isEmpty(v)&&(v="lg"),w().isEmpty(E)&&(E="#FF3300"),w().isEmpty(m)&&(E="#000000"),new Date(parseInt(t.ts,10)),n){case"icon":C=r.createElement("a",{href:"#",className:k()("wrapper-map-marker",{preload:_}),onClick:this.handleClick},_&&r.createElement("img",{src:s,style:{display:"none"},onLoad:this.handleLoaded,alt:""}),r.createElement(i.Z,{className:k()("map-marker",{pointer:o}),icon:y,size:v,style:{color:E}}));break;case"tooltip":C=r.createElement("div",{ref:e=>this.tooltip=e,style:{height:20,backgroundColor:"#ff0000"}},r.createElement(h.Z,{visible:!0},r.createElement("span",{style:{color:m}},l)));break;default:C=null}if(o){if(P&&_)return C;const t=r.createElement(g.Z,{onMouseLeave:()=>{}},r.createElement("div",{className:"popover-map-marker"},e));return r.createElement(b.Z,{trigger:"click",placement:"top",speaker:t,triggerRef:e=>this.trigger=e},C)}return C}}D(Z,"propTypes",{point:E().shape({topic:E().string,text:E().string,ts:E().string}).isRequired,icon:E().string,size:E().string,color:E().string,text:E().string,popover:E().string,thumb:E().string,image:E().string,showPopover:E().bool,type:E().oneOf(["icon","tooltip"]),inkColor:E().string,maxHeight:E().number}),D(Z,"defaultProps",{icon:"map-marker",color:"#FF3300",text:null,size:"2x",popover:null,thumb:null,image:null,type:"icon",showPopover:!1,inkColor:"#ffffff",maxHeight:480});const N=Z,z=m.default` query($where: JSON) { records(limit: 50, order: "geohash", where: $where) { id, status, title, latitude, longitude, geohash, payload } }`;(0,n.plug)("sidebar",null,{id:"wiggle",label:"Panopticon",icon:"logo-survey",permission:"wiggle.view",options:[{id:"wiggle-secrets",label:"Secrets",url:"/secrets"},{id:"wiggle-secrets-map",label:"Secrets Map",url:"/secrets-map"}]}),(0,n.plug)("pages",(()=>{const[e,t]=(0,r.useState)(null),[l,n]=(0,r.useState)(!1),i=(0,p.xJ)();let o=(e||[]).filter((e=>null!=e.latitude&&null!=e.longitude)).map((e=>r.createElement(N,{key:e.id,lat:e.latitude,lng:e.longitude,point:{},popover:e.title,showPopover:!0},r.createElement("div",{style:{minHeight:"120px"}},r.createElement("strong",null,e.title),null!=e.payload.secret_url&&r.createElement("div",{style:{backgroundImage:`url(${e.payload.secret_url})`,backgroundPosition:"center",minWidth:"120px",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"120px"}}),null!=e.payload.secret&&r.createElement("div",null,e.payload.secret),r.createElement(u.rU,{to:`/record/${e.id}`},"view")))));return r.createElement(a._z,{className:"my-page"},r.createElement(a.Oo,{pages:["Secret locations"]}),r.createElement("div",{style:{width:"100%",height:"450px",position:"relative"}},l&&r.createElement("div",{style:{position:"absolute",top:"20px",left:"20px",zIndex:1e7}},r.createElement(d.Z,{size:"md"})),r.createElement(a.oe,{defaultCenter:{lat:45.4854739,lng:9.2022176},defaultZoom:11,height:450,onChange:async({bounds:e})=>{const{se:l,nw:r}=e;n(!0);const{data:{records:a}}=await i.query({query:z,variables:{where:{latitude:{gte:l.lat,lte:r.lat},longitude:{gte:r.lng,lte:l.lng}}},fetchPolicy:"network-only"});t(a),n(!1)}},o)))}),{url:"/secrets-map",title:"Secrets Map",id:"secrets-maps",permission:"wiggle.view",breadcrumbs:["Secrets Map"]}),(0,n.plug)("pages",a.Op,{url:"/secrets",title:"Secrets",id:"secrets",type:"secret",permission:"wiggle.view",breadcrumbs:["Secrets"],labels:{title:"Name",record:"secret"},columns:[{id:"secret-type",label:"Type",width:120,cell:({payload:e})=>r.createElement(a.vx,{color:s(e.secret_type)},e.secret_type)}]}),(0,n.plug)("permissions",null,{permission:"wiggle.view",name:"View Panopticon secret",description:"View secrets stored in Panopticon Bot",group:"Panopticon"}),(0,n.plug)("user-record-types",null,{type:"secret",name:"Secret",list:"Secrets",description:"List of Panopticon secrets",form:({record:e})=>{const{payload:t}=e,l=new Date(t.secret_duration),n=new Date,i=l.getTime()-n.getTime();return r.createElement("div",{className:"secret-viewer"},r.createElement(o.Z,{justify:"space-between",style:{marginTop:"30px"}},r.createElement(o.Z.Item,{colspan:7},r.createElement("div",null,r.createElement("b",null,"Secret is")," ",r.createElement(a.vx,{color:s(t.secret_type)},t.secret_type)),("time"===t.secret_type||"location+time"===t.secret_type)&&r.createElement("div",null,r.createElement("b",null,"Revealed when"),r.createElement("br",null),r.createElement("em",null,l.toLocaleDateString(),", ",l.toLocaleTimeString()),i>0&&r.createElement("div",{className:"secret-reveal-at"},Math.round(i/1e3/60)," minutes"),i<0&&r.createElement("div",null,"Secret date is due")),null!=t.secret_bounty&&r.createElement(r.Fragment,null,r.createElement("b",null,"ICE price:")," ",t.secret_bounty," EUR",r.createElement("br",null)),null!=t.secret_payment&&r.createElement(r.Fragment,null,r.createElement("br",null),r.createElement("b",null,"User paid to reveal the secret"),r.createElement("br",null),r.createElement("b",null,"Email: ")," ",t.secret_payment.order_info.email,r.createElement("br",null),r.createElement("b",null,"Currency: ")," ",t.secret_payment.currency,r.createElement("br",null),r.createElement("b",null,"Amount: ")," ",(t.secret_payment.total_amount/100).toFixed(2),r.createElement("br",null),r.createElement("b",null,"Payment ID: ")," ",t.secret_payment.provider_payment_charge_id,r.createElement("br",null))),r.createElement(o.Z.Item,{colspan:7},null!=t.secret_url&&r.createElement("div",null,r.createElement("b",null,"Secret image"),r.createElement("img",{src:t.secret_url,width:"100%"})),null!=t.secret&&r.createElement("div",null,r.createElement("b",null,"Secret text"),r.createElement("div",{className:"display-secret"},t.secret))),r.createElement(o.Z.Item,{colspan:7},null!=e.latitude&&r.createElement("div",{className:"ui-devices-map",style:{height:"300px"}},r.createElement(a.oe,{defaultCenter:{lat:e.latitude,lng:e.longitude},defaultZoom:11},r.createElement(c,null))),null==e.latitude&&r.createElement("div",null,r.createElement("em",null,"No location for this secret")))))},status:[{value:"private",label:"Private"},{value:"public",label:"Public"},{value:"crazy",label:"Crazy"},{value:"keyholder-free",label:"Keyholder free"},{value:"keyholder-taken",label:"Keyholder taken"}]})},4021:(e,t,l)=>{(t=l(23645)(!1)).push([e.id,".secret-viewer .display-secret{padding:4px 10px;font-family:monospace;background-color:#eeeeee;border:1px solid #bbbbbb}.secret-viewer .secret-reveal-at{font-size:40px;font-weight:bolder}\n",""]),e.exports=t},54641:(e,t,l)=>{var r=l(93379),n=l(4021);"string"==typeof(n=n.__esModule?n.default:n)&&(n=[[e.id,n,""]]);r(n,{insert:"head",singleton:!1}),e.exports=n.locals||{}}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwLm1haW4uanMiLCJtYXBwaW5ncyI6IitNQUFPLE1BQU1BLEVBQWVDLEdBQ2IsYUFBVEEsRUFDSyxVQUNFQSxFQUNILFVBQ0dBLEVBQ0YsVUFFQSxVLFNDQ1gsTUFBTUMsRUFBVyxJQUViLGdCQUFDQyxFQUFBLEVBQUQsQ0FDRUMsVUFBVSxhQUNWQyxLQUFLLGFBQ0xDLEtBQUssS0FDTEMsTUFBTyxDQUFFQyxNQUFPLFMscVFDWnRCLE1BQU1DLFVBQWNDLEVBQUFBLFVBb0JsQkMsU0FDRSxNQUFNLE1BQUVDLEVBQUYsT0FBU0MsRUFBVCxNQUFpQkMsRUFBakIsU0FBd0JDLEVBQXhCLFVBQWtDQyxHQUFjQyxLQUFLQyxNQUVyREMsRUFBUU4sRUFBU0MsRUFDdkIsSUFBSU0sRUFBY0MsS0FBS0MsTUFBTUgsRUFBUUosR0FDakNLLEVBQWNKLElBQ2hCSSxFQUFjSixHQUdoQixNQUFNVCxFQUFRLENBQ1pnQixnQkFBa0IsT0FBTVgsS0FDeEJZLG1CQUFvQixTQUNwQlYsTUFBUSxHQUFFQyxNQUNWRixPQUFTLEdBQUVPLE9BR2IsT0FDRSx1QkFBS2IsTUFBT0EsSyxFQXJDWkUsRUFBQUEsWUFFZSxDQUNqQkcsTUFBT2EsSUFBQUEsT0FDUFosT0FBUVksSUFBQUEsT0FDUlgsTUFBT1csSUFBQUEsT0FDUFYsU0FBVVUsSUFBQUEsT0FDVlQsVUFBV1MsSUFBQUEsT0FDWEMsUUFBU0QsSUFBQUEsTyxFQVJQaEIsRUFBQUEsZUFXa0IsQ0FDcEJHLE1BQU8sS0FDUEMsT0FBUSxLQUNSQyxNQUFPLEtBQ1BDLFNBQVUsSUFDVkMsVUFBVyxJQUNYVSxRQUFTLFNBeUJiLFUsZ05DdENBLE1BQU1DLEVBQVUsRUFBR0MsTUFBQUEsRUFBT0MsR0FBQUEsRUFBSUMsUUFBQUEsRUFBU0MsU0FBQUEsRUFBVUMsT0FBQUEsRUFBUXBCLE1BQUFBLEVBQU9xQixNQUFBQSxFQUFPbkIsTUFBQUEsRUFBT0QsT0FBQUEsRUFBUUcsVUFBQUEsS0FBY0UsTUFDbEcsSUFBSWdCLEVBaUJKLE9BaEJLQyxJQUFBQSxRQUFVdkIsS0FDYnNCLEVBQ0UsZ0JBQUMsRUFBRCxDQUNFdEIsTUFBT0EsRUFDUGdCLE1BQU9BLEVBQ1BkLE1BQU9BLEVBQ1BELE9BQVFBLEVBQ1JHLFVBQVdBLEVBQ1hVLFFBQVMsS0FDUFUsUUFBUUMsSUFBSSxXQUNaTCxFQUFPLFFBT2IsZ0JBQUNNLEVBQUEsRUFBRCxHQUFTQyxNQUFPWCxHQUFXVixFQUEzQixDQUFrQ3NCLGFBQWMsU0FDOUMsdUJBQUtwQyxVQUFVLHNCQUFmLFcsd0hBT051QixFQUFRYyxVQUFZLENBQ2xCYixNQUFPSCxJQUFBQSxPQUNQYixNQUFPYSxJQUFBQSxPQUNQUSxNQUFPUixJQUFBQSxPQUNQSyxRQUFTTCxJQUFBQSxPQUNUSSxHQUFJSixJQUFBQSxXQUFxQmlCLE1BQ3pCWCxTQUFVTixJQUFBQSxLQUNWWCxNQUFPVyxJQUFBQSxPQUNQWixPQUFRWSxJQUFBQSxRQUdWRSxFQUFRZ0IsYUFBZSxDQUNyQmYsTUFBTyxLQUNQaEIsTUFBTyxLQUNQcUIsTUFBTyxLQUNQSCxRQUFTLEtBQ1RELEdBQUksS0FDSkUsU0FBVSxPQUNWakIsTUFBTyxLQUNQRCxPQUFRLE1DN0NWLE1BQU1YLFVBQWlCUSxFQUFBQSxVQW1DckJrQyxZQUFZMUIsR0FDVjJCLE1BQU0zQixHQUVORCxLQUFLNkIsYUFBZTdCLEtBQUs2QixhQUFhQyxLQUFLOUIsTUFDM0NBLEtBQUsrQixZQUFjL0IsS0FBSytCLFlBQVlELEtBQUs5QixNQUV6QyxNQUFNLE1BQUVMLEdBQVVNLEVBRWxCRCxLQUFLZ0MsTUFBUSxDQUNYQyxhQUFjZixJQUFBQSxRQUFVdkIsR0FDeEJ1QyxTQUFTLEVBQ1RyQyxNQUFPLEtBQ1BELE9BQVEsTUFJWnVDLG9CQUNFLE1BQU0sS0FBRW5ELEVBQUYsTUFBUU8sR0FBU1MsS0FBS0MsTUFFUixNQUFoQkQsS0FBS29DLFNBQTRCLFlBQVRwRCxJQUMxQmdCLEtBQUtvQyxRQUFRQyxjQUFjLHFCQUFxQi9DLE1BQU1nRCxnQkFBa0IvQyxFQUN4RVMsS0FBS29DLFFBQVFDLGNBQWMscUJBQXFCL0MsTUFBTWdELGdCQUFrQi9DLEdBSTVFc0MsYUFBYVUsR0FDWHZDLEtBQUt3QyxTQUFTLENBQ1pOLFNBQVMsRUFDVHJDLE1BQU8wQyxFQUFFRSxPQUFPNUMsTUFDaEJELE9BQVEyQyxFQUFFRSxPQUFPN0MsU0FDaEIsSUFBTUksS0FBSzBDLFFBQVFDLFNBR3hCWixZQUFZUSxHQUNWQSxFQUFFSyxpQkFDRkwsRUFBRU0sa0JBRUYsTUFBTSxNQUFFbEQsR0FBVUssS0FBS0MsTUFFbEJpQixJQUFBQSxRQUFVdkIsR0FHYkssS0FBSzBDLFFBQVFDLE9BRmIzQyxLQUFLd0MsU0FBUyxDQUFFTixTQUFTLElBTTdCeEMsU0FDRSxNQUFNLFNBQUVvRCxFQUFGLE1BQVlDLEVBQVosS0FBbUJDLEVBQW5CLEtBQXlCaEUsRUFBekIsUUFBK0JpRSxFQUEvQixZQUF3Q0MsRUFBeEMsTUFBcUR2RCxFQUFyRCxNQUE0RHFCLEVBQTVELFNBQW1FbUMsRUFBbkUsVUFBNkVwRCxFQUE3RSxjQUF3RnFELEVBQXhGLFlBQXVHQyxHQUFnQnJELEtBQUtDLE1BQ2xJLElBQUksS0FBRWIsRUFBRixNQUFRRyxFQUFSLEtBQWVGLEdBQVNXLEtBQUtDLE1BRWpDLE1BQU0sT0FBRUwsRUFBRixNQUFVQyxFQUFWLFFBQWlCcUMsRUFBakIsWUFBMEJELEdBQWdCakMsS0FBS2dDLE1BZ0JyRCxJQUFJbkIsRUFDSixPQWZJSyxJQUFBQSxRQUFVOUIsS0FDWkEsRUFBTyxjQUVMOEIsSUFBQUEsUUFBVTdCLEtBQ1pBLEVBQU8sTUFFTDZCLElBQUFBLFFBQVUzQixLQUNaQSxFQUFRLFdBRU4yQixJQUFBQSxRQUFVaUMsS0FDWjVELEVBQVEsV0FFQyxJQUFJa0MsS0FBSzZCLFNBQVNQLEVBQU1uQyxHQUFJLEtBR2hDNUIsR0FDTCxJQUFLLE9BQ0g2QixFQUNFLHFCQUNFMEMsS0FBSyxJQUNMcEUsVUFBV3FFLEdBQUFBLENBQVcscUJBQXNCLENBQUV0QixRQUFBQSxJQUM5Q3pCLFFBQVNULEtBQUsrQixhQUNiRyxHQUFXLHVCQUFLdUIsSUFBSzlELEVBQU9MLE1BQU8sQ0FBQ29FLFFBQVMsUUFBU0MsT0FBUTNELEtBQUs2QixhQUFjK0IsSUFBSSxLQUN0RixnQkFBQzFFLEVBQUEsRUFBRCxDQUNFQyxVQUFXcUUsR0FBQUEsQ0FBVyxhQUFjLENBQUUsUUFBV04sSUFDakQ5RCxLQUFNQSxFQUNOQyxLQUFNQSxFQUNOQyxNQUFPLENBQUVDLE1BQUFBLE1BSWYsTUFDRixJQUFLLFVBQ0hzQixFQUNFLHVCQUFLZ0QsSUFBS0EsR0FBTzdELEtBQUtvQyxRQUFVeUIsRUFBS3ZFLE1BQU8sQ0FBRU0sT0FBUSxHQUFJMEMsZ0JBQWlCLFlBQ3pFLGdCQUFDd0IsRUFBQSxFQUFELENBQVNDLFNBQU8sR0FBQyx3QkFBTXpFLE1BQU8sQ0FBRUMsTUFBTzRELElBQWFILEtBR3hELE1BQ0YsUUFDRW5DLEVBQVUsS0FLZCxHQUFJcUMsRUFBYSxDQUVmLEdBQUlqQixHQUFlQyxFQUNqQixPQUFPckIsRUFFVCxNQUFNbUQsRUFDSixnQkFBQzNDLEVBQUEsRUFBRCxDQUFTRSxhQUFjLFFBQ3JCLHVCQUFLcEMsVUFBVSxzQkFDWjJELElBSVAsT0FDRSxnQkFBQ21CLEVBQUEsRUFBRCxDQUFTdkIsUUFBUSxRQUFRd0IsVUFBVSxNQUFNRixRQUFTQSxFQUFTRyxXQUFZTixHQUFPN0QsS0FBSzBDLFFBQVVtQixHQUMxRmhELEdBSVAsT0FBT0EsRyxFQXRKTDVCLEVBQUFBLFlBRWUsQ0FDakI4RCxNQUFPdkMsSUFBQUEsTUFBZ0IsQ0FDckJHLE1BQU9ILElBQUFBLE9BQ1B3QyxLQUFNeEMsSUFBQUEsT0FDTkksR0FBSUosSUFBQUEsU0FDSDRELFdBQ0hoRixLQUFNb0IsSUFBQUEsT0FDTm5CLEtBQU1tQixJQUFBQSxPQUNOakIsTUFBT2lCLElBQUFBLE9BQ1B3QyxLQUFNeEMsSUFBQUEsT0FDTnlDLFFBQVN6QyxJQUFBQSxPQUNUYixNQUFPYSxJQUFBQSxPQUNQUSxNQUFPUixJQUFBQSxPQUNQMEMsWUFBYTFDLElBQUFBLEtBQ2J4QixLQUFNd0IsSUFBQUEsTUFBZ0IsQ0FBQyxPQUFRLFlBQy9CMkMsU0FBVTNDLElBQUFBLE9BQ1ZULFVBQVdTLElBQUFBLFMsRUFsQlR2QixFQUFBQSxlQXFCa0IsQ0FDcEJHLEtBQU0sYUFDTkcsTUFBTyxVQUNQeUQsS0FBTSxLQUNOM0QsS0FBTSxLQUNONEQsUUFBUyxLQUNUdEQsTUFBTyxLQUNQcUIsTUFBTyxLQUNQaEMsS0FBTSxPQUNOa0UsYUFBYSxFQUNiQyxTQUFVLFVBQ1ZwRCxVQUFXLE1BMEhmLFVDeEpNc0UsRUFBdUJDLEVBQUFBLE9BQUk7Ozs7Ozs7Ozs7O0lDRmpDQyxFQUFBQSxFQUFBQSxNQUFLLFVBQVcsS0FBTSxDQUNwQkMsR0FBSSxTQUNKQyxNQUFPLGFBQ1ByRixLQUFNLGNBQ05zRixXQUFZLGNBQ1pDLFFBQVMsQ0FDUCxDQUNFSCxHQUFJLGlCQUNKQyxNQUFPLFVBQ1BHLElBQUssWUFFUCxDQUNFSixHQUFJLHFCQUNKQyxNQUFPLGNBQ1BHLElBQUssb0JBS1hMLEVBQUFBLEVBQUFBLE1BQUssU0RKYyxLQUNqQixNQUFPTSxFQUFTQyxJQUFjQyxFQUFBQSxFQUFBQSxVQUFTLE9BQ2hDQyxFQUFTQyxJQUFjRixFQUFBQSxFQUFBQSxXQUFTLEdBQ2pDRyxHQUFTQyxFQUFBQSxFQUFBQSxNQUVmLElBQUlDLEdBQVdQLEdBQVcsSUFDdkJRLFFBQU9DLEdBQTZCLE1BQW5CQSxFQUFPQyxVQUF3QyxNQUFwQkQsRUFBT0UsWUFDbkRDLEtBQUlILEdBQ0gsZ0JBQUMsRUFBRCxDQUNFSSxJQUFLSixFQUFPZCxHQUNabUIsSUFBS0wsRUFBT0MsU0FDWkssSUFBS04sRUFBT0UsVUFDWnpDLE1BQU8sR0FDUEUsUUFBU3FDLEVBQU9oRSxNQUNoQjRCLGFBQWEsR0FFYix1QkFBSzVELE1BQU8sQ0FBQ3VHLFVBQVcsVUFBVSw4QkFBU1AsRUFBT2hFLE9BQ3BCLE1BQTdCZ0UsRUFBT1EsUUFBUUMsWUFDZCx1QkFDRXpHLE1BQU8sQ0FDTGdCLGdCQUFrQixPQUFNZ0YsRUFBT1EsUUFBUUMsY0FDdkN4RixtQkFBb0IsU0FDcEJ5RixTQUFVLFFBQ1ZDLGlCQUFrQixZQUNsQkMsZUFBZ0IsVUFDaEJ0RyxPQUFTLFdBSVcsTUFBekIwRixFQUFPUSxRQUFRUixRQUNkLDJCQUFNQSxFQUFPUSxRQUFRUixRQUV2QixnQkFBQyxLQUFELENBQU1hLEdBQUssV0FBVWIsRUFBT2QsTUFBNUIsWUFLTixPQUNFLGdCQUFDLEtBQUQsQ0FBZXJGLFVBQVUsV0FDdkIsZ0JBQUMsS0FBRCxDQUFhaUgsTUFBTyxDQUFDLHNCQUNyQix1QkFBSzlHLE1BQU8sQ0FBRU8sTUFBTyxPQUFRRCxPQUFRLFFBQVN5RyxTQUFVLGFBQ3JEckIsR0FDQyx1QkFBSzFGLE1BQU8sQ0FBRStHLFNBQVUsV0FBWUMsSUFBSyxPQUFRQyxLQUFNLE9BQVFDLE9BQVEsTUFDckUsZ0JBQUNDLEVBQUEsRUFBRCxDQUFRcEgsS0FBSyxRQUdqQixnQkFBQyxLQUFELENBQ0VxSCxjQUFlLENBQUVmLElBQUssV0FBWUMsSUFBSyxXQUN2Q2UsWUFBYSxHQUNiL0csT0FBUSxJQUNSZ0gsU0FBVUMsT0FBU0MsT0FBQUEsTUFDakIsTUFBTSxHQUFFQyxFQUFGLEdBQU1DLEdBQU9GLEVBQ25CN0IsR0FBVyxHQUNYLE1BQVFnQyxNQUFNLFFBQUVDLFVBQW1CaEMsRUFBT2lDLE1BQU0sQ0FDOUNBLE1BQU85QyxFQUNQK0MsVUFBVyxDQUNUQyxNQUFPLENBQ0w5QixTQUFVLENBQUUsSUFBT3dCLEVBQUdwQixJQUFLLElBQU9xQixFQUFHckIsS0FDckNILFVBQVcsQ0FBRSxJQUFPd0IsRUFBR3BCLElBQUssSUFBT21CLEVBQUduQixPQUcxQzBCLFlBQWEsaUJBRWZ4QyxFQUFXb0MsR0FDWGpDLEdBQVcsS0FHWkcsT0MvRGUsQ0FDeEJSLElBQUssZUFDTHRELE1BQU8sY0FDUGtELEdBQUksZUFFSkUsV0FBWSxjQUNaNkMsWUFBYSxDQUFDLGtCQUloQmhELEVBQUFBLEVBQUFBLE1BQUssUUFBU2lELEVBQUFBLEdBQWEsQ0FDekI1QyxJQUFLLFdBQ0x0RCxNQUFPLFVBQ1BrRCxHQUFJLFVBQ0p4RixLQUFNLFNBQ04wRixXQUFZLGNBQ1o2QyxZQUFhLENBQUMsV0FDZEUsT0FBUSxDQUNObkcsTUFBTyxPQUNQb0csT0FBUSxVQUVWQyxRQUFTLENBQ1AsQ0FDRW5ELEdBQUksY0FDSkMsTUFBTyxPQUNQNUUsTUFBTyxJQUNQK0gsS0FBTSxFQUFHOUIsUUFBQUEsS0FDUCxnQkFBQyxLQUFELENBQVV2RyxNQUFPUixFQUFZK0csRUFBUStCLGNBQWUvQixFQUFRK0Isa0JBTXBFdEQsRUFBQUEsRUFBQUEsTUFDRSxjQUNBLEtBQ0EsQ0FDRUcsV0FBWSxjQUNab0QsS0FBTSx5QkFDTkMsWUFBYyx3Q0FDZEMsTUFBTyxnQkFJWHpELEVBQUFBLEVBQUFBLE1BQ0Usb0JBQ0EsS0FDQSxDQUNFdkYsS0FBTSxTQUNOOEksS0FBTSxTQUNORyxLQUFPLFVBQ1BGLFlBQWEsNkJBQ2JHLEtMM0RpQixFQUFHUixPQUFBQSxNQUN0QixNQUFNLFFBQUU1QixHQUFZNEIsRUFFZFMsRUFBYSxJQUFJMUcsS0FBS3FFLEVBQVFzQyxpQkFDOUJDLEVBQU0sSUFBSTVHLEtBQ1Y2RyxFQUFXSCxFQUFXSSxVQUFZRixFQUFJRSxVQUU1QyxPQUNFLHVCQUFLcEosVUFBVSxpQkFDYixnQkFBQ3FKLEVBQUEsRUFBRCxDQUFhQyxRQUFRLGdCQUFnQm5KLE1BQU8sQ0FBRW9KLFVBQVcsU0FDdkQsZ0JBQUNGLEVBQUEsT0FBRCxDQUFrQkcsUUFBUyxHQUN6QiwyQkFDRSxzQ0FERixJQUNtQixnQkFBQyxLQUFELENBQVVwSixNQUFPUixFQUFZK0csRUFBUStCLGNBQWUvQixFQUFRK0IsZUFFckQsU0FBeEIvQixFQUFRK0IsYUFBa0Qsa0JBQXhCL0IsRUFBUStCLGNBQzFDLDJCQUNFLDBDQUNBLDJCQUNBLDBCQUFLTSxFQUFXUyxxQkFBaEIsS0FBd0NULEVBQVdVLHNCQUNqRFAsRUFBVyxHQUNYLHVCQUFLbkosVUFBVSxvQkFBb0JpQixLQUFLMEksTUFBTVIsRUFBUyxJQUFLLElBQTVELFlBRUFBLEVBQVcsR0FDWCxrREFJb0IsTUFBekJ4QyxFQUFRaUQsZUFDUCxnQ0FDRSx1Q0FERixJQUNxQmpELEVBQVFpRCxjQUQ3QixPQUMrQyw0QkFHdEIsTUFBMUJqRCxFQUFRa0QsZ0JBQ1AsZ0NBQ0UsMkJBQ0EsMkRBQXFDLDJCQUNyQyxvQ0FIRixJQUdrQmxELEVBQVFrRCxlQUFlQyxXQUFXQyxNQUFNLDJCQUN4RCx1Q0FKRixJQUlxQnBELEVBQVFrRCxlQUFlRyxTQUFTLDJCQUNuRCxxQ0FMRixLQUtvQnJELEVBQVFrRCxlQUFlSSxhQUFlLEtBQUtDLFFBQVEsR0FBRywyQkFDeEUseUNBTkYsSUFNdUJ2RCxFQUFRa0QsZUFBZU0sMkJBQTJCLDZCQUk3RSxnQkFBQ2QsRUFBQSxPQUFELENBQWtCRyxRQUFTLEdBQ0YsTUFBdEI3QyxFQUFRQyxZQUNQLDJCQUNFLHlDQUNBLHVCQUFLdEMsSUFBS3FDLEVBQVFDLFdBQVlsRyxNQUFNLFVBR3JCLE1BQWxCaUcsRUFBUVIsUUFDUCwyQkFDRSx3Q0FDQSx1QkFBS25HLFVBQVUsa0JBQ1oyRyxFQUFRUixVQUtqQixnQkFBQ2tELEVBQUEsT0FBRCxDQUFrQkcsUUFBUyxHQUNMLE1BQW5CakIsRUFBT25DLFVBQ04sdUJBQUtwRyxVQUFVLGlCQUFpQkcsTUFBTyxDQUFFTSxPQUFTLFVBQ2hELGdCQUFDLEtBQUQsQ0FDRThHLGNBQWUsQ0FBRWYsSUFBSytCLEVBQU9uQyxTQUFVSyxJQUFLOEIsRUFBT2xDLFdBQ25EbUIsWUFBYSxJQUViLGdCQUFDMUgsRUFBRCxRQUljLE1BQW5CeUksRUFBT25DLFVBQ04sMkJBQ0UsOERLWlZnRSxPQUFRLENBQ04sQ0FBRUMsTUFBTyxVQUFXL0UsTUFBTyxXQUMzQixDQUFFK0UsTUFBTyxTQUFVL0UsTUFBTyxVQUMxQixDQUFFK0UsTUFBTyxRQUFTL0UsTUFBTyxTQUN6QixDQUFFK0UsTUFBTyxpQkFBa0IvRSxNQUFPLGtCQUNsQyxDQUFFK0UsTUFBTyxrQkFBbUIvRSxNQUFPLHVCLGdCQ25GekNnRixFQURrQyxFQUFRLE1BQ2hDQyxFQUE0QixJQUU5QkMsS0FBSyxDQUFDQyxFQUFPcEYsR0FBSSxnTUFBaU0sS0FFMU5vRixFQUFPSCxRQUFVQSxHLGdCQ05qQixJQUFJSSxFQUFNLEVBQVEsT0FDRmhKLEVBQVUsRUFBUSxNQUlDLGlCQUZ2QkEsRUFBVUEsRUFBUWlKLFdBQWFqSixFQUFRa0osUUFBVWxKLEtBRy9DQSxFQUFVLENBQUMsQ0FBQytJLEVBQU9wRixHQUFJM0QsRUFBUyxNQVFqQ2dKLEVBQUloSixFQUxILENBRWQ4RCxPQUFpQixPQUNqQkEsV0FBb0IsSUFNcEJpRixFQUFPSCxRQUFVNUksRUFBUW1KLFFBQVUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ub2RlLXJlZC1jb250cmliLWNoYXRib3QvLi9wbHVnaW5zL3Bhbm9wdGljb24vaGVscGVycy9zZWNyZXQtY29sb3IuanMiLCJ3ZWJwYWNrOi8vbm9kZS1yZWQtY29udHJpYi1jaGF0Ym90Ly4vcGx1Z2lucy9wYW5vcHRpY29uL3ZpZXdzL3NlY3JldC12aWV3ZXIuanMiLCJ3ZWJwYWNrOi8vbm9kZS1yZWQtY29udHJpYi1jaGF0Ym90Ly4vcGx1Z2lucy9wYW5vcHRpY29uL3ZpZXdzL2ltYWdlLmpzIiwid2VicGFjazovL25vZGUtcmVkLWNvbnRyaWItY2hhdGJvdC8uL3BsdWdpbnMvcGFub3B0aWNvbi92aWV3cy9iYWxsb29uLmpzIiwid2VicGFjazovL25vZGUtcmVkLWNvbnRyaWItY2hhdGJvdC8uL3BsdWdpbnMvcGFub3B0aWNvbi92aWV3cy9waW4tcG9pbnQuanMiLCJ3ZWJwYWNrOi8vbm9kZS1yZWQtY29udHJpYi1jaGF0Ym90Ly4vcGx1Z2lucy9wYW5vcHRpY29uL3BhZ2VzL3NlY3JldC1tYXAuanMiLCJ3ZWJwYWNrOi8vbm9kZS1yZWQtY29udHJpYi1jaGF0Ym90Ly4vcGx1Z2lucy9wYW5vcHRpY29uL2luZGV4LmpzIiwid2VicGFjazovL25vZGUtcmVkLWNvbnRyaWItY2hhdGJvdC8uL3BsdWdpbnMvcGFub3B0aWNvbi9zdHlsZXMvc2VjcmV0LXZpZXdlci5zY3NzIiwid2VicGFjazovL25vZGUtcmVkLWNvbnRyaWItY2hhdGJvdC8uL3BsdWdpbnMvcGFub3B0aWNvbi9zdHlsZXMvc2VjcmV0LXZpZXdlci5zY3NzP2EyNDgiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHNlY3JldENvbG9yID0gKHR5cGUpID0+IHtcbiAgaWYgKHR5cGUgPT09ICdsb2NhdGlvbicpIHtcbiAgICByZXR1cm4gJyM1RTgyNjMnO1xuICB9IGVsc2UgaWYgKHR5cGUpIHtcbiAgICByZXR1cm4nI0QzNjEzNSc7XG4gIH0gZWxzZSBpZiAodHlwZSkge1xuICAgIHJldHVybiAnIzU5NUQ4OCc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICcjMDAwMDAwJztcbiAgfVxufTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgSWNvbiwgRmxleGJveEdyaWQgfSBmcm9tICdyc3VpdGUnO1xuXG5pbXBvcnQgeyBTbWFsbFRhZywgTWFwcyB9IGZyb20gJy4uLy4uLy4uL3NyYy9jb21wb25lbnRzJztcbmltcG9ydCB1c2VTZXR0aW5ncyBmcm9tICcuLi8uLi8uLi9zcmMvaG9va3Mvc2V0dGluZ3MnO1xuXG5pbXBvcnQgeyBzZWNyZXRDb2xvciB9IGZyb20gJy4uL2hlbHBlcnMvc2VjcmV0LWNvbG9yJztcbmltcG9ydCAnLi4vc3R5bGVzL3NlY3JldC12aWV3ZXIuc2Nzcyc7XG5cbmNvbnN0IFBpblBvaW50ID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxJY29uXG4gICAgICBjbGFzc05hbWU9XCJtYXAtbWFya2VyXCJcbiAgICAgIGljb249XCJtYXAtbWFya2VyXCJcbiAgICAgIHNpemU9XCIyeFwiXG4gICAgICBzdHlsZT17eyBjb2xvcjogJ3JlZCcgfX1cbiAgICAvPlxuICApO1xufVxuXG5jb25zdCBTZWNyZXRWaWV3ZXIgPSAoeyByZWNvcmQgfSkgPT4ge1xuICBjb25zdCB7IHBheWxvYWQgfSA9IHJlY29yZDtcblxuICBjb25zdCBleHBpcmVEYXRlID0gbmV3IERhdGUocGF5bG9hZC5zZWNyZXRfZHVyYXRpb24pO1xuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCBkdXJhdGlvbiA9IGV4cGlyZURhdGUuZ2V0VGltZSgpIC0gbm93LmdldFRpbWUoKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjcmV0LXZpZXdlclwiPlxuICAgICAgPEZsZXhib3hHcmlkIGp1c3RpZnk9XCJzcGFjZS1iZXR3ZWVuXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMzBweCcgfX0+XG4gICAgICAgIDxGbGV4Ym94R3JpZC5JdGVtIGNvbHNwYW49ezd9PlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8Yj5TZWNyZXQgaXM8L2I+IDxTbWFsbFRhZyBjb2xvcj17c2VjcmV0Q29sb3IocGF5bG9hZC5zZWNyZXRfdHlwZSl9PntwYXlsb2FkLnNlY3JldF90eXBlfTwvU21hbGxUYWc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgeyhwYXlsb2FkLnNlY3JldF90eXBlID09PSAndGltZScgfHwgcGF5bG9hZC5zZWNyZXRfdHlwZSA9PT0gJ2xvY2F0aW9uK3RpbWUnKSAmJiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8Yj5SZXZlYWxlZCB3aGVuPC9iPlxuICAgICAgICAgICAgICA8YnIvPlxuICAgICAgICAgICAgICA8ZW0+e2V4cGlyZURhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCl9LCB7ZXhwaXJlRGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoKX08L2VtPlxuICAgICAgICAgICAgICB7KGR1cmF0aW9uID4gMCkgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjcmV0LXJldmVhbC1hdFwiPntNYXRoLnJvdW5kKGR1cmF0aW9uLzEwMDAvNjApfSBtaW51dGVzPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHsoZHVyYXRpb24gPCAwKSAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdj5TZWNyZXQgZGF0ZSBpcyBkdWU8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgICAge3BheWxvYWQuc2VjcmV0X2JvdW50eSAhPSBudWxsICYmIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxiPklDRSBwcmljZTo8L2I+IHtwYXlsb2FkLnNlY3JldF9ib3VudHl9IEVVUjxici8+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtwYXlsb2FkLnNlY3JldF9wYXltZW50ICE9IG51bGwgJiYgKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPGJyLz5cbiAgICAgICAgICAgICAgPGI+VXNlciBwYWlkIHRvIHJldmVhbCB0aGUgc2VjcmV0PC9iPjxici8+XG4gICAgICAgICAgICAgIDxiPkVtYWlsOiA8L2I+IHtwYXlsb2FkLnNlY3JldF9wYXltZW50Lm9yZGVyX2luZm8uZW1haWx9PGJyIC8+XG4gICAgICAgICAgICAgIDxiPkN1cnJlbmN5OiA8L2I+IHtwYXlsb2FkLnNlY3JldF9wYXltZW50LmN1cnJlbmN5fTxiciAvPlxuICAgICAgICAgICAgICA8Yj5BbW91bnQ6IDwvYj4geyhwYXlsb2FkLnNlY3JldF9wYXltZW50LnRvdGFsX2Ftb3VudCAvIDEwMCkudG9GaXhlZCgyKX08YnIgLz5cbiAgICAgICAgICAgICAgPGI+UGF5bWVudCBJRDogPC9iPiB7cGF5bG9hZC5zZWNyZXRfcGF5bWVudC5wcm92aWRlcl9wYXltZW50X2NoYXJnZV9pZH08YnIgLz5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRmxleGJveEdyaWQuSXRlbT5cbiAgICAgICAgPEZsZXhib3hHcmlkLkl0ZW0gY29sc3Bhbj17N30+XG4gICAgICAgICAge3BheWxvYWQuc2VjcmV0X3VybCAhPSBudWxsICYmIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxiPlNlY3JldCBpbWFnZTwvYj5cbiAgICAgICAgICAgICAgPGltZyBzcmM9e3BheWxvYWQuc2VjcmV0X3VybH0gd2lkdGg9XCIxMDAlXCIvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7cGF5bG9hZC5zZWNyZXQgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8Yj5TZWNyZXQgdGV4dDwvYj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkaXNwbGF5LXNlY3JldFwiPlxuICAgICAgICAgICAgICAgIHtwYXlsb2FkLnNlY3JldH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L0ZsZXhib3hHcmlkLkl0ZW0+XG4gICAgICAgIDxGbGV4Ym94R3JpZC5JdGVtIGNvbHNwYW49ezd9PlxuICAgICAgICAgIHtyZWNvcmQubGF0aXR1ZGUgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVpLWRldmljZXMtbWFwXCIgc3R5bGU9e3sgaGVpZ2h0OiBgMzAwcHhgIH19PlxuICAgICAgICAgICAgICA8TWFwc1xuICAgICAgICAgICAgICAgIGRlZmF1bHRDZW50ZXI9e3sgbGF0OiByZWNvcmQubGF0aXR1ZGUsIGxuZzogcmVjb3JkLmxvbmdpdHVkZSB9fVxuICAgICAgICAgICAgICAgIGRlZmF1bHRab29tPXsxMX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxQaW5Qb2ludCAvPlxuICAgICAgICAgICAgICA8L01hcHM+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtyZWNvcmQubGF0aXR1ZGUgPT0gbnVsbCAmJiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8ZW0+Tm8gbG9jYXRpb24gZm9yIHRoaXMgc2VjcmV0PC9lbT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRmxleGJveEdyaWQuSXRlbT5cbiAgICAgIDwvRmxleGJveEdyaWQ+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuLypTdXJ2ZXJ5Vmlld2VyLnByb3BUeXBlcyA9IHtcbiAgcmVjb3JkOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHF1ZXN0aW9uOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgdHlwZTogUHJvcFR5cGVzLm9uZU9mKFsndGV4dCcsICdudW1iZXInLCAnbXVsdGlwbGUnLCAnaW1hZ2UnXSksXG4gICAgICBhbnN3ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBkYXRhOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICAgICAgUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgICBhbnN3ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgICAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmdcbiAgICAgICAgfSlcbiAgICAgIF0pXG4gICAgfSlcbiAgfSlcbn07Ki9cblxuZXhwb3J0IGRlZmF1bHQgU2VjcmV0Vmlld2VyOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5jbGFzcyBJbWFnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICB0aHVtYjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBoZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgd2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgbWF4V2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgbWF4SGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB0aHVtYjogbnVsbCxcbiAgICBoZWlnaHQ6IG51bGwsXG4gICAgd2lkdGg6IG51bGwsXG4gICAgbWF4V2lkdGg6IDIwMCxcbiAgICBtYXhIZWlnaHQ6IDQwMCxcbiAgICBvbkNsaWNrOiAoKSA9PiB7fVxuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHRodW1iLCBoZWlnaHQsIHdpZHRoLCBtYXhXaWR0aCwgbWF4SGVpZ2h0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgcmF0aW8gPSBoZWlnaHQgLyB3aWR0aDtcbiAgICBsZXQgaW1hZ2VIZWlnaHQgPSBNYXRoLmZsb29yKHJhdGlvICogbWF4V2lkdGgpO1xuICAgIGlmIChpbWFnZUhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgaW1hZ2VIZWlnaHQgPSBtYXhIZWlnaHQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJHt0aHVtYn0pYCxcbiAgICAgIGJhY2tncm91bmRQb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICB3aWR0aDogYCR7bWF4V2lkdGh9cHhgLFxuICAgICAgaGVpZ2h0OiBgJHtpbWFnZUhlaWdodH1weGBcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e3N0eWxlfSAvPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2U7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgSWNvbiwgUG9wb3ZlciB9IGZyb20gJ3JzdWl0ZSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IEltYWdlIGZyb20gJy4vaW1hZ2UnO1xuXG5jb25zdCBCYWxsb29uID0gKHsgdG9waWMsIHRzLCBjb250ZW50LCBvbkRlbGV0ZSwgb25ab29tLCB0aHVtYiwgaW1hZ2UsIHdpZHRoLCBoZWlnaHQsIG1heEhlaWdodCwgLi4ucHJvcHMgfSkgPT4ge1xuICBsZXQgdGh1bWJJbWFnZTtcbiAgaWYgKCFfLmlzRW1wdHkodGh1bWIpKSB7XG4gICAgdGh1bWJJbWFnZSA9IChcbiAgICAgIDxJbWFnZVxuICAgICAgICB0aHVtYj17dGh1bWJ9XG4gICAgICAgIHRvcGljPXt0b3BpY31cbiAgICAgICAgd2lkdGg9e3dpZHRofVxuICAgICAgICBoZWlnaHQ9e2hlaWdodH1cbiAgICAgICAgbWF4SGVpZ2h0PXttYXhIZWlnaHR9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnY2xpY2tlZCcpO1xuICAgICAgICAgIG9uWm9vbSh7IH0pXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQb3BvdmVyIHRpdGxlPXt0b3BpY30gey4uLnByb3BzfSBvbk1vdXNlTGVhdmU9eygpID0+IHt9fT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicG9wb3Zlci1tYXAtbWFya2VyXCI+XG4gICAgICAgIHZhcmlvXG4gICAgICA8L2Rpdj5cbiAgICA8L1BvcG92ZXI+XG4gICk7XG59O1xuXG5CYWxsb29uLnByb3BUeXBlcyA9IHtcbiAgdG9waWM6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRodW1iOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpbWFnZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY29udGVudDogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHM6IFByb3BUeXBlcy5pbnN0YW5jZU9mKERhdGUpLFxuICBvbkRlbGV0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICBoZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG59O1xuXG5CYWxsb29uLmRlZmF1bHRQcm9wcyA9IHtcbiAgdG9waWM6IG51bGwsXG4gIHRodW1iOiBudWxsLFxuICBpbWFnZTogbnVsbCxcbiAgY29udGVudDogbnVsbCxcbiAgdHM6IG51bGwsXG4gIG9uRGVsZXRlOiAoKSA9PiB7fSxcbiAgd2lkdGg6IG51bGwsXG4gIGhlaWdodDogbnVsbFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQmFsbG9vbjtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBJY29uLCBUb29sdGlwLCBXaGlzcGVyLCBQb3BvdmVyIH0gZnJvbSAncnN1aXRlJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmltcG9ydCBCYWxsb29uIGZyb20gJy4vYmFsbG9vbic7XG5cbmNsYXNzIFBpblBvaW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIHBvaW50OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgdG9waWM6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICB0ZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgdHM6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KS5pc1JlcXVpcmVkLFxuICAgIGljb246IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2l6ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0ZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHBvcG92ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdGh1bWI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaW1hZ2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2hvd1BvcG92ZXI6IFByb3BUeXBlcy5ib29sLFxuICAgIHR5cGU6IFByb3BUeXBlcy5vbmVPZihbJ2ljb24nLCAndG9vbHRpcCddKSxcbiAgICBpbmtDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBtYXhIZWlnaHQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGljb246ICdtYXAtbWFya2VyJyxcbiAgICBjb2xvcjogJyNGRjMzMDAnLFxuICAgIHRleHQ6IG51bGwsXG4gICAgc2l6ZTogJzJ4JyxcbiAgICBwb3BvdmVyOiBudWxsLFxuICAgIHRodW1iOiBudWxsLFxuICAgIGltYWdlOiBudWxsLFxuICAgIHR5cGU6ICdpY29uJyxcbiAgICBzaG93UG9wb3ZlcjogZmFsc2UsXG4gICAgaW5rQ29sb3I6ICcjZmZmZmZmJyxcbiAgICBtYXhIZWlnaHQ6IDQ4MFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5oYW5kbGVMb2FkZWQgPSB0aGlzLmhhbmRsZUxvYWRlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG5cbiAgICBjb25zdCB7IHRodW1iIH0gPSBwcm9wcztcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBuZWVkUHJlbG9hZDogIV8uaXNFbXB0eSh0aHVtYiksXG4gICAgICBwcmVsb2FkOiBmYWxzZSxcbiAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgdHlwZSwgY29sb3J9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmICh0aGlzLnRvb2x0aXAgIT0gbnVsbCAmJiB0eXBlID09PSAndG9vbHRpcCcpIHtcbiAgICAgIHRoaXMudG9vbHRpcC5xdWVyeVNlbGVjdG9yKCcucnMtdG9vbHRpcC1pbm5lcicpLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yO1xuICAgICAgdGhpcy50b29sdGlwLnF1ZXJ5U2VsZWN0b3IoJy5ycy10b29sdGlwLWFycm93Jykuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3I7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTG9hZGVkKGUpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHByZWxvYWQ6IGZhbHNlLFxuICAgICAgd2lkdGg6IGUudGFyZ2V0LndpZHRoLFxuICAgICAgaGVpZ2h0OiBlLnRhcmdldC5oZWlnaHRcbiAgICB9LCAoKSA9PiB0aGlzLnRyaWdnZXIuc2hvdygpKTtcbiAgfVxuXG4gIGhhbmRsZUNsaWNrKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IHsgdGh1bWIgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAoIV8uaXNFbXB0eSh0aHVtYikpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBwcmVsb2FkOiB0cnVlIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJpZ2dlci5zaG93KCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgY2hpbGRyZW4sIHBvaW50LCB0ZXh0LCB0eXBlLCBwb3BvdmVyLCBzaG93UG9wb3ZlciwgdGh1bWIsIGltYWdlLCBpbmtDb2xvciwgbWF4SGVpZ2h0LCBvbkRlbGV0ZVBvaW50LCBvblNob3dJbWFnZSB9ID0gdGhpcy5wcm9wcztcbiAgICBsZXQgeyBpY29uLCBjb2xvciwgc2l6ZSB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaGVpZ2h0LCB3aWR0aCwgcHJlbG9hZCwgbmVlZFByZWxvYWQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICBpZiAoXy5pc0VtcHR5KGljb24pKSB7XG4gICAgICBpY29uID0gJ21hcC1tYXJrZXInO1xuICAgIH1cbiAgICBpZiAoXy5pc0VtcHR5KHNpemUpKSB7XG4gICAgICBzaXplID0gJ2xnJztcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eShjb2xvcikpIHtcbiAgICAgIGNvbG9yID0gJyNGRjMzMDAnO1xuICAgIH1cbiAgICBpZiAoXy5pc0VtcHR5KGlua0NvbG9yKSkge1xuICAgICAgY29sb3IgPSAnIzAwMDAwMCc7XG4gICAgfVxuICAgIGNvbnN0IHRzID0gbmV3IERhdGUocGFyc2VJbnQocG9pbnQudHMsIDEwKSk7XG5cbiAgICBsZXQgY29udGVudDtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgY2FzZSAnaWNvbic6XG4gICAgICAgIGNvbnRlbnQgPSAoXG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcygnd3JhcHBlci1tYXAtbWFya2VyJywgeyBwcmVsb2FkIH0pfVxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30+XG4gICAgICAgICAgICB7cHJlbG9hZCAmJiA8aW1nIHNyYz17dGh1bWJ9IHN0eWxlPXt7ZGlzcGxheTogJ25vbmUnfX0gb25Mb2FkPXt0aGlzLmhhbmRsZUxvYWRlZH0gYWx0PVwiXCIvPn1cbiAgICAgICAgICAgIDxJY29uXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcygnbWFwLW1hcmtlcicsIHsgJ3BvaW50ZXInOiBzaG93UG9wb3ZlciB9KX1cbiAgICAgICAgICAgICAgaWNvbj17aWNvbn1cbiAgICAgICAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3IgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9hPlxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Rvb2x0aXAnOlxuICAgICAgICBjb250ZW50ID0gKFxuICAgICAgICAgIDxkaXYgcmVmPXtyZWYgPT4gdGhpcy50b29sdGlwID0gcmVmfSBzdHlsZT17eyBoZWlnaHQ6IDIwLCBiYWNrZ3JvdW5kQ29sb3I6ICcjZmYwMDAwJyB9fT5cbiAgICAgICAgICAgIDxUb29sdGlwIHZpc2libGU+PHNwYW4gc3R5bGU9e3sgY29sb3I6IGlua0NvbG9yIH19Pnt0ZXh0fTwvc3Bhbj48L1Rvb2x0aXA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29udGVudCA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIGlmIHNob3cgcG9wb3ZlciwgdGhlbiBhZGQgd2hpc3BlciB3cmFwcGVyXG4gICAgaWYgKHNob3dQb3BvdmVyKSB7XG4gICAgICAvLyBpZiBuZWVkIHByZWxvYWQgYW5kIGlzIHByZWxvYWRpbmcsIHRoZW4ganVzdCBzaG93IHRoZSBtYXJrZXIgYW5kIG5vdCB0aGUgd2hpc3BlcmVyXG4gICAgICBpZiAobmVlZFByZWxvYWQgJiYgcHJlbG9hZCkge1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNwZWFrZXIgPSAoXG4gICAgICAgIDxQb3BvdmVyIG9uTW91c2VMZWF2ZT17KCkgPT4ge319PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicG9wb3Zlci1tYXAtbWFya2VyXCI+XG4gICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8V2hpc3BlciB0cmlnZ2VyPVwiY2xpY2tcIiBwbGFjZW1lbnQ9XCJ0b3BcIiBzcGVha2VyPXtzcGVha2VyfSB0cmlnZ2VyUmVmPXtyZWYgPT4gdGhpcy50cmlnZ2VyID0gcmVmfT5cbiAgICAgICAgICB7Y29udGVudH1cbiAgICAgICAgPC9XaGlzcGVyPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUGluUG9pbnQ7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZ3FsIGZyb20gJ2dyYXBocWwtdGFnJztcbmltcG9ydCB7IExpbmsgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IHVzZUFwb2xsb0NsaWVudCB9IGZyb20gJ3JlYWN0LWFwb2xsbyc7XG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICdyc3VpdGUnO1xuXG5pbXBvcnQgeyBQYWdlQ29udGFpbmVyLCBCcmVhZGNydW1icywgTWFwcyB9IGZyb20gJy4uLy4uLy4uL3NyYy9jb21wb25lbnRzJztcblxuaW1wb3J0IFBpblBvaW50IGZyb20gJy4uL3ZpZXdzL3Bpbi1wb2ludCc7XG5cbmNvbnN0IEdFVF9MT0NBVElPTl9TRUNSRVRTID0gZ3FsYFxucXVlcnkoJHdoZXJlOiBKU09OKSB7XG4gIHJlY29yZHMobGltaXQ6IDUwLCBvcmRlcjogXCJnZW9oYXNoXCIsIHdoZXJlOiAkd2hlcmUpIHtcbiAgICBpZCxcbiAgICBzdGF0dXMsXG4gICAgdGl0bGUsXG4gICAgbGF0aXR1ZGUsXG4gICAgbG9uZ2l0dWRlLFxuICAgIGdlb2hhc2gsXG4gICAgcGF5bG9hZFxuICB9XG59YDtcblxuY29uc3QgU2VjcmV0c01hcCA9ICgpID0+IHtcbiAgY29uc3QgW3NlY3JldHMsIHNldFNlY3JldHNdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgY2xpZW50ID0gdXNlQXBvbGxvQ2xpZW50KCk7XG5cbiAgbGV0IG1hcmtlcnMgPSAoc2VjcmV0cyB8fCBbXSlcbiAgICAuZmlsdGVyKHNlY3JldCA9PiBzZWNyZXQubGF0aXR1ZGUgIT0gbnVsbCAmJiBzZWNyZXQubG9uZ2l0dWRlICE9IG51bGwpXG4gICAgLm1hcChzZWNyZXQgPT4gKFxuICAgICAgPFBpblBvaW50XG4gICAgICAgIGtleT17c2VjcmV0LmlkfVxuICAgICAgICBsYXQ9e3NlY3JldC5sYXRpdHVkZX1cbiAgICAgICAgbG5nPXtzZWNyZXQubG9uZ2l0dWRlfVxuICAgICAgICBwb2ludD17e319XG4gICAgICAgIHBvcG92ZXI9e3NlY3JldC50aXRsZX1cbiAgICAgICAgc2hvd1BvcG92ZXI9e3RydWV9XG4gICAgICA+XG4gICAgICAgIDxkaXYgc3R5bGU9e3ttaW5IZWlnaHQ6ICcxMjBweCd9fT48c3Ryb25nPntzZWNyZXQudGl0bGV9PC9zdHJvbmc+XG4gICAgICAgIHtzZWNyZXQucGF5bG9hZC5zZWNyZXRfdXJsICE9IG51bGwgJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGJhY2tncm91bmRJbWFnZTogYHVybCgke3NlY3JldC5wYXlsb2FkLnNlY3JldF91cmx9KWAsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRQb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIG1pbldpZHRoOiAnMTIwcHgnLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVwZWF0OiAnbm8tcmVwZWF0JyxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZFNpemU6ICdjb250YWluJyxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBgMTIwcHhgXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHtzZWNyZXQucGF5bG9hZC5zZWNyZXQgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgPGRpdj57c2VjcmV0LnBheWxvYWQuc2VjcmV0fTwvZGl2PlxuICAgICAgICApfVxuICAgICAgICA8TGluayB0bz17YC9yZWNvcmQvJHtzZWNyZXQuaWR9YH0+dmlldzwvTGluaz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1BpblBvaW50PlxuICAgICkpO1xuXG4gIHJldHVybiAoXG4gICAgPFBhZ2VDb250YWluZXIgY2xhc3NOYW1lPVwibXktcGFnZVwiPlxuICAgICAgPEJyZWFkY3J1bWJzIHBhZ2VzPXtbJ1NlY3JldCBsb2NhdGlvbnMnXX0vPlxuICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICc0NTBweCcsIHBvc2l0aW9uOiAncmVsYXRpdmUnIH19PlxuICAgICAgICB7bG9hZGluZyAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBwb3NpdGlvbjogJ2Fic29sdXRlJywgdG9wOiAnMjBweCcsIGxlZnQ6ICcyMHB4JywgekluZGV4OiAxMDAwMDAwMCB9fT5cbiAgICAgICAgICAgIDxMb2FkZXIgc2l6ZT1cIm1kXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAgPE1hcHNcbiAgICAgICAgICBkZWZhdWx0Q2VudGVyPXt7IGxhdDogNDUuNDg1NDczOSwgbG5nOiA5LjIwMjIxNzYgfX1cbiAgICAgICAgICBkZWZhdWx0Wm9vbT17MTF9XG4gICAgICAgICAgaGVpZ2h0PXs0NTB9XG4gICAgICAgICAgb25DaGFuZ2U9e2FzeW5jICh7IGJvdW5kcyB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHNlLCBudyB9ID0gYm91bmRzO1xuICAgICAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogeyByZWNvcmRzIH19ID0gYXdhaXQgY2xpZW50LnF1ZXJ5KHtcbiAgICAgICAgICAgICAgcXVlcnk6IEdFVF9MT0NBVElPTl9TRUNSRVRTLFxuICAgICAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgICAgICAgbGF0aXR1ZGU6IHsgJ2d0ZSc6IHNlLmxhdCwgJ2x0ZSc6IG53LmxhdCB9LFxuICAgICAgICAgICAgICAgICAgbG9uZ2l0dWRlOiB7ICdndGUnOiBudy5sbmcsICdsdGUnOiBzZS5sbmcgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNldFNlY3JldHMocmVjb3Jkcyk7XG4gICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge21hcmtlcnN9XG4gICAgICAgIDwvTWFwcz5cbiAgICAgIDwvZGl2PlxuICAgIDwvUGFnZUNvbnRhaW5lcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNlY3JldHNNYXA7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcGx1ZyB9IGZyb20gJ2NvZGUtcGx1Zyc7XG5cbmltcG9ydCB7IFVzZXJSZWNvcmRzLCBTbWFsbFRhZyB9IGZyb20gJy4uLy4uL3NyYy9jb21wb25lbnRzJztcbmltcG9ydCBTZWNyZXRWaWV3ZXIgZnJvbSAnLi92aWV3cy9zZWNyZXQtdmlld2VyJztcbmltcG9ydCB7IHNlY3JldENvbG9yIH0gZnJvbSAnLi9oZWxwZXJzL3NlY3JldC1jb2xvcic7XG5pbXBvcnQgU2VjcmV0c01hcCBmcm9tICcuL3BhZ2VzL3NlY3JldC1tYXAnO1xuXG5wbHVnKCdzaWRlYmFyJywgbnVsbCwge1xuICBpZDogJ3dpZ2dsZScsXG4gIGxhYmVsOiAnUGFub3B0aWNvbicsXG4gIGljb246ICdsb2dvLXN1cnZleScsXG4gIHBlcm1pc3Npb246ICd3aWdnbGUudmlldycsXG4gIG9wdGlvbnM6IFtcbiAgICB7XG4gICAgICBpZDogJ3dpZ2dsZS1zZWNyZXRzJyxcbiAgICAgIGxhYmVsOiAnU2VjcmV0cycsXG4gICAgICB1cmw6ICcvc2VjcmV0cycsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ3dpZ2dsZS1zZWNyZXRzLW1hcCcsXG4gICAgICBsYWJlbDogJ1NlY3JldHMgTWFwJyxcbiAgICAgIHVybDogJy9zZWNyZXRzLW1hcCcsXG4gICAgfVxuICBdXG59KTtcbi8vIHJlZ2lzdGVyIGEgcGFnZSBtYXAgZm9yIGFsbCBzZWNyZXRzXG5wbHVnKCdwYWdlcycsIFNlY3JldHNNYXAsIHtcbiAgdXJsOiAnL3NlY3JldHMtbWFwJyxcbiAgdGl0bGU6ICdTZWNyZXRzIE1hcCcsXG4gIGlkOiAnc2VjcmV0cy1tYXBzJyxcblxuICBwZXJtaXNzaW9uOiAnd2lnZ2xlLnZpZXcnLFxuICBicmVhZGNydW1iczogWydTZWNyZXRzIE1hcCddXG59KTtcblxuLy8gcmVnaXN0ZXIgYSBwYWdlIGZvciB1c2VyIHJlY29yZHMgb2YgdHlwZSBzdXJ2ZXlcbnBsdWcoJ3BhZ2VzJywgVXNlclJlY29yZHMsIHtcbiAgdXJsOiAnL3NlY3JldHMnLFxuICB0aXRsZTogJ1NlY3JldHMnLFxuICBpZDogJ3NlY3JldHMnLFxuICB0eXBlOiAnc2VjcmV0JyxcbiAgcGVybWlzc2lvbjogJ3dpZ2dsZS52aWV3JyxcbiAgYnJlYWRjcnVtYnM6IFsnU2VjcmV0cyddLFxuICBsYWJlbHM6IHtcbiAgICB0aXRsZTogJ05hbWUnLFxuICAgIHJlY29yZDogJ3NlY3JldCdcbiAgfSxcbiAgY29sdW1uczogW1xuICAgIHtcbiAgICAgIGlkOiAnc2VjcmV0LXR5cGUnLFxuICAgICAgbGFiZWw6ICdUeXBlJyxcbiAgICAgIHdpZHRoOiAxMjAsXG4gICAgICBjZWxsOiAoeyBwYXlsb2FkIH0pID0+IChcbiAgICAgICAgPFNtYWxsVGFnIGNvbG9yPXtzZWNyZXRDb2xvcihwYXlsb2FkLnNlY3JldF90eXBlKX0+e3BheWxvYWQuc2VjcmV0X3R5cGV9PC9TbWFsbFRhZz5cbiAgICAgIClcbiAgICB9XG4gIF1cbn0pO1xuLy8gcmVnaXN0ZXIgcGVybWlzc2lvbnNcbnBsdWcoXG4gICdwZXJtaXNzaW9ucycsXG4gIG51bGwsXG4gIHtcbiAgICBwZXJtaXNzaW9uOiAnd2lnZ2xlLnZpZXcnLFxuICAgIG5hbWU6ICdWaWV3IFBhbm9wdGljb24gc2VjcmV0JyxcbiAgICBkZXNjcmlwdGlvbjogYFZpZXcgc2VjcmV0cyBzdG9yZWQgaW4gUGFub3B0aWNvbiBCb3RgLFxuICAgIGdyb3VwOiAnUGFub3B0aWNvbidcbiAgfVxuKTtcbi8vIHJlZ2lzdGVyIHVzZXIgcmVjb3JkIHR5cGVcbnBsdWcoXG4gICd1c2VyLXJlY29yZC10eXBlcycsXG4gIG51bGwsXG4gIHtcbiAgICB0eXBlOiAnc2VjcmV0JyxcbiAgICBuYW1lOiAnU2VjcmV0JyxcbiAgICBsaXN0OiBgU2VjcmV0c2AsXG4gICAgZGVzY3JpcHRpb246ICdMaXN0IG9mIFBhbm9wdGljb24gc2VjcmV0cycsXG4gICAgZm9ybTogU2VjcmV0Vmlld2VyLFxuICAgIHN0YXR1czogW1xuICAgICAgeyB2YWx1ZTogJ3ByaXZhdGUnLCBsYWJlbDogJ1ByaXZhdGUnIH0sXG4gICAgICB7IHZhbHVlOiAncHVibGljJywgbGFiZWw6ICdQdWJsaWMnIH0sXG4gICAgICB7IHZhbHVlOiAnY3JhenknLCBsYWJlbDogJ0NyYXp5JyB9LFxuICAgICAgeyB2YWx1ZTogJ2tleWhvbGRlci1mcmVlJywgbGFiZWw6ICdLZXlob2xkZXIgZnJlZScgfSxcbiAgICAgIHsgdmFsdWU6ICdrZXlob2xkZXItdGFrZW4nLCBsYWJlbDogJ0tleWhvbGRlciB0YWtlbicgfVxuICAgIF1cbiAgfVxuKTtcbi8vIHJlZ2lzdGVyIGJ1dHRvbiBpbiB0aGUgdXNlciBtb2RhbCB0byByZWRpcmVjdCB0byBzdXJ2ZXkgbGlzdHNcbi8qcGx1ZyhcbiAgJ3VzZXItYnV0dG9uJyxcbiAgR29Ub1N1cnZleUJ1dHRvblxuKTsqL1xuIiwiLy8gSW1wb3J0c1xudmFyIF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyA9IHJlcXVpcmUoXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpO1xuZXhwb3J0cyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhmYWxzZSk7XG4vLyBNb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5zZWNyZXQtdmlld2VyIC5kaXNwbGF5LXNlY3JldHtwYWRkaW5nOjRweCAxMHB4O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWVlZWU7Ym9yZGVyOjFweCBzb2xpZCAjYmJiYmJifS5zZWNyZXQtdmlld2VyIC5zZWNyZXQtcmV2ZWFsLWF0e2ZvbnQtc2l6ZTo0MHB4O2ZvbnQtd2VpZ2h0OmJvbGRlcn1cXG5cIiwgXCJcIl0pO1xuLy8gRXhwb3J0c1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzO1xuIiwidmFyIGFwaSA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCIpO1xuICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zZWNyZXQtdmlld2VyLnNjc3NcIik7XG5cbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50Ll9fZXNNb2R1bGUgPyBjb250ZW50LmRlZmF1bHQgOiBjb250ZW50O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbiAgICAgICAgICAgIH1cblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzIHx8IHt9OyJdLCJuYW1lcyI6WyJzZWNyZXRDb2xvciIsInR5cGUiLCJQaW5Qb2ludCIsIkljb24iLCJjbGFzc05hbWUiLCJpY29uIiwic2l6ZSIsInN0eWxlIiwiY29sb3IiLCJJbWFnZSIsIlJlYWN0IiwicmVuZGVyIiwidGh1bWIiLCJoZWlnaHQiLCJ3aWR0aCIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwidGhpcyIsInByb3BzIiwicmF0aW8iLCJpbWFnZUhlaWdodCIsIk1hdGgiLCJmbG9vciIsImJhY2tncm91bmRJbWFnZSIsImJhY2tncm91bmRQb3NpdGlvbiIsIlByb3BUeXBlcyIsIm9uQ2xpY2siLCJCYWxsb29uIiwidG9waWMiLCJ0cyIsImNvbnRlbnQiLCJvbkRlbGV0ZSIsIm9uWm9vbSIsImltYWdlIiwidGh1bWJJbWFnZSIsIl8iLCJjb25zb2xlIiwibG9nIiwiUG9wb3ZlciIsInRpdGxlIiwib25Nb3VzZUxlYXZlIiwicHJvcFR5cGVzIiwiRGF0ZSIsImRlZmF1bHRQcm9wcyIsImNvbnN0cnVjdG9yIiwic3VwZXIiLCJoYW5kbGVMb2FkZWQiLCJiaW5kIiwiaGFuZGxlQ2xpY2siLCJzdGF0ZSIsIm5lZWRQcmVsb2FkIiwicHJlbG9hZCIsImNvbXBvbmVudERpZE1vdW50IiwidG9vbHRpcCIsInF1ZXJ5U2VsZWN0b3IiLCJiYWNrZ3JvdW5kQ29sb3IiLCJlIiwic2V0U3RhdGUiLCJ0YXJnZXQiLCJ0cmlnZ2VyIiwic2hvdyIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwiY2hpbGRyZW4iLCJwb2ludCIsInRleHQiLCJwb3BvdmVyIiwic2hvd1BvcG92ZXIiLCJpbmtDb2xvciIsIm9uRGVsZXRlUG9pbnQiLCJvblNob3dJbWFnZSIsInBhcnNlSW50IiwiaHJlZiIsImNsYXNzTmFtZXMiLCJzcmMiLCJkaXNwbGF5Iiwib25Mb2FkIiwiYWx0IiwicmVmIiwiVG9vbHRpcCIsInZpc2libGUiLCJzcGVha2VyIiwiV2hpc3BlciIsInBsYWNlbWVudCIsInRyaWdnZXJSZWYiLCJpc1JlcXVpcmVkIiwiR0VUX0xPQ0FUSU9OX1NFQ1JFVFMiLCJncWwiLCJwbHVnIiwiaWQiLCJsYWJlbCIsInBlcm1pc3Npb24iLCJvcHRpb25zIiwidXJsIiwic2VjcmV0cyIsInNldFNlY3JldHMiLCJ1c2VTdGF0ZSIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiY2xpZW50IiwidXNlQXBvbGxvQ2xpZW50IiwibWFya2VycyIsImZpbHRlciIsInNlY3JldCIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwibWFwIiwia2V5IiwibGF0IiwibG5nIiwibWluSGVpZ2h0IiwicGF5bG9hZCIsInNlY3JldF91cmwiLCJtaW5XaWR0aCIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kU2l6ZSIsInRvIiwicGFnZXMiLCJwb3NpdGlvbiIsInRvcCIsImxlZnQiLCJ6SW5kZXgiLCJMb2FkZXIiLCJkZWZhdWx0Q2VudGVyIiwiZGVmYXVsdFpvb20iLCJvbkNoYW5nZSIsImFzeW5jIiwiYm91bmRzIiwic2UiLCJudyIsImRhdGEiLCJyZWNvcmRzIiwicXVlcnkiLCJ2YXJpYWJsZXMiLCJ3aGVyZSIsImZldGNoUG9saWN5IiwiYnJlYWRjcnVtYnMiLCJVc2VyUmVjb3JkcyIsImxhYmVscyIsInJlY29yZCIsImNvbHVtbnMiLCJjZWxsIiwic2VjcmV0X3R5cGUiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJncm91cCIsImxpc3QiLCJmb3JtIiwiZXhwaXJlRGF0ZSIsInNlY3JldF9kdXJhdGlvbiIsIm5vdyIsImR1cmF0aW9uIiwiZ2V0VGltZSIsIkZsZXhib3hHcmlkIiwianVzdGlmeSIsIm1hcmdpblRvcCIsImNvbHNwYW4iLCJ0b0xvY2FsZURhdGVTdHJpbmciLCJ0b0xvY2FsZVRpbWVTdHJpbmciLCJyb3VuZCIsInNlY3JldF9ib3VudHkiLCJzZWNyZXRfcGF5bWVudCIsIm9yZGVyX2luZm8iLCJlbWFpbCIsImN1cnJlbmN5IiwidG90YWxfYW1vdW50IiwidG9GaXhlZCIsInByb3ZpZGVyX3BheW1lbnRfY2hhcmdlX2lkIiwic3RhdHVzIiwidmFsdWUiLCJleHBvcnRzIiwiX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIiwicHVzaCIsIm1vZHVsZSIsImFwaSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwibG9jYWxzIl0sInNvdXJjZVJvb3QiOiIifQ==