claude-mem 12.4.9 → 12.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/npx-cli/index.js +246 -191
  2. package/dist/opencode-plugin/index.js +2 -2
  3. package/openclaw/Dockerfile.e2e +0 -23
  4. package/openclaw/e2e-verify.sh +0 -43
  5. package/openclaw/install.sh +2 -250
  6. package/openclaw/openclaw.plugin.json +1 -1
  7. package/openclaw/src/index.test.ts +0 -54
  8. package/openclaw/src/index.ts +2 -132
  9. package/openclaw/test-e2e.sh +0 -6
  10. package/openclaw/test-install.sh +0 -253
  11. package/openclaw/test-sse-consumer.js +0 -8
  12. package/package.json +13 -3
  13. package/plugin/.claude-plugin/plugin.json +1 -1
  14. package/plugin/hooks/hooks.json +1 -7
  15. package/plugin/package.json +4 -1
  16. package/plugin/scripts/bun-runner.js +1 -68
  17. package/plugin/scripts/context-generator.cjs +52 -54
  18. package/plugin/scripts/mcp-server.cjs +25 -25
  19. package/plugin/scripts/statusline-counts.js +0 -21
  20. package/plugin/scripts/version-check.js +36 -0
  21. package/plugin/scripts/worker-service.cjs +532 -499
  22. package/plugin/skills/how-it-works/SKILL.md +22 -0
  23. package/plugin/skills/how-it-works/onboarding-explainer.md +17 -0
  24. package/plugin/skills/learn-codebase/SKILL.md +21 -0
  25. package/plugin/skills/version-bump/scripts/generate_changelog.js +0 -3
  26. package/plugin/ui/claude-mem-logo-stylized.png +0 -0
  27. package/plugin/ui/viewer-bundle.js +35 -23
  28. package/plugin/ui/viewer.html +202 -69
  29. package/dist/binaries/worker-service-v10.3.1-win-x64.exe +0 -0
  30. package/dist/index.d.ts +0 -7
  31. package/dist/index.js +0 -8
  32. package/dist/sdk/index.d.ts +0 -109
  33. package/dist/sdk/index.js +0 -183
  34. package/plugin/scripts/smart-install.js +0 -590
@@ -1,65 +1,108 @@
1
1
  #!/usr/bin/env node
2
- var ks=Object.create;var Zt=Object.defineProperty;var As=Object.getOwnPropertyDescriptor;var bs=Object.getOwnPropertyNames;var Ms=Object.getPrototypeOf,Is=Object.prototype.hasOwnProperty;var Rs=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var m=(t,e)=>()=>(t&&(e=t(t=0)),e);var sn=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),q=(t,e)=>{for(var r in e)Zt(t,r,{get:e[r],enumerable:!0})},$s=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of bs(e))!Is.call(t,s)&&s!==r&&Zt(t,s,{get:()=>e[s],enumerable:!(o=As(e,s))||o.enumerable});return t};var le=(t,e,r)=>(r=t!=null?ks(Ms(t)):{},$s(e||!t||!t.__esModule?Zt(r,"default",{value:t,enumerable:!0}):r,t));var Ce=sn((Ac,Qt)=>{var pt=process||{},un=pt.argv||[],dt=pt.env||{},Ps=!(dt.NO_COLOR||un.includes("--no-color"))&&(!!dt.FORCE_COLOR||un.includes("--color")||pt.platform==="win32"||(pt.stdout||{}).isTTY&&dt.TERM!=="dumb"||!!dt.CI),Ts=(t,e,r=t)=>o=>{let s=""+o,i=s.indexOf(e,t.length);return~i?t+Os(s,e,r,i)+e:t+s+e},Os=(t,e,r,o)=>{let s="",i=0;do s+=t.substring(i,o)+r,i=o+e.length,o=t.indexOf(e,i);while(~o);return s+t.substring(i)},an=(t=Ps)=>{let e=t?Ts:()=>String;return{isColorSupported:t,reset:e("\x1B[0m","\x1B[0m"),bold:e("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:e("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:e("\x1B[3m","\x1B[23m"),underline:e("\x1B[4m","\x1B[24m"),inverse:e("\x1B[7m","\x1B[27m"),hidden:e("\x1B[8m","\x1B[28m"),strikethrough:e("\x1B[9m","\x1B[29m"),black:e("\x1B[30m","\x1B[39m"),red:e("\x1B[31m","\x1B[39m"),green:e("\x1B[32m","\x1B[39m"),yellow:e("\x1B[33m","\x1B[39m"),blue:e("\x1B[34m","\x1B[39m"),magenta:e("\x1B[35m","\x1B[39m"),cyan:e("\x1B[36m","\x1B[39m"),white:e("\x1B[37m","\x1B[39m"),gray:e("\x1B[90m","\x1B[39m"),bgBlack:e("\x1B[40m","\x1B[49m"),bgRed:e("\x1B[41m","\x1B[49m"),bgGreen:e("\x1B[42m","\x1B[49m"),bgYellow:e("\x1B[43m","\x1B[49m"),bgBlue:e("\x1B[44m","\x1B[49m"),bgMagenta:e("\x1B[45m","\x1B[49m"),bgCyan:e("\x1B[46m","\x1B[49m"),bgWhite:e("\x1B[47m","\x1B[49m"),blackBright:e("\x1B[90m","\x1B[39m"),redBright:e("\x1B[91m","\x1B[39m"),greenBright:e("\x1B[92m","\x1B[39m"),yellowBright:e("\x1B[93m","\x1B[39m"),blueBright:e("\x1B[94m","\x1B[39m"),magentaBright:e("\x1B[95m","\x1B[39m"),cyanBright:e("\x1B[96m","\x1B[39m"),whiteBright:e("\x1B[97m","\x1B[39m"),bgBlackBright:e("\x1B[100m","\x1B[49m"),bgRedBright:e("\x1B[101m","\x1B[49m"),bgGreenBright:e("\x1B[102m","\x1B[49m"),bgYellowBright:e("\x1B[103m","\x1B[49m"),bgBlueBright:e("\x1B[104m","\x1B[49m"),bgMagentaBright:e("\x1B[105m","\x1B[49m"),bgCyanBright:e("\x1B[106m","\x1B[49m"),bgWhiteBright:e("\x1B[107m","\x1B[49m")}};Qt.exports=an();Qt.exports.createColors=an});import{existsSync as Ls,readFileSync as Bs}from"fs";function J(t,e){if(!Ls(t))return e;try{return JSON.parse(Bs(t,"utf-8"))}catch(r){throw new Error(`Corrupt JSON file, refusing to overwrite: ${t}: ${r instanceof Error?r.message:String(r)}`)}}var Oe=m(()=>{"use strict"});import{existsSync as Le,mkdirSync as Ns,readFileSync as cn,writeFileSync as js}from"fs";import{homedir as Us}from"os";import{dirname as ln,join as j}from"path";import{fileURLToPath as Ws}from"url";function er(){return process.env.CLAUDE_CONFIG_DIR||j(Us(),".claude")}function R(){return j(er(),"plugins","marketplaces","thedotmack")}function De(){return j(er(),"plugins")}function he(){return j(De(),"known_marketplaces.json")}function Fe(){return j(De(),"installed_plugins.json")}function Se(){return j(er(),"settings.json")}function tr(t){return j(De(),"cache","thedotmack","claude-mem",t)}function mt(){let t=Ws(import.meta.url),e=j(ln(t),"..","..");if(!Le(j(e,"package.json")))throw new Error(`npmPackageRootDirectory: expected package.json at ${e}. Bundle structure may have changed \u2014 update the path walk.`);return e}function rr(){return j(mt(),"plugin")}function Be(){let t=j(rr(),".claude-plugin","plugin.json");if(Le(t))try{let r=JSON.parse(cn(t,"utf-8"));if(r.version)return r.version}catch{}let e=j(mt(),"package.json");if(Le(e))try{let r=JSON.parse(cn(e,"utf-8"));if(r.version)return r.version}catch{}return"0.0.0"}function gt(){let t=R();return Le(j(t,"plugin",".claude-plugin","plugin.json"))}function Ne(t){Le(t)||Ns(t,{recursive:!0})}function se(t,e){Ne(ln(t)),js(t,JSON.stringify(e,null,2)+`
3
- `,"utf-8")}var te,de=m(()=>{"use strict";Oe();te=process.platform==="win32"});var or=sn((Lc,Dn)=>{"use strict";var nr={to(t,e){return e?`\x1B[${e+1};${t+1}H`:`\x1B[${t+1}G`},move(t,e){let r="";return t<0?r+=`\x1B[${-t}D`:t>0&&(r+=`\x1B[${t}C`),e<0?r+=`\x1B[${-e}A`:e>0&&(r+=`\x1B[${e}B`),r},up:(t=1)=>`\x1B[${t}A`,down:(t=1)=>`\x1B[${t}B`,forward:(t=1)=>`\x1B[${t}C`,backward:(t=1)=>`\x1B[${t}D`,nextLine:(t=1)=>"\x1B[E".repeat(t),prevLine:(t=1)=>"\x1B[F".repeat(t),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},Gs={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},Hs={screen:"\x1B[2J",up:(t=1)=>"\x1B[1J".repeat(t),down:(t=1)=>"\x1B[J".repeat(t),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(t){let e="";for(let r=0;r<t;r++)e+=this.line+(r<t-1?nr.up():"");return t&&(e+=nr.left),e}};Dn.exports={cursor:nr,scroll:Gs,erase:Hs,beep:"\x07"}});import{stdin as Fn,stdout as Sn}from"node:process";import*as ie from"node:readline";import dn from"node:readline";import{WriteStream as Ks}from"node:tty";function Js({onlyFirst:t=!1}={}){let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(e,t?void 0:"g")}function yn(t){if(typeof t!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(Ys,"")}function wn(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function je(t,e={}){if(typeof t!="string"||t.length===0||(e={ambiguousIsNarrow:!0,...e},t=yn(t),t.length===0))return 0;t=t.replace(qs()," ");let r=e.ambiguousIsNarrow?1:2,o=0;for(let s of t){let i=s.codePointAt(0);if(!(i<=31||i>=127&&i<=159||i>=768&&i<=879))switch(Xs.eastAsianWidth(s)){case"F":case"W":o+=2;break;case"A":o+=r;break;default:o+=1}}return o}function ei(){let t=new Map;for(let[e,r]of Object.entries(F)){for(let[o,s]of Object.entries(r))F[o]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},r[o]=F[o],t.set(s[0],s[1]);Object.defineProperty(F,e,{value:r,enumerable:!1})}return Object.defineProperty(F,"codes",{value:t,enumerable:!1}),F.color.close="\x1B[39m",F.bgColor.close="\x1B[49m",F.color.ansi=pn(),F.color.ansi256=mn(),F.color.ansi16m=gn(),F.bgColor.ansi=pn(sr),F.bgColor.ansi256=mn(sr),F.bgColor.ansi16m=gn(sr),Object.defineProperties(F,{rgbToAnsi256:{value:(e,r,o)=>e===r&&r===o?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(r/255*5)+Math.round(o/255*5),enumerable:!1},hexToRgb:{value:e=>{let r=/[a-f\d]{6}|[a-f\d]{3}/i.exec(e.toString(16));if(!r)return[0,0,0];let[o]=r;o.length===3&&(o=[...o].map(i=>i+i).join(""));let s=Number.parseInt(o,16);return[s>>16&255,s>>8&255,s&255]},enumerable:!1},hexToAnsi256:{value:e=>F.rgbToAnsi256(...F.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value:e=>{if(e<8)return 30+e;if(e<16)return 90+(e-8);let r,o,s;if(e>=232)r=((e-232)*10+8)/255,o=r,s=r;else{e-=16;let u=e%36;r=Math.floor(e/36)/5,o=Math.floor(u/6)/5,s=u%6/5}let i=Math.max(r,o,s)*2;if(i===0)return 30;let n=30+(Math.round(s)<<2|Math.round(o)<<1|Math.round(r));return i===2&&(n+=60),n},enumerable:!1},rgbToAnsi:{value:(e,r,o)=>F.ansi256ToAnsi(F.rgbToAnsi256(e,r,o)),enumerable:!1},hexToAnsi:{value:e=>F.ansi256ToAnsi(F.hexToAnsi256(e)),enumerable:!1}}),F}function Cn(t,e,r){return String(t).normalize().replace(/\r\n/g,`
4
- `).split(`
5
- `).map(o=>ii(o,e,r)).join(`
6
- `)}function lr(t,e){if(typeof t=="string")return Et.aliases.get(t)===e;for(let r of t)if(r!==void 0&&lr(r,e))return!0;return!1}function ai(t,e){if(t===e)return;let r=t.split(`
7
- `),o=e.split(`
8
- `),s=[];for(let i=0;i<Math.max(r.length,o.length);i++)r[i]!==o[i]&&s.push(i);return s}function ue(t){return t===ur}function ft(t,e){let r=t;r.isTTY&&r.setRawMode(e)}function kn({input:t=Fn,output:e=Sn,overwrite:r=!0,hideCursor:o=!0}={}){let s=ie.createInterface({input:t,output:e,prompt:"",tabSize:1});ie.emitKeypressEvents(t,s),t.isTTY&&t.setRawMode(!0);let i=(n,{name:u,sequence:c})=>{let D=String(n);if(lr([D,u,c],"cancel")){o&&e.write(b.cursor.show),process.exit(0);return}if(!r)return;ie.moveCursor(e,u==="return"?0:-1,u==="return"?-1:0,()=>{ie.clearLine(e,1,()=>{t.once("keypress",i)})})};return o&&e.write(b.cursor.hide),t.once("keypress",i),()=>{t.off("keypress",i),o&&e.write(b.cursor.show),t.isTTY&&!ci&&t.setRawMode(!1),s.terminal=!1,s.close()}}var b,Ys,vn,Vs,Xs,zs,qs,sr,pn,mn,gn,F,Zs,Qs,ti,Ft,ri,ar,_n,ni,xn,cr,fn,En,oi,ir,si,ii,ui,Et,ci,ur,li,Di,U,Ct,ht,di,pi,hn,An,Dr=m(()=>{b=le(or(),1);Ys=Js();vn={exports:{}};(function(t){var e={};t.exports=e,e.eastAsianWidth=function(o){var s=o.charCodeAt(0),i=o.length==2?o.charCodeAt(1):0,n=s;return 55296<=s&&s<=56319&&56320<=i&&i<=57343&&(s&=1023,i&=1023,n=s<<10|i,n+=65536),n==12288||65281<=n&&n<=65376||65504<=n&&n<=65510?"F":n==8361||65377<=n&&n<=65470||65474<=n&&n<=65479||65482<=n&&n<=65487||65490<=n&&n<=65495||65498<=n&&n<=65500||65512<=n&&n<=65518?"H":4352<=n&&n<=4447||4515<=n&&n<=4519||4602<=n&&n<=4607||9001<=n&&n<=9002||11904<=n&&n<=11929||11931<=n&&n<=12019||12032<=n&&n<=12245||12272<=n&&n<=12283||12289<=n&&n<=12350||12353<=n&&n<=12438||12441<=n&&n<=12543||12549<=n&&n<=12589||12593<=n&&n<=12686||12688<=n&&n<=12730||12736<=n&&n<=12771||12784<=n&&n<=12830||12832<=n&&n<=12871||12880<=n&&n<=13054||13056<=n&&n<=19903||19968<=n&&n<=42124||42128<=n&&n<=42182||43360<=n&&n<=43388||44032<=n&&n<=55203||55216<=n&&n<=55238||55243<=n&&n<=55291||63744<=n&&n<=64255||65040<=n&&n<=65049||65072<=n&&n<=65106||65108<=n&&n<=65126||65128<=n&&n<=65131||110592<=n&&n<=110593||127488<=n&&n<=127490||127504<=n&&n<=127546||127552<=n&&n<=127560||127568<=n&&n<=127569||131072<=n&&n<=194367||177984<=n&&n<=196605||196608<=n&&n<=262141?"W":32<=n&&n<=126||162<=n&&n<=163||165<=n&&n<=166||n==172||n==175||10214<=n&&n<=10221||10629<=n&&n<=10630?"Na":n==161||n==164||167<=n&&n<=168||n==170||173<=n&&n<=174||176<=n&&n<=180||182<=n&&n<=186||188<=n&&n<=191||n==198||n==208||215<=n&&n<=216||222<=n&&n<=225||n==230||232<=n&&n<=234||236<=n&&n<=237||n==240||242<=n&&n<=243||247<=n&&n<=250||n==252||n==254||n==257||n==273||n==275||n==283||294<=n&&n<=295||n==299||305<=n&&n<=307||n==312||319<=n&&n<=322||n==324||328<=n&&n<=331||n==333||338<=n&&n<=339||358<=n&&n<=359||n==363||n==462||n==464||n==466||n==468||n==470||n==472||n==474||n==476||n==593||n==609||n==708||n==711||713<=n&&n<=715||n==717||n==720||728<=n&&n<=731||n==733||n==735||768<=n&&n<=879||913<=n&&n<=929||931<=n&&n<=937||945<=n&&n<=961||963<=n&&n<=969||n==1025||1040<=n&&n<=1103||n==1105||n==8208||8211<=n&&n<=8214||8216<=n&&n<=8217||8220<=n&&n<=8221||8224<=n&&n<=8226||8228<=n&&n<=8231||n==8240||8242<=n&&n<=8243||n==8245||n==8251||n==8254||n==8308||n==8319||8321<=n&&n<=8324||n==8364||n==8451||n==8453||n==8457||n==8467||n==8470||8481<=n&&n<=8482||n==8486||n==8491||8531<=n&&n<=8532||8539<=n&&n<=8542||8544<=n&&n<=8555||8560<=n&&n<=8569||n==8585||8592<=n&&n<=8601||8632<=n&&n<=8633||n==8658||n==8660||n==8679||n==8704||8706<=n&&n<=8707||8711<=n&&n<=8712||n==8715||n==8719||n==8721||n==8725||n==8730||8733<=n&&n<=8736||n==8739||n==8741||8743<=n&&n<=8748||n==8750||8756<=n&&n<=8759||8764<=n&&n<=8765||n==8776||n==8780||n==8786||8800<=n&&n<=8801||8804<=n&&n<=8807||8810<=n&&n<=8811||8814<=n&&n<=8815||8834<=n&&n<=8835||8838<=n&&n<=8839||n==8853||n==8857||n==8869||n==8895||n==8978||9312<=n&&n<=9449||9451<=n&&n<=9547||9552<=n&&n<=9587||9600<=n&&n<=9615||9618<=n&&n<=9621||9632<=n&&n<=9633||9635<=n&&n<=9641||9650<=n&&n<=9651||9654<=n&&n<=9655||9660<=n&&n<=9661||9664<=n&&n<=9665||9670<=n&&n<=9672||n==9675||9678<=n&&n<=9681||9698<=n&&n<=9701||n==9711||9733<=n&&n<=9734||n==9737||9742<=n&&n<=9743||9748<=n&&n<=9749||n==9756||n==9758||n==9792||n==9794||9824<=n&&n<=9825||9827<=n&&n<=9829||9831<=n&&n<=9834||9836<=n&&n<=9837||n==9839||9886<=n&&n<=9887||9918<=n&&n<=9919||9924<=n&&n<=9933||9935<=n&&n<=9953||n==9955||9960<=n&&n<=9983||n==10045||n==10071||10102<=n&&n<=10111||11093<=n&&n<=11097||12872<=n&&n<=12879||57344<=n&&n<=63743||65024<=n&&n<=65039||n==65533||127232<=n&&n<=127242||127248<=n&&n<=127277||127280<=n&&n<=127337||127344<=n&&n<=127386||917760<=n&&n<=917999||983040<=n&&n<=1048573||1048576<=n&&n<=1114109?"A":"N"},e.characterLength=function(o){var s=this.eastAsianWidth(o);return s=="F"||s=="W"||s=="A"?2:1};function r(o){return o.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}e.length=function(o){for(var s=r(o),i=0,n=0;n<s.length;n++)i=i+this.characterLength(s[n]);return i},e.slice=function(o,s,i){textLen=e.length(o),s=s||0,i=i||1,s<0&&(s=textLen+s),i<0&&(i=textLen+i);for(var n="",u=0,c=r(o),D=0;D<c.length;D++){var d=c[D],p=e.length(d);if(u>=s-(p==2?1:0))if(u+p<=i)n+=d;else break;u+=p}return n}})(vn);Vs=vn.exports,Xs=wn(Vs),zs=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g},qs=wn(zs);sr=10,pn=(t=0)=>e=>`\x1B[${e+t}m`,mn=(t=0)=>e=>`\x1B[${38+t};5;${e}m`,gn=(t=0)=>(e,r,o)=>`\x1B[${38+t};2;${e};${r};${o}m`,F={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(F.modifier);Zs=Object.keys(F.color),Qs=Object.keys(F.bgColor);[...Zs,...Qs];ti=ei(),Ft=new Set(["\x1B","\x9B"]),ri=39,ar="\x07",_n="[",ni="]",xn="m",cr=`${ni}8;;`,fn=t=>`${Ft.values().next().value}${_n}${t}${xn}`,En=t=>`${Ft.values().next().value}${cr}${t}${ar}`,oi=t=>t.split(" ").map(e=>je(e)),ir=(t,e,r)=>{let o=[...e],s=!1,i=!1,n=je(yn(t[t.length-1]));for(let[u,c]of o.entries()){let D=je(c);if(n+D<=r?t[t.length-1]+=c:(t.push(c),n=0),Ft.has(c)&&(s=!0,i=o.slice(u+1).join("").startsWith(cr)),s){i?c===ar&&(s=!1,i=!1):c===xn&&(s=!1);continue}n+=D,n===r&&u<o.length-1&&(t.push(""),n=0)}!n&&t[t.length-1].length>0&&t.length>1&&(t[t.length-2]+=t.pop())},si=t=>{let e=t.split(" "),r=e.length;for(;r>0&&!(je(e[r-1])>0);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},ii=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let o="",s,i,n=oi(t),u=[""];for(let[D,d]of t.split(" ").entries()){r.trim!==!1&&(u[u.length-1]=u[u.length-1].trimStart());let p=je(u[u.length-1]);if(D!==0&&(p>=e&&(r.wordWrap===!1||r.trim===!1)&&(u.push(""),p=0),(p>0||r.trim===!1)&&(u[u.length-1]+=" ",p++)),r.hard&&n[D]>e){let I=e-p,_=1+Math.floor((n[D]-I-1)/e);Math.floor((n[D]-1)/e)<_&&u.push(""),ir(u,d,e);continue}if(p+n[D]>e&&p>0&&n[D]>0){if(r.wordWrap===!1&&p<e){ir(u,d,e);continue}u.push("")}if(p+n[D]>e&&r.wordWrap===!1){ir(u,d,e);continue}u[u.length-1]+=d}r.trim!==!1&&(u=u.map(D=>si(D)));let c=[...u.join(`
9
- `)];for(let[D,d]of c.entries()){if(o+=d,Ft.has(d)){let{groups:I}=new RegExp(`(?:\\${_n}(?<code>\\d+)m|\\${cr}(?<uri>.*)${ar})`).exec(c.slice(D).join(""))||{groups:{}};if(I.code!==void 0){let _=Number.parseFloat(I.code);s=_===ri?void 0:_}else I.uri!==void 0&&(i=I.uri.length===0?void 0:I.uri)}let p=ti.codes.get(Number(s));c[D+1]===`
10
- `?(i&&(o+=En("")),s&&p&&(o+=fn(p))):d===`
11
- `&&(s&&p&&(o+=fn(s)),i&&(o+=En(i)))}return o};ui=["up","down","left","right","space","enter","cancel"],Et={actions:new Set(ui),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]])};ci=globalThis.process.platform.startsWith("win"),ur=Symbol("clack:cancel");li=Object.defineProperty,Di=(t,e,r)=>e in t?li(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,U=(t,e,r)=>(Di(t,typeof e!="symbol"?e+"":e,r),r),Ct=class{constructor(e,r=!0){U(this,"input"),U(this,"output"),U(this,"_abortSignal"),U(this,"rl"),U(this,"opts"),U(this,"_render"),U(this,"_track",!1),U(this,"_prevFrame",""),U(this,"_subscribers",new Map),U(this,"_cursor",0),U(this,"state","initial"),U(this,"error",""),U(this,"value");let{input:o=Fn,output:s=Sn,render:i,signal:n,...u}=e;this.opts=u,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=i.bind(this),this._track=r,this._abortSignal=n,this.input=o,this.output=s}unsubscribe(){this._subscribers.clear()}setSubscriber(e,r){let o=this._subscribers.get(e)??[];o.push(r),this._subscribers.set(e,o)}on(e,r){this.setSubscriber(e,{cb:r})}once(e,r){this.setSubscriber(e,{cb:r,once:!0})}emit(e,...r){let o=this._subscribers.get(e)??[],s=[];for(let i of o)i.cb(...r),i.once&&s.push(()=>o.splice(o.indexOf(i),1));for(let i of s)i()}prompt(){return new Promise((e,r)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),e(ur);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}let o=new Ks(0);o._write=(s,i,n)=>{this._track&&(this.value=this.rl?.line.replace(/\t/g,""),this._cursor=this.rl?.cursor??0,this.emit("value",this.value)),n()},this.input.pipe(o),this.rl=dn.createInterface({input:this.input,output:o,tabSize:2,prompt:"",escapeCodeTimeout:50}),dn.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==void 0&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),ft(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(b.cursor.show),this.output.off("resize",this.render),ft(this.input,!1),e(this.value)}),this.once("cancel",()=>{this.output.write(b.cursor.show),this.output.off("resize",this.render),ft(this.input,!1),e(ur)})})}onKeypress(e,r){if(this.state==="error"&&(this.state="active"),r?.name&&(!this._track&&Et.aliases.has(r.name)&&this.emit("cursor",Et.aliases.get(r.name)),Et.actions.has(r.name)&&this.emit("cursor",r.name)),e&&(e.toLowerCase()==="y"||e.toLowerCase()==="n")&&this.emit("confirm",e.toLowerCase()==="y"),e===" "&&this.opts.placeholder&&(this.value||(this.rl?.write(this.opts.placeholder),this.emit("value",this.opts.placeholder))),e&&this.emit("key",e.toLowerCase()),r?.name==="return"){if(this.opts.validate){let o=this.opts.validate(this.value);o&&(this.error=o instanceof Error?o.message:o,this.state="error",this.rl?.write(this.value))}this.state!=="error"&&(this.state="submit")}lr([e,r?.name,r?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
12
- `),ft(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=Cn(this._prevFrame,process.stdout.columns,{hard:!0}).split(`
13
- `).length-1;this.output.write(b.cursor.move(-999,e*-1))}render(){let e=Cn(this._render(this)??"",process.stdout.columns,{hard:!0});if(e!==this._prevFrame){if(this.state==="initial")this.output.write(b.cursor.hide);else{let r=ai(this._prevFrame,e);if(this.restoreCursor(),r&&r?.length===1){let o=r[0];this.output.write(b.cursor.move(0,o)),this.output.write(b.erase.lines(1));let s=e.split(`
14
- `);this.output.write(s[o]),this._prevFrame=e,this.output.write(b.cursor.move(0,s.length-o-1));return}if(r&&r?.length>1){let o=r[0];this.output.write(b.cursor.move(0,o)),this.output.write(b.erase.down());let s=e.split(`
15
- `).slice(o);this.output.write(s.join(`
16
- `)),this._prevFrame=e;return}this.output.write(b.erase.down())}this.output.write(e),this.state==="initial"&&(this.state="active"),this._prevFrame=e}}},ht=class extends Ct{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(e){super(e,!1),this.value=!!e.initialValue,this.on("value",()=>{this.value=this._value}),this.on("confirm",r=>{this.output.write(b.cursor.move(0,-1)),this.value=r,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}},di=Object.defineProperty,pi=(t,e,r)=>e in t?di(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,hn=(t,e,r)=>(pi(t,typeof e!="symbol"?e+"":e,r),r),An=class extends Ct{constructor(t){super(t,!1),hn(this,"options"),hn(this,"cursor",0),this.options=t.options,this.value=[...t.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:e})=>e===t.cursorAt),0),this.on("key",e=>{e==="a"&&this.toggleAll()}),this.on("cursor",e=>{switch(e){case"left":case"up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case"down":case"right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break;case"space":this.toggleValue();break}})}get _value(){return this.options[this.cursor].value}toggleAll(){let t=this.value.length===this.options.length;this.value=t?[]:this.options.map(e=>e.value)}toggleValue(){let t=this.value.includes(this._value);this.value=t?this.value.filter(e=>e!==this._value):[...this.value,this._value]}}});import{stripVTControlCharacters as dr}from"node:util";import Y from"node:process";function mi(){return Y.platform!=="win32"?Y.env.TERM!=="linux":!!Y.env.CI||!!Y.env.WT_SESSION||!!Y.env.TERMINUS_SUBLIME||Y.env.ConEmuTask==="{cmd::Cmder}"||Y.env.TERM_PROGRAM==="Terminus-Sublime"||Y.env.TERM_PROGRAM==="vscode"||Y.env.TERM==="xterm-256color"||Y.env.TERM==="alacritty"||Y.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var l,St,pr,w,gi,Pn,Tn,yt,fi,y,Ue,bn,Mn,Ei,In,Ci,Zc,Rn,hi,Fi,Si,yi,wi,vi,_i,On,$n,We,Ln,Ge,He,wt,pe,$,xi,vt,mr=m(()=>{Dr();Dr();l=le(Ce(),1),St=le(or(),1);pr=mi(),w=(t,e)=>pr?t:e,gi=w("\u25C6","*"),Pn=w("\u25A0","x"),Tn=w("\u25B2","x"),yt=w("\u25C7","o"),fi=w("\u250C","T"),y=w("\u2502","|"),Ue=w("\u2514","\u2014"),bn=w("\u25CF",">"),Mn=w("\u25CB"," "),Ei=w("\u25FB","[\u2022]"),In=w("\u25FC","[+]"),Ci=w("\u25FB","[ ]"),Zc=w("\u25AA","\u2022"),Rn=w("\u2500","-"),hi=w("\u256E","+"),Fi=w("\u251C","+"),Si=w("\u256F","+"),yi=w("\u25CF","\u2022"),wi=w("\u25C6","*"),vi=w("\u25B2","!"),_i=w("\u25A0","x"),On=t=>{switch(t){case"initial":case"active":return l.default.cyan(gi);case"cancel":return l.default.red(Pn);case"error":return l.default.yellow(Tn);case"submit":return l.default.green(yt)}},$n=t=>{let{cursor:e,options:r,style:o}=t,s=t.maxItems??Number.POSITIVE_INFINITY,i=Math.max(process.stdout.rows-4,0),n=Math.min(i,Math.max(s,5)),u=0;e>=u+n-3?u=Math.max(Math.min(e-n+3,r.length-n),0):e<u+2&&(u=Math.max(e-2,0));let c=n<r.length&&u>0,D=n<r.length&&u+n<r.length;return r.slice(u,u+n).map((d,p,I)=>{let _=p===0&&c,g=p===I.length-1&&D;return _||g?l.default.dim("..."):o(d,p+u===e)})},We=t=>{let e=t.active??"Yes",r=t.inactive??"No";return new ht({active:e,inactive:r,initialValue:t.initialValue??!0,render(){let o=`${l.default.gray(y)}
17
- ${On(this.state)} ${t.message}
18
- `,s=this.value?e:r;switch(this.state){case"submit":return`${o}${l.default.gray(y)} ${l.default.dim(s)}`;case"cancel":return`${o}${l.default.gray(y)} ${l.default.strikethrough(l.default.dim(s))}
19
- ${l.default.gray(y)}`;default:return`${o}${l.default.cyan(y)} ${this.value?`${l.default.green(bn)} ${e}`:`${l.default.dim(Mn)} ${l.default.dim(e)}`} ${l.default.dim("/")} ${this.value?`${l.default.dim(Mn)} ${l.default.dim(r)}`:`${l.default.green(bn)} ${r}`}
20
- ${l.default.cyan(Ue)}
21
- `}}}).prompt()},Ln=t=>{let e=(r,o)=>{let s=r.label??String(r.value);return o==="active"?`${l.default.cyan(Ei)} ${s} ${r.hint?l.default.dim(`(${r.hint})`):""}`:o==="selected"?`${l.default.green(In)} ${l.default.dim(s)}`:o==="cancelled"?`${l.default.strikethrough(l.default.dim(s))}`:o==="active-selected"?`${l.default.green(In)} ${s} ${r.hint?l.default.dim(`(${r.hint})`):""}`:o==="submitted"?`${l.default.dim(s)}`:`${l.default.dim(Ci)} ${l.default.dim(s)}`};return new An({options:t.options,initialValues:t.initialValues,required:t.required??!0,cursorAt:t.cursorAt,validate(r){if(this.required&&r.length===0)return`Please select at least one option.
22
- ${l.default.reset(l.default.dim(`Press ${l.default.gray(l.default.bgWhite(l.default.inverse(" space ")))} to select, ${l.default.gray(l.default.bgWhite(l.default.inverse(" enter ")))} to submit`))}`},render(){let r=`${l.default.gray(y)}
23
- ${On(this.state)} ${t.message}
24
- `,o=(s,i)=>{let n=this.value.includes(s.value);return i&&n?e(s,"active-selected"):n?e(s,"selected"):e(s,i?"active":"inactive")};switch(this.state){case"submit":return`${r}${l.default.gray(y)} ${this.options.filter(({value:s})=>this.value.includes(s)).map(s=>e(s,"submitted")).join(l.default.dim(", "))||l.default.dim("none")}`;case"cancel":{let s=this.options.filter(({value:i})=>this.value.includes(i)).map(i=>e(i,"cancelled")).join(l.default.dim(", "));return`${r}${l.default.gray(y)} ${s.trim()?`${s}
25
- ${l.default.gray(y)}`:""}`}case"error":{let s=this.error.split(`
26
- `).map((i,n)=>n===0?`${l.default.yellow(Ue)} ${l.default.yellow(i)}`:` ${i}`).join(`
27
- `);return`${r+l.default.yellow(y)} ${$n({options:this.options,cursor:this.cursor,maxItems:t.maxItems,style:o}).join(`
28
- ${l.default.yellow(y)} `)}
29
- ${s}
30
- `}default:return`${r}${l.default.cyan(y)} ${$n({options:this.options,cursor:this.cursor,maxItems:t.maxItems,style:o}).join(`
31
- ${l.default.cyan(y)} `)}
32
- ${l.default.cyan(Ue)}
33
- `}}}).prompt()},Ge=(t="",e="")=>{let r=`
34
- ${t}
35
- `.split(`
36
- `),o=dr(e).length,s=Math.max(r.reduce((n,u)=>{let c=dr(u);return c.length>n?c.length:n},0),o)+2,i=r.map(n=>`${l.default.gray(y)} ${l.default.dim(n)}${" ".repeat(s-dr(n).length)}${l.default.gray(y)}`).join(`
37
- `);process.stdout.write(`${l.default.gray(y)}
38
- ${l.default.green(yt)} ${l.default.reset(e)} ${l.default.gray(Rn.repeat(Math.max(s-o-1,1))+hi)}
39
- ${i}
40
- ${l.default.gray(Fi+Rn.repeat(s+2)+Si)}
41
- `)},He=(t="")=>{process.stdout.write(`${l.default.gray(Ue)} ${l.default.red(t)}
42
-
43
- `)},wt=(t="")=>{process.stdout.write(`${l.default.gray(fi)} ${t}
44
- `)},pe=(t="")=>{process.stdout.write(`${l.default.gray(y)}
45
- ${l.default.gray(Ue)} ${t}
46
-
47
- `)},$={message:(t="",{symbol:e=l.default.gray(y)}={})=>{let r=[`${l.default.gray(y)}`];if(t){let[o,...s]=t.split(`
48
- `);r.push(`${e} ${o}`,...s.map(i=>`${l.default.gray(y)} ${i}`))}process.stdout.write(`${r.join(`
2
+ var va=Object.create;var Zn=Object.defineProperty;var Ca=Object.getOwnPropertyDescriptor;var ba=Object.getOwnPropertyNames;var ka=Object.getPrototypeOf,Ma=Object.prototype.hasOwnProperty;var xa=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var w=(e,t)=>()=>(e&&(t=e(e=0)),t);var vo=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),fe=(e,t)=>{for(var n in t)Zn(e,n,{get:t[n],enumerable:!0})},Ta=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ba(t))!Ma.call(e,o)&&o!==n&&Zn(e,o,{get:()=>t[o],enumerable:!(r=Ca(t,o))||r.enumerable});return e};var Ke=(e,t,n)=>(n=e!=null?va(ka(e)):{},Ta(t||!e||!e.__esModule?Zn(n,"default",{value:e,enumerable:!0}):n,e));var ht=vo((gp,qn)=>{var en=process||{},Co=en.argv||[],$t=en.env||{},Ra=!($t.NO_COLOR||Co.includes("--no-color"))&&(!!$t.FORCE_COLOR||Co.includes("--color")||en.platform==="win32"||(en.stdout||{}).isTTY&&$t.TERM!=="dumb"||!!$t.CI),Ia=(e,t,n=e)=>r=>{let o=""+r,s=o.indexOf(t,e.length);return~s?e+Oa(o,t,n,s)+t:e+o+t},Oa=(e,t,n,r)=>{let o="",s=0;do o+=e.substring(s,r)+n,s=r+t.length,r=e.indexOf(t,s);while(~r);return o+e.substring(s)},bo=(e=Ra)=>{let t=e?Ia:()=>String;return{isColorSupported:e,reset:t("\x1B[0m","\x1B[0m"),bold:t("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:t("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:t("\x1B[3m","\x1B[23m"),underline:t("\x1B[4m","\x1B[24m"),inverse:t("\x1B[7m","\x1B[27m"),hidden:t("\x1B[8m","\x1B[28m"),strikethrough:t("\x1B[9m","\x1B[29m"),black:t("\x1B[30m","\x1B[39m"),red:t("\x1B[31m","\x1B[39m"),green:t("\x1B[32m","\x1B[39m"),yellow:t("\x1B[33m","\x1B[39m"),blue:t("\x1B[34m","\x1B[39m"),magenta:t("\x1B[35m","\x1B[39m"),cyan:t("\x1B[36m","\x1B[39m"),white:t("\x1B[37m","\x1B[39m"),gray:t("\x1B[90m","\x1B[39m"),bgBlack:t("\x1B[40m","\x1B[49m"),bgRed:t("\x1B[41m","\x1B[49m"),bgGreen:t("\x1B[42m","\x1B[49m"),bgYellow:t("\x1B[43m","\x1B[49m"),bgBlue:t("\x1B[44m","\x1B[49m"),bgMagenta:t("\x1B[45m","\x1B[49m"),bgCyan:t("\x1B[46m","\x1B[49m"),bgWhite:t("\x1B[47m","\x1B[49m"),blackBright:t("\x1B[90m","\x1B[39m"),redBright:t("\x1B[91m","\x1B[39m"),greenBright:t("\x1B[92m","\x1B[39m"),yellowBright:t("\x1B[93m","\x1B[39m"),blueBright:t("\x1B[94m","\x1B[39m"),magentaBright:t("\x1B[95m","\x1B[39m"),cyanBright:t("\x1B[96m","\x1B[39m"),whiteBright:t("\x1B[97m","\x1B[39m"),bgBlackBright:t("\x1B[100m","\x1B[49m"),bgRedBright:t("\x1B[101m","\x1B[49m"),bgGreenBright:t("\x1B[102m","\x1B[49m"),bgYellowBright:t("\x1B[103m","\x1B[49m"),bgBlueBright:t("\x1B[104m","\x1B[49m"),bgMagentaBright:t("\x1B[105m","\x1B[49m"),bgCyanBright:t("\x1B[106m","\x1B[49m"),bgWhiteBright:t("\x1B[107m","\x1B[49m")}};qn.exports=bo();qn.exports.createColors=bo});import{existsSync as Pa,readFileSync as Da}from"fs";function le(e,t){if(!Pa(e))return t;try{return JSON.parse(Da(e,"utf-8"))}catch(n){throw new Error(`Corrupt JSON file, refusing to overwrite: ${e}: ${n instanceof Error?n.message:String(n)}`)}}var St=w(()=>{"use strict"});import{existsSync as Et,mkdirSync as Na,readFileSync as ko,writeFileSync as Aa}from"fs";import{homedir as La}from"os";import{dirname as Mo,join as te}from"path";import{fileURLToPath as Ua}from"url";function Xn(){return process.env.CLAUDE_CONFIG_DIR||te(La(),".claude")}function z(){return te(Xn(),"plugins","marketplaces","thedotmack")}function We(){return te(Xn(),"plugins")}function Ye(){return te(We(),"known_marketplaces.json")}function Ve(){return te(We(),"installed_plugins.json")}function ze(){return te(Xn(),"settings.json")}function Ze(e){return te(We(),"cache","thedotmack","claude-mem",e)}function tn(){let e=Ua(import.meta.url),t=te(Mo(e),"..","..");if(!Et(te(t,"package.json")))throw new Error(`npmPackageRootDirectory: expected package.json at ${t}. Bundle structure may have changed \u2014 update the path walk.`);return t}function Qn(){return te(tn(),"plugin")}function qe(){let e=te(Qn(),".claude-plugin","plugin.json");if(Et(e))try{let n=JSON.parse(ko(e,"utf-8"));if(n.version)return n.version}catch{}let t=te(tn(),"package.json");if(Et(t))try{let n=JSON.parse(ko(t,"utf-8"));if(n.version)return n.version}catch{}return"0.0.0"}function nn(){let e=z();return Et(te(e,"plugin",".claude-plugin","plugin.json"))}function yt(e){Et(e)||Na(e,{recursive:!0})}function Me(e,t){yt(Mo(e)),Aa(e,JSON.stringify(t,null,2)+`
3
+ `,"utf-8")}var ue,je=w(()=>{"use strict";St();ue=process.platform==="win32"});var xo,To,Ro,Io=w(()=>{xo=(()=>{let e=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return t=>{let n=0;for(e.lastIndex=0;e.test(t);)n+=1;return t.length-n}})(),To=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,Ro=e=>e===8987||e===9001||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e>=131072&&e<=196605||e>=196608&&e<=262141});var Wa,ja,Oo,Fa,Po,Ga,Ja,Ha,Do,No,Ao=w(()=>{Io();Wa=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,ja=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Oo=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,Fa=/\t{1,1000}/y,Po=new RegExp("[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*","yu"),Ga=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,Ja=new RegExp("\\p{M}+","gu"),Ha={limit:1/0,ellipsis:""},Do=(e,t={},n={})=>{let r=t.limit??1/0,o=t.ellipsis??"",s=t?.ellipsisWidth??(o?Do(o,Ha,n).width:0),i=0,a=n.controlWidth??0,c=n.tabWidth??8,l=n.emojiWidth??2,p=2,f=n.regularWidth??1,g=n.wideWidth??p,v=[[Ga,f],[Wa,i],[ja,a],[Fa,c],[Po,l],[Oo,g]],h=0,C=0,I=e.length,D=0,H=!1,B=I,j=Math.max(0,r-s),R=0,y=0,S=0,E=0;e:for(;;){if(y>R||C>=I&&C>h){let O=e.slice(R,y)||e.slice(h,C);D=0;for(let A of O.replaceAll(Ja,"")){let K=A.codePointAt(0)||0;if(To(K)?E=p:Ro(K)?E=g:E=f,S+E>j&&(B=Math.min(B,Math.max(R,h)+D)),S+E>r){H=!0;break e}D+=A.length,S+=E}R=y=0}if(C>=I)break e;for(let O=0,A=v.length;O<A;O++){let[K,Qt]=v[O];if(K.lastIndex=C,K.test(e)){if(D=K===Oo?xo(e.slice(C,K.lastIndex)):K===Po?1:K.lastIndex-C,E=D*Qt,S+E>j&&(B=Math.min(B,C+Math.floor((j-S)/Qt))),S+E>r){H=!0;break e}S+=E,R=h,y=C,C=h=K.lastIndex;continue e}}C+=1}return{width:H?j:S,index:H?B:I,truncated:H,ellipsed:H&&r>=s}},No=Do});var Ba,Ka,Z,_n=w(()=>{Ao();Ba={limit:1/0,ellipsis:"",ellipsisWidth:0},Ka=(e,t={})=>No(e,Ba,t).width,Z=Ka});function ge(e,t,n){return String(e).normalize().split(qa).map(r=>Za(r,t,n)).join(`
4
+ `)}var rn,Fo,Ya,er,Go,Va,Jo,tr,Lo,Uo,Wo,jo,$n,za,Za,qa,nr=w(()=>{_n();rn="\x1B",Fo="\x9B",Ya=39,er="\x07",Go="[",Va="]",Jo="m",tr=`${Va}8;;`,Lo=new RegExp(`(?:\\${Go}(?<code>\\d+)m|\\${tr}(?<uri>.*)${er})`,"y"),Uo=e=>{if(e>=30&&e<=37||e>=90&&e<=97)return 39;if(e>=40&&e<=47||e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0},Wo=e=>`${rn}${Go}${e}${Jo}`,jo=e=>`${rn}${tr}${e}${er}`,$n=(e,t,n)=>{let r=t[Symbol.iterator](),o=!1,s=!1,i=e.at(-1),a=i===void 0?0:Z(i),c=r.next(),l=r.next(),p=0;for(;!c.done;){let f=c.value,g=Z(f);a+g<=n?e[e.length-1]+=f:(e.push(f),a=0),(f===rn||f===Fo)&&(o=!0,s=t.startsWith(tr,p+1)),o?s?f===er&&(o=!1,s=!1):f===Jo&&(o=!1):(a+=g,a===n&&!l.done&&(e.push(""),a=0)),c=l,l=r.next(),p+=f.length}i=e.at(-1),!a&&i!==void 0&&i.length&&e.length>1&&(e[e.length-2]+=e.pop())},za=e=>{let t=e.split(" "),n=t.length;for(;n&&!Z(t[n-1]);)n--;return n===t.length?e:t.slice(0,n).join(" ")+t.slice(n).join("")},Za=(e,t,n={})=>{if(n.trim!==!1&&e.trim()==="")return"";let r="",o,s,i=e.split(" "),a=[""],c=0;for(let f=0;f<i.length;f++){let g=i[f];if(n.trim!==!1){let h=a.at(-1)??"",C=h.trimStart();h.length!==C.length&&(a[a.length-1]=C,c=Z(C))}f!==0&&(c>=t&&(n.wordWrap===!1||n.trim===!1)&&(a.push(""),c=0),(c||n.trim===!1)&&(a[a.length-1]+=" ",c++));let v=Z(g);if(n.hard&&v>t){let h=t-c,C=1+Math.floor((v-h-1)/t);Math.floor((v-1)/t)<C&&a.push(""),$n(a,g,t),c=Z(a.at(-1)??"");continue}if(c+v>t&&c&&v){if(n.wordWrap===!1&&c<t){$n(a,g,t),c=Z(a.at(-1)??"");continue}a.push(""),c=0}if(c+v>t&&n.wordWrap===!1){$n(a,g,t),c=Z(a.at(-1)??"");continue}a[a.length-1]+=g,c+=v}n.trim!==!1&&(a=a.map(f=>za(f)));let l=a.join(`
5
+ `),p=!1;for(let f=0;f<l.length;f++){let g=l[f];if(r+=g,p)p=!1;else if(p=g>="\uD800"&&g<="\uDBFF",p)continue;if(g===rn||g===Fo){Lo.lastIndex=f+1;let h=Lo.exec(l)?.groups;if(h?.code!==void 0){let C=Number.parseFloat(h.code);o=C===Ya?void 0:C}else h?.uri!==void 0&&(s=h.uri.length===0?void 0:h.uri)}if(l[f+1]===`
6
+ `){s&&(r+=jo(""));let v=o?Uo(o):void 0;o&&v&&(r+=Wo(v))}else g===`
7
+ `&&(o&&Uo(o)&&(r+=Wo(o)),s&&(r+=jo(s)))}return r},qa=/\r?\n/});var or=vo((Pp,Ho)=>{"use strict";var rr={to(e,t){return t?`\x1B[${t+1};${e+1}H`:`\x1B[${e+1}G`},move(e,t){let n="";return e<0?n+=`\x1B[${-e}D`:e>0&&(n+=`\x1B[${e}C`),t<0?n+=`\x1B[${-t}A`:t>0&&(n+=`\x1B[${t}B`),n},up:(e=1)=>`\x1B[${e}A`,down:(e=1)=>`\x1B[${e}B`,forward:(e=1)=>`\x1B[${e}C`,backward:(e=1)=>`\x1B[${e}D`,nextLine:(e=1)=>"\x1B[E".repeat(e),prevLine:(e=1)=>"\x1B[F".repeat(e),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},Xa={up:(e=1)=>"\x1B[S".repeat(e),down:(e=1)=>"\x1B[T".repeat(e)},Qa={screen:"\x1B[2J",up:(e=1)=>"\x1B[1J".repeat(e),down:(e=1)=>"\x1B[J".repeat(e),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(e){let t="";for(let n=0;n<e;n++)t+=this.line+(n<e-1?rr.up():"");return e&&(t+=rr.left),t}};Ho.exports={cursor:rr,scroll:Xa,erase:Qa,beep:"\x07"}});import{styleText as Bo}from"node:util";import{stdout as ir,stdin as Yo}from"node:process";import*as xe from"node:readline";import _a from"node:readline";import{ReadStream as Ko}from"node:tty";function Fe(e,t,n){if(!n.some(i=>!i.disabled))return e;let r=e+t,o=Math.max(n.length-1,0),s=r<0?o:r>o?0:r;return n[s].disabled?Fe(s,t<0?-1:1,n):s}function ar(e,t){if(typeof e=="string")return L.aliases.get(e)===t;for(let n of e)if(n!==void 0&&ar(n,t))return!0;return!1}function tc(e,t){if(e===t)return;let n=e.split(`
8
+ `),r=t.split(`
9
+ `),o=Math.max(n.length,r.length),s=[];for(let i=0;i<o;i++)n[i]!==r[i]&&s.push(i);return{lines:s,numLinesBefore:n.length,numLinesAfter:r.length,numLines:o}}function re(e){return e===sr}function on(e,t){let n=e;n.isTTY&&n.setRawMode(t)}function Vo({input:e=Yo,output:t=ir,overwrite:n=!0,hideCursor:r=!0}={}){let o=xe.createInterface({input:e,output:t,prompt:"",tabSize:1});xe.emitKeypressEvents(e,o),e instanceof Ko&&e.isTTY&&e.setRawMode(!0);let s=(i,{name:a,sequence:c})=>{let l=String(i);if(ar([l,a,c],"cancel")){r&&t.write(Y.cursor.show),process.exit(0);return}if(!n)return;xe.moveCursor(t,a==="return"?0:-1,a==="return"?-1:0,()=>{xe.clearLine(t,1,()=>{e.once("keypress",s)})})};return r&&t.write(Y.cursor.hide),e.once("keypress",s),()=>{e.off("keypress",s),r&&t.write(Y.cursor.show),e instanceof Ko&&e.isTTY&&!nc&&e.setRawMode(!1),o.terminal=!1,o.close()}}function Te(e,t,n,r=n,o){let s=wt(e??ir);return ge(t,s-n.length,{hard:!0,trim:!1}).split(`
10
+ `).map((i,a)=>{let c=o?o(i,a):i;return`${a===0?r:n}${c}`}).join(`
11
+ `)}var Y,$a,ec,L,nc,sr,wt,cr,ln,sn,zo,an,cn,lr=w(()=>{nr();Y=Ke(or(),1);$a=["up","down","left","right","space","enter","cancel"],ec=["January","February","March","April","May","June","July","August","September","October","November","December"],L={actions:new Set($a),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0,date:{monthNames:[...ec],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(e,t)=>`There are only ${e} days in ${t}`,afterMin:e=>`Date must be on or after ${e.toISOString().slice(0,10)}`,beforeMax:e=>`Date must be on or before ${e.toISOString().slice(0,10)}`}}};nc=globalThis.process.platform.startsWith("win"),sr=Symbol("clack:cancel");wt=e=>"columns"in e&&typeof e.columns=="number"?e.columns:80,cr=e=>"rows"in e&&typeof e.rows=="number"?e.rows:20;ln=class{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(e,t=!0){let{input:n=Yo,output:r=ir,render:o,signal:s,...i}=e;this.opts=i,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=o.bind(this),this._track=t,this._abortSignal=s,this.input=n,this.output=r}unsubscribe(){this._subscribers.clear()}setSubscriber(e,t){let n=this._subscribers.get(e)??[];n.push(t),this._subscribers.set(e,n)}on(e,t){this.setSubscriber(e,{cb:t})}once(e,t){this.setSubscriber(e,{cb:t,once:!0})}emit(e,...t){let n=this._subscribers.get(e)??[],r=[];for(let o of n)o.cb(...t),o.once&&r.push(()=>n.splice(n.indexOf(o),1));for(let o of r)o()}prompt(){return new Promise(e=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),e(sr);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=_a.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),on(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(Y.cursor.show),this.output.off("resize",this.render),on(this.input,!1),e(this.value)}),this.once("cancel",()=>{this.output.write(Y.cursor.show),this.output.off("resize",this.render),on(this.input,!1),e(sr)})})}_isActionKey(e,t){return e===" "}_shouldSubmit(e,t){return!0}_setValue(e){this.value=e,this.emit("value",this.value)}_setUserInput(e,t){this.userInput=e??"",this.emit("userInput",this.userInput),t&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}onKeypress(e,t){if(this._track&&t.name!=="return"&&(t.name&&this._isActionKey(e,t)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),t?.name&&(!this._track&&L.aliases.has(t.name)&&this.emit("cursor",L.aliases.get(t.name)),L.actions.has(t.name)&&this.emit("cursor",t.name)),e&&(e.toLowerCase()==="y"||e.toLowerCase()==="n")&&this.emit("confirm",e.toLowerCase()==="y"),this.emit("key",e?.toLowerCase(),t),t?.name==="return"&&this._shouldSubmit(e,t)){if(this.opts.validate){let n=this.opts.validate(this.value);n&&(this.error=n instanceof Error?n.message:n,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}ar([e,t?.name,t?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
12
+ `),on(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=ge(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
13
+ `).length-1;this.output.write(Y.cursor.move(-999,e*-1))}render(){let e=ge(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(e!==this._prevFrame){if(this.state==="initial")this.output.write(Y.cursor.hide);else{let t=tc(this._prevFrame,e),n=cr(this.output);if(this.restoreCursor(),t){let r=Math.max(0,t.numLinesAfter-n),o=Math.max(0,t.numLinesBefore-n),s=t.lines.find(i=>i>=r);if(s===void 0){this._prevFrame=e;return}if(t.lines.length===1){this.output.write(Y.cursor.move(0,s-o)),this.output.write(Y.erase.lines(1));let i=e.split(`
14
+ `);this.output.write(i[s]),this._prevFrame=e,this.output.write(Y.cursor.move(0,i.length-s-1));return}else if(t.lines.length>1){if(r<o)s=r;else{let a=s-o;a>0&&this.output.write(Y.cursor.move(0,a))}this.output.write(Y.erase.down());let i=e.split(`
15
+ `).slice(s);this.output.write(i.join(`
16
+ `)),this._prevFrame=e;return}}this.output.write(Y.erase.down())}this.output.write(e),this.state==="initial"&&(this.state="active"),this._prevFrame=e}}},sn=class extends ln{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(t){super(t,!1),this.value=!!t.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",n=>{this.output.write(Y.cursor.move(0,-1)),this.value=n,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}},zo=class extends ln{options;cursor=0;get _value(){return this.options[this.cursor].value}get _enabledOptions(){return this.options.filter(e=>e.disabled!==!0)}toggleAll(){let e=this._enabledOptions,t=this.value!==void 0&&this.value.length===e.length;this.value=t?[]:e.map(n=>n.value)}toggleInvert(){let e=this.value;if(!e)return;let t=this._enabledOptions.filter(n=>!e.includes(n.value));this.value=t.map(n=>n.value)}toggleValue(){this.value===void 0&&(this.value=[]);let e=this.value.includes(this._value);this.value=e?this.value.filter(t=>t!==this._value):[...this.value,this._value]}constructor(e){super(e,!1),this.options=e.options,this.value=[...e.initialValues??[]];let t=Math.max(this.options.findIndex(({value:n})=>n===e.cursorAt),0);this.cursor=this.options[t].disabled?Fe(t,1,this.options):t,this.on("key",n=>{n==="a"&&this.toggleAll(),n==="i"&&this.toggleInvert()}),this.on("cursor",n=>{switch(n){case"left":case"up":this.cursor=Fe(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=Fe(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}},an=class extends ln{_mask="\u2022";get cursor(){return this._cursor}get masked(){return this.userInput.replaceAll(/./g,this._mask)}get userInputWithCursor(){if(this.state==="submit"||this.state==="cancel")return this.masked;let t=this.userInput;if(this.cursor>=t.length)return`${this.masked}${Bo(["inverse","hidden"],"_")}`;let n=this.masked,r=n.slice(0,this.cursor),o=n.slice(this.cursor);return`${r}${Bo("inverse",o[0])}${o.slice(1)}`}clear(){this._clearUserInput()}constructor({mask:t,...n}){super(n),this._mask=t??"\u2022",this.on("userInput",r=>{this._setValue(r)})}},cn=class extends ln{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){this.value=this._selectedValue.value}constructor(t){super(t,!1),this.options=t.options;let n=this.options.findIndex(({value:o})=>o===t.initialValue),r=n===-1?0:n;this.cursor=this.options[r].disabled?Fe(r,1,this.options):r,this.changeValue(),this.on("cursor",o=>{switch(o){case"left":case"up":this.cursor=Fe(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=Fe(this.cursor,1,this.options);break}this.changeValue()})}}});import{styleText as d,stripVTControlCharacters as qp}from"node:util";import oe from"node:process";function rc(){return oe.platform!=="win32"?oe.env.TERM!=="linux":!!oe.env.CI||!!oe.env.WT_SESSION||!!oe.env.TERMINUS_SUBLIME||oe.env.ConEmuTask==="{cmd::Cmder}"||oe.env.TERM_PROGRAM==="Terminus-Sublime"||oe.env.TERM_PROGRAM==="vscode"||oe.env.TERM==="xterm-256color"||oe.env.TERM==="alacritty"||oe.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var Ct,ur,oc,M,sc,Qo,_o,pn,ic,b,Re,$p,em,dr,dn,ac,Zo,qo,cc,Xo,lc,uc,dc,pc,tm,mc,fc,gc,hc,mn,$o,Sc,pr,bt,q,Ie,kt,Oe,vt,es,Ec,yc,Mt,ts,wc,xt,nm,un,fn,rm,gn,mr=w(()=>{lr();lr();nr();_n();Ct=Ke(or(),1);ur=rc(),oc=()=>process.env.CI==="true",M=(e,t)=>ur?e:t,sc=M("\u25C6","*"),Qo=M("\u25A0","x"),_o=M("\u25B2","x"),pn=M("\u25C7","o"),ic=M("\u250C","T"),b=M("\u2502","|"),Re=M("\u2514","\u2014"),$p=M("\u2510","T"),em=M("\u2518","\u2014"),dr=M("\u25CF",">"),dn=M("\u25CB"," "),ac=M("\u25FB","[\u2022]"),Zo=M("\u25FC","[+]"),qo=M("\u25FB","[ ]"),cc=M("\u25AA","\u2022"),Xo=M("\u2500","-"),lc=M("\u256E","+"),uc=M("\u251C","+"),dc=M("\u256F","+"),pc=M("\u2570","+"),tm=M("\u256D","+"),mc=M("\u25CF","\u2022"),fc=M("\u25C6","*"),gc=M("\u25B2","!"),hc=M("\u25A0","x"),mn=e=>{switch(e){case"initial":case"active":return d("cyan",sc);case"cancel":return d("red",Qo);case"error":return d("yellow",_o);case"submit":return d("green",pn)}},$o=e=>{switch(e){case"initial":case"active":return d("cyan",b);case"cancel":return d("red",b);case"error":return d("yellow",b);case"submit":return d("green",b)}},Sc=(e,t,n,r,o)=>{let s=t,i=0;for(let a=n;a<r;a++){let c=e[a];if(s=s-c.length,i++,s<=o)break}return{lineCount:s,removals:i}},pr=({cursor:e,options:t,style:n,output:r=process.stdout,maxItems:o=Number.POSITIVE_INFINITY,columnPadding:s=0,rowPadding:i=4})=>{let a=wt(r)-s,c=cr(r),l=d("dim","..."),p=Math.max(c-i,0),f=Math.max(Math.min(o,p),5),g=0;e>=f-3&&(g=Math.max(Math.min(e-f+3,t.length-f),0));let v=f<t.length&&g>0,h=f<t.length&&g+f<t.length,C=Math.min(g+f,t.length),I=[],D=0;v&&D++,h&&D++;let H=g+(v?1:0),B=C-(h?1:0);for(let R=H;R<B;R++){let y=ge(n(t[R],R===e),a,{hard:!0,trim:!1}).split(`
17
+ `);I.push(y),D+=y.length}if(D>p){let R=0,y=0,S=D,E=e-H,O=(A,K)=>Sc(I,S,A,K,p);v?({lineCount:S,removals:R}=O(0,E),S>p&&({lineCount:S,removals:y}=O(E+1,I.length))):({lineCount:S,removals:y}=O(E+1,I.length),S>p&&({lineCount:S,removals:R}=O(0,E))),R>0&&(v=!0,I.splice(0,R)),y>0&&(h=!0,I.splice(I.length-y,y))}let j=[];v&&j.push(l);for(let R of I)for(let y of R)j.push(y);return h&&j.push(l),j},bt=e=>{let t=e.active??"Yes",n=e.inactive??"No";return new sn({active:t,inactive:n,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue??!0,render(){let r=e.withGuide??L.withGuide,o=`${mn(this.state)} `,s=r?`${d("gray",b)} `:"",i=Te(e.output,e.message,s,o),a=`${r?`${d("gray",b)}
18
+ `:""}${i}
19
+ `,c=this.value?t:n;switch(this.state){case"submit":{let l=r?`${d("gray",b)} `:"";return`${a}${l}${d("dim",c)}`}case"cancel":{let l=r?`${d("gray",b)} `:"";return`${a}${l}${d(["strikethrough","dim"],c)}${r?`
20
+ ${d("gray",b)}`:""}`}default:{let l=r?`${d("cyan",b)} `:"",p=r?d("cyan",Re):"";return`${a}${l}${this.value?`${d("green",dr)} ${t}`:`${d("dim",dn)} ${d("dim",t)}`}${e.vertical?r?`
21
+ ${d("cyan",b)} `:`
22
+ `:` ${d("dim","/")} `}${this.value?`${d("dim",dn)} ${d("dim",n)}`:`${d("green",dr)} ${n}`}
23
+ ${p}
24
+ `}}}}).prompt()},q={message:(e=[],{symbol:t=d("gray",b),secondarySymbol:n=d("gray",b),output:r=process.stdout,spacing:o=1,withGuide:s}={})=>{let i=[],a=s??L.withGuide,c=a?n:"",l=a?`${t} `:"",p=a?`${n} `:"";for(let g=0;g<o;g++)i.push(c);let f=Array.isArray(e)?e:e.split(`
25
+ `);if(f.length>0){let[g,...v]=f;g.length>0?i.push(`${l}${g}`):i.push(a?t:"");for(let h of v)h.length>0?i.push(`${p}${h}`):i.push(a?n:"")}r.write(`${i.join(`
49
26
  `)}
50
- `)},info:t=>{$.message(t,{symbol:l.default.blue(yi)})},success:t=>{$.message(t,{symbol:l.default.green(wi)})},step:t=>{$.message(t,{symbol:l.default.green(yt)})},warn:t=>{$.message(t,{symbol:l.default.yellow(vi)})},warning:t=>{$.warn(t)},error:t=>{$.message(t,{symbol:l.default.red(_i)})}},xi=()=>{let t=pr?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],e=pr?80:120,r=process.env.CI==="true",o,s,i=!1,n="",u,c=O=>{let K=O>1?"Something went wrong":"Canceled";i&&N(K,O)},D=()=>c(2),d=()=>c(1),p=()=>{process.on("uncaughtExceptionMonitor",D),process.on("unhandledRejection",D),process.on("SIGINT",d),process.on("SIGTERM",d),process.on("exit",c)},I=()=>{process.removeListener("uncaughtExceptionMonitor",D),process.removeListener("unhandledRejection",D),process.removeListener("SIGINT",d),process.removeListener("SIGTERM",d),process.removeListener("exit",c)},_=()=>{if(u===void 0)return;r&&process.stdout.write(`
51
- `);let O=u.split(`
52
- `);process.stdout.write(St.cursor.move(-999,O.length-1)),process.stdout.write(St.erase.down(O.length))},g=O=>O.replace(/\.+$/,""),h=(O="")=>{i=!0,o=kn(),n=g(O),process.stdout.write(`${l.default.gray(y)}
53
- `);let K=0,oe=0;p(),s=setInterval(()=>{if(r&&n===u)return;_(),u=n;let _s=l.default.magenta(t[K]),xs=r?"...":".".repeat(Math.floor(oe)).slice(0,3);process.stdout.write(`${_s} ${n}${xs}`),K=K+1<t.length?K+1:0,oe=oe<t.length?oe+.125:0},e)},N=(O="",K=0)=>{i=!1,clearInterval(s),_();let oe=K===0?l.default.green(yt):K===1?l.default.red(Pn):l.default.red(Tn);n=g(O??n),process.stdout.write(`${oe} ${n}
54
- `),I(),o()};return{start:h,stop:N,message:(O="")=>{n=g(O??n)}}},vt=async t=>{for(let e of t){if(e.enabled===!1)continue;let r=xi();r.start(e.title);let o=await e.task(r.message);r.stop(o||e.title)}}});import{readFileSync as ki,writeFileSync as Nn,existsSync as jn,mkdirSync as Ai}from"fs";import{join as Un,dirname as bi}from"path";import{homedir as Wn}from"os";var x,me=m(()=>{"use strict";x=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-sonnet-4-6",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:String(37700+(process.getuid?.()??77)%100),CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"cli",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_GEMINI_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_GEMINI_MAX_TOKENS:"100000",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_OPENROUTER_MAX_TOKENS:"100000",CLAUDE_MEM_DATA_DIR:Un(Wn(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_FULL_COUNT:"0",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_FOLDER_USE_LOCAL_MD:"false",CLAUDE_MEM_TRANSCRIPTS_ENABLED:"true",CLAUDE_MEM_TRANSCRIPTS_CONFIG_PATH:Un(Wn(),".claude-mem","transcript-watch.json"),CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_SEMANTIC_INJECT:"false",CLAUDE_MEM_SEMANTIC_INJECT_LIMIT:"5",CLAUDE_MEM_TIER_ROUTING_ENABLED:"true",CLAUDE_MEM_TIER_SIMPLE_MODEL:"haiku",CLAUDE_MEM_TIER_SUMMARY_MODEL:"",CLAUDE_MEM_CHROMA_ENABLED:"true",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database",CLAUDE_MEM_TELEGRAM_ENABLED:"true",CLAUDE_MEM_TELEGRAM_BOT_TOKEN:"",CLAUDE_MEM_TELEGRAM_CHAT_ID:"",CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:"security_alert",CLAUDE_MEM_TELEGRAM_TRIGGER_CONCEPTS:""};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){return process.env[e]??this.DEFAULTS[e]}static getInt(e){let r=this.get(e);return parseInt(r,10)}static getBool(e){let r=this.get(e);return r==="true"||r===!0}static applyEnvOverrides(e){let r={...e};for(let o of Object.keys(this.DEFAULTS))process.env[o]!==void 0&&(r[o]=process.env[o]);return r}static loadFromFile(e){try{if(!jn(e)){let n=this.getAllDefaults();try{let u=bi(e);jn(u)||Ai(u,{recursive:!0}),Nn(e,JSON.stringify(n,null,2),"utf-8"),console.log("[SETTINGS] Created settings file with defaults:",e)}catch(u){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,u instanceof Error?u.message:String(u))}return this.applyEnvOverrides(n)}let r=ki(e,"utf-8"),o=JSON.parse(r),s=o;if(o.env&&typeof o.env=="object"){s=o.env;try{Nn(e,JSON.stringify(s,null,2),"utf-8"),console.log("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(n){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,n instanceof Error?n.message:String(n))}}let i={...this.DEFAULTS};for(let n of Object.keys(this.DEFAULTS))s[n]!==void 0&&(i[n]=s[n]);return this.applyEnvOverrides(i)}catch(r){return console.warn("[SETTINGS] Failed to load settings, using defaults:",e,r instanceof Error?r.message:String(r)),this.applyEnvOverrides(this.getAllDefaults())}}}});async function _t(t,e=1e4){let r=`http://127.0.0.1:${t}`,o=!1;try{await fetch(`${r}/api/admin/shutdown`,{method:"POST",signal:AbortSignal.timeout(5e3)}),o=!0}catch{return{workerWasRunning:!1,confirmedStopped:!0}}let s=500,i=Math.ceil(e/s);for(let n=0;n<i;n++){await new Promise(u=>setTimeout(u,s));try{await fetch(`${r}/api/health`,{signal:AbortSignal.timeout(1e3)})}catch(u){if(u instanceof Error&&u.name==="AbortError")continue;return{workerWasRunning:o,confirmedStopped:!0}}}return{workerWasRunning:o,confirmedStopped:!1}}var gr=m(()=>{"use strict"});import{execSync as Mi}from"child_process";import{existsSync as V,readdirSync as Ii}from"fs";import{homedir as Gn}from"os";import{join as X}from"path";function Ke(t){try{return Mi(`${te?"where":"which"} ${t}`,{stdio:"pipe"}),!0}catch(e){return process.env.DEBUG&&console.error(`[ide-detection] ${t} not in PATH:`,e instanceof Error?e.message:String(e)),!1}}function Ri(t){let e=X(Gn(),".vscode","extensions");if(!V(e))return!1;try{return Ii(e).some(o=>o.toLowerCase().includes(t.toLowerCase()))}catch(r){return console.warn("[ide-detection] Failed to read VS Code extensions directory:",r instanceof Error?r.message:String(r)),!1}}function Je(){let t=Gn();return[{id:"claude-code",label:"Claude Code",detected:V(X(t,".claude")),supported:!0,hint:"recommended"},{id:"gemini-cli",label:"Gemini CLI",detected:V(X(t,".gemini")),supported:!0},{id:"opencode",label:"OpenCode",detected:V(X(t,".config","opencode"))||Ke("opencode"),supported:!0,hint:"plugin-based integration"},{id:"openclaw",label:"OpenClaw",detected:V(X(t,".openclaw")),supported:!0,hint:"plugin-based integration"},{id:"windsurf",label:"Windsurf",detected:V(X(t,".codeium","windsurf")),supported:!0},{id:"codex-cli",label:"Codex CLI",detected:V(X(t,".codex")),supported:!0,hint:"transcript-based integration"},{id:"cursor",label:"Cursor",detected:V(X(t,".cursor")),supported:!0,hint:"hooks + MCP integration"},{id:"copilot-cli",label:"Copilot CLI",detected:Ke("copilot"),supported:!0,hint:"MCP-based integration"},{id:"antigravity",label:"Antigravity",detected:V(X(t,".gemini","antigravity")),supported:!0,hint:"MCP-based integration"},{id:"goose",label:"Goose",detected:V(X(t,".config","goose"))||Ke("goose"),supported:!0,hint:"MCP-based integration"},{id:"crush",label:"Crush",detected:Ke("crush"),supported:!0,hint:"MCP-based integration"},{id:"roo-code",label:"Roo Code",detected:Ri("roo-code"),supported:!0,hint:"MCP-based integration"},{id:"warp",label:"Warp",detected:V(X(t,".warp"))||Ke("warp"),supported:!0,hint:"MCP-based integration"}]}var Hn=m(()=>{"use strict";de()});import{appendFileSync as $i,existsSync as Kn,mkdirSync as Pi,readFileSync as Ti}from"fs";import{join as xt}from"path";import{homedir as Oi}from"os";var fr,Jn,Er,a,L=m(()=>{"use strict";fr=(i=>(i[i.DEBUG=0]="DEBUG",i[i.INFO=1]="INFO",i[i.WARN=2]="WARN",i[i.ERROR=3]="ERROR",i[i.SILENT=4]="SILENT",i))(fr||{}),Jn=xt(Oi(),".claude-mem"),Er=class{level=null;useColor;logFilePath=null;logFileInitialized=!1;constructor(){this.useColor=process.stdout.isTTY??!1}ensureLogFileInitialized(){if(!this.logFileInitialized){this.logFileInitialized=!0;try{let e=xt(Jn,"logs");Kn(e)||Pi(e,{recursive:!0});let r=new Date().toISOString().split("T")[0];this.logFilePath=xt(e,`claude-mem-${r}.log`)}catch(e){console.error("[LOGGER] Failed to initialize log file:",e instanceof Error?e.message:String(e)),this.logFilePath=null}}}getLevel(){if(this.level===null)try{let e=xt(Jn,"settings.json");if(Kn(e)){let r=Ti(e,"utf-8"),s=(JSON.parse(r).CLAUDE_MEM_LOG_LEVEL||"INFO").toUpperCase();this.level=fr[s]??1}else this.level=1}catch(e){console.error("[LOGGER] Failed to load log level from settings:",e instanceof Error?e.message:String(e)),this.level=1}return this.level}correlationId(e,r){return`obs-${e}-${r}`}sessionId(e){return`session-${e}`}formatData(e){if(e==null)return"";if(typeof e=="string")return e;if(typeof e=="number"||typeof e=="boolean")return e.toString();if(typeof e=="object"){if(e instanceof Error)return this.getLevel()===0?`${e.message}
55
- ${e.stack}`:e.message;if(Array.isArray(e))return`[${e.length} items]`;let r=Object.keys(e);return r.length===0?"{}":r.length<=3?JSON.stringify(e):`{${r.length} keys: ${r.slice(0,3).join(", ")}...}`}return String(e)}formatTool(e,r){if(!r)return e;let o=r;if(typeof r=="string")try{o=JSON.parse(r)}catch{o=r}if(e==="Bash"&&o.command)return`${e}(${o.command})`;if(o.file_path)return`${e}(${o.file_path})`;if(o.notebook_path)return`${e}(${o.notebook_path})`;if(e==="Glob"&&o.pattern)return`${e}(${o.pattern})`;if(e==="Grep"&&o.pattern)return`${e}(${o.pattern})`;if(o.url)return`${e}(${o.url})`;if(o.query)return`${e}(${o.query})`;if(e==="Task"){if(o.subagent_type)return`${e}(${o.subagent_type})`;if(o.description)return`${e}(${o.description})`}return e==="Skill"&&o.skill?`${e}(${o.skill})`:e==="LSP"&&o.operation?`${e}(${o.operation})`:e}formatTimestamp(e){let r=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0"),i=String(e.getHours()).padStart(2,"0"),n=String(e.getMinutes()).padStart(2,"0"),u=String(e.getSeconds()).padStart(2,"0"),c=String(e.getMilliseconds()).padStart(3,"0");return`${r}-${o}-${s} ${i}:${n}:${u}.${c}`}log(e,r,o,s,i){if(e<this.getLevel())return;this.ensureLogFileInitialized();let n=this.formatTimestamp(new Date),u=fr[e].padEnd(5),c=r.padEnd(6),D="";s?.correlationId?D=`[${s.correlationId}] `:s?.sessionId&&(D=`[session-${s.sessionId}] `);let d="";if(i!=null)if(i instanceof Error)d=this.getLevel()===0?`
56
- ${i.message}
57
- ${i.stack}`:` ${i.message}`;else if(this.getLevel()===0&&typeof i=="object")try{d=`
58
- `+JSON.stringify(i,null,2)}catch{d=" "+this.formatData(i)}else d=" "+this.formatData(i);let p="";if(s){let{sessionId:_,memorySessionId:g,correlationId:h,...N}=s;Object.keys(N).length>0&&(p=` {${Object.entries(N).map(([K,oe])=>`${K}=${oe}`).join(", ")}}`)}let I=`[${n}] [${u}] [${c}] ${D}${o}${p}${d}`;if(this.logFilePath)try{$i(this.logFilePath,I+`
59
- `,"utf8")}catch(_){process.stderr.write(`[LOGGER] Failed to write to log file: ${_ instanceof Error?_.message:String(_)}
60
- `)}else process.stderr.write(I+`
61
- `)}debug(e,r,o,s){this.log(0,e,r,o,s)}info(e,r,o,s){this.log(1,e,r,o,s)}warn(e,r,o,s){this.log(2,e,r,o,s)}error(e,r,o,s){this.log(3,e,r,o,s)}dataIn(e,r,o,s){this.info(e,`\u2192 ${r}`,o,s)}dataOut(e,r,o,s){this.info(e,`\u2190 ${r}`,o,s)}success(e,r,o,s){this.info(e,`\u2713 ${r}`,o,s)}failure(e,r,o,s){this.error(e,`\u2717 ${r}`,o,s)}timing(e,r,o,s){this.info(e,`\u23F1 ${r}`,s,{duration:`${o}ms`})}happyPathError(e,r,o,s,i=""){let D=((new Error().stack||"").split(`
62
- `)[2]||"").match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/),d=D?`${D[1].split("/").pop()}:${D[2]}`:"unknown",p={...o,location:d};return this.warn(e,`[HAPPY-PATH] ${r}`,p,s),i}},a=new Er});function Yn(t){return process.platform==="win32"?Math.round(t*Ye.WINDOWS_MULTIPLIER):t}var Ye,Cr=m(()=>{"use strict";Ye={DEFAULT:3e5,HEALTH_CHECK:3e3,POST_SPAWN_WAIT:15e3,READINESS_WAIT:3e4,PORT_IN_USE_WAIT:3e3,WORKER_STARTUP_WAIT:1e3,PRE_RESTART_SETTLE_DELAY:2e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5}});import{join as M,dirname as Li,basename as Bi}from"path";import{homedir as Vn}from"os";import{existsSync as Ni,mkdirSync as Fl}from"fs";import{execSync as yl}from"child_process";import{fileURLToPath as ji}from"url";function Ui(){return typeof __dirname<"u"?__dirname:Li(ji(import.meta.url))}function Wi(){if(process.env.CLAUDE_MEM_DATA_DIR)return process.env.CLAUDE_MEM_DATA_DIR;let t=M(Vn(),".claude-mem"),e=M(t,"settings.json");try{if(Ni(e)){let{readFileSync:r}=Rs("fs"),o=JSON.parse(r(e,"utf-8")),s=o.env??o;if(s.CLAUDE_MEM_DATA_DIR)return s.CLAUDE_MEM_DATA_DIR}}catch{}return t}var _l,B,ye,kt,xl,kl,Al,bl,Ml,Gi,Il,Rl,Hi,$l,Pl,Tl,Ol,Ve=m(()=>{"use strict";L();_l=Ui();B=Wi(),ye=process.env.CLAUDE_CONFIG_DIR||M(Vn(),".claude"),kt=M(ye,"plugins","marketplaces","thedotmack"),xl=M(B,"archives"),kl=M(B,"logs"),Al=M(B,"trash"),bl=M(B,"backups"),Ml=M(B,"modes"),Gi=M(B,"settings.json"),Il=M(B,"claude-mem.db"),Rl=M(B,"vector-db"),Hi=M(B,"observer-sessions"),$l=Bi(Hi),Pl=M(ye,"settings.json"),Tl=M(ye,"commands"),Ol=M(ye,"CLAUDE.md")});var Xn=m(()=>{"use strict";me();Ve()});var zn=m(()=>{"use strict"});import{spawn as Kl,spawnSync as Ki}from"child_process";import{existsSync as Ji,mkdirSync as qn,readFileSync as Zn,writeFileSync as Yi}from"fs";import{homedir as Vi}from"os";import At from"path";function Z(t){if(!Number.isInteger(t)||t<0||t===0)return!1;try{return process.kill(t,0),!0}catch(e){if(e instanceof Error){let r=e.code;return r==="EPERM"?!0:(a.debug("SYSTEM","PID check failed",{pid:t,code:r}),!1)}return a.warn("SYSTEM","PID check threw non-Error",{pid:t,error:String(e)}),!1}}function Qi(t){if(!Number.isInteger(t)||t<=0)return null;if(process.platform==="linux")try{let e=Zn(`/proc/${t}/stat`,"utf-8"),r=e.lastIndexOf(") ");if(r<0)return null;let s=e.slice(r+2).split(" ")[19];return s&&/^\d+$/.test(s)?s:null}catch(e){return a.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:t,error:e instanceof Error?e.message:String(e)}),null}if(process.platform==="win32")return null;try{let e=Ki("ps",["-p",String(t),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...process.env,LC_ALL:"C",LANG:"C"}});if(e.status!==0)return null;let r=e.stdout.trim();return r.length>0?r:null}catch(e){return a.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:t,error:e instanceof Error?e.message:String(e)}),null}}function Qn(t){if(!t||!Z(t.pid))return!1;if(!t.startToken)return!0;let e=Qi(t.pid);if(e===null)return!0;let r=e===t.startToken;return r||a.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:t.pid,stored:t.startToken,current:e}),r}function bt(){return hr||(hr=new Fr),hr}var Xi,zi,qi,Zi,Fr,hr,Mt=m(()=>{"use strict";L();zn();Xi=5e3,zi=1e3,qi=At.join(Vi(),".claude-mem"),Zi=At.join(qi,"supervisor.json");Fr=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;constructor(e=Zi){this.registryPath=e}initialize(){if(this.initialized)return;if(this.initialized=!0,qn(At.dirname(this.registryPath),{recursive:!0}),!Ji(this.registryPath)){this.persist();return}try{let o=JSON.parse(Zn(this.registryPath,"utf-8")).processes??{};for(let[s,i]of Object.entries(o))this.entries.set(s,i)}catch(r){r instanceof Error?a.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},r):a.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(r)}),this.entries.clear()}let e=this.pruneDeadEntries();e>0&&a.info("SYSTEM","Removed dead processes from supervisor registry",{removed:e}),this.persist()}register(e,r,o){this.initialize(),this.entries.set(e,r),o&&this.runtimeProcesses.set(e,o),this.persist()}unregister(e){this.initialize(),this.entries.delete(e),this.runtimeProcesses.delete(e),this.persist()}clear(){this.entries.clear(),this.runtimeProcesses.clear(),this.persist()}getAll(){return this.initialize(),Array.from(this.entries.entries()).map(([e,r])=>({id:e,...r})).sort((e,r)=>{let o=Date.parse(e.startedAt),s=Date.parse(r.startedAt);return(Number.isNaN(o)?0:o)-(Number.isNaN(s)?0:s)})}getBySession(e){let r=String(e);return this.getAll().filter(o=>o.sessionId!==void 0&&String(o.sessionId)===r)}getRuntimeProcess(e){return this.runtimeProcesses.get(e)}getByPid(e){return this.getAll().filter(r=>r.pid===e)}pruneDeadEntries(){this.initialize();let e=0;for(let[r,o]of this.entries)Z(o.pid)||(this.entries.delete(r),this.runtimeProcesses.delete(r),e+=1);return e>0&&this.persist(),e}async reapSession(e){this.initialize();let r=this.getBySession(e);if(r.length===0)return 0;let o=typeof e=="number"?e:Number(e)||void 0;a.info("SYSTEM",`Reaping ${r.length} process(es) for session ${e}`,{sessionId:o,pids:r.map(u=>u.pid)});let s=r.filter(u=>Z(u.pid));for(let u of s)try{typeof u.pgid=="number"&&process.platform!=="win32"?process.kill(-u.pgid,"SIGTERM"):process.kill(u.pid,"SIGTERM")}catch(c){c instanceof Error?c.code!=="ESRCH"&&a.debug("SYSTEM",`Failed to SIGTERM session process PID ${u.pid}`,{pid:u.pid,pgid:u.pgid},c):a.warn("SYSTEM",`Failed to SIGTERM session process PID ${u.pid} (non-Error)`,{pid:u.pid,pgid:u.pgid,error:String(c)})}let i=Date.now()+Xi;for(;Date.now()<i&&s.filter(c=>Z(c.pid)).length!==0;)await new Promise(c=>setTimeout(c,100));let n=s.filter(u=>Z(u.pid));for(let u of n){a.warn("SYSTEM",`Session process PID ${u.pid} did not exit after SIGTERM, sending SIGKILL`,{pid:u.pid,pgid:u.pgid,sessionId:o});try{typeof u.pgid=="number"&&process.platform!=="win32"?process.kill(-u.pgid,"SIGKILL"):process.kill(u.pid,"SIGKILL")}catch(c){c instanceof Error?c.code!=="ESRCH"&&a.debug("SYSTEM",`Failed to SIGKILL session process PID ${u.pid}`,{pid:u.pid,pgid:u.pgid},c):a.warn("SYSTEM",`Failed to SIGKILL session process PID ${u.pid} (non-Error)`,{pid:u.pid,pgid:u.pgid,error:String(c)})}}if(n.length>0){let u=Date.now()+zi;for(;Date.now()<u&&n.filter(D=>Z(D.pid)).length!==0;)await new Promise(D=>setTimeout(D,100))}for(let u of r)this.entries.delete(u.id),this.runtimeProcesses.delete(u.id);return this.persist(),a.info("SYSTEM",`Reaped ${r.length} process(es) for session ${e}`,{sessionId:o,reaped:r.length}),r.length}persist(){let e={processes:Object.fromEntries(this.entries.entries())};qn(At.dirname(this.registryPath),{recursive:!0}),Yi(this.registryPath,JSON.stringify(e,null,2))}},hr=null});import{execFile as eu}from"child_process";import{rmSync as tu}from"fs";import{homedir as ru}from"os";import ro from"path";import{promisify as nu}from"util";async function no(t){let e=t.currentPid??process.pid,r=t.pidFilePath??iu,o=t.registry.getAll(),s=[...o].filter(n=>n.pid!==e).sort((n,u)=>Date.parse(u.startedAt)-Date.parse(n.startedAt));for(let n of s){if(!Z(n.pid)){t.registry.unregister(n.id);continue}try{await to(n,"SIGTERM")}catch(u){u instanceof Error?a.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:n.pid,pgid:n.pgid,type:n.type},u):a.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:n.pid,pgid:n.pgid,type:n.type,error:String(u)})}}await eo(s,5e3);let i=s.filter(n=>Z(n.pid));for(let n of i)try{await to(n,"SIGKILL")}catch(u){u instanceof Error?a.debug("SYSTEM","Failed to force kill child process",{pid:n.pid,pgid:n.pgid,type:n.type},u):a.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:n.pid,pgid:n.pgid,type:n.type,error:String(u)})}await eo(i,1e3);for(let n of s)t.registry.unregister(n.id);for(let n of o.filter(u=>u.pid===e))t.registry.unregister(n.id);try{tu(r,{force:!0})}catch(n){n instanceof Error?a.debug("SYSTEM","Failed to remove PID file during shutdown",{pidFilePath:r},n):a.warn("SYSTEM","Failed to remove PID file during shutdown (non-Error)",{pidFilePath:r,error:String(n)})}t.registry.pruneDeadEntries()}async function eo(t,e){let r=Date.now()+e;for(;Date.now()<r;){if(t.filter(s=>Z(s.pid)).length===0)return;await new Promise(s=>setTimeout(s,100))}}async function to(t,e){let{pid:r,pgid:o}=t;if(process.platform!=="win32"){try{typeof o=="number"?process.kill(-o,e):process.kill(r,e)}catch(n){if(n instanceof Error&&n.code==="ESRCH")return;throw n}return}if(e==="SIGTERM"){try{process.kill(r,e)}catch(n){if(n instanceof Error&&n.code==="ESRCH")return;throw n}return}let s=await uu();if(s){await new Promise((n,u)=>{s(r,e,c=>{if(!c){n();return}if(c.code==="ESRCH"){n();return}u(c)})});return}let i=["/PID",String(r),"/T"];e==="SIGKILL"&&i.push("/F"),await ou("taskkill",i,{timeout:Ye.POWERSHELL_COMMAND,windowsHide:!0})}async function uu(){let t="tree-kill";try{let e=await import(t);return e.default??e}catch(e){return a.debug("SYSTEM","tree-kill module not available, using fallback",{},e instanceof Error?e:void 0),null}}var ou,su,iu,oo=m(()=>{"use strict";L();Cr();Mt();ou=nu(eu),su=ro.join(ru(),".claude-mem"),iu=ro.join(su,"worker.pid")});function au(){let e=bt().pruneDeadEntries();e>0&&a.info("SYSTEM",`Health check: pruned ${e} dead process(es) from registry`)}function io(){we===null&&(we=setInterval(au,so),we.unref(),a.debug("SYSTEM","Health checker started",{intervalMs:so}))}function uo(){we!==null&&(clearInterval(we),we=null,a.debug("SYSTEM","Health checker stopped"))}var so,we,ao=m(()=>{"use strict";L();Mt();so=3e4,we=null});import{existsSync as cu,readFileSync as lu,rmSync as co}from"fs";import{homedir as Du}from"os";import lo from"path";function Do(t={}){let e=t.pidFilePath??pu;if(!cu(e))return"missing";let r=null;try{r=JSON.parse(lu(e,"utf-8"))}catch(s){return s instanceof Error?a.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e},s):a.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e,error:String(s)}),co(e,{force:!0}),"invalid"}return Qn(r)&&r?((t.logAlive??!0)&&a.info("SYSTEM","Worker already running (PID alive)",{existingPid:r.pid,existingPort:r.port,startedAt:r.startedAt}),"alive"):(a.info("SYSTEM","Removing stale PID file (worker process is dead or PID has been reused)",{pid:r?.pid,port:r?.port,startedAt:r?.startedAt}),co(e,{force:!0}),"stale")}var du,pu,Sr,ED,po=m(()=>{"use strict";L();Mt();oo();ao();du=lo.join(Du(),".claude-mem"),pu=lo.join(du,"worker.pid"),Sr=class{registry;started=!1;stopPromise=null;signalHandlersRegistered=!1;shutdownInitiated=!1;shutdownHandler=null;constructor(e){this.registry=e}async start(){if(this.started)return;if(this.registry.initialize(),Do({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,io()}configureSignalHandlers(e){if(this.shutdownHandler=e,this.signalHandlersRegistered)return;this.signalHandlersRegistered=!0;let r=async o=>{if(this.shutdownInitiated){a.warn("SYSTEM",`Received ${o} but shutdown already in progress`);return}this.shutdownInitiated=!0,a.info("SYSTEM",`Received ${o}, shutting down...`);try{this.shutdownHandler?await this.shutdownHandler():await this.stop()}catch(s){s instanceof Error?a.error("SYSTEM","Error during shutdown",{},s):a.error("SYSTEM","Error during shutdown (non-Error)",{error:String(s)});try{await this.stop()}catch(i){i instanceof Error?a.debug("SYSTEM","Supervisor shutdown fallback failed",{},i):a.debug("SYSTEM","Supervisor shutdown fallback failed",{error:String(i)})}}process.exit(0)};process.on("SIGTERM",()=>{r("SIGTERM")}),process.on("SIGINT",()=>{r("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{a.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{r("SIGHUP")}))}async stop(){if(this.stopPromise){await this.stopPromise;return}uo(),this.stopPromise=no({registry:this.registry,currentPid:process.pid}).finally(()=>{this.started=!1,this.stopPromise=null}),await this.stopPromise}assertCanSpawn(e){if(this.stopPromise!==null)throw new Error(`Supervisor is shutting down, refusing to spawn ${e}`)}registerProcess(e,r,o){this.registry.register(e,r,o)}unregisterProcess(e){this.registry.unregister(e)}getRegistry(){return this.registry}},ED=new Sr(bt())});import mo from"path";import{readFileSync as wD,existsSync as vD,writeFileSync as _D,renameSync as xD,mkdirSync as kD}from"fs";import{spawn as bD,execSync as MD}from"child_process";function gu(t,e={},r){return new Promise((o,s)=>{let i=setTimeout(()=>s(new Error(`Request timed out after ${r}ms`)),r);fetch(t,e).then(n=>{clearTimeout(i),o(n)},n=>{clearTimeout(i),s(n)})})}function Xe(){if(It!==null)return It;let t=mo.join(x.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),e=x.loadFromFile(t);return It=parseInt(e.CLAUDE_MEM_WORKER_PORT,10),It}function fu(){if(Rt!==null)return Rt;let t=mo.join(x.get("CLAUDE_MEM_DATA_DIR"),"settings.json");return Rt=x.loadFromFile(t).CLAUDE_MEM_WORKER_HOST,Rt}function Eu(t){return`http://${fu()}:${Xe()}${t}`}function $t(t,e={}){let r=e.method??"GET",o=e.timeoutMs??mu,s=Eu(t),i={method:r};return e.headers&&(i.headers=e.headers),e.body&&(i.body=e.body),o>0?gu(s,i,o):fetch(s,i)}var mu,It,Rt,Pt=m(()=>{"use strict";L();Cr();me();Ve();Xn();po();mu=(()=>{let t=process.env.CLAUDE_MEM_HEALTH_TIMEOUT_MS;if(t){let e=parseInt(t,10);if(Number.isFinite(e)&&e>=500&&e<=3e5)return e;a.warn("SYSTEM","Invalid CLAUDE_MEM_HEALTH_TIMEOUT_MS, using default",{value:t,min:500,max:3e5})}return Yn(Ye.HEALTH_CHECK)})();It=null,Rt=null});import{existsSync as Cu,readFileSync as hu,writeFileSync as go,mkdirSync as fo,renameSync as Fu}from"fs";import{join as yr,basename as jD}from"path";function Eo(t){try{return Cu(t)?JSON.parse(hu(t,"utf-8")):{}}catch(e){return a.error("CONFIG","Failed to read Cursor registry, using empty registry",{file:t,error:e instanceof Error?e.message:String(e)}),{}}}function Co(t,e){let r=yr(t,"..");fo(r,{recursive:!0}),go(t,JSON.stringify(e,null,2))}function wr(t,e){let r=yr(t,".cursor","rules"),o=yr(r,"claude-mem-context.mdc"),s=`${o}.tmp`;fo(r,{recursive:!0});let i=`---
27
+ `)},info:(e,t)=>{q.message(e,{...t,symbol:d("blue",mc)})},success:(e,t)=>{q.message(e,{...t,symbol:d("green",fc)})},step:(e,t)=>{q.message(e,{...t,symbol:d("green",pn)})},warn:(e,t)=>{q.message(e,{...t,symbol:d("yellow",gc)})},warning:(e,t)=>{q.warn(e,t)},error:(e,t)=>{q.message(e,{...t,symbol:d("red",hc)})}},Ie=(e="",t)=>{let n=t?.output??process.stdout,r=t?.withGuide??L.withGuide?`${d("gray",Re)} `:"";n.write(`${r}${d("red",e)}
28
+
29
+ `)},kt=(e="",t)=>{let n=t?.output??process.stdout,r=t?.withGuide??L.withGuide?`${d("gray",ic)} `:"";n.write(`${r}${e}
30
+ `)},Oe=(e="",t)=>{let n=t?.output??process.stdout,r=t?.withGuide??L.withGuide?`${d("gray",b)}
31
+ ${d("gray",Re)} `:"";n.write(`${r}${e}
32
+
33
+ `)},vt=(e,t)=>e.split(`
34
+ `).map(n=>t(n)).join(`
35
+ `),es=e=>{let t=(r,o)=>{let s=r.label??String(r.value);return o==="disabled"?`${d("gray",qo)} ${vt(s,i=>d(["strikethrough","gray"],i))}${r.hint?` ${d("dim",`(${r.hint??"disabled"})`)}`:""}`:o==="active"?`${d("cyan",ac)} ${s}${r.hint?` ${d("dim",`(${r.hint})`)}`:""}`:o==="selected"?`${d("green",Zo)} ${vt(s,i=>d("dim",i))}${r.hint?` ${d("dim",`(${r.hint})`)}`:""}`:o==="cancelled"?`${vt(s,i=>d(["strikethrough","dim"],i))}`:o==="active-selected"?`${d("green",Zo)} ${s}${r.hint?` ${d("dim",`(${r.hint})`)}`:""}`:o==="submitted"?`${vt(s,i=>d("dim",i))}`:`${d("dim",qo)} ${vt(s,i=>d("dim",i))}`},n=e.required??!0;return new zo({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValues:e.initialValues,required:n,cursorAt:e.cursorAt,validate(r){if(n&&(r===void 0||r.length===0))return`Please select at least one option.
36
+ ${d("reset",d("dim",`Press ${d(["gray","bgWhite","inverse"]," space ")} to select, ${d("gray",d("bgWhite",d("inverse"," enter ")))} to submit`))}`},render(){let r=e.withGuide??L.withGuide,o=Te(e.output,e.message,r?`${$o(this.state)} `:"",`${mn(this.state)} `),s=`${r?`${d("gray",b)}
37
+ `:""}${o}
38
+ `,i=this.value??[],a=(c,l)=>{if(c.disabled)return t(c,"disabled");let p=i.includes(c.value);return l&&p?t(c,"active-selected"):p?t(c,"selected"):t(c,l?"active":"inactive")};switch(this.state){case"submit":{let c=this.options.filter(({value:p})=>i.includes(p)).map(p=>t(p,"submitted")).join(d("dim",", "))||d("dim","none"),l=Te(e.output,c,r?`${d("gray",b)} `:"");return`${s}${l}`}case"cancel":{let c=this.options.filter(({value:p})=>i.includes(p)).map(p=>t(p,"cancelled")).join(d("dim",", "));if(c.trim()==="")return`${s}${d("gray",b)}`;let l=Te(e.output,c,r?`${d("gray",b)} `:"");return`${s}${l}${r?`
39
+ ${d("gray",b)}`:""}`}case"error":{let c=r?`${d("yellow",b)} `:"",l=this.error.split(`
40
+ `).map((g,v)=>v===0?`${r?`${d("yellow",Re)} `:""}${d("yellow",g)}`:` ${g}`).join(`
41
+ `),p=s.split(`
42
+ `).length,f=l.split(`
43
+ `).length+1;return`${s}${c}${pr({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:c.length,rowPadding:p+f,style:a}).join(`
44
+ ${c}`)}
45
+ ${l}
46
+ `}default:{let c=r?`${d("cyan",b)} `:"",l=s.split(`
47
+ `).length,p=r?2:1;return`${s}${c}${pr({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:c.length,rowPadding:l+p,style:a}).join(`
48
+ ${c}`)}
49
+ ${r?d("cyan",Re):""}
50
+ `}}}}).prompt()},Ec=e=>d("dim",e),yc=(e,t,n)=>{let r={hard:!0,trim:!1},o=ge(e,t,r).split(`
51
+ `),s=o.reduce((c,l)=>Math.max(Z(l),c),0),i=o.map(n).reduce((c,l)=>Math.max(Z(l),c),0),a=t-(i-s);return ge(e,a,r)},Mt=(e="",t="",n)=>{let r=n?.output??oe.stdout,o=n?.withGuide??L.withGuide,s=n?.format??Ec,i=["",...yc(e,wt(r)-6,s).split(`
52
+ `).map(s),""],a=Z(t),c=Math.max(i.reduce((g,v)=>{let h=Z(v);return h>g?h:g},0),a)+2,l=i.map(g=>`${d("gray",b)} ${g}${" ".repeat(c-Z(g))}${d("gray",b)}`).join(`
53
+ `),p=o?`${d("gray",b)}
54
+ `:"",f=o?uc:pc;r.write(`${p}${d("green",pn)} ${d("reset",t)} ${d("gray",Xo.repeat(Math.max(c-a-1,1))+lc)}
55
+ ${l}
56
+ ${d("gray",f+Xo.repeat(c+2)+dc)}
57
+ `)},ts=e=>new an({validate:e.validate,mask:e.mask??cc,signal:e.signal,input:e.input,output:e.output,render(){let t=e.withGuide??L.withGuide,n=`${t?`${d("gray",b)}
58
+ `:""}${mn(this.state)} ${e.message}
59
+ `,r=this.userInputWithCursor,o=this.masked;switch(this.state){case"error":{let s=t?`${d("yellow",b)} `:"",i=t?`${d("yellow",Re)} `:"",a=o??"";return e.clearOnError&&this.clear(),`${n.trim()}
60
+ ${s}${a}
61
+ ${i}${d("yellow",this.error)}
62
+ `}case"submit":{let s=t?`${d("gray",b)} `:"",i=o?d("dim",o):"";return`${n}${s}${i}`}case"cancel":{let s=t?`${d("gray",b)} `:"",i=o?d(["strikethrough","dim"],o):"";return`${n}${s}${i}${o&&t?`
63
+ ${d("gray",b)}`:""}`}default:{let s=t?`${d("cyan",b)} `:"",i=t?d("cyan",Re):"";return`${n}${s}${r}
64
+ ${i}
65
+ `}}}}).prompt(),wc=e=>d("magenta",e),xt=({indicator:e="dots",onCancel:t,output:n=process.stdout,cancelMessage:r,errorMessage:o,frames:s=ur?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],delay:i=ur?80:120,signal:a,...c}={})=>{let l=oc(),p,f,g=!1,v=!1,h="",C,I=performance.now(),D=wt(n),H=c?.styleFrame??wc,B=P=>{let ne=P>1?o??L.messages.error:r??L.messages.cancel;v=P===1,g&&(gt(ne,P),v&&typeof t=="function"&&t())},j=()=>B(2),R=()=>B(1),y=()=>{process.on("uncaughtExceptionMonitor",j),process.on("unhandledRejection",j),process.on("SIGINT",R),process.on("SIGTERM",R),process.on("exit",B),a&&a.addEventListener("abort",R)},S=()=>{process.removeListener("uncaughtExceptionMonitor",j),process.removeListener("unhandledRejection",j),process.removeListener("SIGINT",R),process.removeListener("SIGTERM",R),process.removeListener("exit",B),a&&a.removeEventListener("abort",R)},E=()=>{if(C===void 0)return;l&&n.write(`
66
+ `);let P=ge(C,D,{hard:!0,trim:!1}).split(`
67
+ `);P.length>1&&n.write(Ct.cursor.up(P.length-1)),n.write(Ct.cursor.to(0)),n.write(Ct.erase.down())},O=P=>P.replace(/\.+$/,""),A=P=>{let ne=(performance.now()-P)/1e3,ve=Math.floor(ne/60),Ce=Math.floor(ne%60);return ve>0?`[${ve}m ${Ce}s]`:`[${Ce}s]`},K=c.withGuide??L.withGuide,Qt=(P="")=>{g=!0,p=Vo({output:n}),h=O(P),I=performance.now(),K&&n.write(`${d("gray",b)}
68
+ `);let ne=0,ve=0;y(),f=setInterval(()=>{if(l&&h===C)return;E(),C=h;let Ce=H(s[ne]),_t;if(l)_t=`${Ce} ${h}...`;else if(e==="timer")_t=`${Ce} ${h} ${A(I)}`;else{let wa=".".repeat(Math.floor(ve)).slice(0,3);_t=`${Ce} ${h}${wa}`}let ya=ge(_t,D,{hard:!0,trim:!1});n.write(ya),ne=ne+1<s.length?ne+1:0,ve=ve<4?ve+.125:0},i)},gt=(P="",ne=0,ve=!1)=>{if(!g)return;g=!1,clearInterval(f),E();let Ce=ne===0?d("green",pn):ne===1?d("red",Qo):d("red",_o);h=P??h,ve||(e==="timer"?n.write(`${Ce} ${h} ${A(I)}
69
+ `):n.write(`${Ce} ${h}
70
+ `)),S(),p()};return{start:Qt,stop:(P="")=>gt(P,0),message:(P="")=>{h=O(P??h)},cancel:(P="")=>gt(P,1),error:(P="")=>gt(P,2),clear:()=>gt("",0,!0),get isCancelled(){return v}}},nm={light:M("\u2500","-"),heavy:M("\u2501","="),block:M("\u2588","#")},un=(e,t)=>e.includes(`
71
+ `)?e.split(`
72
+ `).map(n=>t(n)).join(`
73
+ `):t(e),fn=e=>{let t=(n,r)=>{let o=n.label??String(n.value);switch(r){case"disabled":return`${d("gray",dn)} ${un(o,s=>d("gray",s))}${n.hint?` ${d("dim",`(${n.hint??"disabled"})`)}`:""}`;case"selected":return`${un(o,s=>d("dim",s))}`;case"active":return`${d("green",dr)} ${o}${n.hint?` ${d("dim",`(${n.hint})`)}`:""}`;case"cancelled":return`${un(o,s=>d(["strikethrough","dim"],s))}`;default:return`${d("dim",dn)} ${un(o,s=>d("dim",s))}`}};return new cn({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue,render(){let n=e.withGuide??L.withGuide,r=`${mn(this.state)} `,o=`${$o(this.state)} `,s=Te(e.output,e.message,o,r),i=`${n?`${d("gray",b)}
74
+ `:""}${s}
75
+ `;switch(this.state){case"submit":{let a=n?`${d("gray",b)} `:"",c=Te(e.output,t(this.options[this.cursor],"selected"),a);return`${i}${c}`}case"cancel":{let a=n?`${d("gray",b)} `:"",c=Te(e.output,t(this.options[this.cursor],"cancelled"),a);return`${i}${c}${n?`
76
+ ${d("gray",b)}`:""}`}default:{let a=n?`${d("cyan",b)} `:"",c=n?d("cyan",Re):"",l=i.split(`
77
+ `).length,p=n?2:1;return`${i}${a}${pr({output:e.output,cursor:this.cursor,options:this.options,maxItems:e.maxItems,columnPadding:a.length,rowPadding:l+p,style:(f,g)=>t(f,f.disabled?"disabled":g?"active":"inactive")}).join(`
78
+ ${a}`)}
79
+ ${c}
80
+ `}}}}).prompt()},rm=`${d("gray",b)} `,gn=async(e,t)=>{for(let n of e){if(n.enabled===!1)continue;let r=xt(t);r.start(n.title);let o=await n.task(r.message);r.stop(o||n.title)}}});import{readFileSync as vc,writeFileSync as rs,existsSync as os,mkdirSync as Cc}from"fs";import{join as ss,dirname as bc}from"path";import{homedir as is}from"os";var U,Pe=w(()=>{"use strict";U=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-haiku-4-5-20251001",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:String(37700+(process.getuid?.()??77)%100),CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"cli",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_GEMINI_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_GEMINI_MAX_TOKENS:"100000",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_OPENROUTER_MAX_TOKENS:"100000",CLAUDE_MEM_DATA_DIR:ss(is(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_FULL_COUNT:"0",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_WELCOME_HINT_ENABLED:"true",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_FOLDER_USE_LOCAL_MD:"false",CLAUDE_MEM_TRANSCRIPTS_ENABLED:"true",CLAUDE_MEM_TRANSCRIPTS_CONFIG_PATH:ss(is(),".claude-mem","transcript-watch.json"),CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_SEMANTIC_INJECT:"false",CLAUDE_MEM_SEMANTIC_INJECT_LIMIT:"5",CLAUDE_MEM_TIER_ROUTING_ENABLED:"true",CLAUDE_MEM_TIER_SIMPLE_MODEL:"haiku",CLAUDE_MEM_TIER_SUMMARY_MODEL:"",CLAUDE_MEM_CHROMA_ENABLED:"true",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database",CLAUDE_MEM_TELEGRAM_ENABLED:"true",CLAUDE_MEM_TELEGRAM_BOT_TOKEN:"",CLAUDE_MEM_TELEGRAM_CHAT_ID:"",CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:"security_alert",CLAUDE_MEM_TELEGRAM_TRIGGER_CONCEPTS:""};static getAllDefaults(){return{...this.DEFAULTS}}static get(t){return process.env[t]??this.DEFAULTS[t]}static getInt(t){let n=this.get(t);return parseInt(n,10)}static getBool(t){let n=this.get(t);return n==="true"||n===!0}static applyEnvOverrides(t){let n={...t};for(let r of Object.keys(this.DEFAULTS))process.env[r]!==void 0&&(n[r]=process.env[r]);return n}static loadFromFile(t){try{if(!os(t)){let i=this.getAllDefaults();try{let a=bc(t);os(a)||Cc(a,{recursive:!0}),rs(t,JSON.stringify(i,null,2),"utf-8"),console.log("[SETTINGS] Created settings file with defaults:",t)}catch(a){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",t,a instanceof Error?a.message:String(a))}return this.applyEnvOverrides(i)}let n=vc(t,"utf-8"),r=JSON.parse(n),o=r;if(r.env&&typeof r.env=="object"){o=r.env;try{rs(t,JSON.stringify(o,null,2),"utf-8"),console.log("[SETTINGS] Migrated settings file from nested to flat schema:",t)}catch(i){console.warn("[SETTINGS] Failed to auto-migrate settings file:",t,i instanceof Error?i.message:String(i))}}let s={...this.DEFAULTS};for(let i of Object.keys(this.DEFAULTS))o[i]!==void 0&&(s[i]=o[i]);return this.applyEnvOverrides(s)}catch(n){return console.warn("[SETTINGS] Failed to load settings, using defaults:",t,n instanceof Error?n.message:String(n)),this.applyEnvOverrides(this.getAllDefaults())}}}});import{appendFileSync as kc,existsSync as as,mkdirSync as Mc,readFileSync as xc}from"fs";import{join as hn}from"path";import{homedir as Tc}from"os";var fr,cs,gr,u,F=w(()=>{"use strict";fr=(s=>(s[s.DEBUG=0]="DEBUG",s[s.INFO=1]="INFO",s[s.WARN=2]="WARN",s[s.ERROR=3]="ERROR",s[s.SILENT=4]="SILENT",s))(fr||{}),cs=hn(Tc(),".claude-mem"),gr=class{level=null;useColor;logFilePath=null;logFileInitialized=!1;constructor(){this.useColor=process.stdout.isTTY??!1}ensureLogFileInitialized(){if(!this.logFileInitialized){this.logFileInitialized=!0;try{let t=hn(cs,"logs");as(t)||Mc(t,{recursive:!0});let n=new Date().toISOString().split("T")[0];this.logFilePath=hn(t,`claude-mem-${n}.log`)}catch(t){console.error("[LOGGER] Failed to initialize log file:",t instanceof Error?t.message:String(t)),this.logFilePath=null}}}getLevel(){if(this.level===null)try{let t=hn(cs,"settings.json");if(as(t)){let n=xc(t,"utf-8"),o=(JSON.parse(n).CLAUDE_MEM_LOG_LEVEL||"INFO").toUpperCase();this.level=fr[o]??1}else this.level=1}catch(t){console.error("[LOGGER] Failed to load log level from settings:",t instanceof Error?t.message:String(t)),this.level=1}return this.level}correlationId(t,n){return`obs-${t}-${n}`}sessionId(t){return`session-${t}`}formatData(t){if(t==null)return"";if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean")return t.toString();if(typeof t=="object"){if(t instanceof Error)return this.getLevel()===0?`${t.message}
81
+ ${t.stack}`:t.message;if(Array.isArray(t))return`[${t.length} items]`;let n=Object.keys(t);return n.length===0?"{}":n.length<=3?JSON.stringify(t):`{${n.length} keys: ${n.slice(0,3).join(", ")}...}`}return String(t)}formatTool(t,n){if(!n)return t;let r=n;if(typeof n=="string")try{r=JSON.parse(n)}catch{r=n}if(t==="Bash"&&r.command)return`${t}(${r.command})`;if(r.file_path)return`${t}(${r.file_path})`;if(r.notebook_path)return`${t}(${r.notebook_path})`;if(t==="Glob"&&r.pattern)return`${t}(${r.pattern})`;if(t==="Grep"&&r.pattern)return`${t}(${r.pattern})`;if(r.url)return`${t}(${r.url})`;if(r.query)return`${t}(${r.query})`;if(t==="Task"){if(r.subagent_type)return`${t}(${r.subagent_type})`;if(r.description)return`${t}(${r.description})`}return t==="Skill"&&r.skill?`${t}(${r.skill})`:t==="LSP"&&r.operation?`${t}(${r.operation})`:t}formatTimestamp(t){let n=t.getFullYear(),r=String(t.getMonth()+1).padStart(2,"0"),o=String(t.getDate()).padStart(2,"0"),s=String(t.getHours()).padStart(2,"0"),i=String(t.getMinutes()).padStart(2,"0"),a=String(t.getSeconds()).padStart(2,"0"),c=String(t.getMilliseconds()).padStart(3,"0");return`${n}-${r}-${o} ${s}:${i}:${a}.${c}`}log(t,n,r,o,s){if(t<this.getLevel())return;this.ensureLogFileInitialized();let i=this.formatTimestamp(new Date),a=fr[t].padEnd(5),c=n.padEnd(6),l="";o?.correlationId?l=`[${o.correlationId}] `:o?.sessionId&&(l=`[session-${o.sessionId}] `);let p="";if(s!=null)if(s instanceof Error)p=this.getLevel()===0?`
82
+ ${s.message}
83
+ ${s.stack}`:` ${s.message}`;else if(this.getLevel()===0&&typeof s=="object")try{p=`
84
+ `+JSON.stringify(s,null,2)}catch{p=" "+this.formatData(s)}else p=" "+this.formatData(s);let f="";if(o){let{sessionId:v,memorySessionId:h,correlationId:C,...I}=o;Object.keys(I).length>0&&(f=` {${Object.entries(I).map(([H,B])=>`${H}=${B}`).join(", ")}}`)}let g=`[${i}] [${a}] [${c}] ${l}${r}${f}${p}`;if(this.logFilePath)try{kc(this.logFilePath,g+`
85
+ `,"utf8")}catch(v){process.stderr.write(`[LOGGER] Failed to write to log file: ${v instanceof Error?v.message:String(v)}
86
+ `)}else process.stderr.write(g+`
87
+ `)}debug(t,n,r,o){this.log(0,t,n,r,o)}info(t,n,r,o){this.log(1,t,n,r,o)}warn(t,n,r,o){this.log(2,t,n,r,o)}error(t,n,r,o){this.log(3,t,n,r,o)}dataIn(t,n,r,o){this.info(t,`\u2192 ${n}`,r,o)}dataOut(t,n,r,o){this.info(t,`\u2190 ${n}`,r,o)}success(t,n,r,o){this.info(t,`\u2713 ${n}`,r,o)}failure(t,n,r,o){this.error(t,`\u2717 ${n}`,r,o)}timing(t,n,r,o){this.info(t,`\u23F1 ${n}`,o,{duration:`${r}ms`})}happyPathError(t,n,r,o,s=""){let l=((new Error().stack||"").split(`
88
+ `)[2]||"").match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/),p=l?`${l[1].split("/").pop()}:${l[2]}`:"unknown",f={...r,location:p};return this.warn(t,`[HAPPY-PATH] ${n}`,f,o),s}},u=new gr});import{join as V,dirname as Rc,basename as Ic}from"path";import{homedir as ls}from"os";import{existsSync as Oc,mkdirSync as Sm}from"fs";import{execSync as ym}from"child_process";import{fileURLToPath as Pc}from"url";function Dc(){return typeof __dirname<"u"?__dirname:Rc(Pc(import.meta.url))}function Nc(){if(process.env.CLAUDE_MEM_DATA_DIR)return process.env.CLAUDE_MEM_DATA_DIR;let e=V(ls(),".claude-mem"),t=V(e,"settings.json");try{if(Oc(t)){let{readFileSync:n}=xa("fs"),r=JSON.parse(n(t,"utf-8")),o=r.env??r;if(o.CLAUDE_MEM_DATA_DIR)return o.CLAUDE_MEM_DATA_DIR}}catch{}return e}var Cm,_,Xe,Tt,bm,km,Mm,xm,Tm,Sn,Rm,Im,Ac,Om,Pm,Dm,Nm,Ge=w(()=>{"use strict";F();Cm=Dc();_=Nc(),Xe=process.env.CLAUDE_CONFIG_DIR||V(ls(),".claude"),Tt=V(Xe,"plugins","marketplaces","thedotmack"),bm=V(_,"archives"),km=V(_,"logs"),Mm=V(_,"trash"),xm=V(_,"backups"),Tm=V(_,"modes"),Sn=V(_,"settings.json"),Rm=V(_,"claude-mem.db"),Im=V(_,"vector-db"),Ac=V(_,"observer-sessions"),Om=Ic(Ac),Pm=V(Xe,"settings.json"),Dm=V(Xe,"commands"),Nm=V(Xe,"CLAUDE.md")});function us(e){return process.platform==="win32"?Math.round(e*$.WINDOWS_MULTIPLIER):e}var $,Rt=w(()=>{"use strict";$={DEFAULT:3e5,HEALTH_CHECK:3e3,POST_SPAWN_WAIT:15e3,READINESS_WAIT:3e4,PORT_IN_USE_WAIT:3e3,WORKER_STARTUP_WAIT:1e3,PRE_RESTART_SETTLE_DELAY:2e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5}});function hr(e=process.env){let t={};for(let[n,r]of Object.entries(e))if(r!==void 0){if(jc.has(n)){t[n]=r;continue}Uc.has(n)||Wc.has(n)||Lc.some(o=>n.startsWith(o))||(t[n]=r)}return t}var Lc,Uc,Wc,jc,Sr=w(()=>{"use strict";Lc=["CLAUDECODE_","CLAUDE_CODE_"],Uc=new Set(["CLAUDECODE","CLAUDE_CODE_SESSION","CLAUDE_CODE_ENTRYPOINT","MCP_SESSION_ID"]),Wc=new Set(["HTTP_PROXY","HTTPS_PROXY","ALL_PROXY","NO_PROXY","http_proxy","https_proxy","all_proxy","no_proxy","npm_config_proxy","npm_config_https_proxy"]),jc=new Set(["CLAUDE_CODE_OAUTH_TOKEN","CLAUDE_CODE_GIT_BASH_PATH","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX","ANTHROPIC_BEDROCK_BASE_URL","AWS_REGION","AWS_PROFILE","AWS_ACCESS_KEY_ID","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN","ANTHROPIC_VERTEX_PROJECT_ID","CLOUD_ML_REGION","GOOGLE_APPLICATION_CREDENTIALS"])});import{spawn as Fm,spawnSync as Fc}from"child_process";import{existsSync as Gc,mkdirSync as ds,readFileSync as ps,writeFileSync as Jc}from"fs";import{homedir as Hc}from"os";import En from"path";function he(e){if(!Number.isInteger(e)||e<0||e===0)return!1;try{return process.kill(e,0),!0}catch(t){if(t instanceof Error){let n=t.code;return n==="EPERM"?!0:(u.debug("SYSTEM","PID check failed",{pid:e,code:n}),!1)}return u.warn("SYSTEM","PID check threw non-Error",{pid:e,error:String(t)}),!1}}function ms(e){if(!Number.isInteger(e)||e<=0)return null;if(process.platform==="linux")try{let t=ps(`/proc/${e}/stat`,"utf-8"),n=t.lastIndexOf(") ");if(n<0)return null;let o=t.slice(n+2).split(" ")[19];return o&&/^\d+$/.test(o)?o:null}catch(t){return u.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:e,error:t instanceof Error?t.message:String(t)}),null}if(process.platform==="win32")return null;try{let t=Fc("ps",["-p",String(e),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...process.env,LC_ALL:"C",LANG:"C"}});if(t.status!==0)return null;let n=t.stdout.trim();return n.length>0?n:null}catch(t){return u.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:e,error:t instanceof Error?t.message:String(t)}),null}}function wr(e){if(!e||!he(e.pid))return!1;if(!e.startToken)return!0;let t=ms(e.pid);if(t===null)return!0;let n=t===e.startToken;return n||u.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:e.pid,stored:e.startToken,current:t}),n}function yn(){return Er||(Er=new yr),Er}var Bc,Kc,Yc,Vc,yr,Er,It=w(()=>{"use strict";F();Sr();Bc=5e3,Kc=1e3,Yc=En.join(Hc(),".claude-mem"),Vc=En.join(Yc,"supervisor.json");yr=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;constructor(t=Vc){this.registryPath=t}initialize(){if(this.initialized)return;if(this.initialized=!0,ds(En.dirname(this.registryPath),{recursive:!0}),!Gc(this.registryPath)){this.persist();return}try{let r=JSON.parse(ps(this.registryPath,"utf-8")).processes??{};for(let[o,s]of Object.entries(r))this.entries.set(o,s)}catch(n){n instanceof Error?u.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},n):u.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(n)}),this.entries.clear()}let t=this.pruneDeadEntries();t>0&&u.info("SYSTEM","Removed dead processes from supervisor registry",{removed:t}),this.persist()}register(t,n,r){this.initialize(),this.entries.set(t,n),r&&this.runtimeProcesses.set(t,r),this.persist()}unregister(t){this.initialize(),this.entries.delete(t),this.runtimeProcesses.delete(t),this.persist()}clear(){this.entries.clear(),this.runtimeProcesses.clear(),this.persist()}getAll(){return this.initialize(),Array.from(this.entries.entries()).map(([t,n])=>({id:t,...n})).sort((t,n)=>{let r=Date.parse(t.startedAt),o=Date.parse(n.startedAt);return(Number.isNaN(r)?0:r)-(Number.isNaN(o)?0:o)})}getBySession(t){let n=String(t);return this.getAll().filter(r=>r.sessionId!==void 0&&String(r.sessionId)===n)}getRuntimeProcess(t){return this.runtimeProcesses.get(t)}getByPid(t){return this.getAll().filter(n=>n.pid===t)}pruneDeadEntries(){this.initialize();let t=0;for(let[n,r]of this.entries)he(r.pid)||(this.entries.delete(n),this.runtimeProcesses.delete(n),t+=1);return t>0&&this.persist(),t}async reapSession(t){this.initialize();let n=this.getBySession(t);if(n.length===0)return 0;let r=typeof t=="number"?t:Number(t)||void 0;u.info("SYSTEM",`Reaping ${n.length} process(es) for session ${t}`,{sessionId:r,pids:n.map(a=>a.pid)});let o=n.filter(a=>he(a.pid));for(let a of o)try{typeof a.pgid=="number"&&process.platform!=="win32"?process.kill(-a.pgid,"SIGTERM"):process.kill(a.pid,"SIGTERM")}catch(c){c instanceof Error?c.code!=="ESRCH"&&u.debug("SYSTEM",`Failed to SIGTERM session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},c):u.warn("SYSTEM",`Failed to SIGTERM session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(c)})}let s=Date.now()+Bc;for(;Date.now()<s&&o.filter(c=>he(c.pid)).length!==0;)await new Promise(c=>setTimeout(c,100));let i=o.filter(a=>he(a.pid));for(let a of i){u.warn("SYSTEM",`Session process PID ${a.pid} did not exit after SIGTERM, sending SIGKILL`,{pid:a.pid,pgid:a.pgid,sessionId:r});try{typeof a.pgid=="number"&&process.platform!=="win32"?process.kill(-a.pgid,"SIGKILL"):process.kill(a.pid,"SIGKILL")}catch(c){c instanceof Error?c.code!=="ESRCH"&&u.debug("SYSTEM",`Failed to SIGKILL session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},c):u.warn("SYSTEM",`Failed to SIGKILL session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(c)})}}if(i.length>0){let a=Date.now()+Kc;for(;Date.now()<a&&i.filter(l=>he(l.pid)).length!==0;)await new Promise(l=>setTimeout(l,100))}for(let a of n)this.entries.delete(a.id),this.runtimeProcesses.delete(a.id);return this.persist(),u.info("SYSTEM",`Reaped ${n.length} process(es) for session ${t}`,{sessionId:r,reaped:n.length}),n.length}persist(){let t={processes:Object.fromEntries(this.entries.entries())};ds(En.dirname(this.registryPath),{recursive:!0}),Jc(this.registryPath,JSON.stringify(t,null,2))}},Er=null});import{execFile as zc}from"child_process";import{rmSync as Zc}from"fs";import{homedir as qc}from"os";import hs from"path";import{promisify as Xc}from"util";async function Ss(e){let t=e.currentPid??process.pid,n=e.pidFilePath??$c,r=e.registry.getAll(),o=[...r].filter(i=>i.pid!==t).sort((i,a)=>Date.parse(a.startedAt)-Date.parse(i.startedAt));for(let i of o){if(!he(i.pid)){e.registry.unregister(i.id);continue}try{await gs(i,"SIGTERM")}catch(a){a instanceof Error?u.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:i.pid,pgid:i.pgid,type:i.type},a):u.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:i.pid,pgid:i.pgid,type:i.type,error:String(a)})}}await fs(o,5e3);let s=o.filter(i=>he(i.pid));for(let i of s)try{await gs(i,"SIGKILL")}catch(a){a instanceof Error?u.debug("SYSTEM","Failed to force kill child process",{pid:i.pid,pgid:i.pgid,type:i.type},a):u.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:i.pid,pgid:i.pgid,type:i.type,error:String(a)})}await fs(s,1e3);for(let i of o)e.registry.unregister(i.id);for(let i of r.filter(a=>a.pid===t))e.registry.unregister(i.id);try{Zc(n,{force:!0})}catch(i){i instanceof Error?u.debug("SYSTEM","Failed to remove PID file during shutdown",{pidFilePath:n},i):u.warn("SYSTEM","Failed to remove PID file during shutdown (non-Error)",{pidFilePath:n,error:String(i)})}e.registry.pruneDeadEntries()}async function fs(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(e.filter(o=>he(o.pid)).length===0)return;await new Promise(o=>setTimeout(o,100))}}async function gs(e,t){let{pid:n,pgid:r}=e;if(process.platform!=="win32"){try{typeof r=="number"?process.kill(-r,t):process.kill(n,t)}catch(i){if(i instanceof Error&&i.code==="ESRCH")return;throw i}return}if(t==="SIGTERM"){try{process.kill(n,t)}catch(i){if(i instanceof Error&&i.code==="ESRCH")return;throw i}return}let o=await el();if(o){await new Promise((i,a)=>{o(n,t,c=>{if(!c){i();return}if(c.code==="ESRCH"){i();return}a(c)})});return}let s=["/PID",String(n),"/T"];t==="SIGKILL"&&s.push("/F"),await Qc("taskkill",s,{timeout:$.POWERSHELL_COMMAND,windowsHide:!0})}async function el(){let e="tree-kill";try{let t=await import(e);return t.default??t}catch(t){return u.debug("SYSTEM","tree-kill module not available, using fallback",{},t instanceof Error?t:void 0),null}}var Qc,_c,$c,Es=w(()=>{"use strict";F();Rt();It();Qc=Xc(zc),_c=hs.join(qc(),".claude-mem"),$c=hs.join(_c,"worker.pid")});function tl(){let t=yn().pruneDeadEntries();t>0&&u.info("SYSTEM",`Health check: pruned ${t} dead process(es) from registry`)}function ws(){Qe===null&&(Qe=setInterval(tl,ys),Qe.unref(),u.debug("SYSTEM","Health checker started",{intervalMs:ys}))}function vs(){Qe!==null&&(clearInterval(Qe),Qe=null,u.debug("SYSTEM","Health checker stopped"))}var ys,Qe,Cs=w(()=>{"use strict";F();It();ys=3e4,Qe=null});import{existsSync as nl,readFileSync as rl,rmSync as bs}from"fs";import{homedir as ol}from"os";import ks from"path";function Ms(){return al}function wn(e={}){let t=e.pidFilePath??il;if(!nl(t))return"missing";let n=null;try{n=JSON.parse(rl(t,"utf-8"))}catch(o){return o instanceof Error?u.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:t},o):u.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:t,error:String(o)}),bs(t,{force:!0}),"invalid"}return wr(n)&&n?((e.logAlive??!0)&&u.info("SYSTEM","Worker already running (PID alive)",{existingPid:n.pid,existingPort:n.port,startedAt:n.startedAt}),"alive"):(u.info("SYSTEM","Removing stale PID file (worker process is dead or PID has been reused)",{pid:n?.pid,port:n?.port,startedAt:n?.startedAt}),bs(t,{force:!0}),"stale")}var sl,il,vr,al,Cr=w(()=>{"use strict";F();It();Es();Cs();sl=ks.join(ol(),".claude-mem"),il=ks.join(sl,"worker.pid"),vr=class{registry;started=!1;stopPromise=null;signalHandlersRegistered=!1;shutdownInitiated=!1;shutdownHandler=null;constructor(t){this.registry=t}async start(){if(this.started)return;if(this.registry.initialize(),wn({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,ws()}configureSignalHandlers(t){if(this.shutdownHandler=t,this.signalHandlersRegistered)return;this.signalHandlersRegistered=!0;let n=async r=>{if(this.shutdownInitiated){u.warn("SYSTEM",`Received ${r} but shutdown already in progress`);return}this.shutdownInitiated=!0,u.info("SYSTEM",`Received ${r}, shutting down...`);try{this.shutdownHandler?await this.shutdownHandler():await this.stop()}catch(o){o instanceof Error?u.error("SYSTEM","Error during shutdown",{},o):u.error("SYSTEM","Error during shutdown (non-Error)",{error:String(o)});try{await this.stop()}catch(s){s instanceof Error?u.debug("SYSTEM","Supervisor shutdown fallback failed",{},s):u.debug("SYSTEM","Supervisor shutdown fallback failed",{error:String(s)})}}process.exit(0)};process.on("SIGTERM",()=>{n("SIGTERM")}),process.on("SIGINT",()=>{n("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{u.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{n("SIGHUP")}))}async stop(){if(this.stopPromise){await this.stopPromise;return}vs(),this.stopPromise=Ss({registry:this.registry,currentPid:process.pid}).finally(()=>{this.started=!1,this.stopPromise=null}),await this.stopPromise}assertCanSpawn(t){if(this.stopPromise!==null)throw new Error(`Supervisor is shutting down, refusing to spawn ${t}`)}registerProcess(t,n,r){this.registry.register(t,n,r)}unregisterProcess(t){this.registry.unregister(t)}getRegistry(){return this.registry}},al=new vr(yn())});import De from"path";import{homedir as Rs}from"os";import{existsSync as kr,writeFileSync as hf,readFileSync as Sf,unlinkSync as Ef,mkdirSync as yf,rmSync as wf,statSync as vf,utimesSync as cl,copyFileSync as Cf}from"fs";import{exec as ll,execSync as Is,spawn as ul,spawnSync as kf}from"child_process";import{promisify as dl}from"util";function Ts(e){return e?/(^|[\\/])bun(\.exe)?$/i.test(e.trim()):!1}function ml(e,t){let n=t==="win32"?`where ${e}`:`which ${e}`,r;try{r=Is(n,{stdio:["ignore","pipe","ignore"],encoding:"utf-8",windowsHide:!0})}catch(s){return s instanceof Error?u.debug("SYSTEM",`Binary lookup failed for ${e}`,{command:n},s):u.debug("SYSTEM",`Binary lookup failed for ${e}`,{command:n},new Error(String(s))),null}return r.split(/\r?\n/).map(s=>s.trim()).find(s=>s.length>0)||null}function fl(e={}){let t=Object.keys(e).length===0;if(t&&br!==void 0)return br;let n=gl(e);return t&&n!==null&&(br=n),n}function gl(e){let t=e.platform??process.platform,n=e.execPath??process.execPath;if(Ts(n))return n;let r=e.env??process.env,o=e.homeDirectory??Rs(),s=e.pathExists??kr,i=e.lookupInPath??ml,a=t==="win32"?[r.BUN,r.BUN_PATH,De.join(o,".bun","bin","bun.exe"),De.join(o,".bun","bin","bun"),r.USERPROFILE?De.join(r.USERPROFILE,".bun","bin","bun.exe"):void 0,r.LOCALAPPDATA?De.join(r.LOCALAPPDATA,"bun","bun.exe"):void 0,r.LOCALAPPDATA?De.join(r.LOCALAPPDATA,"bun","bin","bun.exe"):void 0]:[r.BUN,r.BUN_PATH,De.join(o,".bun","bin","bun"),"/usr/local/bin/bun","/opt/homebrew/bin/bun","/home/linuxbrew/.linuxbrew/bin/bun","/usr/bin/bun","/snap/bin/bun"];for(let c of a){let l=c?.trim();if(l&&(Ts(l)&&s(l)||l.toLowerCase()==="bun"))return l}return i("bun",t)}function Ne(e){return process.platform==="win32"?Math.round(e*2):e}function Os(e,t,n={}){Ms().assertCanSpawn("worker daemon");let r=hr({...process.env,CLAUDE_MEM_WORKER_PORT:String(t),...n}),o=fl();if(!o){u.error("SYSTEM","Bun runtime not found \u2014 install from https://bun.sh and ensure it is on PATH or set BUN env var. The worker daemon requires Bun because it uses bun:sqlite.");return}if(process.platform==="win32"){let p=`Start-Process -FilePath '${o.replace(/'/g,"''")}' -ArgumentList @('${e.replace(/'/g,"''")}','--daemon') -WindowStyle Hidden`,f=Buffer.from(p,"utf16le").toString("base64");try{return Is(`powershell -NoProfile -EncodedCommand ${f}`,{stdio:"ignore",windowsHide:!0,env:r}),0}catch(g){u.error("SYSTEM","Failed to spawn worker daemon on Windows",{runtimePath:o},g instanceof Error?g:new Error(String(g)));return}}let s="/usr/bin/setsid",i=kr(s),l=ul(i?s:o,i?[o,e,"--daemon"]:[e,"--daemon"],{detached:!0,stdio:"ignore",env:r});if(l.pid!==void 0)return l.unref(),l.pid}function Ps(){try{if(!kr(xs))return;let e=new Date;cl(xs,e,e)}catch{}}function Ds(){return wn({logAlive:!1})}var Of,pl,xs,br,Ns=w(()=>{"use strict";F();Rt();Sr();Cr();It();Of=dl(ll),pl=De.join(Rs(),".claude-mem"),xs=De.join(pl,"worker.pid")});import Af from"path";import hl from"net";import{readFileSync as Wf}from"fs";async function Sl(e,t,n="GET"){let r=await fetch(`http://127.0.0.1:${e}${t}`,{method:n}),o="";try{o=await r.text()}catch{}return{ok:r.ok,statusCode:r.status,body:o}}async function As(e){if(process.platform==="win32")try{return(await fetch(`http://127.0.0.1:${e}/api/health`)).ok}catch(t){return t instanceof Error?u.debug("SYSTEM","Windows health check failed (port not in use)",{},t):u.debug("SYSTEM","Windows health check failed (port not in use)",{error:String(t)}),!1}return new Promise(t=>{let n=hl.createServer();n.once("error",r=>{r.code==="EADDRINUSE"?t(!0):t(!1)}),n.once("listening",()=>{n.close(()=>t(!1))}),n.listen(e,"127.0.0.1")})}async function Ls(e,t,n,r){let o=Date.now();for(;Date.now()-o<n;){try{if((await Sl(e,t)).ok)return!0}catch(s){s instanceof Error?u.debug("SYSTEM",r,{},s):u.debug("SYSTEM",r,{error:String(s)})}await new Promise(s=>setTimeout(s,500))}return!1}function Ot(e,t=3e4){return Ls(e,"/api/health",t,"Service not ready yet, will retry")}function Pt(e,t=3e4){return Ls(e,"/api/readiness",t,"Worker not ready yet, will retry")}var Us=w(()=>{"use strict";F();Ge()});import Ws from"path";import{existsSync as Mr,mkdirSync as El,writeFileSync as yl,unlinkSync as wl,statSync as vl}from"fs";function xr(){return Ws.join(U.get("CLAUDE_MEM_DATA_DIR"),".worker-start-attempted")}function bl(){if(process.platform!=="win32")return!1;let e=xr();if(!Mr(e))return!1;try{let t=vl(e).mtimeMs;return Date.now()-t<Cl}catch(t){return t instanceof Error?u.debug("SYSTEM","Could not stat worker spawn lock file",{},t):u.debug("SYSTEM","Could not stat worker spawn lock file",{error:String(t)}),!1}}function kl(){if(process.platform==="win32")try{let e=xr();El(Ws.dirname(e),{recursive:!0}),yl(e,"","utf-8")}catch{}}function vn(){if(process.platform==="win32")try{let e=xr();Mr(e)&&wl(e)}catch{}}async function js(e,t){if(!t)return u.error("SYSTEM","ensureWorkerStarted called with empty workerScriptPath \u2014 caller bug"),"dead";if(!Mr(t))return u.error("SYSTEM","ensureWorkerStarted: worker script not found at expected path \u2014 likely a partial install or build artifact missing",{workerScriptPath:t}),"dead";if(Ds()==="alive"){if(u.info("SYSTEM","Worker PID file points to a live process, skipping duplicate spawn"),await Ot(e,Ne($.PORT_IN_USE_WAIT))){vn();let c=await Pt(e,Ne($.READINESS_WAIT));return u.info("SYSTEM","Worker became healthy while waiting on live PID"),c?"ready":"warming"}return u.warn("SYSTEM","Live PID detected but worker did not become healthy before timeout \u2014 likely still starting"),"warming"}if(await Ot(e,1e3)){vn();let a=await Pt(e,Ne($.READINESS_WAIT));return a||u.warn("SYSTEM","Worker is alive but readiness timed out \u2014 proceeding anyway"),u.info("SYSTEM","Worker already running and healthy"),a?"ready":"warming"}if(await As(e)){if(u.info("SYSTEM","Port in use, waiting for worker to become healthy"),await Ot(e,Ne($.PORT_IN_USE_WAIT))){vn();let c=await Pt(e,Ne($.READINESS_WAIT));return u.info("SYSTEM","Worker is now healthy"),c?"ready":"warming"}return u.error("SYSTEM","Port in use but worker not responding to health checks"),"dead"}if(bl())return u.warn("SYSTEM","Worker unavailable on Windows \u2014 skipping spawn (recent attempt failed within cooldown)"),"dead";if(u.info("SYSTEM","Starting worker daemon",{workerScriptPath:t}),kl(),Os(t,e)===void 0)return u.error("SYSTEM","Failed to spawn worker daemon"),"dead";if(!await Ot(e,Ne($.POST_SPAWN_WAIT)))return u.warn("SYSTEM","Worker spawned but health endpoint not responding within window \u2014 likely still starting in background"),"warming";let i=await Pt(e,Ne($.READINESS_WAIT));return i||u.warn("SYSTEM","Worker is alive but readiness timed out \u2014 proceeding anyway"),vn(),Ps(),u.info("SYSTEM","Worker started successfully"),i?"ready":"warming"}var Cl,Fs=w(()=>{"use strict";F();Rt();Pe();Ns();Us();Cl=120*1e3});import{existsSync as $e,readFileSync as Gs,writeFileSync as Ml}from"fs";import{execSync as Dt,spawnSync as Cn}from"child_process";import{join as de}from"path";import{homedir as _e}from"os";function Js(e){return de(e,".install-version")}function Tr(){try{if(Cn("bun",["--version"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"],shell:se}).status===0)return"bun"}catch{}return xl.find($e)||null}function Hs(){return Tr()!==null}function Bs(){let e=Tr();if(!e)return null;try{let t=Cn(e,["--version"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"],shell:se});return t.status===0?t.stdout.trim():null}catch{return null}}function Rr(){try{if(Cn("uv",["--version"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"],shell:se}).status===0)return"uv"}catch{}return Tl.find($e)||null}function Ks(){return Rr()!==null}function Rl(){let e=Rr();if(!e)return null;try{let t=Cn(e,["--version"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"],shell:se});return t.status===0?t.stdout.trim():null}catch{return null}}function Ir(e){if(e&&typeof e=="object"){let t=e,n=[];t.message&&n.push(t.message);let r=t.stderr?t.stderr.toString().trim():"";r&&n.push(`stderr: ${r}`);let o=t.stdout?t.stdout.toString().trim():"";return!r&&o&&n.push(`stdout: ${o}`),n.join(`
89
+ `)}return String(e)}function Il(){try{if(se?Dt('powershell -c "irm bun.sh/install.ps1 | iex"',{stdio:"pipe",shell:process.env.ComSpec??"cmd.exe"}):Dt("curl -fsSL https://bun.sh/install | bash",{stdio:"pipe",shell:"/bin/bash"}),!Hs())throw new Error("Bun installation completed but binary not found. Please restart your terminal and try again.")}catch(e){let t=se?` - winget install Oven-sh.Bun
90
+ - Or: powershell -c "irm bun.sh/install.ps1 | iex"`:` - curl -fsSL https://bun.sh/install | bash
91
+ - Or: brew install oven-sh/bun/bun`;throw new Error(`Failed to install Bun. Please install manually:
92
+ ${t}
93
+ Then restart your terminal and try again.
94
+ Underlying error: ${Ir(e)}`)}}function Ol(){try{if(se?Dt('powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"',{stdio:"pipe",shell:process.env.ComSpec??"cmd.exe"}):Dt("curl -LsSf https://astral.sh/uv/install.sh | sh",{stdio:"pipe",shell:"/bin/bash"}),!Ks())throw new Error("uv installation completed but binary not found. Please restart your terminal and try again.")}catch(e){let t=se?` - winget install astral-sh.uv
95
+ - Or: powershell -c "irm https://astral.sh/uv/install.ps1 | iex"`:` - curl -LsSf https://astral.sh/uv/install.sh | sh
96
+ - Or: brew install uv (macOS)`;throw new Error(`Failed to install uv. Please install manually:
97
+ ${t}
98
+ Then restart your terminal and try again.
99
+ Underlying error: ${Ir(e)}`)}}function Pl(e){let t=JSON.parse(Gs(de(e,"package.json"),"utf-8")),n=Object.keys(t.dependencies||{}),r=[];for(let o of n){let s=de(e,"node_modules",...o.split("/"));$e(s)||r.push(o)}if(r.length>0)throw new Error(`Post-install check failed: missing modules: ${r.join(", ")}`)}async function Nt(){Hs()||Il();let e=Tr();if(!e)throw new Error("Bun executable not found after install attempt.");let t=Bs();if(!t)throw new Error("Bun installed but version probe failed.");return{bunPath:e,version:t}}async function Or(){Ks()||Ol();let e=Rr();if(!e)throw new Error("uv executable not found after install attempt.");let t=Rl();if(!t)throw new Error("uv installed but version probe failed.");return{uvPath:e,version:t}}async function Pr(e,t){if(!$e(de(e,"package.json")))throw new Error(`installPluginDependencies: no package.json at ${e}`);let n=se&&t.includes(" ")?`"${t}"`:t;try{Dt(`${n} install`,{cwd:e,stdio:"pipe",...se?{shell:process.env.ComSpec??"cmd.exe"}:{}})}catch(r){throw new Error(`bun install failed in ${e}
100
+ ${Ir(r)}`)}Pl(e)}function Dl(e){let t=Js(e);if(!$e(t))return null;try{return JSON.parse(Gs(t,"utf-8"))}catch{return null}}function Dr(e,t,n,r){let o={version:t,bun:n,uv:r,installedAt:new Date().toISOString()};Ml(Js(e),JSON.stringify(o))}function Ys(e,t){if(!$e(de(e,"node_modules")))return!1;let n=Dl(e);if(!n||n.version!==t)return!1;let r=Bs();return!(r&&n.bun&&r!==n.bun)}var se,xl,Tl,Vs=w(()=>{"use strict";se=process.platform==="win32",xl=se?[de(_e(),".bun","bin","bun.exe")]:[de(_e(),".bun","bin","bun"),"/usr/local/bin/bun","/opt/homebrew/bin/bun"],Tl=se?[de(_e(),".local","bin","uv.exe"),de(_e(),".cargo","bin","uv.exe")]:[de(_e(),".local","bin","uv"),de(_e(),".cargo","bin","uv"),"/usr/local/bin/uv","/opt/homebrew/bin/uv"]});var Ae,zs=w(()=>{"use strict";Ae={compressed:"7P1PruSs0y/66nRrFEsydEDiTmBz5amcCRwd6XZoMa3Vr5Fd4b9AfAODE5xZzy/r1X733qvqqTKZNob4EBE/P+/99efnewF3fv2f/9//+3//P/9fr/326//8f5YfmOO3zPrzv79m+61Hrs2s//jf3/XfPq8q+Y3jx/sPdfrHjz/899ffvvo/Nz7P9UqWfze+oOj30dVHQzo+B2PMsKtd/12dfe37R5xcjTn+LLrq+KJN8g15f+O2+dM6BEnu3ePGjq/u+BEYw/nfJpcf3UvG0P9+zD2UfITxzXOO4PwpGAL5EfhKTXq7+huj+nNzsjHpfZ5MM3QM5zdwXmvymaRTQvZ7/cZhoqcl+7DOEUT/ePSR4yedTrX5bNf06P9peOJt8s/Qb8X8MDMVuo/w7IX+6/wuaPuq/rTNB2BGW64mmo8MeJxM8RHL5xKT3KDHjG2iuzf8T8Mw/9S/sxV4XYBnxMQ3aPZmjH5y/peG/1H0xe7ze/tD9+fu97g/D3CUyQ999L+iDyJaD0Rfi+m/IDifM/zo++yuyS8+/mSXj/r2xdbP0/GERSaHi4UYuBNMPDCz3i/ph77/ey1j+9OydtTgrZasCemvc8kWX2vyH0X3+jaCpkf8T9Oihv1smI8f/wfJdJQ/3Z2vfvt7Vf7Jm/hWOP/Hwy8huYeSRyr+b/t/5slqNX4g1jvCRItB5iuIZ5vsVkN3//GK6D2ebGGFbgsD3tHZUgqtvvLrTL/X6O1at35peK0rDV81eK/4A1bG7KKSLnHyV2j879x5dzRMXC7bNeX3GVzBZO+Zix3CT+FVmP1O62AbBpotYOIFNrtLMWShBr9x+PnRpyybkjovYtAedPuZBXcy3ovB1XI8scA1ezYa7ue91g7H30/32mkAIJpT09uK2dxxm77ozQv2XM0PaP1Wdr8emy2+z5uX/1qz3+Fuy/0bT1+Ubbvalwd0jgdvU+l+ia6K0P2avSPyuWZgDALGVHBgxJDRg3EatPpDs9LQgGP2csDRIrSBJ5Pm39/oUUXPV2sosjlAxL1g0aSRTmp0WZUsrO48QV3C6mDpBd/GxyLKgJXvl0D+mQv4v75fwQv/rXnfBdQy2EuBmGcZLI/1mfcgGH0vNRPYdv23PviP87A776HmVY7rD2KGhGbOz8WMIZcfEmGo9jB/j8PY3xinYQU46eJh/k0cln9ZL3jYrUVRwwbdahDypiY6DMTAZNI/osR5GFxnt3qYAcR0YJgpTO59nMhaMK8ClTXwayCX/kMmNuZZS3AkWzp0GiH9Bn8iCYsuoELCaoKcAxhMaRyja3Yw/24GIwd6eAfzBo5r+xvexmA/dQzmDwFACFZ+L3VEJFdcMN0gMETgXS88iqbBlYXJgxKt/uWH8hc+1ULvBJa/PKtf8EDCYPsqHAkCL+58PJfyhQ6B3NywNKxWnEar01YE8y8a2JgF8v63q8KCpRuBwZdnOln7Mf61/ctpyN084F/MpzpSv/TT+mU8Dh/rEd9kfGtmX4PGG3DTy75AOGI8fPmMicwL7pX+hknI4Uak7dWhnLdmpXjRg0Ae4gQDXndWs82BIN9bu3yZWwdHFplYLAeWrE16Ql3pbPKp0oWPqaNtyUcRV77jMMN3cV9h+SLXR16AMeZtF7BNkf8Gcv2Ukct8nnGRQ/K+Ubhufuz/y8QF3zxDjGtUXtEu3+xT0AG5Up9jFhn/CeXqvJL+LynXdnracLDlX3YtwsDDXAvEiQp+2yHPq9a1TNcBhlCfgTFHRhFqXevq8UqXA81P2J/b32AGW/6TXUv6atdCn+cHqRafuVKBWnxuWPfEqOMvhokgV6bl80oGtaJlOlz79lmpfqJFA980kN/runU+hzdkc2V3TfZmaM1ubJhamLc1TOYy1ZpFv5Hzbm/i/zbI0kwtBdaxPGYs36pYTZNTC2Ohd4opM5b/lxRLW7w4OW4xuEJ5AbFgeld2s/cdotc3BCv/fvS1YP1cClbjS/SuX5kTCczLfMXuwenEpccIXTNeoTjzLb3KYgg3d9mt5KM1vsibfOWRQvsH6MpqGCiDoPWKXfHRuJGBgwflyvsn3YpuDrrAlf8otzINbOUfVyu4D/qpU6sHtmlfM/my1Zet/kG2MngpkIcRM7Qiyy8z+LL3Zbv+h8zKULPiQoSvoNWNr+BP6xiU1gWzKm13b6KV/8fM6qfCrPyTZMXs26rMyr+FrPaZRmu6q4FW042sem52oueljqx+7pEV3cfc24o2xEysbjMrYHKGPFMtYGVaN3ANBfs0V+6xAFbQI5rJKg97NtaebSjql3x/xpjCMCvIqpQY2F2sNHzJfCJYpe8286JRwROSIPz4oFH5JqIyOBpSfYP/qZ6dSs9Nk0/91MS0e123yibVbON+W6h8XkS0wxWbJ4CKvrQbFx03eKqIlK/yVBpuPUZr+iZN1uBU9mrpS1OcgHR9TSvdgaZ0dYnB0smptsPgDfqm4YmWRptiTniwq2ouZ633aiv2c4RTMPeUXwY36ZQB27yxOEW+g/z2vdQpfxunTEGCOquO0vAjfx2nuJXeGJxS/jWc0v8IThnepn6KNqXLNvXzXpsyJZr6aacpc9OmbtMUfNK5WGcJpvwnuxQqumxGh4+/KPJ1qa9LNbuU/7JUXcSE/yirWSqaF++8Pm+4VPj1r7rUUa5mGUU1TOluMDUi8z0JhmjNwJTp4lI//0GXMkMGckSKdHqv8TAV30WVMGUecymt12ii1h6vNoe51KASejodyQ/uCgZ0qZWlktI0sUs1PkQtKpXO0IXgzKsq5a9RqnMsCH59+7LIlFTKfwZKObjhD0sBjQ+Bc02b4IV2rPRzXkCSSRnhgakDkjRxiu5Ldd8sEhOvr6hIwSKW6CMGufbIpPrjznJzs/fhTZTiD6Z0u25HbLGTShmdPrCDUMrUopR/zaR63jE/WTH3MSaFcjUMjVf3reSp0PsxPtPxBEoNia3ujwt/MqYbSkUfl8HhaD+KpJjSYoNJiuskNo6k6CpCDyapq6OHI0nKtJDUT3eS8iNFyuFGx7qwDf48j3Jw6rDcFV1rVBIXK2WD3azKdkujUHkkqFHozi2N+ed+1/MeHAVyIcGMoVGoBhdn+ByPQquhokeZWyD4Bo8yD6UzfDHk61EfdQHmEzxq+1XwKHP7ZMFtj1qCD1ccBQsIvJGjliDUGTy8zVG3G7h346gl7n7Po/L4UPvN016ZGRDBmbvWiaPwlzmcozRK/tb/IEcdT3A6pPN+8+jot2+zqEFHuSowyifPfcGiivifSVTHouxRaHSJIGosUfFPo8wENIYmiGqlgZbDyawO4pda9D0Bnvowi3Ili2I2XsUKhaWA9hVF+UESldaRMvwoP4yilNbkVOe2mMISpRskqucsHM9f2z+qoUT5FohCXam6JoyY85FNFlUNEOWxQ/H1frtpjsoX1eyG+apqJp2S4J66k0Hl66iWyn2wFZVJi/d1v2QDAyZHQnNuUDBVMY+aw+Vr8pWNISjmlgGHK2oJyhQI6mcYQe0di/JTIjxBmRcJyr9HoPR/WaBUuviInRSLn+8AUJxy9F5fnfEPAFC60Ol3iD+NWB+f/ySpoaj76RNlkbSYgLkFAs1qA4+jrZTYZE+mRE9+bCYU3K/okfLEno98Cp4S7L2UJxDKeR89mTZ6Mp9KT2VJNvoOPd1s8HUrkF3q3VnCp3XAL9Sm+NrPF5+++NQFnzSM02nttX+hV+BdhF/+bbrzS+IQP/FaCurTbTXrrk+ahDzJa/d9+uTr9QkMg9Gnm2eFfm4ViQYmYAr6hEahq/UJd87p+M0YE4dQQHo3uX4Pv5c7+GRGzTnRkMCCMTw6dFRXEfI34ZOps6ftz38sPjFBO5prygyiUp/MnZ5SbRGgBnxafkynYjhCkBCWfmakb/wbMYp9sEBwS1OLMh9BUSp9eQKJ0lii9KVE3VwLtFw6jfGQYz3JUFKMKkpUv4AUkKiEy6L4vH5JonoXYTv+RV2wqDXBUxPm+0csSldbFG4SUTvDNly16UtRP5iiul1xVkYgM2H/IkVdJnH3eUjNkxhlYK9707XCZly1gF0hbMnZXTzKv4+j0GLErPtCjVuhZFNSi0dxjtEaVmtLOwcipeOyDeYi5Gxw6fS3gxTZ5SYDfMyjzjvDdAY3ylHRagB7lM7rcZQ9CtdUY8qXm+7pXqycFjLb6jnKsBzVcad2pb+JjaYofN00Kum2fp3q1TpVNvdXSPZo51ekPVSQOo/yb+aobaoHUbWvRn2GRnkOo/zXor4W9bWoz7OoI/bqn+zplmAU42OASKI/bJik0oc0Cn+YWuMQKK9R/l/BKHwaMIpQPIVRBlyGrrQoRAlFjBpZPjlqQpPH3eo1CobYmBrZYzXKkKfEoL0eGtRnYhTaTzZgVHbO8hGMMpUYpSsxStdjFCzDP8ZnDNlGw61cP4z6P3sUqYBRfQ6XG3Ja8i5Gxd54fJv3LarP8OosSiOLCj9bfkOH+YLfFY3CqOPR8u0Ytf+J5zHKV1hUfHUNFmWaC/TV3//5nLq/MBOKii9c11MUzot+1KK0Pz/vokWZi6PQ3a6aqUiVU1Ryp1RZVFvHqG4WFV2U4dy1BaNM22TYbFFw7xXPIeZsU0uvo1hwNWmL0PON7K/MKXkWDFnBkvv5+EmLOfmBnaGYFYfXLDlp8rjqf46cNCqAzh+3NF73Jae+lSIBOWm6IzcUo5IvvIKcmKrUw5bF561DItqFgiFMgYdGcrpIzR+w+bcQnQAefq45sb6LSjbSmeSfNSdmf4byY2+Z05BuEPmiQqNnWv9b5mTw11BlTj4iJz+6zT1cAul2cbpde6+HNrwU8/+K01ec/vPipN8gTvm2JAl/fjI56Wty+qkkpzsHtpvzoU2pmJjhxQlFcPMBbEGI5pvnzoot3wSeF2xYcPopgxPB1kLe2ghv2nawNeAEx0SWOCAO8EoP0oHm9MObE5Pmli96RpCTf0Wc0r8ElmV5UJx0vTitfxiN4kPISfFfCQzVVJITeM9w5JRWeLr5TP1p+RYL7GRuqVP8H4JMuHegU/wIgPFFMrKT0/q/niano9AUrWhfIicdkZM+u7Mxr/3+BXmuyOkIoGp88ihLHaErnreIk6a/TnhinlJzvyFUH3HKjW87ugT/fKGKl+980bYWnMjnnbTt4sHJd/cm05z6dG5ztE/KzBa5KSn7bboNIyuKXeSm9Yk8PnLjdaM3tZwkrH8b08Nf19qkiTbpv7+G5pNywGTGHJgi8eBLXzrn/Qpf0jW+ZOK43gfyUnw/Ul8qNE3lfalv5l1HX8JVw/Pn7sKX/EO85G/okq7QJbyaH9bq9TVcYgrJFnGpbaH4lC7xeYNAl0oFBAfbkqa25CuO/v2jtIRL1VfQkvkcWcLlmj5LlnyhuwYLSy9kSnxh6QtLX1gaDkv+Da6El+x5rLYIS6bppF4HWNKFT/MGLN26+L6yRM8nt8jS7dunryzlr8haWdKMLBlUqn4ILOnHYElnuewDXYktPFnpSriMPk1l761K1nKqpF9XpSS0u6lSt+rnu0dYa/32WBpoSmDTUo9K8PjysA31Fq+1cO4ZYUo5xF2akh9DSmzHeHQQoK8pxeXK+ooZ3HRXoNKGMycsvcWU/v5aizmWUSXKH8tzyZmS6TWTEVPSlaakWVPSqPHNQFMi66WiKZ2yxDylpZ7VvUzJltYLwJTYNRNrSh2Jxlyb0jYD4M+6wElZuk2/p495JZeSlyJOSl/JMZemPJa8zHoO464mLXlMBU3yz2IS+XuZZWx05Ivzo0INs/5+ZHDU2hTm8QY/8kzBepaPMMj+o3rExvz8gAw6A5altg8eYVvE5OKH4dHfX00PScJdry9s6nGu5zWDRccqR+ARc2iKbjlMHnLm8EjjIiQj9cjc0qN8zjBwJ0b5SF/ykfnpOz7ER6aZj2B5GcRHWU3fEQEkEryDfIRaeRSnwXfyEQ0YZdt4FAiLdn5H99lP4iPtL1+XXz366tFXj7569Joe/bxNj7YAM7dOb9Kjm9lgzXr091dba9Ha+J4egXBOc35Vsx4tv0boUfolGPBdjtUj+4geGd0OYs14hMqqdcUjPRiPFn0p49FPPzzK+v2MkqTssTm/pIGSpAdJ0jGNVUiSL89kdyEpClJH6Zl9gyUnWdh8ZoXPGNLBVyVpbXyzheaHSNJ5Y9ZJ0pHnU6QkeF8+QEnbyuADKen8FzlJ0tWSpFGLZt21TFiZks5MEl34BSri5crYXWWiSeqKkugnjj9AcPZ6GCbliytS7rjZks5OakM1KUsQvKtJZ4lF/wmaZBhNyrIyszUS5KT6LJAGqbD3NSlZi/9bnJRshZo9Sb/Bk3ydJ5nimslUc5LWj3JSVqT9/FrzNQAuCn+MxnTjpG4vb0oKvTkJIY4GOSKmf7vVa03S7ZqEQ1y3qvW3jkFzDxpsuNxsSQA0mJ6BD2KSvtx2tWISaRD5D2GSIRXHn8Ek38mS9N22tk9Y0lnMWH8t6WtJ/5NfgUkt6bYrvWRJB38w1eRuWUAHSrK2kZKiWSQO7j1sSeHTzMJgtyzJ3xO8G5JkM0kyZ+JFHoszFZKUdrTVd2J3XSXJ5oOwJUn6aZOk/g2ITkkKYX7rh0KSoQvzsZC0PteVkvT3lyyrNUNJ98i7FyUlj3uJkmhqGbSkn5GWtNfj2izJMpZk7TBL8k3PT5MlodhP+HrqLMnXUZIuUtLf3zWSPYyP8o8OP1m8H+Ef0XFDQDq6BrbA7U0/MsCPiABsfuTr+Mj0XgMckwOZbreXUjUeabYnTn89Wi5shWT7kh6RXN32Pgp/2haFluOjIh5xeoSqkfQuExd+8Z/GLT0iAtzQBqpejzx8H10kImE9MlFZJN/vUgt4tM6Hhx7Fte3q9Ui/QY9s/roq65Eu6ZFm9Kh+Sd7CR/kSPHk1duSjEatvAw8w3OYjc0eP4oJQTW0fmsYHlkLLiTWGj3RfPopD3HoMH6VDfMCPYMC5ZZ7rCUg/tYBk6v0IzCK6KbTc7EcWXnURkMy1H0Xw0QwszXxkGT6CG3pQ/pI8YpiPNFO0TLem37cGXdLjhqMAidy/ZpAg4ZrU3MkCVpCYthBnDeVHAEm/DEhmf+XdC6A+J0h7ge6vIH0F6X9RkPKu3u/npNVASqlJ+r7K3AUl/w97kv2veJKlwTlbC0rx6eCnRAkGQLTtKErMsaLeonTsOBlRsvn1x1kZrCjpDxal8O/bf0qUfi5EyTeBEuhIgqNlfXfeYZLVmJSWL+pVU/IMKZm2WaEpqsWYEgqkeGuHmlLDMzXWlMy/TkoncxZJyX+eKNlKUfKFEIAxnWYyDEonANwCJU1ByfSsDxevSCxfCFiXQQl5ki54Ui/seMSTTHV47y2cdMaLFsTrdalXnLSsxnNO+unASW1ldP/UrzFMHSf5qlyk5PXzoCb93NeknxpNGtDZs8xJXq82idun/luchHYT4J4raxI5P8BpkuY0qffiIVocEQhCE/AFJhW/5xImmTvdQZt2IWRJTp48GBRJrxkvSaoxSXfvfZppEvikNd8YqRGT+G6E/UaA2bauzkgHTNLDMSkeoSmND2yoDGpj7YuNXsdTEjkz0N2SxkZOzwQdetP/xy3J3MSkryV9Lek/aUnmjZZkUXj3ON33CZaUHE+1+YxNVvqfaEkw3l/bR/15S0quF8QxGyzJv5GSwCjwGBopacCG9pwI9nVBPiqy2C4NyX6IJRl6vwFLshY+ILbNkvQHWZK1zMPSbElN91pHTLIAkzwYVYslMRYzypKiEF2lJdHh6RpLikKtqya13Y5/Wu7C/HMrS1IUXTl+ci1JmpUk/S5JSgdoogpyfrmNOUrSH0dJel0mZJSkn6Iku1NSeoFxmN1WUBLqPw9LrjxDSfY4FoUpidafvAqUPmBJLN5pWNmKBjBbP/B2S8o/6NOS0MftS5S0wYEfZEnk3YYsyWDObaakjjdKmjFcoiS/zN2+JjEpW5ebGykTnSgpW2DE/f44SgKHtUZS0vnpQ0rabiVISdEBqCNQypYOMLiwtHmjJK1DMy9Akm6FpO4ro+iZJx+0pcWAWx3JXzKSYfXlPYpkmeSeRkWC0Wc/AJHO5w99oFZbNiMJejO7w1qnzu7bqWwMphT7gUdCTbHcfpsi+aGIlG4KjSmND6yv7itS9cL9liLRrT2qstiqSLeDj7cYaalHhxzJVjrS8tK9dxu9zkgo0IzWtoZJwHuDI5mvI30d6b2OFBftjgPI5snrySTJYklKS7U8B0mWgSSLISlb5z8NSdE+kL6TzmsEbRRsAZLuXPxrkvRzS5Ky1hY0NtKcXvW8JKGxFiXJD4ekLdKHljdkAHWSZD9akmxZksy7JUkrq/IH9nzwfaUk5b0EmiSpV0Xy/S9WSl1IkqmBJGurIWnUdnt7DJSFBUc0t78b60g9W1Fs16eU4hzJMo6Ux7WoI9k7jjQg4Uop5W840pK7uVnSWxxJKyqu+gKSzrWCfQckWb/RC3UkH18Y1+UJKRLao/ZUJPL5EEayWJMQI+mrwitd7gxVx0jkyguMlApB40f+p3Ilqy4caWUk+mkXHMlmOTTvZaT0ylsYybQdrmtwpO1kh+Edyd5yJMMGm4Y6UpxaTx0pbNisDoelPkKR6F4smw0xI9mckejr9iMZyVwzEl0ctTKSfpKRPKNI+PHITxZ9PiORyholRTINiKRxYhyqVDYOkWiq/Tka/4Ii/TytSDjpD/60QpHMfwiR8OxRoUjH3mpcFClfOFi0u0vioCVUKpcafwaVNEIl32JKaMH8BmCyTcDkNdtj8jFfSrsTfLHpi03vwaZj3vw3sAnayWPYZJuwKXk/vAeb/v4u0eh/TptCyHmMNpHgyTBtUiqKVBq8AmzWJnpY8WFt0uGG6qlNxVoQelAPz4I2/dzQJuw9j2hT+GU9E92q5ya48X8nN1mlXuUm2FUKvjlw7+tOI0q9gs/NbOIm8MrRFnLTGo09tMm/X5ss2dVaoE2IpNilfPOkPlCb/IlNFjUBTMxzmDUpak3K2oDTHrcrS389bE2q0prsYmKfYk2q2ppybrpIWTL9U3/O21ldUpPPLtuWpMk8AU2qCE2xM+1Xba8Tlnye3j4Imvz5TBWYiRb+pmek8Cu6403SrEzHdYepsF2ZTMeSfedU4lllSqthHMtxvdQpa1QmPwyZVBGZdB0yJRkzNCkhjQo/zEwqOUt4k5loHXGd7yWqmGlE+cX4VorHB5HCMM4EAiDNztR3QXvciS87Ey5L0uRM+hFn+ql0JnvHmfw4ZiJWBkI+RWeij1ejM7Xte/s4Ezs8sOd9xZkat79joMkSaLKoJ9Q7pclcSJN9VZr049JE8y+vpcm/HZpeqPL1laavNP03pWkJ0dvsncFKkxl+bXEwhkqTb4ImYx5mpvBJqizWeYuZSIDnaWWyyY+blSmuVvNOZFKvIZPBC9dxXYnOCULn99HrxmTeTEzBM14QJvtuYWIOUKuXiSmMzGBh8uOASWkdHh202zyfG3PlS/azfUmpOl/Stb5kGV/Sb/Kl+KG64CXzsbqUvLtzXrL/Ei9lM0XRlxbtedCXApL78Mxf+hKXjnX6kgHb0371wsx5bxd8iX6giSFwuUxmmNTEvmTqeSmtT23An9aFmlvdeAl3W1maI63NffAnDSvdR3LwEC+t25htFi76UvISpr5kYI+MjqPIdgzosUl86SxhHubC68ZKmWtURz1afCnHyCtfWrYJcTyVEkG083mDNmUDOi5GcSlNvg2b0vMSLDbpUdiULB/ejE1+gDXF44sOVLxsTbjvz9PWRBY4efp+vJWw9dZkq60p7bLcH2qyKATAJg4Xv9j0DDb5V62Jtry2H2ZN+yLBVEoTrGXwWdKUrSY0CExqcIjyQprMuDFQaUrns+Mav9D0haYvNJXjyGuFHSpNeZMm8+DVxUF7pcrspB9mpyW1Q0F3Up/rTqroTqrRnewT7uQHs5Ntby7Vuh5SLDstJtDdnax9rzuR+0i96E7WPuVOCrmTXdn7tjvpe1NUuzspzp0UWT7rfu5k+m726txJveROtuBOg2qpNLpTPOomd7K8O+mj7/2T6qSq1enyJ1id0myR/vUBL9UpGiBWJwvU6fZJmVfUaVtLoaSmOPf5VCf7gDodrLCqU3qBN9VJw0JEpltg3pw3N2Enky0xWHgK7LTulwvnUF+9VvOcNPnO0hTeASw17c87/nAL1OSHUBOKomwP2yZNcSpTXrqBlaY8h+UJalJt1OTJTGY+TZq2zKtKatIfRE346LQFZwcarAmf4CQbujig9yg2LTcgxCYL073rrYmpydx9UXS+gslyRWXrvbTS/WBr6vTKzqwpXil1sSZ7x5r63JjkCQTWZOut6dwBlqxJj7SmbAwljbnCGEPedYbXa9O6IL9FTck0GD1IXakpn0/O10pz/P4+NYEn5TVqMv+WNJ0vp/1r/gegaWsM6m9+1l9o+kLT/xQ0xdukt0mT+jRpUpw0xestVprM4CtNcEkxuKSacUl/HC7hMWj8VtuK79iBK4RYl7JHCh6W4nimgpey9chwXgpzhGV8iX4N8RL3ni81f0/dgQmOAQATu7MdTUzWFYhJIWJa/nwtMdkSMbV8OS3G5FwwJoVtBhmTVvTuu2NMtu+WfPsMnWPGgYgpUcFjdB9MTI4QUxRoJTVWTJyZdpxw6EJMXUvg7DOYKxiTZ4hpf8e8jZgcT0wosWnVztSZLozJ9JzCtjWK33JAXkCmvYoX6tDWsYuNiWZSpu6r8Xs4uMxM/p9lpjwb0dfOnR2ZyVqr2phpiSob3e1axznT4ZSfxUzLHFLHTLjRbj3N9FImbZM3UbRH8CVkOoPEn4RM6p9HpvNgAdpE0NuvCZnsP4lM6ymPamWy+Mwi/Ll/kpk8o4MKXlkLM8EN/VuUSbUqE5dVpPdyA50rRDzOTBYVwtTW6ubEmU9wJvgUwrnY++acphvOlJ6yz5yJLB0N+JlF0GTto9DkX3MmC5xpXUY/7EyWdSbLOJMtbKS+0PSFpv9JaDI4ZJTU1XtemlRRmvbN/JulKdthkqmSVrp6TJrc/vlRaVJIafKmL2luxiPS5Jx7TZrQYI9KQc9Ik3PO5aGSgjTBUTRKkx0mTcdEsEYDUUSbJmFAAkTroEKP3NHUZC6oCT8hn0VN4UZrpSbiMko1S5MeI03h6V+gybVAk3odmrxtWH63QJN7FZrUK9C0JO97bVsmiAZock3QpAg0naMD0TCYKxiHxo+shq7QZI45HEETmDPMGQhcUp3fCU32FjQdieN7k5vCJ/owNGmVXlwRmtLL7t/rKLood8lMisGmnZmS+3qQMoXXw6UybReqysqEUgZQb+0uzuRYZzqzmeDn69GpuPOY9SPMtIPAAoqQmdLrbmMm+yZm0ssMYmuYKX2V3igf2pQsXGImBZlJKV/BTGuVVMaZ7Chn8szJIVNipmj9uv+kVNE63VB4phvmIGXKA+AVzESXRR52umWS+jlmCk+S/QBmUvRp8eDbuqFMfVtQtTMTGTYaXZmZ8p5JpzM1bEAajcZzzkTnGjigT3Amj5kpO8XLHXRFfcYqlQm1FnpEmZIKEYOYaV/iPcFM+8q3kpmWVoMlZgJFy59hJtuLmdI77GlmUuQfNWwinNGop+KzqEDrXX6V6atMzyvTGT5mkSkVqI9SJr9vjpX9B5DJPG5MXrndmMBulTEmZhnFNwcejkznCTiysfC1xnQewtQ40vwPGJOnncni72awMYVZwFsyriZkUp+JTFq5amTyKmuyYdWbicnBmEQeq6glpnSHRIhp/8T8MGCyVrEwU5fJlFZZrQGmtLHsA8TkKokJJNRZWofSvIeYNEtMGhFTPPPxxqTuGJMdYEzuvjFtzkQ/APseY1pniWtj2mL2DxtTuLS1RGZiTGlodav5+ynGBF7vcZkulf+qRSZfu3VuQSZ1gUw6v856ZDo+4soH8GVkilOZ0Ofr4YG4YyZZkKnXtZaUyV0r01po4I4yWduRyrJH8VqZ9s/7Qpno4sM0EHuDMoFH8YqZfFAm9ZIyjSgfcK6CeiiT+lxlch2UCdaEaFWmzuuiM6O4UZkU+UYTqaLR8hplWgb4ocyk1X1m4lDxrcyUDaiiS9LiTG2x8l7OpOFPuzuTH8lMOqkXw7X3ZktCoHIxTczU3HfnZWXKniuoTCDBEynT3XDpXWVCu9MOzHQHy15iJoVzMw26c86Qo3+zM51ttb/Q9IWmN0OTZ53J3+l618+ZnNt2bYwzKbCE+zrTEbcF5nHfmeyNBMxmaNIYmpZ98CvSZO16YPcJaXJFaXJ3panQ6ql59XBPmtQr0uThQfsSNPlHnMk5d9uZ+MZIb3Ym1+BMfFXSK2jqVLLinLCcXUYFeCZyjStoUnegyQ93JkMl3SRGUOVMijqTwit5HVnMo8zkbjPTOV4UY0rmhpOZ/OPK5KAyqVWZlAYk+owyOTLBLu9/5xTq9K5SY1p7oj1oTMvjHowp/N9RGgo1JtBZKm2/EuLexU1rn5veNBNTmibk12NbGhhTGiZ4AzJtdwAOLdMClqglQB9jclfGBD/kK2OyRve71oIxbapLjemYrBMfy3//LGDIGJPtdptkO4UyMamNmFY/s6qZmPQIYnJ3iOmM4ZtS1WqGmPKy3E8YU/jslzOD8KaI3pAUKegI+XNrjxiTc2DzsNRKrjWmxGCOP2W4RTgzwiHEZOPRndMwR0yqmpiUZbKCWHnyzwBTVnTgJ5rlMDDBsHkLMOmWbWErzeSL2mtfUs2+ZFoLqnTxJdzrFhSCALl4/x1f8i/x0tJoyIw60VvhSyqe587BfyQv4cOPGleOaeGlW1XgXvMlPJmFpxwBk/0C0xeYvsCU7Iw97bMR/eaL9fJeASa3/7JoZb1vee7mf94GJhsOo4PIVwpMcXvrJDjyGDC5NcBUB0wetBpISxP+C8DkkS/5vVGCbm9hdI+XHMNLroaXwDk9/XZd0qwuxUCzbzzu6VJcd/cxXQKVJJcHB+iSYcoFeqvGe5LkPSm736K2TfWelGYSJBtAPcSTpGz0JAvGoxVTRlOxnmTGcJKUkok4gkqEKh50CyctUsN5ktXaDvIkyXqSw57kunuSHedJstGT7OZJ9l/yJEc0QavCfm17WGoHcQuX1vMvBJe28PC1LqF7YqguOVaXQjKWc0ph/kh1SdNcxH8Jl1C/7D625DEt7TMb/nCZ/Ul04N13u9RLWjqaMRVpKZoyjiqLJVryA2nJlWjJxbS01LH9AFoiS4aesqQ+S5byNNQ2WUrWRqYsS+Y5WNr+QQdg04DUGBaWFIQl/99xJVXlSjDnewQrMQn6N1kJkscbWEljVlJ9WcmPZaVwrOs+K+mXWUkPZaV433vBShbueenM0cJK7d11ertSvsHwgJXUR7OSB9mdYB38KaykCqyE751PUSX9VaWvKn24Ki2/9VJ5vP8iKjmMSs7Rs+dbmwGiSmbclUY7RsepkqMU4PkG1l4p0J5piClJ1pTIoSkPx/BuU5IhWl5vSkgv6k3JqCdIybeIEuQYstvNQckkW79BovRTJ0oODoG2YT5JSY0npfCriZTAKDRHSiRu+wApSbckLFyQUjygOlLyWJSYI5LdREm/IkoqHnA5r5SrNZCLUg8G2EVJ8qLkgChFIGjqRQnuPLQanKEkZUmU4pTGY5vjXNjCLzHuZAsbCfNoUJJ1oGSiQrmpeCyV/N4HSqoASksR1vhXMiJTqj6Bgh9dQMk6WQalbaGF2QODUvfEn/OOlorPPTtn2PQim0lJ9yUliSOVR624LQOffLY1pKRHk5K9IKVwV1+Y0s6PvCl1S7qqRiW7LPpihWYQwBRQqTYe1E+VklnwJBhbp0rqeVXSF6rk6lTJ1qkSWexFZ7meVKX9VYC6fBoFqwWDiiCGWZC/jZVOMrPMCU3lACtZwEq2mZX0U6zE1uRw8JJtF1jST8OScwwsWQ6WcHfVZ2DJ/cdhyd92JV3nShqX2PTPsNK2vrnNSmhr/4+xUnIc9FNdyasSK+k3s5LPHsNbmSBfVfqq0uuqpD2TpBLKi/rXiuH9eeHSCqpkz03mrfnmVVZyDCs5ykouX2o9xUrBN0I8xIFuBCh0zld68UrhYG13VpJSQlZylawEB+uPIMSN2omtC6AFAPCy28cfOusy2rWwUtb9sf94QrFM7UisqsBKdEB5Y4ESK7XfaTdZyRZYiQ6hwEp71OXjWImOwrF1RUkkfF/TjVIlqVSYoepViUxY9tNV6ZzLeqiSx/3zjLYKNIrviEoOo5JFqBQXFDlfNVSQakzJrrWXljSFzidxUX5ZJSmFG1FxpIQepN6kJMnts7xxsCgdCcvHcqlKlGpP6rTMYQslX4FSojMcKNH8pXGgBF7maQjb8aT0iaBk86u9AiX9GaBEPuFPASW51b/jQEmlnzbNyzvKzD0qSuG+rhClaNLwWJQ0FqWWSFCDKEkqStkE4umiZ1lV5mWM0ev1DaJEppcKUbLRKI/EdPJGtbCYBitK0YTcE5TS5UMNKME8bgBKIH3V40CzH+ZJ0tFE+SIouWZQ+kkjmupzQclVgNK5bYWgxH197wAlJiamsCh5xfRStXmajW87N9kHl9KK72cxw8KTxuNS+i1Fe/rWsHoHXGLadNfakgGhFrjLtk/Q0r44w08MKAZfpCXybX0kLfkaWtrKSn82Lelj2X8v0eF1STCQlsyXlr609Gm0FH5Pv9OWlphJNtkms7BzD9rSMXc20JJ3+ZorPOhmvCwt8SbCHIZNWNJ8lRet1K2YWUdZSoK3xwVrtI3E5Qm3E5fvlSV5T5ZsUZbMIIc58xkXWXJQluQdWaJFIt4hSxkInLELOgTrjM8qC+X31kBXUlJwrpRHJiIeo2OARl9ypZZk0AZXEkJItcTDgSvZJD/mHI8Fw4EEy7tSWPT1dyUhBHIlCV3JySpXQilz0JXWyKTdakT1hyUvBAdLaWiyAZaiPxOd4S3JUlu+bL0sCUH/VYNCN4iZwpe0MJPLOkE+yEyCMNPyxpcSMZOOmWn9f7+VmWTI+lr+71gJiDPtqABGZLxWH8lMiELszkyoGWfvQm1oEULHk19rWZnoAdP+yiQ9jFsSZdru3ypmUo8x07r2O5iJ4qlKPm/Ll3/8DGY67xO1X/vGTOmfTgfwoDPl90tclw9txpbaoWdA9QYz+Swm3lGZfJY9m4btq5VJgZMcWJkUVKbl5huTt8Qzk4PMtPwezc0F0OQQNOkaaDL9FrZWSpq+LSUDTd4hZ1LK1TqT/vecCRZrW2LJGnWLRSr1Hmdy/h9lJgf2IJXMlNyKxwxP5nbOmVRrff5xzqTgscQbznS/KEFPZooTQD/dmTTjTOkjxTqTZ5jpbkbBC8y0rDiZMp8mnxo1XZm+iZn0l5m+zPQRzKQpM0Xn67R+HzPJ/ZdiMg0carA8nJlUKN+GmElWMVP7036LmcT22VUyU3itmYIy6SeUSQjFKBMNKUs0BKhMazPcZ5RJCCEYZZI1ymSBMpEOGrEyNd79N5hJWycYZoqkhv7kuPxqZrqTKddZmSSvTMxOdnj2Uril8DlXnUUmCsqkGpRpX8+1nBj603BHLeNZAuK63pnQgBA9wwfCgLygbgMSQlgcdITQRGmA7oJQVcN8aElscu9FMgKaZAs0Rd9eCzTBbccT0KTroCkZLIImkJyqx0OTFtT5S9AkcwqpgqbqaaCtRN5GTY6lphxuMDVZMAcPpaY8tn2cG1THsSjITRiafsZAE1qH0K+AfMLt0mS7ZmGJ9JVQhqboAy5DU1gl+W6XWgNN+hKakn0BgCaP39X97pPUfC3PTEt9qOOz1tY1K1NDq9YHlMllygQLCH+SMq13FaNM50/Z163S1cy0FUnuy0znbh4sXyRAzqIyRVXoyHqiRpnWp6i/MmmsTLJJmUABQdWmTMr2XePmymSY/qI1yOQ+GpnyAtB8GU44Hq5L1vktPoxMsgKZDItMrgaZ8pyzKC7RGmy5oUzOGx6WdIVOw3RCdJj0A13JKlAY5l9xpfPu+WxYctWwZPEJoXfAks1h6Ubc/gtLX1h6EZa81pqriLb0H/5oVXLPq5KEqpRFHKKMJhJ0No0dDV4npt2YALtIKgGKElNy4vUJYhKQmLwEwmThCMBQ96a4izCpJ4RJQmHSQJjQGDSKr0NhWsviP0FMksSrtlsjGlNhSFkh/KSOxNuMSXHGBJ+Nv78628hGD8cjyCRakEkyDzhqYkdvr2h9Og6ZhHNhikKH6s7J38QjoklzAJnsJyGTiAdSQqZ4bijlmmJk2qqGrUvcjokn57fFK5MsKtPZiID85EKZks6FH8hM+2ZaSitXamKYyY1mJh8PYLt5lteQdIiZ1gTnJNCt8lPy6CYY5UyBmzdnctSZvJIvMpMawExCcMxk1foGcfDXBTPVvvk6M1N+sZY5U8Y7k+rsTIJzps3SQ/Fn+hHXOJNSY5zJAGdaM5ooM7kLZrJXzKRGMJOQEiUuR85xOtPSfa7NmZZhPQVNx7SQluGNtgkuh6Zo7o76kz0OTQtKeBRxX/dyyJkUcib6CtbwCIfyTNi/d9U84kzmBWei2d9Jy8ef7JgKWDd3P5FTCU2mApqSOLMB2Rg/SZEL5vDhm6EpHGdB8VkYRPfYmTR2JlVf8PBVZzJXzpQnPzU7EzW23gOqhiZ6rk2BO7EWmo6ufWOlaV02NlCTU5Soa6kpKobxKdQEyP2DqcnCkv5hYB6c83i3NZkLa7Lx5Pvh1mS+1vS1pmcv4Kg3UrCmUPfB3MWcV61pJxLFVLR6mzXJWmuykGbyo8FPYJOg9lHApvT4S7y4UGC2fVabBNUmBaPPhqZ1n9iUbUeGYZO/sqaDakpF50xkTdlt8yg26Q2bPDyMeI1NrohNaXhg2QO6Z7AplY7EummOwFLHScHuwVsYcaw2zaw2pfdbRGbIZpyFGPswNhkxz8KFiDi0JkGtyb1qTYP24FtwdE5mLXMSIbAm8MaQVdZk08KNUXj7rM3VUwS2j2wWgrk5oq/PoM06qJYDAkOlvmJb5+jB1mSrrekMGe0hvGBNUtqtIh2ZvDVoFd3ZmoIFWoRN0ZRNsSkGkXdjkwjYJFhsSvEGYVNIVnlUm0RBm9x+Wgpz04U26e7aJP0lNmXXqks5TZZak+puTRaudo7eRQ6C3qdY0wa9CluTT5kspya/l+HkpUn1l6ZwxU3S5Dhpsrw01U6EDdCULyASaJIImuQKTbG9XNqSbl7cNR3kEAVbUjdtKQxS07wyl7+OokZGvp6WmooKP2RLZ+ocKuM1zJa8FORqTcGWZKUt5bXNyra06mBXXPoZi0v4RuRwSY3EJYdwSTbiksXWAXHJjsQlj3FJ1uGSq8Il77i+vu+lJYf6Q9fQUvZURXPJeFqSHC35OlkC1eNj/PtAWvIw0/ijZAlNstaRsIQ59t4Py5KhC4k00dPkO9mvM32d6R3OZHWhF499rVbeK9Aktl8Qmo7d5WPQdK77hVSV0KRIRSgYrxkvTfP+WdZJk0uXKG+Spnl29J3v03AgL01SGhis3KjJPUBN8zzPmJpiRDu3XHQMqBA2iQRGZRkfoCYl85AViHLyfCYzavJSZvuo80ysQyfIRlETSGhYqRtSk8TUpEAItDs1zfS+OgJbldIkZZoeGK0GLStNvusWb/trl7EsKIt2Z2dPoCI0pUM0hZ69AzfkuzTNrl6aRI00SVSB0oG/zie95XtywPll8dJkC9JkWGny5A9pHprcAk1qFDTNs6qEpni4UUnX8L5f/g+SJjtemkw8gnNmC4Cjcc7FYSHrcsq6N0LTcp1KrQVnATQ5mcJNPMuavDkShqbKV379E7FYgr6CJshNy9p6gzFLT6N2dqZ5rnOm5Ep1MalpJDRtf9/MQVPqTPnHewlN/jFnElGXJnxD89B0JMDR1ZYeCE3CFl+bQZqOy9bkJF2SXoiPvY+BJsFCk5KSltZWUvplhUChycZlIzlo6reyw90df9JZDzpTnMbOOJMHzLS+S59yplO6gTMtDwh0pqx6IMdM3vErcRBQt6OYKQwFOFOazJ6EyeU9Zzrrm73LmX6KzrTcsNXMpPF9aB1T6HAYM3mOmWQbMymWmcyjKUzh8THlWE80yHvKpGFpjH3/8YAyMU28QaHUSmVyjikgOp6Z9LaKqWOmqDhE5O0kMOY/mpk0Zqb8nWY+zZkUdab1HKS6UYlnuDMdeQ3mfiD/C01faLp7g54nQM8KeWnUIhRGeAc07Wfd91+KSTaQaBXwtDPtc6FIzqPBGG/+wT/FTGKe5yUPAlTXMoJW3JEcM3n3lDL5GSuTAMrk4AjIImI7P6qsX5DJdN8vUmQSaCFuETIJEDvP76ZwZp5BJj1SZKJTxCIXDtaYwo/okDJk0uTxyJq/j0Wm/WOdUSbDGiSiQ1gjLeDW3Fs0t05ITZu9kjEJMitJwRmTRjU5QLGk/SMaiUzhQalEpjAgNB7fhkwhODHGmCQKN87CIWMSdcYEDi8AY1rD62qTpq4ScHxX+d96vvoAMkWwRs9Xkj51Z44NPvZ2EpMbQUwu0cF8Y23IaE1Iv4lYid6VZigrHc8PYaXwMKXpZTGOHa0at0Yf72OlJZNRbqoUVYICqrSVICupkntGlcLZlzycHZXnWvNXMC0dquQeUKVlSmX+ythFowuVn6BKsyqpknPZPbF9vteqpJ9VJQ1VKb1sa4xXJDWPhOt0b0haObd4AMMJqfRxqawkLTezA5Tkh0mSZbdSCiefS78ITQslWfc8Ja0TB7gLHJWkaI1wR5J0/ALtLknIFdd1tMF9aikl0TWQbqQkN5CSyEIzO0B0JUmg+PuSuIUpCUY5/WOSlGfY8V3ctsEhYrH4PsQeM1aSkoy6KJTESJLEpTYUk0HztCQtyYBX54ajn1JLshWWZNN78/xOn7CksC7kLEkCS7LAXgDmosDSR1qSAvVfaCdi5T7bklBjPYJJS1rqOzRpDQrWadLZm/LNmOQVemGs9RHu5y19NemrSa9qkqadBuOQrnobJ/39FfOHepKIYxuxJ8HQLVMg3D/MSeF/Mct9ctmC8aStTbh6xpMk8qT5JU9aqpU840nTRGI6rCd5NAIPMpvyGuyPepJlPcl35qQt0vKQJs2cJtERuHAToWj+VrJzMCaFewoVkrMpXUYVGmsxKZFKkweYOmvSvl2dplksExMIF7jEk88RVWlS+JJMAZPyI4ddoinTBDApxPdBqU5w9kDQ4mbx0Mw1JjXXjK0f3DRxmBQ/PgZMcUckXjhCRxkmWYhJOsKkIn/c1yQ1T7KgSSbVJGFNSJ4N/68dlDSZqjnP7DQn7N9KXnBUzSs4Y05aq+SKk2icvOQk77tikjnkdS5gkk4vNAq11mKSGoNJs8WYpNxx+Al5UshcWcPvbrglOcLzZCRLADu5TkZkSj2ze1OSg5Rk1VZwcs1tTS+bpaT9NTCCks7zn8mRgaCja9slaEnJdWtjdMmSbNrVsaclzfOVJYnTkqR2WVKJiQTnQUtS4JaOZgF08GezJB+9QqMy2RklGXCfd1u+HccxLEdJ0YayjZK0pOFFz0nSQmjPS5J9RZLwyS2HIWk7UdMTko7dwABH8jkjnf0qFW4tP4aRPGAk3cRIEjOSq2YkPZCR4g6ilY4koSNlldjoT81TjlRRfwY1SUZMxjqSYhxpPa820pF8mDQ8w0iopvhrjORaM3t6MlLaIItjJI/Lvz+sSAoqkoI9oG2DIrUdgOymSNk0jT79XJHcw4pkKhXJfxHpi0jvRSSVlzs6qzuDUkiPEdK8/1IoBLdvJx8nJJEQ0rlsSFNQzqDn2w3p728I1s4sIiXUcawiHSxoYbeQTnPjrT83vv80KBuVxFMgXE6HQBVpe5dvitRcNrF1MeSmaZowI8UbyiPISoeQ30/rMh5typZndTgiKbfE/eni0kcDYllM5IZkmfIJe4RlWCW/PAo+A0RazvbTIXiXFuOMGpbIthD3ne3eTG+pM8pSp0gZjkWV0XlG8i33VkNQKwxHiEBjLyhSOsdG3sozkh7DSG6aBA0wqnmaYTE3ASfevFVZPLqIyMjkZqwbDkmTb3Ck6OvjHMmGEFOYuoiyLQ2AxsqRnSZBmrBmFQL2sGMIvZqQEBtifmEJ4LAc5TWKxsgRmUfX93sS4DmKEs6bHO0rpjY5Ml1mr/1WDscq3HIQYZbWYzg6oQDB0VEQLNlBg0OEvdxomhg3WovACmxHy8p5cSPl6FFZUxurrnUNNdHLzJebMr/Qdjdynd1ogr0CNzgKvyT8eC/gyCmf97l44VJBkM3ENWiFXOAo7qEEHVSbxTz3NCrcMce5fndGKkezK2ToBhG3x6XqPLiaoq3CzN8fjmy69ct2rQ5mjIsAR1afy0qTLG/gwbjBcqQq5MjEWeTmAo6spAWOQ8seLvUjXtX1laN59nBrjrcoOg19c25k69woq2Y+Ao5mfQ1H59JGuCo4ykt9g2azJlupjpEjQ5eeWI7SjHNGWqKzaB4WI7Ow7t1QORJIjkBApkWOTucDctQ0kVQPyKAEMQMCH7DhMX8rGlPlRvu7eLgbKa+FqHUjMkAvXaGUpPnJzqSZYZGF8+2fl/bh2Sie8o4/pS++ng9jIwVLlVI28v+AGulPUSONzkr8/fXe3y9k90WjLxoNRSP5TjSaODRajzS9TY3muP3AuSsJlwpOk3OLlNB8xoyeNyM2mpaAM13mhxSfWjQKnWJA+e6BbBQHYaNiXuSWEGgQlI32y9fLwZbhbKSmOJpj0iB/nn2k0RA8taV8DR8VTRzfMEkpN+duwboRGFAe71T58xGFBeTQEaVh78gt0jpraAw6bdqV9EyTcjAcLY8FI0fpj88z/jOUI0/nVZTaFq2k9KD8o2kOY4JyNMX5h6fnoQGRNetKR+D9dR6jG0BHNsvSMedcIK/Q3hTsSJBC0jJtXH8mDMdJD2P0CFfzcumXeEx1xIpyPVJC6L+/aenCuK3PykduEB/5aZpb+Ojvb0iAdZshOYCWS37iA3wksgijnpY3jrDILpcsv4g53BJINUU90kP0SIYJzLlVj1RBj7aOmZ58O2ZtR4T1yI3Ro0nhBvKBj+Y5+WgT5Ah85KEeZYVJOkCMJvNogY/262T4CHTsQC2gO1y1S2fGtPaBi9KOss/X4SuPSqMM8CPQLHXJCD5bIxmC5dmnfczRwXCBH22j7tgOyZy5vuivTfVou1BL9Oiova8d1CPbkC5e/7rR4aJxo76SHglhbcQUCR9pGPp3Y/kItn9dpw1HZzgpRHYfRQHis+dT7hph2fw4H8l4hRmtngVXJwH5Ef0WlUTnILTL4CU+w97Zj44Vp803/Hk73yTBt8qPNPYjz/CRHcVHSaXaY3CWASRRDUh5VRhTAiQ7BJAM6tUV/bTSj6LdBNj3xoU+DVeb8AFAEgwgiQpASrJpj69Pcy+msYK0hPeU1riJbhUh6XjbZ6jMpG+s4YS0LbkwIUlKSJaeriX7evfRhOQQISWxhei8iVLKvFuQzpvE0B5Ony5ILxQH+xLSl5BeJiTFEFJYnKeHP58lpDUaMiddCk71WLc54mlBCnGuFkIKy2gmJOutHW/vsSFN9YYUAmXIkJa0q+GEZI6shBnsr0MJr2ZCMnEH8uXk6iOGZHlDigdxHLQk3wMxJJt3uvhJypI9ZUgzPYzlpykvrQEGlFdbcowh+RVkPpGQXL643cPLjxCSERM5ZX7cUjMWJF8lSOsRQwMnKyXH+NGSm7eYGFhfyyTz8BwPEBfqR55sd3+ygMoAPvJpbk6sRwDs5okMZSYQawAeLZssGjr3Kqma1b8bgIgecfr8GNqXJ5ci8hO32JFDdqQ2O7KbHZnudGSmaYrum6IduXma1d9fHTJnwpokt6Oo48l4O5rjF2OMR1NamSoqoCi2zONDj8Cj/pQezc4tbiyUN0aLOfWXiJTijIfDY4aK0TEV5jNSIkZ7RjxEo0WMdHpOHtUg6UAv6yLZXYhRfp1vFyM7CY/BaJm4gheRT1dcgFFob+dVvyv9IV70c3rRNNV40ZLg+0YvkvFrh35gcp6dPZlWCofP8ixYq9Ah9QFctNzRJS+KDlyY04v04kUi9yIvKRfdC/L+vFLHNvrEw22NvSiLQlMvEsCLwHG+86YaBUYq2dFEa2XBgpGgWS6k2GC6ookPkOC4/SAukvQQjEjrD7NcRL+66Ogi4iKdV4OLqvDpN3ORyJOsTJmLFOAi6VClbTWSi+Z5NvRCABeZEhd5qEVaPqhFRwQgmu8utAhV9gZaRBdQEtSjf0SLTAmL0K6OZvtbSZ5XAwt8q2e0SHBaZKu0SP3bWnQSDdEie6Pu4VgtsobmvO5HL/VbtcgifPdLk80vFn2x6I1Y5DIQOtZp+VnPN2BRvBnO2seL5RDiO7Bohlg0JYHCcwntuPP76jEsMpK3Ip2cHse1FYxJqyu4d1rRBKwoDrui0vlnaHK3IvuEFa0RPFVnRYoG9ZNe9Sd3vQ+LjHKy2orsdG1FUuSYapLAtxtXhDiNdU90ybkMFAzBMmt1t8e0WmfM5mgrTM1JrSj2Lk9EAlam1+DWivqUDsEidWIRzSwMWGTAjKrBeMiDojEWnbtbaftjkUlTcXpg0ZKQRDL9IVf6pLG8M90TjRwJ5JnjN2ZQ2jr642fhQSNnoZej7WB+Tn2o+kGqTxxhfChdhMcEFoBomkOcb0ei/HHSJXjp5UMuWlycMMnz0LTz0BZ1d7TYDN0j9uWhyINnufDQtPCQTa+shYfMWB6SBp4zXmLUExQiEVrYOLXwEKhbaPvx0Hn/5peZ61Cub5wOoWPUZwSsrw/55BwDyY2UMr8n1isv+pANiRU9y7ql/ePT40nLPaysThsZnfuR6KqXnlay5EOyuw/9RD6kiz6kTh8SvA+lAZYjWNSQv9pQDmzKbCX1oRn4kFh8KLQ4qvch394Vt60+LctDM+AhUeCh821IeMhSHooat4ziIZ0sj4/9GctDNuYh08ZDKu9Ak9QNsgN4yE0OEUq+l2oFIiVgwTbLAJHrD0QkQfLIDlMtPMQVQpNoaiNZOUydur6iMs/okeCJCBfk05CIYug7AyFNJeFvjAcKkS0KkeHvxXh5a0DeTnwTDhSiI1dPONsgRCgTkRTF9jA50YXqnW/MJ7LJkWVOiByoOyrlw0LkFXqeQ2tXIERJ8CwSIkMyYmXUoO0pIFriMAwQkctWZ0/SNwnR8W7HQqS/QvQVorcJkbcsEC3lS5R+OxChEjdvBiJLgUhWA9H++boHgCiOKjcBkcVVwuQTQhRVqqJrGAaIJhpqJcViQ3b2cvXWL9WPxHAh2u7iCyIy549oLJ/m9eatzqPF1cj0m+NQjpwwEemTiMyRTEUGlA+absX2NhGOvueHEVF2evwM909gCM4mSUbZMlGqQUL0Ez/LjBCRRuszHAHuaLbsfRkhkoOESB/TvESRNEREE3QVcmA1djwqRLK3EJ3F2mhLrJBUKO4KkQdApJMOSGeplrgQluoPRJpE8k4gAlGW4EmhxZH7+yvn2ccN6EzqqosKLQ3v+6oQqqB3jULuRKHt/9DzcrbgLd1USBN035dFqC+WUWtlx/n8tbCQLrOQHcJCi/zuLORSFlrj6ZiFQppTzkKkqXM3FlrP9QgY5VxhaE9ph3wRYCg7736E0n1ftqAzJCdD53WWZcjHIaLGmqMNnmUrXSj6bMsuFFqF6eoDC80uZHIX2voUhfnC6PRKQ53Bo1mRMqg5eYg8VC7JWiTIxTVpqQSFPYo6bNhFD9tP1pYolaB9EuwtQedNLJjdEKGgM5gYKMgJERIPBYM/Ostm6Io/NqlXGm0mVjRG+jOLvAzeuVM1Z828vLuZCpMfDNNJ2GOy1ySYvryjdZZQGIDi5RYLQEy9XEaAtpPcIwRITdI3ABA6WgiC7i731TPeyPUpqkeFlwTI5cXyzlmhRYAEvBU1C0B6JACBTzp8hy3+Y6H/pPUpD/+RY/3HkuxMIdCpy2b+OZnOefw+kqP9Z0lT1ZE2cv7D0zH1H52u/uLqom5giCANHMk6ARJEgCQWoPQea9hG3BUgDxpyXQNQRL+AtqRSVj8vQBlmRw28yA12npt8MwEpkLUXWsJY7b8E9CWgtxGQc1nM8uyBPM/CvYmADC9AbtmUBwGa3yFAU70AkbPvMQCpxwDIHZ+lLgKQQVHMuCGReBiAdBGADOqwfoyB/Kk1QnL6jxznP9F53snV8Y8DY6D8I+MtJ3kpDucfJwXxB3qKkPcslS1n57xSw9n6arnR7GMZQoALsf9MS2gFnCMG/TMG+I+amOJrKnlq4xvwyn+iniWc/4hs19drb26m7W+dpuiCszDRgUH08FgypZ0pNbSNkUraGNEF/igPyoYHOu5MqI/UcvPlheXoWHUciTmDM3TWtEkXe9u/0pzJBjrD+isFKJLL7wgOihZd3ZxINqXhNXSNiAQ7ar+BmWhyPkQGQ48PokQmql46XImW+B19gU9Z85HoyudpilwjBOFzJDq2Lsd0PESJ7FqZay2Q6dbSWxm5ICfy1u0Vxq4OinZkojQGFSvRcboGQdGhRJKGOUYo0exLSBQ6KyWXWUYiTZFI1b4JGq4abuXtZoFCpKi5s0YJiZauk7L7lXpawVNsSHRUl7PphYbUsTMnB4SwZFPZ3D+NK4XZ8kg0bUi0KAZBoqj7EEKi9cJrs1Ab3pgzvYWj82ch89GSNaQMlZijkmzxdgWLkR0pRsvLG2ZPrPuwZLrlzeiMeh8rfAIZ6/mJ9LBHnCrV3YyOFww4QLTUCOXJKNvvGForW2AyciK9OdOj3SOWbXqiJZgpwB8NycBhQwMC9TIjoygvGrUmauq33PTe1TSVWzJihGoRGCRGIcEIgVHOLjBB5SkwEriTZn5S7Fi9gUqGy6uFFhFu2nm3jicsiMHjNkMymnkyMjwZ+TSfLboFpWw8hdncezqsnZUV8F4ri9FZaIQsBKN1iknWM0PPlO5eP9d4UWE4NDf0OS/6ueFF0cR23jqAwaSzn6pFx+GXD9EiBzL4vlr01aK3a1EefDkb6oSd0Ady0Xpk/o1cJC+5KIrb5G+n86zDrY5of25ctTvClnE4idqRnUjdGpO3K987SG9bzWfoyOVRZQ0rzbmSIx3jIffTVqEwnMjb9l/jIImJI+eqWKVK+4hmVBAhV6W4bMC4nj6RKuW3XCsx7aNTxuTtf+NmWDgtZBAqyUtUOn7sXLZrOc8jhjBdsv/tuQzfn2Ryg0kaU6ggpmiYc/Q3nBXCkgOzySZH9CYm8uzE05nwF8JkWGHyYWz5jO5KwORFXg9hkC9J8tDYLFuP96XlZ5qk8OXAFCSNuoJKOn/0PcZ7fG84/uLSAnynKS1d9JSfp9nbNKc1EltgSj1jgZIHwCpgmsSJTKi9+swn+PQbRDY3yzwAu2XwFbVp8xGZFthF2qSt75i6lqYaptik0mub5xibjoXLTqcUm2x19LEBUtWUL6GQNeXeNO/WpJMasuxp05ctRNLLzK1pzq6ybE0qvsYjYNDdmsDJCRPSzkKxv1AIEHyyl9Rk+18o6BG+WtNWqW61puRKhdeRNVkm+DWEmuwVNa3Lmy0pcYbUtBSmSy88bprT059hgYHkUmwohMxJE7AaxUqTEkOkydANS5Uzzfm1+3n2IT/J5W/Q5cRFWvp0X5KGd6XpDEs/qIJrAkseRB2AK8VwBvqvmDRhX4GX1vqc6AHLtbDE8nlUNFuLJl0Awam0pHpYEZZkvqSOnqf6LV3TS5Z0v80qJ17IUja6aJ0GG7FJ4TAtNWxYm20pWiNX2FJSwi3e8rK4RAsQtxV+bx2QROeEsC1FXw4cHYdLOr0/o4y/JsC9F1so4NIMcYk8oHSITuBSgmNx6UywmuNpLwHLa1xKbryz/1JaK3Y4LlkGl9CxAoJLWggOl/yH4JJfWkmCFKo349LxjqO45K1S9mtLX1v6QFtai07dLsR/+9qS87RIDNY9WSjAP8vHbOk4XjxN0dGv8508YZdhaMlL8ZgsKXzev0aWlvAk3Dfqvb+zfMKWVB5OtggqamwpjIjGlJbTrmINUMk7g3oBl44wMirJBnRJojHRNdWcVyyK92+zUGY8LxEDcBW85NDwrAnf24wqKXgn1kO/w74wEveuBCY/uSx/Jt5lbpg5VJg0/QpQyTeVTFMFYloapIDhi3mm05l5npjyn4CMMdab8uVuMlLDlr/4SUr5DTkYKwtpPufFzhbelhXeFJ9EPW9zVDxv6Sx+tm3vDE4T7SZ/6U1y86YlhKWSpnXxbHeCk/IDwMlm3xApjJiBUzKoGJzCDWaoN83Pe9OcH2jdvIlGN92U/VpbO2XZ7Zk3WTXEm9aZeN4SZuVyWERNmd9QcApVucR2ZzsaeOgqTlEK4mQZcZrJR5rQSBCnpYQjCbnW3t7VJAIuE4tTpI1FcUpyXhrrnDY4mUDdKw6pmdFHWyanEHFQPUXPZIG7fOMVjvUd3ZFsmj3otZV7vhtAJ7VmnFYu8VreucsCAPy9Z6Kbc9PW2MuJRnOyYow5OYqmkTklr87TnNRiTjJzm3DgxMHS7a79yFYj0dAYvXHspDxPgnTU+vvrkxNnCTnByGbcpqXveGZETjLJn03IaSqS0/m9CSwZAqRy+K3saecWQfv3pemhwLmenHw0uCjs6TzsVwNJRj1ATuacF1rIKRldvH6Grd2g2ixx3YHkJKcJMCxLTj4mjEQDHS0MkBDo2YbM9dbdJI4wOw3ASVWB0xwPjgMni2B3qYY8HpyWMhpZGUnYygrUBv1hM7YkyrlTsqmaw21xct3FyYunxenvbxM55QtDFb+YjiXu0tD2Vtj3hUwHjpw0ICcvj5rw7xWnMEcCcgrto7x5Km7+JacvOWXkpCQmp+2wnXibOMFD6yQVZd5Tm+bJPc1PduEnUvTGCy4hYLLQn7SY3VP+ZGPrOD9bcjRc4YAz3EJase2HH+Enm98YKE/m6tA5HB1Nod5akC8UJVAvqycoykOJcllWggAjEnSttTxEUKKWNc64wztHRU3AIBUSJcHw7N9fnT9Uxwp+OxH8DETlpkua9jAqpadwoB2sv9bEgQdU6u8v/T5AZpDNs9OqiEozRDWDMilRbuEgoxL3jCob+Oyvvcom/L1Xe0kTRMgGY4xX5RoCIj1ktpxUUa/M+TrQ5CHN8UrC23vvHL7FTfUDiWG4wG9+WwvMWvM0Kb2wlou7b8VRo4O18rYBvUwoLzA41buWWFxrXv9PSPFwZMnS9NR1Yq0pT+eS5OWXdnnhkGsKZbHy6iAZcqkxyEXrd86baCDwSk7xx12fxFGNjsY9BoCXnrlH/lK/1qXetF1u0C8p6AHVENRR/fJssjDXhGaqCw1bDq9hVIoigfmCKe9x0gHxMtr1PI3NM/roGRo7T3goJUQ/eiR5DQUZS2/2IGPiKLNIZWxLK+xYrTJdbaHF+nljuL0nbLCxdDWSSHR6juTwpSwA1ellnfZ2rcCxsDuZJj1P0oRDgAKCjRFt76QbHqZAb3rWwybiYeHNqoGHhUq40MNCVM/57kW5jjWLBhX3pwl+uirmln1plFcuNKmGnYXzoIbtlbSHaNg8WbpcnTXUMHSME2lYfJAjcRikRUvI2ZkhFhYtgc6pYAaVQvycH2E8th9ULcPqHAFUNs+ecm6GUZjKt+/H7n/GFpbqXsyXoOZ2+go0wDj6j0hHc0Q8HhrW8fOkTTqgdGls4MGW7H0jxVj+Chl/Ts31/BUPiOUvgfgrzIJiJH+lDedBPZR4lCCD0bD+ZfM1imkAsI7+tZzoE6Abmcpqnri4/sHxXhXBv251MXkFwNYjPbC4oqatks+qJG8FMA96gBmtnLP6619f/3qff+UzaLJ5FPd6FL0EYFNqMwgv1pSreVLvMC+BzItszTVIV7Bwc6Pm5/xLN/iXptFsdJLV71V0nvEvn3/SrsK/DG0bQ2P1eNMzCeVNCIHmnYoGrJ0ECQAKpF/56EjUBnx30hfux6RgiZiiWlnPQhhNJsmGqowE2qDXQ8mw1bhaaocMTaLDFLZ/gaTWYkROBUEJkUe6LttyO7Mqq2QX0G14Jk3AiO5LUP6AZ5SCkVmYVavxq+fOfNnUMSOdHMHsyKVBVaiYAirmmTjdmeM1D2Exk9+mtPR7lYplN/I1kYmIyPZdRNZY4Ti/H+eZjCAyRyYXgACUyDQgsjBSZZcXpEzOVp/BwFkouwJZ05a1LV8tiv/kOR0miU2SQalIyCYqZCGd4nZ++5/2B3C7riyMmDyf+6XbCiAT0yWQud5ARufO/YrBq08sPSmvscxbOedWFldQtd378WhRWnBFJfQgle0jCYliS6IQOVirqynhBrSiIzbUyaY2JwsJ652Bz6A61SeHLccE8OfLcNhZJyeUr+x4paSDTPbQiaUfOOQwq/Y5XYDWHG2JvH+aHsEJTl4Aw8KyK/20jjKg2s3JIQETRVVtz5njrNeRhZ2vLcxNk14WFAsc4YLes2iuotJmR5K1MDBVEwuz4R1qp4kmpZBe1Gcsv7HnalMjqMmSFbxqwTA9kXMePg35x6doFFnyq6z4bNcFr5wc2OXXY5im5QyX9quwEVQYHkyeCuwyxsOMoetyVNrEz7inbtQHzCTtiijnh2i4pQF216RHN/DItXCYzjgsKpqhNGBYSTnM1dP/nREFsAT8w3nYkkd6DWJyTr6b5I3TcP7uVqhDh7WnElmLtUMysnPMnnIYKPgpwOrPiOEds/eJajntjoq3YA/zJu9jqMgmKnt4TF4F+QEd05c6tq8niI5JqmN+rcf9OTqmgI7ZqGi/f6uOCQmOWIV6cErfF4ivj319bJCPbVUw3uFjNFMmOhAKpGPHMvvcgxRrmbuhZRo0FzjPXc63UlnvcJlnPmWSKcX2mzrvFtgQWB+xqkfwLE53AZX+OD6L/gw3QhX7WVKnSVpPw8KtmVY3hKlsFrWWNmcRSTJsCUBjhrA2ZZ14hgzbJtFFgFCcrP39FVdD1WtjAdSreIv+qYeYTTUx28TftGEtC/Lv5tWz47CCobUm+g2Py/8ACVn5FzeRAgy0xGp+lgumEtssQpOtKQeRm8fkRnd7robcaEIWKVmqSWAt6z8wN7xe6kZKKsVGW1j+2yRfJ0Y2TYcdIprLkQXwt9mkKY8bgYs+r0CIK7/mt2k0NeJvfFU2FXxNTLRB+2rjUuld2XTnuMtVYl1J3BQWt+hXlvBrwhflbq/Y/jQsCfI3QfY+A+Y2I3ODLUMTgMvbtxmTXkhngjNgXi0RnLoguF0Clt5Aa5U+Ar31j1TLA0UGIMGR/muCCxmaIo3OnuGx3n3MptIruhHh6CcSH1Ea4Yhkss08bobZaVcet/QiEQPAk65TFHgexdo5jNqc83a5d4jNnbXsGuKkTRH6fNFZhjp5Qt2EoW6p6Ji+w88gt6gvzd1WYC+rOJdRXf7KNtMkV6pTa/UQwRZHT2IPnesehsA0vb1VvdWpo4LA+QPidoq43bnUin2h33r6uFyaT5dn5JXgzlK4g7k6S5A4+aJMlCYphBoidza6ElSk4JLuLKU7T+pSnKVRQO6IbuOGtmMzZD+XN+uL4Q70qItHF5dMt4CRZmERojVB1x3nQvXvJY0RHJOBh9UrZ1DpMDxZeQEOKZoyv+oHdDxvM6VyOYFGC34KoYTEIpe14Nl6LPp7TIZ1fijWLfmS0mGti1Mpo0q2eeFXoWl+qKNbv5TrRsRL4h1fJdcFfgxbx5kIXbhWdPw/rCaeMTrTQnRzTnQifgudE1goYP7RRKc+heg0ILpQPk9+he4rdB8odGrfwT8udD9Q6M5AOyQ6GYjuySfpPNiNiI4eW866tyiyv/Q4AT9dMw/lujTmP6ESiUzFuuzN4PKqZxDvrHwI75jAvqiwO1myO2a0HtRu2yo6kcOaD0iepyxib0jexPDWEcB0IGFnxu0IV/ofTHm+kvI8pbz5aqw6C6Gf0a3tntbvkjwQ1wcRaDKgbI+bnNKYpQKHi0ZKnuJvWQMkj6SpskWAAXDRuq2ORjniPUx3yTPteHe8EQw7NpEMjVaIMsci9YzOZHGKfhG+q4K60SN3SB7ZlFxJHnkpmaXDjU8HDZKc5rl3kAnWy6ywO8PbXV5BdWlCMqf1MaOgzgl5Lad9XmhlR486p6dPS5LH25fN+1eoabTrHV9e3jEIHIiYlaG5ivlo+NGBSrYmYz3dUHvt9iS7j6aW9QRhvaXY3SFlJHCcno/vdAeG4zT5g5R9mDs5zbgePMd8WS7J2Umqt/LJwusbnAdsQr6QMGJzqJzHQSXIbozbus53xC+EnN084KoNWOvQW2TmxU+5CdzuUVi5Ie26SfzI3gvk/EXiJxLxMwD8Qr/E5MV/PLPzLDrPPXg5MOcnG9IdosrfAStkhtyypXiKZCvSuyH8x+RCpQebK/zP5f7nJlJccankntblPL+eeEfZbxF+XK2HVehr/U9R/7PI/7zI+C9KqppRM+Iuw/v7O5E6c7TDO6rHjoYX1e6zANWXvG3UOzoGmW4CSEruHqfaNKrwwgigggI4IQFU0YvGJABoRwDguRPzRf5LvsN0ONFDBCo9ht5jiuRhNSa63RhP9PCX+C+UWvJ2yvTvPGpiafeIvdVzY5ytYQzn0clF/wTSv6lR/453qSL6Z29kHt7SP9+if4FkQ4VRm+MfQ+R/f/14/NvXwAqdIWHwzxL8m/NEZ7XiXxQHerf+ubhd8bngPfTv5qaxE/9ZcNpxsRf35b8v/30Q/xUOJH+wBZq46cdigb55Yn2RAr1MVurVEuiuYgDnKvQBCQQl61og0HItWbYXiQE9LI+4gBvLgHlKWu51rymgvFBAv7WL0IYc+pzmRgtrWpkxstDJ/bJh5+Wp5DRNAhXSWc+SjjPAc0FaLAp6lwDl5EN4ZUZHutaGhmnpk4EEaLsQoAgBIkBParttLYDTkQSop2K3HqaYrSQIMbHTb5xlS44cyrjmlckDP7Pq3668lJZON4FsxrThRXCeYCv7tPDrwg+Rkc29SwsxLwZSg0YUvltOBLNIISmpqtdD3qTxY9qTaA/sWj8ojzF7bpiXzqzqUXBPkAxB3jA20kFSr46/m2DTQu6F3EV5EwVnq2oZLa8b42gYr/NaCd97JEgN5lxHb2GeC6lUzeRxzLXQSTtIC3WVFs5u0cICtkWBkLiD3XxoED0DP9dPty3xe6Lw6Qk8aIdlPFzscKlVmxcXjCKK3QjL8xsLFP/JL1aV7FDG2DmOP7NDkALEyLy6jYchTCTrK0DfmOZKq5WttR3AQ6WVPPGQrqvUllw+Qg9LR09o5PPUQ5kVN9hnW732fc5XnMsQZO0s/MrCITs2e04pF3SolxeFzKbT4+6PP3zTr1AfOeybn7WbZkvPPeVwKHM4DEMiLTRlIoeJi7Z2fWprEDd5VLle2Do3dNQN3TTRdmPL9gv9eGVDO6YiJv2gaaHZgho6mjWocjTc17+ZqsUhe9F/+8GoochyIuNaEUAN3USrSa6VNCysA6qAicxNSWp3nC158dF9ULqimlDeoMpF53zjWNKEsi3prnlAS3dpUFQf5g16lcNhZIRkR2T3JttywHSRnPPZ3HCGbpgtpmzshsfly3xraxEcLk9PcybYjSjjCutpVsfxwEM41BAOJXjrxm44LKxdcEPj5rgr5tGj1OYBB5pGuHR7DsX6zcNqKBg1lLEaGqKGzrwTDVX8govaO3/R8IuGb0VDMUM0lGjn/7loWIiOu7BzfA8hynZCJLFS5kSlmm62oblliBJ+/q7VEOdrQzzLgE5u7Hma600oR4ieCiI3UEYQNVNSS94ojHljjVYGGaaLWV7e8yKHZy5r4nxR7Shutj6wMsSxZqVpape06PzVRzB5cvOA3slrLdEpzv8xYycnGjrKV6sGTKTZ6MI5dG78PzG+LbE98jt6JDkmMXtW3nzhcIApDJzPRYz77JDkwuPRH1BNpzRNg8LGVebIDpuZ1GTWa8NEh1nXMENDhvS9yqk0Vc8w2TnSswJ5NMGj6OgBQ6q0EHB82PT4pYfIq8gLcMKGLoX2hfitLShG5m9JaZlCWuF4QZDJUHVUmc6xH0O/YJO3tzHFADlPkSWbDL1VwHH0IRaZnz3KN7RznUUqMjB4GuEE8rRaWmaRsj7IfH+eLlqkTi2SjECQigwmrkohaK2RuX4abnkmyQs/O5MBKXIqeWSgyOUckrR54+K+JVbpahDrI3lkEhADbWqiYswqDyv1x9RzEwhY6WyG3EyRR8XK2Ym+1007CdJU+vNZWCxSk1Req504KFLRV/7WcVCNoMhii9wyRYJqkVtdYfDMLh0/1QiL1GzbilqLDLwyTV67+DCkycLIycc/AiMtU8EfpbcjjAw9iHMWW9YyQuHuamlB077jcWnxlTsASXhBJgAZV++hAKl2gOyd17fPhyqb0bMWDOmBcdLJbSL90cKZMWvQWhRV+1yyNYfxI1miqQlFGTZ/hPU/BQHIpUs4LX2Yz8dnSmD3w3E5/oO9Fe+PAvhj9p0hb4mqADQFYJsHJJNgyzEc7I86Gc/pjzq926KZm7jNgFDOEnat5UcVjWB/VsgH4BLMiw1qlkNLQyW9gzw6zu2ok4Z1wRyddzUlffT6QXwEjULdRPEx8DXVR9IseyknYe8kXb6qj6HIENBHMdOqcEu76rVEvru3d+ymj4q+9BbA/erjVx/fcAGnPqJ6AwZFOV6oFfWMPnp60bNzkiafDMfHcLRsmiv0cbaMykCuSF5JYjw+0qzKV/CxULkO1DG9kXhwp4EwG4dnt9aC6uPMjZQJ1CtYGyw/5x7vs56kSNTDoI0iLz4Py/3XKJ4ab9emuKnHoxYJQkNXGEk+hMmTgDio7O/l3Tq+d8suT3zoxUyobOghxpcPz35yTyhwlHUQQBrmHMcEGK7YhNQUxk7+cs/3fNw/Lnp459wxjQJJjUGS0Lq9qEJt+NRP+hkY5rRJWuR3+RXlc0vXOxByXBmhRlInQFxr5N9f8rKwGnCkuzzQktYelHZIN0vN1xQtxY3dlU2S6cLmCupsfuuTvqBug8r29ogvFcfzhmRQ9lbLibP60GWGFPEeQ5ie6wsJDinsc6NvBcwMzARs92RSxNnTMXprpuEz1BFmSoqZ6WhCIMGE9m3i5E2ah1M9YTUdpSDvLQUOhyK+5AQz8OVSF8RZ0nu3bzIo8x3AhAeKmeD6IWZGBRSV1knCRgeCBWackeU0Fa95W+6Atc1Z2FBmENX5uT+fNAnSbYVU1gK+tEfiMEqW2o8pdL1h2JctujGRXwrol6EOq5yS34q6R8y9Jx/ypFaTZUg3CilUNrva7LCaH0iWCnZFm2m/Gs4sRSC+maKlJsc+ogzGtApr3xGFT5bQzZylgyaPIzlGJ3xgWBqxVcmZ4Z/MVpwaU8fEkZlbpqXqL52SFIIUECRtdtbXRJlryndnygSswEtOTLgvoUjKNB+XnuYZnykT1CVlQz71HcVLag//cP0i4NeTZPFZGouaxXlXmrOT74h9dHzlZCbVaV3SCCWT4ZwoqaKzR2n5ybm+JvntmI7aUZKGtihKuihgvI+WoKSIje9M21vmATPeJNcgka4xyWCsxk3CklMlyOz//uoHTPLgh0qTDIVgbXjNRIGk4xaSTnvzBoWEjTlXhQyGuspjy3mpIfLo6DmGdSkrnDVfefxfl0fz+AVE8giPI8FTxs58tDxqJI9Kzsrfvuyb0XyjAjzqeng0dbv2/O9hssYGKqStU0jJFuVh4rp0GaMErLo1PyKSpBSVHSCS5OAiCBTQ0zTmTjLgnSNk5GLQ8UR91ySPsKi/yK9SKKS5BktGnjvLCxOhRLg7DHmEokm3KkdPptktGNS8RuiukIZRyOM+bUggPr9CCU7ot658/7QN0VGRpBE7/tmGHBndG+Sgtr6uT3Z8Hg0IVR3aSydqQctLtZpjFH0EwzbcJ5jWFY7YcXG4UVEbwmSk6w0ZHvmEgEHSQzaEbr0XhaZQJmlJvWf6q/59ONGnX9Oi8rY7KsWnQ8fnpg53dP1rSeE1iAWlW0EHHfoCUvXOyMFj2Izau8fFGkZO3iW0/ewx7ZF07QpsjKElbVZz5hsibbQNTTtrtZHrODih+qZYG+MWC6s26rN4vwTNZt0IbTSuuOyP2gqA62foy1q12l1e269vuid3kAO+wqE2ZgOYC9poVwwRg8WUX41JRI/oGyjRY8gWky2r17qkcIOO1UTcuJVuVXze6lnENd67pr3yyBGD19dlOIkfnbxjdr9yjspJSw0hck5XV9HKo74m0ksLD4l2MaFONK+S81I4NDShnSWX6ZfYYPeWieFCZnA+eJPfIkyeTLT8Lfk2z04TTsdLvbJrftRxgl7TmqBkTmFhUkzCL9ZKagQbOaVQHHl3mLoGrXF99Ewed8ZcL5NiIpUmcarkUoieyqQLKdV6QAZlvrtm7sprqaSzmZrSsx/HzZc2Tj+zEEdKpU4PVJ9yD6UyHU5cVYDWBk1niDMdSw2lyvAFxcVkjw+XwcpkRCdWyoSNz1Yl6y89GCt1mHYFrq1LtVISrVTxo3JMjpbGB+7xVFuAJyojNsETB+TA6Xr6gnBlKEFLudLb57Ty7y/HlfkzrudZWz+vi7FVKG/mSb5ClJIlytCByH+MUEoqlEubcyG/QPk/D5Tm04DS/ws+mc2dIAgjlJINXZlev+j95TRPs8j79pV4ElJfKWj2nEgyyTX54RUqkqZgfMcMiLf6N2qgtZ0vOm8icghn4vN50NgITpLELBAQ5PrxOD2cHTW5MOlHqCNADLTJ9jQLceRS7did0K+HtCrNv2OnybBN9gMtS/c8DQNHWWUPCaRnC8flApmNbRKF8pc0qehMQwFdL9RYgqSXIcCh2TqCTGp9cwbJIxdpBNl0suDPK29JeiUMSFpDn9XzpckbpC/F4ExeMNMkJVqr81nu16Yl18Q1PyVmWQWSNAHSF+qOg3L3WYDY2v6JobSM6Q/olkkDwrhqgCAd/exM2kny5xvYUpxiazKZtTbrGmmlRbVJS8GY1QZS5fz31xPClYPZEr+1s+Pf4NYUxDAtNDK2rq1EhhmwFiGmmFVnxPxhZ2iMmJZBzFg5w/9E7QMkCHZXz/F/mjYVxSLvF4pJJpz8sFAgTZl2CxiTAkp7aMC+fEXSnNjHbVae9U25pGSF/9V/PLbQmHIfRDAnwJvJN0PPcAk0ovNI0xyNp2eF4arVHXTPHD7L7rkd0en8yLDPPZ1pyeZ8j9fBJq5zxFsngXqbt5CIIsJiTGNBcvwJBQ6WqYqtfsBUMnaroIemXek3FlNQkpHa0zmOyzRkQ7bdR67CRWfGRZeaDNje5qZS8u0sOmtaqrSeRedJ+oC3ltZgEbj0uD5OfPReWR4fug2XNPtaCZ1pDGSCz5PAfLg0d2jYKd+GUEMc6ifNSkMOOgMHlTCVVuX5zsc/p0c6qEm7hZwHAqCDpsOJT6nQFEeRNMaNqiLpIdv8+KGyHui1AaPUesYOOicOGo1zeVfPjfLWPogQb6iX0Bhz93sMSKhUoJPsdKO7xB0ItaS0HQuhcllTT3Eexll42tLDEFo9SaHWGnAcA1DoNGlrV3/WU2hTezNX8xUJdYyEhgzY5XTsLDLbf4+ECtq1VIeTf18J/Uroj7lPoWMkVH+UhM5VEgpqX8kgof55CbVBQkmOXR2FwmWJK1c8HGuhed4uaH3GaSgNeNBlr5UMh+rBbzymdC0ZFo3eQh0l+XoyLxQPgm+O1I+l7SP9QCSLbjxJez94losKw9bes038mHv6eFyHQ7C/QFBzfhrEPfOQgdCi1Nlmv3kQf8ztZ8Zul6uea+3TZxER8h+SDQZICpjBxlZpMxA+QT/KmV4DX7DUTBgAaYSJa3eoYe1Xi/pUdovxSThn0oRy8uVHDhGNmwKhYaGEvqci4jB5eQJSbaxrgCkf33x5smWqkU+SeEy6NE5hz3PFrn6G3xINd9tRn08+Q/k0Y5bp03xHRS/7WpI6yuB8l9r7W9oBZ8nJo19iUFA+93UGFX9/PWns60Z3Ccm+wih5FLwLhaX114r4ST4mX4OfR4mn+tVNbZiWPWc2w+H6Cvv0yRo1chHnSQxqrv8+28p9T4ViCLi+Cf51BsusXYPoJImqc0LqhPt1XmpndKTV8sAZXrOu+0UbvsOlZjI26UeMFDMKtcppUO5voUzGeXEzUsxsBGffy6jlSdq1Ic3e6rjCobVwNP4s6REk2OIm6RseNc/22wkAVFd0cmPaE+rSscIzRt7CmNOZnSUCY2bTU4YZNkrw7PmOvWqSEleJr0TNUIgq1AXwi4TOwGeo2HYejwKNOyeyvD/zyQn3yVDNmlaV1Hm+avLhyP6dI44PzJKOH3CPrhFoxvnQUTFW0Ecly1yNoaSlcdNt0TzfEOg0IEeaEyDNkF9PC7+mAhjfAU37+zsEKDzMpYeJFBNCTZ/N3OfLVNEKFfOgo8tJe11NIZqex1lMc8pMM7oLQYvNlTTlkPkhfapW0fRVoOl0XmzbKoq6TtHjBMvbWA89OR+fpXC1oukRaM4T6PD599c2xoReAE1jLTiXhkDTTrMOZ5rWE5HT7KLGXY+BpuJAcwqgqRbQXNOVb7rGq6BpKGjuO4eFWqV9riXfFzS/oJm9+5WYhCq1uZtw5P9R0ZRQNPNTPSCdziklRRRN+THjL3t7GQhkmjEvHHt1kD6kUaUa8R7VNFCV6RFmDjVJ7JNub5SAX/CdSm13XtyiUCeRY6GoZBEaapZBAml4Tz8m/xr9otVQ/ooDR0DkONU0Ubgp28Fqbwt95VCC3Vm6cCTfkkg0OqxhiFSd35VOByr1XAoz7lMBOB3impdKt0WTsOs535skaKgversJegYXhIjBDtbpEaWkfuqeF+Yk/Lknj59FS5U9D4HNVz1aOSibW46ONwb/rl7XzLOMfVNYxTZfNky3YEudLPHNY71BX2Ku/6dS04yU/ZRmMotT3wSJzrZQT52lobPy5aC2p76m+aXjK0fUgibxFl3KBecO7zirtV0K0o44FM60wszGagw40T4P4E0XGqKVK633X9YZphUmMIBZVdom9wE4pOeG4OZ+AzW0/q3GTa6gPcRNVcZNt+JmZoaHlyhQbK1+bvvz4jtdI7qo581ZqrVYrVN5QKr+VE6Luc2lyvst1iktiDrFnTFD8c7O5nakNtEjgE5UYie67jPWJqZBFx1H2tk9aaSdltXOWUdFX0EPgb1mge/MndwjbTk6FkXvPGeEqAKkievW5qlzkWg15GLV9wqAh0ANLYZUT5wyK9c7rzbo0FpAp7ibty/u/jq2KAloT/j1FdzpFt9Yy8Gmhnu/y2bbEAzWmHrvdNrCupQ2Sxg2yUGChlYFrRnRU6iLmNWpvEDOHGgMRM7lP1ak5slagXnA6c+fuJKpp0wQ/mEBUdORshZzCjbIABPdEoMKvJ7/rgfPB2eaTiOYouc4TFp/95xDBm3hIxwGKYo8acbfj4nzOnHH24mmsA4wTbEeJwHtKKlpzuSRic4ZRFWJQfndaaJtb8eERtdZNfnyjytzpCi3W74YS+Y3EBPySt3IMGyNgR0JoYA0FSBNFfJJZRhDaHssnM2L0DxBmpohzXAveLmK5r07oC9pzpQ01RywVeovaX5J852kOQPSdB9Fmq6KNBFUWCXd31//uGh6GXpuV4mmvqjbROsH53uZkQMqZARde6aguT/gaJnD1Yjv1HC789ZWHEoZPoBEPVOQhmr57alRebQ8pYj2U20lvluny4qVZXHxViSbNpdNWr5V4sZuIHFy6Cm0fQ0Jpoz42DCPmzbLeXF2Kp27hsX+SEXHYbOSYdIL414biW5mo5sv09Fgwg/aAbrG6MKf248zmieZcxfYN2kKan581Uw8F5/nBW48ydWjzl7Q6OZl3FJJNqq8Vwe75vq/v36Ry3iOJLU9u4dc+CaZXC3W0rkRDi5nCxpiqsuUT8f37LN2nN5KdAxdsXWbTX50rd4qZ7ZOHjfNzEfvTDXksDcei81zMZFVipesMp5ISe3eefjOjnlwJeLJUp/fGp9UoHDbWrsVhD3nlqrc1T7JnmCZ6eL40ieXeUvnxV1ppupZg7Y3TxrmGQU1c/7+2nqddMpS+FDWRMLaqXUgkw0L63PCNijZgp/XSbcEWkOUqXMGLExgdmCiUGIJ17xilSEMNWeVJXvKCimODkpoXFOlCFSJMpIF2a3o1mSyxmwrcXngo5Uts2Vt3LfxrDw7o166i7rMpjdhcpWC0JlmT3uhOoMIM68DIEBJ06TnHskeNCMMk7CkMWmBw3jLfxbLzg0zzANOL7VbsyGdd2XrQqP5+4pJ5XxEpEf1ziBiqmkpAJDFhB1MF/b7wYFhrS7+/oabYM7Z5/znKxAzVK6l+VgK1jf1S1Rej0DMnyi30L6GmDCDdjsoA/6CSY1FTBcwD4mqAQFDiJjLs64pnJ9ntaOCwWowYlrIX5NHub7ByhRAzHCcQdFCGZth6jFTQIL/q2HaCsMMIzATYUsHquXuL9axhbyiNrSg0ylAy7CsVxE9nyNzoLWyle5BtbS+Ci3dJKxdes+GLsfSnT3lnjNLn3/gJjJLsR1omxrPRHQky70LdDSbH7H6ebpREOFrlv85s8xDKp8GmJc17B4FTHsXMJVVMmonZh4DzL+/cq4VTMV3NuM+hJudCV8gTAWbuZGomCPQ41jXMZH2YsJ0w0urM6UY880JH8uPCdNdEKYCXEb+JfJnWhr03V+IFdPaDM1EBaPew7b64rw9dzsLZcabJUqoSFC1kJDprsxSoEblXUrM3jZLUp46fqaSzsTywiwVbTJAI8mod4oaK5a+nAvEZJ1hsqQhP3vVI5c0sGCmlKbHuDHQB/PlUQEvMkHR4LMSbECdzU8HVL/JZlKK9c7ZhD83Fwr5xGOY+8BdnsJxnjgmsSoJOnKSWJwoyKYebr37VYHYjX6BOffHKf93ChV42TzHvfFmY43Z5nQX6bNUYUM3k/IaNvmcy2j6SGo4ouoEI5aj2RDSyzNgTc0+DG3Kmc6FrHJGAZ3urbNMVYPNUzltQdRm5f/+es30hAetwwb0C2VKOIMj24Z0a2CNUzgbg+gxWjWAacv9NCtYMz4YT0+gTdLJ/ldtCm+2tZTWtWTOkU8YYjhrhVk1JGUX9HejT4O4lEynxQR7TtIajHu5WTW8Xe5FHYxayhR8C4mIMuWE6hY2Vp9tfNRdYU8Rd9UlZRQgZeadnd3Ss1CgeXpOPOGYvIf0hzjuJQM6l1VLZuhwprTfSrWSYp9yaqt1cWMEcpo1Las4TWk95GNkApBG8GadtSo065fkQcHMKRWb3g9a+FBdfncXGVNpUqN8huVYQUnTrdxsS5SndXeYfztLbz9w0m+a0gpgdHiwSLNJ8hstsnQ/VjX9NFE1Du9FrJqKqqaID90k9XNRHrof1n3yfNBJqVKRYGTkmha7pgK1cpcvbrrTQvNOnClovoRNJ7Fs/v2N20ueBVpz2txaDqvBPYriQzuoPrEja99wai6izeNPKlAZSkl1Yw90syiZB7Rpk7NI+ycrgs7Oyi7fnbtbYPYV2lzvUcY29Xzapnqrbf79Rbgp174bX9z84ma2dvw03RRwQ6/fpJv+QjeTzCKrpH8HaBo3z8KFf5rojrS0B6YBBThpcH22zwGmhoCZJytSv5TXfmlJZPf+8G4dQeITeriw99m0nh+pLnRxpQ0wSVTxRmj79mqL5mdNaRmG8ws3/De8B7dtud4TW4/UPZFsinIgBdlvTXntWIKZ2aiVKqHtNlH1KS572zJVpWXK84FkEnRJAEtVFZdVzeei/7SOcebLY3LINZ2H8OBnAEbNPKxEJphralq9N0YgYDV4yd/gR8tpQJn8987QMa09Y7xfIFPxLXF79pExbLdMcvNLf3H2pgYuHUjhK3ZZpiURhxUazucsDejS8wRVS5eWt0wmbdkz3TGdFG5MeISxXH/JmLTabh4RviwdS/7/mhYGlPcbZd5L0rpolUmeDV90TNa/kyUGhcz9jSwGNNH9MXwZaUSZrkyZ1ue9MhPnzOJ8+dfrBuVt+eJRkuNw+iVsnsW/LJ30pTKksasdAm9zqVI5O3I6DgXkkJRMOMoEkJ+MKQSchGCPHIVKC3VgRNkEfcDkCEgk7ecKZ9iuZVRZXJc5bmKZVKadrR0ko9HswNX9YY6wMjBKtkdRsCGtU0tCgGuenR8lo+TWTyfdAo0mBTxYG1V+JmIY56yR2qiNxzhb66JOoNjTCu1S8zp6/CAEs63WKhf788Zsj9W2tomdNM3WyvS5gKNWC5Aoun1LtCJJVqnW9N+byMmqkLJmmN6tFTwaUgg1aq2aJH/uj+w0ZWLXcb8Z9cWmPdZttYdqKLsyY+qzZGlTuOAWHzrUIlTCySL9dOODEIYmRap8H6Cac8xuxHvAPCuToq8FDTXHn0fXfqv5ZtsQzFnjfUbtKiMLjcpb60nkFJrk2L7WbvMehdqEQg2i0POeCgeH8hGE2ZjkcWspPlJCpV0qhiytkaPc1GcoNCo9DBIqwscYMlDFNt/bt0qojxPCj258tMH310H/lx30Rr5PVwg1VmRtM0qJI7N/E4SaegiVViv399f428T85+7XqcQGoYJCKCndJsBBOgMaM+o7k8U9CM2juUzZ1jxyKEk5v7NP21kxAEOoGF/IAAdgou6DHISezyY/0jzQOtMvkCwYBU0Uaw+Stn0IEcqBpXtGYp5siQmbSU2zKEBkFNzPVj2CvohCycr4ikKlyoZNE7ItaGfRpRLt7eMY9lKDJgBW2UAFX12a77kp6YcxCz2MRbn8Tfo905y0PPseVIee+dx7OhECdT4evBsm2NBYhp1NmWmPYigYqmcTwmghxSOpM2ion19rpdt6Jj1nLz5HLXsWDJM+Ij0Nc9Lc2JnPxCi0KNx+y46pVowaa3JMlFOo5gqs8hRq2ZNF3E2zttVUUshBHXDwN6qvKVQNoFDvOzbVbK5ZbK9WJTRHkdzUrHFMpYMoSZa3Qe1jXP8ms5UtNk9yKoGosN7n7TXP8rUkp+c2sbW2GnSlZpvNHipxLVs93HdzdS/03HjNQ8lTrcgRzvpITNPgFMjt0LuHcl/QofWsh0480+X1NDo+WKX+nEKuHqrZuSKUhIMFY2nZbJ/3fZ+a5orW9C9SsjZfozPp/gJHRnJq1QhHlyJvdA6RjRVw21P30s2ZAbWv20BUL5mVTsN0udnSfueDQPQMrNPiMmulv5KHHksEt9hCXtw3itSmNUrba+C2f2PKUkGfAY96zKMz43G0MOiaWNR0EKF9PH5yobjwjHvUpF0qz0FkxffTur5x7qkF1SmWMqV6xJDOA1hzkqYcV0lGQEoUV8G6vrlU3yuCew8UpfY0q1AwQGo1anKrSM+Q4EWKkvz4PpgztjZw1cFHk+Gc4EvyLI9GnvaBzpdirWwvr300PMdW20nmz024nTxNdb7Zu/FW8HU9/oOafnNIepHxegTcb0zF95X07y+45XVSq+DoQWrXitAq7d/5KJos37ABydGzVctpm/UVeRt1+jippk5q5wk0Bv9C6f8glG6vkHdC6VHcJ7sjDQyT5D38HrtQk268tI8zf466PVq5/LXh73+0f+5+oXaR0vCtAioVNUVCwfFc6Z+gUoN8vFpKSXlAQ5bjkqFSqYe/6HDgxJGtrKqy0vkiKQV8g9GGEpS5HZVHyKQCJh/4Vc1EdthOEyaC2yANcqAHH2ADExiNhcCBk1wpMmw6arp0ghVwzXNUqtn6i6ZApTNHpRwTGhSCRpEF6YdtifIB79dBqhWR6rT2RSs1FwkwF8VxlR1RZQyfcuJufkEQVdPPgO9SWxG/3zMUtPceVXO3T2TVMmWNJy5P0jB/Q42hal9ozHXV7nMeE9fBM1209EQZ/rnt4dv4GlQF3y2bq9c9hwp31smzG0zn+dKcN3z0PKOjLt3cdP77q8XVVDFgAZR9xBnr0xuSa2cJahdXM6pDGY7ep2esj5jaiFLZP9zCFTKq1IVjDiGU6LW6KpBr7sxxf1586yl6BMC7SjidpYpzZY+V2gMOnJdW5nuC0oqnIO1XGwZOyR6F5M257oPb1xYoXuVEnZwqcuT37NRNvrKGY0mtDf9It1DypJfgdJ/zsga6x39JjpOCwx0t/bBbl0wOZFYwKxymV2gu/1GnsLO8LtskwTDPQXRV/QVV4v6Ni6AuYXSKpsyccxyxs7w2pvF/R5tZ+lGHKvk+om4FA0s7OZL0Uh+y0DS15Rm0FHVtyH9vPCIWwiiHSMGyIcBTF+5GfAdait4pxdv8EK4FKSdww5g6TJ1RMqRK+c5EA5Laj6XUNKk5Ru8qSpWoKjJpKHqKzaDzCMmUEW9TzrTQCkw9B28t/Ruk0kDz/PC6tZYWcdXo4AXQ1PM6ZzKi26V3bwW73MpedH6bkaeGHHkX6qMwabJt1d5ficmaOSugcOwDqJ+GDg4gTVaScvWhFZ24s7m6W6ZN05RqxKehG2o47bFk+UtlHy4bGxVrN/ShnK2SW9Zy46mtPhqVPZOE+9XW0fqLp188fV34euGpzPAU5IdRx3sOT39yPDWgoqnWpIi5foOdajkLie3U2bmUqlMoaXnzrMXNgzSyBk8JQxI8JfXjvWDahT5QSgEHfgWBEFthpw7YaVzI9vjW6IqXJlzaRxqlKr5TXIOekoErTRKnk/YVbAHp59EY1Xa+i6eyUHmTie7drrn7QifjO36aj5XU+TtHQAs0HqE++nnIpMTaED41tNyt4Qui1vupJT+as0nDTHwfYmz5t2pst4YhLJrHbUXfTF36DKICnhXPgdEBTSWA+qZXWkvGLW5bSe6OWbMdYncolWQmyD8Gry9LuPPdQ5U246BUV/QPpTmQpp1GpbuidbAUEgFHlZNSDWvpgyd3r4GUEoKS9lUpFUkZyqw+y8CFszkaOYAjeJFOcF336j1UoXKL3qNCu3n5AjWkcZjh6gkAHp2lvdRRpn2oYpvDZ80E+juHz7PiQEO0uIzmVS9RUHKXpJgKZwdRnMBx0QodPY+knwupExMVTS1Vw7SXlEo0qs5DJfVQvAOZSTH4YcMxoM9fznjXNpo/OEeE06fHR+m32X8JFKL0KnvLkppH++0IrzqHQk84VInCuo49Dt0UmmivLTwJCKJa7iCa9xc9reC8QpJyKS4KWOR94s9zN6MW/8fVG8RlEzhCGcXk4RIhNFrVmh4YFJaubikS68FY6mnuFWelyV1wgMSCpSd9ndmbQOjy7sBmxC5FLCKSpuuZ/z97Z5dku6pj6/fVioyY8IIi6IEiaBZP6la+r5ZVSNgYI5y50jDB+1SuunVO1a59z9b0D4ZvDA3p2NkizRyScthKi9WS3N9P6aNCeNM0z7JRFxrBO1caqVIfTau/EyUav9GD+rM43puDMFWNUP2YQlSExrfDYCP6NaoGe/xxHO+d3+PTP/rU1FipoqBbCuBVaDinm3ong/cWxIIkioZ/FUXjyyGfPtq9sTc6Y+8GFppKFPVqAT6JohZRtcaqJQnM606nzX1NFH+iiUYg6Q+HdZpoa1RCkBV2F0XtdFHUn1A0J035zbDk/K8M+v9bBvXPkUGhLYNSEwP0tD/frvSLnlYoowOPcwi4Oi1whShK1lhOBymR8bUoCv80tDHcWztuaqJNlg7+GxR0HcOX/3PD1QjSCckJ/uucRn+RP1i0ijZ+6c46qdUy6S9H390fO/rT0avtMa/toCii61u6v09fi/qNyNv9l86RfrExZu3apX6hgUbeHZsrLbDZ9t1wDswQPcMVdL8WPfXDezVd0n9h0WgI6j9/if/8+BfHr/qU/NXMzW80z6g1z9p2Td/OIC3+0352Gf786F1uTw6+WJC1tKnX6KAOVdd5sgdYA6AG5ftRvO7PfeZXc7X8RTreS529lcfDfKV67m80XnVDfjW2cf9ovknzzp/YBgrTisDfT7pKGDw2GPXTYy/NEFfzRSOS6Jw/7QH9cZvw60VFo851kKdRN/PbrFydN+FGjhH9efsLtFr2Xf1kq7l5/yxtnrIm/dfS5qklY6iY+e+RuSxmhmsxMwIRmnYQjloP9JTKdyi1mdqHJreumuuuJUyHmtMj2qtmwuGTDYUE4rWGaa81TIv0j8m4QY21iO8YW7vv4DTw+m5YaDZN0DfJuFfdnm/5PR/+nG+3C5d0LVzaizBcReUbfxu+ITe7DG5UvOFoKGg3ciqn26Fclom3Kj6isjfog/ePTIw/3tK8Xq34HQ8SiSe9Pv8mVZ7nm19I60oH+zGE+vPjO6nnX1wLlfXkVA5jDdQQJ21rrqCKf3hnnqTqbS6UxcZUm4Y4yX+JOIYWVB5meJ0bbaucTHxrCg2luYCuRaVK5arQwujckHq8xVoRS/MJ37Up/mjJ3qeJmf8mTlbXv2h/LhQar/Ks3xEe22iaLZ6Hf5YnY0tuLQXkIy30xwkn935PIxrWtoRKV/wcX26mintxtG+L5vPmpDJ/mIOK4NtSl2/plPaFyOp8kRzrT7O3bxwq7gmVsZpH6S+cImlWK2t9/IY7baWOr3sxh3dxFxUfOX9sdrwKY+DB569tLChO7z085ODQkicNp2mkZ+f1s5yIN8iTke/uZhp5mQnZRr/65H9BnySi5epkaKmT0FQn8XHqJDRmZxJgdSZxMDWMeztcxEt10sHrGnVeDDS8PzqzY0J0c6xhvWH+Xp8k7aL8Ju72napOW5ODS+q6/w1Ff/CFwmOJdF6cvc5VPSKa378pueoVazTV/VitBHh9NafqMuzWwLvFSq9w9LWsY/5FrbwU8T7az3Ytc7115bnSZ2pHQWiJlQrZq05r2+jJJG3QNODfLU8y3LD0/dzLnwuS8buJhrH6cRdS0A9l+D+3l69WZ/hVz5L9F6Gyivb6KrM1R7cBgGsMQZ7Th3qxgOMXS53/SpfUjYfui47UFrs9NWf/KETrfphxlsxaZ6E6fY8Ux/tep3Tm0r9w8apwVi2hi/aNo7MObnNspX3LuDFMqUSKA4d8/lySrd5P+0XO+OUUyX/VLA21wmlJz7+qXsZyGtxQ4aIYntdIp7Un25QaG8miuWnbLuHrKOf4luDd4mOmWwS8Ele/yKbVORzQ0d53Y9Rgo2VB6eUtCflCrFRbEZyiIO+Pkc4kzHG0X8yQPUGwc/elV8pKRzPpz/v2appnzsql+ln7Q/T9PNwvxkn8ZAf08wHwxbi9Oh1Nhqe9Xpfr/P7BK0YV52TXxnhc8N9NMKF3NrLF9hxPOiuXr5e3ktj5bZt8U/Gi9zkKGzpRqb+9gmsolPyz+L8toagNenIGuzx+3hb547qtdHedjhtnaaItNtpabBQ1VjWwxq0T8m1Oxryi8WW0DanRNqVGEqQP1Bi76XQwsRB2R2/7DR+HZmb0Fo9bkBoze14EWv7RzZ1naa4Y0fnDA/s9ba44G/j21N7cZEhKajTnm3EkGdedvCJoTwlaNcVoU/2KlEqwK37RaXwv6sjvVzBl6OZ7AZlJDW16bKWt5Ubin2BegLJQ1Rcd7ibF3sSZaYFRImlbbOQIXx5TGVCPsjCvey0w9731qDcoFF76jJ31Rle2L0/T0ArxWx+xOZO1lBtpYjNUU250ALQ1ZsIEE+0/VverNv4/VRs/Wmqjv6BnWmiarTa2Bz02pnRZVhvrFTaCn6g25rHI1vJxLv6D2NjyQurfdjeT925TfPgXsRGvycCrOu76xiyW7oDYm5/nGqbWCjXpWWmqh0ZBkEigIvBKV6QvfMSz5ohqsKEUovidvqh+KODXj/BlICzeeBPv6aqaCkTt4/pGYHT4CvCFCuevg5Rv7YZuC4xKD1GvqfZ3u4bCCOro2UC6XufU/DT09WenzWxiNXCtgO5voG4aclpUxG8b6Krf82oY59+DBqCx6Fr6NsMUvvrVlU540e4NOtwYWEgM12nW/j3XQEfHKPOHU9RDRYCqZwP1mEN72fPZfLfPu483XYR8mm1Jh9rv/y/aoZpreZ3ifjXn0nKLI7r4xuizY1AUQWPaovl35fA7JTE7iOyXNpm37RWr+nzRI1CspRcJhpeNTerJaHbdVYeO4yjv36oQwhampbpV4Do5OeDl9MpQm+BVHxS+cfKXGIcbAyzBvr5XdrVIpQNaHejuxrek6R6AtfEff/QcXNgDS+DpL0Su45sa1UhLetsvMjqydZ9hGY4fcf1e5fRcuFAQlU1FfW7xPbNhTxPhgo2FZrgNvatkwkYway2Clp/2tzxmxVcttEPzIcuEL9npFR+/LwZS1nS74fb8kXDw04XAV0Q5h8VKHqQXLTDyu2VqeaweKaB+UGZEb9ta71+dQlspFSQ9VyEcQmCkNHQTqZVaeeMg//MlmIUVX2usXwqB7iW7JT2qy7RaxKo+vrfsdG1AvfYeinqr6dC1Otriq9EolxYFetuBJX/b8ZTLWwjCevxg2aNXDiRs1H4yLByS4QQh0L1MqzUSmi0BjabD1s3g1tJ6z+KmRYsqGdC8QlsGDI2mw1DeC3+WAeMcnuOSDNiyHdTgLhCEAAjcKVk9a6nd6/V+9nayVNh/VAE5yxXpNDYyx8fd7FG7KwJ6UP2+8lv0qfuFyI8HN+5bhDUaILY1QLdpgHbr8puaiNgQAe1LcErat9FCEdD/ioAPEAGPTLHVKiDFpgoYm1lC5FeJgLEtAuo9fyRSfq84N6x55wHW8uRi970GGFpmsMb8y5sa7N0PgW2cJPFbDRCuI+vag18u1IZwT3K++7GuqnZ6wlWNTeEYeXH547GRGKgjUnWzBsD0cZl1n9Zlbw81fjUbLb9oxvsiInXaLzUaCcfLiacXLN1xQ92VcPZlp26Yk2R82WWk3lv7T6Kgenf1LMgjO8tr/ne7V/3G9Id4DnO4igdtPIROv6T03dtfZ6Hq8a+V2P+GM6uWu/WH2n8zJK+4CJdK6YXQ3MhRR8Rm8+G7GzCLI4C/6jZT4orKs47fqYZGT9OLOqHoSjaM9Gb9+PU6EWvfbq63LdGwfj7qS6EWFPjuBZFQSlYNJ2SSCeE703rf9rcYNdj5p8IhqbZzM8kbt3/HYEtFs6rL9l/Vwq96Jo/owHNSXrVfuLVRuWH92OfwiFr4uvpFBomwPZTONvZp9k0K4cH2TEMgjLX21JIE24mnUL9/4T2/4LjoeKUIupfS0A4Bw7cFQftdaMWbJNu8OjQST40xpR6YFTQ9tPG6UfCtQrNvdPwcol9RucPw7apV7tIuT3c/e5t/vlMJelLjMXTMZAGQ92h/Pz04AahA/9zy59/0VW2dzyXC+MgiPPLkXi/7sgJMTbkzvjhMWaLu/r87P4nasxR1EEvS/QKH4dF2Q9TfI9+jiG+1dx5D3NK1bTRXhobwF1j4c0r4k8jSZl8g97S8eZvG6xGGVytm6vTl2GXiwIOKS/WyeJ+0WBWTkeh9yl/xlaBG4M5JYtn/ztC41qalZEb1e+j1ev2Y3t9Ryio9T0WDnv/Wcq3M16MU0K7lwNAcivyWG8QendjSRwLrfYZamcLlM3VoLGLQoDmCnzTxmUaOstOKnyF4GWAlHXXSfdJ+ZgynKWasNoY4asUvpGGUdBIqj8XpnkR020PeUvzMpeJnAKpY4KmKH7UVv/iK7I/YRyA6v1bwMwHlqZSO+SmzM34Vv1/Fr0Pxsy3FL3YV26X4YVvx0xFL+PeTdA7mEs2PrjQ/hH+QR/zry3F6MyS/5iS5evNcqyKo2knqdGq4ihilKcaW5pHYamJcs13U5Ej9VuA5zKph4vuYUUcTpj9eJDjptEZQ3RGXv1sPCLueiaj7WN08ZVMzEeWCxm8weP2rW3mEOn1AgxU3p3f3ciSYUrNjozvzGy6et7VXCYMvi61zhv2xaeTeJPug2YWO3CxlCv1Ga8fCVexmk2K9rmfPvEv7S2btAN93xKkPEOI3mud1f9wxOR0RTeNR+uHSdoegvKpqvVVkrVJHwndyn0M9B+/1TbApXGosPzXv34hdawaM1ooX87rwzTpn6/9PX5h41O/O+aK8D8P41iCwImEU9KwbpmcM1v65NzD3gio9Is7Z9+bH2dYWbSatdTABtuSjfx9wSE1F75xcNfh2nTNCk4pntQqWH1UCbOcc1vHR4Uo/eo8GQBWzK3L/ThpetTtoDLFsJYRG0EsRvVFZMq0srPMz1uiRC/htQui+eugpBO8Uyl5GxRKANazvtdS9dgda/a0LPR193VJfGk4TbHQgWljxQzDrr6Z8bU99fEBvlfFY4qpXjPyaFDqeIyk+6d5I/quJ0+/5TuCrPcsDy6DCQroL5uVIVt5G+zRLAUpI+nmK0w1zk4rrTEpVbExriyRaHVCK6oRGcp5BemsQ3v4tjlJEaAxpVEIdFx3T5U0P+yHCn7p3DLzdTRciTwJsaD6opTnuQyQy58DNQhJt/eVw6st7RyPbITPpCEI8Ozv2R9+Q7k4rJcRCy2okAb7iTydq3Iz1wfqpiNXMxvK2aBnRNhI+ba110R3B6NbvCVwQvl6X4pyiNHjSR8+9eGZWuGV4GXNqxVStxKU0Z3kIYKhj2baWdTcj2vLQpcP3yhy9TOqD5H68WrPmr1uc6+PWSbO+rcuBBB2DtNPOV5v2TXk4DefcvziOdwAmpk0MLdflADDt28OUURFfy3L+V5Z7gCxH61U59pO1ZLlm+iWuk+XKDocSdunwQ+FBddiaowWy3N/PmHQ5hTyR/kHFaMSy3Uzj7Ahmfn3VD/ivwpypIb5r/MdqgXWmSmeVp9LHG7JcS4Q9HZh88aDOix41aU6EOu4r+e0bISqQ+yq9zKvgx5tQukd0lAPbZXrhPypuismHryM4m6G679+n6W4j9XK6byW3UAO3+m3V3ofygO81K33L7z5SRGKjtTc94Fpl03LhtyPizr/CF4v2+yaknCzNfOBVP5H3uF+JafkJ9OG7GY5/P9Fh2e0xTzgsT3AH36hnUxolmdVt0mowHV0qRx++GS1QmI2OdX38784npZZmhommmpdaj6L9RhkL3yU2ysaDwDl871zZnHvSCtBEPhiaC5nC/v1UVeOkDeZ+VzymzC2tM16rK3VrHzUSL88b+/bn9qev2w39i4FHGvQVs/61JX4S97k0J37pbU58W7vdEfeIjavoQivDshJVTRzfuHarE7QRZ9kQt8rOoko1qN8PeE1SG/dnXkEUiqxnmfoWXA+5U3r2rJ/w4ctGwSRhUdKzdgUrHg//lR/rbk/azS99Pb7ugPWFnIXSmsVJlDKPy+tAW3qbnKW/2oV4yCuKVrMs185JaK/TCIziNQEVcgDvbNUuemcuxs9FaulZhoc7pRF7OmpCft6bnZRZJREsHFxTGzSaflvW4VI+a3Gtfdmb8tNesxvPjJOYydjAGmVjY6mchNcL1Jv5avxFd6fV7J6Y5RpJetQWs1RLpW0pcf7cO3fclZ8nxd2bzfGKpNus2mqWVWrWWZ/Lf82B/ukwp2eLk3FYfyA9Gg9c8QvK9MZCqjiuv3zlpqU0RpkS1hDYQ70PtYQ8yCtoyTB9IsKUuKq9vnCKPCnWy3oZsiSJprHRm8jdUjiXkzTmDNqWniXtcVGmd/YES3YOngqhLWexiSL25koO0rMCf5VSkoHB+el8v3rWo/SsbMx+gp5lWnpW090JK/Qsfx39TzrmjKmmzmowbvICsJ+tbHSkW3BA9TI0YhJiQ0m62cp7u+E4VAa2CwEL4CptK8+q+QcBy9A9OeDut/n1Au+dhGnQ5Q/KdLQcRNSgbxfNNj/edXfskfgMCXourPzFejhc3TClp+w0Tk/6bbMTf16oW2iKJn01+65Sq9x1V6fORXvpzLh3rxfHHiu2Zh98/evC5cunRekcr6bhuq0n7b0VMpSOr0KlP2ZDbDAK8NqM3O5/Cs3ER6P+Lnp/u1uownqOoeyBqByjfnTk6lYmlfnAGgW25ja+n1EcFv6D+wd1Ooxpjgc6terU7W6Ka4SrNi2Jmnq/2gZ6JyRjLv5+8hH99Yr2FdRI0e8mFTqZlEPo3JvPyznvh7SaIq2X9kIVcBw/U4uIHaeUOy0AmLRcU7cQQS1qnGI6BvdM3ZLYwxa7YyKeOo0cUWqqUBsHR742IvzQMv/nzvbA6uFGaF7NP9aVOY37115ZfH625tzoqWgEHGrF8RUvZ5x92/Pk3iZc6NDO7Zo70+p6MnpQ28WYNmMm/4a670kGBZrokCWjY00JOTrTaD/GJirRux6Yg60FbF1FbwqRiL9ZfFB0Mh6HHYevagjMe95Bc/b/l4mjDWHIBPmOBtfMb9NpefTWll6dSejLUWS2Zt9Mzl+WUTMrLK08Qiynd/m3fhPNS6h3c96m1aKQ5c2n4afbvdoI/zSR7I0jlV8I4fzQHJ9zlfluCU4a1kcRVFb9BL81OL1xT3UhJZZaojpA+1KCOCZb1Q1FZw2l0S77XlGIdCeWDNxr3SYtCtlTg+JHI5RQT8h72+kzt4QAn0iwqQpFrQqZstzjKMChbmaadRUC/wONVqm1KsQaBbJO4RqNWa/XvRyBHx/0d0tmIVjkqm2wWhOKrD6aUso6ggfsfPOsVoViCEqxDdyb9UJyN3TzN6tC7LTg1dCKEOP87TlJo0QhdpXJH0u/otCvKPQQUcj/uyYUqGuqwu1KL2eqtEShKPxFjcQy6Oeqwts/N4oo9PpORDllInjdZtY1f6vnQxAvVKFLkaEeVONbA8auslgczenlPbJzvZwH2eb+jWwiVNJoHevbVEG49Zv+3P1FJ1moZJ0lX98FK3OdJ/Zx2SNDNHEKnBzWA7bsKPoHqcwe/DIJsH713h4F6AsZJLnrAV91ixFex5k1Oow+7ncY3UxkD2VPSiFy7BrO60qi2reMNWmsXo+OnqI7DCmd762OsUiyjeRXX0UPavl0J63ONXqIzI+DNm8N56nO1BReOi/WZdmGxwS+4r9G6Llzq86bCA694umfU3i/HUV59Z15GVdAhcuZcCnAhtDdie29k/6IJzRXll50mfBc6Z8PG+/FeUZP3Ai1BEO1SOCaqXX+uwGDAd4YqOOLofZGqzEBCdC2OmICEPQB9VvtDOZsRd3fMtuUY0LEInHvqv3YvK/szHjiRbgcnZWvi34XNeGLXldNXm/KGotFCt3ebmRtQ4+xV3oMjz6aV7U/hc1l1eV4tE1+ZKw64tD21984ZebwxJ/X0ryeHKqLePP2oDkWbOWSHxfZv+9le7UOU9Ksglp3seElF/iUwHZovSnrD947ZGX/JKsAJ3chtjh6RWSjM+yalp5CFN8eobA/di7NHtGtnrH+4AB/1zl+OvUO6ei+mx04t7RD7voMDYlIvtVKbokstxQv1/GIaL6Pt3pwfjpPKLNP/eCa16vR2F6y/ZwbpgSk7aFXaVY/f3dvm/8Ov1bOiQ5NvUXn4ZlmW5f64W5iO0sIyIGETnct0Flu8Uc8eyU4sdJimwMg3wYSWG4J/yS3OHIv4MPE3lh3ayhVRxAPA374B4klEq+cFPhf9JS56QbQhn3XaYXl72cwPB0GiN1o6yQWU1zkU3AbZ47IfirQMollf2YtQUwSS5w0//crjcWfDTW/gstKwSWnuyB0tIf01nMMui0lF38tucTFkssr7dpJj6fmfXGxJdijWTo6AztkFoiRUzv4y4NXg48+vuhteN0Nj7svrCRPo+WhuifnezX3owXkrqaiE02aaZM7W+VwtMknisab1nPTznszRBO7gcLZp39kGbdEElS/wbXwnuqWuQFKO4Wf06/KMoncmBeZ7zoNYiNR8Vih3v4iHyNoSR4pIe+mNCDWZX7R3uLqSTuThqTGUqkqGCWIK5L3yBpYf5Py1P7VP+9ouWV23/ICG+db2LURW49DqZrN6o8cOeecbmiBGS06xyEsX/340qmAmH4ZoyvxhGIdlnYxOe9O38qdn1HlpfkiUcNJ44oz3LtS60CweedlzUacQ4fY49kQpL19BVcQe4KzQXSKHBJf20oTK3cjVVw+tASdVorZGQa9U4TddI8Qj9kjyaUMzuQkp8aQqTfOavhooZXS9a7/GCfls/fxBe8b8Z7vjtE359BIC/GofokzVZN14Y3RdDo3dqfXIltUj6WtKz28xFwrvU/XOgWKsUwBJ5nC7p1GZTtDeaSgd6oUB0erbndev4Mt+ss4Q0DEQstGrddpjsLb3pJwHrRQhvphzWjtS/JY7KmvomxZjERlrvd71sy8oWwOvjGgdj2OXs7xPeDxb2VMWH5KA8LbrVFHIotcv0ZzjdFAM0gGpDm1fZSntp93g9waoGnYMNzKkFb6BPAuBhrdK9w6omi6vJz0ZidHIdIfTVrlzKOWQrFRhZbS8mp0V8QbL+vtmPCACssH24ILJ4/MNdSXXTTV+te8jgoXIpEthZVClyhyMsocaUfk+cNjyo6k9x/YbbAmBK+UklqLYHdQYG3R1Bc2fY/sVD6CIQQt6da6BBdt2DRUPg7FZDCYZvj9yDH9yjRRtFdk4mEpBkkmtEAraLsWf866RGBdgrstjkPZvECwj7MwEQlsEibcglSlti6xEIP/ChP/DWGiNejkmECyUpnI+Y6kLH7gy+9v9lNFWqJM/P10hzRRfTX1vJfeWUK31Qi/RyfKNvI0Ai8vF41CQ7P7ZlKrYg45/fvpSaQUktKt1w+Faj5Wk2hgFrAvBgeWuHDfJ4oIIZaKV2u+MaibQJMLD+2co9eLpG5x+unhuWFY30XX0KkgjQpyiiP3Kir1OTmiTmlvNVvcWvxuSQoQGiNdUBp64q4p6DNqHehTpDrOSfqyVYDbMWQyPdflya0x5uBIv3JuRBDdnzvPigrAQukTgTTZkZGmPwXllnOiX41PJveaTSjcvUCZ8yWbOokDGFgfeDUaQsLWKgH34n1vUTBqpA/H1yseVDtIg15fQtUt0OUkNsPKd6ESBOz3qVQ6EuItNNEXQ8xC0gOCmmSyiRh0Ig7vfHPCyU23I+zWwJJgUdgr0JtT67PBDtsKwGmgu+Z7BYT6ucf+ThtR1HTMWWtt1boQIjbnZDBfe/MV9ccniu2pSQM43luHYb+Yeiu5R6a9XyqLwUDrArldBEhmEIKUD4UyaqGA3G/UADCY1mgBvm5OawCRV0JTuf0Li0Faut88duOgLjVT9qalAriXAx4u49KTYZXbPJaNCu/+3GAAJupGqwCoVQAkeRrw1bCPm00nnLOXMghnbnS02/jax4zytUR9Ao7JpdVQM/DO+eEecmZqqKSAePJe5xUCt7Ooa3BzbKgDP39l7/4KCkpmscE0OkkgYAtFNH5T0MQab7Uo3Lb7G6IYVFRyDOReWM4APPK05d2QEeI4M8k7GFsmKl1KARzjarjxIhJtXQkwFUz8/WT4XPN/1PwfyQQiF9QjwBvQOI8E5bp1CnGL/0eybLgPwdG60dfYwv8hcFkmpS3h/a6EXvq/30W30/+7Ys4v/f/fpv+0Fv7vS6ttwP+91Zs66+vD/XFHAZJGq2bk+TrsqWcEyL1Sd4wSI2TYb/Wezeh4/tuZTh1rvDnRfqcw6GbmCkHNDr17YW+PJeG+Mgovk+i+ezkJzjEq7q++sKFsT3lvqcUgA697tTeeL3GtXmEjNWjEzKv71K3s66hMkERiOllS8u6vfi7utgr0DNwxcuo9WH499pmq5KhvuwPenrxqgyW9vmKB8r2isrFJL/S46FnxT/UI9uOvozA08fKq43IjzAe5EaDRwzTnUB2CjkkytPUxvV5kX8a3fHYHI6z26lMu/8v6Rj67DOVLaB/LjNwjEXqz/RPgBKmw8MFpuI8nuG+EC8W+nc+dTpCgxKeXlcN6vA4/2kf7AimG8bojrN0C/ZjM3SG6EvRzxmQsfP+vt+sOma7q9ZXHzLXN/ow2I1/jQO/tk2imRnyU8wGKkeMX8UU2Lcn0Voau5q8cMUWK9euhEYcqEd5caH7+vA2vsMH+Y3T7rjoFtY8I28b955DxzvpIoT0QAgvaz+MgAJhbGZJv7gveHGxSf3GKWwdGwX4jsN9uaXdej3izqWfh3cMUMr5oDPgLx2DTE+oHuxsTGqFEErI0w6pymC6F/9TrEwQF+0GMCSzpC9WH7Vmes6dyEU7otegmreGxAH4nxop6B2Y2DUgrFeZOX+Jtd5Ce/oBBm8wp8X13VlHy4BRq6ER4I0fj7o9QKJbpbIPvg+b7wEp7amJAnbdkJ7rmTQCmysoLEsidCy8jT2XZ4e5RM/XsLFQfvqf68PfT8mEn8MV1Hab++0CilYsELaqfNJVW9lTA6cSnQfVJUX1WtkyIhDIiZAGrLpQTFd0cDNdlJeCHLZ+Lsf7fz4AkU76lxWA92N/L+iX7DyL74O71OL4f7GO2si0l+7BzADj56hRV2QNdO8Y43Kw0D3JIYF+IhWu0/aVzuJ++srt8wkosv8agkhH6stW9fn95eaiUZ/+kSVsiNrbrmcdO+8Vf5+3su6s9Yuy9Ptfwnkic7dgaqyl3nvysUotoFkt6u8/UPnLoj1MBP+dkxhmGgsLavYN6PjvWafP4arZm37Qm3Z40YSx4ZcDYnGtMtYNuo4bW+OmbzdU3GwRMjjGozxoHj//76cvBgid3fWrmeHu1+7Y41rqB3U6zYefu8eQfPj28r9e9HNq71tGyc/SwCVueLsm4PYXtqAkEKRLdi6l0wiFq3x0zE9Kog4OiWRvbnhJ7063Vh4kDUMqAEDZ0ylpRAgFBI+QCX/H9LsXj1CmE3bpiXjI3/28TBeR5dfKOvzfhOZ/SdJ5Oa5JzsCgxO0Q3bP53yGAF/09n5K/GAxSxzK+zufB9eo9rJepYG+oLWNWawUi89zH6IWI/uhR2xA7HAxiv7PT0mpPnkb2udbjuMaEzVZh67NIEDhRY8/N5y7fX7Na4klh8UHY2xpA9cnoBtpabTSWYMOhqX3N8vSk6pwXshTl4kUljlo0alYuvV6R535xoOEAkOC0BUgOxgzwWmAYUpy65YOD9jZT7HQdsmrQbmduQRAy2A3ArsaHtcHVzm38T3zo9N5aCtmhT2DrUDJH3r2b6zKscnPv2wm1IfYRnu+sXyJxzRJIakP4dT36R9xeMxrFUpGeWX5FyWQKJvRbRzLaVW2NNESuT9yweuVR2PrJbmy8/z70NMPm874wxjQQJzceBgvAIwxYt8qYKU5p0NFWpZGQC1FDckRQZg6U1oRf7EmaMpuKWU+NCZIO5iX46HauoOGUobtwSqngqyv8y8ScxcX8w8d7b0c3EKTaY+GZMw/ucdAgT30yWJjlsXN1pqfIGLHWMmOiB4uQYiocNiuuvvatTIOZR8XQNt7APLs+q/bUc+bo4c8dnMu3TYgL3L5lBRhwnUWYNZ8B338t+e5sBJ5Pvx2l+F38K/Smvo4yDtTcaMbtKDc1TsaDwv5/RQvlklnG/tz3rXZMqUrt5YuFBh4vzI9A4ULkT7H87C+feSVTDBMxGwwMzZau5Z2hygVjh6TfzcKgy68vamUzY3LxQWNfdhTv9pnXxbu3FATW/UCERFGRxz0hXOlSPzMEC451X79Zpugy2zH5ZCxD4rUt4HFSvOb+k3jMamrGWFQdOnadtXvbg4jyM19BELL6v7LaGUuz4lBToMoyEWlkz2oIeaAIizyd2Hg93RuQSPh9y8MyUYIFsyYpKR+CWW2VBl8m6vBLYe2vSLfEjuDYkj19Ezue/g2KS7SfMlfBGy/Bb5kxxKa8SZ16vGO65Se49gsTEIDoZOhiq8bghkpZDK6HTv3Ulx8Mvej4eZ0ZuEyM36WPlTsrmh3/z6t0MnnGhVmetUHLENDhEb0zldgPQLEs3FUnix1NQ7pdyHDq8iImejFkHtZGVwadTHBv7FUfiy0u6V0aTcuKHh+OI5GMgHc/B0QQjxLbouJKBlUkL6jLzJ8fKk+zd9nbJ+PhbHOomvGXmWXNybzQnl2LJBG2awerTebT/TGTQfz8Npq1mefF9WbyqMAFUdstuufmHzPXm88y+YbHE2SUtbE6tEPyUh2NDiDHM823vNjhrjG1ycza9c19Fup6YLL2zE3jJGFOHajHbUdwcRHwI6QpjCLfN5D3HWNJbBWMUOEc2L/AT3RkR0xsWbbT+z/c6BuOEm0OHmXwMN2c9hKUT05kRM5ib+19s/hhsjg5pOTb/+3ni5me7Dy3j5qd5hQmbF81EWeaNXTrQn67r5iJuqDye5e2S4vSM++1L0ni9wAPTrqgEBzmnslXKdAhp9+ekp6+y20i5VJj2OqcY3uMJWIHzz1numStG/vbxK1Mdq05byzJ/9pa3tZfzn4aW7rccuHDL5lFf7eLwVWYwfUzRdMpk4XTe5+qK8bDlVWxaye8+FXfNO0bP4o1cO6bS1Zg3ukh6uU+gb6J/2f0yqLXJLyzVBsVy6wBONpPHjo/ATcpSQ+btKGSYlwcy7DpTCe10sKxbUtU9m75RxNax/W0D5gEL9aTIQSfv78b63lch+BXT+3v7siiWIobT/CnrjG25mT8U0qGHgRQeXJKDRVRUArMpja3sTX3/duStDC+zDg8gbYlgi0NnTcS+7L13/OZEiUZmC8U0niqc7dBuC90LM+rbpQXbDm1xuUADl5Zy1sdoVqnFUW3/NsYNl+eraRxQ01JubJrj/H7JJmf1BBMRdmugQI7UGyhOYtjaCP27kyKymQ0b14U3TOlRNPKlR5GUdhM5vv8DvqM1DUAFkFc4JgYbYgD3OgPaY9iJ/IQZSQq1onj0V4VygszhaYRAvBBAONd+uBTuIpt7F9wSmFMyu5Iq9k8+3wd+NPh5zsM5whx7RL6oFEOjB1gFKkBIRNftaDfsBmf9uffv3+F9sRkxp6/CUb2nbUulQorKv3i09EydsGmSNGoKBOpPV16pgOm34EFP/dwGY+6YKEy8me67IB2D6jSzObmNM+HuCJzbQSeGiXkNzA0Dc66Je/kyzw+3q+sAA7b4hFwCc+QscJ6KkDAC96vYuYxFB3OULquamRsAfkj4aPAYZO6Pc0E0FhlS2z42fJ+ZF4o1cr4OM3MTF2HHEzQ/bvPCwI9fal6/dQ/B5q6Bzc0xdNOveX4Lb4zdrJ0Km5+coNOKy6IHt2Yl6hva0RsCqxYs6LGA5rZ2O2670tjHo3sS3o0c6Vja5vpCYwKXa0wJ7HkYb9NzW87ozmd5m+C5jd6cwugObh3vOs3vlxqS3ci7F0px6HSuRiytuB9+DiDP0oKlAo/r+OqWuTzeNWjfxuNkj6DY7HS2YnYy8urozDxoWMvtPK5fNGVvyZV2izUytRW+fCS2ox1G55IxaqKJPyiLfnI/WXbHhdTI4VRc+BHOfa+r6NaJ2rd6nQ0PRgLzgpdxKm7diGqlxlbQpMnZB4xoBCvGcJDykPJaO3eE92CQyI/Bwh5TyDwytDNX1OX/+3k3Gu6nOPAAEJys6TBmeuqOzBWX0s1mgHvfQIDHLq5ku8lSDmw6lqwlmFBePpvXj1SxQG1st755mTzzmgW3bu49ycaqJusYo7Wh+GPrbPNMlNxrynUtTpXBRJdGIe93O8oLdGkrp16Qd299d/W5NyOajaBL6xCy7rRbzGfED+8LdNRBLGiC9YmZUwwGW9EKadlBpBlgbreGqqMZi01RmwscBgrW8xBRbEHR+67yuyQ6MRC9pJsGN4+8+WMCxs8xe5E2gD5t+2QBjA5QFMxZBdmE5GvGjdLK/hRMOGVET+C1WD4ZzdirgpRDSGEh+7/XqeZhruHZpTCVWAQxlHCcjQVboTZdX7ngs45++5vHvmtTt1+SaQPxDeI6MZCHOO9QvZOQaEyd02TFkMBPZ/piZH01zmQSeyCTiWouc70QsD+S73vMb9d9B3kPP/HUwOFY6WeMw+3fTzRl9MqSCYTHpT3WWG4kNFF82+gfwcOt8HA3caDSBQ4fGL3yi8MH4nDncOkd2fdX9gqHu/5HphOHmw2HR4FR+mBsLC0A4jlQ3hGYxJxNY459FQs9c0HnaTsv9JSKq8fr8VW1ts9E3pOSHsCnpinh4arpshG8Inh/JrrfRQ0dQs77Hstk1J3CkU95q/e94x3p7mHbm+MLOfeNG7BjK2xF9Y76mY9AMa6OGxZ5A2+NIp/xbB33XbkKHx1tldEqQz4EIzPNJTez/j/al2mCgNddX2nP+Kf9gdga7LhgV5erHhEXY+wIW7lNUOohoFEAOQ/t4VUicMqRU+C5J2zlNss//mkH5nFkA5oALxvrfFsOtiUv5vFZL9re6F7+I4/pWYzVgkmzcuLLdBo2buOS4Dm6BAlsOFCu9vGeneP+o3Mp+HP3g8pZnzUS34ZrGsnQxSmMPh+/9ZcHTaj+WMeeXZnsGu+pyfdiC0xsjvGEXFikq/GZMLdUAzpnhYl4eSljnUWe8agRFfHtpR77XauBuEtmfJnniKc5ube/7n/ufSvNObjpCASS+oykPyE/pG7rG5tiUN1r0/PewabEVmHgVlSaqm/QC5UjB3NwYRWQn+MRjTmGlefKhH87/kKe9KVsf3az9NePg8CgMU7N+NT4u062gQSUMRHxYBzNcUDsChgZ0+oC1iTck8g37HeH9G/BXkWCvnUfvZeI9XfRlS9hLtvjFuu95ZQk3nyvbbSjWAHGxbfh6Ab33oOUuAN7F8zs1A8TqZREDvxtvNcx6S5dTkmtmH8wlQSVOqIkMk42HmQop9nofOgor+OMD42Alxb+dgnV70/n/eDxvtNo/c74qPE3IS9x0bjF+Bta+BvJmMgObD5qdOznO2hicZZj+1jC3zAzyvFS3tCpjb8o/EEonJyDJ5BwLEl4mQUxIk+lF4XzZmND4VEZwyXjwK8C4YROWgb5FNwGoqEvx71naZdUQi8fRBN8vRVlF27oM4b3pL1wZXIwEmIb6zC8U6xKxuPW+/mjTUM4ZNW8sU8k3CBHJ6g29lNe/jwOLhOrJdEzoFTH0ROt3BR33xbelT8EYvWxiSAbNV7RlL7wIuATb4s1tx0hLHHIkYeEFZqgx266RuO46YDH9yc0he38YDbWHQL48pCTZwfznKDbQ2L/3H3PlYYgoRlR1qW6sVrNvYHQlZLSEZihyasNkSKzbuRJN6jyO5tW8HmL6/499NSYIWXQbuibg1Xd7ES9Yq/OY65K7t3Iz2o4wfGmV/jGc1s2HpuI7gD0fz9hg+C49V7MIfH++OrUl0oOGyX4Fit4CEBJ455QXqu6couU66vzxXPfz3Zmn5bY9Pcz1uIQJvSda60TU7IOG4O5tQm5b6A0PIVTIEF6gcOmxIgZ7ZQSO2OuXmwmpsQQjZi95UvE74wRCfNuR/7dVbscTXbMWBKzIY+sIxPK0ZT7BzRpxTip43BHQHWIOCcDQ73NcGiIVxt7St8+5od2zIK7yYx5xHPV7L4bU2vIVVdL0ruSdqghiIPJT9wpWXJGTzFW6QcMEvnCgknIWBzfd30t922+VvWiNQC38do6wIW3+gLmp0mb9GIZ2+LelVaX4nS29GtaQZZ5kKyi4OwmclZjcDm68nLizNzo6z1zxqrYEQbKWAePcNjjlkbI3zY3FUQcEyNrv7oG4j4yvDfbG9dxUTuHySnXyNEXcPTpOFZ0DKejLOXh3jSfVzLG8cekE4yNIeIxyv00xsxNavwHIr53APwS8QcRcXAO/EOAuN8YuLkPdYZBcNhMjTYcob1ZX5R0lAXi1xFvI2d68YJpF1votYN3regxXTcKpuhCypbA18u6Hofq/fL2bV6Sf+V74o2rw3fLPvnc7NshdHa0dQWdLi5ucONDNbj8sDKH+xi8i9gnWBMcX96Q3PZ6xGVpAO30g3fG8pvUCseb32D16O9TJOU5GWHK+KhiXYyRPPHOJxVbp3tQdeA/gn4mQnx/egr42ORSsdJdalRCPtsew+vlbopLt0GKT0Np+LAZjAyiN/o8t0U80E3J5mZxepoVE3sXnA0YnFGxofaw6dXmywEteHfbAKCMRcmHaLQmgTSE0J2Jcp9UeWtMBE4gOHzV9eHjlLqefXavOK+hoqCQAsN32mw5FWX/nya2TGR+oPYZWwrjgcOtg9S0b8JNzevPzRcbWxxcTuBSnUoOzwsW7wToVg/vzSgENUAhxpivI8f24BmD56aPMCI5+OdCyPEWMxRnxLyVmh5GsYLHcJ/X3Z+bV6Wg5GE/6ULaPQPFJfYZJyUc1IHcpxQh9vVZYy2k61YPdJYtlJuWqKt8vbnlXf01puIQuInObFkXBmlai1Hun5AgWjVDp56zUyM5Rlzsn95SUIyFebu47SVHOMGYKw5es0QTieeH4ub/hkmK/El60FHLqo+lrttbaVjaNcbbcdtdpuU0ldSUw3Xrav1p6n0yR0lczsSzXgERY71R9kzCq0urRAaT0l7YHG6nHqb2l882mkh4gnSVjohcJe1ocjKZyCtb7WO336wdVmAqbtfYLhsjpz4W2KLkSVChDolyCDlrQ3KQDHFroTP2eBgkx7SPmduR+q+Q/DSL6ReSr4bkHEh9O2dhRDW7+Sim2RxiNO6OnO98z30m5I0cVxM7ZZ6bxeXBdJB6Lks+Vlqx+1zina7ckFT3YH3Qe6cQnH0FmO9iz3lS3M3FIVfW15P22G+kuphfdQyBX7AR8bzdVDDv72e0XmYH6TTScJ4WO6/ULUeSDlpuVCtgEdh7xzTeF78v++GNjpug4/hCw4wUAi2YwIqRs3ps4Mxoedld3XVhG+a5MBnl79vP7Qya8Xht1K79+RDZ7VIk1rw7Q9JXSQUZCUi/KjE3d6SWLLMFI9/ucrgPgeq+T47pAgzOGgxYe162kVw13Z2qk24rQPRq+Jq3xkWT8lIIe7pTezELb9NlLn0Qf+5pOP1u4SgM46eT6KzIpNIzbhF3fMrAxOze8ROG9lNeHKtlQ1fQXb6WYhfnE3L9bfUzKm0UWnxD7VaorRwhOT0BA87JP9qxgTpIpsiU/KcOTMkWCGvv8rL7Uq3ZJm1ut9ym9KNIBOWotLeXs3/EG8Iw7HzciWs82ccZis5yquaoA2ULRiOMwBqHPLxA7zpiRzzKfd3L6oQUUz+VPOVXAnbF7S7DTGliH1L23QtdU84FZzy7Ulkw4eYV8WkEY+77A+4/krwdVy+rq/MPsDpOOBYbYnKqckBNnLYfaqkkxx65+ii6qLYbbFi16ahJ5r703VH31sdCioLXe012bbA8tdmBF5zguK/cmVogNVBfV063M5vD2jljJh+TM99QU3fFqFwVa7eG6004hcnEIcd4aJWv9q1XB31JaCfRULqSNboOokotr6k3SkJqikvpnJzZS8Nsi3oTSlC4jd3xxkOwt3Xbc2hnJzG2qtpvcv+gxl/S3X8F8kKATyDdxAqNTymONCBOvneU5xZ5bELRWZO5jusU3DpDmhyb2gQo1dMU05RmSytYdz6hJx8ALzk1nUuDynCj4atCW2RMNMsYXKF0+EZfbe3MGPdV94ecx3uqQdfcx8UBt8qg54pz3SyGfHSgOdmm8Wts6LBf+WNg2VWc4TTaXQ7Ucun1Vg0LtmEFh9TfN3te6t/PuBkR3Da8J9QIyZ67+PK17nm9OgbJS8NxZKDIiQPVoa523XsXXbyPSTq4fMWzmXSzjYL/H0AdO7IHCxfzXz/m1GlAn0EBuPMQTZHRnANISMNxP/MjsFVNhSf80BN2G2npt5q43cifR37nLRIeRNEqr00VC54X3okpSYXb6sDdwnC2gBQnmq2fFDVUaMW1MlBcSbmajpCDSG5Dm7sKS3VozW/Mho2pwbeZGk8vVD9uWBFuODmBdrU1zivUF2mgwre3e5xGYDGcs2UvhZ8TGUbneVcHluGnTt4M/pxgGnU2MdxgT2LQ43ZlubbRoGNNwNdGTr6wbiJ329dnNcK+7BzPgDs6acPnu42Bueb0SmWItVHj69F4F2mLBI+irxsxH/m5Qw0RytVQt820IXE0QCALudTt7x69O9woKjw5qsmMLbTNsSeb5GtNXIBgY0y7YRUH6ZwCs/xcxB2GLwHGaAmOhyHTYVePUPBO4vqMRWvcElpsrVVRSYbqQnmP7BIezuBzGvvIX3OnIlmqU4Zj63E628vyFRdYEtu532SjZtn8oMpzSrAUZkfbgNkys5Vt8NCZczIIZuMGs6eHK37BsgdEm/zC7GEw20XsmI83lGZT2ogGbkJfKL5kKMsnxpOUvpv5LCyl2TIEPuFsU1t2YUsCXTeHk9cbSsu0AkN8TWO3WtGVvCIOEEbZUXzFFIo0kyOyGmdD4WPsN89eEWlHRRWqCF2e2EiLKt1OEDZyqRFUtLMtujHzhV0WiW8s8yseLaSduS2ndpce1LEDdsnAE+XAQDrTorZy7KgDOt6oP51vujPI9LrOy7d1ryZxG3/Pq3Ufs8uxGNhWbiywt5x0pEnfbJ7bZ+K/n+pwyWYuxr/OHGdjXwQefRNqMvWksT+3VeROtaTiDsJMpMp0+TGzTk5b5azvAx2qeJPStp2/B7gi1ogFYcuZEjvphG2OD8ebhNtjJ+6/RSqgGuwJZMetn8yY2fpUfWY91qdNAmjNRThNu57VN1JjI3BluIk9J3znppeZV/QgB1ZmW24k2yVqTKID2YnlHJl0CvHzLjOxbCKMokt1efHuc3YdNMcHbyRm2WBNMf0x96azVZumf26UqTWe5LztrzknrgTLJx2ypxlr80olMbsqo4lYSB2kqJMEAs05sGTeBoisU4N2av+looKWG3DM9mbRxN3QR8mpFBWsHft13dyuTDF54nF2PMW+WU//cG3j0ZATc3IzzobE2ZZdPB7XNDvhdtFt3Pz4jF3gKJD/sf0g57zlCwhbw87kzWUTtl7EkDhHHO2Bnqzp22F25s4qmqAgNp/t2Z/EXU+rE3ytrU9p0oGCdoQhexDEBrL8Z3osYqOm7Hbp5pO/EHvEFch7rXJk5UKKzd0tqbuRJ/Q9AGNHGW4ViqSEfCR3nV0Fd0vbF3AkNnkUsYN56ka/H7tvEYd02ObqqO6zMzaFO6zLRqF9KEWMpIa5GwWJbbhvmegt9di9ZwUAXCRbpJ4XdufYg7J7tj+UbLjMssk5lcDNmD2Oc2J3xvZYdkkIR6vjzUKrsbXnYNR1xojgQZ5Swe7qLKGNaTHEu+bMLtCxmUQNgnGsv5j6XqOMYbMLpqdGp9p8pefQRD4FW6stRxKhMLeFsjbJHY2IZGO0zuxT5ZU5e/YkmK3S8+KdFSInwxWNo+6pMB3Qw/PLEqkgq6DCpAr1OYd8xLn9C8W5zBi3V7vRQXmf+EDp/azm+Y8jVrM6cZOtvdaSvV9cwUmMGqtTad5Q7Gxfr4gQEM38SmP9clSRIrYZKBJODOH9tR4b2TSLEvbQ7c1wXWaozuPUdKLPOSJ1ez2AKTWeXHYTFz6ruJl3vNwxoxbSK43i7C5Z8f2o+ROYIsh6ZzwOrUtAWpKfaSqFPFydVo9w+PvpEAzTcksyNhMnb7x2i7VrBCwpJo3JoEPSKMflzp0N3+jXyjbkGkOjUk6Idld1F+nrqpvXG6cwtI6Q4JAwGfiyiOxKnEFtVI1YX1VPkn0jlmpaZFU2sQ7V84YkFJuzshMiNz0svzOStJAgs/5dJ3iD5atI3OLlVuRL153XlwzaceMmr1GEq2IDcm1Kf2TCYS1aG3Elgz4t+sAIOi4fypgX9RGRIL8EehSBplhMiFzydGQ79z6A5nQgXOD7L7LgyinRuTHbHg1ySxYecMKfVSMX8Uh7PDqyFyRzp/OgjaQ2xbxTc5JIuI6OS21G8LNVIbjVTsOfqM/kL3ZkBEFCnJ2+zxwQ0UfG+9C43ONoYySMVtkXijemFpYnIuePYxubMA+pG670Bp+C55ZMLkXZL1i2eTowalYQNBxkwcyv9shC5ZNBFO4MZJRdPlkD/dSjmc/HcTCR0JCNzKBqd/fe3z53EcoXRjVfxsSabR3aB+baMD1N9txHXHk1W8digs6ABpYYCvbtbWQAFI29CvhozHxES3NNd/lmW2sixt1QnoYsRhFG7pqie96UumP5GPq4m6JZWoKZRr/97N8Azrij+pYl2tKKOmuTHDp3wOaIp4bR/N2Z7JzM+y9J06aNg9vjAbyPvjs+IbYlo0ZxRDPOcdYIj+iBT/dJeDFO5JjWx00NgpuJXbASQTIXjLUbVoQt1bMGHY90ZCbGQBf6Robdv4xOepfUJuvvpwNMdxfFkGvdqo2MA8XDfQ2chDg7KTf5o+zkuTIfNbLzdcZAJs5Qi+6Q0nOl1W32qWsfc+ILiJdNM3WpsvfdbM9xgVs3V0GomXOs6e7m4XduHdS1Oh/DkgN56dzWWrDAJHdYfWrfjHcA0UcrtvHOASi9Xeh1ZF193uJ1wVkigMUmSFsLicTHBWdtRwbSCGRX7L+R8TKuHmd4pHTAL15+EF6G6MgvTU0p8TLveu0Ic3P3iy2ONwfGNKIR3OoZr8Reo3ic/I6EflN6FxYs3TY5tBzo6V/cH98L8LoTRCSCn5wDFSlQ74NdzaW8X9ShxCFa6moiOsDWE9AXMNJXqUsnBut4/qdqUDO1V6Szr6IzuJ17aIU8+/pRwBoK2K6Xqsc+7tJ+O1FndxmDUWaUd6Rj93VQij2JZa80janOSrfR9jSldvFwlOMLGLBRgt7UiMXOuehdk3cURY6WBDhHq/MqBzYL9Fatrc7RIBNUY6jziNiNTiMxXHE7dY6qdRLqCFhK/QxTo3n8kfmYqbPbojhSy+marCAdP4j25HSW1H7jBn0g7+setpVZBOkZPKdMHy7uyYbE7R+sjEjOMUO1qTGgTJnOWqfBJc5JJ1khtA33TPcbTJfafv9RhJNncD8pWAmZlmAOcQwYP9eruXcP1y5NmRBvbLRiJQXJY5jtedxq86q7EBsMWnwqJNUuqrMMUfBHqpaDKLKbOJ5tOdBx6qxwisqJq/Azy+tpQeR1u0Os6XR9qG2ESpGtmW6Uq0u9HuLesk824gv8zIduTN5oXEV0WbGpl3Gn2bMTTo52Bd3NfuJai7DgAJBsWi7NEnvc/tChOsyy4sRh0VZOjwbXcNP21EOnnNhoOVGWcHkHvoLPwLFB0VpcOrOtpM/sr7fWDjgM9PPnXRsacTL5BdCjADSOcOL31rOXsiFo7KaUvRUdg9wKs+Ehh+Hicat/PxHEW6ilOiNzl/06BJ0GkUQHarIYkynbf2s7U5xky8sIGn3DDWfMpalweq3WeW8dOgBXJ+762GWz+OgfbCn7bedKBn50d14l164AzUwcuLEU61AFalicgd1Ls2dx5uOBBLIhvybgT4MdMjJfMSq0VJaiFb7sY1TM1BqDiwZuyjYHyGB0TlorUl5GZ6pdV0aKji0EZ12Mrt5+695Dv2DnuPuYy61AHuIklMzSgB65LhGBrGQ82IQXlTcXlQUb59vmsvWMPR8u8UWmEwksW+cXFWSVUGnTny31wRqKV0FIM3GU0ziZpSNr66znnMTp4hJJq1ZXOVd3u6Ln3eFOrWxcY4v0lnHydhElqz2lGLg15Zzu8L7tF54M5MTbjMasYaFF80nxHktWOy/blPr9EdZ8UqCeuGJtpf9AZKLMA9lJWjD9oqsoCRT1MHZLjqyT6tjRDJMDPvJri43TXIUUCWyyhcfOFseezSCqwIk6ztWRt5EgWXqs8auwrBNoqA+ipPIBZVh7mVgwvVZ0ZOvjCkbyaWgQGuzWzfv6bxU3juAIUzeAtZ3BE52Ddmy9P+BdN0UkmXPeidt7D3m+HktSU2MJp0QCXG1sjOoBdCCBGPQgaMxbGbc8BrlMZR5w9PhlxqOYsXsUM5YcwHTU88uRsRXKqZKPu23BHaXtB3kmxmiqhZIGWJZ786I3YIyx9kxYsJ2usAGfFvEtMugkPUijHuLl/TKwzV4s7xw6LE7yB5KlJbQ4vxScsiSwuMZL0RgY6krufRht5FEoaNXDiMolg13vTVdQuMxAQUxeXyoPzENiYz96A9/4VOIsWaw3Ymr3w+A43k7z7DwOIvCm0LronKp0y7udvzDmXVgtVyAKQTalC8f7ARM4e0v1W2ajE/wVYcAcwC7aGcFyOMP2R2feIlQCFfelTJd9DvcxTwKUPylwwJKLnRlfPe9ErFFxtPkPW48RiwmFM5nr389TW2xx/Y4RMuV0mVi0hE+Fw1Q/cpDpsD2nXmTf6vRKjwFRUlG6uzwyDmWe7vRydsrg1di17dUAZy2AWeA/3PeB1XvBx2S5cC5aIPEeA843HW7VKT222sBQdGgFDKPFFT2KhVRbZ0pwipvlBZsH+XJ10/ct29JHqjRlP+S+d5Acf+sW5N/56nbn7i7VC8QvNXK14ipYcL7zOXOe1LtT02G+qGyORbvEV5U1inrwiktwGDkrzeJC/OpinRjhIMocTZdw3VL8qv3O/EYTiknI0iqfbh1ncZHtDJE9xYeBYBkbJou1OIHciIhr816L8IhI/KzRc9DwkLDkXzLcn169R5TBU8gwxNS75IcU1A2Go4DhOuVA9mLLcmp2mAS20MUP/NFrIuheuSMbdBnN1I33Efv5Vr/RmbvakYErqhwIY0eZqUZ8ncFjxNTgo+zirhMM99qx+SkTk3Nj5Fms/5Jfg4bzy8po2Fm4dHAeOSfzGzqLU0xKgEF1drHKUmxtt3DWl+Mt+36LDLxUz2y0hUF/fsh4msMZneO4GuXaNdbEBev2vjrXvaYOGEPUdzwONxf3pQdujlyO1hCDrF22ecsH/n0GtVX+lqLDMJNQrn62c63gYBsnTscqa8UY1Pf6dr4gdfjeQYoRbORpLx2kuIsz4RUpJrUIcqpl50LTY0lUE/mc25/IYh7kIeytKLXwYiMk4GC5yrTHni/f6QiIYiCS1IVRBmStGNa0I9hGikvixdaRYES3AHbtoe/11iAly3I/PftBbN8Ivt7vBA+wqrdU4MAQigJlexMA+5y5TjWNVReTLyS7xenk+p843aMNWanuV5fvCG+/GdGuNJfKjG74hhHzCO8zTF5QaVQ+ASnKAwe9YoxrUGdu9ahDZpjA8tZaNjmrOGxG/NX9ZEb89zNKW6Fbxl7bkJgUJLbg3AD/cAeu8XULTXawRzfGPzwGEjsaMlBv0IC/uhNlTP7ELzLuvgJZRXc0Iu1hBDMmbqixFsbkT/RDY5QuUnUGsP1u4gEBzWycc07nT7h1VuccQEhMFAUuxs5E1q6CDgk8OsTWwN6eyUZjPsvOgwWuTYVrQefJrr84HvfOcBjVjLJ6M9HrGh4w7BYcI1cxQmLtsu+Mlejt3QIfI1gFhEtIkrv0FiWEF8NDBQhjHREOpfK8IFwbgLeAckK2fAqxq0wX25qiaDk77K2L3l56gyd/yPZChSwk5HuA9AVbj9wC7HZQWcthqKfuEC2w0R8fevYdbcZb+dc0mW9+QbsfSqXzHc7gaMn2fcy6bNSNeWkbK1eJAxY6F5IuuKUSVrI52JVDa/ITsKDU4wryxKQd9iJFaxYKclScKY8XxIrLUebsrPAO5h2eCljhRUZyI/jl7V2Duyh5jQEted6Polw5WDRNJV84NaYNuSWaojiCezl012pHVu3jFOkVbyg526tU9/oo9NhDULAX+S2h0ylkAaYUGVgfHEUYThG53ZuEviHtavr5309hvBiJSZtfilFtHb0GzHiFpDq7DqPuBBqVXZ6iZC6CtetMeG3Gy5YTXmm4J+IJtKcGuwjRRenOWdnXXowIgzHe337z7x4lPMI+8ktyB5FcehDI/fsZAe3ubnvCyy3WCac3FNi9/RogKSHb3LBWwAYYgLtTK9jkhDJdOMKAwX/djmQJDnZeT1dzvRi3O7hANlDAEVd1iFRfjNmAfQFvkYWAq8Ff1baV/CqMm5Eoak7aiDfjV2PhnEfJXCM2HJyaove0GVycsh2ZVGHESGrkdrT2OaEpURz83BmrPDxDxib0+bjrY3sCvADjTb19lFIkAxREZMGulNd3uSOdyFvhD9rU2w1AOmP1rMWExkVSIAtrR7RaNTeycPRiBL9sDqtDPYpM6lKRAegcLJzCqg29u9xAylFeJFcswUac/oAb4I38P9HCcorDZcl3AeR7sgZa+XbeM1gQvMt4nPoygbs92WqsGNbpNg6i+DwXOTMyqVLLMQC3sfPukM3utHDLgq4yx3rrnWyohUMvyk/7aMc9RFRs1/GwPP4ML8aTfz9VgJCYdgVTYlzLJy1FFUDHZDfyt83C2uIoamcxIYqbcjU6raEzAvvxxdAEKx2xhcEKIlgCWNp63h5Ryf3Vp16eJW3opf6CY/y5o0AujYDKvyB3FMgFeVb9Wo6bo/zQWteZhjcQLNuyyeNoTCFanjyMxLxFHd7ceqtwtIgYveODLnUHtvSPzsMofte6G8p1dquO4ctCpBCqQySZ2I1we2uznI8lHUWsZfjSVe0XPVmOs/PrvYmtY5ojrgq43n0kYmmNxV09tgoDlrY+twOzMheZJntxLF3A2QWx0URyf9GCq9MX7LLN+kX+goyei4WvZUzwS3eh8umk1KuNcaVent23gM24BaiVAlyjsBzPWOKygsfAYf+L2pfvruTZ3XjLc5/Q+4VzSlWiAlaRvIe4NnJ16YJRpEy4R+SCtxGX8h52/bDZhk3zklGyMr3/8BYW9W0vBsXFIpnzNW2PyEE4nGGAnXG83epivRl3msuyN5iPD35ltqg2ixIHhiFLPgMMKp29S8pqIXZH4mwmi4vSy1T65L4frbiskEUiS4vRImhTiGfwXlqc15TG57FawOCWIUvRRbeOLZb5aC4S805rVxrJ2lkjBOxHArBxJa6ptrq795fXEDfEWzsAj9RQlodpDDCUDYOykm//gGSCPJRgjJHjl8oOorIu0pCw4z8DSuFnlQY5awdBWVTefiRYT2UJImrN0Q7goAPSxh3UjfWRZdD1xJjHQTSMrOyN8n51mrzzEfGwCzSiNpchWoYrepKVSqztDtId8PBFIaLSGlSHSHa/G717LD4PsZocSSW9DWko6A3SArGsUlSW1eh7BYxObsFnCocbvXCLjxZ1L5pz0cnIniv/7IKPWOGgFUh7OBeX7Dmyuw3hHJBwuGfBLYmGLE5A1qXoUVYr0K0TUNqYx+8huCxcLJR39jvWmqd1CkXY2azzS8We2vvkciQCp4e4C8f7ihsu8eqwe2ZdOQdqyfOn4ufZb8yF8VibteBJ5YU4jAy32dm26utwdC3UM9Ii66Ac87NuB5znBaqZlQ55GlW0btn2qAIpvjCf8nYJkJvg1sZwuTozSvlk2cRA3fJOf6F/P9V19MldEWk1ZIy14B6jlw27XWjB2p8+1VAG3MJvcSGIKDswJblsQMTGG4AsO8QwwgiP7Ih+6Foe4y8DjEBcg3hstPEJ+QLZHzGkmF8cOwjHxgHGyoE4lnss6Bk0ln2elbWSFSpYP4PNo0MdhvUITmwjYBQb2VIvcR6LA4hYHf7dIBt2b3XcYuQA1HCwfjPAiOJ4K+xqv6Kqde11zDjdYjmFJMdfLQ9w/vu5xazWeSm+O0h3gCdAHHcW0hycv5++Xwbr5RHcjepkiFosjZXTH602yom8syvOFH7FxrMArYKWBplhu9O3I5ynUmXLeKRVxqvDAivhs9yAGHeSuVT5aEwtsokE4xPKK458R+aTjXU8C+zFrox9V8a1uAcUQFynIh1ThCnhVYTeCUr91dSTqKTxH2Iku24YzFaZr3EXRmn0h5V5hk3xre5tZi1OUFz/uaCzTqobEdK8T7TrbLkH9IWa4CA4iSFlI4RfvUkr9md5PDxZwv5Xtru4MnF5d4pziziu5ITZEqToKnII+NLje5ZAakkEgd+FB9DMCN45yYaGtdwlNywxrx+gY43xwNXdU24QoRpBUwmixSe4SX2dmbOYJf7S1KNFd4jfeABORX5YGacuNtvmhNg6ks0CAC11re+KjZrLZCM9AfS6ZB+FEbRoAGjjDwUoF/CwcOJuLyZBMW4pe0j6N3EDjMB8tneQx974hQMucwg6x5hFtb18gG2awLEvtJ5qFFeWtsv2nP/r0GMcNF2x13+BzrEZqQzXWujbrjbdIoUfDvM1W8t8zAPhpUUvnl9XDkruYi2osC/1AbJF4qWcbwBxSHtMr49HhY0mX6obQ0vHgbUicyEv8Nnfs7bWym+6f9Bjygp4BImhiGLqZRB+jAVc5myrRxzEZIV2bjl5qd3sss4SItDy0iTVmyEQ68cECzeF+xNeb1dFqoLYH9M6YjdR3UjiowjDGL+uPaz9KVdj5B0iLd1x5FNuxZbZkQqO4tJDeBWjkB89ZrcOH1BaVJZx5HDlxeziYggcKxng4uKm8oO5cXwc0DN4KbvW0Q1ZzUZBUhxiGh4GScn/MtJHMNLiGP8URiqR6OsNsDlXTCVnw+Ik6Oz1qL9lcTm9PQaEIpeHI25jfzwLh57WDc3wlOFtjvjL5Ye0+A8xbkbue43ODwpGHvA0YWQsWsfW4gPczDzwlndpau42PiCEIzKHlJtpcbEt+DARicxuxzztveV46QsiN4SF9od//P0kDj8s53mvpLPk0Fk1UQ3pCWpElABVSmGMC5mBP5aBlPC5zSldLkHUqDOWAWD7Ce4RpdZuUXkFSILx1paXT+E8QChaLExUK9hK1apX3tjocKmJqhqB7QupyVFc2xO6nzctAFNG3pLC6h7ov59U9z/Jp3qEmNr9gLm6n4gzINneOCAfq3vdr0369a6LteC1W4tsEsXaXuscuLV8aj83Em8KmVCtpXd7pg13zaA7uu9X8ZCmsCmThZc3a/v8hPOM6LXa/WlQsHPuAdGRR/cLPoIr1t/qX8q59gpkDQPWSwTlIOHnQFer4sWHoMQBq4x0ZHOeKMAj8mBRsqdpcZhIoXsB+icMMcvfBMfzTBCXduSeGZjEMlJ/W+SYJ4izIhUwdATk1ycKs4qqDgBxsdP5wFHcMBTdcjCdnde8++mfoDLowOEk/W4xyyxSFqKNBYZaeuRBMU9yAzLCA1QD4KzYCDa6J1RTR9lGceSOEshGVXfwLmWPp0Egc0QzBoNCGuTQHeHa4dEi0ZbTOxdCEawBIRcG8RFQpD71x4g45qTdz2scsNtqzOGl/6tXMzcXIY6QOwfYDutB4txEi8u3CwdJlQjHYiaRX7lV13cSHY4ZzNJ/jACZPeRWc7c9eoAtJAMmRo25b1LN2iz38rlmJokjDp+DcAEl6+XyAMX8mg1KgxplvfyFkk+CkoBDOFtnNbnHGsfQ/BFIMvIRZAz2G9K670gCjp8RhMphy87B8hSOPOGWwd+DxnZxP4Af0mY+oj/BCbmqmg392ufH1aDPPcU8zA92PbaTHuEk5nfOSV/mU9zDfPziSb/PoO0M/6Mb5KfsP3ERG5Bqw9SYnWp3bQ5VpznC4mN07kOL0TnrnlENQWRY6vAh2F/Z3I5RwplrwUNq9Yzhua02PqfdQRgpRPIDVon+h6sOpmEXnl9L/fJQBuSgjtVmn9z1RJFhLazdcPqsMoN8aWj1kOW2DxFc3IfH+fXV0d9PgpNvbO07VwlOMmP8IWgNiWnW+unUR0grutVp4lUqpVvvsDvA43q9+9SO+QR4cgSQPAP0jdx1/3LHYTdkzGl/0MOKo4D9kBc58ro75uqM4I48eQPXY9B82sExbd1jxB7H+i6O4o5juvILnX61RZ8DLjOt8s+w8zp2C8BD7Lzk6lRyWA7Vj1AsHrL7AKZewD2M66H6wYkLv+O6b+qBqeppD0NeuSFOj8iuWXBA8ITzaJTnCJ/hoefebW4nx8d46OvBHLFuJXxOqZzNwQkKj6qIqb+D7kFD7wCMGHl0wjPEGuKb5wY1aozoPSDxXK7e6OZdgPRpLOadxa1KU1wesBs47IxQaMjLHuYySxpxfchd7ucZZdEbcQxgWk5PqUbszE/wxGWrCIxZA4cc9zHiE1hIAUOexBFHuRd/MeI4jPiASfY50WhQR/WIN1kGeQzyLw7pOI806m6NGCzv0D2o/53dnaPOMEM4KzjCB3yVMotCoEdQ1sOpkSj9I6Cvl47ux2BxPrgMc/yM8QdHHDA9YtRRoWC+Kz+i+7IcK0PECHAx7DnitsOHeN4FP4/6aAy5ceJAWm959/kDn7Wwh2g9MWbf+yMmHnJfL8PKIa/YkGa1OOz0OSRqR3xr6z01eVomtwKAf8ZHTASwBxgDcuCHc/Sgj7wkReJjvvIyefIBO+idJw8ZUjWsGufwMdWImfcRbak5BWnUGjiITw7yFQ7qZ34GgvN+cQED/vzPMcCP5Y+nwye9LLxdeE57txslrw5ZZfEZFtTdtofj9lJjgOQgaXUQbsNRB91BHl3C57BsTI5hegg65m5zehDKdm6Q5WWQgZmeAP/88ejUeZsPytJxEZ5ghT86beNzJsNhdI9QsHKrb/TDaOSYuwVunGFpxCXC6Mbh0RGXyMcS/i2XHOMj1unCWQoP2K5mUuviE7YcRzkOnrFhzWEbj3h6jtPFmIGKw5pDH9H/qM4Wj6rm4wHV0DBoPMZDNKrZblCj5jA3YC/9W86++v/8x+lfDrt4EP1D+K3mshp8klfzIdXkh3ic+W9MQfSsrxA3xfqncOyHUPViqtSDQLZ7FqnFYSfcMdx41Gs1phr/lGXnsPk+RyHCUf13g26Wo+eElGxL8mNec3JPE4hGssdB7SD4oJWQIjxohwHxGdvB/A0dZHoe+Ul/ytUhBO8fE7tGj9opk3sIIHlkOX8/R43CGOSHGWbzG2NdAqD10ZN6WtdqzrQadA3487+B+gZZ8QcFXA77RA+aPT6IAQyr5lkc9EEaxkCj35h13z9iB5Mvz5MEJ/eoB9k9Cui7Z92pgShr7P7lKa/VoDjAQVbwRzzJRTXPeZLjMz5XWZp61Fv+jDXH52qe9SUvvYX+AdenXJGfUM+j3qyHfM2PZ/lRp/+nfc7hUZ9zeIaO+OhqVlOLJ14bN0jQHFPNOP65HrH9Mr5RjO8Jz+ezqtn7R/BJ1Tzr2jzruRm2leoOKXjEV+fvJwxqih9UzvEmPaKcUd6DUcLGo+7VU96loz122Jl/zP2iJ71b+CxZDB/1asHTqnnQgwOPeoxpmONpTDmPW3SeVhD3czynGnjU5ngYM/8f/YIOyuP8H9iuP6GAj//fV+BZr+zyy7GcSw348x8nc/rQ/IQX5FFfWHzUtXlYNU/bCz1pY++fpSo+6kSIj6J0xQHjIXfqSe5joIeV8wizm36tPn5fcl3NI+/U73LceMcf1H7xrO94BTV+CeazP+bPAvFET3qz9kf5eRX9btsfh2cegsv8QwCuXnr/f9+d5exqwJ//CXr3OED1hAOR/63mu2rEzfGEk70/bwUeARt4eT3vBxZWc2Bx/4SLkx9mfMbNemY9cLpd/rec6m4dp7S6YeAJl+oRZ6SynAcckIoHyfunBPkV7ME/4smpBi4/6KFmcP6cVL8TxPK/5Tz5nU/f1t+r8594dtQ+2q/PnH4Q5vOPQ6GPvUZ+GHsbBAKfVM1T8hieAIoXc7ABf/5XSOAT+FJuacWHbWEuDpyPqu0RVwqeeqXqb+Rz0MHpQ768nBLxXs4AXVbdHq98LFe5OP9b27enn9PCmltpf4u7WdxT3gdovq3LV97jMpFeef1DxgnzyG5V22NuLCI89cKVxPKBpZF/zF1sYJWBAuGAEcTwEAyVe4qKCTt+/QJxegmXl3My+T/gZp0Z5siPz4BtrH71nlLgR7YJXH8bn3JmGoWrhhHz5x0rn4GDi2fqUeX80s6PJ7SxD/jz36adh5vuEVbcvMF4hDsrx55rfvGYo6RrHcMfUh09lBGctkJ8Klq/vZDF8DHI8/I8ux4/He/kY2vDVm3Ln/pDSSJ94YZU96d/NfvPVTfIBvqnf6ktmmCfAp8u7CEPKw8RGnf1Gc9cQzvxYwyj3aWdSOzhcnnG27A5NB9wHy+xix+5WxvxsT9hhM6T2ZiP6BMgY1EOPejqnJJElpcjCIr0l/sRT/b28SF6w+en6xSSl4AH0uLzqjVsKNow2v+YM65/PO9ca+QZe6gdcMheyht/geeAP0NEisImuL4cQCRPD1nR8MlIscl9nnLhlNnTP8aulb9R/gkAtvh8enrGkREAwT8VPTnnUHlljmdr7ZVzZzdILu4RlKLBYuUNgMcVdwIFS6vTCRun6vwzigN1anqAv+104tT1+UeUx4+d9+pLNeTOjn3qVGrVMDfQn+5bXBb6odWAB1XKJ2ZIn/4RX4zuW5ypwpUgMPDIOAQlV/KFX/32IhVblQdU8yYj75CF7hlQ+7Dq0eMwaUVJ32P972HMxe4D3tJI9B5Q6teWBLWi85ATKD2BTPovvMZPOh4/JHlCB7quZGb+l6IO+DO413phNcWOfNTRfohFzRVEadsArF74tjJOOGmokWnMjrJlGoVHwK7r9pn1aKR8+PzpQ7sU1UDDwkRjwHjv2Ridcw3v12rqm4tDbZp7THVlzsaJrNJ65nFZ3JBr139ji+oOdLmcwB2HZn2cX68a1etvewVe+5FoRSP4yifyjDvsK+Pmrg4urM7r6vwpIOwBxcmhmoqj7BP4bvqvjfC+Ad707wA2y9YwFDfiDaUn+DnLLS+0MOoDPghysehMwFfevARRQW+NHrDxyKs8tSJU1r6MR3+9/wJCLxVbDoxKY9b7Eb6QnaM+SlzeSeryovzJxuwfAU+vbNXr2zyzUkxPyCj8BanPAanwGJBKcgAcBNwGLMAt7xs9ZDF2zoFiW4uv21cd0g9qpr06xRM9jaIu3hsd/tQmqYSVR4StEH4N9J30w5BMZ33EmFe78QZ1Nf3pXd+u40VO6BKWl8q4vGj5bYNVv7K8Bnfz42YB9NZ3nqp1KnApt7zsZGui1SUvcuEO9W3yK09h9ysy5BZ/g37H+UzGVuv/KRd83UKJycd6OgCvLirTV/oi6Oh4Dvy6ek/JyFQtid6vfKcdED6BDmcjiXMA9BWO9SurY3Z99tF5v64gL7AO/n5igezG+V16n67jBU0ByEshccHKgMC/Ixlt0MmMnzCQLbx/iIAET4SwMgd0eQTUySE96qb1HqH31eEZo9P8L3f95a7N48R67lr45PzfT3wGdm0hHU/PMAFBySFKtrn40mXfb8tde2iuK4srzvhp47b0837ap/nUPrN0E7RvztqneFrsbizDAFpP2GJHkv+qvr07amWBBa1uIRouD9chpJzorMvLb+tC4FGgdN2fXY80WlVe8ir5Kz64cAH21/7VC+62FFRfT886VUsjPrq9TyTvm5p21iqFYVGBaT9wzVkHQKU/vbcbE8FsoVW/bCE8SMQ/sdWFFZ/Y6kPoavkx3iMMxidgDikP2/nQK3F5GfsKtTd34f1kDgaU3gk/fjTkIDVENsrw1RFtQYkFfKVkt75eVFYf0IiA6DkdI2KCrReRlcfYowXjCQDWl01msBlflhPYExJenV1zjDcZBoR/Gex/m8Ee591hs6fGDPkAwbDPQJ1N69rp47UWdbr2V94/wc/UvnTycV36US1D8zfsScvF3zOioFHRQZ37b4DGPKANdYJfDJuwbStN29+Vh5f8crqrRmkaFA/RXSHmGq4xk3BZXE5xilqLE6o0I3ZfyD9dbwkvw771mmQYsarA4ht/arcd3hM/CjZd5QosBrOFVdx/VeKAA3bvo1iiY+0sHtIi+KfvIhYKRgXC/Bf4eFG1ImicXK9pQVz8Qqf9AeaL1KJRy4ospiTBXmq5zAzjn72vs3NECF/ardetNmn/gLXVdCAsGyFb4JZ90XgABzf/dt5seRaFxdN1dMFqsYW57RUbhWU1lv5G2i7jFx0qS490dIDSR5QkAsZur19LJctzL2sq/gmzDk6P1jlCZ9lBPBvr3xROO4TjwiM4rv/luM/guPAwjOtw2/Y9BOQmVNokuWvf6etT0bazegDKdRcZEPy1Xe8W3Q8YB8ld2eb3oaRkWrwVOQIMLjxvNIbIdx5pY2y/obvxd3WFGGOkC+dT2lEtO0UcB0ZSRrwWz6UjzGJdqY2HMduAh6zKXRXG85KnW91peYn8SSNq5xksHTVUQiq6zood1HA8Epgedu+CSPevPL23GUszo2bOYxwvfzpqPCfQ1MMqvA646Aflf7oeTZfO5RXXhVW3ujya70DSf/XmrHkgT+SPGqGy9Y1f9U7zw4h4sfZ4v3YjQVG4M12C3ScoNMKd34bG+65fQrl8CRsXkBYrcEXgAV6SUlqmzPiCH6EYcRu60TJWfxzpEgd/BMktrOiHWf4J0IASyiV4QNLb2YObBCFa7qkqBtd9tZAtg6cNP+FimLsUZf7C3OxsgwfAXJ87/HaWSw+AkdKhSw9muVeu3OU093z9dLYEENJyy2k534NgcdO13tiNa8PphCtNa+4RhoerPUoxRnfZZQ0nE9Xsa7g98TFGuD5jp67DVdbS/aQYI1RmvtJYSoS4lPtAjEUcQZPj0tICXbvAkvksBColDIcrHr40VeRAuVVLwhck1y9ZbxImZXDrT230/QNJe67cuUfho01vR+D6niLj2TvQprfVRV1ZL99qKpTVvFvo/qJ0Ldaiq52I/EXrx5Iij+kSfO0aE8GG2XIHKIPwBbxd9EX2eVuDG1smHbg6ZopkV4GiCqZbfBFzM9jR1lWtNLYz6cPk/rtutFyDmveY0STLXNBcXPTGlIkK0IK5fqVIfRzoNhR+5F6vq6kMccYcZ75QKz+7cvPpkp7BchP0eQbMLUu6+rgurjCHS79l8tkv2/1fYLvVgWBVOfkD69JOkBw9xmja2LPgYn2rwB3fot119aXNaWsTBYSwPryyYruwNjTuQ4c+jQq57/NfXDt1E9sFWFVhdsI6oitrElSZgUtK3OnzxSwleSOIluzbTwdJZdf1RYFHEO3yAlsGWBpwCf90rCaJ338FdzdJcA1xKd6VRvbCAXdXSW7FxEeCK2P7sCTNLpUh8b7vMkhr7Ntpsuq46SlEuoHWaurb74P907dG0j9z39pXPr9e6W/Q3HeIb7dnHeI/SPWtbefoLKiyzFIt9OsW+u3fw3aLiTz9uIl+/cIwkHJPAdjIGP54gDv7lOjL/mw89cL5b3IZVtxx5JGCyau9B3eqs8tK9W5baZDAtekvDZgLe/OlPvyWKC4AwDSlYHl3gGwnWIPQEbp+TUUiibiDra6fgZFOwrjD1dWDQ6rNs8vEd2mARhkN8VTiW/qLf5HvL/Jtvez+GcjXH2eTjHyfMJLFpXrayHf9Us0YhNoHTVzKfA8KQtoIKnAVYVlHepb382ENCAZ57Uas2FT4i2nV/qRsZ/MX8EV4Ly4yURZG2cupTrBrxEuu4baE2C2a4cAUkDD50gtnuawGTvGlwxiLJIQlJX7lj02Baivpymn59SdfS/mK9C8rfzrfD6AvY2FXUd4T5KUvayzUiLn8p9wIeP9FjbJad7qt+gAk/pOZ95TBP/txBHkc6yL9t8btaq7couoxJsirMG812R76JcY/Ha8Tb2yyR9V/cynnPwmn+OLMLK9yeJcgwEJl5Hmv2o+83FG7XUL+iKd7Tf8WZrNg/8OHAODjHLkL6OvHun7/dD2TwNeTtvhgr12ruEJkOmewpAqv7jUuUnKO9IYNSW8tLwup73bPuB0RHQeLbav36opkcg+6v58pVY5WEtaTxxe3d/QRINpvw4PB5WE4i5lvEXj9HfRdMibwcPkiDckS6i7nF/M+AvNSdTpYjnk3oZoGZUl0D2vCwi6Wj6Vu6cKcGWrL1pvm0fvVOYqyQ9bpu8j/tbzLHwrCKxXRSrn3BDy2aQoECzcjRZdbQ+FIHfySxroSU8amnTcxNrmhuOr67RfKWgtbw+V2M5Fgkft0W864JBV4ue98+akjir323fvlOWst+dYDtyPTEe7dPz2PXEHGGwU2uO70IoWNA7VTVmhQNGzfi0GU3gPf+nZVUMKvcD+3nbu0u0uOJOVOn9efnhJd+SKUtmhqZzRMK3FbVqyNZTBTIYOc7V7VLL011XKQe9xfXdr/aFvfAsSc2YnwPLl4vqGJ+CG8oEutQXRwcNvzXfajzLr91vFvue2SXYPfl2+L4iYmujIUr/2+bG8Kn4tANmD+X3oc5ld7+Mf5LLmBR56D6S/NuvOfSFllHIFjsy7loQxLQLIvD2lsPXUbW1slpZedhZTyVRqYdkkeTfLm7ky03JKuyZ9JvVCOIEPadZGIWZ/bliqm2Qodrx0HmPA6PW0eYOnMxVEm9EEl+QEzL36x7TBsC8/AtvuOvkVt1wUKtEfMJGy7bl08cVG/t98tG9hbGnEblyqBWqCVrWu8NdtBbSqIaNlYmw+VeoSVN20+qEgmXE3Zd0RLAxaJHlOUOHCbIEVuqFCgZTDUWuvycTrVwyX56Zdruy7GGEeNOyn7S37WPB6u1+l4RM6ltaM1k2PYkN58+rDbnew5VcGfkvB2S/ASi+C27lsbqSWoUOZNK7bG5/l6ZRXFcGqq0hQWMIetid7nF2Krizo9TbcvGZ0bgCoCe8oMWlRhWt+Of/SVo/b87J0aTdbUvQl7JxJb4+KNMS4pUNI/He73mBowNs0mnV7f0aHO5Z1L2ny/5x2LNlr6ya/2yffts9eSLgAtDXHWdm0a2LPKIOr8OVFq4CJhSBg34zv2NRJ5/b0Z66nt2B6iYD2SagtTeq+P9n5FicYy/cSCpPV/ZG4D2SyspAslDblpXvQKQlycypxcI2brQGOmyvZFsLBpNgLEbS+al4clrZE+fSAIo1pxF0EHf2jW7qCxsDRmuaSxtOFY/xgCSzjGxzGK9/lf/voo/orV7n9NOccHwknbsCidq52f7Eu9xq/L3u6Teq2NR1TmSqyiseLdasQisNDI4qdfORMmeRJSt5YTurhmmspHlQJJuJWzJOWvJNWtw4BsjxzRAJh+Hy2K6HCQTq4HcMUm8vB5HvvG9O4Je53v7Mzo9TCeZlGrYK8qGr+ccDa5VOuuPLKZxFL3Qvvn7qPGnBiKjvzqVLzFTi6ob/s48aMHV6rEBpsWzOo5qkgRdA1jew3CboPYDoO201ypfI3TH4QlT17adhz/aAVktzq7Xty7z12UJa/4Jys35Fc4thoJN7XyRLxStN4ljt1mS62oD/h1dodh8grHTi/vmF12jgrLOPZ8Jf3H9/bJFduG6gHFnc3SBZpdtalAYywIltrQrG8pWWs+2kn8Y4QnvlnypEXAsSGR98UNmTHFyUCuwLJJsJ++5SnuHAr/5Bt8QDWc331xmBth48Qxg2JY474/NB+g5Mw+qOyCVqlCiOB6EgVNKXrHzmUFJN7CbyRzjYjWDZY5d2QRt9xt3y5Y1xh7msrnoGwiWjjrxtcDn57HYweNH/2Fs+MeFxcfBWeduGNJPAPLUwNcjKhjMROioqVo1gmkUhv3tWC2oAakWodoA7PYfeU62+4SmWXN0VX0YNUrSCWYXdexXaGesrgEZR3OTzw8zgSwjW5rUtlpF2v7ghlj8IjF2KksD3edfYW2DW0IBi4NsTIZgc4Uotcfexvu8NFTz/SiIlhBBgcSLSmPCQ6U9s3CJV4S2SXFMc+Wvr6mh51oxGfpz+2lVYZAUzOBVhfnJ1MFtr1A7gan4k/Xa3D7fRUA61WEa1mYXNGZtW0PkzG22ntd8FcF2YunEeYXDiJX1GZYxYcRgRZcVjE6JeJWaACNF2VydUXzt9Yr/E5eSUfKDh2H0rMzKIzbueqU+n/VTjO/xb5sWwFxnAouJN9eK9fofX8/DTeuSEMgtNkrl+xpiWTFJ0OhP+iK3u0EE3GN+17ejIhJtHAZthLgKhXCe09SSw1bp8P8Q9FBdndG2lgr9T/f3cNaee/rdtTaH0fQM3gj2V8BUnsdLRvnUgULEeHmghkSadEBWo9lEd3x6Vw5YSYDjdx5MyQhtrsgP1YK/QWtg65ARpuPIK35WYlpb7cWtBZ2FGjwiwjLQOsh68vsJtmXF2ZYP3mBPtoUAbbOH6R4ckquCP/j8a6w4dS4Ra4toqnFYDQ51cfkkqRlXeByZXwbhUSC1Bm3hBZyh3pEyNNSN34paGlNRcaYCEBwnIyj8FTCyRvX7T6FEBxU4MBv1YHwVGX2iRH9fKzw9zMEg435XtnVgHuC6ArqkYxGyuLqTzx1VXEmGCt5aRehIGM25LdvLAeWoDj2fEPoOytFN79HXf5RoD3vrqSW2DO86y6yTOV8aWfdDa09e50/txc3dw6/vZjTXlPykgrOrNsXcgOUgdJtoiqGVlpwYXn7IezlO6aKMLe8wyDoHEDTAKyw6lHvwFNch/W/2OzmGI+dq17Z2tfsHWQZ33IGvqKq5BdcSd7ZMHCCJKBDk6k26l1QqnQsOBnWtiPW/bXqHDBy+zHkjYuLAClDNB4zfR0sIb4S1ClAk+21NmbCOl+vLlbBiDLfBOJBWJfxXkkyjxZJ8HPK4jrWuOkn1ORkdYQZsC5Ch8rI6uxuPYY1lqiP0t4gmRlQJfQuhGWtWJv7XugBJfktceUXqT4GqdKjiKroW3xmK52Zs6vJOVEnnrpXCBEWRecdQ3XidqSQhXkdUC0Ub/GM8FHWIXAwIiDQwuZ41rkTr0FHERBXCaYfpdaVUnoiiMdxFVO9cKimLU+UvaKbDQxPZP4ghPJsn4DqpHoKPyjQVpA8TjENvIUuSnm3nvB6mYID5hu3bZ0jnAakZY/7AigYQjgMoN6fS+U7Kml25eo6E8iY4txTw17+N9jn3sysbns5GUTL9dFDQ3ZwBPOdBEf7AWCiqeqruNFx3+tO7TCDYvoobjPvj8sl/WXTwV+Ugkq6nLvd4OxPnVjbDnuChTOM8G2a2ogKPvD59LqDCFybXSQ/ci37LPa1yNwrT4TctPMoiH7LnTq1uMOcKrVpHlkT6RNT83OZb7ERqBE+uL3tyG/t2Et2BRBCQHEhsxdZUtA8td+a+R/eKFsWWXnEIQutqTM+XcH5EpMQSJQuJCepp8dsJQ75wqkXrJg5i9wRkuyeETIdxSVNDVsiJTCv5ZO5s3HfEPfugzsSRZyLfOM4qAFdqmQFrM1DZbkaK4bPbVBHmWoy+7jpeSVgYhFNWkth0RQT5T8l7iIFOjVEzI1COJlP2U2t+OiC6dc5JucXj/7i0e8+WelYsRaPFqkUiPIpYO0M1gJSl7YZjZm1yYW2Ygn0h362cRFemQGWAlKbfHnpIx4RpLMfEdaNPWdDRfqIOwdWzvS0YLJ0ccc8pNY+rgagf7LPfVdnM6yRT5v8MNmkhHZ6Tu/yyM1wmnEkv2kEiNO3YoW/s+Sj8ubLw4RTN6rb9/z1eh2JYcdztfFRqU3hUxtx5gF3e/9er1AaOstSt1YmSPcXpkMMMRGfMz8LeguJj8qV7JPc71X3egWXnrCGfpGexf7N9010SzscBU3RALZbeuren3j09knN3ETD7d+2h0z6Vzregpu0TFRMaPlNj6tF+2TBWcVt9/LFjOf0QTwGF+W7WTPRLbt5bqkuiVRHGy+oZ80XsmjPO3urvr+fLOlvOw7YvDoA4D1tzRLTnrtjlEJEaOBF2H1fdUCqP401mvbOOmOLretBcRN0pD2JY83H//UKwuJRbmybg6aGL1rgupatieO2M8ZoaU1udyj4mR+xsh8ustaN0aGA2iQ/MszqwqB3wazsj7iPQySChBzTB9XBTE58NvjFCJLxAvGAoGVq/9xTU3QWITJ2ZAgKNQSdjGQ5ZUKui8sQtN8H1Ddbja8LWLNlT8ESwHd+gPgBNnZ3Ai1qqywNouwyzuLgusHSeexhyl09DTJZyD83/PkLQB8EQJOvwj+Ef6LwT9j456pA5WOyk7s67lkE6AV8XTmU1rrynGeLLPUl854l7HHzboBQUFTzYrvvaEd90WXqEoVCpv/VT+9HKZxCUkFmotj5QHXMu6BGDz5sRBTlUOc65YibG1c2iuDh+0qIljYOM/NibeW8guX2oQM6gmyqmYhiV2DaXVz2sqhRWeKMCWdrR1A8wjvfX6jPhTo9xIk2PgU7PDhTlzkoSByZTb8oSEfxzkOlusnFsSMY8bRw+uxroYMFzZX+881DdD8BoveI6F24Ivua7TUtmKP8N3a8ATcpWdJ2ihtVX6rMz0rLqH9zecfrGat/5sFD90tXfCqPIUg4u9DgoEg1PF26mteK42tSfYXyiptF9FiG1fshqRU9HVC38zIcA6niVu7METa/PjTYaOcM5fvBCiWi9wWH2Ono+aKmebUwX5i0r1dA4N42wZFcH3hQLLLTNHFbULMbZON/20ip3jJsQMVPFokiV+akvUwWbFeiUv7fZl+v9MY6tieL1RtNPIwmzs1Ht/tKhxYhfdMslyQ1IRBMxbdHlkxyaEY5qDvYN3KzU5mL/CTktp9oMPUmnljp7OliskYx297bywCXsNLzAyRTDQWWwpYntQCWnrbXyXuXWylWwdKDPTmAauqzXzGj6gRL/S8rXc9KfWalsJyVHtmkaeFNqJRWklJmyLzo6W0unjjpgtUvWiuF8XqDCWeVcVLTQSl7RXEfgimXp6APxedj0Qih7Uby19w6MLhRUlpBSXfXXNpVSzVYHacmkshsHPWeNhhkCmJb5O/PnOqx/VMZLuD2WO2YFKnq5Z1Ghv5+slMTUyv9DpItJuR+jJLxs+qxUo4yjuJO0CzCSZrYD6B2ttfrxbhPp93tpR6clLrw9z0UGYLDU5ZmyXAzJsUTkHx3bYUxmJXDVlc9lJDIz9zyZlCL3NWxvZ/+gLYnGDiDjBay5v5NxJqNSkbg7cf+HjOTxUsbRctLtVsLYVZtJX8/P81FK9deYPk9ynZluD9M+s+9tcOWZLTiyqq/37mO1/ROgRycyLBg+4pnNkotNNrx1brbfJEq0ww5vxytGNIyqXIWbZQdpFf5t5tOCkXy0L4C9R+w7+8DXH2DwW3N621Mmtahebh5u/uCcFOkh/Rl4wUn3Zpb51ZHYii1KRxDIGDcOCklTDpvo3J4BgCM0LZkcT0wqdzbeV7qkyGQna0bJU1tLumbgXMbbQr3gkGIEmwtmHRroursxbtdTkiI1KDcOd5NYtlYP3va5GYpdeBC2DkprKCAlaWU37QDk8KCUcOn3fWW9rFFCcGSLv8y4QPrOQkrGKk/MdL+PulfRjoMo7uy7cuvKceXkJQ/AChfqTWpnv4wpPCSV8+pQLSuG2p99JkjhR9Jl4GsyQY1DVlQXu71YfK3L8/OIipkSoidj1zHlCBW+lKHPRqHJpuiZveNfBTnkv3bihs07fSW3h05sulpXqKquQpsMFPq9JbecyRaY+V1pJ2DgDxXsN292Wel8HrFdIlkPAxINbj1Ajqc153oX6/XtmBpZ6nEZsoDZaQZuu6x5CPKAvRXT12uISBiCiWFiAU/vb+i3anUBrYOl93hR4q7bH7xBFDnFveSp8+Vc/LyLYddOusWgu7VJsvGDlDTStK8SNW9n4Vj0mc9fTvlTI4lo+fm1Jk3kiyzXWzZTCk/W7lAvA3E/9y4j/KqVn7R0+EdlY8zA6yeadE3anWCg8rwwhNMLVfjQvebWWGS/11MLwYUbnCNU8F1dHjdzGpJlZU5IxVPhTZPha4RSTcxJfculbQ+J6cibkQVaqLqO62m9/VBUF835m+4AdWqTt94GnqQxt2yI2JMz+oBV0GNeNr7fGZ9/PZPc7SYuBh48UdbtyX1yKoZ3WQTudylaKIyF3BtLsh8inQj43Twu2e5MkCM4iU3wZ5A60T2e3z1GNhJByKj8Qxap3Pf3FJkQf4FQzKkOsB+R+r9XGjJreaWzNduSHXdvav3p4NRFid5ikCasJsarOYH1J3sqGLvy01DsGpGcxnmfY5hX0Fam8mlUkcf2/slrZ23JG2xHgJa02i9jbMOKKpHxtk2GtXH0zNROf0fpq98TpqZ01FH/oRSuF2GWXPO2O6U5fqikfIqssI7TVrRo26tzcd+riu4DQlMzwoqjakyWtc6DAlOYF+Qxv2Gpb1Fz2/8HpHT7dAP9abe83aJWSWREUqWUBR0mCjrvOSwzCCC3LQGZuWB9X4qvHxt/7QduIYrk6pUbPC8eA1wqf6s6L3Ml0WlDrEpeoOsmDg2bnbCKbUdfqOzSfUrHgwyVwAyTJxZqd3v/HZFg8BX3UDBVnN5pxEG5M3cKJTkyL4ttbuQg//H3tkkS9LiXHqeqwizCJ8gM1bQtMWyfKRt5TxX9hngP4AkHHAg4r51s627q25mZYI7DuI80tGmOSFVX/Xkm/KyyUweMOE+vCOZNbi8Dx2QPqw1kgDjrIQ5n9suDxuYpxc6p5B0p4jVVwMmwaiH08ScoQZeIYZpVLVJD9FzxK55rQ3P1VXMbBGnL5zZ/gMjvJlZQ0vgBElq1crtJ0l1SEAKUOMkvfg0pQ5zWs+OUMb7gRmiwAJtyTRP69mu6Mku/gwF70BDtjuo5ReG+BWw6uxk9vdyMZHyO6lZnd+SQWQ9XTbpZubwnCm+eb+C3etwWVU2d8YEDvU2VW7O4AJPM2MrY9Kn5bTR9b06s0z3pal5MnKcE/t2NY/uaaEVJb0x8800h9aL3OtlDd7t67RS7aqMhs1feGabxKjDwWplyPXtU2IdR6GN8j7QKMydxs6d8ellW2OH94H8z2CDdTDxGau289uKRNmxahNtYYO0nxFtQ0ITibb6ofX8DlhRq7lf1fa7VFvzLaqt7UJ4yLZrjOun67awBdG03dSu25pPJaC6CATOq8dbBVFGIjFMVm1dVa45Kv7MEsu2Z6WFmWstqk8T8+2qZlQo2956mTdJn7+g2UX13qoRDZjpRlN4yrZetQC/tADIJcIJMLPGd7qv+c/Ry4+bpnzcvedetHwCiXtIx3DeZtPMkrj7Tqpsi0B2aLi5rFmATcR9R4tfn1Hx2nwktKS3JcJzkEJ7CHk+hxxNouga0yw3NwzUZUUzleFebTZOwvU2pF7Un5KBp4/HptyXSZ0IfU7vqVMZPS9GPlM+1C5KbWBo+2+xF9nh8jll+Z2uPKs5jtRdM9s+b7sdr0urr2jLs3JYlsmZ1YFqu48P2msU/1SP7EUBUfpczpv++YrpTHxN/axhPxNd7GVI36Dw4AseL9Gefe3jrIE7IXfPqfWve/tPO/hQ7WlKrZXfKt5yjywHB4VMbBYVtli7k0jbxFZ9AgHZrM0m4rrxpoInkUDDdKfBscVxZJ+9Ex46FJ532VbTHrgmFs9nHNracRHjt04v1Cor1BLpUR8NAHEi+nIZGst2HWGE2tfqhVr0Oq2aE++cWhqY5XkW4Oiza6Jxv+GB3NbjaHL6uXcucCKyvwWjhXX0w4g124mm0S+bdm7e79WLtqvZtLabxgqtVYVPq9W+LbVwA7M9l+2jIRb5UxsyhJUglqYY5Ymr3SiUuV3d2yxe+Fxxu8ifCtQm26pPdD45i7Jd6rotE9/MvO9bRLaqcsEp+z267WnhFDUo/RVuPyncwhcJt9phIXPotvgB2Vaf5m32okkjJKNi2Xa2NIq+dZC/GKlUtk1Sw2aNLQyVTfrI3FBtKdozSGI7YaD5hO2pdS/yya02NHors4ke5t6y+3Nn9W8pNsaNxisw99ZZG17HQMD1qjLsdOB8NGdnZjOtVutMvVVeU8FNX1auubq5+1m2aCy+kREcco8fzZZbaFvB4qSsl/PWp5hsWwNbvqV9jck3t7/KqF/UjJGuJm3Ksqd6o8s6XzZ51sV5zaSgXi6x2dRK0WTHIx1zE2jRHNRn3uDS5OrXphIjmw0caLXzqtBOOGfW0yE2VPIgDjjOxzvz8rwl2W7JtYFaa/yd2dhuKbMkun9/xRzbVE0895rhgwuRAFlAnETLOFfcMU78U/3pigRIk4TbRKOlWZqranZfqnnGe7G2bRPEabSHnmxlO5go0m7OXpoxEDg0WkP7aoEfceu51+RnHOtziUgLvEibBjOIOM2fdTsA6WpNGblvHbztpFazZXwSNtY/06aDohADHjeBqwb0Ci5ruhO2AZzxjN1wns5rLX1yTpR8OwHXOCthY5bVzCyscK/W6t+p8Zv79F6xgKvMnOMxaPseSMuhqznYkiRGyvV7lJmVSR3meq8GV7cLANiTdKvFN2ZyOnCQ2OHMdszbfhtovJSLPTNwW2VmdzWxX8XilVznoqDmZ5ie+bc+fnjb78B593ohd3LT6CAJA1yCsto71OJ9h7B7Oq7N/99M0JlGlp9oQpQEgBp/Nd2v0nTVxzXdQ3xYXTdFW3+wdlGab2T6r6uyvwjIteeWr+c2+JldUL0W63ZvLXWc8qeeYWpkJ6va9sNVBR1Lt0dmb33q/XIjTURd17PBfMCX1Tnq2u5xNlxankoFoq6ZK+oGBjxbzsXbDmeTBe89n0Ycj86zlhXnvYJpHxeQnBF1K0u3JSi2Obr2X8UtMgA3NBtXqptZum0Fxi652zfR9J507utUimb1LzBHwkrqNA+RRpFcAfSpXe4p7p8DcQR8v9YZeYli8h/d6Pxn45qJHzqw2XTgefl+z2dcZh9/M648y3ip+pBtxifRpfnZUc6u2Rr5+QdmdmlgVux62OlsANc+GCT5kBGcvK39tuhFm9a6bS+hicH2n5ellUo2fMZeONFZd4VwgKrxhVYvMoY1pPuE5lRgJPmurqay9RCuGHfAlpAY/W89jpKHGi68I7EvUDYHP2PbyBVgDYVfQ4Xf5m2vCYz40TCOGazwG3KK0P90/NlsnmG+QbibqFP3RUOTXNNDEmFShHOuT1LMtg3a52lzSu9uzNXcdL1+a0IqUKM6dV6z67y098fefmD8WjiDRiuYuoKqVEJ36e+RzuvE6omlGMapuW+q7/tL8XsTel2xj7MSnpjg7jZGeD1VCkTcKZkswkD2DQvo92vWpGqb01Lnnar67/fbeR14ETj+vS2TBe6kHN0Z6Wqf3pY/uynCsifDDJ/h4IbnPud3gnVs9xz7jVtV/zPCCO7nte+F69RhH21/SB32R7K3lfHm+BuB+6A+rPayM64jqtYfaq0WubX8CsRfIRDvG+H6PQKx69JlRRWltjD4YwoxLIdArNEoGzJ0MGhoNRlYXqsTwYwbklJ2N04/7tmS8HGavdSRIXdE0U69tr/zXJVObl93M6Yb27na2h5lZTG0cdX76Z7iIQnriTZR54K3kpzycqt9Ul4RBmVmqawB30emtsgzCKu1Ki8IpxcVR5cmBVBByq9y/Q8QfatOpTZJ+K66X38pSl0GXu5pKdfnyldJOaFfMS4OoHBKlg5zzTwCTP/8wA96lw1Jitf7paakFx7uEnRnc5GVU4GVjUKXrR/MpgKbSUKrcnudlAzsliKAQndlP2Xg8aMLlC53PMDWycA+LNhHAnDzNK1/XMopGP4XUO03Xv5BBsE00cjXz/jOZkrF6u8uU64nEBn8vFz0Y18gfSxakH9No3Lxp/ZBUbxE8EYgoHHib5gCPGfQq+w9/kh0YEyeLVWtVXs4+qdlHRjXZVgdBifHCNFrf1PGE10rFZ/Tbc6jF5hmaO6bd58+jhetD31FsUP16W42JcCgce4/yXqwa1fPCGa2BZku0ADaPnSYv2OPPK8EQ5rEDndzfpuCCWIzsHjPBrQMw6zgBXfi9O6TfmHCmXi6Lqst+5LqrXZNu6vUlqfutoFlmTc6n/2hnsF17vRpUbsY7HxRvRi8ThSqtUv6fZGqCd9IW5aCg3NA3UvSaDQEDx/neUn1SvCLKsGw9eq4cXNoG+jinL8cp1g3IXhRoRGeDm9ik5vgaffunOyfJvgro7wSvN7VZ5rdOvYT2zdcXQMpeLKPceAlB/55eS3YxpT3K8Mbpb1oSyam8uERdwjZX6EL619Z+POy8GG/YL5LFvbaJ7i8XfOBFmJBIOzCcm1bhKr1vXpF9jMmCy47EkJd+JRiO/n2th0fq82XO5/KERMYtW6qMKk6d8b0ONuj1tV3n3fuszrNhmW7ROwfLsyViM+kYasRg1p3jdiJn7fMFhpTAxBpZbmXTgKNOFiAZzKLMmrGWOOkYbXleG1CrMvUPZIhcd41j8RPThiz8q9TiZUXsLdkfxKeLjAhx0fwzGWSiH0v7kA09sMmeomlLZMKvUlqomKziN3t30aJqDYBWW0CcuunXT9Su6WgICD7ZYqg0D72U0BWarRyIqaQu53HpRG71+5plVOY4a6Tfr0oZl/f6vZipbbiYbOJy+4xxU/pbi5xU3mxOyzcjuPE5O36q3wqpJdxWpOJq9ea8Zws+tcCTe5QFk2YbNpY3lE+uIBGURWYUZAZbxB0CvKscSraCHK7rZDs4Ug1DtKHR4/1NCe1JkPr+U2cojGQpMwjLX/wYkwcVpj36aQESIy7Q59fD2hguNZ9yEcLbzDtQi/06vG/v5ozaLC/OyGwCGApyR3W28GxK8b2Y2fc+u9kD/ewYtGwdV/499eKcpJkfOADNLMqHf79dfnDS7IO9gKNVZn16bsFYGp6AAZfzcnEDdUi9it3pfJpgYOnQ3YG6LtquUKWVZl5aBURXqGuHRLXNMZl5GNHN9dbmcStF0JnveL8ifOSsdu05jitxKND9/86+TinGeM0F+VgOboKJkhD8lAyvqndtFpd7Mc1+vTrTTKeXp0cJA+j2RV2s2Uh3C87b1T9Tp1N8ZIxB3Y/pBlHjd/iNf6rGX9SM979qeCuVW8X0RgPzXiLifFTvdX2kBxcStYmGadXs2kbobOXUP6S6lqBWE0x83nPVI3fTowFJqpWy/PlhopJuIsqzZgaOtCjT8WLUY1hU43dI1W7ODFTNQ7yipW7ryxvNxonTMSDvTW2FiuHOMf4kQrIZstrRyYJJhzrDDOF90sxr9cvROVqoFZn++Au2HfW322JdtkWms+wMl5NXp10t4bS4eGBOCNNiLmdnv1sXfN6H3md8jFp/mOeLzU67TK8RTMVzF6SdegAlXpt+ueuGKspmiyTX84kh27pq+iCbK8e+2VxY3G2SGXK7zNeL0b/wNQhGCuYqRfb8qF12fbg3XNYHb9SG9pQ2Zvk9eCi7RPfGgjGtzkRK2WWxvTj6gxfP5jo3zqtJ1T6y6vFbVLHn3vfwJOL5Y6UteAZHltPUOwGEWIbOOo3+XKBhVLbvTR8toxGuq7NhTaV44bXOVJ9towLNOU9siHI3H1WzWnJLbVASxTYB+/ZHdJ+QNG+c/aO86pi22W7xT7orVjyt4nKoGzdCDmskYhiZkYYJK1gxXQKMP4Z263WpqzbbSt1gFAKb7UubauESYTH9ZCbXS3l4iIh0ivN7bro18cctdklKIMTcUnHbRWKzanpnuu69VpmjdPlg65JJsMS1E2GjfAO5dk/ZK9yjVfFA/PheKCM2YaJhegHEaKPtjROiF7NJLuxoAUcNVxe3TJRCMt7JfTBa9IT862PDhmvXVV9ufGhdc6OlF4d1AXPzbF2y9F9+8e/HEAohVYItmfWXMuG0CU7lHwDC/VQoDafEKiPcj2nUKtQoYaPKdRuwyPVB5JAPb8hIVGoMRGobynUvwJ1H4Eav0KgtpVGsAnUC4n7p4wmMUNWpMOdE5PW+MI8dYsMjS++Rq3e/83nc1FMuitauei5uLGmIZ2+JWU2jnTxydgq8fQyLqnYC8TmkKtxWr+GKMfH+yaoV6BXa7xFSdpK3mIJKHHC8IKajcjREBIBd0hES2Xjwn2ziLsK7Ma5XXPMJAE9m/BMOqMD1atTO8YVhucolRsou9suutxnZ22wq9fUF/j5XtWUWvEn5QFU7dj04UTKVq6ZTHjwzBnp8XyBt39AxWjZWxWGGqvXCL4B/uhRwBQ/bPnkm8ptmr0N2kZqWwOpPSd6t9gIVdp0NDezolsMjfecaFnjVuq1NMVkf+oHQ9bQ6a+hqMi9XcBGDi1INGZ00xg8bqPSnKvG6IFqbmMMDnDklOzIUPnEHqsZ/FBPG1imzddZMoBIWEGgZav2BOm2no/KpJWNqZodftGxNwyGab5DD3fj+llF/9ahV/t4zYnZDHlOMzesV9LwcCmEvCq9NuzvP1CvFW0Io7z7QmO2dO0mxeVKxyN6+f40sEvZIErZarfbmHLC27bBi6vJf3FdhR2tWZ6ukyb1ZQ4U92Oaw32CwsRV6nJAXbmdebQTt33tXppSs7vBTiPIiPAOZeLIrSe5mEratoqzrGdcSOmzTtaD5yEKOKHbdTM2sTKqp4zaNWdMv0/GKjnUwImpM866YIfdI5cAFOlgZ1mdAG5TyM0H0v3cR5Qo4OdTXTYFfL1nz3lHAfdN5akAPifGZ7eqWAB/FArgs/xZUgFc/+rfX6R/4zfJ32p5AWwR4xrlHs3Wv3erZ+VMM00geX9iU8TQ0+OQvJGqOvMV78V1/1NpHG9Tyd9E7w4vBTi3v93m6ZEq807vjo/qVyJ+m0+I384w2B4x71P8JteQdZK4HDtjBgdIqNWr7Ua6KeHAtK9pTy6vry7d0rVTE3LvrhFK4drcEDw7iMrLbv1B+LXalfB1++pVeutTanz+FFdWHFqVu64SifhNWy6trbnbxQMNL/Wa7xjo+xJFere/7bSuzJtZq0v8r6YW607pVongbYaPNVAfHX8571rJw9w17s1wXc/ISGESudW2KyUid/Jh3E3mru9yuDjxDjbrDwMQy9zoE/GXV9Pr/FO7dW9SIvtMkNG5lYn1Yz1gcDxaeSlOm+JUbxXfZc587kY3uLpxp5htNWI2N5qsCH64ddiFO37gNp0bqe1toIGfn5I+ZO9GWlyvYIH3ywTm1a4+IYBgrNDDxvrqDCZHYgJ3mAGt/LZtZe80d550xNYAEwI5PoV7CS9/+3C2c2YJNHCquCnjZbfWIKTJeSfJft0dQ1CHurciJxb6hYGTjHdetssceNdh0rrC3Wy96I3KZNL5A3ln7KB10JyBGuST8lq3GQDJ+/aRYPqCvP/D8NQHOdE7VJIfoQvutRaOtqIJNi18glf9SVTfzPBe3pErkr/DzoW3Er2bWgQx/RVf5OFjquwbJ4UvXsVNrxQ3LEqadAFPOhw+y2jh62TT5mP5bf4kVApXC/gKyvVm9nV7hujmVoJLqIWD+YTjdhAieBBKSjuA9RH7uBhOOh/+yuGflcOV+bgcfmDB9bXAHkmqRfUwuW5tNmhWFbU+PORw9QE5XO1yuArlcBDl8Cl79g6pX5GWGMjhz00OJ8k6cM+upKmFu09TJ9GnS1bIy+FqVg/n0xbLJaY6NXwzfOFsLNTaPraGgkKvJEVqUpRau5utOH8aQ92H7+TVV99Ul/eiuNcNmy3toYYT8xozR7XP5ogrzUnj5tyF4iS5fdWso5Oz+NwsrmGTBqWAmcQaiuaKlqwHKeMjp/DK6dKcgm7CjPEjwxPG65gXCeMxj7IjdQK6CQT09pTxOpGNuLR458pwnUajhUhNv9X0oHKkNoUN1LJv8GYz0Yvl9HQ89wLoepy3p4zvtiigYjHdx0nre2l5cJWL0Lpop08kdtHmnFEaGx6Uji2fMx6kVAbDQsbuxrUUGzhQzeSwPtKc8VQuV1zTyGUd+0RJwvgjjDS29xqJ5b4jrfsNt14HDi5yEowuvDr6skPBnDO08gS3MVG8Oo3Z6aGKNVlSkWKexiG0/6/9ooY3heV05yBRkajkyKnke3fxtnDkbjRCpZD1ta8Y/bKXlQWckJ9q5npfGgiDj3Z9dgdJW/TRJFpIk0+cR9XrqWI1PVglSRrxa2m7JlTnedh440UYIV3IgpqukaIA7Vbcso6uzgtzyRNB92Vo8wPvEHwM6QwjSRk0uFhsc04xEwT1JBjbni5xAtLe2B1kdX1rJTjBsYZwcWnQVFf/91fW2hXV2jVOcioPG1+oV5BZrsPwGM1qwBVYzWojEw5u7xufbEGGfMFeecdNeTcTlffUhcUb57txwK68w6eEd1uaw/RG+CrdXZ+dOX9l91/ZXZDdl9eCke51ZKerDp7hrV/9fuswmhfg9cS9cndgAS/Aq1QzjtV4HfecnDDO04xlDeTDsOOkTc2go2aC/Juu7C3jfvqUeuL06A7PeMgLnUNQbz2rx3YivNl7kNfqyeBiP48gnQRmtVfXiWyvQy3LX5a9bp8OHQ210YAb6nh9Je3rlbjxhFH1KeMroKXr5tYyrnWgoMkKkdfLGXEZquMHUs/NHPcmuwUaqhhad+EyTJ1JoNfuIXm0Owpcxt6bTyUt+udjhxcwe1vOlzeVDQR7NVwFN/mM99TwH07FHiES7EcO9Xj/PpYODYdiiR5iiR6mSfTromBd9n19y3ePsrZzCv1Yi+jjcneku1OJ/vAcsL/zeqnhqq3Pd0+v6xnvcu/sogLpW3cfm1AEwl/agsSBrF5vky4b9/aqYdPuXXK2e2r5wo+8Od29atzwehEFFNejZyyj4Pv/Bmuo4OsRH87ZBZN0NQ0EfLOpzPb/47Z5t6U35rxX547bfE/DIdfNAV6z8j0yLuF2ZcOUcGTJJbwHhWzedWo9tXxgnC9TBxtjWuOT+vAkzJaNNBejt+Bwl/IZU7JDzDcz6o0Wl/9+iHynNTh99K5M6v10vetJeS4iSShXrzYzlVocoQJNO2CW5IrosT4Ssdbr9+nW4ypbluEI4pFJhk8ZiWtPGnzU53dCqlTQdY9dfbLv8Dq6KMRN7S2Md8cHxOUZZvoEzTj//eWagA++uYfPhUnmZ5X7t1fpX5FKr6k7zFhHmwNHGeeOHnhbBRe5XaRf5jp+Hwsw1ugFUqIOjX7rFjvNWzf1icGtxXUk0d8pJWiTWU8vrgqNHmf3IvzV6L9Tow+bSdxu1XtbpD8cI1/rN6n0qZkkCR7tYJdNtL+X3tdqTb5nzbs0TnuIU9XeMHmfs2X71Tu1kBBdVO1psuot9bs2RNn7c/h66VSbtQHI+1q0B5Pm14//mk5TSNq11Hq5PJcrAT9sZjtLwCeJ9/pcIeDEe9/klD7iMOi+77xf3bYxycEPa0x39X5x6r2i3obmRolIa5O688Jgwpce6E67fL9svW2jtRFIGEMNupNtiqtbDu1qkoSqTcrf/eYVxCfHARLfE8TylQoVzFD85wre5WKT9cHL+rvuhtOsL5gKazJW5w5jqKxvWpFUnf5HH6rPw8cykX9CsH62/gTl84YP47lU5TekIUzaQ2tk/q6z6Xa3mt3TJhX59XaOtSXiV9qY+KtVvPIuJP5tz1KjhhZqdZw/KafqQ9iT9G4aftk4wyR83iNU0PGB8ZlXy9BHevpbJ7qVv9vvKn7YRQB3Ed+62DaFVPXWGUtkoxm+SnS+eKyGf6zWjZC1SAO1cN7n4Mf7biTim03EV7RlZ7pS4phqlvqtgyupOWV7+PdXIVHtudI7X8I23NiKi0lSPXj3ryHXRfvzQ89P/1eaYxHugjS++olJ01+ZkFGTsli7XaunF/rplDzHTC4Wjbn6tTUTnO8NR4m8V8j5Wg+tn4CisBXUYfqkTGvqfu1BrRFhIRpzWpVu3NrDXN7+aUpkq+xWH+Ob4bp/nDBI4+H9cvF6ugR3AQI4wSo1zDTNF6kmx1TaHDdB0fIc86ggyZM/g1gYnuUVXmrtFwHLi2wJZO9bPTtQnh2Y6fKXs3Ji2MGLFEysMTuAWT7FgSCDXmgFDh7cEeTu0AN8L3G9w1kbk4UHcwyTEnhA+Xc8ml+S8EmSAN9EEnB5KeBAwnZ3gMmVKnuK0pahhHmOMH8jBVc+6r3oCzDC41MYwfXAYfr1YJDIfURwJVDB3OpH0BA9AC0ApNahrrT4WQUY5gQIMQtXaRqPCYRuedhr1CP0EXhRDa/DDM4OHR4f0YeIOdqgWc+fwcHnfnN6O6WOc6I6aQMZNLXLjxPFBz1tHebCGs6+D1PY4GvvQ9eDYxJDs/GkZFhDeyIAA4EZ3MB0PLW2PzjBKiQquIs+VvB8AUK+sKW0NDLKSi08c/UjO4tvsRoChnuFA/Var9qb7zFeYOA715qtHazz7FTjW1cdyZWucMAzPOqRRfmC4fkCjrQlD5Rk//H7Xcpm9yV8ga1rMu+XGiw/O/9FJmYNkr2U6PvTUlPwp2JwpqyiQHPwwXDwwdvKNsQJNaN+ZwoKYpO9HUXEjxhY839vCjR25PimJQV6s+HxNfgqoRGbiT4ubTUFrZyOX60Q8wj2CDAbRBnH8A4F7y2V6cBOIwwo4oSCUU3JafYyuB2O+MEx5qObXmPWl7J6kn2gwed2EhdiNmKcpdns9hX0rrRZKdNem1YJ2tgEcI2fucjH7Tqj56Rs2UHeJeUdl9oEJTgnm0DGkz+R820FPAxnLS7P/iVm8OuETKT1FivtfkXskNCVDi7r2KqQsx7Be4CRlghuqQWLnilCCPrTJnNYfUXC6JoKUlDEFIWEXv325Pr398WQCV+ZQLqChF6no8WFVZ4En40UnM+BaU8AI4BhEThBaQjNhSA0FxIygNSHScRhNARXdk4nibhpNVSr3CRGQ2n/GhddwIYl0Ny1brlDJeC9SlQCfqnEL5WooRLuu4TvoBJgO+GaCFZHVMLMpRI6TLmK3EZ5LKGm76rKlTY571iFUI0l9GN0cdhhNJjUTob1YorYW+e4RGRCM8fJTzqponvkCflSMMFwFsDzXm+mcwnaNt1qsuvlqD2XIMUe6zohueQYvda8ixEaX/sqkwnqI4DtpSe1CYhbESK1EXVqn/EwtoJN4IQbP5fhBkwpJXhOAW4z9C2ReU6BCnCopQ2T9RV4lKer3lHErduw2ls501Rf83wN1/4xWwURfbp2JhGmQCcLnphitLnIO3MTfNB+BBhgCtyecoIpuif+ykBFJRnLOscs4FZF5Z+ajW1ZrAnsrp4B13w4ZRbJpVnfKIqoBa3Ljn72mxBAhFSAhkp++GZ5r8OE6qBtgpEXpd1BGW6xUZf6lP4/VXvTU8oBOvOZg8EZzWnEJrJsGjTQdzzMuAzxgBNnd27a3zdyPFIj2cTrvRLkH5IJVyhxoBTY2vsqbCyUqDZFT7LdCZc4Pnu2DG/jEthQJ/Gn7rP2nVtT/4GgpanyIZYhZMK1MCACc3OD3waozzdG3mGEycEIkpbfbnBU2w8kKtjcRXbFZoP8+2vlYuvxYSJIFXW1SEi329PGxQNccYQOE7eQeIe6T8ElsBukTXYhbBoWVvCPt86zcQnS0hWCuLSXXIuoA+mh4mqQ1mVookvQE3jNRWrhatMEQawsgkhdqTYEYcY2HhcOpXCl2Uxxhx0Uje22th/+nIJJpOGZaSAh6QmYoobFdRtb3ibpGrybxQBMaMxwnKd2N30tBJkoglTtyer++KLudRBu6rcAuKEGfYVEfbxNSIMePE5il8SABkhAA0wGDfuG9VZgaA0VCOUP+BHOoH/Rwnehhb0G1bEF0N9AFszrBayLGiyqR4vhxh1A7bcUTcmCOcmCUdN3Ud/dyN3yXH8yo4yMFrT/1ubABBMlT4X2AgxKMAUowV4KZvUNiHO+CRCx+qoi5J7KwjanWqlbrTDu1ekRh0+bWBAPU3EAIbmPnOmLahJASD60UF+J8D/orV1XOgnbcE2h0DJDT+hbu77XxFAxqFe2WZhMO2tHEnSqfpsJpRlSNOxJAgksdpJAZuD0Gg8/SArkqloOmVv+5Uztg+a+CzgQw3IgBq4V5LNJFr1nZh5HlSlJc+WKrrDgZTMb0VlNBE1KR5u0pMUP8f5j70U2PD6wgjFw+iuZQYMTc0hdT1Sg5mx7hO8LESZShcM1GtVidhkMaQ9mOJ3WVdyoObn+4UAV6chH9WxmX2YAe/V6Bir4HtwttRBVeMbETjfcNc6EY91GDFvlU+0R/afiqdFmm4aTBQK+cA404QuhDRPU70cVo17FvUgndRAbbgie8DZ4njZgYy1Exdj//X2/Kcc36zk6QHM+ZxtLbMABXI1CA/es1f7WJIc9erturzqLNihnPp2Z6jeqytR1rwSzG71/zzbUdcDBZIFD0FypKRy+XagHjL/V9ohXZ1+ChqUPhnS2cnGZQT02GFjFQgh9OuSbpMBvz2UJOESQAB3yqnSaaNToajV8vw2AoE0K8DXc3O1SdAuNqR4Oxn56NI22+nOe80C3d+byEXsCUosmTsIPezM0lkJUHvCuxDGt2mccp15hZ2WdYxJImQRuTEINZhKa658mGCApF9VkAAUt7vDn8+jajoP7KqCdrF+BLBUYGm1EAlaagG6bdA6uRQsPDxfqqGUlRQUL2dxsJ8N1RQPLCve0vraenBZKOAGSe8qL4xD2oFuXm25HN0gEAAmwnTyJYIcHmDhJzWgrEZ5Xr3ISoREntl0lWrP+BRG/IEJU/F8L384F1o+AiMMSXko8tJ/9srnwgFEf2DtdlST4KyCtHrzCEkkb5jmMwj8wnlEYEpMSiVnRCURVMSNbIiWqQuSHn4ZfEa4QkYsBbzjvacWM+IBoM6lfjgGzcHUmTiengMJ1+x7d+SslElrrZBpJokAOUEDeyGvIFJL2fECi4gBQpKNO2gmfPSBUuxNT450+LHYAtmLD16gBNwt70XcaP/VpaKp9KHblOTYTvvKBK9nwc1ieZucS8Qrfd7JlmJwexsC07MKveepibamE7Qnvq4QVaG9E40XBoZYz6qLwISaIAaNwSpr9D8a5cKuxCCWqdgCIqzujc93s+rr/k2Du+D5WJWy/AM5qh0DJlSR1xuT7Rr1DrSFFUO0AW7UDhmI0tZja4Co0lTtU2fKwuWs6aFeT6uaRR1N1eX2FTs4VTHJbICETyZqIptvWyuJPzXeTVD4U0Ih4CUSB4NpS/FDxkBda+uA2mrP2gbAIiGupg1ReNWQ1PB5JUUZyE9Mcl4gYVuix4xv61p9JlQkLSdveaHv3bxwzZCKszTrJxMiOULy9mGGX8r4cbLm9JxOagAk7CwVM/roaSIKPLxBI9KiSqPIIZOzPVw8jkPyv3GKnYWVoy6THvInXewHAbAbyKyG1DIwALooGk6byWHfiYXRFnzXUXEEBWen+I8cURqgcjDh+pkgNiy0f08NTDxBT32EFQMvMX0v8zhjSwpCJo2Og8mHq0J71UvE2ALGLoS/Tha747+87whRhe2ma9tfWf6VhRur5hBPwBUiC1h4pjylsTcVq2FQtHHmljN7DavNYrCUpAalMF4YNU6BFAjBZaXMIwGmljCFZACnUYm4ZMzVKlBujoF047REWI4obIuUdRrG8fKlpllGczWru2TLdhxRp/fgvo/gco7DbbiTxfRRSrK91u+KkvolbvQJ+gFGc1xqu9NWY1WvuBoyavXPCbsPEIQogZpar4fWu00pwBqN4P6M4LXBKNgZsjQUdNYclmu0bW0KAF7U1ZYxNDVsJQqaTGvydjMLMRxRpnG/XyIsbtXepod6ay2h531XaUShBcgZAohKGoRLQ7MBUd5/f+zjRkhtnngYoUQnigbs3ex3Lg1jP1aNsgpZ+ePMfhyT8Z/3vr5P0aYrkamCUP0yYEsVJzswyd4hl3TiE2ZsuUAyhAw+mweI+4wyd53ARkzBAbRhCQGFG+qDkcusoFHWmKC6/1ilZTtfaOmw3dtT+c+txqyh61gmrgFAehptNqv/UnO2r9YmhzkwsqnCAU5Eobt9q9CjV8hRp/Me/jwohkdXTGpCtpsrAexkjU0fGH+mdNkmVJqjCbH0bYMTQAgUBeCeFMjLxCFyZqks9/pQfYekXA6xEHnIK5rEi1/rCNrOuLzKu+Iheb+bgXUNIEVMKw7uHKTutpSUjoFIPdKnX5DamgzPrAlSgb2fgN9cxUOXobG3Hw3s2UVShNZsB3+zUVCnsL4GAFzlcbYvTAQn731GbLJHQvFPTmNCA1HsYgLTT87Ik39fRblhtRiMxnwhXdnLJ1r4P0NB6tqhW4hFo3uH5G+VZ2xshmqiAIKg7BvI41HCbvzXYAfn4h1ttUIgn3O5JvG4Vaa5sbLvaYXzi9HJKO1tHcztClfiIZSYXJWOlgrQ/o5v8nGouv8FuQE6FF73ypK3tLZ94x8Cdtr4+HWdbtep6deL5XKjID0Tkh3RRkT9hE5vsfcgW9gBNQNMWAg5vmXHWFrnKgCX83GRLJbMBDLPCrS4TLc0w4CAYBGCoLwYYvmlKTDBwLsA4Cq8gKgMJbRm+kWAk//ovwfg8wYDvIBjLS5URjDlWZUfXKQlgQAgwJu6cR9KJU1gSKbqWYAStf4eOen9ort8U9X31y9D+ZgnBiD1lBo46NGjg9FHF1oZcUQvwyqIxZmyWPE8t0oXslsqT0dG9Nk1SSpbR6v8GLdJxp/ICDy2Uia82iWHYhJbLPusNmN597unv1OLp/GdIA79NNIHhnOLpbo4AfNUHOE30ZBOUu5nIwOlILcKhNj6koR1N+NIR4Ir0HycQOWbhN2xkeo4+3w0Pvy7H/wWxTXUWzbmBKh8Bw2byZBg92ES1FCNEdXrnAcMqwyGqQAxIBfjmHTu0HTLW4CE75ACR0JShE86BdnQS0pFzhGoBYvH0EPEEYw90o1NcJYZ1Ujv8+6u3ccEloNhNngy+XmqgRP3vr9oHx0mpGoGDFGYzyXTSf+W3Xi79r1R/5DfH42bGP9JYPwOfSzBq0E+SgMqkousEWMAVsNBn4ABq2NjhvRCp1vFJ2I3J8PRmFoCFCTNjddCzdcQ6CR6NUmSrSuEFnnsBW3fns/wjd58h6Q3PBQh5S9CFU81dJnx6mgFb2wDQ5lBxp/W8ib7G8FwAH+ove31CavVtuM2OKNHGl73oKY3pj6+VRnLLanh9yF0fD8hhshWo0fMZ2xbGvEMCwBa2WwwS7/hZ5hHE39T9xlHUochDrcHnEkAb2jXGu9GdE8tjDlrwzkSPgUVU/0rL0yAKn881mtHB0eJD75yR5oBUkrV1uPMNLCV5nB0pDIUzblqQsgy7y77fhoEZ2tDgPIYZ+jFmEvt4DdkC6JUJs19XgDKSJEEFpPeLpRpmtMlCCPhtWcZK97m0Ssu2YtjMo/CTUINpfKIAFoUb1TBLkhs4VtMMO9OFX+YZ6aSrfUMcR1smmNZvI2IcaxHj0MT39pdx/DIOV/sNX8M4DM84Nj/IO19YO+QAd02C0HQiUkrUByhHuCdJlMNQyqGS3bSpxUXD2fQMExIfMdf499dWptOB0nsc3mkcVBX0BKpEmJcQ3jivuIZK30egBKjxQUEkSCDQLA5tjVRsoEYdf9wBTKRj56cwlBCcaCOw7odUXfdsAzi24YIGqh37np7jBn7Udfv1gqxJmrssB2wjdSI4RM1xK+OgjG8DJASL0qhsxrfZaQAwmrvhWpavAIMNgKLgNtSDgTjQJkjDGyYySAPe66A7u6Z5zaGkGXO7CqBxCOANlLdGh8+l5xGgAQHQgA1o7GY9W32RHjDWGNMHD3z7FAmE27ptbHryFmykksGIE/FISEJcVyTfXx3eODaWsXBjE16134hdLQtew43todoPywzQhc+sF1FqzaAN/66tOV//oYU54UKv3TPqziGB0+Y1rBTR/UfKVlxEBGNL8UsRhuatoUx90UX5V/56U4VFHSeZJRgWYcAVwqAOfC1GUU2UEFhspXME44wOPMCo75ndkPeQrt3TZck+QZ3hF1S3jbOyB8U0T/Gs0sQS3M3PlsAV8QvNGmaarShtbCpEpIMfdfmQXEp2qd7Ga0oGFkgxzG7riAOr5F5vmmRNKdlpJ2QMPl92aTmKnu2OEFIcM+YgDJyikqVOF5xmDGpNWHFxXhXJe0Cmc7iiMohalBncv8aNheYRkThqXVLOdIEvqKJjWhsBV9yD+YoF4GCGIWTNwgydsoxgByAezK36RP2Enu9Lmf+6cuMNoBBhfRqjrYkx0LYDbVnFDU5Yq1tN4EozaOt2gMV2bbDEQi9wqwV3g6/I3uwCyE7GZH1ZfuFc5cH+R7hl3tQKMOLWF6GGCkRMcWZeHmHAfISxrbPtVCP+bDaZistDwI8QDKbDqv+dX4DxSYDh1/u3EIzdcU4672BmIxcdEQwARmywY9oBBk4HGIvy/MK9Q5LiIBCM8AlagjEUDO8tig0wUYO28AwlgsFk4WxJYGZ4h2vWEPMN7DbrLqBAKh+vgMYhskAjlLnH58lRbIGGzW9yAjvPMHAdXTq7E4wIYZCULUcwwI80hBZxFc/QoZ69aAgJCPI0EglFQBiP1Jx9+IV/fa4AwC9ntD686BUVlmAAIRhnF5VBd3pep2Yfe7Rg9PGJ2pvvCo5ngLfBIcHa9uUuM7HAEzi4kZI7hm7sPbkN7YF8CuBqmpe/IvXnEV5yepeXVhzf0ODxBuw9VeotGv/ceeQQkUad4A2nnUCMN8bWXx8pjYj2pgbSnlJHN6ozlSoNwE30EOMd22VVJIPF1CoLj/3uvYyoO9Bhbl9aIBFf9wyHPDbaoapbX/8pP0DonibE4kHLVMiwjyBdQmHlV1U8bEU+KeRqzhgSksAQYEmIs2SB/oM/XQ0ofWdQSDBUfRZ3pHYNDfYMlW1/FXCr4oiI3fVtx4Ys/oicFoO3U72tVTWicSJbujsdkVDoKx78kAMjGFcsBclPw8KkMIWJW9kQohAwOkdCgiYbtFAiJiF6wEktq7c6oB/pEgt0xcW/E7tc6AWOwzvbtzIi+Njdql6MfkvcqgL8YNPkHBdBjovoyNrpxLGDqp32TY5cbNLafpby+KyC1HjnaaAIizA9GzAAQL2vSWdPrrRVCOvF5RMyOSxiKENBphvKmuyCA8WBN5kPsc52mWJIms2k+9v7ZbiSI8NIOs3uVdXTe8VVN1LUn7rbkYeyIRJX2KIYszibbKLHunGF+4B2Rb1I/aAAFkCwF6vkoLRVFDdExwZg4nPKgW5xSLfyE5fg6mUR+AQtIXtPSKJOWIIbLIE0I3wiLfn3dzGi8MHjEj3NfYcKYb+E5NOEZL+73Cv86Qb7lhcm+kXQjW3rS/kBRmJSTSXeILaG0fbMnkufcTEBIyFY1+2Y3oYmfmxzwMjrlSY7RjKK/f9s8YcbIOfrcqu9UXVM8KTxKZOv76+kSKomneydBkMBBDGjcyXSUyu15kWFAE83Uis/IHDt+BY1CYGwQ30EIAG2gUZJ7o+k3EcPCxV3zTJlo0F1Ein49Nqma8MGGf6Bo/MdnwaIM+gjKK910sg2UsODO6pImAaDqnZy8OKeuQutkKlJAbDXTbuRHPTDsDnILzXm4v7kQYEOVc30PLOvwMW2lnec/CDJMvNJmBDyjv5e+yRTicbZsamrG/sJPEiDEE/szSE7D3jmwSO3ka07BDm3Kn8CbSq4Rwq+B87QXKb9/LPXgbOgA6UBnsIxf3Fobv5dZ66f1Irz0CMaLtL+INtv/ftrveD7K8dnd7Qk1flBvrjgV4w9XGFurYxSjA9edCuTglZutFHXlfj9OOvAyuKUP1WfEiOva55zhA825Rz6DCZqHbfKIc2LejSDCimHfaynlm2HqjWSHIQgubz/gggehjKsTxUBHX7wSR4Tl6cfpen3L6s5XatWxn4tBzrcNEpBh0YcF3DyjX9BMpHcH762bsppcAciAgn7jKfRifPoh3ozq4rpvUVZPW7KyxEQp2MtvqNKQEB01KoIswBkgDchvBVg+q963kZLiLQT1bXvReB6UtLEAhYVrINiwaM8EjFtiP40LEpOihVPdZ2sMPZewVQbjCt6CfE3vp+KExUXlaBRhuLkMccW8w5rqfII2QtSrdRek5kceZZtaBZtANdKpU3MqBcyniZIgtec4+/eYnwFWG3TsachYV/UkjsM7wbbPATBKKZ+kvZLCf75gGNveCNljqsBwKl4w2bVYKgOCMfQyzINe+h7vKHW9MI+B29gsEudvv2E3f77q5xgFwRU+AG6gQsgJ2vIcOOWrP1LN/4TdAMB70GDjnBukfHGXWrYMLijjDn9pCO5Bze/e3tWT95Mt4yJ/eKZNCgzm95KLtiD8cZ++q9snLMNNr2nOfvCp+EvH/4ijaNBRxAKsGDGCWm2YmUbqsAzoNnwvQfQOJN9LNDYhup9awWg0TLUKqJBxkqKax0SOBYAizR0ZGg5CmmsC0hgC2kxyiZJuCdMQ5rDSmVYquJ++Xtt+w8zbvdj7cfn9wJm2UKsPRwhLgy5JfFO2UE3O2qthZ5i+En4jxMQeIzx7+9LDbl/6yBPO9pO+aUdggwLAkC58SOyWZObAF+/xJtrIVYapEY7NHpip92eR3Ce9zbaMAa0kLuSnO1DlEL/K3KlYinGnl6EiDCWYhwWsmjl9jKKcY6P2XQbjanqkK0b6OlBFI/QvflQFJazOozPXX6tA2Th8KJFUt8lhrGJ2LAxDO9UVbcN/Knau6SyaWl8KbXQYbFG5SH8p3yzwjgtescWWovQwi9QzSrxtkElQPfRHgQaqWOoCUszUmpBeRymeQRRg/He6yFibsAW00cg/rjfpDF5kIye2MI7QXlEjckuh9HBhKtTRBjIPXpkclFwXCYKn5qEyAxDnwQjHrU1TiY4g/hzMfX/wHRYSoCGHhE3ASLjPbooYosYYQzYUsr4zBGuInkzfRvmQ/h6BRLm4c6zkOV4ukCQKMTeb/R2ZjH3NWSMeSzY0APmdJSEnXPSh5iJyM5IGSbR26IcBm1QWS/eiPdyRzW2Tc9+ZjzfyaTiBGuKN97A4g0yfZ+HAg0FXhVeybtTQyjvhqo/U0+ThEy2mwxlG1zivmpVLyrmsz9jKlenyUuM+dVitZfVlRfTJh6rlGqGYxuPHOEqUswRbhuPsB7Cspol2OIOOzichTkO/4f9V7oYPIkN0AaswPlbfgva0F9BNmCFeMBfSzYev2Tje8gGfgnZwGXdb4NE+tlrz6e2ljnjPsHL/uh88FZHVTxMhRvmsLdiXV3cwNf5cGN7oamnVQ5uuD+8SmwDfT/Zwe26tWRjlaCNdRtp2j06SL3DwWBDi903IrKxjXQrK9A02XGwn+i+znLWQ1uu3/7ygc1/h6FcI0g6QuSrjaL0+whsrCnY0LF9GYyKAffeN2qTfSWPLdJfw2GCZxSGh5ZcjC7QYlz1p+KLe8anEL9cwq8QPeZwX6re2vzE49uF5+oFXi6+JiYvryj2SkRYTYBSgjw8TqB5kmeO9LC2w09AUUDeKAezjuyk2B8mohBurcAbIF+xJppaJ2wiKCYhbuLwl4i63o9pKA7ZS8K2Yn/OyCoDRNi8uda6jqqdUUU3Cx0PETcignkispPeZMWsS3/B+bAlTS9E13BkH/1mJKawbs3+KVwCOkkojx5vGyoJ+iGoyoT40lEbsuHFwVohNxFLGBx/6D72k0Eyhbiwe0m4vcKt4zw68b8b1TdGziqdmc8jrExhV0l4oKCITsLEe646q1ZKrIhQbDIQN/CIngBDT+ziYR8/x0+a8spqkQKTea9RWCgvaEUmTNDjW7joaeWbL0ZH2vUl2vTKKXV5eIJSZ7WR7GSh8t1iE9s59OX8fQk6WZEk4QkcJZliUBQGwyZo3fXTChHzXHPzI4ZFLwakhB9ZSFJoWtQyqgImFqnSOR35/cj9nMUoieoQdKmM7NS7dzp7cO/lES/HRpCCgBxIaSsCqJ0PxPPZJ8l8ci9bH+PQCRaiE40AM8iJK7ByobiJ3k2QUWVxiWFwCahpWt9R5bj9IlrPal+Fm4TjJS5XfasY18Ob2caNYLnh+USzVNFFB6WP0xMmNWGPXv+Kv8DkF5iU88BtheuvwCUvc4lL8BO0BHwOqkRLkoNNndftuehEqf3Kl0RuQbSjBHQykD8fClEiXHBBTMhZFEEnj7gmXY/toBFkJrExmbvQaZtEoRh0sq/kJIVnxAPWceNyRHrVsuRkG6jrE8gLdDbTaqzPKJWrkAA+z06UdyQAkZ5Bi6tcXdfvxSD/6jFmKhE8sQNHvnEQNK/bmivik2Sh6AiepJYNbjUoFp4gyWw9hZthvRtMLq0zSmQhzc8c0nKp7uubkfeR0ZuDXqDDaEQ8IZPoRuH6oPcmB1Xch+CLDWKo8kjXVn1dV0U9xjujPG/ehSgVjRRwFb9l7r0Oumv/7Mtw2Yz6iqscKOAIT5LKy2Fg5bX429zxScuVMIHUL3grDeUqZ0l8/DDDL9aWoPj4RKw1SY5P+2eX/hr02VoMuPC3lKds3lNDyMRKt0ExrSmxJLskKugJZtU39qf5A4vss06gsiMVROYp0zV6IonKht7FKOjFaqDmPE7dp6gLeIrQ+1TV17JWMU1j6EbWBFQYB3uLWaB/Gc0u9xiGah6F+JG9xYlTsAan+G95TOTFNt14pd+rjlWvsXRlx9jD8MpCghoiOpmdrjBd49CnbdvDl1W2MxF0//gm1B/IJf/9Ah6voKImvdb6KTn4RLgSi/dhLvYwumKo/dbraZIv7/BoY1LFbRo7GXLyxcklEauqT7qq2gC32CKdUgT7yM8jXpS8Hi2wiDG5Y+GrettJECz5fgNX60HgysptgZqBK6b1Tlo7n+XJ1a8tNtWPfnL2z65+c6d8xSYZhZl1531iqKPFuQRIaQqq6K2E16XFEWGGtnjvqJm4ZUsf4y7OS+iNdj7lDb3ozZ4H55OX9AgQwAuSjoQfpTCrSqlWEIEh5TD6Mxjm8YthvgPD+JvQzUXQb/nCAiRGfTzisvzPcRi6e+kotj/Ku6djmANV4YlhmIQCl3rMYJiWEpbq02ulOkIQ8KTBIVqHIUO8gc+LWVMo1Bg/GBSGDkh8iO3jNU8oojKD8jG0eJadpANxH+gmj3EV8FH9+8ANgBtsuGidEv3cJeiMWfSokudkd6JUxg09KUvY9A47cGTuW6dWMyx43G9OSIuDz2VJPj2PZcyb7QmHaWCjWa/6rrfjN9H1+IQSZL3I0AnDAOqFTJM4RAnMOPV3gJF7kKUe78EsX4r6MEcwJiyJ5wX5MUb/CSRTeTKDqL1YRhkMITXkTxC7F08Fsemz+VP8at5MVB8nq2hS2O6uKwmmQRjac3APNxTVIQ1745KpDbJh1fGnx0EbNBFZ0ulDpa9BLI2huDvZ1xbVG5fEghUp+0oWD3C04ewVZ+lC1XJpxyKi41s84GC4hOYE2RC2tQx0Hfe5RSaYQIcQ5xxmPNYMwYFam5fSZ7wsyFU4c/wmHKzMbzT1q6/e82o+RM2v4VTB2TY4CeBopIGvxsq4rKbXxhtYNnmojkgDdH8xK+I3Qeg+JgpmGxSZ5DXoVERLNksb3jXRG+TSxWOEr3XvyT6fXNGLMkgA4mEKiy5znB4HTBG+Tmre4xpVGIRv1hdzyXoy3Dw89OIP/G14fIN8zgUV+JQZwqeC95M2RHmJ0wMuc/290GeELInytDhNfB+Ep8JoNWnFLbioeYso5jfeLzHaIk9DtWZo1qoXzzdHnt4Lsp5+6d7yXpHbEQEZwzLTqNVX86k387W97EmgOYC6Oo37bZBxnECO5eBIlKODnBrSppFDOfZFre4yEaGcoPKjXQ/tQXIe0Rsg7hiIJlT3zj0dgnYyH8U6SLGOYbHOHgE13+nucB0jch1W1tFRc6RfsPO/B3aop++3QB6zMBmlX8B4MMN4SO6K2Qtz7PE+tXQxKLWRBHOr7gPtsjOD8ixKqgjnII8T1CnkibOyZzCe55OkOD8YueSI1d0DJm6Wu/sFxRTjIQ89GtxCePqxHoIkh3mMGYhOBMxD8e6mkOEbkOE8MfgbinmMIqXBQTE/Fef3jeMN/HVGIzb7mP4p3/GfiitqDgueiXWzD2hY0LOtFk1fgYIhmXS8eVkkftBp+RR65X7XiHyHbzriDOrGIJLUAGRJGUn2S3BvxfVsR1eFjjLrwcGs58W4mSV4JyU07A+v4A+y3T1xtwEdMMHt3xVZVjzJOHJKdP1d0sVdGNWjyc+RIkH7IZwXNL6oKJHLBfKz/3V6QPeKM4k+qtUpIj/R4PnaPK7hgu1d2ls5Dy/tVIFO2Q/LKUKzWVOXK3Q5wDATVAz8hUFyvCfg/ybUIXqMlf0W16Q2KmQ/5G5DHjJmQZDPn4chIEhxYUNayJMsTx2PX6ZCvIzYeSKEzjLLJ/xYw8GTxLJgBom0qBNjpL7B0JoxSdvuekx6gb8l00hJIxsKYWP75UpaIhmhsjSIURa5mWqG0gEXYA2iQTrITSLfy2bOx9Ig3FLb6WeCwBWosk6+2xc1CAe9Vq5S4k280vI4KL1mRJGVVDMXXem6T49mvUeXDy2hLsqCVqqzJPEkzxoCu4iBLEin3/+bt4EzRiJBC0+Ckv0ibm41JIMu87GFnJJBQaSO+qXY5QuMqm6w7Z5eO6M3ZwP35misA14WBZHKR2TMpPnPDEemwu6RCce5Devo7V7c6o8rtyOmNb+IOJMNBZEAYUMvyoa2IxiZ8h/OaHg8G2IM32OQvY88fNYpHrrRAOQOHgLeS5TQodB485cO/Q/SIR1dmr6ECKlFrA8EQ9NYBw9NJ0SI9jdkkdBiMKi+mUzlUyhEgww/Ni5fbigW0uHD4eo2uOuW40J+sAVgSI8ZeVw8wThRMSf16xg3J6cjMGLuiGeuU/2Jh0P7E34DvUuh1EHSDDbETRZ2Hha5sQOZYrJQxoxWx5mLNNzPwaJ/f1+JVP4ghWIjU04hsGoTogaeFrmBSwUqcQvno65jXJt21slaJ8+Vuz+HoRzCwugoMjhyfcLG8BbFWIRxadY5cOTmaY5KUOZ2tsvkDZ4m5WZnLyaEbyBHVz+Ij4/IPHBXgTszjL0oVKAU/qmL+dtEq2bF3va4rNjja6EJr4DF9OgUfLltqs3trWbXTYXpOnwkWFTqlB4dwUtnhT28XtbBo4BvoLdQduyoKtws5DFA2ah4t5UHLIEkN3LruNp/4Ik/VHp30P5Xhh3loUfMjjqO2x6tDDxK2BGlR3RDlHcXTdBYYsfTc1oE99aQJMyQJLLhEz7TMVAy7LqPn7aIksI7dlByrTlr6VBi7Brz6aiTWw4mEc13FU5qEScFk5yJk46o1j1GGtAq0cLU/c6anttkpoJ39OOWQ1w5J2P94byxefJNscolEbsPqKRlZ3S2w9cwaObeEU0CehsBmgGXPxwjCoErBWuR8nRTa0hWVWSZbMZMWindGIxgAvhaJcbE0UfPmBAGueCd7+Vp2K/GTU5fQ6ZFhkyMCgDY4rNVOSW3CIOhxuSM0CdHZdJ9hJS/ZEpOkn1Zj+8+FL6bMDaln5J/uy7hUn+UOZ0ay3540fcTtSwL1xF31aQWTzOwUxIhlIMnfkfhjF6mifiYmg0dyTPhuBMIpefo5Ik8+guhvgdCpXLJBykUTaoiGOpOu6JOGEoyPdoOUAgx1I3xNiQABPZzGQqVRD3ASyDDNuBt6S1QRaRWOvD8baqtLrc6pUcx9+pA79ZiuotmGmsQFYdYRc+AVUyk7rgDGfuLu4kK3ucGZ2AraSLbPPbnSqaBOYTVZBhYI6YyZunZ28Q+D+ZtyB1zcDDRWl+csivcAUP6g5olWkxnliBWH9QiBgqc7rSADeMK33CG//6ygCv92B5hjWl3bBImNPNNiNhvJmJa22zYP+iVzRj5dBp6uNdmkRbDcnpCrbC2obfQRM1CdMROIuG5hWpxq6071Qq98HSy6bLVvZpX/0WmVR2sVnjsaIPxmR07V2BB2UuwK6QlUWlEo8yQ+pfDK5nUXhRALWnheFhdcactJUXPXHVUhmrRW2soA1cWSP0p/TZjqSBgWVcwK8+ycMBg1Rr9m4cf274jEpZVB7PEIpjEjKjnkonArZsHuxkkxDkk6rLjazBSHVSu4BCktb42DeyCaekqpCVfhUZE3QGcS97BJdJSnBFFCdISMuniGvPuTGt5xistLc5jMzV8FUEt1aJitm4olCq3TV243NrEJv4Sai3c189SLZ2uxhN8d8d2h2wU7RGB/w1/1wO2RYoRoZZmDRGIc94Ao4OoIneBdIk+dB5eLWuBSUzIRuIr5xjQo95p7taRmMHTEEqvDE+v4oA+SqhsKBipnJZ5R0XHJ5JTHL6yP1R5fKVofrNJJP7zTjaoPDaaYLz8NIOwYpiH2pBKsJWhWSZ5b5N4Vvx/CNVaKdXaTuU96BBMIeajLaaAFyDa3cNbGg2BcheyUTRAnzhre6g80eLbUJB78i/T+l9hWole8hVMa10LmNaNHa4ZaslOVRzUWneopTV7cxkNtc7dWJT1qab/AaqFq8Q/EhoYVBtzMCKTI9j08KuTiLjM6EC2ZhzQ6TRErLW/yXlci4USbt3oF+awVlS7wj0O0wSlR3AtGni8DmU4x0nH+EVHhZG5T4Iy6izd4lWBxtSACksR3twvi7cgXnfnp0IrglC8c5vaedUIG6wSodMFkwNcfo46TlPOM4dA+ex86d/TrOO7kAyJ4sq0oGeQnVKWpeIAVSYoDMxIgzzm4n/eCLpOX729NR0OYV0qSuoktEtWFfWHYdeRzJGFXUwXZkoHxIEmcrzuvjEnVbs6oV1kajpfXCQHlkEDnZrYpdiFMXUyvAm89trOQRDphZi9ntQwr3ZPwNLRqli4CohXM/JC44yxB4x2NezRjDHx4qgXkzdQib0eke/SIOqFwuZ4ib34Ui7Nir21Rks1tmzXo/dnKykFbyFfkZ7YHX29KBaKoX9axB9lBDUUdBEf3DB01IPyoZ4LeWFxtj4Hv/yFXbm2L7oAfWmUG4qOIV9q5aXdRSFVfR+JhUuijBTgLwbGJk9yDP3yunxyvVoVt3DDFKc8/+L1jChdLF26Y/iXFXMO1UXkXzTC4uuceAAWXvJTQjtAd3m9yDz2zsckamDyoc5WNVzBHpdJ2lquUjmvZZFG/wIBsrjEApPnYHDNwbh7Tuck3nBfiXF/aOvA5A8wnnwX3E+zdjZTAZnIx3SUBFhHyDSkvhGfRWRso6qvI2RGeAuBXvPLyH4ZmczI9HcgMhXcIYk0B/J9cjwjSzo86XzlVyp1h9esmcAMjuROKaefycD7EDADlacDqV2CYgf+cWCm3vQQ0DIvoxkkC43NdIjLdGMmTAUvi6Ml5C599OReuJmU0zNoqpW+Rc8YU5QUn4Uz4fhZVKE0Ep/hnnmnW+lZPBXRaxDHJYoFVaa3+Nkjx89SzTpcYoD92zKf6ghG+qi40rRcE8qlL6zc88jyNFPbzrWg7OoZxZnVRM0xhh2tscVZOcDGNDPpAwzWNxtNsLpGZ8D2oIAtKUnt8+oOt5Dkdt3C2MgxOgmy7TnqzIU6SdLky6/rYVtlQFyzj9N6lQbcFvl2UU6UykCdq2+O4JLLjG0kbnG8AVUZQRUIC/nhFhM3ZqW4TAGLSsqTM/6UfrRIv0wGuvEPWd7YtlCi44CPE5nHbslHmm45leztUcDeKl0f6nB5I3zjaga52qyAheiu+PDw/yqAb9upTSwr3ZHI0TcxNh6N33YwJfK38xPRwwhcdL3RdQVo5TM1EhOACx1Wm235kXISncVyj6zPga7OtSvPSDMClgN+7Yauyd25XD3uKb8NxZlP/Ox1DOZIuxDiZKcvL7qaKzE0tW4alXDOMNM6i4S5F8tjLL6GMEzCrVfhK1WetxI+RbUKNaJhSElqt/TjcVV5B21woRY7Kn70KXU8/wfbB3nBqzDP5zR/Fg7AcykwoR3HhAfwYsp3aYvrBOJprjvDtLKJCk5nuKeR7jTceR6dpN9D7XjIfAXu9IxGZ3FsdIvc3SEhzeju8YvuvgrdVbodjEJ35qvRHZGGMhVuBmRt4uvh3fIZeGcMpre88LggmUlo2JHz0nJ7WkVtctILORUxd/CpPL9LFaWtbHI0v9NSdyIuhSVHImmARK++MT6aSPD4XCoB4a3cTvBgKPFAiAcmScKOrzMxlQunI02G66LAFvT2m8tRhHeiC87NLc8k6WxQNFbhr8HQ/6rKiiz6Iee55vYFzm1QVaM87zjcF0Xsdb1UW74SDWKUd4iEco6LliT1ASzvtQrSfi6JpDPN0yLM6/PueG+c5EqgZUtPTmA/tkuU6gnHoz2bhJ9qsxjBAuSVIYHs8WFm2lC+O9pjuEDqRJEpsxPIDbmmpsY4VbC/tKAxqJHSvdjeHoxUCiB1sIwdcQveCx87VIX+fwq/Yk7jFege86C5ZZx4dHUb8ZmKwqY/snhP36Z7xx8gMRHUxjeNX7G+wHvhi2GbeLOappaJWZ8QBt8ocfmY8IUduqJOICWMTz+Sfbg+3rwTlLGIjzsXCTFKqV4r5quVXsp9e98ogT68An3AvFNRm9c89MtmZen6a1I59UvnfVxNc9SPlFEH0TaJ96Sw7pG5uoQ6ROfYQfN5dTvRu8KAHKlQIL01KQuRc6Pqb8MZgEAFMggEdu86QGDm6pwrQBRvNgPQoETplZJeWTEbFGYKLbeNBjgoVOiZlffm87BeA30H6U8g7BTJKFR3+7BVTlSLeBAxy0fr8CBoxv5nlsp8BQcfJOeiHg4+4tYXmcy7Ico/ndEFH0zGmCQl3jLoa2eECMLbYQX2r2CEj19G+FlG+PhORgiUET5+CCNMtz8AWeSYCwnFDPhHjhOuH+KEIFtOkP1qR4UMzMELiDMBFr6VkAfMHYUPEReu0YEv8UIchwt1hAvJacIlomQnU4QMNecR8gOJISkK7o4MAdPWEcl1IAgrS6Eh23TiRpFsTZ+JbDZaHh4m/cbCe34pPXyMood7YzLMhmlCX7/gFWp5yzYcPtQ8nwmV4AGwjRWvL/yAth/jNT3UjBF1qBYPmNDbCNeTcADkaErrClrpoU6WrA72/56T3Xtx80IpYVcPesuoJ4i6sf6jbk6LIS9H052G5/pVEJEIib2M8WhBo5YgYrZ8MKjUFDji/uc07XvfsSJMp5IJV26ULi6mfWGeJjL10505nXlnqr0kxYEnWwJc1N3H/OZyIWS2yDJGmS8CJuFSp1GjEigE/yEXAEYyNUK0NJctFVdcjIaM9DEL0tw1Z0xOz7bOb8XBnFlQ4u3cG+Bejub54zV2bESotSDuiVnuKJws6VZOZqiJrKy56k+2/9VQ9GgW8kY1Rx6Zqwhyc81I/5p74bLO35yjWRy6r5IxocKcRwIKsoVif6rl1a5zOP28LneO50MTcLqEOYNQJlIhCBLZshxxWlziqzYDai5DBokSZdyehfTbCngtQ3MoVTO9OIizaEfNY/tXX5juy3unYfJ903j2vDtKmYQsAWvVD0qnFiUeM2tOCSkRHJnDzL4UZI1wudjCnjQk+eXBrUp6eIivZGXB3QWVRC0eZlOUbTE8LQST2/WZkyG5DqDnteMDtYuayTERWszymTHh9QqxeQ538CRe48mi3/nlk7988lMDitPMSPpsWIzxYUSZRIxaSGyKCuc+Bik1t0XIYSPGyOyETCyo1INGfbrFl5LKOFODwxN5fNRSd14LK0G6vuWn5Mo6mQnlgCVp2THSzkEz13G2jJ5GBIZFSUX4ksswnIIvmd7RZ0cUOpsDJeQX4Ji215w3kcgwxWQsYV41IHOA6ZRRF2zhISahNbBMnUeZvXN1kyqCosiNr/bWbK4gzzOz/i/Ujb/nVPnaQXmy7FzD2xP5aQnrJB9l7fZSymTewnVH9FVJati0RnprbEGcDbtPqdejke5LDOPUMeStYJw3W0xVclsUX0lUfSVpU+G2mStamg46T0mYUdY1wzmj4qsL1klBOj39e70hHcGqLO4Ml39cMcwQT25rbFp4f6q2wyrkmSYhSh92ZJuqu4/df/gJHbsgn4hR7eIF/tSQdFjuBZqBO2qv4WeGfka9Dkvp54Ojn7rrp19LPzHKxLvgn7xIhl3NYMN2JeWzEAgoc96UINDHjZ4ixTzwxRaS3iagnIpNESiZtGBm0JeBLkqsrfwEA81ccbq25jxzMFiUYPJO8ZiT18MvUgKfEtBvRWblKamcAevpR1pJPkO9RJO4gCefzN8C3QtNfc+tWNuibFNwfQirNvnoMpp1psNFQ6Bchz5xkb5Opug0YfI6ej5fBT/3f34V5qCM8BtrK/1EplOFUE6n23oqVkqYQpk3aadANJoL/ElPJx1/ADyA+ywBTQrj7xBQECnrHAYqqrUVEJRG82138XYMCt0wqB65tH4x6Fdh0MdXYVDitiHHOZ9loYLcJZKgyHtbklY+AkT1JQ/luBWb9vqVSPTIWqJTyDcSayy1r8WiTLlFwawAmSnlziaejKbOmb3RqL6BRtkJEoSjEzc32mV8DFqUNwXeeZLUfgbvjIEyH6ClTJo1cwUTYSm3Iz6SVgfIhpBzeKky+QSQjGlHjpcauv5E667IqHgMMjVr7o4kXT/T/41UryzYmV0wqMYWNqVTfppWdCrevBh4yu1R+iIB4FjYHUtf9n/hhbn2WRJA1WJByLUB7RVODXhqT1lQqGrO9A6nkEWqyhIkfbGMuGtwszctznBuObeDAGMBg13jVa27irjVdJX8puZIHndFzSBWHSCk3og1eeS08iwLJvmaRyk+06IjcvnxUViwaa4FmIqJidhVH05c5W/mT8UWUcdds18O812cq2rEDJTUWruMv2q5+FR6PTr7DcUctt+Kk+BycR3q1e74kBxudZtZbLl9KAzisUJ0VkBkO4rh2xxXnsgKn5jk8cDNkd5OC5DsYwaSfYNQAUSO31IoiyVQlr+iSHGnrr8dFt8rJONN4C3PL6As1ENZ6bbWm0KzAktihKgbmGyhJJ/vf2E93zp3O/UZ7PzNjuWyjNBislxWsq++cO7sDy+NEitqsZTMAkom0Bc1JeMagm4Dk5JGlLR1KTbTVN6WwvlcZLVKJ/AwMkvuBwKxffCNYB/Xsw9X9I8gswpLp6iJrCG99uuszBmQNj5WOTRUQmnvFX/24bSa937/xbS/mFbAtPqLKG1JRaUGPMXQT3LauNT9mtOi1Czp1kTGla5KUwGpE8s4Wqvv0Fr21ILclXMKrk28P4rT89j7Dn8JoiBNqMAY6PRRiGxzSy07ydzfnaTa4mBse9XCW/rgqDuLztlJ6MRAdA65FR5rbsXlPzwhyNxrIwbD2xXq4K0WU0czExRaRpJ5kY5FXdtiLibjEirc5PIA93o71fLzSw+jKv2hGOGyF6jSD7QI4ZL0A/GZppL4OIoLFw1Dqymu/FPGEZffB2IMxe9dPYQ2qRD4FtfFAuIxA+0GufK6Fe3eA1VUwOp01qR375t0l8BqEXInR0xDE+ZefLeaJZJJ6nxU19CHqRDyXjYorZgd8zfE5eq62/D34Jsnfa2IV7jIDWa8fBeKaYyXMZM57V5rTrm2zUJ3ZLxS+6nGq1J1j8isrfYx4duMN9vlYISyHhNPPZ7yci6Exa05OoPeF/YGvdlHcE16Za5Se58sbq2BOYopLsd61lsEDR85KtoP9/KyDZTMV1PjgpsVWHGRS2+/ZUd8w2a9grNYDviiIOtlgK98ORnR6jXo2CotJ0PhoK7nvJpLRBwJei94LvMbpnJberSS3lEnEvep8hZf/PyhGvayZxMHe4cigKvDNpHaU47bSHq7ANJbvOa/w3rFf/wX9v7C3hLYq38a671bAH87UaQC9mbcoL6K9upS2JvRrXS9HtiOfqEf+sUr9Hv08qufWa33ySJu5xe2zJmJsZ0G8+uxJdesigCLQnsLAcYaAhwriF9NgLGUAD/0cK59ZWtXRoAv95Q8fGwOsspreDG7N8ph5BUFxgsKzE6syVy8WIciF1C5PlnEwKWnRTEGbuwCVWwLnHnOdzmwdMrI19rEc/gs4R+AgpXJ0ybmrRdQ3xssWDOafex+23cJJEes8JLZxrAFhb6FRPhWGndhi0mTz07pwoRlwtdgqfyn/iQVmsMWMuP849BCwM8XLnYsWmToME2TuQeHL7rucm0hOhNWvDzEqwGxFhYK4zhQepD+KfrSeEv9MbgYU1ys+2wXpmIf0CEu1hWEWP5r2cKtKiPU8t0j71zeiRMLZ0tVMl9xP88qUHytzv8MbIyZf1pLR5QQd/aFxmIGQofIdcmUciK7uWfC9gJAU8+NmRbh/dHxiny1XR05Fs0268hxvgnOcHaMl98g+6x6wGPd1pinjh1ztrdF8Bhol8hKeHxDC6uT/BaQHrrhpLHj2XCNMIvocbMPbiUUF1ExCmuJrZfV+pIaF4MuPUrsK1tDxdhY9ygR/hJqnDx5LRd966s0L/1BTsxO+n8FFOuWsOaXE/9y4iGcWCVZxlJUsgcIutkz4QYjxssKKwYR49cQ4pQRo2huKfnvfwEfTrHJFcHA/HwKkpRH42HfuIYWQgpZ6lxT+ztgWA9Ovos0s1T8Z6u2glgYGemyFAmnvR8rZ/inaR+7qgold2iWUhSrMU3vrqYCA3O3Ncaa+RoLZ24rH+DCyPYCaObB/LALgXBtQnN5aUIGCcfFjG08mJvYpX4SXnhHGB0vNTKKfEW4QCmVUFjABj1b/J2F73iNhfVYKpxb+5rh5L2xMCjk2ntlmLBIr6uYsJ6ChIO2m/pjSFgPIcJFIUsfJHzVEFIWH2/MVAfn60XL3b5IWIuRRl+IevR7K2HCjQT10pu++H0VTclb/+nBWDhGG7rjLE6vzkx3DrmOuGiKHciw7rmLDCbDujCzrFsoh6pmOtPQsG467UoZ6QsLGnUURzQ92LCEnftMe//LlUwlZTScjVcT7iLB4EcDDNb97ivqgjGVB/WCLiInNIiSSDM5LO/mK0cd9TAYK5o5Pi7YSHVRThkOFpqjsuytDw5mAsD2AtRKHiy+EM6hsI0HPz7Bg8WbblJZms6XuzD14cHj2rYJSSfXQBjKJ62zwss8Clximgc829U/BAMzulenamE9oRPxLwT+hcB9IPC9BdCbAhNBPoF/eNczv5n/EkwgYK2At6KgXjXT6zbsi2yHvaizMCfoYwnu1UOGf417kTJRjSJZu0C9/n9Y/1YqO20Yrlkpbzp2vjx+OgLkxawmOoHxchVewQzT3hDs/OoJb1MddzvgFZp3YiXdxSK4W7kqq+BulnxyfYTOxorsayuJzocx3ePicfziG0KFP08MmEpg7uMC5jbIz5UwF4saWgkvkv+xmJldiHHjrbcfxkRFa9WuP0R5C8FWfpsP+LvaRe6KAWb5bWSonWnHm2wzjNZUCm41l67cXxDb65qjWrEycIvN3FauFR/AbVfkvrDrVBS8Q2t1f0CbdJ7lRjoIzmo+za8/neXbEwxFszobEPUAmT4rAsdx2Ux+SF0FWdF0VuBO4S5cVkvqn+4+C/KWr15BxGaHodn6E+4H4Nnq9JzibqemHc/qO3RWXxug9FbFt7+cb+pbTGd1HzirC3hAVzoLhlw5ScJ/so/kEwwLyaxMrHQu9bbfCk+iUsG2rZDMXmRhymi2yLyp25WSJVHAsbkCMos3wax+8FHPF5FZ5slI7/U6SWMsmF1F1J8Hs2zEWViN/FEuC1VcVs6nuAFmuwt07WAWm8HsLWH1C7isMP7CGGUWo805MtyltI0M6YOYds5C++W0v5z2SmPPclpByfospU1+JyRsXLtUfYcxD6G0gR6qc26a+wSalkrlkauB+NIK4rymwE/utiT3bxuFZhVw/04wQp0hs5RvJhgozQMQ05B6Tiytu0VdjWQ5lBV+TvmC2/ovaBCR5WbE4di0BIHmOo+YEA9jH8UwltsXuOyNxEx6FoQVaIZAYbnZbJO59rLXsqLa53K84xtWA9G1BJYmP2iMyxXPvzhn8Vub/FCocBmDInmNdxN2I2feNJ+uIZ4DaX0oXzLbFbjqLG+98H+kh4UmTt+3WWvXN73zk2vUKr9/WskY9Va49p3+BGLV0p6Ewb4l4Jb0lJ1IVZNINfktDP1xSkkqE6LVvJxeJPWYOCJe9MAtLA0mDas6Q1QfMZYxVLyJUPMIqMdsXsxUBIKK2VdUyE8r48My32bUcrhzjprhptl31MBNNfafY7pTSUdBITTlXndRhukAaApiNHppHoHZnu5FJayPlo+qOo2NucSm3R8relRokZWIhDSfXDACkapUG4jUITEL+ppCtMNRPYaNBtnqbNHCRWefS9bwEG0aiuGh7kiCSVibND+vRaI1DsUZKKql0tfOUJRMMfbXY4X9CyCqGfdvtsVmi7FMoaqiz6+WsRoHRlDIw1BpggWnaHd1j72vSo2SsJyE5unZB1BoJAno2yA0lyTLb8czKpvSK0MPCoq57jq/ELQfBMXbnW1/KegvBf2loP9pCooyBGXrbGUK2vbwazEopledrGxcC0FxKgPVnKMKg2t4IM1SAUm3xIFuHQR/MpIvltBPid3w8FNXNzi8Az6xkntiNfYcNJkIemrpy2FuDZgBnnJdZKSpd/x8wiyIatqJQkoHaqnqVuKcvbOAg6sg35gqAzp1lnMG09TctYJdbE29Y/9UbHojKKdGrGWcgbBe0+251BGYtVjMLVHN8c3gz4l4k2elF2wTB6DNtIg2UyyTZ5tBYMInNk2hmqqMaj5kqnnMQwyiq+09quq9wp1D65IQIR17FdTUsh9eB6opJ6cxaDaeBaIMMq+MyDuDzBUudlZxJQmr/QJclJoE/Cn8wMmHnOGW2dXEj7/ywy4rwEXRcuOSVPITyKg89AibQCfxEk4GF73jv2SZJF6b9eteEZ26ngF7X057+XZhkd004iCvSxTrmS9bznXSJBaQXxPifAK5thFILAaQmXxNTrYdhB/3f1Xkj9nXfQ1WuWThKkg3oA5Vh3PVMn0M038kSYm/NJag5VBKGAkdQUoNRhFHXjJH9maXt+mcAR1JvCgzx5wxkMRFcApwNPFdi+YH6MeFGvhzUGN48Qg1MM1ARv5KXEcYpwjSSbTF8sXwbXJbZKZ65KvRImKW2FdyxZFTeZBDvcDOPZ9X9ksU/3eIItN1WXd4K+1rmBOSvwIo4n+IJz7u8MTWje12XeUVUOQbz8bRX+6SNwQo4nSgiBN4IsXTXXgiyno0filNTGebh4k4ZibR7ijd6KWK6psosaOTcniJz9aCMmm36S4sXQ6lQsUHr/L0E2K0kdcWjxKxiSRebATCQu8nNuV0Fv7wzKPEzP6eQ4nIWyB34aXs38kvrOCnuhoiShWXpJqeQMR+qe7si9VtEDF6KxJDvBHbNRDENK6Ud08GIIoj1WOZYZwVVcIMo2pPSuYYWIg4ERWmXhfCryJG+BCU2ruIEIchwnx41GXoHCD8fydYy/BBARDq2B6vRpS6gwexlg4ip+NywUUULnRaObVEcK/+DbcYkQZmAtWxKJCVDypQ4NVBznBAHIMBXeKTLr8g5h0PyGkuBXslXRWHMkDdzgApcSoI0pNvuH9nWCGoDYUEXUP/uDt3JjYoIKDjqZ+WoB9389Mi8pP23aummEN4n67FfcnlOj/+ZINtTsku1Br2v94Ug74UiLDvTp6mzhGczvQSpFVWTPswG8AFy1m47w2yphIw38XlXcJ8SNp1sZS2qdKhWvnStYTvkSd8Vx12tB4IwuQraThLPq2cv4Yitd77ApBHjxXNQ8tfjPeL8X4xXi3G019M8eIb7W2G11KmPrwokJ1GtiYQ5xA8oekii/C4SRQwvIdcj9Z5Tkz5CfKBjGZ5HjPBIqD3mAb0hCwsHTUoYSfyE3mepLBWAb0RvVELiR7eB3rMHb9eTn3UphpfSjxXu0VXoIczeN7V1W40zeve4s6wD46dJt0TS+r/rhE8jS9aKo+7ozxuE/0qlGf6oDz8MMljLppdUB4XfcwieYh5kpfPXNINUsgnMZ6+yNu6PW7FJFZECE/LBC9YcGyM8e+v7jvYgfCOfRs8zvhqdoclcUOH0Mtcobvka4ycrHPkTg6PxVqpftyOSRWs5HZUyny0crvay1rFJLlwKEvtoiCQ7kMFyE6LVwTdzfSWi3LjqwK/onAgrOsaPfOnF49KxOhAcBlthHWV67TeEFRajjyr07Wo7upm0a314zEnyHA6ncN0UgDwXZguc3eUNxMeYbFChGSOU30naKB0nMHTJaV7/Cco3aOa0mmcz+hQRnQX9clfCegymz4d8S+f+1/jc/qKz+mJ48nyuUdWQ/kJeI4WqX0az8nVgRk41zT6iXTucUHncA6cM3fg3KMAzmlWgpgK5zgzWC6Kzs2whs41vLcmOEeGcK4zzQYqVWwOP4XmULK7FV4MfiOXo/RDTlT8Li6HIBHfEVBOiD21cC3uhOTYVN/M55RNqigld6I2PgPHCRc55h3+PCCneNqbAXLiFTfvijcOxwXdRLhux8xmmYQJhTTuMYfGiUlfmGNxDK8m8ib2Kkq7RHEX9pvRE9fsI9DDq9KyonItiBP9B5Kc8bvjNlckLgfikM3OHUfiMo5pZ3jBgDi8weHSxLxuHE5+gncpnP4whUt3otR14jsx3Co6dnDXv+EQrirxfTCEy14yWVE5swIvsy7uczjmPY3mcFhSNDgCwwUC2GAMR7UgXcNRy+6jEc0ohXACohJ8k/iFyRbRdYZwkINwzFO/hnCPi5JGrBcOKuv/8CaDY4F+JumLEJYvB3BYzt/wR+M37nnpMZZqQ+kbNjU8/J+Db/oXvv3Ctyr41txItNUOFxGApW+Iglnhd8A36Anf2lSyFvZ2VQujwxOmnr3Vv4Qh8O1RC98wy970mLqx/V/w+g3C/xZvw664reMs/mO4zf6qw21YRtu4m7kmYVPH/M+dtgEAf1wU0zbk7zgsbONm0NIar1ThApA1AvjJsG33JD0nOAi2PVpgm65PFS0sGIuWawFrix9CFWzDT7G2dNE2s7YOBnKSwt3A2kTbNCbcqTax7IfbsI225T0DboMgZVdFZkWKa+QzrE1nWBvTR6oZuKHkyfsR+Ma/hEL4Fv/1Y9nbo4S9YSl6y3WU7oPe9AV5E+pOc+tDF4G37o5ktADuSqfMszdsRm+PwejNIAj9BZrL3/jSo0Luht2xG3wcu7W5wddwNxo+juJu+W52ne3uJfD26AveMkBZY+f0SbJpVmA31oVB5G54id367CNF2A2mYTf8KHV7XGui30fduGVRydzwC5Bb3nupCbm1CezzmRv+Irf/XeSW+HzUKAvdF7DV9PdfWejWjq6aqRtI1A0iKee7qJuXsgFiBfGMbb+Luu2nRvr2w+lwfaOLqRtzKx+F3QCA6NIBYSAqWDTlVuw2yls7lmCRTO38SErIG9STt8qJtX/j3M0GUHOfCmR66M0mb9EnEwvK0Zzy6A3IHTorWIzgbu6XZm818aZwvBsQ5lEP3nRvZ8YUvJ2vBATwFv7xzD0ALgPmOehNxfNLpsJ+S1CC3iBP6PQk8ubWZA69MSd/uAkW9Yx7tBa64WfZm+Ygqz5Di29Eb/sGI2hSAJ9jb/GhqqO4E9gVUMreuN/ubtwYB8qgB6K3MRVjionXerC3TB2N7gDfyFHSHb7pXiO+AG6w590kje7riRsTmo4CbuKiEYAbNvG2bp3u9LnJ40WFHkuNm2nbYzxto0d1nDHLPV1sZm2YRW11YXIpa0uCrfN6QqSJ+io3FCD4TNYWXYsfmS+sHLUJBV0leGoaasulr7G3MbiAITnSJgkkHUDbeSLJoE134WyYc/jojtnE2xqM4WzncTEStHGK4FTQpocoOjJowx/P2bbrCZPxDnxOct5Y6+diNvxplA1/IdsvZPsxkO28iH0WssUqNiONQiJ7fxKyiY8TOLLD6YrtViB9IFvwqClkYyaRzkGLF/FBjA0qGRv8NMYmhJ3BzGR4yPzostkbfhqycdOohWwDUOElZUvj6WhnYOb0HZiNnQjwmE3aABowW88Uzxxn8x8R9w0hd5hIILGBs+E4zJZ+TVCO2YIV2gmz3cYfZZgt+erOH6dXvOAxNXK2Ilvfvpgtya/RAmSjs0UfddDDdh5jA6ZxyiVjO+trrzsM90dsLElzI9LSb9xFbNiZsNHNOw2/mEcs9HVjk5D7kqowI+oSsJ3PEi52GypNCZZttwGb5vkag9fYx84vbpIw3GXQecZ2fJoSYyOM8AZk010/2xxk8w8ZwpyDHGPTvFm27gQHw32wgbFBOWPTZaZpfQlUjrGl4XEPyIZTGRskkVYoP9xjbJKb4tdDNvZCAJ0gG/ZnbPTez8aXUdLPf4ax2U2QZWwgV78VIzacTNgwXZUiYAMBsGGer1Vtkz0Am3s/zPOGWr72yPA1PTJjml4mg5w/QP4l6h+C14S89p+G1/SPpGu6nq5FiWF6UBPzX7j2g+Ganjcgqq8KNAiAUK6PwrVN5vhmupZ9nprK0t8K1/zquE3XNpmhPyOQ6VrmEpGdg8BEwt265TrQjtYYUNuDrFVk8Q36wJFHAfYDyYK1YKrfAdZyaECze1MI1gA+A9Z0V64W/+ECrlap+twEa2mJh85wNWmGlVyts1zAYZjMx3S+4yKuxicafBdXwztYLUvadGqgLFI13bder5qqgUzVtqQenqo1en4Pp2q7vA8Y4WzN/0O613KTEZuknyaILWSCF4gtl2Q8GLCdrRkgHbRnPw2ArSf1KSZs8cjF/w2jEVQ+8lbCJhawMc9dPNVDeb5cSmrha9EqP4vYGLx2jh2islmd6yrAe+rNw2vuy412lxxeE9rL9qozLedr0bSCcD4osj/kV4rXIIPXcD5dA5GuhccFOa+PGX6WruksXQNmcld3Y+YCdoOu6Y7xche6BvQbSnbJPJLSs9gaZhZtqh9oRhXggILwtemH1A1vBlqjxiTn75SgtcfH0Jr+j5E13sxKXGtIczqpLwRH1rRAGuaTNX7f5G7bdGfUIHSHnw3WQFDckNlSmORc1jj+C8ha+nKKwVpTauYNrgYZkQ1B4AK36tZ+ydovWetH1nQZWIP2MstWsAYiWIP/GbDWJoq1cDVdg9X0FVUjms7XUTVdCtWAhWrwlVBN32JqmnQcnoPUzo1Is3NgqjwloubUZfwyoKYreBrE1V9fxNN0KU5jDwvx3jMUprG+PvxtuxSm8VtZIJd8I0yDQpjGou5E2S4+TCtoGvN3ZnFaONBz2gU0jTcOxahM6Ty7+pp75mEasiwteseB9WwOpSEjso4jaem2wusfQH5lAMm5NAaRNKZZhEzSyMhFkgayHVpXkoY1II158FcgTfflUZUYjQ74GOwVRnuMwWi8xpzFaOHwsxjNHfb6AxRNX610hqL5HSfbuLszRYMCigYxRZPrCgvcqz9O0SClaPTkDk+rb4BocA+iiUHkZXXTeIbGT64bRGMrO76JoWnm4kwQGgE4bI+3JiwzEqFx/LKSocXfeGD29wmIxl6J07sDk1wnwacmt4NqisY8WBTKhRiKlt6MHuz07vgn9YJowmrDnAqVoWggF+xUKQeVFI2/jXBrCQopGnArDr6GokEJRYPvoGiC2AGsgI6cib+NCxk3zPEUDSCrrInVNR+maHG+5y9S+zhSY1bDNzM1/ARSA7bFcQap4VcTNeGgkYkaqzZ+Hqkxc7hAajADqaXPKsvUcgf+NVOr/yBqmRpiNVGjU+KJmiASkdhiPFGLtyHNvpY6ogYjiZqpI2oA/AcvEjUYT9SM+yVfZgSgxu1aN4Bah8vm9u/ZydByEIh+muVpcJunMfeNXkqWKcBpyTLUnXFaxNM60zRjTCFNe8g07YKdXeC0hKQM5mnnsiwpTmOA2iHyyUTthrFAM1L79xdMLVODAqame3U9SpiaJr34OjE1FnN3M8QrYmoXSC0+YP4TTA1GMjUjhUuFSE2swTzthUWnv0F8LXzGhYANCGDjXUzGALbwpnoLsEVFp1d2g7P4GjDaag1fI7v95wAbtvK14w1X8DWN0Lk/Ugte4zKZ6vEaSHgNElPycXyNz5xmJQJdD9jSb0DXV3GNAWzYh68Bx9c09O0h5/ja+aCH8jWedvx3+NpukvA9fC3vnUR6YQhIJ0oUnA3YoA2wcVWUbBOXwYANKgEblAK2KEPpRwG2Zul/PmCDX8D2C9i+qGYt9e355Wsd+NouX/8ovmaMEWKbXnitdtupxGvuqU/Da7oeGNbTNbCTEumanOt0Tdd4J6NZdM0YI5GBr8drhj/1LXiroGvSXTovx92ahD70/Y2vFdM1uE/XHmn03I2uOULD4DXD4zUhRGar8RroWvEmV0zXjEDX0s2Ou+RX4zXIVKtB1af1i9fq8BpW0zX6RoSn1p+uGe5YOfYVlj1hI10r3gn/VIU6g/DaPjPNrNlOjnjBSWTa+Rowdqda8MXtiNdMcPL3xGuZTKMeeM3cxGuh1Sir5RO81vGho+5M10gBnOwpAt3xmvt2L/AaRltMStfCiwnrMNCtNVy43wyEayDDte4JgOchlv6j13QN+tO1Wk2iMepKEkim0rW+YdeZknYF15jYlnujrBgu0TUtTLxb0DyHrkEJXTu/2EF0jTN6CJMQuvA1YNOKezr4C4DtIQA2Pjh8FBA2YPN5q3XNesAmSKpzCFu9bNtA2DQ1Ub1N1fQXQTUsKNsVlZNfqNYJqmkJA3wDU7vRJ+sXqt2HaomFCEvV9LQR6RBJGF6p+yhVMxJViyNfzgvws1TN/dI9oFrDU69laiZhajz+qGZqobhT/Qb6QTVglopphWr8LaP7fDaklk7peC8FSM0UIrXHHKQW6CIsUjMsUjMVSA3GIjW35bAXRukzYefztUQt3q8yQM20ATXQnf0Ra4GacGKkQM2A1DAqD9R65xUHmzJdiLySaXoTNVZY7cOXdHI+prsEx9OC70yEZ8jjNM1+oFNxmuEKJASaZhiaZj5O00wDTTPfRNMMau2DR8MBNMzzM6bJWhb69uFn5oqfGdPCz7g9oDNAkyOkTCljDqBFEQJRUPUAgBZ1WBzAz7oMPs/P9u/zPj+TlMDis6EOn/EANkyOL8FnKPpzd6ZnJk/PEHjXr/vwrP9V5JwQf6OyD9XI8ExfsLM08Zx5U6nb4iB4ZrgvZsuJZeFZqpP/RHrGvVchWbSNnsV/eUt4Us7PwlcohMfTABrgIH5GZ5TprJoHaFAM0PRIfpbebUbxs7RsYBw/4y9lQmPv7visRWSr52cwh5+VK53/w/yMvW5BOUCDCKBBS6nVfIDWjCB++dn/Cj9LWrHPh2kmD9PMFjp/DUzzvOqKpT0+wtJOMGlo3XpcCfYjWRo/g5/G0ugkDF+LJ7O0QT1gz5jQEHojszRmPkY3ojQ94JMOpR2OpdmZspMoZWlYJ/gPR2nJBrBPB+XLzCiSdrILE9UIpJOgd2jDfybslgwXJK1jomYo49MvswalCfMrRmm5HXw2SQvncv7ZBpL2GErSzlMkR9JMGUkL3mmWpFFOmCNpNZ/hCJIWysjBvgnmpCbfRtIMT9IOHb+GpOnxIM1wIM2kUKoepBEJdQxJ0xFJMzmYFl44ClFaB6zTG6UxaVzszXsoSjv6tgOPL684GhCO1mHk+9vjRd+Eo13T4zscTd/9VqNNJQvSjLkL0grFoxaQxn3G9h47AKTp+Rzt3HO6gjSYD9JAAGk0MWQOSIP/NkjDzhwNKzFaWlaZw2i5jtOaBQldMdqjBKMZY/pjtAYu2IWipbLAf4Ci8ZqaqaRo8h16AkU7lYMDu3C53WByDlA8R5Nepu7eICbOz/n5HA1rMBpeU7SmW+MNjGZAPj20UM3wy9B+Gdquz3AI7Qj4NX9/nIrQaAVVoINMJ2hR1vAlQUuvXt9H0HhZPVW1fxpBSyfAEDScAND0HX7GeG9t2Pgz/IyuoF9+9v/RfJKfxf8yb7YX7adfBdBUBqBBOUAzRgRo+NX8DIv4WYRJvwefCWwph8+iP8r97MHPbgY/U0bRBxpuEsw9hQC0gPoyohFrIVSCz/q1wdueuVKGZt4L9Aw4emY2erahkp9FzxLCIz5cnTZN60zP/v29wmfxSGvwmajtDKVnANwD5lt3fR88o8O+gmepQ5wuXfU96Bnu6Ix73Fl2hhw76zHwfWNkpd5gZSCy7CyZR7JS2Ow3nUSM8+HZdiU8EKZMz7YeOby5SifD1VJ+Zthz1xj0cW8WmemPIbPzQXL7/DGJBJmRI/jfX1OLzGAaMsM8MTP0GmWooSwr/kvNhAbxMqjlZf4wJC/U8MDM/DBgRmeumfmVADMWGVTcNOtxjJaAmeHvvqYGmMF3AzMS25o2XlYTDg8FZmy6OV3Il7wsV8YzhpdJXkjA1y58JS8TVpnh1ICfwctCs2sutuGTfz8HzIwRM8+5xFakLvmTCVWaxfkLzL4XmIXeGt9IzHIX4ZHETP8sYKY6AjOAlmdeD8yU4VXm28DMEJVvEDCjGqwslfNT4MuGJGCGg3mZMkZBGS8zGdSkJbO7T/Ayk+FlpoCXkdZ9n+NlQgHQJS9jQ7gpvEwpVcXLjLRXcRMOU6oZXobdcZlSisFlisdlhofm7OwacFln7UNFhOUal+EdWpY8sCm0TGVomelJy+Jo5pqWQXdapopoGWNty9Oy8POdRssUR8v27aSAlu3CvSmgZaUz+VMR23hEdpRK5HAZzwAZiIBcTNCXlsU7XHqRAMP+uqRlbPelbvDGLYpLWoZkYVTAMk6PucnKlOKVSH2QMgTg1rNpQGU4m5Sl5p3p028jZV0WTQMqOwvngRKeeApzWJlSLCvbPzmWlRnHyow2ZayM883vipJUItLrtGaRD3GT8k8OlRm+LDfDymqksvIJNrGyXFJlMSvTE1iZwkpWZviAn2FlAsBByX0Le86vMyszHGLhzew/xMq4lMwsKzMdWBl8KyszAivjX+QcVqZvoDLW9KQOleE4UuavGlt6RCkpC3/EJdd9ApWZWlTGAUDzbahM51FZ9NS/CJUJSeYcKjO0xe4vK/tlZdINWLh6TYFlh/pBg7wAlukJ0CmN1n8cLNt+3YJlgRNJ/TP/0/DyB8CyQGIYzMrc82ZZmfmBrMz+w3ZC3VmZEViZqTU7bmRlSimWlSkQLqflsMzrhONgmTL89V4pVQPL+CDOb2dDYdm+KalrWKabYBmndFV2/2mHZQERvIRlOr8TcwVr3wHL3Ac0jZaxpQczaFkyx7u0jLFmTBpdfZSWPS5o2VHaTw7S8w98Cpa5IIc3C2EwjqSFR29/ACyzg/SwzJTDMhRYmaE1cmNYmcqxMhRQWcBJylBZapZ2n5UR8HTFyqIrtcTKGJfZjqjMXKIy4TFnURnjvYddxp1hZbhd41QhKjMUlQWejhNJmftIc6RsyxU4SWUTKcOuoCxc7cx1PwvK7IzIqqboZjgps3MoJWW6hpShAMroMTAUlKWv6Nhee4Ay4EBZOsGxoIy7UTkjiYGgzICZB8po+ARkyfbmZIblZDiOk6l+nEzMxpzJydIbTD0nMy2cDAdhMuxPyYzh/r7/HiUjxHMcJTsShYoxGa8hc7fPL8Bk/uws5WR7iWCbt1cHTGbKMdmW5VevfnXGZHc4wS8n68rJ8Esx2SGjCr230ovhhzkZGE5/+jJOpvKc7FHKyRoG3wuUxbr66efGTIEHZc3liPdB2Tm1kvOxDpRVk7/6GjkJlEU3o8x00lgNZU7W8Gk3Hf8mgUqB6BqBskcFKAs1Cd4K5/Og7PH9oIwr0TLSZtUAymAKKPOCG0vKlMFBpAzNF5Cy8GH0I2VBnUp3UiZ1MRNJWbBy6fWtkJSFWtZnSRmgYLYToSceLHCszAxmZYp69/1IVKa2/5yiMihEZbtY/2FU5pidysOyQlamexY6jSdlj3mkjPNfJA/5ipTpkJd1oGNsX9sjM0+gY1BKx0yGjmFnOKZq4ZjJwzHzDXAMfgocE1a83VVUcxlZBo6x6eXs5EfSMfeNsHQMb8AxZoaj6RgwdCyNDR9XnuV1dMz8t+mYAAmw4iOsgy/kI5TNl/NsTDYYncvG1IwasuDvHcvGkvWW7Vcylo31MaMlt6yDjTEhBX/1h0I0Zr4BjSFrT8JLGmxi5jegMVOOxkL3zIbKhKloDPiC7okoSv+isR+DxnwLZt1saNiLjakcGzOfYGOc4WLEQpKBMilv3wTHmHFn4Jh/AhPomOLpWIozTqH9Co/RdOexeMzU4TF+BgLjEPAYDMVjqgqPcdOpwGNQ/3U3hQCKx2Po6VhmEld07JB3xuExVYnHFKeKxwox0QtTPNanJXEWj2mS96djVbkHHnOmmv352Lqe9xd9zccUvZBFe0aGj5kLPlY+vR58TBXysehPnjPRFx8VyWywq7ZT56htFKtame0mj8cMxWPBQ6KdOq7wGEzDY+t6F4+5yhD1STy2kkPnio4din1Mx8SFNJaOqZCOAUPH4qHKdIz77Totux8dU2TQV3SMq6f9YjrGNeCZScdCx0X2UefgmDZj2ZhOv0NfPdidjZlygb8vG1OqnI2Zb2BjDi6pfnDMzK8cS7f0HnBMbFPyATjmrhoC/KH5RffhmOmZW3QDjin2elsOx+AL4JjwlZCJ5+CY+Xo4xpygl3AMr+DYGdSXbyk94Bi5rewDKYZjwH5yR+LeSDjGXLPS+rhBdCxxQx5Bx9zxi2la/Bg41lvzi2/DqaTxs+HYI4Vj+APgmDKZ/JdfOPYLx65fwyUda10sN0aYKqccHjvv4J/GY/oCj9lxfjce48ZtSEFHpkHLQDxGM2V0BR5Tn8Zjq1rv4TEl4rFQAsn37O6Gx1QWj5H7NzufyvKxj/Ox3CREPkYknul8zPB8TCn+Y4fkU5nAx/Qh07tfdXyM48iSfCLyMV3x/RfjMTsVgn8sNeP5mGL4mGL5mGrhY6avBBIzlVRXvOJj50atM3hMZ/GY0KKpEx9bZT6Gagoew0BHDur3x/AxRXWoWkCmjDopGTKuGvMBmdtNKCDbH7IKfx0aN5QDMt0PkK3uiGEBWTrcG4CscBcoBmTrmgNkJny8igdk6RJH3nC2H8Fxp8wlIINjPRP/9mJAVnbW/ynbjgoAmdoNDAsAWVism9TFDydkyACyGKRWA7JyC+tKQKYKAJnKALIzr0HKsjadSjqLAVl8egXF6xsgo831soTM6L4R7SUhMxlCdkZLWiBkUE/IzDxCtu3x7EgiXiECMpA9vHhAVnf7vQ3ItMjHVBEfQyEBkX58gcmzGY/HjNRFQZuheMz6lJlv5WNnCyYo5WPlF5Uv4mNG4mN1MsxIPsbdI+/yMTOej4Fq42PHyivgY0eEPUgBHA/LzDfDMvgeWHbKDkWwLKy3N6auVvKXlf13WRlmURl+NSnzF62Pk7JI0+BSjRRHyvRcULapR9GBqmVQpr4BlIUlGZmiBZmU8efT0QJkAipzqh0bX7KTYOfwRazMKA82brAyGryhUllWhuNRWUQ3rlGZUrRm7utQ2Sp9JeyEEu/SOLnmo6hMka1TSTuW0oWkjFyDBpEyHZCy86tJDrkcKRM8iD5FytaIrjyS+jnmEwqxUYaU8fBMMgn/ClKmJVJmKCkLFKT9J1xwvqWxUVI2opBsrQdlKHCyjZV9gpOtLCezv/juK0YlvzZOdmGziNidktnn73tYp5UElJL5h3xNyWA0JXNxZCEl2wCquqBkBCcMwmSmBJNFD/tDmOz4PiVoYHcDtyMYEzNf9SlMxkkoLqgKOVmK2ePlnQVlBkUrke6gzI46C8rst3r0VzNglAzKxE4dpVH6n4oYqh6UqR2UhZFioHNLoMwMAmX2M2XXPGY4mSKcTBFOxkXCH+Bka5JnFHMyviCKAWUhj2Lbfz0kO6zUBqwzKIvX4Bm3CqAMFXe3jWibAFL0NScz/TmZ6sDJYpbYzskqAqvPgTL8MaBMS6CM5h9cF5J9DSgLJ0/3xgwoS5dXcD/5KCjjTXDaQFmqwg4nZSyZZVVAtqlauIky28YHSZnimk8CtYbR5ow964XKm6BsS4EqJmVn9PlpVIa/pOwrSNlFVRnebkjWjsq8vCixsvOW+C2sbN8TuYDqC2DZLiF1g2U4g5WtbK8ok+iywW5YSstCx5eP0bJ4enW0zN3VP0LL1v60DDgjp5m0DP6btEz8TKpwmZqGy1YWl0XfTw0uC0K0DC4znXGZ/p+kZVgOy8IPSjOSF19SKNAy7A3LyF94ar+trMwwrExx4fk3w7Ko2CJxMNz+70dgGUiwTJXBMqt8lxSVDaJliFse0wUrU8QOTpMaeZhRUJYGM4m3m/Arg8pgNCpba1GZSqo8SlGZmYPKtn5CMSoLHjSy4/4AKvPlnUdHsmRXS0afojI0BaTM9Cdla46U4QHK/JjJ9VN/KShTDChTNrpFnpOZT3AynjlWgjKmyJsGwfgtnMxLHDWcDH8QJ7NyQx0nI04rKNyrijjZ7cllOBk9CENOpjmVhblcGVWHyfQ4SkYmdEnJ+EbSbuw1mEx3M75PEmT+Y5hsvYnJ1G1MZkZjMijCZGLOwL+/qoKTNdSBdAdlOif2lXKyx/dzMt/I9RtBmRFv4r+g7BeUFZaU4Qcx2S53/BhMthZgsseHMdl6H5OhSU0N51Ky9DfylIzf34O77gRMtnbHZIlqFmMyMxKTrTImM9GEfhQmWwVMtq63Mdme6f09mCzcU0swmZe6PoXJ1E1MlpTDjORku3a/BB+CDnVDVrdQ4byLOdl5Kf9yThb++U6cTPXnZNvQliwnWxlOFr69+5xMZTmZ7qSPnF8dYcoAyGp2ftso5mQn6JnOyY7AUQJlK2UL9oZ+Acr6V5V5Q8CNk60MJ+Mq4BpAme7BEsI4MgvKVqVysAwEUGayFjR3mdMyCJSZsaCM5wYhKROeM19UFiph+vOgjCxvSsoOwDqPlK31pExzoMy3JrsCZbpPwHEBykwlKEutdr+AlLmYNU/KHhIpM0xUiO6o5UCZmQ7K7OavmzmZkXy91BdgsvUuJoNvwGT//q7lnMx/bhWgTBWCMs2DjG4gBohQEZyLSVR8Acpkrzlekh5GylZmeKqClCG7eg3roTqelPGKmErq5hiLJfn7qiZlNVt/V1KmSkkZbyzzraCMfBDsNOkfa7DD6g/KULGcjDH99HfbX072y8l+LCfTwrUXv4GSJarct1GyQNJYufzsn0DJmGHTjT0Jceu3j66YjBHDGdHvB1IybhLA++dx2oFJzDV7z0fVUrL1JiULi+amUzJwlGxd2ykZ7j1EpkOyxLc02lXrGJmijEz3mMM+0GVZlipGJkyBCyZ96M0Ew+MgmZ0NpoLfKjGylWFkVhIqYWTeBWouJFuWlYVkawUkW4OpkDsdB8kieSTq2NQZki2LCMnWQkimCiCZkSCZ4iHZ1qOsMyWLXuVxMgqYDDlKtnurqdSFfzwlO7BmPSU7TAoCSqauvBcHlZNdYbI1g8l0gMm23wUuXbvsDZQWlF1zMvqAI6NLu5z1FDa2FLAx811sbFku2ZgtIltZNsYPfBgb43qanqYVOxrTZTRMxfYIg2kYXsOwtQaGGR6Gme4wzGRh2MrDMOv8C5cw7PF5GLZdUTvAsFDG+3IYBhd6NgvDwk9nKgwzU2EYXaCTYZjKwLCVb6HO6cZafT8MCy1no/+F7gXDykPB/2vvbnJkR5UwgM7vKmpgJoHEDpByWYzYVs1rZU92+geILzC4ALv6pVottfpK3cZpmyAOEXTVMM1bwV/SsIrMURMNc401DDZx3L8cXTnMbbNrMYf5PIcdlPdEDtO/4bDc2mQoh+FaRpiUuM3DfB2HrWdDXxbHj4b99zRMYo/1D81vDiLr5WHBgvDhHsYv8h4PU7KHOSxJJK2UtHiqdVsPU8qB+1bjYWmONig82LMIdYu+Wg5bcv2Qw2DtGxyDFhrkJeu5USD25otyEAMjQmgsgxioX+wBYk4AMY9+FOLVcTkPo1s8zEkeBsYjeJjt72HLAxUi0pdo9cEHCwzhiodReeD/Ow9TqsbD8Ae53sPogR7mwwV5vo7MCkBLLIHazMO04GEpmcseFnywWYdfk/Uw4UCqPs0VEYdFRWPmRMPmfdMU0Adfsdr+HKZ4687tc4I5bK9QPS7c8pwpf5Xaa9h8jdb7LVUKNSy1JaBh4flf/TlMz19rMjgwnBu58dsbo83OYdSfw5SiUw5jF3rGYdSXw1wBh8H7+ywOm7d/bxxG8bWKHEYDOYyHsEx9k5PpJA6zyW6nfhymwq8d4LB4hjJ7WCRyGNxOemQW+3CYUkrgMAIctjesJn7x3MPYzimfyY5RHw9TcP9uzsNwXX0hiBEGMd/Fw3z8BAZMK3hYnHBAgzsHMYJepPuAmAMg5gQQW4IfdFQ6EjEQqwuHSwUi5ju1UZRAzGEQS0cUXrqH2f9ngJiU/tHZ1+1cxI4NeR1FzMNmpbDtSJGIERQx9PiuXTmqIve6JJJ575hhO6tqQMzDDjFppmUciJl1+jr3MMM9DOwK/ase5jcO2/a/DeUwx+bDcw4j+nDYh8MKOEw/jsPCBjRjOewLcpiJD5OB+4scLg8zI647SGKocLvsiYY53sLlDg3z7K55h7L8Hg8BUxh9KOwqha1PEYrqKfxZMgN6nIRZl+agTiTM8v2390iYt6mEbVGVUjUSZt1wCftqK2FJXF0oYdRDwhSSMGVRZj5a8xzrBAd0rEjC4kW2JWqbC5nffngagUtrGlibmayEhaM7lgVnElb8ZbhXwlyRhPnREKZYN04GYcGEiyBseefWIOxhEKZOIWzjhJK6sIYQ9hVDmD2FsEA9boew5TvmBAjzmtjNFR0MHq/ezmmWKIVOeNNYdqknDkaPcbDk/o52MI+qyNdNUquD+Y3BwmvVSdXrTQymzhlsv+YTBqPhDGZAEBjPTocfrQpmqhCM+iGYrzSwqC/D8RHn1dgs0ahvQDDVAsHcrxHsnagfhGCEEUxjBHOgaOWvIhiML84Q7OupCOb+HxBMt0EwoocgWDh6VOYmIhgsavQrXvQ0MNoMzOH8UZmBwXW+hnOL75TfS4PIXwhYvBE0+InGEpgpFzA6EzB+SF9nAVvmWPQFE5falN0AOUbA9EfAHitgwdoLHTI2RsD8tqYSAey9TrkHwIKkRRTKQwBzdDeAbamhCgBzWQDTIwBMeb7Bz6Hk/kUAo64ApjMApi4DmL/PvzaugP6lrvkXBZOXSYGiq39tMYzC/mWL/SttwpQesTPcv8RXROAvFHabAfxF0xQ/UEnah5+ZVcFf/ky/qJl+bTnMaVK6XL/Udf3yZ/hVProG+OUu4xeuDIsbSQ7Br4lvtA8yuwC/HMMvB/DLJXBE0oM6EL+mqQa/FMIvt+OXczfhF7HHJodfPrWvNcHNgphkB4bXPexLLfb13kkC7ItL0ol92UH2JcWDDL8YgC3TyDj7ksfO8Gu70Dx+2e745bF9aW0ZfYW3N29fy3vY1r60ZF/zSm3riWjihxjYl6asfVGUxm8TbMwzbiF+rQ0eydXiVzk+/KsIuWvxa4GjOXy15BL98hn8WvbSD9Kv/TGo0y+w4+TB+vVOXuDmjFC/WEBIcWSOBpiGfeW/4b/S9yYe3dEW4Ab+ovb8ZZzia1JVqV/e1eKXQTv+etmXcjB4t9X2pbF9WaETRzf7su3tyzB6SFIR1tYdplE1oGQ3pHRkM8h2ZWosMX6h8PjCSTOluZZgGfuOYs7wC2De/vChxRN6w4yvLrApzx3FCyGIX/jgc/1E/Pr5xvolnliHDjfRgX7Zu/ULYGMUWd6qX1vkkz6ew3Dlo1/C4WDszzRvjjMYv5ZFFQabdZHyHPxaOvCg1KyzT8EvhfBL1eGX7YxfX6f4xQ+Kxzlxc5JE7TVBbjd9ElLGM0/AhGoJfr232CL8ou74NfXAL3cnfv18i/qlVJl+sSMbkgyPbv+T5PVryfMA/nrvJeC/iRVP4YMAtg6v6TJgz8xPC4iVathiSBCMkDI4HOAbfJBgIw+bdHLWk+RhXnEOe1fslXkYiwEXqAw/e22zIjZilHiuEd6nNOGjf+Vhtq+HTaKHqcse5pCHycVg/JSwHh5msYdpycMUeZMQmEOt+7sT2MSqBtcJKmhGGi7xFRcasPVilIDpCgGLDzIy4IxT9BANFTALBGy9xwUCVhi4/Ct8nqfJnQkYuMeunsAaXraahPqYGb/mv4U7fCpg9PNtWt7fn+8MgSmJwMI37WideWpgNNzAdGRgc3BkUabarG+fkGFpb2AkGxjlDYxPso8zsCUyLTMwHwarDzMwBw1sabxZaGD+mQRmBAFTNQIWje24BRY2sBCroyoIoqIfexoAkaoHMKAXXvAvLfiXLV/xVvqXqvQvn/77M/7C3b278VfalF3IW0n8xYZ3u34l3fKr9Qu8XKX6pa/kwyr1azlCUNIvx/UrKvTN8JfGL9i8VLrTv2w0UNG//PP4a+PDv8Rf7py/zLP46+eb+9cVYPn4V9fqr1sBbEebPwJgLgGmEMDMA/1rD20V9C8jNcgYw19hKcWx1JvHwDL7Go8AJO11eHxJX/7ySy4fBZ3LTnWQQEWD4F3T045JA/1r5QnkXy78WfY9zTxH/Mf8C41Bl/nXkd7pCmBaBDCeTXh/UcGvIgvYu58RFLCaeaGSwIJ3P2FjQGDCmBCB6TTLMobA5j34eq4Nw+ylPOrjlmOvaEBj2UtP0wS7+QivEQH2CnMLooQt9qeFqsSO7EUCe9mEvfZnMiUtpy6yl56pwI8qA4t/yD1PgNlrTm87v7RVDdmLHT0zr5q6s5dLj41T68QUzyTpNqo8exljerPXfI2ktV3L8D1XL6WK1Ity6kWN1Wu+aqlZ2kp4Sgn0tc4dy0nZvdlLX2ev4JUrdS9qd2hZMtcd7rX2/5uzRugGE3avcC6LDwr5PXxZsNF5N+flx15/7fQOA/lysnzVtI2ukq85eDXieVr6zV2n8uVHwteUha/5tovwRQC+3A3wRWk4d6zG1icHhKol7oX22C9HVEL3on7upQT3Cjc3nMMXOki5Qr50Y/kyfBn3C/niPzFh+nqnUVFO+R36jbEvg2uiHLYvDZdPngXnqDFa9Mnuhl+QX+d5W8Iv4bmF+gW/hsvv2E+/FGaUv6lfJt7zaSrxy4MDpUHu/zb7WkpFM/alCwphrTu3ryO8qE5a97OvvbELsC8LiOwB9qWdYF983619qn25nH1dXKE2xC8DkjYf+7rBvsR2/o+Tr7AB1kPka1sQlcrXhcf834W7N61dxVBQEt9U1v7QoHTBGO6aOHctbsePhwyHYDLclRzO/jDvgqN4knephCJOvYsy3hW4hORdboh3kZqkRL3WaAyaHawgeJeluNVPc+9azqn1FeClk4/o/iNQBrzcUPCy18CLng5eP996+acy8fIReAWr7Vrxsu3Fa/6w4V40appQu3ouXtF6NVv7peEzufzVR7zcNDlRvCYsXoqJl0oyvMvrFX4pTHyWmKRctrVyJT/eGXOpnblC1LiJuUzyf13noynHXMFlFzJX2ctSzlyLw2SYy1NKRpJy7WcQoYV/G+X6CpXLnyCXBF0DkWsJspw/NS52rfcaFx3BrWhc8P7acca1ffQgcU17f8ODuJIbzInrKFAbR1xLJJEhrnlVdE5cc9t/GmZc0zTljUsx4/KcuEwu4kEZt4bCZaf0Ad8zaes6vkS4dLFwpd91A4SrMeBVChdx4dJAuBwULss6OvUVrmh0gXAJj5GND1GABHRKXEnvxKBzcnviIrZWJUZCYRxRLFxaEC47WLjSDEP8kGLj0qJxuUcYlxaMK91mJxkXH1+QaBBaVfZSLoNOGDa51qkaKhc4ghj8BxFz2RElXpXMBWtd+Rreisql+yvXOyQrVa55yQ6ewycwFyoGSKscwJz7AOXSdcp1tMT4KNdHuc6Uyz5TucIdhE9hrp9vLTjX/I3kzmW6XWrgXEvq+NS5jvk361yuv3PZOCccZFJ5WZeFQ4DOZUc7l4ECoqYy54oagQT7SQTnYuLSx7nsZedSRc519IFPQ+yWL8exm57tB89Dl9J8H60kXUlHnz7ShUu7VDKqrHQpSbre5+FYHefXbnKu6GtlovkhTSIYBZ3LCs51dFNp7lzu9XrR7lzU2rnscOf6+X69Jt/auSxcyAnOFZ1s09a56PXKONfkYA1e4lyKO9e8GE8/FGEWC0OXbg9dya93Cl2Tcv5dcbQs8dZk9h3S5V6K/W8LqSvirjPq0t2oi5bLDbFCQjlEXdvhWfdJl0HShbQrkC7XWbp+vidkcgJ1hdd6Ql3EqatlkZRN9jww6iLCnEi3UZdJ1xQbdb1/7PUpzkjXIc7jpGvZ5Ae/TBF17RdOCXWZhLr4hGT7UJerpS6l5qTiU6hLT2ln4Hh1LFiXqrSu4Ji+sdY1x6ngIX6/FJJ1qax1GWhd4QiFA5VaWtdXal0mrEDl1hUkgC2ITeHZ1WgBOQcQI6hrp0peRcdt6AS77O+wq8uio0i7SNQum9EulN3/c9zFB5g/V2v1LursXfa6d2nkXQ6ViY32rqBOcglmyr0Llbgi8ELLUD/Iu9LqzyMJh7iL16kh7nLOX8xh/5674jitzLveqUjvHsJd+85zuMp+DHcl57F/uOtp3GVv5a51aQW5K1gPDuYuU6ldUWWV+WjXRe0qquqStMsN0653GmbC3DV14S7Xm7ter2VMkLum33PXFw8/a1/qy96lSrxrkxTkXWinkack8/M87tpxKO3dERaKD9QuPb3eT5mF2hV50cbKYEBxrVcpd9Ut02q8ayYDkbuibG2Ou1AJrmV9+CPuopbctf4367TLhZ0BZe3i49Un2rWCV+nvVZrGer0UO9jpmJQucteSd6jnrqZ1Xfuv92La5WXtmgLt2ou7uHa57tpFr+MtqceuLZ1dgF2t2xe+++vZEuxarzLQgKNVgD3KYtDCvy12Ld1kNUxs/nwz7UrBa9Mub1FPqzakcTzNNda1X6lkXaidUXvr8q8z63KC1WLrChOnvs2FbqOWqGuaAHXtl+pT6rJZ6qIe1GXcmXQtOfrgtUsS8YF0WUo2Ld0lXU6ULuXCyugC6dKuk3T5S9KlUumyR0BqxIQb7DOyv8Sui3TpC9IFtvxg6YLNFZh1GUjEplHEqqLxBcWG163L5K0r7Q4YnyT8h6zLCilYygywD3YZ3n642rqOLDy2LjfYujy2LtXGuuBuz5HWZc6ti2qtix+HyOfd3ti1bJPD2KWcLqh2RdVdSTHekaoehV0KvxJcu/wZdgne2l+7ojt1gbto4673Ulw/g7vmG8mmo/d+EfcA7/L2P8Fd/wM=",frameCount:192,width:128,height:36,frameDelay:22}});import{inflateRawSync as Nl}from"zlib";function jl(e,t=1){if(!e)return"\x1B[38;5;208m";let n=Math.min(255,Math.round(230*t)),r=Math.min(255,Math.round(115*t)),o=Math.min(255,Math.round(70*t));return`\x1B[38;2;${n};${r};${o}m`}function Fl(e,t=1){if(!e)return"\x1B[38;5;215m";let n=Math.min(255,Math.round(255*t)),r=Math.min(255,Math.round(180*t)),o=Math.min(255,Math.round(122*t));return`\x1B[38;2;${n};${r};${o}m`}function Gl(){if(At)return At;try{At=Nl(Buffer.from(Ae.compressed,"base64")).toString("utf8").split(Wl).filter(Boolean)}catch{At=[]}return At}function Jl(e,t,n=1){let r=jl(t,n),o=Fl(t,n),s=r,i=0,a=!1;for(;i<e.length;){let c=e[i];if(c==="<"){let l=e[i+1]==="/";for(;i<e.length&&e[i]!==">";)i++;i++,a=!l,s+=a?o:r;continue}s+=c,i++}return s+qs}function Hl(){return process.env.COLORTERM==="truecolor"||process.env.COLORTERM==="24bit"}function Bl(e,t){let n=Nr[e],r=Ae.width,o=n.slice(0,Math.min(Je,t)).padEnd(Je," "),s=Math.max(0,Math.floor((r-Je)/2));return" ".repeat(s)+`\x1B[1;97m${o}\x1B[0m`+" ".repeat(Math.max(0,r-s-Je))}function Kl(e){let t=Ae.width,n=Math.max(0,Math.floor((t-e.length)/2));return" ".repeat(n)+`\x1B[2;37m${e}\x1B[0m`+" ".repeat(Math.max(0,t-n-e.length))}function Yl(){return!process.stdout.isTTY||process.env.CI||process.env.CLAUDE_MEM_NO_BANNER||process.env.NO_COLOR?!1:(process.stdout.columns??0)>=Ae.width}async function _s(){if(!Yl())return;let e=Hl(),t=Gl();if(t.length===0)return;let n=!1,r=()=>{n=!0};process.stdout.on("resize",r),process.stdout.write(Ul),process.stdout.write(Al),process.stdout.write(`
101
+ `.repeat(Zs)),process.stdout.write(`\x1B[${Zs}A`),process.stdout.write("\x1B[s");let o=" ".repeat(Ae.width),s=(i,a,c,l=1)=>{process.stdout.write("\x1B[u"),process.stdout.write(Jl(i,e,l)),process.stdout.write(`
102
+ `);for(let p=0;p<Xs;p++)process.stdout.write(Bl(p,a)),process.stdout.write(`
103
+ `);for(let p=0;p<Qs;p++)process.stdout.write(o),process.stdout.write(`
104
+ `);process.stdout.write(Kl(c))};try{for(let l=0;l<t.length;l++){if(n)return;s(t[l],0,""),await Lt(Ae.frameDelay)}let i=t[t.length-1],a="persistent memory across sessions",c=14;for(let l=1;l<=c;l++){if(n)return;let p=Math.ceil(Je*(l/c));s(i,p,""),await Lt(45)}for(let l=1;l<=6;l++){if(n)return;let p=Math.ceil(a.length*(l/6));s(i,Je,a.slice(0,p)),await Lt(33)}for(let l of[.85,.95,1]){if(n)return;s(i,Je,a,l),await Lt(100)}await Lt(150)}finally{process.stdout.off("resize",r),process.stdout.write(qs),process.stdout.write(Ll),process.stdout.write(`
105
+ `)}}var Al,Ll,Ul,qs,Wl,At,Nr,Xs,Je,Qs,Zs,Lt,$s=w(()=>{"use strict";zs();Al="\x1B[?25l",Ll="\x1B[?25h",Ul="\x1B[2J\x1B[3J\x1B[H",qs="\x1B[0m",Wl="";At=null;Nr=[" _ _ "," ___| | __ _ _ _ __| | ___ _ __ ___ ___ _ __ ___ "," / __| |/ _` | | | |/ _` |/ _ \\_____| '_ ` _ \\ / _ \\ '_ ` _ \\ ","| (__| | (_| | |_| | (_| | __/_____| | | | | | __/ | | | | |"," \\___|_|\\__,_|\\__,_|\\__,_|\\___| |_| |_| |_|\\___|_| |_| |_|"],Xs=Nr.length,Je=Nr[0].length,Qs=1,Zs=Ae.height+Xs+Qs+1;Lt=e=>new Promise(t=>setTimeout(t,e))});async function bn(e,t=1e4){let n=`http://127.0.0.1:${e}`,r=!1;try{await fetch(`${n}/api/admin/shutdown`,{method:"POST",signal:AbortSignal.timeout(5e3)}),r=!0}catch{return{workerWasRunning:!1}}let o=500,s=Math.ceil(t/o);for(let i=0;i<s;i++){await new Promise(a=>setTimeout(a,o));try{await fetch(`${n}/api/health`,{signal:AbortSignal.timeout(1e3)})}catch(a){if(a instanceof Error&&a.name==="AbortError")continue;return{workerWasRunning:r}}}return{workerWasRunning:r}}var Ar=w(()=>{"use strict"});import{execSync as Vl}from"child_process";import{existsSync as Se,readdirSync as zl}from"fs";import{homedir as ei}from"os";import{join as Ee}from"path";function Ut(e){try{return Vl(`${ue?"where":"which"} ${e}`,{stdio:"pipe"}),!0}catch(t){return process.env.DEBUG&&console.error(`[ide-detection] ${e} not in PATH:`,t instanceof Error?t.message:String(t)),!1}}function Zl(e){let t=Ee(ei(),".vscode","extensions");if(!Se(t))return!1;try{return zl(t).some(r=>r.toLowerCase().includes(e.toLowerCase()))}catch(n){return console.warn("[ide-detection] Failed to read VS Code extensions directory:",n instanceof Error?n.message:String(n)),!1}}function et(){let e=ei();return[{id:"claude-code",label:"Claude Code",detected:Ut("claude"),supported:!0,hint:"recommended"},{id:"gemini-cli",label:"Gemini CLI",detected:Se(Ee(e,".gemini")),supported:!0},{id:"opencode",label:"OpenCode",detected:Se(Ee(e,".config","opencode"))||Ut("opencode"),supported:!0,hint:"plugin-based integration"},{id:"openclaw",label:"OpenClaw",detected:Se(Ee(e,".openclaw")),supported:!0,hint:"plugin-based integration"},{id:"windsurf",label:"Windsurf",detected:Se(Ee(e,".codeium","windsurf")),supported:!0},{id:"codex-cli",label:"Codex CLI",detected:Se(Ee(e,".codex")),supported:!0,hint:"transcript-based integration"},{id:"cursor",label:"Cursor",detected:Se(Ee(e,".cursor")),supported:!0,hint:"hooks + MCP integration"},{id:"copilot-cli",label:"Copilot CLI",detected:Ut("copilot"),supported:!0,hint:"MCP-based integration"},{id:"antigravity",label:"Antigravity",detected:Se(Ee(e,".gemini","antigravity")),supported:!0,hint:"MCP-based integration"},{id:"goose",label:"Goose",detected:Se(Ee(e,".config","goose"))||Ut("goose"),supported:!0,hint:"MCP-based integration"},{id:"roo-code",label:"Roo Code",detected:Zl("roo-code"),supported:!0,hint:"MCP-based integration"},{id:"warp",label:"Warp",detected:Se(Ee(e,".warp"))||Ut("warp"),supported:!0,hint:"MCP-based integration"}]}var ti=w(()=>{"use strict";je()});var ni=w(()=>{"use strict";Pe();Ge()});import ri from"path";import{readFileSync as Eg,existsSync as yg,writeFileSync as wg,renameSync as vg,mkdirSync as Cg}from"fs";import{spawn as kg,execSync as Mg}from"child_process";function Xl(e,t={},n){return new Promise((r,o)=>{let s=setTimeout(()=>o(new Error(`Request timed out after ${n}ms`)),n);fetch(e,t).then(i=>{clearTimeout(s),r(i)},i=>{clearTimeout(s),o(i)})})}function Wt(){if(kn!==null)return kn;let e=ri.join(U.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),t=U.loadFromFile(e);return kn=parseInt(t.CLAUDE_MEM_WORKER_PORT,10),kn}function Ql(){if(Mn!==null)return Mn;let e=ri.join(U.get("CLAUDE_MEM_DATA_DIR"),"settings.json");return Mn=U.loadFromFile(e).CLAUDE_MEM_WORKER_HOST,Mn}function _l(e){return`http://${Ql()}:${Wt()}${e}`}function xn(e,t={}){let n=t.method??"GET",r=t.timeoutMs??ql,o=_l(e),s={method:n};return t.headers&&(s.headers=t.headers),t.body&&(s.body=t.body),r>0?Xl(o,s,r):fetch(o,s)}var ql,kn,Mn,Tn=w(()=>{"use strict";F();Rt();Pe();Ge();ni();Cr();ql=(()=>{let e=process.env.CLAUDE_MEM_HEALTH_TIMEOUT_MS;if(e){let t=parseInt(e,10);if(Number.isFinite(t)&&t>=500&&t<=3e5)return t;u.warn("SYSTEM","Invalid CLAUDE_MEM_HEALTH_TIMEOUT_MS, using default",{value:e,min:500,max:3e5})}return us($.HEALTH_CHECK)})();kn=null,Mn=null});import{existsSync as $l,readFileSync as eu,writeFileSync as oi,mkdirSync as si,renameSync as tu}from"fs";import{join as Lr,basename as Lg}from"path";function ii(e){try{return $l(e)?JSON.parse(eu(e,"utf-8")):{}}catch(t){return u.error("CONFIG","Failed to read Cursor registry, using empty registry",{file:e,error:t instanceof Error?t.message:String(t)}),{}}}function ai(e,t){let n=Lr(e,"..");si(n,{recursive:!0}),oi(e,JSON.stringify(t,null,2))}function Ur(e,t){let n=Lr(e,".cursor","rules"),r=Lr(n,"claude-mem-context.mdc"),o=`${r}.tmp`;si(n,{recursive:!0});let s=`---
63
106
  alwaysApply: true
64
107
  description: "Claude-mem context from past sessions (auto-updated)"
65
108
  ---
@@ -68,17 +111,17 @@ description: "Claude-mem context from past sessions (auto-updated)"
68
111
 
69
112
  The following context is from claude-mem, a persistent memory system that tracks your coding sessions.
70
113
 
71
- ${e}
114
+ ${t}
72
115
 
73
116
  ---
74
117
  *Updated after last session. Use claude-mem's MCP search tools for more detailed queries.*
75
- `;go(s,i),Fu(s,o)}var ho=m(()=>{"use strict";L()});var Ao={};q(Ao,{checkCursorHooksStatus:()=>ko,configureCursorMcp:()=>xu,detectClaudeCode:()=>Iu,detectPlatform:()=>yo,findBunPath:()=>_e,findMcpServerPath:()=>ze,findWorkerServicePath:()=>ve,getScriptExtension:()=>vu,getTargetDir:()=>Lt,handleCursorCommand:()=>Ru,installCursorHooks:()=>_o,readCursorRegistry:()=>Ot,registerCursorProject:()=>wo,uninstallCursorHooks:()=>xo,unregisterCursorProject:()=>vo,updateCursorContextForProject:()=>_u,writeCursorRegistry:()=>kr});import f from"path";import{homedir as Tt}from"os";import{existsSync as G,readFileSync as Fo,writeFileSync as _r,unlinkSync as vr,mkdirSync as xr}from"fs";import{exec as Su}from"child_process";import{promisify as yu}from"util";function yo(){return process.platform==="win32"?"windows":"unix"}function vu(){return yo()==="windows"?".ps1":".sh"}function Ot(){return Eo(So)}function kr(t){Co(So,t)}function wo(t,e){let r=Ot();r[t]={workspacePath:e,installedAt:new Date().toISOString()},kr(r),a.info("CURSOR","Registered project for auto-context updates",{projectName:t,workspacePath:e})}function vo(t){let e=Ot();e[t]&&(delete e[t],kr(e),a.info("CURSOR","Unregistered project",{projectName:t}))}async function _u(t,e){let o=Ot()[t];if(o)try{let s=await $t(`/api/context/inject?project=${encodeURIComponent(t)}`);if(!s.ok)return;let i=await s.text();if(!i||!i.trim())return;wr(o.workspacePath,i),a.debug("CURSOR","Updated context file",{projectName:t,workspacePath:o.workspacePath})}catch(s){s instanceof Error?a.error("WORKER","Failed to update context file",{projectName:t},s):a.error("WORKER","Failed to update context file",{projectName:t},new Error(String(s)))}}function ze(){let t=[f.join(kt,"plugin","scripts","mcp-server.cjs"),f.join(process.cwd(),"plugin","scripts","mcp-server.cjs")];for(let e of t)if(G(e))return e;return null}function ve(){let t=[f.join(kt,"plugin","scripts","worker-service.cjs"),f.join(process.cwd(),"plugin","scripts","worker-service.cjs")];for(let e of t)if(G(e))return e;return null}function _e(){let t=[f.join(Tt(),".bun","bin","bun"),"/usr/local/bin/bun","/usr/bin/bun",...process.platform==="win32"?[f.join(Tt(),".bun","bin","bun.exe"),f.join(process.env.LOCALAPPDATA||"","bun","bun.exe")]:[]];for(let e of t)if(e&&G(e))return e;return"bun"}function Lt(t){switch(t){case"project":return f.join(process.cwd(),".cursor");case"user":return f.join(Tt(),".cursor");case"enterprise":return process.platform==="darwin"?"/Library/Application Support/Cursor":process.platform==="linux"?"/etc/cursor":process.platform==="win32"?f.join(process.env.ProgramData||"C:\\ProgramData","Cursor"):null;default:return null}}function xu(t){let e=ze();if(!e)return console.error("Could not find MCP server script"),console.error(" Expected at: ~/.claude/plugins/marketplaces/thedotmack/plugin/scripts/mcp-server.cjs"),1;let r=Lt(t);if(!r)return console.error(`Invalid target: ${t}. Use: project or user`),1;let o=f.join(r,"mcp.json");try{xr(r,{recursive:!0});let s={mcpServers:{}};if(G(o))try{s=JSON.parse(Fo(o,"utf-8")),s.mcpServers||(s.mcpServers={})}catch(i){i instanceof Error?a.error("WORKER","Corrupt mcp.json, creating new config",{path:o},i):a.error("WORKER","Corrupt mcp.json, creating new config",{path:o},new Error(String(i))),s={mcpServers:{}}}return s.mcpServers["claude-mem"]={command:"node",args:[e]},_r(o,JSON.stringify(s,null,2)),console.log(` Configured MCP server in ${t==="user"?"~/.cursor":".cursor"}/mcp.json`),console.log(` Server path: ${e}`),0}catch(s){return console.error(`Failed to configure MCP: ${s.message}`),1}}async function _o(t){console.log(`
76
- Installing Claude-Mem Cursor hooks (${t} level)...
77
- `);let e=Lt(t);if(!e)return console.error(`Invalid target: ${t}. Use: project, user, or enterprise`),1;let r=ve();if(!r)return console.error("Could not find worker-service.cjs"),console.error(" Expected at: ~/.claude/plugins/marketplaces/thedotmack/plugin/scripts/worker-service.cjs"),1;let o=process.cwd(),s=f.join(e,"hooks.json"),i=_e(),n=i.replace(/\\/g,"\\\\"),u=r.replace(/\\/g,"\\\\"),c=d=>`"${n}" "${u}" hook cursor ${d}`;console.log(` Using Bun runtime: ${i}`);let D={version:1,hooks:{beforeSubmitPrompt:[{command:c("session-init")},{command:c("context")}],afterMCPExecution:[{command:c("observation")}],afterShellExecution:[{command:c("observation")}],afterFileEdit:[{command:c("file-edit")}],stop:[{command:c("summarize")}]}};try{return xr(e,{recursive:!0}),await ku(s,D,r,t,e,o),0}catch(d){let p=d instanceof Error?d.message:String(d);return console.error(`
78
- Installation failed: ${p}`),t==="enterprise"&&console.error(" Tip: Enterprise installation may require sudo/admin privileges"),1}}async function ku(t,e,r,o,s,i){_r(t,JSON.stringify(e,null,2)),console.log(" Created hooks.json (unified CLI mode)"),console.log(` Worker service: ${r}`),o==="project"&&await Au(s,i),console.log(`
118
+ `;oi(o,s),tu(o,r)}var ci=w(()=>{"use strict";F()});var Si={};fe(Si,{checkCursorHooksStatus:()=>hi,configureCursorMcp:()=>au,detectClaudeCode:()=>pu,detectPlatform:()=>di,findBunPath:()=>nt,findMcpServerPath:()=>jt,findWorkerServicePath:()=>tt,getScriptExtension:()=>su,getTargetDir:()=>On,handleCursorCommand:()=>mu,installCursorHooks:()=>fi,readCursorRegistry:()=>In,registerCursorProject:()=>pi,uninstallCursorHooks:()=>gi,unregisterCursorProject:()=>mi,updateCursorContextForProject:()=>iu,writeCursorRegistry:()=>Gr});import k from"path";import{homedir as Rn}from"os";import{existsSync as ie,readFileSync as li,writeFileSync as jr,unlinkSync as Wr,mkdirSync as Fr}from"fs";import{exec as nu}from"child_process";import{promisify as ru}from"util";function di(){return process.platform==="win32"?"windows":"unix"}function su(){return di()==="windows"?".ps1":".sh"}function In(){return ii(ui)}function Gr(e){ai(ui,e)}function pi(e,t){let n=In();n[e]={workspacePath:t,installedAt:new Date().toISOString()},Gr(n),u.info("CURSOR","Registered project for auto-context updates",{projectName:e,workspacePath:t})}function mi(e){let t=In();t[e]&&(delete t[e],Gr(t),u.info("CURSOR","Unregistered project",{projectName:e}))}async function iu(e,t){let r=In()[e];if(r)try{let o=await xn(`/api/context/inject?project=${encodeURIComponent(e)}`);if(!o.ok)return;let s=await o.text();if(!s||!s.trim())return;Ur(r.workspacePath,s),u.debug("CURSOR","Updated context file",{projectName:e,workspacePath:r.workspacePath})}catch(o){o instanceof Error?u.error("WORKER","Failed to update context file",{projectName:e},o):u.error("WORKER","Failed to update context file",{projectName:e},new Error(String(o)))}}function jt(){let e=[k.join(Tt,"plugin","scripts","mcp-server.cjs"),k.join(process.cwd(),"plugin","scripts","mcp-server.cjs")];for(let t of e)if(ie(t))return t;return null}function tt(){let e=[k.join(Tt,"plugin","scripts","worker-service.cjs"),k.join(process.cwd(),"plugin","scripts","worker-service.cjs")];for(let t of e)if(ie(t))return t;return null}function nt(){let e=[k.join(Rn(),".bun","bin","bun"),"/usr/local/bin/bun","/usr/bin/bun",...process.platform==="win32"?[k.join(Rn(),".bun","bin","bun.exe"),k.join(process.env.LOCALAPPDATA||"","bun","bun.exe")]:[]];for(let t of e)if(t&&ie(t))return t;return"bun"}function On(e){switch(e){case"project":return k.join(process.cwd(),".cursor");case"user":return k.join(Rn(),".cursor");case"enterprise":return process.platform==="darwin"?"/Library/Application Support/Cursor":process.platform==="linux"?"/etc/cursor":process.platform==="win32"?k.join(process.env.ProgramData||"C:\\ProgramData","Cursor"):null;default:return null}}function au(e){let t=jt();if(!t)return console.error("Could not find MCP server script"),console.error(" Expected at: ~/.claude/plugins/marketplaces/thedotmack/plugin/scripts/mcp-server.cjs"),1;let n=On(e);if(!n)return console.error(`Invalid target: ${e}. Use: project or user`),1;let r=k.join(n,"mcp.json");try{Fr(n,{recursive:!0});let o={mcpServers:{}};if(ie(r))try{o=JSON.parse(li(r,"utf-8")),o.mcpServers||(o.mcpServers={})}catch(s){s instanceof Error?u.error("WORKER","Corrupt mcp.json, creating new config",{path:r},s):u.error("WORKER","Corrupt mcp.json, creating new config",{path:r},new Error(String(s))),o={mcpServers:{}}}return o.mcpServers["claude-mem"]={command:"node",args:[t]},jr(r,JSON.stringify(o,null,2)),console.log(` Configured MCP server in ${e==="user"?"~/.cursor":".cursor"}/mcp.json`),console.log(` Server path: ${t}`),0}catch(o){return console.error(`Failed to configure MCP: ${o.message}`),1}}async function fi(e){console.log(`
119
+ Installing Claude-Mem Cursor hooks (${e} level)...
120
+ `);let t=On(e);if(!t)return console.error(`Invalid target: ${e}. Use: project, user, or enterprise`),1;let n=tt();if(!n)return console.error("Could not find worker-service.cjs"),console.error(" Expected at: ~/.claude/plugins/marketplaces/thedotmack/plugin/scripts/worker-service.cjs"),1;let r=process.cwd(),o=k.join(t,"hooks.json"),s=nt(),i=s.replace(/\\/g,"\\\\"),a=n.replace(/\\/g,"\\\\"),c=p=>`"${i}" "${a}" hook cursor ${p}`;console.log(` Using Bun runtime: ${s}`);let l={version:1,hooks:{beforeSubmitPrompt:[{command:c("session-init")},{command:c("context")}],afterMCPExecution:[{command:c("observation")}],afterShellExecution:[{command:c("observation")}],afterFileEdit:[{command:c("file-edit")}],stop:[{command:c("summarize")}]}};try{return Fr(t,{recursive:!0}),await cu(o,l,n,e,t,r),0}catch(p){let f=p instanceof Error?p.message:String(p);return console.error(`
121
+ Installation failed: ${f}`),e==="enterprise"&&console.error(" Tip: Enterprise installation may require sudo/admin privileges"),1}}async function cu(e,t,n,r,o,s){jr(e,JSON.stringify(t,null,2)),console.log(" Created hooks.json (unified CLI mode)"),console.log(` Worker service: ${n}`),r==="project"&&await lu(o,s),console.log(`
79
122
  Installation complete!
80
123
 
81
- Hooks installed to: ${s}/hooks.json
124
+ Hooks installed to: ${o}/hooks.json
82
125
  Using unified CLI: bun worker-service.cjs hook cursor <command>
83
126
 
84
127
  Next steps:
@@ -89,7 +132,7 @@ Next steps:
89
132
  Context Injection:
90
133
  Context from past sessions is stored in .cursor/rules/claude-mem-context.mdc
91
134
  and automatically included in every chat. It updates after each session ends.
92
- `)}async function Au(t,e){let r=f.join(t,"rules");xr(r,{recursive:!0});let o=f.basename(e),s=!1;console.log(" Generating initial context...");try{s=await bu(o,e)}catch(i){i instanceof Error?a.debug("WORKER","Worker not running during install",{},i):a.debug("WORKER","Worker not running during install",{},new Error(String(i)))}if(!s){let i=f.join(r,"claude-mem-context.mdc");_r(i,`---
135
+ `)}async function lu(e,t){let n=k.join(e,"rules");Fr(n,{recursive:!0});let r=k.basename(t),o=!1;console.log(" Generating initial context...");try{o=await uu(r,t)}catch(s){s instanceof Error?u.debug("WORKER","Worker not running during install",{},s):u.debug("WORKER","Worker not running during install",{},new Error(String(s)))}if(!o){let s=k.join(n,"claude-mem-context.mdc");jr(s,`---
93
136
  alwaysApply: true
94
137
  description: "Claude-mem context from past sessions (auto-updated)"
95
138
  ---
@@ -99,15 +142,15 @@ description: "Claude-mem context from past sessions (auto-updated)"
99
142
  *No context yet. Complete your first session and context will appear here.*
100
143
 
101
144
  Use claude-mem's MCP search tools for manual memory queries.
102
- `),console.log(" Created placeholder context file (will populate after first session)")}wo(o,e),console.log(" Registered for auto-context updates")}async function bu(t,e){if(!(await $t("/api/readiness")).ok)return!1;let o=await $t(`/api/context/inject?project=${encodeURIComponent(t)}`);if(!o.ok)return!1;let s=await o.text();return s&&s.trim()?(wr(e,s),console.log(" Generated initial context from existing memory"),!0):!1}function xo(t){console.log(`
103
- Uninstalling Claude-Mem Cursor hooks (${t} level)...
104
- `);let e=Lt(t);if(!e)return console.error(`Invalid target: ${t}`),1;let r=f.join(e,"hooks"),o=f.join(e,"hooks.json"),s=["common.sh","session-init.sh","context-inject.sh","save-observation.sh","save-file-edit.sh","session-summary.sh"],i=["common.ps1","session-init.ps1","context-inject.ps1","save-observation.ps1","save-file-edit.ps1","session-summary.ps1"],n=[...s,...i];try{return Mu(r,n,o,t,e),0}catch(u){let c=u instanceof Error?u.message:String(u);return console.error(`
105
- Uninstallation failed: ${c}`),1}}function Mu(t,e,r,o,s){for(let i of e){let n=f.join(t,i);G(n)&&(vr(n),console.log(` Removed legacy script: ${i}`))}if(G(r)&&(vr(r),console.log(" Removed hooks.json")),o==="project"){let i=f.join(s,"rules","claude-mem-context.mdc");G(i)&&(vr(i),console.log(" Removed context file"));let n=f.basename(process.cwd());vo(n),console.log(" Unregistered from auto-context updates")}console.log(`
145
+ `),console.log(" Created placeholder context file (will populate after first session)")}pi(r,t),console.log(" Registered for auto-context updates")}async function uu(e,t){if(!(await xn("/api/readiness")).ok)return!1;let r=await xn(`/api/context/inject?project=${encodeURIComponent(e)}`);if(!r.ok)return!1;let o=await r.text();return o&&o.trim()?(Ur(t,o),console.log(" Generated initial context from existing memory"),!0):!1}function gi(e){console.log(`
146
+ Uninstalling Claude-Mem Cursor hooks (${e} level)...
147
+ `);let t=On(e);if(!t)return console.error(`Invalid target: ${e}`),1;let n=k.join(t,"hooks"),r=k.join(t,"hooks.json"),o=["common.sh","session-init.sh","context-inject.sh","save-observation.sh","save-file-edit.sh","session-summary.sh"],s=["common.ps1","session-init.ps1","context-inject.ps1","save-observation.ps1","save-file-edit.ps1","session-summary.ps1"],i=[...o,...s];try{return du(n,i,r,e,t),0}catch(a){let c=a instanceof Error?a.message:String(a);return console.error(`
148
+ Uninstallation failed: ${c}`),1}}function du(e,t,n,r,o){for(let s of t){let i=k.join(e,s);ie(i)&&(Wr(i),console.log(` Removed legacy script: ${s}`))}if(ie(n)&&(Wr(n),console.log(" Removed hooks.json")),r==="project"){let s=k.join(o,"rules","claude-mem-context.mdc");ie(s)&&(Wr(s),console.log(" Removed context file"));let i=k.basename(process.cwd());mi(i),console.log(" Unregistered from auto-context updates")}console.log(`
106
149
  Uninstallation complete!
107
- `),console.log("Restart Cursor to apply changes.")}function ko(){console.log(`
150
+ `),console.log("Restart Cursor to apply changes.")}function hi(){console.log(`
108
151
  Claude-Mem Cursor Hooks Status
109
- `);let t=[{name:"Project",dir:f.join(process.cwd(),".cursor")},{name:"User",dir:f.join(Tt(),".cursor")}];process.platform==="darwin"?t.push({name:"Enterprise",dir:"/Library/Application Support/Cursor"}):process.platform==="linux"&&t.push({name:"Enterprise",dir:"/etc/cursor"});let e=!1;for(let r of t){let o=f.join(r.dir,"hooks.json"),s=f.join(r.dir,"hooks");if(G(o)){e=!0,console.log(`${r.name}: Installed`),console.log(` Config: ${o}`);let i=null;try{i=JSON.parse(Fo(o,"utf-8"))}catch(n){n instanceof Error?a.error("WORKER","Unable to parse hooks.json",{path:o},n):a.error("WORKER","Unable to parse hooks.json",{path:o},new Error(String(n))),console.log(" Mode: Unable to parse hooks.json")}if(i){let n=i?.hooks?.beforeSubmitPrompt?.[0]?.command||"";if(n.includes("worker-service.cjs")&&n.includes("hook cursor"))console.log(" Mode: Unified CLI (bun worker-service.cjs)");else{let u=["session-init.sh","context-inject.sh","save-observation.sh"],c=["session-init.ps1","context-inject.ps1","save-observation.ps1"],D=u.some(p=>G(f.join(s,p))),d=c.some(p=>G(f.join(s,p)));D||d?(console.log(" Mode: Legacy shell scripts (consider reinstalling for unified CLI)"),D&&d?console.log(" Platform: Both (bash + PowerShell)"):D?console.log(" Platform: Unix (bash)"):d&&console.log(" Platform: Windows (PowerShell)")):console.log(" Mode: Unknown configuration")}}if(r.name==="Project"){let n=f.join(r.dir,"rules","claude-mem-context.mdc");G(n)?console.log(" Context: Active"):console.log(" Context: Not yet generated (will be created on first prompt)")}}else console.log(`${r.name}: Not installed`);console.log("")}return e||console.log(`No hooks installed. Run: claude-mem cursor install
110
- `),0}async function Iu(){try{let{stdout:e}=await wu("which claude || where claude",{timeout:5e3});if(e.trim())return!0}catch(e){e instanceof Error?a.debug("WORKER","Claude CLI not in PATH",{},e):a.debug("WORKER","Claude CLI not in PATH",{},new Error(String(e)))}let t=f.join(ye,"plugins");return!!G(t)}async function Ru(t,e){switch(t){case"install":{let r=e[0]||"project";return _o(r)}case"uninstall":{let r=e[0]||"project";return xo(r)}case"status":return ko();case"setup":return console.log("Use the main entry point for setup"),0;default:return console.log(`
152
+ `);let e=[{name:"Project",dir:k.join(process.cwd(),".cursor")},{name:"User",dir:k.join(Rn(),".cursor")}];process.platform==="darwin"?e.push({name:"Enterprise",dir:"/Library/Application Support/Cursor"}):process.platform==="linux"&&e.push({name:"Enterprise",dir:"/etc/cursor"});let t=!1;for(let n of e){let r=k.join(n.dir,"hooks.json"),o=k.join(n.dir,"hooks");if(ie(r)){t=!0,console.log(`${n.name}: Installed`),console.log(` Config: ${r}`);let s=null;try{s=JSON.parse(li(r,"utf-8"))}catch(i){i instanceof Error?u.error("WORKER","Unable to parse hooks.json",{path:r},i):u.error("WORKER","Unable to parse hooks.json",{path:r},new Error(String(i))),console.log(" Mode: Unable to parse hooks.json")}if(s){let i=s?.hooks?.beforeSubmitPrompt?.[0]?.command||"";if(i.includes("worker-service.cjs")&&i.includes("hook cursor"))console.log(" Mode: Unified CLI (bun worker-service.cjs)");else{let a=["session-init.sh","context-inject.sh","save-observation.sh"],c=["session-init.ps1","context-inject.ps1","save-observation.ps1"],l=a.some(f=>ie(k.join(o,f))),p=c.some(f=>ie(k.join(o,f)));l||p?(console.log(" Mode: Legacy shell scripts (consider reinstalling for unified CLI)"),l&&p?console.log(" Platform: Both (bash + PowerShell)"):l?console.log(" Platform: Unix (bash)"):p&&console.log(" Platform: Windows (PowerShell)")):console.log(" Mode: Unknown configuration")}}if(n.name==="Project"){let i=k.join(n.dir,"rules","claude-mem-context.mdc");ie(i)?console.log(" Context: Active"):console.log(" Context: Not yet generated (will be created on first prompt)")}}else console.log(`${n.name}: Not installed`);console.log("")}return t||console.log(`No hooks installed. Run: claude-mem cursor install
153
+ `),0}async function pu(){try{let{stdout:t}=await ou("which claude || where claude",{timeout:5e3});if(t.trim())return!0}catch(t){t instanceof Error?u.debug("WORKER","Claude CLI not in PATH",{},t):u.debug("WORKER","Claude CLI not in PATH",{},new Error(String(t)))}let e=k.join(Xe,"plugins");return!!ie(e)}async function mu(e,t){switch(e){case"install":{let n=t[0]||"project";return fi(n)}case"uninstall":{let n=t[0]||"project";return gi(n)}case"status":return hi();case"setup":return console.log("Use the main entry point for setup"),0;default:return console.log(`
111
154
  Claude-Mem Cursor Integration
112
155
 
113
156
  Usage: claude-mem cursor <command> [options]
@@ -131,23 +174,23 @@ Examples:
131
174
  claude-mem cursor status # Check if hooks are installed
132
175
 
133
176
  For more info: https://docs.claude-mem.ai/cursor
134
- `),0}}var wu,So,qe=m(()=>{"use strict";L();Pt();Ve();ho();wu=yu(Su),So=f.join(B,"cursor-projects.json")});var Ir={};q(Ir,{checkGeminiCliHooksStatus:()=>$o,handleGeminiCliCommand:()=>Uu,installGeminiCliHooks:()=>Io,uninstallGeminiCliHooks:()=>Ro});import Ar from"path";import{homedir as $u}from"os";import{existsSync as xe,readFileSync as Bt,writeFileSync as br,mkdirSync as bo}from"fs";function Tu(t,e,r){let o=ke[r];if(!o)throw new Error(`Unknown Gemini CLI event: ${r}`);let s=t.replace(/\\/g,"\\\\"),i=e.replace(/\\/g,"\\\\");return`"${s}" "${i}" hook gemini-cli ${o}`}function Ou(t){return{matcher:"*",hooks:[{name:Ze,type:"command",command:t,timeout:Pu}]}}function Mr(){if(!xe(P))return{};let t=Bt(P,"utf-8");try{return JSON.parse(t)}catch(e){throw e instanceof Error?a.error("WORKER","Corrupt JSON in Gemini settings",{path:P},e):a.error("WORKER","Corrupt JSON in Gemini settings",{path:P},new Error(String(e))),new Error(`Corrupt JSON in ${P}, refusing to overwrite user settings`)}}function Mo(t){bo(Nt,{recursive:!0}),br(P,JSON.stringify(t,null,2)+`
135
- `)}function Lu(t,e){let r={...t};r.hooks||(r.hooks={});for(let[o,s]of Object.entries(e)){let i=r.hooks[o]??[];for(let n of s){let u=i.findIndex(c=>c.hooks.some(D=>D.name===Ze));if(u>=0){let c=i[u],D=c.hooks.findIndex(d=>d.name===Ze);D>=0?c.hooks[D]=n.hooks[0]:c.hooks.push(n.hooks[0])}else i.push(n)}r.hooks[o]=i}return r}function Bu(){let t="<claude-mem-context>",r=`${t}
177
+ `),0}}var ou,ui,Ft=w(()=>{"use strict";F();Tn();Ge();ci();ou=ru(nu),ui=k.join(_,"cursor-projects.json")});var Kr={};fe(Kr,{checkGeminiCliHooksStatus:()=>Ci,handleGeminiCliCommand:()=>Cu,installGeminiCliHooks:()=>wi,uninstallGeminiCliHooks:()=>vi});import Jr from"path";import{homedir as fu}from"os";import{existsSync as rt,readFileSync as Pn,writeFileSync as Hr,mkdirSync as Ei}from"fs";function hu(e,t,n){let r=ot[n];if(!r)throw new Error(`Unknown Gemini CLI event: ${n}`);let o=e.replace(/\\/g,"\\\\"),s=t.replace(/\\/g,"\\\\");return`"${o}" "${s}" hook gemini-cli ${r}`}function Su(e){return{matcher:"*",hooks:[{name:Gt,type:"command",command:e,timeout:gu}]}}function Br(){if(!rt(X))return{};let e=Pn(X,"utf-8");try{return JSON.parse(e)}catch(t){throw t instanceof Error?u.error("WORKER","Corrupt JSON in Gemini settings",{path:X},t):u.error("WORKER","Corrupt JSON in Gemini settings",{path:X},new Error(String(t))),new Error(`Corrupt JSON in ${X}, refusing to overwrite user settings`)}}function yi(e){Ei(Dn,{recursive:!0}),Hr(X,JSON.stringify(e,null,2)+`
178
+ `)}function Eu(e,t){let n={...e};n.hooks||(n.hooks={});for(let[r,o]of Object.entries(t)){let s=n.hooks[r]??[];for(let i of o){let a=s.findIndex(c=>c.hooks.some(l=>l.name===Gt));if(a>=0){let c=s[a],l=c.hooks.findIndex(p=>p.name===Gt);l>=0?c.hooks[l]=i.hooks[0]:c.hooks.push(i.hooks[0])}else s.push(i)}n.hooks[r]=s}return n}function yu(){let e="<claude-mem-context>",n=`${e}
136
179
  # Memory Context from Past Sessions
137
180
 
138
181
  *No context yet. Complete your first session and context will appear here.*
139
- </claude-mem-context>`,o="";if(xe(z)&&(o=Bt(z,"utf-8")),o.includes(t))return;let s=o.length>0&&!o.endsWith(`
182
+ </claude-mem-context>`,r="";if(rt(pe)&&(r=Pn(pe,"utf-8")),r.includes(e))return;let o=r.length>0&&!r.endsWith(`
140
183
  `)?`
141
184
 
142
- `:o.length>0?`
143
- `:"",i=o+s+r+`
144
- `;bo(Nt,{recursive:!0}),br(z,i)}async function Io(){console.log(`
185
+ `:r.length>0?`
186
+ `:"",s=r+o+n+`
187
+ `;Ei(Dn,{recursive:!0}),Hr(pe,s)}async function wi(){console.log(`
145
188
  Installing Claude-Mem Gemini CLI hooks...
146
- `);let t=ve();if(!t)return console.error("Could not find worker-service.cjs"),console.error(" Expected at: ~/.claude/plugins/marketplaces/thedotmack/plugin/scripts/worker-service.cjs"),1;let e=_e();console.log(` Using Bun runtime: ${e}`),console.log(` Worker service: ${t}`);try{let r={};for(let i of Object.keys(ke)){let n=Tu(e,t,i);r[i]=[Ou(n)]}let o=Mr(),s=Lu(o,r);return Nu(s),0}catch(r){let o=r instanceof Error?r.message:String(r);return console.error(`
147
- Installation failed: ${o}`),1}}function Nu(t){Mo(t),console.log(` Merged hooks into ${P}`),Bu(),console.log(` Setup context injection in ${z}`);let e=Object.keys(ke);console.log(` Registered ${e.length} hook events:`);for(let r of e){let o=ke[r];console.log(` ${r} \u2192 ${o}`)}console.log(`
189
+ `);let e=tt();if(!e)return console.error("Could not find worker-service.cjs"),console.error(" Expected at: ~/.claude/plugins/marketplaces/thedotmack/plugin/scripts/worker-service.cjs"),1;let t=nt();console.log(` Using Bun runtime: ${t}`),console.log(` Worker service: ${e}`);try{let n={};for(let s of Object.keys(ot)){let i=hu(t,e,s);n[s]=[Su(i)]}let r=Br(),o=Eu(r,n);return wu(o),0}catch(n){let r=n instanceof Error?n.message:String(n);return console.error(`
190
+ Installation failed: ${r}`),1}}function wu(e){yi(e),console.log(` Merged hooks into ${X}`),yu(),console.log(` Setup context injection in ${pe}`);let t=Object.keys(ot);console.log(` Registered ${t.length} hook events:`);for(let n of t){let r=ot[n];console.log(` ${n} \u2192 ${r}`)}console.log(`
148
191
  Installation complete!
149
192
 
150
- Hooks installed to: ${P}
193
+ Hooks installed to: ${X}
151
194
  Using unified CLI: bun worker-service.cjs hook gemini-cli <event>
152
195
 
153
196
  Next steps:
@@ -158,21 +201,21 @@ Next steps:
158
201
  Context Injection:
159
202
  Context from past sessions is injected via ~/.gemini/GEMINI.md
160
203
  and automatically included in Gemini CLI conversations.
161
- `)}function Ro(){if(console.log(`
204
+ `)}function vi(){if(console.log(`
162
205
  Uninstalling Claude-Mem Gemini CLI hooks...
163
- `),!xe(P))return console.log(" No Gemini CLI settings found \u2014 nothing to uninstall."),0;try{let t=Mr();if(!t.hooks)return console.log(" No hooks found in Gemini CLI settings \u2014 nothing to uninstall."),0;let e=0;for(let[r,o]of Object.entries(t.hooks)){let s=o.map(i=>{let n=i.hooks.filter(u=>u.name!==Ze);return e+=i.hooks.length-n.length,{...i,hooks:n}}).filter(i=>i.hooks.length>0);s.length>0?t.hooks[r]=s:delete t.hooks[r]}return Object.keys(t.hooks).length===0&&delete t.hooks,ju(t,e),0}catch(t){let e=t instanceof Error?t.message:String(t);return console.error(`
164
- Uninstallation failed: ${e}`),1}}function ju(t,e){if(Mo(t),console.log(` Removed ${e} claude-mem hook(s) from ${P}`),xe(z)){let r=Bt(z,"utf-8"),o=/\n?<claude-mem-context>[\s\S]*?<\/claude-mem-context>\n?/;o.test(r)&&(r=r.replace(o,""),br(z,r),console.log(` Removed context section from ${z}`))}console.log(`
206
+ `),!rt(X))return console.log(" No Gemini CLI settings found \u2014 nothing to uninstall."),0;try{let e=Br();if(!e.hooks)return console.log(" No hooks found in Gemini CLI settings \u2014 nothing to uninstall."),0;let t=0;for(let[n,r]of Object.entries(e.hooks)){let o=r.map(s=>{let i=s.hooks.filter(a=>a.name!==Gt);return t+=s.hooks.length-i.length,{...s,hooks:i}}).filter(s=>s.hooks.length>0);o.length>0?e.hooks[n]=o:delete e.hooks[n]}return Object.keys(e.hooks).length===0&&delete e.hooks,vu(e,t),0}catch(e){let t=e instanceof Error?e.message:String(e);return console.error(`
207
+ Uninstallation failed: ${t}`),1}}function vu(e,t){if(yi(e),console.log(` Removed ${t} claude-mem hook(s) from ${X}`),rt(pe)){let n=Pn(pe,"utf-8"),r=/\n?<claude-mem-context>[\s\S]*?<\/claude-mem-context>\n?/;r.test(n)&&(n=n.replace(r,""),Hr(pe,n),console.log(` Removed context section from ${pe}`))}console.log(`
165
208
  Uninstallation complete!
166
- `),console.log("Restart Gemini CLI to apply changes.")}function $o(){if(console.log(`
209
+ `),console.log("Restart Gemini CLI to apply changes.")}function Ci(){if(console.log(`
167
210
  Claude-Mem Gemini CLI Hooks Status
168
- `),!xe(P))return console.log("Gemini CLI settings: Not found"),console.log(` Expected at: ${P}
211
+ `),!rt(X))return console.log("Gemini CLI settings: Not found"),console.log(` Expected at: ${X}
169
212
  `),console.log(`No hooks installed. Run: claude-mem install --ide gemini-cli
170
- `),0;let t;try{t=Mr()}catch(r){let o=r instanceof Error?r.message:String(r);return r instanceof Error?a.error("WORKER","Failed to read Gemini CLI settings",{path:P},r):a.error("WORKER","Failed to read Gemini CLI settings",{path:P},new Error(String(r))),console.log(`Gemini CLI settings: ${o}
171
- `),0}if(!t.hooks)return console.log(`Gemini CLI settings: Found, but no hooks configured
213
+ `),0;let e;try{e=Br()}catch(n){let r=n instanceof Error?n.message:String(n);return n instanceof Error?u.error("WORKER","Failed to read Gemini CLI settings",{path:X},n):u.error("WORKER","Failed to read Gemini CLI settings",{path:X},new Error(String(n))),console.log(`Gemini CLI settings: ${r}
214
+ `),0}if(!e.hooks)return console.log(`Gemini CLI settings: Found, but no hooks configured
172
215
  `),console.log(`No hooks installed. Run: claude-mem install --ide gemini-cli
173
- `),0;let e=[];for(let[r,o]of Object.entries(t.hooks))o.some(i=>i.hooks.some(n=>n.name===Ze))&&e.push(r);if(e.length===0)return console.log(`Gemini CLI settings: Found, but no claude-mem hooks
216
+ `),0;let t=[];for(let[n,r]of Object.entries(e.hooks))r.some(s=>s.hooks.some(i=>i.name===Gt))&&t.push(n);if(t.length===0)return console.log(`Gemini CLI settings: Found, but no claude-mem hooks
174
217
  `),console.log(`Run: claude-mem install --ide gemini-cli
175
- `),0;console.log(`Settings: ${P}`),console.log("Mode: Unified CLI (bun worker-service.cjs hook gemini-cli)"),console.log(`Events: ${e.length} of ${Object.keys(ke).length} mapped`);for(let r of e){let o=ke[r]??"unknown";console.log(` ${r} \u2192 ${o}`)}return xe(z)?Bt(z,"utf-8").includes("<claude-mem-context>")?console.log(`Context: Active (${z})`):console.log("Context: GEMINI.md exists but missing claude-mem section"):console.log("Context: No GEMINI.md found"),console.log(""),0}async function Uu(t,e){switch(t){case"install":return Io();case"uninstall":return Ro();case"status":return $o();default:return console.log(`
218
+ `),0;console.log(`Settings: ${X}`),console.log("Mode: Unified CLI (bun worker-service.cjs hook gemini-cli)"),console.log(`Events: ${t.length} of ${Object.keys(ot).length} mapped`);for(let n of t){let r=ot[n]??"unknown";console.log(` ${n} \u2192 ${r}`)}return rt(pe)?Pn(pe,"utf-8").includes("<claude-mem-context>")?console.log(`Context: Active (${pe})`):console.log("Context: GEMINI.md exists but missing claude-mem section"):console.log("Context: No GEMINI.md found"),console.log(""),0}async function Cu(e,t){switch(e){case"install":return wi();case"uninstall":return vi();case"status":return Ci();default:return console.log(`
176
219
  Claude-Mem Gemini CLI Integration
177
220
 
178
221
  Usage: claude-mem gemini-cli <command>
@@ -188,53 +231,53 @@ Examples:
188
231
  claude-mem gemini-cli uninstall # Remove hooks
189
232
 
190
233
  For more info: https://docs.claude-mem.ai/usage/gemini-provider
191
- `),0}}var Nt,P,z,Ze,Pu,ke,Rr=m(()=>{"use strict";L();qe();Nt=Ar.join($u(),".gemini"),P=Ar.join(Nt,"settings.json"),z=Ar.join(Nt,"GEMINI.md"),Ze="claude-mem",Pu=1e4,ke={SessionStart:"context",BeforeAgent:"session-init",AfterAgent:"observation",BeforeTool:"observation",AfterTool:"observation",PreCompress:"summarize",Notification:"observation"}});import Wu from"path";import{existsSync as Gu,readFileSync as Hu,writeFileSync as $r,mkdirSync as Ku}from"fs";function jt(t,e,r){let o=Wu.dirname(t);Ku(o,{recursive:!0});let s=`${Qe}
192
- ${e}
193
- ${Ae}`;if(Gu(t)){let i=Hu(t,"utf-8"),n=i.indexOf(Qe),u=i.indexOf(Ae);n!==-1&&u!==-1?i=i.slice(0,n)+s+i.slice(u+Ae.length):i=i.trimEnd()+`
194
-
195
- `+s+`
196
- `,$r(t,i,"utf-8")}else r?$r(t,`${r}
197
-
198
- ${s}
199
- `,"utf-8"):$r(t,s+`
200
- `,"utf-8")}var Qe,Ae,Pr=m(()=>{"use strict";Qe="<claude-mem-context>",Ae="</claude-mem-context>"});var Lr={};q(Lr,{checkOpenCodeStatus:()=>ta,findBuiltPluginPath:()=>Lo,getInstalledPluginPath:()=>tt,getOpenCodeAgentsMdPath:()=>et,getOpenCodeConfigDirectory:()=>Ut,getOpenCodePluginsDirectory:()=>Tr,injectContextIntoAgentsMd:()=>Or,installOpenCodeIntegration:()=>ra,installOpenCodePlugin:()=>Bo,syncContextToAgentsMd:()=>zu,uninstallOpenCodePlugin:()=>ea});import ae from"path";import{homedir as Po}from"os";import{fileURLToPath as Ju}from"url";import{existsSync as be,readFileSync as To,writeFileSync as Yu,mkdirSync as Vu,copyFileSync as Xu,unlinkSync as Oo}from"fs";function Ut(){return process.env.OPENCODE_CONFIG_DIR?process.env.OPENCODE_CONFIG_DIR:ae.join(Po(),".config","opencode")}function Tr(){return ae.join(Ut(),"plugins")}function et(){return ae.join(Ut(),"AGENTS.md")}function tt(){return ae.join(Tr(),"claude-mem.js")}function Lo(){let t=[ae.join(process.env.CLAUDE_CONFIG_DIR||ae.join(Po(),".claude"),"plugins","marketplaces","thedotmack","dist","opencode-plugin","index.js"),ae.join(ae.dirname(Ju(import.meta.url)),"..","..","..","dist","opencode-plugin","index.js")];for(let e of t)if(be(e))return e;return null}function Bo(){let t=Lo();if(!t)return console.error("Could not find built OpenCode plugin bundle."),console.error(" Expected at: dist/opencode-plugin/index.js"),console.error(" Run the build first: npm run build"),1;let e=Tr(),r=tt();try{return Vu(e,{recursive:!0}),Xu(t,r),console.log(` Plugin installed to: ${r}`),a.info("OPENCODE","Plugin installed",{destination:r}),0}catch(o){let s=o instanceof Error?o.message:String(o);return console.error(`Failed to install OpenCode plugin: ${s}`),1}}function Or(t){let e=et();try{return jt(e,t,"# Claude-Mem Memory Context"),a.info("OPENCODE","Context injected into AGENTS.md",{path:e}),0}catch(r){let o=r instanceof Error?r.message:String(r);return console.error(`Failed to inject context into AGENTS.md: ${o}`),1}}async function zu(t,e){try{await Zu(t,e)}catch(r){r instanceof Error?a.debug("WORKER","Worker not available during context sync",{},r):a.debug("WORKER","Worker not available during context sync",{},new Error(String(r)))}}async function qu(){let t=Xe();if(!(await fetch(`http://127.0.0.1:${t}/api/readiness`)).ok)return null;let r=await fetch(`http://127.0.0.1:${t}/api/context/inject?project=opencode`);if(!r.ok)return null;let o=await r.text();return o&&o.trim()?o:null}async function Zu(t,e){let r=await fetch(`http://127.0.0.1:${t}/api/context/inject?project=${encodeURIComponent(e)}`);if(!r.ok)return;let o=await r.text();o&&o.trim()&&Or(o)!==0&&a.warn("OPENCODE","Failed to inject context into AGENTS.md during sync")}function Qu(t,e){e.length===0||e==="# Claude-Mem Memory Context"?(Oo(t),console.log(" Removed empty AGENTS.md")):(Yu(t,e+`
201
- `,"utf-8"),console.log(" Cleaned context from AGENTS.md"))}function ea(){let t=!1,e=tt();if(be(e))try{Oo(e),console.log(` Removed plugin: ${e}`)}catch(o){let s=o instanceof Error?o.message:String(o);console.error(` Failed to remove plugin: ${s}`),t=!0}let r=et();if(be(r)){let o;try{o=To(r,"utf-8")}catch(n){let u=n instanceof Error?n.message:String(n);console.error(` Failed to read AGENTS.md: ${u}`),t=!0,o=""}let s=o.indexOf(Qe),i=o.indexOf(Ae);if(s!==-1&&i!==-1){o=o.slice(0,s).trimEnd()+`
202
- `+o.slice(i+Ae.length).trimStart();let n=o.trim();try{Qu(r,n)}catch(u){let c=u instanceof Error?u.message:String(u);console.error(` Failed to clean AGENTS.md: ${c}`),t=!0}}}return t?1:0}function ta(){console.log(`
234
+ `),0}}var Dn,X,pe,Gt,gu,ot,Yr=w(()=>{"use strict";F();Ft();Dn=Jr.join(fu(),".gemini"),X=Jr.join(Dn,"settings.json"),pe=Jr.join(Dn,"GEMINI.md"),Gt="claude-mem",gu=1e4,ot={SessionStart:"context",BeforeAgent:"session-init",AfterAgent:"observation",BeforeTool:"observation",AfterTool:"observation",PreCompress:"summarize",Notification:"observation"}});import bu from"path";import{existsSync as ku,readFileSync as Mu,writeFileSync as Vr,mkdirSync as xu}from"fs";function Nn(e,t,n){let r=bu.dirname(e);xu(r,{recursive:!0});let o=`${Jt}
235
+ ${t}
236
+ ${st}`;if(ku(e)){let s=Mu(e,"utf-8"),i=s.indexOf(Jt),a=s.indexOf(st);i!==-1&&a!==-1?s=s.slice(0,i)+o+s.slice(a+st.length):s=s.trimEnd()+`
237
+
238
+ `+o+`
239
+ `,Vr(e,s,"utf-8")}else n?Vr(e,`${n}
240
+
241
+ ${o}
242
+ `,"utf-8"):Vr(e,o+`
243
+ `,"utf-8")}var Jt,st,zr=w(()=>{"use strict";Jt="<claude-mem-context>",st="</claude-mem-context>"});var Xr={};fe(Xr,{checkOpenCodeStatus:()=>Uu,findBuiltPluginPath:()=>xi,getInstalledPluginPath:()=>Bt,getOpenCodeAgentsMdPath:()=>Ht,getOpenCodeConfigDirectory:()=>An,getOpenCodePluginsDirectory:()=>Zr,injectContextIntoAgentsMd:()=>qr,installOpenCodeIntegration:()=>Wu,installOpenCodePlugin:()=>Ti,syncContextToAgentsMd:()=>Pu,uninstallOpenCodePlugin:()=>Lu});import Le from"path";import{homedir as bi}from"os";import{fileURLToPath as Tu}from"url";import{existsSync as it,readFileSync as ki,writeFileSync as Ru,mkdirSync as Iu,copyFileSync as Ou,unlinkSync as Mi}from"fs";function An(){return process.env.OPENCODE_CONFIG_DIR?process.env.OPENCODE_CONFIG_DIR:Le.join(bi(),".config","opencode")}function Zr(){return Le.join(An(),"plugins")}function Ht(){return Le.join(An(),"AGENTS.md")}function Bt(){return Le.join(Zr(),"claude-mem.js")}function xi(){let e=[Le.join(process.env.CLAUDE_CONFIG_DIR||Le.join(bi(),".claude"),"plugins","marketplaces","thedotmack","dist","opencode-plugin","index.js"),Le.join(Le.dirname(Tu(import.meta.url)),"..","..","..","dist","opencode-plugin","index.js")];for(let t of e)if(it(t))return t;return null}function Ti(){let e=xi();if(!e)return console.error("Could not find built OpenCode plugin bundle."),console.error(" Expected at: dist/opencode-plugin/index.js"),console.error(" Run the build first: npm run build"),1;let t=Zr(),n=Bt();try{return Iu(t,{recursive:!0}),Ou(e,n),console.log(` Plugin installed to: ${n}`),u.info("OPENCODE","Plugin installed",{destination:n}),0}catch(r){let o=r instanceof Error?r.message:String(r);return console.error(`Failed to install OpenCode plugin: ${o}`),1}}function qr(e){let t=Ht();try{return Nn(t,e,"# Claude-Mem Memory Context"),u.info("OPENCODE","Context injected into AGENTS.md",{path:t}),0}catch(n){let r=n instanceof Error?n.message:String(n);return console.error(`Failed to inject context into AGENTS.md: ${r}`),1}}async function Pu(e,t){try{await Nu(e,t)}catch(n){n instanceof Error?u.debug("WORKER","Worker not available during context sync",{},n):u.debug("WORKER","Worker not available during context sync",{},new Error(String(n)))}}async function Du(){let e=Wt();if(!(await fetch(`http://127.0.0.1:${e}/api/readiness`)).ok)return null;let n=await fetch(`http://127.0.0.1:${e}/api/context/inject?project=opencode`);if(!n.ok)return null;let r=await n.text();return r&&r.trim()?r:null}async function Nu(e,t){let n=await fetch(`http://127.0.0.1:${e}/api/context/inject?project=${encodeURIComponent(t)}`);if(!n.ok)return;let r=await n.text();r&&r.trim()&&qr(r)!==0&&u.warn("OPENCODE","Failed to inject context into AGENTS.md during sync")}function Au(e,t){t.length===0||t==="# Claude-Mem Memory Context"?(Mi(e),console.log(" Removed empty AGENTS.md")):(Ru(e,t+`
244
+ `,"utf-8"),console.log(" Cleaned context from AGENTS.md"))}function Lu(){let e=!1,t=Bt();if(it(t))try{Mi(t),console.log(` Removed plugin: ${t}`)}catch(r){let o=r instanceof Error?r.message:String(r);console.error(` Failed to remove plugin: ${o}`),e=!0}let n=Ht();if(it(n)){let r;try{r=ki(n,"utf-8")}catch(i){let a=i instanceof Error?i.message:String(i);console.error(` Failed to read AGENTS.md: ${a}`),e=!0,r=""}let o=r.indexOf(Jt),s=r.indexOf(st);if(o!==-1&&s!==-1){r=r.slice(0,o).trimEnd()+`
245
+ `+r.slice(s+st.length).trimStart();let i=r.trim();try{Au(n,i)}catch(a){let c=a instanceof Error?a.message:String(a);console.error(` Failed to clean AGENTS.md: ${c}`),e=!0}}}return e?1:0}function Uu(){console.log(`
203
246
  Claude-Mem OpenCode Integration Status
204
- `);let t=Ut(),e=tt(),r=et();if(console.log(`Config directory: ${t}`),console.log(` Exists: ${be(t)?"yes":"no"}`),console.log(""),console.log(`Plugin: ${e}`),console.log(` Installed: ${be(e)?"yes":"no"}`),console.log(""),console.log(`Context (AGENTS.md): ${r}`),be(r)){let s=To(r,"utf-8").includes(Qe);console.log(" Exists: yes"),console.log(` Has claude-mem context: ${s?"yes":"no"}`)}else console.log(" Exists: no");return console.log(""),0}async function ra(){console.log(`
247
+ `);let e=An(),t=Bt(),n=Ht();if(console.log(`Config directory: ${e}`),console.log(` Exists: ${it(e)?"yes":"no"}`),console.log(""),console.log(`Plugin: ${t}`),console.log(` Installed: ${it(t)?"yes":"no"}`),console.log(""),console.log(`Context (AGENTS.md): ${n}`),it(n)){let o=ki(n,"utf-8").includes(Jt);console.log(" Exists: yes"),console.log(` Has claude-mem context: ${o?"yes":"no"}`)}else console.log(" Exists: no");return console.log(""),0}async function Wu(){console.log(`
205
248
  Installing Claude-Mem for OpenCode...
206
- `);let t=Bo();if(t!==0)return t;let r=`# Memory Context from Past Sessions
249
+ `);let e=Ti();if(e!==0)return e;let n=`# Memory Context from Past Sessions
207
250
 
208
251
  *No context yet. Complete your first session and context will appear here.*
209
252
 
210
- Use claude-mem search tools for manual memory queries.`,o="placeholder";try{let i=await qu();i&&(r=i,o="existing memory")}catch(i){i instanceof Error?a.debug("WORKER","Worker not available during OpenCode install",{},i):a.debug("WORKER","Worker not available during OpenCode install",{},new Error(String(i)))}return Or(r)!==0?a.warn("OPENCODE",`Failed to inject ${o} context into AGENTS.md during install`):console.log(o==="existing memory"?" Context injected from existing memory":" Placeholder context created (worker not running)"),console.log(`
253
+ Use claude-mem search tools for manual memory queries.`,r="placeholder";try{let s=await Du();s&&(n=s,r="existing memory")}catch(s){s instanceof Error?u.debug("WORKER","Worker not available during OpenCode install",{},s):u.debug("WORKER","Worker not available during OpenCode install",{},new Error(String(s)))}return qr(n)!==0?u.warn("OPENCODE",`Failed to inject ${r} context into AGENTS.md during install`):console.log(r==="existing memory"?" Context injected from existing memory":" Placeholder context created (worker not running)"),console.log(`
211
254
  Installation complete!
212
255
 
213
- Plugin installed to: ${tt()}
214
- Context file: ${et()}
256
+ Plugin installed to: ${Bt()}
257
+ Context file: ${Ht()}
215
258
 
216
259
  Next steps:
217
260
  1. Start claude-mem worker: npx claude-mem start
218
261
  2. Restart OpenCode to load the plugin
219
262
  3. Memory capture is automatic from then on
220
- `),0}var Br=m(()=>{"use strict";L();Pr();Pt()});var Ur={};q(Ur,{checkWindsurfHooksStatus:()=>Jo,handleWindsurfCommand:()=>pa,installWindsurfHooks:()=>Ho,readWindsurfRegistry:()=>Kt,registerWindsurfProject:()=>Wo,uninstallWindsurfHooks:()=>Ko,unregisterWindsurfProject:()=>Go,updateWindsurfContextForProject:()=>sa,writeWindsurfContextFile:()=>jr,writeWindsurfRegistry:()=>Nr});import H from"path";import{homedir as na}from"os";import{existsSync as Ie,readFileSync as Gt,writeFileSync as rt,unlinkSync as jo,mkdirSync as Ht,renameSync as oa}from"fs";function Kt(){try{return Ie(Me)?JSON.parse(Gt(Me,"utf-8")):{}}catch(t){return t instanceof Error?a.error("WORKER","Failed to read registry, using empty",{file:Me},t):a.error("WORKER","Failed to read registry, using empty",{file:Me},new Error(String(t))),{}}}function Nr(t){let e=H.dirname(Me);Ht(e,{recursive:!0}),rt(Me,JSON.stringify(t,null,2))}function Wo(t){let e=Kt();e[t]={installedAt:new Date().toISOString()},Nr(e),a.info("WINDSURF","Registered project for auto-context updates",{workspacePath:t})}function Go(t){let e=Kt();e[t]&&(delete e[t],Nr(e),a.info("WINDSURF","Unregistered project",{workspacePath:t}))}async function sa(t,e,r){if(Kt()[e])try{let i=await fetch(`http://127.0.0.1:${r}/api/context/inject?project=${encodeURIComponent(t)}`);if(!i.ok)return;let n=await i.text();if(!n||!n.trim())return;jr(e,n),a.debug("WINDSURF","Updated context file",{projectName:t,workspacePath:e})}catch(i){i instanceof Error?a.error("WORKER","Failed to update context file",{projectName:t,workspacePath:e},i):a.error("WORKER","Failed to update context file",{projectName:t,workspacePath:e},new Error(String(i)))}}function jr(t,e){let r=H.join(t,".windsurf","rules"),o=H.join(r,"claude-mem-context.md"),s=`${o}.tmp`;Ht(r,{recursive:!0});let i=`# Memory Context from Past Sessions
263
+ `),0}var Qr=w(()=>{"use strict";F();zr();Tn()});var eo={};fe(eo,{checkWindsurfHooksStatus:()=>Li,handleWindsurfCommand:()=>Zu,installWindsurfHooks:()=>Ni,readWindsurfRegistry:()=>jn,registerWindsurfProject:()=>Pi,uninstallWindsurfHooks:()=>Ai,unregisterWindsurfProject:()=>Di,updateWindsurfContextForProject:()=>Gu,writeWindsurfContextFile:()=>$r,writeWindsurfRegistry:()=>_r});import ae from"path";import{homedir as ju}from"os";import{existsSync as ct,readFileSync as Un,writeFileSync as Kt,unlinkSync as Ii,mkdirSync as Wn,renameSync as Fu}from"fs";function jn(){try{return ct(at)?JSON.parse(Un(at,"utf-8")):{}}catch(e){return e instanceof Error?u.error("WORKER","Failed to read registry, using empty",{file:at},e):u.error("WORKER","Failed to read registry, using empty",{file:at},new Error(String(e))),{}}}function _r(e){let t=ae.dirname(at);Wn(t,{recursive:!0}),Kt(at,JSON.stringify(e,null,2))}function Pi(e){let t=jn();t[e]={installedAt:new Date().toISOString()},_r(t),u.info("WINDSURF","Registered project for auto-context updates",{workspacePath:e})}function Di(e){let t=jn();t[e]&&(delete t[e],_r(t),u.info("WINDSURF","Unregistered project",{workspacePath:e}))}async function Gu(e,t,n){if(jn()[t])try{let s=await fetch(`http://127.0.0.1:${n}/api/context/inject?project=${encodeURIComponent(e)}`);if(!s.ok)return;let i=await s.text();if(!i||!i.trim())return;$r(t,i),u.debug("WINDSURF","Updated context file",{projectName:e,workspacePath:t})}catch(s){s instanceof Error?u.error("WORKER","Failed to update context file",{projectName:e,workspacePath:t},s):u.error("WORKER","Failed to update context file",{projectName:e,workspacePath:t},new Error(String(s)))}}function $r(e,t){let n=ae.join(e,".windsurf","rules"),r=ae.join(n,"claude-mem-context.md"),o=`${r}.tmp`;Wn(n,{recursive:!0});let s=`# Memory Context from Past Sessions
221
264
 
222
265
  The following context is from claude-mem, a persistent memory system that tracks your coding sessions.
223
266
 
224
- ${e}
267
+ ${t}
225
268
 
226
269
  ---
227
270
  *Auto-updated by claude-mem after each session. Use MCP search tools for detailed queries.*
228
- `;i.length>No&&(i=i.slice(0,No-50)+`
271
+ `;s.length>Ri&&(s=s.slice(0,Ri-50)+`
229
272
 
230
273
  *[Truncated \u2014 use MCP search for full history]*
231
- `),rt(s,i),oa(s,o)}function ia(t,e,r){let s={pre_user_prompt:"session-init",post_write_code:"file-edit",post_run_command:"observation",post_mcp_tool_use:"observation",post_cascade_response:"observation"}[r]??"observation";return`"${t}" "${e}" hook windsurf ${s}`}function ua(t,e,r){Ht(Uo,{recursive:!0});let o={hooks:{}};if(Ie(k))try{o=JSON.parse(Gt(k,"utf-8")),o.hooks||(o.hooks={})}catch(s){throw s instanceof Error?a.error("WORKER","Corrupt hooks.json, refusing to overwrite",{path:k},s):a.error("WORKER","Corrupt hooks.json, refusing to overwrite",{path:k},new Error(String(s))),new Error(`Corrupt hooks.json at ${k}, refusing to overwrite`)}for(let s of Wt){let n={command:ia(t,e,s),show_output:!1,working_directory:r},u=(o.hooks[s]??[]).filter(c=>!c.command.includes("worker-service")||!c.command.includes("windsurf"));o.hooks[s]=[...u,n]}rt(k,JSON.stringify(o,null,2))}async function Ho(){console.log(`
274
+ `),Kt(o,s),Fu(o,r)}function Ju(e,t,n){let o={pre_user_prompt:"session-init",post_write_code:"file-edit",post_run_command:"observation",post_mcp_tool_use:"observation",post_cascade_response:"observation"}[n]??"observation";return`"${e}" "${t}" hook windsurf ${o}`}function Hu(e,t,n){Wn(Oi,{recursive:!0});let r={hooks:{}};if(ct(G))try{r=JSON.parse(Un(G,"utf-8")),r.hooks||(r.hooks={})}catch(o){throw o instanceof Error?u.error("WORKER","Corrupt hooks.json, refusing to overwrite",{path:G},o):u.error("WORKER","Corrupt hooks.json, refusing to overwrite",{path:G},new Error(String(o))),new Error(`Corrupt hooks.json at ${G}, refusing to overwrite`)}for(let o of Ln){let i={command:Ju(e,t,o),show_output:!1,working_directory:n},a=(r.hooks[o]??[]).filter(c=>!c.command.includes("worker-service")||!c.command.includes("windsurf"));r.hooks[o]=[...a,i]}Kt(G,JSON.stringify(r,null,2))}async function Ni(){console.log(`
232
275
  Installing Claude-Mem Windsurf hooks (user level)...
233
- `);let t=ve();if(!t)return console.error("Could not find worker-service.cjs"),console.error(" Expected at: ~/.claude/plugins/marketplaces/thedotmack/plugin/scripts/worker-service.cjs"),1;let e=_e();if(!e)return console.error("Could not find Bun runtime"),console.error(" Install Bun: curl -fsSL https://bun.sh/install | bash"),1;let r=H.dirname(t);console.log(` Using Bun runtime: ${e}`),console.log(` Worker service: ${t}`);let o=process.cwd();try{return await aa(e,t,r,o),0}catch(s){let i=s instanceof Error?s.message:String(s);return console.error(`
234
- Installation failed: ${i}`),1}}async function aa(t,e,r,o){ua(t,e,r),console.log(" Created/merged hooks.json"),await ca(o),console.log(`
276
+ `);let e=tt();if(!e)return console.error("Could not find worker-service.cjs"),console.error(" Expected at: ~/.claude/plugins/marketplaces/thedotmack/plugin/scripts/worker-service.cjs"),1;let t=nt();if(!t)return console.error("Could not find Bun runtime"),console.error(" Install Bun: curl -fsSL https://bun.sh/install | bash"),1;let n=ae.dirname(e);console.log(` Using Bun runtime: ${t}`),console.log(` Worker service: ${e}`);let r=process.cwd();try{return await Bu(t,e,n,r),0}catch(o){let s=o instanceof Error?o.message:String(o);return console.error(`
277
+ Installation failed: ${s}`),1}}async function Bu(e,t,n,r){Hu(e,t,n),console.log(" Created/merged hooks.json"),await Ku(r),console.log(`
235
278
  Installation complete!
236
279
 
237
- Hooks installed to: ${k}
280
+ Hooks installed to: ${G}
238
281
  Using unified CLI: bun worker-service.cjs hook windsurf <command>
239
282
 
240
283
  Events registered:
@@ -248,21 +291,21 @@ Next steps:
248
291
  1. Start claude-mem worker: claude-mem start
249
292
  2. Restart Windsurf to load the hooks
250
293
  3. Context is injected via .windsurf/rules/claude-mem-context.md (workspace-level)
251
- `)}async function ca(t){let e=Xe(),r=H.basename(t),o=!1;console.log(" Generating initial context...");try{o=await la(e,r,t)}catch(s){s instanceof Error?a.debug("WORKER","Worker not running during install",{},s):a.debug("WORKER","Worker not running during install",{},new Error(String(s)))}if(!o){let s=H.join(t,".windsurf","rules");Ht(s,{recursive:!0});let i=H.join(s,"claude-mem-context.md");rt(i,`# Memory Context from Past Sessions
294
+ `)}async function Ku(e){let t=Wt(),n=ae.basename(e),r=!1;console.log(" Generating initial context...");try{r=await Yu(t,n,e)}catch(o){o instanceof Error?u.debug("WORKER","Worker not running during install",{},o):u.debug("WORKER","Worker not running during install",{},new Error(String(o)))}if(!r){let o=ae.join(e,".windsurf","rules");Wn(o,{recursive:!0});let s=ae.join(o,"claude-mem-context.md");Kt(s,`# Memory Context from Past Sessions
252
295
 
253
296
  *No context yet. Complete your first session and context will appear here.*
254
297
 
255
298
  Use claude-mem's MCP search tools for manual memory queries.
256
- `),console.log(" Created placeholder context file (will populate after first session)")}Wo(t),console.log(" Registered for auto-context updates")}async function la(t,e,r){if(!(await fetch(`http://127.0.0.1:${t}/api/readiness`)).ok)return!1;let s=await fetch(`http://127.0.0.1:${t}/api/context/inject?project=${encodeURIComponent(e)}`);if(!s.ok)return!1;let i=await s.text();return i&&i.trim()?(jr(r,i),console.log(" Generated initial context from existing memory"),!0):!1}function Ko(){if(console.log(`
299
+ `),console.log(" Created placeholder context file (will populate after first session)")}Pi(e),console.log(" Registered for auto-context updates")}async function Yu(e,t,n){if(!(await fetch(`http://127.0.0.1:${e}/api/readiness`)).ok)return!1;let o=await fetch(`http://127.0.0.1:${e}/api/context/inject?project=${encodeURIComponent(t)}`);if(!o.ok)return!1;let s=await o.text();return s&&s.trim()?($r(n,s),console.log(" Generated initial context from existing memory"),!0):!1}function Ai(){if(console.log(`
257
300
  Uninstalling Claude-Mem Windsurf hooks...
258
- `),Ie(k))try{Da()}catch(e){e instanceof Error?a.error("WORKER","Could not parse hooks.json during uninstall",{path:k},e):a.error("WORKER","Could not parse hooks.json during uninstall",{path:k},new Error(String(e))),console.log(" Warning: could not parse hooks.json \u2014 leaving file intact to preserve other hooks")}else console.log(" No hooks.json found");let t=process.cwd();try{return da(t),0}catch(e){let r=e instanceof Error?e.message:String(e);return console.error(`
259
- Uninstallation failed: ${r}`),1}}function Da(){let e={hooks:JSON.parse(Gt(k,"utf-8")).hooks??{}};for(let r of Wt){let o=e.hooks[r]??[];o.length>0&&(e.hooks[r]=o.filter(s=>!s.command.includes("worker-service")||!s.command.includes("windsurf")),e.hooks[r].length===0&&delete e.hooks[r])}Object.keys(e.hooks).length===0?(jo(k),console.log(" Removed hooks.json (no hooks remaining)")):(rt(k,JSON.stringify(e,null,2)),console.log(" Removed claude-mem entries from hooks.json (other hooks preserved)"))}function da(t){let e=H.join(t,".windsurf","rules","claude-mem-context.md");Ie(e)&&(jo(e),console.log(" Removed context file")),Go(t),console.log(" Unregistered from auto-context updates"),console.log(`
301
+ `),ct(G))try{Vu()}catch(t){t instanceof Error?u.error("WORKER","Could not parse hooks.json during uninstall",{path:G},t):u.error("WORKER","Could not parse hooks.json during uninstall",{path:G},new Error(String(t))),console.log(" Warning: could not parse hooks.json \u2014 leaving file intact to preserve other hooks")}else console.log(" No hooks.json found");let e=process.cwd();try{return zu(e),0}catch(t){let n=t instanceof Error?t.message:String(t);return console.error(`
302
+ Uninstallation failed: ${n}`),1}}function Vu(){let t={hooks:JSON.parse(Un(G,"utf-8")).hooks??{}};for(let n of Ln){let r=t.hooks[n]??[];r.length>0&&(t.hooks[n]=r.filter(o=>!o.command.includes("worker-service")||!o.command.includes("windsurf")),t.hooks[n].length===0&&delete t.hooks[n])}Object.keys(t.hooks).length===0?(Ii(G),console.log(" Removed hooks.json (no hooks remaining)")):(Kt(G,JSON.stringify(t,null,2)),console.log(" Removed claude-mem entries from hooks.json (other hooks preserved)"))}function zu(e){let t=ae.join(e,".windsurf","rules","claude-mem-context.md");ct(t)&&(Ii(t),console.log(" Removed context file")),Di(e),console.log(" Unregistered from auto-context updates"),console.log(`
260
303
  Uninstallation complete!
261
- `),console.log("Restart Windsurf to apply changes.")}function Jo(){if(console.log(`
304
+ `),console.log("Restart Windsurf to apply changes.")}function Li(){if(console.log(`
262
305
  Claude-Mem Windsurf Hooks Status
263
- `),Ie(k)){console.log("User-level: Installed"),console.log(` Config: ${k}`);let t=null;try{t=JSON.parse(Gt(k,"utf-8"))}catch(r){let o=r instanceof Error?r:new Error(String(r));a.error("WORKER","Unable to parse hooks.json",{path:k},o),console.log(" Mode: Unable to parse hooks.json")}if(t){let r=Wt.filter(o=>(t?.hooks?.[o]??[]).some(s=>s.command.includes("worker-service")&&s.command.includes("windsurf")));console.log(` Events: ${r.length}/${Wt.length} registered`);for(let o of r)console.log(` - ${o}`)}let e=H.join(process.cwd(),".windsurf","rules","claude-mem-context.md");Ie(e)?console.log(" Context: Active (current workspace)"):console.log(" Context: Not yet generated for this workspace")}else console.log("User-level: Not installed"),console.log(`
306
+ `),ct(G)){console.log("User-level: Installed"),console.log(` Config: ${G}`);let e=null;try{e=JSON.parse(Un(G,"utf-8"))}catch(n){let r=n instanceof Error?n:new Error(String(n));u.error("WORKER","Unable to parse hooks.json",{path:G},r),console.log(" Mode: Unable to parse hooks.json")}if(e){let n=Ln.filter(r=>(e?.hooks?.[r]??[]).some(o=>o.command.includes("worker-service")&&o.command.includes("windsurf")));console.log(` Events: ${n.length}/${Ln.length} registered`);for(let r of n)console.log(` - ${r}`)}let t=ae.join(process.cwd(),".windsurf","rules","claude-mem-context.md");ct(t)?console.log(" Context: Active (current workspace)"):console.log(" Context: Not yet generated for this workspace")}else console.log("User-level: Not installed"),console.log(`
264
307
  No hooks installed. Run: claude-mem windsurf install
265
- `);return console.log(""),0}async function pa(t,e){switch(t){case"install":return Ho();case"uninstall":return Ko();case"status":return Jo();default:return console.log(`
308
+ `);return console.log(""),0}async function Zu(e,t){switch(e){case"install":return Ni();case"uninstall":return Ai();case"status":return Li();default:return console.log(`
266
309
  Claude-Mem Windsurf Integration
267
310
 
268
311
  Usage: claude-mem windsurf <command>
@@ -278,33 +321,33 @@ Examples:
278
321
  claude-mem windsurf status # Check if hooks are installed
279
322
 
280
323
  For more info: https://docs.claude-mem.ai/windsurf
281
- `),0}}var Uo,k,No,Me,Wt,Wr=m(()=>{"use strict";L();Pt();Ve();qe();Uo=H.join(na(),".codeium","windsurf"),k=H.join(Uo,"hooks.json"),No=6e3,Me=H.join(B,"windsurf-projects.json"),Wt=["pre_user_prompt","post_write_code","post_run_command","post_mcp_tool_use","post_cascade_response"]});var Kr={};q(Kr,{checkOpenClawStatus:()=>Fa,findPluginManifestPath:()=>qo,findPluginSkillsDirectory:()=>Zo,findPreBuiltPluginDirectory:()=>zo,getOpenClawClaudeMemExtensionDirectory:()=>ot,getOpenClawConfigDirectory:()=>nt,getOpenClawConfigFilePath:()=>Re,getOpenClawExtensionsDirectory:()=>Xo,installOpenClawIntegration:()=>Sa,installOpenClawPlugin:()=>es,uninstallOpenClawPlugin:()=>ha});import v from"path";import{homedir as Jt}from"os";import{existsSync as Q,readFileSync as ma,writeFileSync as Yo,mkdirSync as Vo,cpSync as Gr,rmSync as ga}from"fs";function nt(){return v.join(Jt(),".openclaw")}function Xo(){return v.join(nt(),"extensions")}function ot(){return v.join(Xo(),"claude-mem")}function Re(){return v.join(nt(),"openclaw.json")}function zo(){let t=[v.join(process.env.CLAUDE_CONFIG_DIR||v.join(Jt(),".claude"),"plugins","marketplaces","thedotmack"),process.cwd()];for(let e of t){let r=v.join(e,"openclaw","dist"),o=v.join(r,"index.js");if(Q(o))return r}return null}function qo(){let t=[v.join(process.env.CLAUDE_CONFIG_DIR||v.join(Jt(),".claude"),"plugins","marketplaces","thedotmack"),process.cwd()];for(let e of t){let r=v.join(e,"openclaw","openclaw.plugin.json");if(Q(r))return r}return null}function Zo(){let t=[v.join(process.env.CLAUDE_CONFIG_DIR||v.join(Jt(),".claude"),"plugins","marketplaces","thedotmack"),process.cwd()];for(let e of t){let r=v.join(e,"openclaw","skills");if(Q(r))return r}return null}function Hr(){let t=Re();if(!Q(t))return{};try{return JSON.parse(ma(t,"utf-8"))}catch(e){let r=e instanceof Error?e:new Error(String(e));throw a.error("WORKER","Failed to parse openclaw.json",{path:t},r),r}}function Qo(t){let e=nt();Vo(e,{recursive:!0}),Yo(Re(),JSON.stringify(t,null,2)+`
282
- `,"utf-8")}function fa(t,e="openclaw",r=!0){let o=Hr();if(o.plugins||(o.plugins={}),o.plugins.slots||(o.plugins.slots={}),o.plugins.entries||(o.plugins.entries={}),o.plugins.slots.memory="claude-mem",!o.plugins.entries["claude-mem"])o.plugins.entries["claude-mem"]={enabled:!0,config:{workerPort:t,project:e,syncMemoryFile:r}};else{o.plugins.entries["claude-mem"].enabled=!0,o.plugins.entries["claude-mem"].config||(o.plugins.entries["claude-mem"].config={});let s=o.plugins.entries["claude-mem"].config;s.workerPort===void 0&&(s.workerPort=t),s.project===void 0&&(s.project=e),s.syncMemoryFile===void 0&&(s.syncMemoryFile=r)}Qo(o)}function Ea(){let t=Re();if(!Q(t))return;let e=Hr();e.plugins?.entries?.["claude-mem"]&&delete e.plugins.entries["claude-mem"],e.plugins?.slots?.memory==="claude-mem"&&delete e.plugins.slots.memory,Qo(e)}function es(){let t=zo();if(!t)return console.error("Could not find pre-built OpenClaw plugin bundle."),console.error(" Expected at: openclaw/dist/index.js"),console.error(" Ensure the npm package includes the openclaw directory."),1;let e=ot(),r=v.join(e,"dist"),o=qo(),s=Zo(),i={name:"claude-mem",version:"1.0.0",type:"module",main:"dist/index.js",openclaw:{extensions:["./dist/index.js"]}};try{return Vo(r,{recursive:!0}),Ca(t,r,e,o,s,i),0}catch(n){let u=n instanceof Error?n.message:String(n);return console.error(`Failed to install OpenClaw plugin: ${u}`),1}}function Ca(t,e,r,o,s,i){if(Gr(t,e,{recursive:!0,force:!0}),console.log(` Plugin dist copied to: ${e}`),o){let u=v.join(r,"openclaw.plugin.json");Gr(o,u,{force:!0}),console.log(` Plugin manifest copied to: ${u}`)}if(s){let u=v.join(r,"skills");Gr(s,u,{recursive:!0,force:!0}),console.log(` Skills copied to: ${u}`)}Yo(v.join(r,"package.json"),JSON.stringify(i,null,2)+`
283
- `,"utf-8");let n=x.getInt("CLAUDE_MEM_WORKER_PORT");fa(n),console.log(" Registered in openclaw.json"),a.info("OPENCLAW","Plugin installed",{destination:r})}function ha(){let t=!1,e=ot();if(Q(e))try{ga(e,{recursive:!0,force:!0}),console.log(` Removed extension: ${e}`)}catch(r){let o=r instanceof Error?r.message:String(r);console.error(` Failed to remove extension directory: ${o}`),t=!0}try{Ea(),console.log(" Unregistered from openclaw.json")}catch(r){let o=r instanceof Error?r.message:String(r);console.error(` Failed to update openclaw.json: ${o}`),t=!0}return t?1:0}function Fa(){console.log(`
324
+ `),0}}var Oi,G,Ri,at,Ln,to=w(()=>{"use strict";F();Tn();Ge();Ft();Oi=ae.join(ju(),".codeium","windsurf"),G=ae.join(Oi,"hooks.json"),Ri=6e3,at=ae.join(_,"windsurf-projects.json"),Ln=["pre_user_prompt","post_write_code","post_run_command","post_mcp_tool_use","post_cascade_response"]});var oo={};fe(oo,{checkOpenClawStatus:()=>td,findPluginManifestPath:()=>Gi,findPluginSkillsDirectory:()=>Ji,findPreBuiltPluginDirectory:()=>Fi,getOpenClawClaudeMemExtensionDirectory:()=>Vt,getOpenClawConfigDirectory:()=>Yt,getOpenClawConfigFilePath:()=>lt,getOpenClawExtensionsDirectory:()=>ji,installOpenClawIntegration:()=>nd,installOpenClawPlugin:()=>Bi,uninstallOpenClawPlugin:()=>ed});import N from"path";import{homedir as Fn}from"os";import{existsSync as ye,readFileSync as qu,writeFileSync as Ui,mkdirSync as Wi,cpSync as no,rmSync as Xu}from"fs";function Yt(){return N.join(Fn(),".openclaw")}function ji(){return N.join(Yt(),"extensions")}function Vt(){return N.join(ji(),"claude-mem")}function lt(){return N.join(Yt(),"openclaw.json")}function Fi(){let e=[N.join(process.env.CLAUDE_CONFIG_DIR||N.join(Fn(),".claude"),"plugins","marketplaces","thedotmack"),process.cwd()];for(let t of e){let n=N.join(t,"openclaw","dist"),r=N.join(n,"index.js");if(ye(r))return n}return null}function Gi(){let e=[N.join(process.env.CLAUDE_CONFIG_DIR||N.join(Fn(),".claude"),"plugins","marketplaces","thedotmack"),process.cwd()];for(let t of e){let n=N.join(t,"openclaw","openclaw.plugin.json");if(ye(n))return n}return null}function Ji(){let e=[N.join(process.env.CLAUDE_CONFIG_DIR||N.join(Fn(),".claude"),"plugins","marketplaces","thedotmack"),process.cwd()];for(let t of e){let n=N.join(t,"openclaw","skills");if(ye(n))return n}return null}function ro(){let e=lt();if(!ye(e))return{};try{return JSON.parse(qu(e,"utf-8"))}catch(t){let n=t instanceof Error?t:new Error(String(t));throw u.error("WORKER","Failed to parse openclaw.json",{path:e},n),n}}function Hi(e){let t=Yt();Wi(t,{recursive:!0}),Ui(lt(),JSON.stringify(e,null,2)+`
325
+ `,"utf-8")}function Qu(e,t="openclaw",n=!0){let r=ro();if(r.plugins||(r.plugins={}),r.plugins.slots||(r.plugins.slots={}),r.plugins.entries||(r.plugins.entries={}),r.plugins.slots.memory="claude-mem",!r.plugins.entries["claude-mem"])r.plugins.entries["claude-mem"]={enabled:!0,config:{workerPort:e,project:t,syncMemoryFile:n}};else{r.plugins.entries["claude-mem"].enabled=!0,r.plugins.entries["claude-mem"].config||(r.plugins.entries["claude-mem"].config={});let o=r.plugins.entries["claude-mem"].config;o.workerPort===void 0&&(o.workerPort=e),o.project===void 0&&(o.project=t),o.syncMemoryFile===void 0&&(o.syncMemoryFile=n)}Hi(r)}function _u(){let e=lt();if(!ye(e))return;let t=ro();t.plugins?.entries?.["claude-mem"]&&delete t.plugins.entries["claude-mem"],t.plugins?.slots?.memory==="claude-mem"&&delete t.plugins.slots.memory,Hi(t)}function Bi(){let e=Fi();if(!e)return console.error("Could not find pre-built OpenClaw plugin bundle."),console.error(" Expected at: openclaw/dist/index.js"),console.error(" Ensure the npm package includes the openclaw directory."),1;let t=Vt(),n=N.join(t,"dist"),r=Gi(),o=Ji(),s={name:"claude-mem",version:"1.0.0",type:"module",main:"dist/index.js",openclaw:{extensions:["./dist/index.js"]}};try{return Wi(n,{recursive:!0}),$u(e,n,t,r,o,s),0}catch(i){let a=i instanceof Error?i.message:String(i);return console.error(`Failed to install OpenClaw plugin: ${a}`),1}}function $u(e,t,n,r,o,s){if(no(e,t,{recursive:!0,force:!0}),console.log(` Plugin dist copied to: ${t}`),r){let a=N.join(n,"openclaw.plugin.json");no(r,a,{force:!0}),console.log(` Plugin manifest copied to: ${a}`)}if(o){let a=N.join(n,"skills");no(o,a,{recursive:!0,force:!0}),console.log(` Skills copied to: ${a}`)}Ui(N.join(n,"package.json"),JSON.stringify(s,null,2)+`
326
+ `,"utf-8");let i=U.getInt("CLAUDE_MEM_WORKER_PORT");Qu(i),console.log(" Registered in openclaw.json"),u.info("OPENCLAW","Plugin installed",{destination:n})}function ed(){let e=!1,t=Vt();if(ye(t))try{Xu(t,{recursive:!0,force:!0}),console.log(` Removed extension: ${t}`)}catch(n){let r=n instanceof Error?n.message:String(n);console.error(` Failed to remove extension directory: ${r}`),e=!0}try{_u(),console.log(" Unregistered from openclaw.json")}catch(n){let r=n instanceof Error?n.message:String(n);console.error(` Failed to update openclaw.json: ${r}`),e=!0}return e?1:0}function td(){console.log(`
284
327
  Claude-Mem OpenClaw Integration Status
285
- `);let t=nt(),e=ot(),r=Re(),o=v.join(e,"dist","index.js");if(console.log(`Config directory: ${t}`),console.log(` Exists: ${Q(t)?"yes":"no"}`),console.log(""),console.log(`Extension directory: ${e}`),console.log(` Exists: ${Q(e)?"yes":"no"}`),console.log(` Plugin entry: ${Q(o)?"yes":"no"}`),console.log(""),console.log(`Config (openclaw.json): ${r}`),Q(r)){let s=Hr(),i=s.plugins?.entries?.["claude-mem"]!==void 0,n=s.plugins?.entries?.["claude-mem"]?.enabled===!0,u=s.plugins?.slots?.memory==="claude-mem";if(console.log(" Exists: yes"),console.log(` Registered: ${i?"yes":"no"}`),console.log(` Enabled: ${n?"yes":"no"}`),console.log(` Memory slot: ${u?"yes":"no"}`),i){let c=s.plugins.entries["claude-mem"].config;c&&(console.log(` Worker port: ${c.workerPort??"default"}`),console.log(` Project: ${c.project??"default"}`),console.log(` Sync MEMORY.md: ${c.syncMemoryFile??"default"}`))}}else console.log(" Exists: no");return console.log(""),0}async function Sa(){console.log(`
328
+ `);let e=Yt(),t=Vt(),n=lt(),r=N.join(t,"dist","index.js");if(console.log(`Config directory: ${e}`),console.log(` Exists: ${ye(e)?"yes":"no"}`),console.log(""),console.log(`Extension directory: ${t}`),console.log(` Exists: ${ye(t)?"yes":"no"}`),console.log(` Plugin entry: ${ye(r)?"yes":"no"}`),console.log(""),console.log(`Config (openclaw.json): ${n}`),ye(n)){let o=ro(),s=o.plugins?.entries?.["claude-mem"]!==void 0,i=o.plugins?.entries?.["claude-mem"]?.enabled===!0,a=o.plugins?.slots?.memory==="claude-mem";if(console.log(" Exists: yes"),console.log(` Registered: ${s?"yes":"no"}`),console.log(` Enabled: ${i?"yes":"no"}`),console.log(` Memory slot: ${a?"yes":"no"}`),s){let c=o.plugins.entries["claude-mem"].config;c&&(console.log(` Worker port: ${c.workerPort??"default"}`),console.log(` Project: ${c.project??"default"}`),console.log(` Sync MEMORY.md: ${c.syncMemoryFile??"default"}`))}}else console.log(" Exists: no");return console.log(""),0}async function nd(){console.log(`
286
329
  Installing Claude-Mem for OpenClaw...
287
- `);let t=es();if(t!==0)return t;let e=ot();return console.log(`
330
+ `);let e=Bi();if(e!==0)return e;let t=Vt();return console.log(`
288
331
  Installation complete!
289
332
 
290
- Plugin installed to: ${e}
291
- Config updated: ${Re()}
333
+ Plugin installed to: ${t}
334
+ Config updated: ${lt()}
292
335
 
293
336
  Next steps:
294
337
  1. Start claude-mem worker: npx claude-mem start
295
338
  2. Restart OpenClaw to load the plugin
296
339
  3. Memory capture is automatic from then on
297
- `),0}var Jr=m(()=>{"use strict";L();me()});import{existsSync as Ad,readFileSync as bd,writeFileSync as Md,mkdirSync as Id}from"fs";import{homedir as ts}from"os";import{join as rs,dirname as Pd}from"path";var ge,st,ya,Yt,ns=m(()=>{"use strict";ge=rs(ts(),".claude-mem","transcript-watch.json"),st=rs(ts(),".claude-mem","transcript-watch-state.json"),ya={name:"codex",version:"0.3",description:"Schema for Codex session JSONL files under ~/.codex/sessions.",events:[{name:"session-meta",match:{path:"type",equals:"session_meta"},action:"session_context",fields:{sessionId:"payload.id",cwd:"payload.cwd"}},{name:"turn-context",match:{path:"type",equals:"turn_context"},action:"session_context",fields:{cwd:"payload.cwd"}},{name:"user-message",match:{path:"payload.type",equals:"user_message"},action:"session_init",fields:{prompt:"payload.message"}},{name:"assistant-message",match:{path:"payload.type",equals:"agent_message"},action:"assistant_message",fields:{message:"payload.message"}},{name:"tool-use",match:{path:"payload.type",in:["function_call","custom_tool_call","web_search_call","exec_command"]},action:"tool_use",fields:{toolId:"payload.call_id",toolName:{coalesce:["payload.name","payload.type",{value:"web_search"}]},toolInput:{coalesce:["payload.arguments","payload.input","payload.command","payload.action"]}}},{name:"tool-result",match:{path:"payload.type",in:["function_call_output","custom_tool_call_output","exec_command_output"]},action:"tool_result",fields:{toolId:"payload.call_id",toolResponse:"payload.output"}},{name:"session-end",match:{path:"payload.type",in:["turn_aborted","turn_completed"]},action:"session_end"}]},Yt={version:1,schemas:{codex:ya},watches:[{name:"codex",path:"~/.codex/sessions/**/*.jsonl",schema:"codex",startAtEnd:!0,context:{mode:"agents",updateOn:["session_start","session_end"]}}],stateFile:st}});var zr={};q(zr,{installCodexCli:()=>ba,uninstallCodexCli:()=>Ia});import Vr from"path";import{homedir as os}from"os";import{existsSync as Xr,readFileSync as Yr,writeFileSync as Vt,mkdirSync as wa}from"fs";function ss(){let t=ge;if(!Xr(t))return{version:1,schemas:{},watches:[],stateFile:st};try{let e=Yr(t,"utf-8"),r=JSON.parse(e);return r.version||(r.version=1),r.watches||(r.watches=[]),r.schemas||(r.schemas={}),r.stateFile||(r.stateFile=st),r}catch(e){e instanceof Error?a.error("WORKER","Corrupt transcript-watch.json, creating backup",{path:t},e):a.error("WORKER","Corrupt transcript-watch.json, creating backup",{path:t},new Error(String(e)));let r=`${t}.backup.${Date.now()}`;return Vt(r,Yr(t)),console.warn(` Backed up corrupt transcript-watch.json to ${r}`),{version:1,schemas:{},watches:[],stateFile:st}}}function xa(t){let e={...t};e.schemas={...e.schemas};let r=Yt.schemas?.[$e];r&&(e.schemas[$e]=r);let o=Yt.watches.find(s=>s.name===$e);if(o){let s=e.watches.findIndex(i=>i.name===$e);s!==-1?e.watches[s]=o:e.watches.push(o)}return e}function is(t){wa(_a,{recursive:!0}),Vt(ge,JSON.stringify(t,null,2)+`
298
- `)}function ka(){if(!Xr(it))return;let t="<claude-mem-context>",e="</claude-mem-context>";try{Aa(t,e)}catch(r){let o=r instanceof Error?r.message:String(r);a.warn("WORKER","Failed to clean AGENTS.md context",{error:o})}}function Aa(t,e){let r=Yr(it,"utf-8"),o=r.indexOf(t),s=r.indexOf(e);if(o===-1||s===-1)return;let i=r.substring(0,o).replace(/\n+$/,""),n=r.substring(s+e.length).replace(/^\n+/,""),u=(i+(n?`
340
+ `),0}var so=w(()=>{"use strict";F();Pe()});import{existsSync as bh,readFileSync as kh,writeFileSync as Mh,mkdirSync as xh}from"fs";import{homedir as Ki}from"os";import{join as Yi,dirname as Ih}from"path";var He,zt,rd,Gn,Vi=w(()=>{"use strict";He=Yi(Ki(),".claude-mem","transcript-watch.json"),zt=Yi(Ki(),".claude-mem","transcript-watch-state.json"),rd={name:"codex",version:"0.3",description:"Schema for Codex session JSONL files under ~/.codex/sessions.",events:[{name:"session-meta",match:{path:"type",equals:"session_meta"},action:"session_context",fields:{sessionId:"payload.id",cwd:"payload.cwd"}},{name:"turn-context",match:{path:"type",equals:"turn_context"},action:"session_context",fields:{cwd:"payload.cwd"}},{name:"user-message",match:{path:"payload.type",equals:"user_message"},action:"session_init",fields:{prompt:"payload.message"}},{name:"assistant-message",match:{path:"payload.type",equals:"agent_message"},action:"assistant_message",fields:{message:"payload.message"}},{name:"tool-use",match:{path:"payload.type",in:["function_call","custom_tool_call","web_search_call","exec_command"]},action:"tool_use",fields:{toolId:"payload.call_id",toolName:{coalesce:["payload.name","payload.type",{value:"web_search"}]},toolInput:{coalesce:["payload.arguments","payload.input","payload.command","payload.action"]}}},{name:"tool-result",match:{path:"payload.type",in:["function_call_output","custom_tool_call_output","exec_command_output"]},action:"tool_result",fields:{toolId:"payload.call_id",toolResponse:"payload.output"}},{name:"session-end",match:{path:"payload.type",in:["turn_aborted","turn_completed"]},action:"session_end"}]},Gn={version:1,schemas:{codex:rd},watches:[{name:"codex",path:"~/.codex/sessions/**/*.jsonl",schema:"codex",startAtEnd:!0,context:{mode:"agents",updateOn:["session_start","session_end"]}}],stateFile:zt}});var lo={};fe(lo,{installCodexCli:()=>ud,uninstallCodexCli:()=>pd});import ao from"path";import{homedir as zi}from"os";import{existsSync as co,readFileSync as io,writeFileSync as Jn,mkdirSync as od}from"fs";function Zi(){let e=He;if(!co(e))return{version:1,schemas:{},watches:[],stateFile:zt};try{let t=io(e,"utf-8"),n=JSON.parse(t);return n.version||(n.version=1),n.watches||(n.watches=[]),n.schemas||(n.schemas={}),n.stateFile||(n.stateFile=zt),n}catch(t){t instanceof Error?u.error("WORKER","Corrupt transcript-watch.json, creating backup",{path:e},t):u.error("WORKER","Corrupt transcript-watch.json, creating backup",{path:e},new Error(String(t)));let n=`${e}.backup.${Date.now()}`;return Jn(n,io(e)),console.warn(` Backed up corrupt transcript-watch.json to ${n}`),{version:1,schemas:{},watches:[],stateFile:zt}}}function ad(e){let t={...e};t.schemas={...t.schemas};let n=Gn.schemas?.[ut];n&&(t.schemas[ut]=n);let r=Gn.watches.find(o=>o.name===ut);if(r){let o=t.watches.findIndex(s=>s.name===ut);o!==-1?t.watches[o]=r:t.watches.push(r)}return t}function qi(e){od(id,{recursive:!0}),Jn(He,JSON.stringify(e,null,2)+`
341
+ `)}function cd(){if(!co(Zt))return;let e="<claude-mem-context>",t="</claude-mem-context>";try{ld(e,t)}catch(n){let r=n instanceof Error?n.message:String(n);u.warn("WORKER","Failed to clean AGENTS.md context",{error:r})}}function ld(e,t){let n=io(Zt,"utf-8"),r=n.indexOf(e),o=n.indexOf(t);if(r===-1||o===-1)return;let s=n.substring(0,r).replace(/\n+$/,""),i=n.substring(o+t.length).replace(/^\n+/,""),a=(s+(i?`
299
342
 
300
- `+n:"")).trim();u?Vt(it,u+`
301
- `):Vt(it,""),console.log(` Removed legacy global context from ${it}`)}async function ba(){console.log(`
343
+ `+i:"")).trim();a?Jn(Zt,a+`
344
+ `):Jn(Zt,""),console.log(` Removed legacy global context from ${Zt}`)}async function ud(){console.log(`
302
345
  Installing Claude-Mem for Codex CLI (transcript watching)...
303
- `);let t=ss(),e=xa(t);try{return Ma(e),0}catch(r){let o=r instanceof Error?r.message:String(r);return console.error(`
304
- Installation failed: ${o}`),1}}function Ma(t){is(t),console.log(` Updated ${ge}`),console.log(" Watch path: ~/.codex/sessions/**/*.jsonl"),console.log(` Schema: codex (v${Yt.schemas?.codex?.version??"?"})`),us(),console.log(`
346
+ `);let e=Zi(),t=ad(e);try{return dd(t),0}catch(n){let r=n instanceof Error?n.message:String(n);return console.error(`
347
+ Installation failed: ${r}`),1}}function dd(e){qi(e),console.log(` Updated ${He}`),console.log(" Watch path: ~/.codex/sessions/**/*.jsonl"),console.log(` Schema: codex (v${Gn.schemas?.codex?.version??"?"})`),Xi(),console.log(`
305
348
  Installation complete!
306
349
 
307
- Transcript watch config: ${ge}
350
+ Transcript watch config: ${He}
308
351
  Context files: <workspace>/AGENTS.md
309
352
 
310
353
  How it works:
@@ -315,33 +358,33 @@ How it works:
315
358
  Next steps:
316
359
  1. Start claude-mem worker: npx claude-mem start
317
360
  2. Use Codex CLI as usual -- memory capture is automatic!
318
- `)}function Ia(){if(console.log(`
361
+ `)}function pd(){if(console.log(`
319
362
  Uninstalling Claude-Mem Codex CLI integration...
320
- `),Xr(ge)){let t=ss();t.watches=t.watches.filter(e=>e.name!==$e),t.schemas&&delete t.schemas[$e];try{is(t),console.log(` Removed codex watch from ${ge}`)}catch(e){let r=e instanceof Error?e.message:String(e);return console.error(`
321
- Uninstallation failed: ${r}`),1}}else console.log(" No transcript-watch.json found -- nothing to remove.");return us(),console.log(`
363
+ `),co(He)){let e=Zi();e.watches=e.watches.filter(t=>t.name!==ut),e.schemas&&delete e.schemas[ut];try{qi(e),console.log(` Removed codex watch from ${He}`)}catch(t){let n=t instanceof Error?t.message:String(t);return console.error(`
364
+ Uninstallation failed: ${n}`),1}}else console.log(" No transcript-watch.json found -- nothing to remove.");return Xi(),console.log(`
322
365
  Uninstallation complete!`),console.log(`Restart claude-mem worker to apply changes.
323
- `),0}var va,it,_a,$e,us,qr=m(()=>{"use strict";L();ns();va=Vr.join(os(),".codex"),it=Vr.join(va,"AGENTS.md"),_a=Vr.join(os(),".claude-mem"),$e="codex";us=ka});var ps={};q(ps,{MCP_IDE_INSTALLERS:()=>Ka,installGooseMcpIntegration:()=>ds});import W from"path";import{homedir as ct}from"os";import{existsSync as ls,readFileSync as Ra,writeFileSync as at,mkdirSync as Ds}from"fs";function Pa(t){return{command:process.execPath,args:[t]}}function Ta(t,e,r="mcpServers"){let o=W.dirname(t);Ds(o,{recursive:!0});let s=J(t,{});s[r]||(s[r]={}),s[r]["claude-mem"]=Pa(e),at(t,JSON.stringify(s,null,2)+`
324
- `)}function ut(t){return async()=>{console.log(`
325
- Installing Claude-Mem MCP integration for ${t.ideLabel}...
326
- `);let e=ze();if(!e)return console.error("Could not find MCP server script"),console.error(" Expected at: ~/.claude/plugins/marketplaces/thedotmack/plugin/scripts/mcp-server.cjs"),1;let r=t.configPath,o=t.ideId==="warp"&&!ls(W.dirname(r)),s;t.contextFile&&(s=t.contextFile.path);try{return Oa(t,r,e,o,s),0}catch(i){let n=i instanceof Error?i.message:String(i);return console.error(`
327
- Installation failed: ${n}`),1}}}function Oa(t,e,r,o,s){o?console.log(" Note: ~/.warp/ not found. MCP may need to be configured via Warp Drive UI."):(Ta(e,r,t.configKey),console.log(` MCP config written to: ${e}`)),s&&(jt(s,$a),console.log(` Context placeholder written to: ${s}`));let i=[`
366
+ `),0}var sd,Zt,id,ut,Xi,uo=w(()=>{"use strict";F();Vi();sd=ao.join(zi(),".codex"),Zt=ao.join(sd,"AGENTS.md"),id=ao.join(zi(),".claude-mem"),ut="codex";Xi=cd});var na={};fe(na,{MCP_IDE_INSTALLERS:()=>Md,installGooseMcpIntegration:()=>ta});import ce from"path";import{homedir as Bn}from"os";import{existsSync as $i,readFileSync as md,writeFileSync as qt,mkdirSync as ea}from"fs";function gd(e){return{command:process.execPath,args:[e]}}function hd(e,t,n="mcpServers"){let r=ce.dirname(e);ea(r,{recursive:!0});let o=le(e,{});o[n]||(o[n]={}),o[n]["claude-mem"]=gd(t),qt(e,JSON.stringify(o,null,2)+`
367
+ `)}function Hn(e){return async()=>{console.log(`
368
+ Installing Claude-Mem MCP integration for ${e.ideLabel}...
369
+ `);let t=jt();if(!t)return console.error("Could not find MCP server script"),console.error(" Expected at: ~/.claude/plugins/marketplaces/thedotmack/plugin/scripts/mcp-server.cjs"),1;let n=e.configPath,r=e.ideId==="warp"&&!$i(ce.dirname(n)),o;e.contextFile&&(o=e.contextFile.path);try{return Sd(e,n,t,r,o),0}catch(s){let i=s instanceof Error?s.message:String(s);return console.error(`
370
+ Installation failed: ${i}`),1}}}function Sd(e,t,n,r,o){r?console.log(" Note: ~/.warp/ not found. MCP may need to be configured via Warp Drive UI."):(hd(t,n,e.configKey),console.log(` MCP config written to: ${t}`)),o&&(Nn(o,fd),console.log(` Context placeholder written to: ${o}`));let s=[`
328
371
  Installation complete!
329
- `];i.push(`MCP config: ${e}`),s&&i.push(`Context: ${s}`),i.push(""),i.push("Note: This is an MCP-only integration providing search tools and context."),i.push(`Transcript capture is not available for ${t.ideLabel}.`),t.ideId==="warp"&&i.push("If MCP config via file is not supported, configure MCP through Warp Drive UI."),i.push(""),i.push("Next steps:"),i.push(" 1. Start claude-mem worker: npx claude-mem start"),i.push(` 2. Restart ${t.ideLabel} to pick up the MCP server`),i.push(""),console.log(i.join(`
330
- `))}function Wa(){return W.join(ct(),".config","goose","config.yaml")}function Ga(t){return t.includes("claude-mem:")&&t.includes("mcpServers:")}function as(t){return["mcpServers:"," claude-mem:",` command: ${process.execPath}`," args:",` - ${t}`].join(`
331
- `)}function cs(t){return[" claude-mem:",` command: ${process.execPath}`," args:",` - ${t}`].join(`
332
- `)}async function ds(){console.log(`
372
+ `];s.push(`MCP config: ${t}`),o&&s.push(`Context: ${o}`),s.push(""),s.push("Note: This is an MCP-only integration providing search tools and context."),s.push(`Transcript capture is not available for ${e.ideLabel}.`),e.ideId==="warp"&&s.push("If MCP config via file is not supported, configure MCP through Warp Drive UI."),s.push(""),s.push("Next steps:"),s.push(" 1. Start claude-mem worker: npx claude-mem start"),s.push(` 2. Restart ${e.ideLabel} to pick up the MCP server`),s.push(""),console.log(s.join(`
373
+ `))}function Cd(){return ce.join(Bn(),".config","goose","config.yaml")}function bd(e){return e.includes("claude-mem:")&&e.includes("mcpServers:")}function Qi(e){return["mcpServers:"," claude-mem:",` command: ${process.execPath}`," args:",` - ${e}`].join(`
374
+ `)}function _i(e){return[" claude-mem:",` command: ${process.execPath}`," args:",` - ${e}`].join(`
375
+ `)}async function ta(){console.log(`
333
376
  Installing Claude-Mem MCP integration for Goose...
334
- `);let t=ze();if(!t)return console.error("Could not find MCP server script"),console.error(" Expected at: ~/.claude/plugins/marketplaces/thedotmack/plugin/scripts/mcp-server.cjs"),1;let e=Wa(),r=W.dirname(e);try{return Ds(r,{recursive:!0}),Ha(e,t),0}catch(o){let s=o instanceof Error?o.message:String(o);return console.error(`
335
- Installation failed: ${s}`),1}}function Ha(t,e){if(ls(t)){let r=Ra(t,"utf-8");if(Ga(r)){let o=/( {2}claude-mem:\n(?:.*\n)*?(?= {2}\S|\n\n|^\S|$))/m,s=cs(e)+`
336
- `;if(!o.test(r))throw new Error("Found mcpServers/claude-mem markers but could not locate a replaceable claude-mem block");r=r.replace(o,s),at(t,r),console.log(` Updated existing claude-mem entry in: ${t}`)}else if(r.includes("mcpServers:")){let s=r.indexOf("mcpServers:")+11,i=`
337
- `+cs(e);r=r.slice(0,s)+i+r.slice(s),at(t,r),console.log(` Added claude-mem to existing mcpServers in: ${t}`)}else{let o=`
338
- `+as(e)+`
339
- `;r=r.trimEnd()+`
340
- `+o,at(t,r),console.log(` Appended mcpServers section to: ${t}`)}}else{let r=as(e)+`
341
- `;at(t,r),console.log(` Created config with MCP server: ${t}`)}console.log(`
377
+ `);let e=jt();if(!e)return console.error("Could not find MCP server script"),console.error(" Expected at: ~/.claude/plugins/marketplaces/thedotmack/plugin/scripts/mcp-server.cjs"),1;let t=Cd(),n=ce.dirname(t);try{return ea(n,{recursive:!0}),kd(t,e),0}catch(r){let o=r instanceof Error?r.message:String(r);return console.error(`
378
+ Installation failed: ${o}`),1}}function kd(e,t){if($i(e)){let n=md(e,"utf-8");if(bd(n)){let r=/( {2}claude-mem:\n(?:.*\n)*?(?= {2}\S|\n\n|^\S|$))/m,o=_i(t)+`
379
+ `;if(!r.test(n))throw new Error("Found mcpServers/claude-mem markers but could not locate a replaceable claude-mem block");n=n.replace(r,o),qt(e,n),console.log(` Updated existing claude-mem entry in: ${e}`)}else if(n.includes("mcpServers:")){let o=n.indexOf("mcpServers:")+11,s=`
380
+ `+_i(t);n=n.slice(0,o)+s+n.slice(o),qt(e,n),console.log(` Added claude-mem to existing mcpServers in: ${e}`)}else{let r=`
381
+ `+Qi(t)+`
382
+ `;n=n.trimEnd()+`
383
+ `+r,qt(e,n),console.log(` Appended mcpServers section to: ${e}`)}}else{let n=Qi(t)+`
384
+ `;qt(e,n),console.log(` Created config with MCP server: ${e}`)}console.log(`
342
385
  Installation complete!
343
386
 
344
- MCP config: ${t}
387
+ MCP config: ${e}
345
388
 
346
389
  Note: This is an MCP-only integration providing search tools and context.
347
390
  Transcript capture is not available for Goose.
@@ -349,42 +392,54 @@ Transcript capture is not available for Goose.
349
392
  Next steps:
350
393
  1. Start claude-mem worker: npx claude-mem start
351
394
  2. Restart Goose to pick up the MCP server
352
- `)}var $a,La,Ba,Na,ja,Ua,Ka,ms=m(()=>{"use strict";qe();Oe();Pr();$a=`# claude-mem: Cross-Session Memory
395
+ `)}var fd,Ed,yd,wd,vd,Md,ra=w(()=>{"use strict";Ft();St();zr();fd=`# claude-mem: Cross-Session Memory
353
396
 
354
397
  *No context yet. Complete your first session and context will appear here.*
355
398
 
356
- Use claude-mem's MCP search tools for manual memory queries.`;La={ideId:"copilot-cli",ideLabel:"Copilot CLI",configPath:W.join(ct(),".github","copilot","mcp.json"),configKey:"servers",contextFile:{path:W.join(process.cwd(),".github","copilot-instructions.md"),isWorkspaceRelative:!0}},Ba={ideId:"antigravity",ideLabel:"Antigravity",configPath:W.join(ct(),".gemini","antigravity","mcp_config.json"),configKey:"mcpServers",contextFile:{path:W.join(process.cwd(),".agents","rules","claude-mem-context.md"),isWorkspaceRelative:!0}},Na={ideId:"crush",ideLabel:"Crush",configPath:W.join(ct(),".config","crush","mcp.json"),configKey:"mcpServers"},ja={ideId:"roo-code",ideLabel:"Roo Code",configPath:W.join(process.cwd(),".roo","mcp.json"),configKey:"mcpServers",contextFile:{path:W.join(process.cwd(),".roo","rules","claude-mem-context.md"),isWorkspaceRelative:!0}},Ua={ideId:"warp",ideLabel:"Warp",configPath:W.join(ct(),".warp","mcp.json"),configKey:"mcpServers",contextFile:{path:W.join(process.cwd(),"WARP.md"),isWorkspaceRelative:!0}};Ka={"copilot-cli":ut(La),antigravity:ut(Ba),goose:ds,crush:ut(Na),"roo-code":ut(ja),warp:ut(Ua)}});var Xt={};q(Xt,{runInstallCommand:()=>nc});import{execSync as Zr}from"child_process";import{cpSync as gs,existsSync as lt,readFileSync as Ja,rmSync as fs}from"fs";import{join as Pe}from"path";async function Ya(t){if(ce)await vt(t);else for(let e of t){let r=await e.task(o=>console.log(` ${o}`));console.log(` ${r}`)}}function Va(){let t=J(he(),{});t.thedotmack={source:{source:"github",repo:"thedotmack/claude-mem"},installLocation:R(),lastUpdated:new Date().toISOString(),autoUpdate:!0},Ne(De()),se(he(),t)}function Xa(t){let e=J(Fe(),{});e.version||(e.version=2),e.plugins||(e.plugins={});let r=tr(t),o=new Date().toISOString();e.plugins["claude-mem@thedotmack"]=[{scope:"user",installPath:r,version:t,installedAt:o,lastUpdated:o}],se(Fe(),e)}function za(){let t=J(Se(),{});t.enabledPlugins||(t.enabledPlugins={}),t.enabledPlugins["claude-mem@thedotmack"]=!0,se(Se(),t)}async function qa(t){let e=[];for(let r of t)switch(r){case"claude-code":{try{Zr("claude plugin marketplace add thedotmack/claude-mem && claude plugin install claude-mem",{stdio:"inherit"}),E.success("Claude Code: plugin installed via CLI.")}catch(o){console.error("[install] Claude Code plugin install error:",o instanceof Error?o.message:String(o)),E.error("Claude Code: plugin install failed. Is `claude` CLI on your PATH?"),e.push(r)}break}case"cursor":{let{installCursorHooks:o,configureCursorMcp:s}=await Promise.resolve().then(()=>(qe(),Ao));await o("user")===0?s("user")===0?E.success("Cursor: hooks + MCP installed."):E.success("Cursor: hooks installed (MCP setup failed \u2014 run `npx claude-mem cursor mcp` to retry)."):(E.error("Cursor: hook installation failed."),e.push(r));break}case"gemini-cli":{let{installGeminiCliHooks:o}=await Promise.resolve().then(()=>(Rr(),Ir));await o()===0?E.success("Gemini CLI: hooks installed."):(E.error("Gemini CLI: hook installation failed."),e.push(r));break}case"opencode":{let{installOpenCodeIntegration:o}=await Promise.resolve().then(()=>(Br(),Lr));await o()===0?E.success("OpenCode: plugin installed."):(E.error("OpenCode: plugin installation failed."),e.push(r));break}case"windsurf":{let{installWindsurfHooks:o}=await Promise.resolve().then(()=>(Wr(),Ur));await o()===0?E.success("Windsurf: hooks installed."):(E.error("Windsurf: hook installation failed."),e.push(r));break}case"openclaw":{let{installOpenClawIntegration:o}=await Promise.resolve().then(()=>(Jr(),Kr));await o()===0?E.success("OpenClaw: plugin installed."):(E.error("OpenClaw: plugin installation failed."),e.push(r));break}case"codex-cli":{let{installCodexCli:o}=await Promise.resolve().then(()=>(qr(),zr));await o()===0?E.success("Codex CLI: transcript watching configured."):(E.error("Codex CLI: integration setup failed."),e.push(r));break}case"copilot-cli":case"antigravity":case"goose":case"crush":case"roo-code":case"warp":{let{MCP_IDE_INSTALLERS:o}=await Promise.resolve().then(()=>(ms(),ps)),s=o[r];if(s){let i=await s(),c=Je().find(D=>D.id===r)?.label??r;i===0?E.success(`${c}: MCP integration installed.`):(E.error(`${c}: MCP integration failed.`),e.push(r))}break}default:{let s=Je().find(i=>i.id===r);s&&!s.supported&&E.warn(`Support for ${s.label} coming soon.`);break}}return e}async function Za(){let e=Je().filter(s=>s.detected);if(e.length===0)return E.warn("No supported IDEs detected. Installing for Claude Code by default."),["claude-code"];let r=e.map(s=>({value:s.id,label:s.label,hint:s.supported?s.hint:"coming soon"})),o=await Ln({message:"Which IDEs do you use?",options:r,initialValues:[],required:!0});return ue(o)&&(He("Installation cancelled."),process.exit(0)),o}function Qa(){let t=R(),e=mt();Ne(t);let r=["plugin","package.json","package-lock.json","node_modules","openclaw","dist","LICENSE","README.md","CHANGELOG.md"];for(let o of r){let s=Pe(e,o),i=Pe(t,o);lt(s)&&(lt(i)&&fs(i,{recursive:!0,force:!0}),gs(s,i,{recursive:!0,force:!0}))}}function ec(t){let e=rr(),r=tr(t);fs(r,{recursive:!0,force:!0}),Ne(r),gs(e,r,{recursive:!0,force:!0})}function tc(){let t=R(),e=Pe(t,"package.json");lt(e)&&Zr("npm install --production",{cwd:t,stdio:"pipe",encoding:"utf8",...te?{shell:process.env.ComSpec??"cmd.exe"}:{}})}function rc(){let t=Pe(R(),"plugin","scripts","smart-install.js");if(!lt(t))return E.warn("smart-install.js not found \u2014 skipping Bun/uv auto-install."),!1;try{return Zr(`node "${t}"`,{stdio:"inherit",encoding:"utf8",...te?{shell:process.env.ComSpec??"cmd.exe"}:{}}),!0}catch(e){return console.warn("[install] smart-install error:",e instanceof Error?e.message:String(e)),E.warn("smart-install encountered an issue. You may need to install Bun/uv manually."),!1}}async function nc(t={}){let e=Be();ce?wt(C.default.bgCyan(C.default.black(" claude-mem install "))):console.log("claude-mem install"),E.info(`Version: ${C.default.cyan(e)}`),E.info(`Platform: ${process.platform} (${process.arch})`);let r=R();if(lt(Pe(r,"plugin",".claude-plugin","plugin.json"))){try{let g=JSON.parse(Ja(Pe(r,"plugin",".claude-plugin","plugin.json"),"utf-8"));E.warn(`Existing installation detected (v${g.version??"unknown"}).`)}catch(g){console.warn("[install] Failed to read existing plugin version:",g instanceof Error?g.message:String(g)),E.warn("Existing installation detected.")}if(process.stdin.isTTY){let g=await We({message:"Overwrite existing installation?",initialValue:!0});(ue(g)||!g)&&(He("Installation cancelled."),process.exit(0))}}let s;if(t.ide){s=[t.ide];let g=Je(),h=g.find(N=>N.id===t.ide);h&&!h.supported&&(E.error(`Support for ${h.label} coming soon.`),process.exit(1)),h||(E.error(`Unknown IDE: ${t.ide}`),E.info(`Available IDEs: ${g.map(N=>N.id).join(", ")}`),process.exit(1))}else process.stdin.isTTY?s=await Za():s=["claude-code"];if(s.some(g=>g!=="claude-code")){let g=x.get("CLAUDE_MEM_WORKER_PORT");try{(await _t(g,1e4)).workerWasRunning&&E.info("Stopped running worker before overwrite.")}catch(h){console.warn("[install] Pre-overwrite worker shutdown failed:",h instanceof Error?h.message:String(h))}await Ya([{title:"Copying plugin files",task:async h=>(h("Copying to marketplace directory..."),Qa(),`Plugin files copied ${C.default.green("OK")}`)},{title:"Caching plugin version",task:async h=>(h(`Caching v${e}...`),ec(e),`Plugin cached (v${e}) ${C.default.green("OK")}`)},{title:"Registering marketplace",task:async()=>(Va(),`Marketplace registered ${C.default.green("OK")}`)},{title:"Registering plugin",task:async()=>(Xa(e),`Plugin registered ${C.default.green("OK")}`)},{title:"Enabling plugin in Claude settings",task:async()=>(za(),`Plugin enabled ${C.default.green("OK")}`)},{title:"Installing dependencies",task:async h=>{h("Running npm install...");try{return tc(),`Dependencies installed ${C.default.green("OK")}`}catch(N){return console.warn("[install] npm install error:",N instanceof Error?N.message:String(N)),`Dependencies may need manual install ${C.default.yellow("!")}`}}},{title:"Setting up Bun and uv",task:async h=>(h("Running smart-install..."),rc()?`Runtime dependencies ready ${C.default.green("OK")}`:`Runtime setup may need attention ${C.default.yellow("!")}`)}])}let n=await qa(s),u=n.length>0?"Installation Partial":"Installation Complete",c=[`Version: ${C.default.cyan(e)}`,`Plugin dir: ${C.default.cyan(r)}`,`IDEs: ${C.default.cyan(s.join(", "))}`];n.length>0&&c.push(`Failed: ${C.default.red(n.join(", "))}`),ce?Ge(c.join(`
357
- `),u):(console.log(`
358
- ${u}`),c.forEach(g=>console.log(` ${g}`)));let D=x.get("CLAUDE_MEM_WORKER_PORT"),d=D,p=!1;try{let g=await fetch(`http://127.0.0.1:${D}/api/health`,{signal:AbortSignal.timeout(3e3)});if(g.ok){p=!0;try{let h=await g.json();h&&(typeof h.port=="number"||typeof h.port=="string")&&(d=h.port)}catch{}}}catch{}let _=["Open Claude Code and start a conversation -- memory is automatic!",p?`Worker port: ${C.default.cyan(String(d))}`:`Worker port: ${C.default.cyan(String(D))} (worker not yet ready -- still starting up; check ${C.default.bold("claude-mem status")} later)`,`View your memories: ${C.default.underline(`http://localhost:${d}`)}`,`Search past work: use ${C.default.bold("/mem-search")} in Claude Code`,`Start worker: ${C.default.bold("npx claude-mem start")}`,`Note: Close all Claude Code sessions before uninstalling, or ${C.default.cyan("~/.claude-mem")} will be recreated by active hooks.`];ce?(Ge(_.join(`
359
- `),"Next Steps"),n.length>0?pe(C.default.yellow("claude-mem installed with some IDE setup failures.")):pe(C.default.green("claude-mem installed successfully!"))):(console.log(`
360
- Next Steps`),_.forEach(g=>console.log(` ${g}`)),n.length>0?(console.log(`
399
+ Use claude-mem's MCP search tools for manual memory queries.`;Ed={ideId:"copilot-cli",ideLabel:"Copilot CLI",configPath:ce.join(Bn(),".github","copilot","mcp.json"),configKey:"servers",contextFile:{path:ce.join(process.cwd(),".github","copilot-instructions.md"),isWorkspaceRelative:!0}},yd={ideId:"antigravity",ideLabel:"Antigravity",configPath:ce.join(Bn(),".gemini","antigravity","mcp_config.json"),configKey:"mcpServers",contextFile:{path:ce.join(process.cwd(),".agents","rules","claude-mem-context.md"),isWorkspaceRelative:!0}},wd={ideId:"roo-code",ideLabel:"Roo Code",configPath:ce.join(process.cwd(),".roo","mcp.json"),configKey:"mcpServers",contextFile:{path:ce.join(process.cwd(),".roo","rules","claude-mem-context.md"),isWorkspaceRelative:!0}},vd={ideId:"warp",ideLabel:"Warp",configPath:ce.join(Bn(),".warp","mcp.json"),configKey:"mcpServers",contextFile:{path:ce.join(process.cwd(),"WARP.md"),isWorkspaceRelative:!0}};Md={"copilot-cli":Hn(Ed),antigravity:Hn(yd),goose:ta,"roo-code":Hn(wd),warp:Hn(vd)}});var Yn={};fe(Yn,{runInstallCommand:()=>Jd,runRepairCommand:()=>Hd});import{execSync as xd,spawn as Td}from"child_process";import{cpSync as oa,existsSync as me,mkdirSync as sa,readFileSync as po,rmSync as ia,writeFileSync as aa}from"fs";import{homedir as ca}from"os";import{dirname as la,join as ee}from"path";function pt(e){return U.loadFromFile(Sn)[e]}async function Kn(e){if(W)await gn(e);else for(let t of e){let n=await t.task(r=>console.log(` ${r}`));console.log(` ${n}`)}}async function Ue(e){if(!W)return{result:await e(),output:""};let t="",n=(...o)=>{t+=o.map(s=>typeof s=="string"?s:String(s)).join(" ")+`
400
+ `},r={log:console.log,error:console.error,warn:console.warn};console.log=n,console.error=n,console.warn=n;try{return{result:await e(),output:t}}finally{console.log=r.log,console.error=r.error,console.warn=r.warn}}function Rd(){let e=le(Ye(),{});e.thedotmack={source:{source:"github",repo:"thedotmack/claude-mem"},installLocation:z(),lastUpdated:new Date().toISOString(),autoUpdate:!0},yt(We()),Me(Ye(),e)}function Id(e){let t=le(Ve(),{});t.version||(t.version=2),t.plugins||(t.plugins={});let n=Ze(e),r=new Date().toISOString();t.plugins["claude-mem@thedotmack"]=[{scope:"user",installPath:n,version:e,installedAt:r,lastUpdated:r}],Me(Ve(),t)}function Od(){let e=le(ze(),{});e.enabledPlugins||(e.enabledPlugins={}),e.enabledPlugins["claude-mem@thedotmack"]=!0,Me(ze(),e)}function Pd(e,t,n){let r=(o,s)=>{t.push(e),s&&s.trim().length>0&&n.push(`${o}
401
+ ${s.trim()}`)};switch(e){case"claude-code":return{title:"Claude Code: registering plugin",task:async()=>`Claude Code: plugin registered ${m.default.green("OK")}`};case"cursor":return{title:"Cursor: installing hooks + MCP",task:async o=>{o("Loading Cursor installer\u2026");let{installCursorHooks:s,configureCursorMcp:i}=await Promise.resolve().then(()=>(Ft(),Si));o("Installing Cursor hooks\u2026");let{result:a,output:c}=await Ue(()=>s("user"));if(a!==0)return r("Cursor: hook installation failed",c),`Cursor: hook installation failed ${m.default.red("FAIL")}`;o("Configuring Cursor MCP\u2026");let{result:l}=await Ue(async()=>i("user"));return l===0?`Cursor: hooks + MCP installed ${m.default.green("OK")}`:`Cursor: hooks installed; MCP setup failed \u2014 run \`npx claude-mem cursor mcp\` ${m.default.yellow("!")}`}};case"gemini-cli":return{title:"Gemini CLI: installing hooks",task:async o=>{o("Loading Gemini CLI installer\u2026");let{installGeminiCliHooks:s}=await Promise.resolve().then(()=>(Yr(),Kr));o("Installing Gemini CLI hooks\u2026");let{result:i,output:a}=await Ue(()=>s());return i!==0?(r("Gemini CLI: hook installation failed",a),`Gemini CLI: hook installation failed ${m.default.red("FAIL")}`):`Gemini CLI: hooks installed ${m.default.green("OK")}`}};case"opencode":return{title:"OpenCode: installing plugin",task:async o=>{o("Loading OpenCode installer\u2026");let{installOpenCodeIntegration:s}=await Promise.resolve().then(()=>(Qr(),Xr));o("Installing OpenCode plugin\u2026");let{result:i,output:a}=await Ue(()=>s());return i!==0?(r("OpenCode: plugin installation failed",a),`OpenCode: plugin installation failed ${m.default.red("FAIL")}`):`OpenCode: plugin installed ${m.default.green("OK")}`}};case"windsurf":return{title:"Windsurf: installing hooks",task:async o=>{o("Loading Windsurf installer\u2026");let{installWindsurfHooks:s}=await Promise.resolve().then(()=>(to(),eo));o("Installing Windsurf hooks\u2026");let{result:i,output:a}=await Ue(()=>s());return i!==0?(r("Windsurf: hook installation failed",a),`Windsurf: hook installation failed ${m.default.red("FAIL")}`):`Windsurf: hooks installed ${m.default.green("OK")}`}};case"openclaw":return{title:"OpenClaw: installing plugin",task:async o=>{o("Loading OpenClaw installer\u2026");let{installOpenClawIntegration:s}=await Promise.resolve().then(()=>(so(),oo));o("Copying plugin files\u2026");let{result:i,output:a}=await Ue(()=>s());return i!==0?(r("OpenClaw: plugin installation failed",a),`OpenClaw: plugin installation failed ${m.default.red("FAIL")}`):`OpenClaw: plugin installed ${m.default.green("OK")}`}};case"codex-cli":return{title:"Codex CLI: configuring transcript watching",task:async o=>{o("Loading Codex CLI installer\u2026");let{installCodexCli:s}=await Promise.resolve().then(()=>(uo(),lo));o("Configuring transcript watching\u2026");let{result:i,output:a}=await Ue(()=>s());return i!==0?(r("Codex CLI: integration setup failed",a),`Codex CLI: integration setup failed ${m.default.red("FAIL")}`):`Codex CLI: transcript watching configured ${m.default.green("OK")}`}};case"copilot-cli":case"antigravity":case"goose":case"roo-code":case"warp":{let i=et().find(a=>a.id===e)?.label??e;return{title:`${i}: installing MCP integration`,task:async a=>{a("Loading MCP installer\u2026");let{MCP_IDE_INSTALLERS:c}=await Promise.resolve().then(()=>(ra(),na)),l=c[e];if(!l)return`${i}: MCP installer not found ${m.default.yellow("!")}`;a(`Configuring ${i} MCP\u2026`);let{result:p,output:f}=await Ue(()=>l());return p!==0?(r(`${i}: MCP integration failed`,f),`${i}: MCP integration failed ${m.default.red("FAIL")}`):`${i}: MCP integration installed ${m.default.green("OK")}`}}}default:{let s=et().find(i=>i.id===e);return s&&!s.supported?{title:`${s.label}: skipping`,task:async()=>`${s.label}: support coming soon ${m.default.yellow("!")}`}:null}}}async function Dd(e){let t=[],n=[],r=[];for(let o of e){let s=Pd(o,t,n);s&&r.push(s)}r.length>0&&await Kn(r);for(let o of n)x.warn(o);return t}function Nd(){let e=ca(),t=process.env.SHELL??"";if(t.includes("fish"))return{path:ee(e,".config","fish","config.fish"),shell:"fish"};if(t.includes("zsh"))return{path:ee(e,".zshrc"),shell:"zsh"};if(process.platform==="darwin"){let n=ee(e,".bash_profile");if(me(n))return{path:n,shell:"bash"}}return{path:ee(e,".bashrc"),shell:"bash"}}function Ad(){let e=ca(),t=ee(e,".local","bin"),n=ee(t,"claude");if(!me(n))return;let r=process.env.PATH??"";if(r.split(":").includes(t))return;let{path:s,shell:i}=Nd(),a="$HOME/.local/bin",c=i==="fish"?`set -gx PATH ${t} $PATH`:`export PATH="${a}:$PATH"`,l="";if(me(s))try{l=po(s,"utf-8")}catch(p){x.warn(`Could not read ${s}: ${p instanceof Error?p.message:String(p)}`)}else try{sa(la(s),{recursive:!0})}catch{}if(l.includes(t)||l.includes(a))x.info(`Claude Code PATH already configured in ${s}`);else try{let f=`${l.length===0||l.endsWith(`
402
+ `)?"":`
403
+ `}
404
+ # Added by claude-mem installer for Claude Code
405
+ ${c}
406
+ `;aa(s,l+f,"utf-8"),x.success(`Added Claude Code to PATH in ${s}`)}catch(p){x.warn(`Could not update ${s}: ${p instanceof Error?p.message:String(p)}`),x.info(`Run manually: echo '${c}' >> ${s}`);return}process.env.PATH=`${t}:${r}`}async function Ld(){let e=ue?'powershell -ExecutionPolicy ByPass -c "irm https://claude.ai/install.ps1 | iex"':"curl -fsSL https://claude.ai/install.sh | bash",t=W?xt():null;return t?.start("Installing Claude Code (this can take a few minutes \u2014 downloading the native build)\u2026"),new Promise(n=>{let r="",o=Td(e,[],{shell:ue?process.env.ComSpec??"cmd.exe":"/bin/bash",stdio:t?["inherit","pipe","pipe"]:"inherit"});o.stdout?.on("data",s=>{r+=s.toString()}),o.stderr?.on("data",s=>{r+=s.toString()}),o.on("error",s=>{t?.stop("Claude Code install failed",1),r&&process.stderr.write(r),x.error(`Claude Code install failed: ${s.message}`),x.info("You can install it manually later: https://claude.ai/install.sh"),n(!1)}),o.on("exit",s=>{if(s!==0){t?.stop("Claude Code install failed",1),r&&process.stderr.write(r),x.error(`Claude Code install failed (exit ${s??"unknown"})`),x.info("You can install it manually later: https://claude.ai/install.sh"),n(!1);return}if(t?.stop("Claude Code installed"),!ue)try{Ad()}catch(i){x.warn(`Could not auto-apply PATH setup: ${i instanceof Error?i.message:String(i)}`)}n(!0)})})}async function Ud(){let e=et(),t=e.find(s=>s.id==="claude-code");if(t&&!t.detected){x.warn("Claude Code is not installed. Claude-mem works best in Claude Code, but also works with the IDEs below.");let s=await fn({message:"Install Claude Code now?",options:[{value:"install",label:"Yes \u2014 install Claude Code (recommended)"},{value:"skip",label:"No \u2014 pick another IDE below"},{value:"cancel",label:"Cancel installation"}],initialValue:"install"});(re(s)||s==="cancel")&&(Ie("Installation cancelled."),process.exit(0)),s==="install"&&await Ld()&&(e=et())}e.filter(s=>s.detected).length===0&&x.warn("No supported IDEs detected \u2014 pick the one(s) you plan to use.");let r=e.map(s=>{let i=s.detected?" [detected]":"",a=s.supported?`${s.hint}${i}`:`coming soon${i}`;return{value:s.id,label:s.label,hint:a}}),o=await es({message:"Which IDEs do you use?",options:r,initialValues:[],required:!0});return re(o)&&(Ie("Installation cancelled."),process.exit(0)),o}function Wd(){let e=z(),t=tn();yt(e);let n=["plugin","package.json","package-lock.json","openclaw","dist","LICENSE","README.md","CHANGELOG.md"];for(let r of n){let o=ee(t,r),s=ee(e,r);me(o)&&(me(s)&&ia(s,{recursive:!0,force:!0}),oa(o,s,{recursive:!0,force:!0}))}}function ua(e){let t=Qn(),n=Ze(e);ia(n,{recursive:!0,force:!0}),yt(n),oa(t,n,{recursive:!0,force:!0})}function jd(){let e=z(),t=ee(e,"package.json");me(t)&&xd("npm install --production",{cwd:e,stdio:"pipe",encoding:"utf8",...ue?{shell:process.env.ComSpec??"cmd.exe"}:{}})}function dt(e){let t=Sn;try{let n={};if(me(t))try{let r=po(t,"utf-8"),o=JSON.parse(r);o&&typeof o=="object"&&o.env&&typeof o.env=="object"?n={...o.env}:o&&typeof o=="object"&&(n={...o})}catch(r){console.warn("[install] Failed to parse existing settings.json, starting from empty:",r instanceof Error?r.message:String(r)),n={}}else{let r=la(t);me(r)||sa(r,{recursive:!0})}for(let[r,o]of Object.entries(e))n[r]=o;return aa(t,JSON.stringify(n,null,2),"utf-8"),!0}catch(n){return x.error(`Failed to write settings to ${t}: ${n instanceof Error?n.message:String(n)}`),!1}}async function Fd(e){let t=pt("CLAUDE_MEM_PROVIDER")||"claude",n=()=>{dt({CLAUDE_MEM_PROVIDER:"claude"})&&x.info("Saved provider=claude to ~/.claude-mem/settings.json")};if(!W)return e.provider?e.provider==="claude"?(n(),"claude"):(dt({CLAUDE_MEM_PROVIDER:e.provider})&&x.info(`Saved provider=${e.provider} to ~/.claude-mem/settings.json`),x.warn(`Provider=${e.provider} requested non-interactively. API key prompt skipped \u2014 set CLAUDE_MEM_${e.provider.toUpperCase()}_API_KEY and CLAUDE_MEM_PROVIDER in settings.json or env manually if not already set.`),e.provider):t;let r;if(e.provider)r=e.provider;else{let p=await fn({message:"Which LLM provider should claude-mem use to compress observations?",options:[{value:"claude",label:"Claude Code auth (default \u2014 no extra setup, uses your existing Claude Code subscription)"},{value:"gemini",label:"Gemini API key (free tier available \u2014 fast and cheap)"},{value:"openrouter",label:"OpenRouter API key (BYO model \u2014 wide selection of frontier and open models)"}],initialValue:t});re(p)&&(Ie("Installation cancelled."),process.exit(0)),r=p}if(r==="claude")return n(),"claude";let o=r==="gemini"?"Gemini":"OpenRouter",s=r==="gemini"?"CLAUDE_MEM_GEMINI_API_KEY":"CLAUDE_MEM_OPENROUTER_API_KEY",i=pt(s);if(i&&i.trim().length>0)return dt({CLAUDE_MEM_PROVIDER:r})&&x.info(`Saved provider=${r} to ~/.claude-mem/settings.json`),r;let a=await ts({message:`Paste your ${o} API key:`,mask:"*",validate:p=>!p||p.trim().length===0?"API key required":void 0});if(re(a))return x.warn("API key prompt cancelled \u2014 falling back to Claude provider."),n(),"claude";let c=String(a).trim();return dt({CLAUDE_MEM_PROVIDER:r,[s]:c})&&x.info(`Saved provider=${r} to ~/.claude-mem/settings.json`),r}async function Gd(e){let t=new Set(["claude-haiku-4-5-20251001","claude-sonnet-4-6","claude-opus-4-7"]);if(e.model){if(!t.has(e.model))throw new Error(`Unknown Claude model: ${e.model}. Allowed: ${[...t].join(", ")}`);dt({CLAUDE_MEM_MODEL:e.model})&&x.info(`Saved Claude model=${e.model} to ~/.claude-mem/settings.json`);return}if(!W)return;let n=pt("CLAUDE_MEM_MODEL"),r=t.has(n)?n:"claude-haiku-4-5-20251001",o=await fn({message:`Which Claude model should claude-mem use to compress observations?
407
+ This runs whenever you and Claude touch a file \u2014 keep it cheap and fast.`,options:[{value:"claude-haiku-4-5-20251001",label:"Haiku 4.5 (recommended \u2014 fast, cheap, great for compression)"},{value:"claude-sonnet-4-6",label:"Sonnet 4.6 (balanced quality and cost)"},{value:"claude-opus-4-7",label:"Opus 4.7 (highest quality, most expensive)"}],initialValue:r});re(o)&&(Ie("Installation cancelled."),process.exit(0));let s=o;dt({CLAUDE_MEM_MODEL:s})&&x.info(`Saved Claude model=${s} to ~/.claude-mem/settings.json`)}async function Jd(e={}){let t=qe();W?(await _s(),kt(m.default.bgCyan(m.default.black(" claude-mem install ")))):console.log("claude-mem install");let n=z(),r=me(ee(n,"plugin",".claude-plugin","plugin.json")),o;if(r)try{o=JSON.parse(po(ee(n,"plugin",".claude-plugin","plugin.json"),"utf-8")).version??void 0}catch(y){console.warn("[install] Failed to read existing plugin version:",y instanceof Error?y.message:String(y))}let s=m.default.dim("\xB7"),i=[`${m.default.bold("claude-mem")} ${m.default.cyan(`v${t}`)}`];if(o&&o!==t?i.push(`installed ${m.default.yellow(`v${o}`)}`):o&&i.push(m.default.dim("reinstall")),x.info(i.join(` ${s} `)),r&&process.stdin.isTTY){let y=await bt({message:"Overwrite existing installation?",initialValue:!0});(re(y)||!y)&&(Ie("Installation cancelled."),process.exit(0))}let a;if(e.ide){a=[e.ide];let y=et(),S=y.find(E=>E.id===e.ide);S&&!S.supported&&(x.error(`Support for ${S.label} coming soon.`),process.exit(1)),S||(x.error(`Unknown IDE: ${e.ide}`),x.info(`Available IDEs: ${y.map(E=>E.id).join(", ")}`),process.exit(1))}else process.stdin.isTTY?a=await Ud():a=["claude-code"];await Fd(e)==="claude"&&await Gd(e);let l="dead",p=a.length>0;{if(p){let S=pt("CLAUDE_MEM_WORKER_PORT"),E=W?xt():null;E?.start("Stopping running worker (so we can overwrite cleanly)\u2026");try{let O=await bn(S,1e4);E?E.stop(O.workerWasRunning?"Stopped running worker before overwrite.":"No worker running \u2014 proceeding."):O.workerWasRunning&&x.info("Stopped running worker before overwrite.")}catch(O){let A=O instanceof Error?O.message:String(O);E?E.stop(`Pre-overwrite worker shutdown failed: ${A}`,1):console.warn("[install] Pre-overwrite worker shutdown failed:",A)}}let y=[{title:"Caching plugin version",task:async S=>(S(`Caching v${t}...`),ua(t),`Plugin cached (v${t}) ${m.default.green("OK")}`)},{title:"Registering marketplace",task:async()=>(Rd(),`Marketplace registered ${m.default.green("OK")}`)},{title:"Registering plugin",task:async()=>(Id(t),`Plugin registered ${m.default.green("OK")}`)},{title:"Enabling plugin in Claude settings",task:async()=>(Od(),`Plugin enabled ${m.default.green("OK")}`)},{title:"Setting up runtime (first install can take ~30s)",task:async S=>{S("Checking Bun\u2026");let{version:E}=await Nt();S("Checking uv\u2026");let{version:O}=await Or(),A=Ze(t);if(!Ys(A,t)){S("Installing plugin dependencies\u2026");let{bunPath:K}=await Nt();await Pr(A,K),Dr(A,t,E,O)}return`Runtime ready (Bun ${E}, uv ${O}) ${m.default.green("OK")}`}}];p&&(y.unshift({title:"Copying plugin files to marketplace",task:async S=>(S("Copying to marketplace directory..."),Wd(),`Plugin files copied ${m.default.green("OK")}`)}),y.push({title:"Installing marketplace dependencies",task:async S=>{S("Running npm install...");try{return jd(),`Dependencies installed ${m.default.green("OK")}`}catch(E){return console.warn("[install] npm install error:",E instanceof Error?E.message:String(E)),`Dependencies may need manual install ${m.default.yellow("!")}`}}})),await Kn(y)}let f=await Dd(a),g=!W||e.noAutoStart;await Kn([{title:"Starting worker daemon",task:async y=>{if(g)return W?"Skipped (--no-auto-start)":"Skipped (non-TTY)";let S=Number(pt("CLAUDE_MEM_WORKER_PORT")),E=ee(z(),"plugin","scripts","worker-service.cjs"),O=ee(Ze(t),"scripts","worker-service.cjs"),A=me(E)?E:O;switch(y(`Spawning worker on port ${S}...`),l=await js(S,A),l){case"ready":return`Worker ready at http://localhost:${S} ${m.default.green("OK")}`;case"warming":return`Worker starting on port ${S} \u2014 finishing in background ${m.default.yellow("\u23F3")}`;case"dead":return`Worker did not start \u2014 try \`npx claude-mem start\` manually ${m.default.yellow("!")}`}}}]);let v=f.length>0?"Installation Partial":"Installation Complete",h=[`Version: ${m.default.cyan(t)}`,`Plugin dir: ${m.default.cyan(n)}`,`IDEs: ${m.default.cyan(a.join(", "))}`];f.length>0&&h.push(`Failed: ${m.default.red(f.join(", "))}`),W?Mt(h.join(`
408
+ `),v):(console.log(`
409
+ ${v}`),h.forEach(y=>console.log(` ${y}`)));let C=pt("CLAUDE_MEM_WORKER_PORT"),I=C,D=!1;if(!g){let y=W?xt():null;y?.start(`Verifying worker on port ${C}\u2026`);try{let S=await fetch(`http://127.0.0.1:${C}/api/health`,{signal:AbortSignal.timeout(3e3)});if(S.ok){D=!0;try{let E=await S.json();E&&(typeof E.port=="number"||typeof E.port=="string")&&(I=E.port)}catch{}}y?.stop(D?`Worker ready at http://localhost:${I}`:`Worker reachable but not ready on port ${C}`)}catch{y?.stop(`Worker not yet responding on port ${C} (still starting)`)}}let H=l,B=H!=="dead"||D,j=g?`${m.default.yellow("!")} Worker autostart skipped \u2014 start it manually with ${m.default.bold("npx claude-mem start")}`:D||H==="ready"?`${m.default.green("\u2713")} Worker running at ${m.default.underline(`http://localhost:${I}`)}`:`${m.default.yellow("\u23F3")} Worker starting at ${m.default.underline(`http://localhost:${I}`)} \u2014 give it ~30s, then refresh`,R=g?[j,"",`${m.default.bold("First success:")} once the worker is running, keep ${m.default.underline(`http://localhost:${C}`)} open in a browser, then open Claude Code in any project. Observations stream in as Claude reads, edits, and runs commands.`,"",`${m.default.bold("Two paths from here:")}`,` ${m.default.cyan("A.")} Just start working. Memory builds passively from your first prompt. (Recommended.)`,` ${m.default.cyan("B.")} Front-load it: open Claude Code and run ${m.default.bold("/learn-codebase")} to ingest the whole repo (~5 min, optional).`,"","Memory injection starts on your second session in a project.",`Everything stays in ${m.default.cyan("~/.claude-mem")} on this machine.`,"",`${m.default.dim("How it works: /how-it-works \xB7 Disable first-session hint: CLAUDE_MEM_WELCOME_HINT_ENABLED=false")}`,`${m.default.dim("Note: close all Claude Code sessions before uninstalling, or ~/.claude-mem will be recreated by active hooks.")}`]:B?[j,"",`${m.default.bold("First success:")} keep that URL open in a browser, then open Claude Code in any project. Observations stream in as Claude reads, edits, and runs commands.`,"",`${m.default.bold("Two paths from here:")}`,` ${m.default.cyan("A.")} Just start working. Memory builds passively from your first prompt. (Recommended.)`,` ${m.default.cyan("B.")} Front-load it: open Claude Code and run ${m.default.bold("/learn-codebase")} to ingest the whole repo (~5 min, optional).`,"","Memory injection starts on your second session in a project.",`Everything stays in ${m.default.cyan("~/.claude-mem")} on this machine.`,"",`${m.default.dim("How it works: /how-it-works \xB7 Disable first-session hint: CLAUDE_MEM_WELCOME_HINT_ENABLED=false")}`,`${m.default.dim("Note: close all Claude Code sessions before uninstalling, or ~/.claude-mem will be recreated by active hooks.")}`]:[`${m.default.yellow("!")} Worker not yet ready on port ${m.default.cyan(String(C))} -- still starting up; check ${m.default.bold("claude-mem status")} later, or start manually: ${m.default.bold("npx claude-mem start")}`,"",`${m.default.bold("First success:")} keep ${m.default.underline(`http://localhost:${C}`)} open in a browser, then open Claude Code in any project. Observations stream in as Claude reads, edits, and runs commands.`,"",`${m.default.bold("Two paths from here:")}`,` ${m.default.cyan("A.")} Just start working. Memory builds passively from your first prompt. (Recommended.)`,` ${m.default.cyan("B.")} Front-load it: open Claude Code and run ${m.default.bold("/learn-codebase")} to ingest the whole repo (~5 min, optional).`,"","Memory injection starts on your second session in a project.",`Everything stays in ${m.default.cyan("~/.claude-mem")} on this machine.`,"",`${m.default.dim("How it works: /how-it-works \xB7 Disable first-session hint: CLAUDE_MEM_WELCOME_HINT_ENABLED=false")}`,`${m.default.dim("Note: close all Claude Code sessions before uninstalling, or ~/.claude-mem will be recreated by active hooks.")}`];W?(Mt(R.join(`
410
+ `),"Next Steps"),f.length>0?Oe(m.default.yellow("claude-mem installed with some IDE setup failures.")):Oe(m.default.green("claude-mem installed successfully!"))):(console.log(`
411
+ Next Steps`),R.forEach(y=>console.log(` ${y}`)),f.length>0?(console.log(`
361
412
  claude-mem installed with some IDE setup failures.`),process.exitCode=1):console.log(`
362
- claude-mem installed successfully!`))}var C,ce,E,zt=m(()=>{"use strict";mr();C=le(Ce(),1);de();Oe();me();gr();Hn();ce=process.stdin.isTTY===!0;E={info:t=>ce?$.info(t):console.log(` ${t}`),success:t=>ce?$.success(t):console.log(` ${t}`),warn:t=>ce?$.warn(t):console.warn(` ${t}`),error:t=>ce?$.error(t):console.error(` ${t}`)}});var Cs={};q(Cs,{runUninstallCommand:()=>pc});import{existsSync as fe,readFileSync as oc,readdirSync as Qr,rmSync as Dt,writeFileSync as sc}from"fs";import{homedir as Es}from"os";import{join as ee}from"path";function ic(){let t=R();return fe(t)?(Dt(t,{recursive:!0,force:!0}),!0):!1}function uc(){let t=ee(De(),"cache","thedotmack","claude-mem");return fe(t)?(Dt(t,{recursive:!0,force:!0}),!0):!1}function ac(){let t=J(he(),{});t.thedotmack&&(delete t.thedotmack,se(he(),t))}function cc(){let t=J(Fe(),{});t.plugins?.["claude-mem@thedotmack"]&&(delete t.plugins["claude-mem@thedotmack"],se(Fe(),t))}function lc(){let t=Es(),e=[ee(t,".bashrc"),ee(t,".zshrc"),ee(t,"Documents","PowerShell","Microsoft.PowerShell_profile.ps1")],r=/^\s*alias\s+claude-mem\s*=/;for(let o of e){if(!fe(o))continue;let s;try{s=oc(o,"utf-8")}catch(u){console.warn(`[uninstall] Could not read ${o}:`,u instanceof Error?u.message:String(u));continue}let i=s.split(`
363
- `),n=i.filter(u=>!r.test(u));if(n.length!==i.length)try{sc(o,n.join(`
364
- `)),console.error(`Removed legacy claude-mem alias from ${o}`)}catch(u){console.warn(`[uninstall] Could not rewrite ${o}:`,u instanceof Error?u.message:String(u))}}}function Dc(){let t=J(Se(),{});t.enabledPlugins?.["claude-mem@thedotmack"]!==void 0&&(delete t.enabledPlugins["claude-mem@thedotmack"],se(Se(),t))}function dc(){let t=Es(),e=0,r=ee(t,".npm","_npx");if(fe(r)){let i=[];try{i=Qr(r)}catch(n){console.warn(`[uninstall] Could not read ${r}:`,n instanceof Error?n.message:String(n))}for(let n of i){let u=ee(r,n,"node_modules","claude-mem");if(fe(u))try{Dt(u,{recursive:!0,force:!0}),e++}catch(c){console.warn(`[uninstall] Could not remove ${u}:`,c instanceof Error?c.message:String(c))}}}let o=ee(t,".cache","claude-cli-nodejs");if(fe(o)){let i=[];try{i=Qr(o)}catch(n){console.warn(`[uninstall] Could not read ${o}:`,n instanceof Error?n.message:String(n))}for(let n of i){let u=ee(o,n),c=[];try{c=Qr(u)}catch(D){console.warn(`[uninstall] Could not read ${u}:`,D instanceof Error?D.message:String(D));continue}for(let D of c){if(!D.startsWith("mcp-logs-plugin-claude-mem-"))continue;let d=ee(u,D);try{Dt(d,{recursive:!0,force:!0}),e++}catch(p){console.warn(`[uninstall] Could not remove ${d}:`,p instanceof Error?p.message:String(p))}}}}let s=ee(t,".claude","plugins","data","claude-mem-thedotmack");if(fe(s))try{Dt(s,{recursive:!0,force:!0}),e++}catch(i){console.warn(`[uninstall] Could not remove ${s}:`,i instanceof Error?i.message:String(i))}return e}async function pc(){if(wt(T.default.bgRed(T.default.white(" claude-mem uninstall "))),gt()){if(process.stdin.isTTY){let r=await We({message:"Are you sure you want to uninstall claude-mem?",initialValue:!1});if(ue(r)||!r){He("Uninstall cancelled.");return}}}else if($.warn("claude-mem does not appear to be installed."),process.stdin.isTTY){let r=await We({message:"Clean up any remaining registration data anyway?",initialValue:!1});if(ue(r)||!r){pe("Nothing to do.");return}}else{pe("Nothing to do.");return}let t=x.get("CLAUDE_MEM_WORKER_PORT");try{(await _t(t,1e4)).workerWasRunning&&$.info("Worker service stopped.")}catch(r){console.warn("[uninstall] Worker shutdown attempt failed:",r instanceof Error?r.message:String(r))}await vt([{title:"Removing marketplace directory",task:async()=>ic()?`Marketplace directory removed ${T.default.green("OK")}`:`Marketplace directory not found ${T.default.dim("skipped")}`},{title:"Removing cache directory",task:async()=>uc()?`Cache directory removed ${T.default.green("OK")}`:`Cache directory not found ${T.default.dim("skipped")}`},{title:"Removing marketplace registration",task:async()=>(ac(),`Marketplace registration removed ${T.default.green("OK")}`)},{title:"Removing plugin registration",task:async()=>(cc(),`Plugin registration removed ${T.default.green("OK")}`)},{title:"Removing from Claude settings",task:async()=>(Dc(),`Claude settings updated ${T.default.green("OK")}`)},{title:"Removing legacy claude-mem shell alias",task:async()=>(lc(),`Legacy alias check complete ${T.default.green("OK")}`)},{title:"Removing stray claude-mem caches and logs",task:async()=>{let r=dc();return r>0?`Stray paths removed: ${r} ${T.default.green("OK")}`:`No stray paths found ${T.default.dim("skipped")}`}}]);let e=[{label:"Gemini CLI hooks",fn:async()=>{let{uninstallGeminiCliHooks:r}=await Promise.resolve().then(()=>(Rr(),Ir));return r()}},{label:"Windsurf hooks",fn:async()=>{let{uninstallWindsurfHooks:r}=await Promise.resolve().then(()=>(Wr(),Ur));return r()}},{label:"OpenCode plugin",fn:async()=>{let{uninstallOpenCodePlugin:r}=await Promise.resolve().then(()=>(Br(),Lr));return r()}},{label:"OpenClaw plugin",fn:async()=>{let{uninstallOpenClawPlugin:r}=await Promise.resolve().then(()=>(Jr(),Kr));return r()}},{label:"Codex CLI",fn:async()=>{let{uninstallCodexCli:r}=await Promise.resolve().then(()=>(qr(),zr));return r()}}];for(let{label:r,fn:o}of e)try{await o()===0&&$.info(`${r}: removed.`)}catch(s){console.warn(`[uninstall] ${r} cleanup failed:`,s instanceof Error?s.message:String(s))}Ge([`Your data directory at ${T.default.cyan("~/.claude-mem")} was preserved.`,"To remove it manually: rm -rf ~/.claude-mem"].join(`
365
- `),"Note"),pe(T.default.green("claude-mem has been uninstalled."))}var T,hs=m(()=>{"use strict";mr();T=le(Ce(),1);de();Oe();me();gr()});import{spawnSync as mc}from"child_process";import{existsSync as gc}from"fs";import{homedir as en}from"os";import{join as tn}from"path";function fc(){return te?[tn(en(),".bun","bin","bun.exe"),tn(process.env.USERPROFILE||en(),".bun","bin","bun.exe")]:[tn(en(),".bun","bin","bun"),"/usr/local/bin/bun","/opt/homebrew/bin/bun","/home/linuxbrew/.linuxbrew/bin/bun"]}function Fs(){let e=mc(te?"where":"which",["bun"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"],shell:te});if(e.status===0&&e.stdout.trim())return"bun";for(let r of fc())if(gc(r))return r;return null}var Ss=m(()=>{"use strict";de()});var re={};q(re,{runAdoptCommand:()=>Sc,runCleanupCommand:()=>yc,runRestartCommand:()=>hc,runSearchCommand:()=>wc,runStartCommand:()=>Ec,runStatusCommand:()=>Fc,runStopCommand:()=>Cc,runTranscriptWatchCommand:()=>vc});import{spawn as rn}from"child_process";import{existsSync as nn}from"fs";import{join as ys}from"path";function qt(){gt()||(console.error(A.default.red("claude-mem is not installed.")),console.error(`Run: ${A.default.bold("npx claude-mem install")}`),process.exit(1))}function on(){let t=Fs();return t||(console.error(A.default.red("Bun not found.")),console.error("Install Bun: https://bun.sh"),console.error("After installation, restart your terminal."),process.exit(1)),t}function ws(){return ys(R(),"plugin","scripts","worker-service.cjs")}function Te(t,e=[]){qt();let r=on(),o=ws();nn(o)||(console.error(A.default.red(`Worker script not found at: ${o}`)),console.error("The installation may be corrupted. Try: npx claude-mem install"),process.exit(1));let s=[o,t,...e],i=rn(r,s,{stdio:"inherit",cwd:R(),env:process.env});i.on("error",n=>{console.error(A.default.red(`Failed to start Bun: ${n.message}`)),process.exit(1)}),i.on("close",n=>{process.exit(n??0)})}function Ec(){Te("start")}function Cc(){Te("stop")}function hc(){Te("restart")}function Fc(){Te("status")}function Sc(t=[]){qt();let e=on(),r=ws();nn(r)||(console.error(A.default.red(`Worker script not found at: ${r}`)),console.error("The installation may be corrupted. Try: npx claude-mem install"),process.exit(1));let o=process.cwd(),s=[r,"adopt","--cwd",o,...t],i=rn(e,s,{stdio:"inherit",cwd:R(),env:process.env});i.on("error",n=>{console.error(A.default.red(`Failed to start Bun: ${n.message}`)),process.exit(1)}),i.on("close",n=>{process.exit(n??0)})}function yc(t=[]){Te("cleanup",t)}async function wc(t){qt();let e=t.join(" ").trim();e||(console.error(A.default.red("Usage: npx claude-mem search <query>")),process.exit(1));let o=`http://127.0.0.1:${x.get("CLAUDE_MEM_WORKER_PORT")}/api/search?query=${encodeURIComponent(e)}`,s;try{s=await fetch(o)}catch(n){let u=n instanceof Error?n.message:String(n);((n instanceof Error?n.cause:void 0)?.code==="ECONNREFUSED"||u.includes("ECONNREFUSED"))&&(console.error(A.default.red("Worker is not running.")),console.error(`Start it with: ${A.default.bold("npx claude-mem start")}`),process.exit(1)),console.error(A.default.red(`Search failed: ${u}`)),process.exit(1)}s.ok||(s.status===404&&(console.error(A.default.red("Search endpoint not found. Is the worker running?")),console.error(`Try: ${A.default.bold("npx claude-mem start")}`),process.exit(1)),console.error(A.default.red(`Search failed: HTTP ${s.status}`)),process.exit(1));let i;try{i=await s.json()}catch(n){let u=n instanceof Error?n.message:String(n);console.error(A.default.red(`Search failed: invalid JSON response (${u})`)),process.exit(1)}console.log(typeof i=="object"&&i!==null?JSON.stringify(i,null,2):i)}function vc(){qt();let t=on(),e=ys(R(),"plugin","scripts","transcript-watcher.cjs");if(!nn(e)){Te("transcript",["watch"]);return}let r=rn(t,[e,"watch"],{stdio:"inherit",cwd:R(),env:process.env});r.on("error",o=>{console.error(A.default.red(`Failed to start transcript watcher: ${o.message}`)),process.exit(1)}),r.on("close",o=>{process.exit(o??0)})}var A,ne=m(()=>{"use strict";A=le(Ce(),1);Ss();de();me()});var S=le(Ce(),1);de();var Ee=process.argv.slice(2),vs=Ee[0]?.toLowerCase()??"";function _c(){let t=Be();console.log(`
366
- ${S.default.bold("claude-mem")} v${t} \u2014 persistent memory for AI coding assistants
367
-
368
- ${S.default.bold("Install Commands")} (no Bun required):
369
- ${S.default.cyan("npx claude-mem")} Interactive install
370
- ${S.default.cyan("npx claude-mem install")} Interactive install
371
- ${S.default.cyan("npx claude-mem install --ide <id>")} Install for specific IDE
372
- ${S.default.cyan("npx claude-mem update")} Update to latest version
373
- ${S.default.cyan("npx claude-mem uninstall")} Remove plugin and configs
374
- ${S.default.cyan("npx claude-mem version")} Print version
375
-
376
- ${S.default.bold("Runtime Commands")} (requires Bun, delegates to installed plugin):
377
- ${S.default.cyan("npx claude-mem start")} Start worker service
378
- ${S.default.cyan("npx claude-mem stop")} Stop worker service
379
- ${S.default.cyan("npx claude-mem restart")} Restart worker service
380
- ${S.default.cyan("npx claude-mem status")} Show worker status
381
- ${S.default.cyan("npx claude-mem search <query>")} Search observations
382
- ${S.default.cyan("npx claude-mem adopt [--dry-run] [--branch <name>]")} Stamp merged worktrees into parent project
383
- ${S.default.cyan("npx claude-mem cleanup [--dry-run]")} Run one-time v12.4.3 pollution cleanup (or preview counts)
384
- ${S.default.cyan("npx claude-mem transcript watch")} Start transcript watcher
385
-
386
- ${S.default.bold("IDE Identifiers")}:
413
+ claude-mem installed successfully!`))}async function Hd(){let e=qe(),t=Ze(e);W?kt(m.default.bgCyan(m.default.black(" claude-mem repair "))):console.log("claude-mem repair"),x.info(`Version: ${m.default.cyan(e)}`),await Kn([{title:"Setting up runtime",task:async n=>{n("Checking Bun\u2026");let{version:r}=await Nt();n("Checking uv\u2026");let{version:o}=await Or();me(ee(t,"package.json"))||(n("Cache missing \u2014 repopulating from npm package\u2026"),ua(e)),n("Reinstalling plugin dependencies\u2026");let{bunPath:s}=await Nt();return await Pr(t,s),Dr(t,e,r,o),`Runtime ready (Bun ${r}, uv ${o}) ${m.default.green("OK")}`}}]),W?Oe(m.default.green("claude-mem repair complete.")):console.log("claude-mem repair complete.")}var m,W,x,Vn=w(()=>{"use strict";mr();m=Ke(ht(),1);Pe();Ge();Fs();Vs();$s();je();St();Ar();ti();W=process.stdin.isTTY===!0;x={info:e=>W?q.info(e):console.log(` ${e}`),success:e=>W?q.success(e):console.log(` ${e}`),warn:e=>W?q.warn(e):console.warn(` ${e}`),error:e=>W?q.error(e):console.error(` ${e}`)}});var pa={};fe(pa,{runUninstallCommand:()=>_d});import{existsSync as Be,readFileSync as Bd,readdirSync as mo,rmSync as Xt,writeFileSync as Kd}from"fs";import{homedir as da}from"os";import{join as we}from"path";function Yd(){let e=z();return Be(e)?(Xt(e,{recursive:!0,force:!0}),!0):!1}function Vd(){let e=we(We(),"cache","thedotmack","claude-mem");return Be(e)?(Xt(e,{recursive:!0,force:!0}),!0):!1}function zd(){let e=le(Ye(),{});e.thedotmack&&(delete e.thedotmack,Me(Ye(),e))}function Zd(){let e=le(Ve(),{});e.plugins?.["claude-mem@thedotmack"]&&(delete e.plugins["claude-mem@thedotmack"],Me(Ve(),e))}function qd(){let e=da(),t=[we(e,".bashrc"),we(e,".zshrc"),we(e,"Documents","PowerShell","Microsoft.PowerShell_profile.ps1")],n=/^\s*alias\s+claude-mem\s*=/;for(let r of t){if(!Be(r))continue;let o;try{o=Bd(r,"utf-8")}catch(a){console.warn(`[uninstall] Could not read ${r}:`,a instanceof Error?a.message:String(a));continue}let s=o.split(`
414
+ `),i=s.filter(a=>!n.test(a));if(i.length!==s.length)try{Kd(r,i.join(`
415
+ `)),console.error(`Removed legacy claude-mem alias from ${r}`)}catch(a){console.warn(`[uninstall] Could not rewrite ${r}:`,a instanceof Error?a.message:String(a))}}}function Xd(){let e=le(ze(),{});e.enabledPlugins?.["claude-mem@thedotmack"]!==void 0&&(delete e.enabledPlugins["claude-mem@thedotmack"],Me(ze(),e))}function Qd(){let e=da(),t=0,n=we(e,".npm","_npx");if(Be(n)){let s=[];try{s=mo(n)}catch(i){console.warn(`[uninstall] Could not read ${n}:`,i instanceof Error?i.message:String(i))}for(let i of s){let a=we(n,i,"node_modules","claude-mem");if(Be(a))try{Xt(a,{recursive:!0,force:!0}),t++}catch(c){console.warn(`[uninstall] Could not remove ${a}:`,c instanceof Error?c.message:String(c))}}}let r=we(e,".cache","claude-cli-nodejs");if(Be(r)){let s=[];try{s=mo(r)}catch(i){console.warn(`[uninstall] Could not read ${r}:`,i instanceof Error?i.message:String(i))}for(let i of s){let a=we(r,i),c=[];try{c=mo(a)}catch(l){console.warn(`[uninstall] Could not read ${a}:`,l instanceof Error?l.message:String(l));continue}for(let l of c){if(!l.startsWith("mcp-logs-plugin-claude-mem-"))continue;let p=we(a,l);try{Xt(p,{recursive:!0,force:!0}),t++}catch(f){console.warn(`[uninstall] Could not remove ${p}:`,f instanceof Error?f.message:String(f))}}}}let o=we(e,".claude","plugins","data","claude-mem-thedotmack");if(Be(o))try{Xt(o,{recursive:!0,force:!0}),t++}catch(s){console.warn(`[uninstall] Could not remove ${o}:`,s instanceof Error?s.message:String(s))}return t}async function _d(){if(kt(Q.default.bgRed(Q.default.white(" claude-mem uninstall "))),nn()){if(process.stdin.isTTY){let n=await bt({message:"Are you sure you want to uninstall claude-mem?",initialValue:!1});if(re(n)||!n){Ie("Uninstall cancelled.");return}}}else if(q.warn("claude-mem does not appear to be installed."),process.stdin.isTTY){let n=await bt({message:"Clean up any remaining registration data anyway?",initialValue:!1});if(re(n)||!n){Oe("Nothing to do.");return}}else{Oe("Nothing to do.");return}let e=U.get("CLAUDE_MEM_WORKER_PORT");try{(await bn(e,1e4)).workerWasRunning&&q.info("Worker service stopped.")}catch(n){console.warn("[uninstall] Worker shutdown attempt failed:",n instanceof Error?n.message:String(n))}await gn([{title:"Removing marketplace directory",task:async()=>Yd()?`Marketplace directory removed ${Q.default.green("OK")}`:`Marketplace directory not found ${Q.default.dim("skipped")}`},{title:"Removing cache directory",task:async()=>Vd()?`Cache directory removed ${Q.default.green("OK")}`:`Cache directory not found ${Q.default.dim("skipped")}`},{title:"Removing marketplace registration",task:async()=>(zd(),`Marketplace registration removed ${Q.default.green("OK")}`)},{title:"Removing plugin registration",task:async()=>(Zd(),`Plugin registration removed ${Q.default.green("OK")}`)},{title:"Removing from Claude settings",task:async()=>(Xd(),`Claude settings updated ${Q.default.green("OK")}`)},{title:"Removing legacy claude-mem shell alias",task:async()=>(qd(),`Legacy alias check complete ${Q.default.green("OK")}`)},{title:"Removing stray claude-mem caches and logs",task:async()=>{let n=Qd();return n>0?`Stray paths removed: ${n} ${Q.default.green("OK")}`:`No stray paths found ${Q.default.dim("skipped")}`}}]);let t=[{label:"Gemini CLI hooks",fn:async()=>{let{uninstallGeminiCliHooks:n}=await Promise.resolve().then(()=>(Yr(),Kr));return n()}},{label:"Windsurf hooks",fn:async()=>{let{uninstallWindsurfHooks:n}=await Promise.resolve().then(()=>(to(),eo));return n()}},{label:"OpenCode plugin",fn:async()=>{let{uninstallOpenCodePlugin:n}=await Promise.resolve().then(()=>(Qr(),Xr));return n()}},{label:"OpenClaw plugin",fn:async()=>{let{uninstallOpenClawPlugin:n}=await Promise.resolve().then(()=>(so(),oo));return n()}},{label:"Codex CLI",fn:async()=>{let{uninstallCodexCli:n}=await Promise.resolve().then(()=>(uo(),lo));return n()}}];for(let{label:n,fn:r}of t)try{await r()===0&&q.info(`${n}: removed.`)}catch(o){console.warn(`[uninstall] ${n} cleanup failed:`,o instanceof Error?o.message:String(o))}Mt([`Your data directory at ${Q.default.cyan("~/.claude-mem")} was preserved.`,"To remove it manually: rm -rf ~/.claude-mem"].join(`
416
+ `),"Note"),Oe(Q.default.green("claude-mem has been uninstalled."))}var Q,ma=w(()=>{"use strict";mr();Q=Ke(ht(),1);je();St();Pe();Ar()});import{spawnSync as $d}from"child_process";import{existsSync as ep}from"fs";import{homedir as fo}from"os";import{join as go}from"path";function tp(){return ue?[go(fo(),".bun","bin","bun.exe"),go(process.env.USERPROFILE||fo(),".bun","bin","bun.exe")]:[go(fo(),".bun","bin","bun"),"/usr/local/bin/bun","/opt/homebrew/bin/bun","/home/linuxbrew/.linuxbrew/bin/bun"]}function fa(){let t=$d(ue?"where":"which",["bun"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"],shell:ue});if(t.status===0&&t.stdout.trim())return"bun";for(let n of tp())if(ep(n))return n;return null}var ga=w(()=>{"use strict";je()});var be={};fe(be,{runAdoptCommand:()=>ip,runCleanupCommand:()=>ap,runRestartCommand:()=>op,runSearchCommand:()=>cp,runStartCommand:()=>np,runStatusCommand:()=>sp,runStopCommand:()=>rp,runTranscriptWatchCommand:()=>lp});import{spawn as ho}from"child_process";import{existsSync as So}from"fs";import{join as ha}from"path";function zn(){nn()||(console.error(J.default.red("claude-mem is not installed.")),console.error(`Run: ${J.default.bold("npx claude-mem install")}`),process.exit(1))}function Eo(){let e=fa();return e||(console.error(J.default.red("Bun not found.")),console.error("Install Bun: https://bun.sh"),console.error("After installation, restart your terminal."),process.exit(1)),e}function Sa(){return ha(z(),"plugin","scripts","worker-service.cjs")}function mt(e,t=[]){zn();let n=Eo(),r=Sa();So(r)||(console.error(J.default.red(`Worker script not found at: ${r}`)),console.error("The installation may be corrupted. Try: npx claude-mem install"),process.exit(1));let o=[r,e,...t],s=ho(n,o,{stdio:"inherit",cwd:z(),env:process.env});s.on("error",i=>{console.error(J.default.red(`Failed to start Bun: ${i.message}`)),process.exit(1)}),s.on("close",i=>{process.exit(i??0)})}function np(){mt("start")}function rp(){mt("stop")}function op(){mt("restart")}function sp(){mt("status")}function ip(e=[]){zn();let t=Eo(),n=Sa();So(n)||(console.error(J.default.red(`Worker script not found at: ${n}`)),console.error("The installation may be corrupted. Try: npx claude-mem install"),process.exit(1));let r=process.cwd(),o=[n,"adopt","--cwd",r,...e],s=ho(t,o,{stdio:"inherit",cwd:z(),env:process.env});s.on("error",i=>{console.error(J.default.red(`Failed to start Bun: ${i.message}`)),process.exit(1)}),s.on("close",i=>{process.exit(i??0)})}function ap(e=[]){mt("cleanup",e)}async function cp(e){zn();let t=e.join(" ").trim();t||(console.error(J.default.red("Usage: npx claude-mem search <query>")),process.exit(1));let r=`http://127.0.0.1:${U.get("CLAUDE_MEM_WORKER_PORT")}/api/search?query=${encodeURIComponent(t)}`,o;try{o=await fetch(r)}catch(i){let a=i instanceof Error?i.message:String(i);((i instanceof Error?i.cause:void 0)?.code==="ECONNREFUSED"||a.includes("ECONNREFUSED"))&&(console.error(J.default.red("Worker is not running.")),console.error(`Start it with: ${J.default.bold("npx claude-mem start")}`),process.exit(1)),console.error(J.default.red(`Search failed: ${a}`)),process.exit(1)}o.ok||(o.status===404&&(console.error(J.default.red("Search endpoint not found. Is the worker running?")),console.error(`Try: ${J.default.bold("npx claude-mem start")}`),process.exit(1)),console.error(J.default.red(`Search failed: HTTP ${o.status}`)),process.exit(1));let s;try{s=await o.json()}catch(i){let a=i instanceof Error?i.message:String(i);console.error(J.default.red(`Search failed: invalid JSON response (${a})`)),process.exit(1)}console.log(typeof s=="object"&&s!==null?JSON.stringify(s,null,2):s)}function lp(){zn();let e=Eo(),t=ha(z(),"plugin","scripts","transcript-watcher.cjs");if(!So(t)){mt("transcript",["watch"]);return}let n=ho(e,[t,"watch"],{stdio:"inherit",cwd:z(),env:process.env});n.on("error",r=>{console.error(J.default.red(`Failed to start transcript watcher: ${r.message}`)),process.exit(1)}),n.on("close",r=>{process.exit(r??0)})}var J,ke=w(()=>{"use strict";J=Ke(ht(),1);ga();je();Pe()});var T=Ke(ht(),1);je();var ft=process.argv.slice(2),yo=ft[0]?.toLowerCase()??"",up=new Set(["-h","--help","-v","--version"]),Ea=yo.startsWith("-")&&!up.has(yo)?"install":yo;function dp(){let e=qe();console.log(`
417
+ ${T.default.bold("claude-mem")} v${e} \u2014 persistent memory for AI coding assistants
418
+
419
+ ${T.default.bold("Install Commands")} (no Bun required):
420
+ ${T.default.cyan("npx claude-mem")} Interactive install
421
+ ${T.default.cyan("npx claude-mem install")} Interactive install
422
+ ${T.default.cyan("npx claude-mem install --ide <id>")} Install for specific IDE
423
+ ${T.default.cyan("npx claude-mem install --provider claude|gemini|openrouter")} Set LLM provider non-interactively
424
+ ${T.default.cyan("npx claude-mem install --model <id>")} Set Claude model (when provider=claude)
425
+ ${T.default.cyan("npx claude-mem install --no-auto-start")} Skip worker auto-start at the end
426
+ ${T.default.cyan("npx claude-mem repair")} Repair runtime (re-runs Bun/uv setup and bun install in plugin cache)
427
+ ${T.default.cyan("npx claude-mem update")} Update to latest version
428
+ ${T.default.cyan("npx claude-mem uninstall")} Remove plugin and configs
429
+ ${T.default.cyan("npx claude-mem version")} Print version
430
+
431
+ ${T.default.bold("Runtime Commands")} (requires Bun, delegates to installed plugin):
432
+ ${T.default.cyan("npx claude-mem start")} Start worker service
433
+ ${T.default.cyan("npx claude-mem stop")} Stop worker service
434
+ ${T.default.cyan("npx claude-mem restart")} Restart worker service
435
+ ${T.default.cyan("npx claude-mem status")} Show worker status
436
+ ${T.default.cyan("npx claude-mem search <query>")} Search observations
437
+ ${T.default.cyan("npx claude-mem adopt [--dry-run] [--branch <name>]")} Stamp merged worktrees into parent project
438
+ ${T.default.cyan("npx claude-mem cleanup [--dry-run]")} Run one-time v12.4.3 pollution cleanup (or preview counts)
439
+ ${T.default.cyan("npx claude-mem transcript watch")} Start transcript watcher
440
+
441
+ ${T.default.bold("IDE Identifiers")}:
387
442
  claude-code, cursor, gemini-cli, opencode, openclaw,
388
443
  windsurf, codex-cli, copilot-cli, antigravity, goose,
389
- crush, roo-code, warp
390
- `)}async function xc(){switch(vs){case"":{let{runInstallCommand:t}=await Promise.resolve().then(()=>(zt(),Xt));await t();break}case"install":{let t=Ee.indexOf("--ide"),e=t!==-1?Ee[t+1]:void 0,{runInstallCommand:r}=await Promise.resolve().then(()=>(zt(),Xt));await r({ide:e});break}case"update":case"upgrade":{let{runInstallCommand:t}=await Promise.resolve().then(()=>(zt(),Xt));await t();break}case"uninstall":case"remove":{let{runUninstallCommand:t}=await Promise.resolve().then(()=>(hs(),Cs));await t();break}case"version":case"--version":case"-v":{console.log(Be());break}case"help":case"--help":case"-h":{_c();break}case"start":{let{runStartCommand:t}=await Promise.resolve().then(()=>(ne(),re));t();break}case"stop":{let{runStopCommand:t}=await Promise.resolve().then(()=>(ne(),re));t();break}case"restart":{let{runRestartCommand:t}=await Promise.resolve().then(()=>(ne(),re));t();break}case"status":{let{runStatusCommand:t}=await Promise.resolve().then(()=>(ne(),re));t();break}case"search":{let{runSearchCommand:t}=await Promise.resolve().then(()=>(ne(),re));await t(Ee.slice(1));break}case"adopt":{let{runAdoptCommand:t}=await Promise.resolve().then(()=>(ne(),re));t(Ee.slice(1));break}case"cleanup":{let{runCleanupCommand:t}=await Promise.resolve().then(()=>(ne(),re));t(Ee.slice(1));break}case"transcript":{let t=Ee[1]?.toLowerCase();if(t==="watch"){let{runTranscriptWatchCommand:e}=await Promise.resolve().then(()=>(ne(),re));e()}else console.error(S.default.red(`Unknown transcript subcommand: ${t??"(none)"}`)),console.error("Usage: npx claude-mem transcript watch"),process.exit(1);break}default:console.error(S.default.red(`Unknown command: ${vs}`)),console.error(`Run ${S.default.bold("npx claude-mem --help")} for usage information.`),process.exit(1)}}xc().catch(t=>{console.error(S.default.red("Fatal error:"),t.message||t),process.exit(1)});
444
+ roo-code, warp
445
+ `)}function wo(e,t){let n=e.indexOf(t);if(n===-1)return;let r=e[n+1];return(r===void 0||r.startsWith("-"))&&(console.error(T.default.red(`Flag ${t} requires a value.`)),process.exit(1)),r}function pp(e){let t=wo(e,"--provider");return t!==void 0&&t!=="claude"&&t!=="gemini"&&t!=="openrouter"&&(console.error(`Unknown --provider: ${t}. Allowed: claude, gemini, openrouter`),process.exit(1)),{ide:wo(e,"--ide"),provider:t,model:wo(e,"--model"),noAutoStart:e.includes("--no-auto-start")}}async function mp(){switch(Ea){case"":case"install":{let{runInstallCommand:e}=await Promise.resolve().then(()=>(Vn(),Yn));await e(pp(ft));break}case"repair":{let{runRepairCommand:e}=await Promise.resolve().then(()=>(Vn(),Yn));await e();break}case"update":case"upgrade":{let{runInstallCommand:e}=await Promise.resolve().then(()=>(Vn(),Yn));await e();break}case"uninstall":case"remove":{let{runUninstallCommand:e}=await Promise.resolve().then(()=>(ma(),pa));await e();break}case"version":case"--version":case"-v":{console.log(qe());break}case"help":case"--help":case"-h":{dp();break}case"start":{let{runStartCommand:e}=await Promise.resolve().then(()=>(ke(),be));e();break}case"stop":{let{runStopCommand:e}=await Promise.resolve().then(()=>(ke(),be));e();break}case"restart":{let{runRestartCommand:e}=await Promise.resolve().then(()=>(ke(),be));e();break}case"status":{let{runStatusCommand:e}=await Promise.resolve().then(()=>(ke(),be));e();break}case"search":{let{runSearchCommand:e}=await Promise.resolve().then(()=>(ke(),be));await e(ft.slice(1));break}case"adopt":{let{runAdoptCommand:e}=await Promise.resolve().then(()=>(ke(),be));e(ft.slice(1));break}case"cleanup":{let{runCleanupCommand:e}=await Promise.resolve().then(()=>(ke(),be));e(ft.slice(1));break}case"transcript":{let e=ft[1]?.toLowerCase();if(e==="watch"){let{runTranscriptWatchCommand:t}=await Promise.resolve().then(()=>(ke(),be));t()}else console.error(T.default.red(`Unknown transcript subcommand: ${e??"(none)"}`)),console.error("Usage: npx claude-mem transcript watch"),process.exit(1);break}default:console.error(T.default.red(`Unknown command: ${Ea}`)),console.error(`Run ${T.default.bold("npx claude-mem --help")} for usage information.`),process.exit(1)}}mp().catch(e=>{console.error(T.default.red("Fatal error:"),e.message||e),process.exit(1)});