# Conflicts:
#	rust-ai/target/debug/crm-ai.exe
#	rust-ai/target/debug/crm_ai.pdb
#	rust-ai/target/debug/deps/crm_ai.exe
#	rust-ai/target/debug/deps/crm_ai.pdb
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/028yt4653ytvwtc2zr0yqrn6d.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/02g2q20ttno4r70g3sm7bhrkl.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/04d6410k8llyw7zqiplfptvh4.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/04nljec5a29x85ly2o3vrtwaw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/05x3ko8dwspamszih9syu54g6.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/08v9r75i2w9a389q4xezh88y1.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/0c2e2wk33ohiwgxfhdiuv0p0q.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/0f0gi1quvn99fpae5wxodltis.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/0hdhmkafn64deyd5v02x318rt.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/0iaomc3lcl3ka6zwtqlotplk4.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/0ijm8sm23h61y7jamxx0qo7uf.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/0jzjpmz2vgeutoux95g9jzcxf.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/0ov0709m5f5g4qwbj9cjx861f.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/0p6rplx683h34xa057913j86q.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/0q8mlwutzsm25nugo52imgmpk.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/0r1iwol49qmn4xw9kizdiusw9.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/0symkw0vjvcmyiq4rpwjzt4nn.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/0tf15a3xqr1e95uhuc5geesvg.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/0v9tk0mf79g7th1bbp5yiw9c9.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/0vhxwriugc4hlj8pfd7tx5vx9.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/0wnq26nwqny7plzycbmjke1ko.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/0zpre0e5r191b8oc07tfb94tr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/11da2n9qyrhhxlq3ukwstdb8p.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/16g8cbeme4gf6csftsqc31qxw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/17ccf4apkn2aajxsrtx0lzqq0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/17t8qpdp6m1jm8aappsvdot1b.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/193uw1ygp5pha51loya170phx.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/19di9ofb84qpqfz830ai0ers8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/19w3jgflkbl1ojltpouoapgt7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/19ym1rn8bgi8x3xolo9indhxq.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/1ac4koooa55bvzcffe40ni6oh.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/1an0oofqnuj2cjrztrw9yi3ro.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/1cw2wjrj8okklktqn2l24bqe8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/1e8gpdh5x4m45sjgfrgi863u7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/1fx097hkmddp6k7tammeddalc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/1ipeucm9w7eevrsetadex4fpm.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/1koprg0kbjultvf8qpyidm48s.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/1o5gkmbse9tlychb3h9g4baxq.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/1pllgjkdhg1kiptmvr5frmqm7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/1pv13t75uryo8b0x1626x0myb.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/1rr2pzpofrr4tpc9ca9dv6iuc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/1rztm62v4t8p5f2naprqa2lti.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/1wz4fdpsjfkn88pifsjloi09q.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/20qxccwcqeqmp59md8yxuvh2v.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/20vsyncng2b713qjs1gnj29vc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/26ux44slkez148zlnyupjmb92.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/26yedftm0tsuompma7jn4n3zb.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/2937acu2vhck6giqrrs00606b.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/2d5v58t59h1n2zwh9a6ftbz41.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/2hpao3k1bf99jn6whkdntu8y7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/2l9sody5gkgsdtgivhyv9bw5c.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/2s196yj64k717kklqsxcrllbr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/2s1w14m8afpnvblsxk6vg3idw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/2skj3kpf638i7dqefhdv36kos.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/2tt1vfp6hzwtp7vi3nhcxuute.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/2tuexier60nj2f9twey7um29r.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/2xbasgqzhdwlfkvg9s9doqjy1.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/2xfu20p8fjt502uoc8h8ah241.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/30ike1y02byxaxt8mwv63qoua.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/3142nsun95nq41wgw69w13ihi.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/33dst540joac6rravhhxjzdzx.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/34pzbtmmge3dcoio5xi2kugcz.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/36rd3wtav43hkdqe5rdgolu2m.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/3a9lltnwu3r77v24u269727eo.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/3byjnlifs8g4d3id3jkfv8ctk.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/3rfklzx7zv6lxsy53cdng578p.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/3s7mm9hfkv2w9zbp2flokupwf.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/3v6o1fzt35ze2y04qjuzqs2sr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/3wnlg1ghhx2dyq11fq8iimr5o.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/4404h5d0dtk90xxnepwg434v0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/44uypfnht5vn54bwlkzkx02dg.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/48b4ftesu7v1fvhjlpk1n9dtv.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/4brrzo036zv56d7wizedkr2z6.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/4eq65cad4lecm6z91mpk3f3xs.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/4g9l9ttupz9norbkspl35kamo.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/4nucap8g4jj9ps2ezujaqtbfd.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/4o7c6ihwtrabd13rfnj4q7yo3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/4ojrjnyszfa5t7fqf0bhmxiw5.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/4p65uaznrrixtx1xx23pllzfh.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/4qbim1856byp76ie5wt9o6wgv.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/4qs4w8si7hb7qhjp84a3duhxr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/4s9w5j2dc8ilq4tixfhaqs5dh.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/4tpn7kbohxzqts20hlfqtgh4c.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/4v7och0lm6ky559ug04ekm2wt.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/4w7ehbdr9gg4kdkl1tox5l9mn.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/4xpzyvemjzwci5ms2tlvmt2t5.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/58bpu9zpiiwrnabqqdfcli5pb.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/59l0a9ptvdqskfs0b0eyfxvwa.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/5aue478igcutten2mmyewfcgu.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/5dfiu908y5h7mb55pxgjfyk0v.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/5e0918ct7qhwjogtmgq07yi7n.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/5fq0ugz1v59pl246ein9a9frs.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/5p9zb3spkd82yv8mt5z3xvelt.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/5t54obf57qzqzwxm4zfska1lu.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/5yb3ff2gziejszjraai4ciwq0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/5yjqjmrododoue946j39jmwfc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/5yl5vcg3vjtphnvrsrktsyurz.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/5zpcmanilt8e2i0yek1cuqd7e.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/617njvr91ijbhhc0389e65zfd.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/65pcak4ic9ghdchgfvzxukfwm.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/6chla0dfaqu6ko1ed4g5k0bh0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/6dha81kzsqapq01tfd1ffhn5t.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/6dwliga6ntx8akhuepotm02li.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/6eeyt2onsz4l0rn33i4n314x7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/6gdktngd679y245srd3v2u6j1.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/6hrpu48xpvotylm8qqzlek6pe.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/6i2tf5fogqrefbtk2k0fts08v.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/6ibg4ld8tp7hsdf7vp08zfkv9.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/6jvbdq95re5su1n4fg6dvsxny.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/6l0x7rweo4qd11s9f7wd1fnkn.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/6ql1fqbod42inazne8so3r6nq.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/6tvxdiznwcf9qr6zr7t086222.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/6u4nbzagid291wdm8eld817sn.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/73pr4riia6fm36v2mv8ualvka.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/74cgx3dwb9sdxhksblzagmgs9.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/76lc81i63omemb4kbapvkca61.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/77ez5zdjkfv1zyb8kv2947iyt.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/77n53sp5bl9wwwv4jl8coksgc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/79208bu4cupe8s8ag77748np0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/7dzxkv9xf71qotmq14g7qipu3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/7enne7dwhbn9ouo4nat6p64y7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/7ifcfokmc84o6qcxxle9rrakh.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/7k6mmlbc5ftl68d8ps1umrvop.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/7pmvgu8la26u135mfw40eq3pz.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/7pudfjwumqe0op1k7lbc9s305.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/7qge0m80mpin4pqsga7rx6vd2.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/7qnf98333jk7yfs3fspeve0q3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/7si0wz8kjxdid6s2fbs5ftinw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/7wbimrjjl3fezkh4fn8fqhtbe.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/7zoldj2kvzvtu6ofzkvjt1vzj.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/814nro5tv6adkg94g0gissjx0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/851cadq8cj4zqgfig20ibrwlk.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/85vmp0djfzbgzc9sk1b9lqzdf.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/86o8ak15n4yxwno3ci8cqr3ew.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/8e4dl0pzxkrepa828oby35lt0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/8ecjfrpqv7uw1w57uleobc8gr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/8gnehf271hrk9kykwm93jc6nb.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/8gnm0fpqfspyxqpyra980atnk.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/8h0jc5w6powgi0c8vn1x4dan8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/8i51mbqp49c9ugk5c7x80cd91.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/8ju8n2tsmlect8qpai3uik6r0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/8kp9g30qj1rpiqzt02hv8tuu8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/8lz3p6ny90b4rlpfrhemq20u3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/8m6yim3wrm4bwpwnpyf2mtjcm.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/8oza8lu87mxnvp7ym38s0g7zo.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/8qrm1j72swz03z7ynlu6yoirv.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/904tkn6xn0ms6a1uh0r8yr7c2.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/91vwuknyr86zvl3l8z3vy746m.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/933muzlqc5yxbghdebkf6avry.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/934fq4mkaerkyuisnny7ioqlw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/95ljs53b24a70l0te2ld4s31r.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/95lo1abl1kxmuzj7ncapojddm.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/966mezbhzmqio8wd2b3ajd6tf.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/97uj60t48p2f63l0sh5e6d7jc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/98435dxc5aa2rn05pq2ewvsrp.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/98oj9sr8guqc7dpmiywbwkii3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/996qyo133d65sqx9xt231jq6r.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/99dqih93zdsfr60bal5e2p2gi.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/9dwlw011jr5607lwvmba9451j.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/9eyyyddscolgdirto5lbpczmj.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/9jg91l3p6vhajyh77dxls6fcq.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/9nq5bobnq5g7fcb42y8ty6etc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/9ovt5zpsr2epwp0gi3il8iytl.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/9pnc9z4av5hm4ea25vlz4xqsu.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/9rsps4hv0b3oliyfzytnl6pcq.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/9t90e7028ttpxafof3hkpbw75.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/9tw92rn8rt9gc2zqs76pk1om8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/9vkg1eytunhbsohqqngxrggo5.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/9vu9qc8ysylnxdqqdh8a79r9k.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/9w23rwzl79tncp0og81fl9mbj.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/9wlug478tatatqr8mvtveqjx4.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/9wpqitn8gn028w639ke7tscvn.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/a1777q6ws3xopddbts44rj32s.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/a2k3qlloqq55pfe59cf1dw6rl.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/a4gqibcoojzeh7my9rjjlsrsq.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/a4vvbuu4ncozciazbzl1i8zgd.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/a6wxbk7zenr2hutjts01e6iov.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/a7cx0yqc6gzx2wnalp130o4zo.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/a7v64mm0t5svnom84kyjxpy6b.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/ae4ntfvninsr2feomftjf90vl.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/ahwroicqyfe1os20j7ev1sx92.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/anx411kz78bpo2cywd5890o5g.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/ao3bgk0tppun9724prghwlyaw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/aptfmhdofankym4ydqcilebt4.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/as2fwt6olfgi6jb4k2amz7ts7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/av5atcjkr4wcy3136kpaozqmd.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/avatzw7dqxkzql5nbftropvok.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/avh6oyj7x9fzchqngmufcmfxl.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/avq2q54guy470vpthy8xekyb3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/axxc02oln41z0uowdnn637xeh.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/aymzk97ygih4m8kyminhyxpt6.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/b4gj43t9hkoxfowc43a749l9j.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/b5or5vxif2f8blj3ob77tb24z.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/b60sxwxw0o2ylu7jzax5k0rf8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/b98kusc5t91zip4xkkb4xq3h1.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/b9gmceyqj8dvxgy4y9rho4f6f.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/be58ksg0xcmvouu8jdu7ku62a.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/bf7fhjb5yslr2f68zebwopmyo.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/bih7nsbedfkdq1egfrs2eosec.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/bkp6e0xmkndnrfozeojdiqke7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/bmg2ckiwaw53e3uwi5ohzhta9.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/bro5iu13s0u262x7c0jbin4kd.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/bs45flxj4pgfw49i4q7o3tndv.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/btrv9t0byeqthu6z0breyxfns.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/bzf456z8sywkfhdlyqxxn1pko.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/c0ln86pcd9vjhnujjfz3qxuc6.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/c0ww24nyysdf0e136ubn5r02e.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/c2q5ct4feeb9e3vfnuize1nf8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/c4pskjp43r5bgyamxyozunso6.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/cb0rqc2rt9eu5puq2a16hxd2m.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/cdszqc7973d6ctu39nrp1smua.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/cech6pkto4risvcalhoa6fhoj.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/cj3pqf8ctvl4w48ziqf8n23x4.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/co6e78io5knk3p1hrqwi845jr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/crj7k979kc8xd5cwcqjll6y8h.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/ct5tx4jcgdi9fm52l8zadz4t1.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/ct7burgpfko9hflp1y63sqfz0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/czvn67h4gqbefj0zvx6uf8d17.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/d0n01icjvhek62d0qzj34kq8t.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/d13r4esoekm2lkqm7w3p1w0bv.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/d2yh5h5og1qvbsr3lojzd9yk3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/d31zb3ij77b5hr1mmgcmngbgr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/d5gbhyb9pph1lpm1jt0on2r6g.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/d6aeidzpukgoerv43g3zqo4sy.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/daag5kuru4m55iiofl7ip7w4i.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/dc6sckox1ypwkn2mppc90ud74.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/dep-graph.bin
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/deqdwclxmpdz5piqvzutwscpg.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/df6f8dr5ct7epsam22we32vw6.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/dh9jqj2rm8e4rshzxuglhedsf.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/dhy5blv8scs0bl7esfxufbkyo.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/dkipqw38umlarkzecanc8qu5y.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/dlp0a6ydnnnped0nhs3rjpt8v.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/drhsr5ravh4ue0q51qhh5a48h.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/dtqnos2cqx4l8kq31x07rub4j.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/dvggmkioolno1uygkxip3vw61.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/dwuftppkcwreuiybdtaet4t6i.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/e75iq1ogwrzlfh0t1gjkr1fwm.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/ebykw8su7ejmpbclf7la10hts.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/efbgk5tw3ki9iu3iyrzqqnalu.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/ejike8sqb267nzu63vfrygj10.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/ekz8zuk9efsff6wfazktchn6f.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/eltrapn5jhodszwme04ztf0gy.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/em7117y9h7qw16aejmuv5fcr5.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/en1xdikii9cox4n9l2gib4wfn.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/enjz5e38i8yyuk6hurs6oftsw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/enknqn2imsl5isq96vzz8rtgw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/epei7l7tnqzlsth330qwxqf1b.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/eqpoa8rcel4hfr8llhvv9o86r.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/es8bkgyag3zgza0q42qtnw5fg.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/eu8gkgxuwar6qc4q47dw5qcs5.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/euki0c9lb7s1g9bs0ewspcc48.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/evvbsd35evv83bvtw1pkewj2p.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/eyyalb83667luca561uj187pj.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/f3sbzjtlib0iiedh5w4jy5zmz.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/f4e91hmjayx6ii7qh2vs8pv5q.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/f4h8cz9aq8r8zfzgxz10fh16p.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/query-cache.bin
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpkbgtw97-1w0jd0a-5l60sr5te7upw1ped9k2ir8qj/work-products.bin
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/028yt4653ytvwtc2zr0yqrn6d.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/02g2q20ttno4r70g3sm7bhrkl.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/04d6410k8llyw7zqiplfptvh4.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/04nljec5a29x85ly2o3vrtwaw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/05x3ko8dwspamszih9syu54g6.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/08v9r75i2w9a389q4xezh88y1.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/0c2e2wk33ohiwgxfhdiuv0p0q.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/0f0gi1quvn99fpae5wxodltis.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/0hdhmkafn64deyd5v02x318rt.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/0iaomc3lcl3ka6zwtqlotplk4.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/0ijm8sm23h61y7jamxx0qo7uf.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/0jzjpmz2vgeutoux95g9jzcxf.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/0ov0709m5f5g4qwbj9cjx861f.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/0p6rplx683h34xa057913j86q.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/0q8mlwutzsm25nugo52imgmpk.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/0r1iwol49qmn4xw9kizdiusw9.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/0symkw0vjvcmyiq4rpwjzt4nn.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/0tf15a3xqr1e95uhuc5geesvg.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/0v9tk0mf79g7th1bbp5yiw9c9.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/0vhxwriugc4hlj8pfd7tx5vx9.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/0wnq26nwqny7plzycbmjke1ko.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/0zpre0e5r191b8oc07tfb94tr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/11da2n9qyrhhxlq3ukwstdb8p.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/16g8cbeme4gf6csftsqc31qxw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/17ccf4apkn2aajxsrtx0lzqq0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/17t8qpdp6m1jm8aappsvdot1b.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/193uw1ygp5pha51loya170phx.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/19di9ofb84qpqfz830ai0ers8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/19w3jgflkbl1ojltpouoapgt7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/19ym1rn8bgi8x3xolo9indhxq.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/1ac4koooa55bvzcffe40ni6oh.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/1an0oofqnuj2cjrztrw9yi3ro.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/1cw2wjrj8okklktqn2l24bqe8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/1e8gpdh5x4m45sjgfrgi863u7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/1fx097hkmddp6k7tammeddalc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/1ipeucm9w7eevrsetadex4fpm.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/1koprg0kbjultvf8qpyidm48s.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/1o5gkmbse9tlychb3h9g4baxq.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/1pllgjkdhg1kiptmvr5frmqm7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/1pv13t75uryo8b0x1626x0myb.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/1rr2pzpofrr4tpc9ca9dv6iuc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/1rztm62v4t8p5f2naprqa2lti.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/1wz4fdpsjfkn88pifsjloi09q.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/20qxccwcqeqmp59md8yxuvh2v.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/20vsyncng2b713qjs1gnj29vc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/26ux44slkez148zlnyupjmb92.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/26yedftm0tsuompma7jn4n3zb.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/2937acu2vhck6giqrrs00606b.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/2d5v58t59h1n2zwh9a6ftbz41.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/2hpao3k1bf99jn6whkdntu8y7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/2l9sody5gkgsdtgivhyv9bw5c.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/2s196yj64k717kklqsxcrllbr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/2s1w14m8afpnvblsxk6vg3idw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/2skj3kpf638i7dqefhdv36kos.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/2tt1vfp6hzwtp7vi3nhcxuute.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/2tuexier60nj2f9twey7um29r.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/2xbasgqzhdwlfkvg9s9doqjy1.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/2xfu20p8fjt502uoc8h8ah241.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/30ike1y02byxaxt8mwv63qoua.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/3142nsun95nq41wgw69w13ihi.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/33dst540joac6rravhhxjzdzx.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/34pzbtmmge3dcoio5xi2kugcz.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/36rd3wtav43hkdqe5rdgolu2m.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/3a9lltnwu3r77v24u269727eo.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/3byjnlifs8g4d3id3jkfv8ctk.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/3rfklzx7zv6lxsy53cdng578p.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/3s7mm9hfkv2w9zbp2flokupwf.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/3v6o1fzt35ze2y04qjuzqs2sr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/3wnlg1ghhx2dyq11fq8iimr5o.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/4404h5d0dtk90xxnepwg434v0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/44uypfnht5vn54bwlkzkx02dg.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/48b4ftesu7v1fvhjlpk1n9dtv.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/4brrzo036zv56d7wizedkr2z6.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/4eq65cad4lecm6z91mpk3f3xs.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/4g9l9ttupz9norbkspl35kamo.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/4nucap8g4jj9ps2ezujaqtbfd.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/4o7c6ihwtrabd13rfnj4q7yo3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/4ojrjnyszfa5t7fqf0bhmxiw5.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/4p65uaznrrixtx1xx23pllzfh.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/4qbim1856byp76ie5wt9o6wgv.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/4qs4w8si7hb7qhjp84a3duhxr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/4s9w5j2dc8ilq4tixfhaqs5dh.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/4tpn7kbohxzqts20hlfqtgh4c.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/4v7och0lm6ky559ug04ekm2wt.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/4w7ehbdr9gg4kdkl1tox5l9mn.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/4xpzyvemjzwci5ms2tlvmt2t5.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/58bpu9zpiiwrnabqqdfcli5pb.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/59l0a9ptvdqskfs0b0eyfxvwa.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/5aue478igcutten2mmyewfcgu.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/5dfiu908y5h7mb55pxgjfyk0v.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/5e0918ct7qhwjogtmgq07yi7n.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/5fq0ugz1v59pl246ein9a9frs.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/5p9zb3spkd82yv8mt5z3xvelt.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/5t54obf57qzqzwxm4zfska1lu.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/5yb3ff2gziejszjraai4ciwq0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/5yjqjmrododoue946j39jmwfc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/5yl5vcg3vjtphnvrsrktsyurz.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/5zpcmanilt8e2i0yek1cuqd7e.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/617njvr91ijbhhc0389e65zfd.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/65pcak4ic9ghdchgfvzxukfwm.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/6chla0dfaqu6ko1ed4g5k0bh0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/6dha81kzsqapq01tfd1ffhn5t.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/6dwliga6ntx8akhuepotm02li.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/6eeyt2onsz4l0rn33i4n314x7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/6gdktngd679y245srd3v2u6j1.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/6hrpu48xpvotylm8qqzlek6pe.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/6i2tf5fogqrefbtk2k0fts08v.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/6ibg4ld8tp7hsdf7vp08zfkv9.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/6jvbdq95re5su1n4fg6dvsxny.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/6l0x7rweo4qd11s9f7wd1fnkn.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/6ql1fqbod42inazne8so3r6nq.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/6tvxdiznwcf9qr6zr7t086222.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/6u4nbzagid291wdm8eld817sn.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/73pr4riia6fm36v2mv8ualvka.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/74cgx3dwb9sdxhksblzagmgs9.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/76lc81i63omemb4kbapvkca61.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/77ez5zdjkfv1zyb8kv2947iyt.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/77n53sp5bl9wwwv4jl8coksgc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/79208bu4cupe8s8ag77748np0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/7dzxkv9xf71qotmq14g7qipu3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/7enne7dwhbn9ouo4nat6p64y7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/7ifcfokmc84o6qcxxle9rrakh.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/7k6mmlbc5ftl68d8ps1umrvop.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/7pmvgu8la26u135mfw40eq3pz.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/7pudfjwumqe0op1k7lbc9s305.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/7qge0m80mpin4pqsga7rx6vd2.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/7qnf98333jk7yfs3fspeve0q3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/7si0wz8kjxdid6s2fbs5ftinw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/7wbimrjjl3fezkh4fn8fqhtbe.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/7zoldj2kvzvtu6ofzkvjt1vzj.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/814nro5tv6adkg94g0gissjx0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/851cadq8cj4zqgfig20ibrwlk.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/85vmp0djfzbgzc9sk1b9lqzdf.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/86o8ak15n4yxwno3ci8cqr3ew.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/8e4dl0pzxkrepa828oby35lt0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/8ecjfrpqv7uw1w57uleobc8gr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/8gnehf271hrk9kykwm93jc6nb.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/8gnm0fpqfspyxqpyra980atnk.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/8h0jc5w6powgi0c8vn1x4dan8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/8i51mbqp49c9ugk5c7x80cd91.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/8ju8n2tsmlect8qpai3uik6r0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/8kp9g30qj1rpiqzt02hv8tuu8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/8lz3p6ny90b4rlpfrhemq20u3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/8m6yim3wrm4bwpwnpyf2mtjcm.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/8oza8lu87mxnvp7ym38s0g7zo.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/8qrm1j72swz03z7ynlu6yoirv.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/904tkn6xn0ms6a1uh0r8yr7c2.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/91vwuknyr86zvl3l8z3vy746m.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/933muzlqc5yxbghdebkf6avry.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/934fq4mkaerkyuisnny7ioqlw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/95ljs53b24a70l0te2ld4s31r.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/95lo1abl1kxmuzj7ncapojddm.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/966mezbhzmqio8wd2b3ajd6tf.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/97uj60t48p2f63l0sh5e6d7jc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/98435dxc5aa2rn05pq2ewvsrp.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/98oj9sr8guqc7dpmiywbwkii3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/996qyo133d65sqx9xt231jq6r.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/99dqih93zdsfr60bal5e2p2gi.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/9dwlw011jr5607lwvmba9451j.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/9eyyyddscolgdirto5lbpczmj.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/9jg91l3p6vhajyh77dxls6fcq.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/9nq5bobnq5g7fcb42y8ty6etc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/9ovt5zpsr2epwp0gi3il8iytl.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/9pnc9z4av5hm4ea25vlz4xqsu.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/9rsps4hv0b3oliyfzytnl6pcq.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/9t90e7028ttpxafof3hkpbw75.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/9tw92rn8rt9gc2zqs76pk1om8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/9vkg1eytunhbsohqqngxrggo5.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/9vu9qc8ysylnxdqqdh8a79r9k.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/9w23rwzl79tncp0og81fl9mbj.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/9wlug478tatatqr8mvtveqjx4.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/9wpqitn8gn028w639ke7tscvn.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/a1777q6ws3xopddbts44rj32s.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/a2k3qlloqq55pfe59cf1dw6rl.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/a4gqibcoojzeh7my9rjjlsrsq.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/a4vvbuu4ncozciazbzl1i8zgd.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/a6wxbk7zenr2hutjts01e6iov.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/a7cx0yqc6gzx2wnalp130o4zo.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/a7v64mm0t5svnom84kyjxpy6b.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/ae4ntfvninsr2feomftjf90vl.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/ahwroicqyfe1os20j7ev1sx92.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/anx411kz78bpo2cywd5890o5g.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/ao3bgk0tppun9724prghwlyaw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/aptfmhdofankym4ydqcilebt4.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/as2fwt6olfgi6jb4k2amz7ts7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/av5atcjkr4wcy3136kpaozqmd.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/avatzw7dqxkzql5nbftropvok.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/avh6oyj7x9fzchqngmufcmfxl.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/avq2q54guy470vpthy8xekyb3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/axxc02oln41z0uowdnn637xeh.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/aymzk97ygih4m8kyminhyxpt6.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/b4gj43t9hkoxfowc43a749l9j.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/b5or5vxif2f8blj3ob77tb24z.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/b60sxwxw0o2ylu7jzax5k0rf8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/b98kusc5t91zip4xkkb4xq3h1.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/b9gmceyqj8dvxgy4y9rho4f6f.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/be58ksg0xcmvouu8jdu7ku62a.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/bf7fhjb5yslr2f68zebwopmyo.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/bih7nsbedfkdq1egfrs2eosec.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/bkp6e0xmkndnrfozeojdiqke7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/bmg2ckiwaw53e3uwi5ohzhta9.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/bro5iu13s0u262x7c0jbin4kd.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/bs45flxj4pgfw49i4q7o3tndv.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/btrv9t0byeqthu6z0breyxfns.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/bzf456z8sywkfhdlyqxxn1pko.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/c0ln86pcd9vjhnujjfz3qxuc6.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/c0ww24nyysdf0e136ubn5r02e.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/c2q5ct4feeb9e3vfnuize1nf8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/c4pskjp43r5bgyamxyozunso6.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/cb0rqc2rt9eu5puq2a16hxd2m.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/cdszqc7973d6ctu39nrp1smua.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/cech6pkto4risvcalhoa6fhoj.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/cj3pqf8ctvl4w48ziqf8n23x4.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/co6e78io5knk3p1hrqwi845jr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/crj7k979kc8xd5cwcqjll6y8h.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/ct5tx4jcgdi9fm52l8zadz4t1.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/ct7burgpfko9hflp1y63sqfz0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/czvn67h4gqbefj0zvx6uf8d17.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/d0n01icjvhek62d0qzj34kq8t.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/d13r4esoekm2lkqm7w3p1w0bv.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/d2yh5h5og1qvbsr3lojzd9yk3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/d31zb3ij77b5hr1mmgcmngbgr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/d5gbhyb9pph1lpm1jt0on2r6g.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/d6aeidzpukgoerv43g3zqo4sy.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/daag5kuru4m55iiofl7ip7w4i.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/dc6sckox1ypwkn2mppc90ud74.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/dep-graph.bin
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/deqdwclxmpdz5piqvzutwscpg.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/df6f8dr5ct7epsam22we32vw6.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/dh9jqj2rm8e4rshzxuglhedsf.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/dhy5blv8scs0bl7esfxufbkyo.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/dkipqw38umlarkzecanc8qu5y.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/dlp0a6ydnnnped0nhs3rjpt8v.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/drhsr5ravh4ue0q51qhh5a48h.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/dtqnos2cqx4l8kq31x07rub4j.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/dvggmkioolno1uygkxip3vw61.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/dwuftppkcwreuiybdtaet4t6i.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/e75iq1ogwrzlfh0t1gjkr1fwm.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/ebykw8su7ejmpbclf7la10hts.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/efbgk5tw3ki9iu3iyrzqqnalu.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/ejike8sqb267nzu63vfrygj10.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/ekz8zuk9efsff6wfazktchn6f.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/eltrapn5jhodszwme04ztf0gy.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/em7117y9h7qw16aejmuv5fcr5.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/en1xdikii9cox4n9l2gib4wfn.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/enjz5e38i8yyuk6hurs6oftsw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/enknqn2imsl5isq96vzz8rtgw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/epei7l7tnqzlsth330qwxqf1b.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/eqpoa8rcel4hfr8llhvv9o86r.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/es8bkgyag3zgza0q42qtnw5fg.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/eu8gkgxuwar6qc4q47dw5qcs5.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/euki0c9lb7s1g9bs0ewspcc48.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/evvbsd35evv83bvtw1pkewj2p.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/eyyalb83667luca561uj187pj.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/f3sbzjtlib0iiedh5w4jy5zmz.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/f4e91hmjayx6ii7qh2vs8pv5q.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/f4h8cz9aq8r8zfzgxz10fh16p.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/query-cache.bin
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpmdmrlko-1h7f07b-a2qmvenj8c4dxc6wvhxe599cg/work-products.bin
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/028yt4653ytvwtc2zr0yqrn6d.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/02g2q20ttno4r70g3sm7bhrkl.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/04d6410k8llyw7zqiplfptvh4.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/04nljec5a29x85ly2o3vrtwaw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/05x3ko8dwspamszih9syu54g6.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/08v9r75i2w9a389q4xezh88y1.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/0c2e2wk33ohiwgxfhdiuv0p0q.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/0f0gi1quvn99fpae5wxodltis.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/0hdhmkafn64deyd5v02x318rt.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/0iaomc3lcl3ka6zwtqlotplk4.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/0ijm8sm23h61y7jamxx0qo7uf.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/0jzjpmz2vgeutoux95g9jzcxf.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/0ov0709m5f5g4qwbj9cjx861f.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/0p6rplx683h34xa057913j86q.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/0q8mlwutzsm25nugo52imgmpk.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/0r1iwol49qmn4xw9kizdiusw9.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/0symkw0vjvcmyiq4rpwjzt4nn.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/0tf15a3xqr1e95uhuc5geesvg.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/0v9tk0mf79g7th1bbp5yiw9c9.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/0vhxwriugc4hlj8pfd7tx5vx9.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/0wnq26nwqny7plzycbmjke1ko.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/0zpre0e5r191b8oc07tfb94tr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/11da2n9qyrhhxlq3ukwstdb8p.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/16g8cbeme4gf6csftsqc31qxw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/17ccf4apkn2aajxsrtx0lzqq0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/17t8qpdp6m1jm8aappsvdot1b.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/193uw1ygp5pha51loya170phx.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/19di9ofb84qpqfz830ai0ers8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/19w3jgflkbl1ojltpouoapgt7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/19ym1rn8bgi8x3xolo9indhxq.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/1ac4koooa55bvzcffe40ni6oh.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/1an0oofqnuj2cjrztrw9yi3ro.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/1cw2wjrj8okklktqn2l24bqe8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/1e8gpdh5x4m45sjgfrgi863u7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/1fx097hkmddp6k7tammeddalc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/1ipeucm9w7eevrsetadex4fpm.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/1koprg0kbjultvf8qpyidm48s.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/1o5gkmbse9tlychb3h9g4baxq.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/1pllgjkdhg1kiptmvr5frmqm7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/1pv13t75uryo8b0x1626x0myb.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/1rr2pzpofrr4tpc9ca9dv6iuc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/1rztm62v4t8p5f2naprqa2lti.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/1wz4fdpsjfkn88pifsjloi09q.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/20qxccwcqeqmp59md8yxuvh2v.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/20vsyncng2b713qjs1gnj29vc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/26ux44slkez148zlnyupjmb92.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/26yedftm0tsuompma7jn4n3zb.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/2937acu2vhck6giqrrs00606b.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/2d5v58t59h1n2zwh9a6ftbz41.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/2hpao3k1bf99jn6whkdntu8y7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/2l9sody5gkgsdtgivhyv9bw5c.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/2s196yj64k717kklqsxcrllbr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/2s1w14m8afpnvblsxk6vg3idw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/2skj3kpf638i7dqefhdv36kos.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/2tt1vfp6hzwtp7vi3nhcxuute.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/2tuexier60nj2f9twey7um29r.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/2xbasgqzhdwlfkvg9s9doqjy1.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/2xfu20p8fjt502uoc8h8ah241.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/30ike1y02byxaxt8mwv63qoua.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/3142nsun95nq41wgw69w13ihi.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/33dst540joac6rravhhxjzdzx.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/34pzbtmmge3dcoio5xi2kugcz.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/36rd3wtav43hkdqe5rdgolu2m.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/3a9lltnwu3r77v24u269727eo.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/3byjnlifs8g4d3id3jkfv8ctk.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/3rfklzx7zv6lxsy53cdng578p.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/3s7mm9hfkv2w9zbp2flokupwf.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/3v6o1fzt35ze2y04qjuzqs2sr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/3wnlg1ghhx2dyq11fq8iimr5o.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/4404h5d0dtk90xxnepwg434v0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/44uypfnht5vn54bwlkzkx02dg.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/48b4ftesu7v1fvhjlpk1n9dtv.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/4brrzo036zv56d7wizedkr2z6.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/4eq65cad4lecm6z91mpk3f3xs.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/4g9l9ttupz9norbkspl35kamo.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/4nucap8g4jj9ps2ezujaqtbfd.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/4o7c6ihwtrabd13rfnj4q7yo3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/4ojrjnyszfa5t7fqf0bhmxiw5.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/4p65uaznrrixtx1xx23pllzfh.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/4qbim1856byp76ie5wt9o6wgv.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/4qs4w8si7hb7qhjp84a3duhxr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/4s9w5j2dc8ilq4tixfhaqs5dh.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/4tpn7kbohxzqts20hlfqtgh4c.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/4v7och0lm6ky559ug04ekm2wt.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/4w7ehbdr9gg4kdkl1tox5l9mn.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/4xpzyvemjzwci5ms2tlvmt2t5.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/58bpu9zpiiwrnabqqdfcli5pb.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/59l0a9ptvdqskfs0b0eyfxvwa.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/5aue478igcutten2mmyewfcgu.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/5dfiu908y5h7mb55pxgjfyk0v.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/5e0918ct7qhwjogtmgq07yi7n.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/5fq0ugz1v59pl246ein9a9frs.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/5p9zb3spkd82yv8mt5z3xvelt.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/5t54obf57qzqzwxm4zfska1lu.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/5yb3ff2gziejszjraai4ciwq0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/5yjqjmrododoue946j39jmwfc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/5yl5vcg3vjtphnvrsrktsyurz.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/5zpcmanilt8e2i0yek1cuqd7e.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/617njvr91ijbhhc0389e65zfd.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/65pcak4ic9ghdchgfvzxukfwm.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/6chla0dfaqu6ko1ed4g5k0bh0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/6dha81kzsqapq01tfd1ffhn5t.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/6dwliga6ntx8akhuepotm02li.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/6eeyt2onsz4l0rn33i4n314x7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/6gdktngd679y245srd3v2u6j1.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/6hrpu48xpvotylm8qqzlek6pe.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/6i2tf5fogqrefbtk2k0fts08v.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/6ibg4ld8tp7hsdf7vp08zfkv9.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/6jvbdq95re5su1n4fg6dvsxny.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/6l0x7rweo4qd11s9f7wd1fnkn.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/6ql1fqbod42inazne8so3r6nq.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/6tvxdiznwcf9qr6zr7t086222.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/6u4nbzagid291wdm8eld817sn.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/73pr4riia6fm36v2mv8ualvka.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/74cgx3dwb9sdxhksblzagmgs9.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/76lc81i63omemb4kbapvkca61.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/77ez5zdjkfv1zyb8kv2947iyt.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/77n53sp5bl9wwwv4jl8coksgc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/79208bu4cupe8s8ag77748np0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/7dzxkv9xf71qotmq14g7qipu3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/7enne7dwhbn9ouo4nat6p64y7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/7ifcfokmc84o6qcxxle9rrakh.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/7k6mmlbc5ftl68d8ps1umrvop.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/7pmvgu8la26u135mfw40eq3pz.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/7pudfjwumqe0op1k7lbc9s305.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/7qge0m80mpin4pqsga7rx6vd2.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/7qnf98333jk7yfs3fspeve0q3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/7si0wz8kjxdid6s2fbs5ftinw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/7wbimrjjl3fezkh4fn8fqhtbe.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/7zoldj2kvzvtu6ofzkvjt1vzj.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/814nro5tv6adkg94g0gissjx0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/851cadq8cj4zqgfig20ibrwlk.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/85vmp0djfzbgzc9sk1b9lqzdf.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/86o8ak15n4yxwno3ci8cqr3ew.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/8e4dl0pzxkrepa828oby35lt0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/8ecjfrpqv7uw1w57uleobc8gr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/8gnehf271hrk9kykwm93jc6nb.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/8gnm0fpqfspyxqpyra980atnk.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/8h0jc5w6powgi0c8vn1x4dan8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/8i51mbqp49c9ugk5c7x80cd91.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/8ju8n2tsmlect8qpai3uik6r0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/8kp9g30qj1rpiqzt02hv8tuu8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/8lz3p6ny90b4rlpfrhemq20u3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/8m6yim3wrm4bwpwnpyf2mtjcm.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/8oza8lu87mxnvp7ym38s0g7zo.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/8qrm1j72swz03z7ynlu6yoirv.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/904tkn6xn0ms6a1uh0r8yr7c2.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/91vwuknyr86zvl3l8z3vy746m.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/933muzlqc5yxbghdebkf6avry.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/934fq4mkaerkyuisnny7ioqlw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/95ljs53b24a70l0te2ld4s31r.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/95lo1abl1kxmuzj7ncapojddm.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/966mezbhzmqio8wd2b3ajd6tf.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/97uj60t48p2f63l0sh5e6d7jc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/98435dxc5aa2rn05pq2ewvsrp.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/98oj9sr8guqc7dpmiywbwkii3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/996qyo133d65sqx9xt231jq6r.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/99dqih93zdsfr60bal5e2p2gi.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/9dwlw011jr5607lwvmba9451j.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/9eyyyddscolgdirto5lbpczmj.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/9jg91l3p6vhajyh77dxls6fcq.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/9nq5bobnq5g7fcb42y8ty6etc.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/9ovt5zpsr2epwp0gi3il8iytl.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/9pnc9z4av5hm4ea25vlz4xqsu.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/9rsps4hv0b3oliyfzytnl6pcq.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/9t90e7028ttpxafof3hkpbw75.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/9tw92rn8rt9gc2zqs76pk1om8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/9vkg1eytunhbsohqqngxrggo5.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/9vu9qc8ysylnxdqqdh8a79r9k.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/9w23rwzl79tncp0og81fl9mbj.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/9wlug478tatatqr8mvtveqjx4.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/9wpqitn8gn028w639ke7tscvn.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/a1777q6ws3xopddbts44rj32s.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/a2k3qlloqq55pfe59cf1dw6rl.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/a4gqibcoojzeh7my9rjjlsrsq.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/a4vvbuu4ncozciazbzl1i8zgd.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/a6wxbk7zenr2hutjts01e6iov.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/a7cx0yqc6gzx2wnalp130o4zo.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/a7v64mm0t5svnom84kyjxpy6b.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/ae4ntfvninsr2feomftjf90vl.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/ahwroicqyfe1os20j7ev1sx92.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/anx411kz78bpo2cywd5890o5g.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/ao3bgk0tppun9724prghwlyaw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/aptfmhdofankym4ydqcilebt4.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/as2fwt6olfgi6jb4k2amz7ts7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/av5atcjkr4wcy3136kpaozqmd.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/avatzw7dqxkzql5nbftropvok.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/avh6oyj7x9fzchqngmufcmfxl.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/avq2q54guy470vpthy8xekyb3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/axxc02oln41z0uowdnn637xeh.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/aymzk97ygih4m8kyminhyxpt6.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/b4gj43t9hkoxfowc43a749l9j.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/b5or5vxif2f8blj3ob77tb24z.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/b60sxwxw0o2ylu7jzax5k0rf8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/b98kusc5t91zip4xkkb4xq3h1.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/b9gmceyqj8dvxgy4y9rho4f6f.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/be58ksg0xcmvouu8jdu7ku62a.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/bf7fhjb5yslr2f68zebwopmyo.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/bih7nsbedfkdq1egfrs2eosec.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/bkp6e0xmkndnrfozeojdiqke7.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/bmg2ckiwaw53e3uwi5ohzhta9.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/bro5iu13s0u262x7c0jbin4kd.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/bs45flxj4pgfw49i4q7o3tndv.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/btrv9t0byeqthu6z0breyxfns.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/bzf456z8sywkfhdlyqxxn1pko.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/c0ln86pcd9vjhnujjfz3qxuc6.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/c0ww24nyysdf0e136ubn5r02e.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/c2q5ct4feeb9e3vfnuize1nf8.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/c4pskjp43r5bgyamxyozunso6.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/cb0rqc2rt9eu5puq2a16hxd2m.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/cdszqc7973d6ctu39nrp1smua.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/cech6pkto4risvcalhoa6fhoj.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/cj3pqf8ctvl4w48ziqf8n23x4.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/co6e78io5knk3p1hrqwi845jr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/crj7k979kc8xd5cwcqjll6y8h.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/ct5tx4jcgdi9fm52l8zadz4t1.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/ct7burgpfko9hflp1y63sqfz0.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/czvn67h4gqbefj0zvx6uf8d17.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/d0n01icjvhek62d0qzj34kq8t.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/d13r4esoekm2lkqm7w3p1w0bv.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/d2yh5h5og1qvbsr3lojzd9yk3.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/d31zb3ij77b5hr1mmgcmngbgr.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/d5gbhyb9pph1lpm1jt0on2r6g.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/d6aeidzpukgoerv43g3zqo4sy.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/daag5kuru4m55iiofl7ip7w4i.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/dc6sckox1ypwkn2mppc90ud74.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/dep-graph.bin
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/deqdwclxmpdz5piqvzutwscpg.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/df6f8dr5ct7epsam22we32vw6.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/dh9jqj2rm8e4rshzxuglhedsf.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/dhy5blv8scs0bl7esfxufbkyo.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/dkipqw38umlarkzecanc8qu5y.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/dlp0a6ydnnnped0nhs3rjpt8v.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/drhsr5ravh4ue0q51qhh5a48h.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/dtqnos2cqx4l8kq31x07rub4j.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/dvggmkioolno1uygkxip3vw61.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/dwuftppkcwreuiybdtaet4t6i.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/e75iq1ogwrzlfh0t1gjkr1fwm.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/ebykw8su7ejmpbclf7la10hts.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/efbgk5tw3ki9iu3iyrzqqnalu.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/ejike8sqb267nzu63vfrygj10.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/ekz8zuk9efsff6wfazktchn6f.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/eltrapn5jhodszwme04ztf0gy.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/em7117y9h7qw16aejmuv5fcr5.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/en1xdikii9cox4n9l2gib4wfn.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/enjz5e38i8yyuk6hurs6oftsw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/enknqn2imsl5isq96vzz8rtgw.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/epei7l7tnqzlsth330qwxqf1b.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/eqpoa8rcel4hfr8llhvv9o86r.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/es8bkgyag3zgza0q42qtnw5fg.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/eu8gkgxuwar6qc4q47dw5qcs5.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/euki0c9lb7s1g9bs0ewspcc48.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/evvbsd35evv83bvtw1pkewj2p.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/eyyalb83667luca561uj187pj.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/f3sbzjtlib0iiedh5w4jy5zmz.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/f4e91hmjayx6ii7qh2vs8pv5q.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/f4h8cz9aq8r8zfzgxz10fh16p.o
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/query-cache.bin
#	rust-ai/target/debug/incremental/crm_ai-2kj6g3410uujl/s-hjpx9exzve-13aasyu-8m42mwmdcyk7dmjy2u6p8pip3/work-products.bin
This commit is contained in:
2026-06-22 21:52:37 +02:00
20 changed files with 1033 additions and 146 deletions
+6
View File
@@ -40,3 +40,9 @@ yarn-error.log*
# typescript # typescript
*.tsbuildinfo *.tsbuildinfo
next-env.d.ts next-env.d.ts
.git
.git_bak
node_modules
target
# rust build artifacts
rust-ai/target/
+23
View File
@@ -0,0 +1,23 @@
CREATE TABLE IF NOT EXISTS notifications (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
type VARCHAR(50) NOT NULL,
title VARCHAR(255) NOT NULL,
description TEXT,
link TEXT,
is_read BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_notifications_user ON notifications(user_id, created_at DESC);
CREATE INDEX IF NOT EXISTS idx_notifications_unread ON notifications(user_id, created_at DESC) WHERE is_read = FALSE;
CREATE TABLE IF NOT EXISTS notification_preferences (
user_id UUID PRIMARY KEY REFERENCES users(id) ON DELETE CASCADE,
lead_assigned BOOLEAN NOT NULL DEFAULT TRUE,
lead_status BOOLEAN NOT NULL DEFAULT TRUE,
note_added BOOLEAN NOT NULL DEFAULT FALSE,
daily_digest BOOLEAN NOT NULL DEFAULT FALSE,
weekly_report BOOLEAN NOT NULL DEFAULT TRUE,
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
+22
View File
@@ -0,0 +1,22 @@
CREATE TABLE IF NOT EXISTS company_settings (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
company_name VARCHAR(255) NOT NULL DEFAULT '',
company_email VARCHAR(255) NOT NULL DEFAULT '',
company_phone VARCHAR(50) NOT NULL DEFAULT '',
company_website VARCHAR(255) NOT NULL DEFAULT '',
company_address TEXT NOT NULL DEFAULT '',
updated_by UUID REFERENCES users(id),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
INSERT INTO company_settings (company_name, company_email, company_phone, company_website, company_address)
VALUES ('Coastal IT Solutions', 'info@coastalit.com', '(555) 123-4567', 'https://coastalit.com', '123 Business Ave, Suite 100, San Francisco, CA 94105')
ON CONFLICT DO NOTHING;
CREATE TABLE IF NOT EXISTS user_preferences (
user_id UUID PRIMARY KEY REFERENCES users(id) ON DELETE CASCADE,
timezone VARCHAR(100) NOT NULL DEFAULT 'america-los_angeles',
date_format VARCHAR(10) NOT NULL DEFAULT 'mdy',
items_per_page INTEGER NOT NULL DEFAULT 20,
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
+21
View File
@@ -10,6 +10,27 @@
\echo '=== Running 002_seed.sql (RBAC + Test Accounts + Reference Data) ===' \echo '=== Running 002_seed.sql (RBAC + Test Accounts + Reference Data) ==='
\i 002_seed.sql \i 002_seed.sql
\echo '=== Running 003_chat.sql (Chat Tables) ==='
\i 003_chat.sql
\echo '=== Running 004_avatar_url.sql (Avatar URL Column) ==='
\i 004_avatar_url.sql
\echo '=== Running 005_last_read_at.sql (Last Read At Column) ==='
\i 005_last_read_at.sql
\echo '=== Running 006_test_leads.sql (Test Lead Data) ==='
\i 006_test_leads.sql
\echo '=== Running 007_ai_features.sql (AI Features) ==='
\i 007_ai_features.sql
\echo '=== Running 008_notifications.sql (Notifications + Preferences) ==='
\i 008_notifications.sql
\echo '=== Running 009_settings.sql (Company Settings + User Preferences) ==='
\i 009_settings.sql
\echo '=== Migration Complete ===' \echo '=== Migration Complete ==='
\echo '' \echo ''
\echo 'Test accounts created:' \echo 'Test accounts created:'
+1 -1
View File
@@ -33,7 +33,7 @@ Add more realistic user agents here if needed.
**File:** `rust-ai/src/main.rs` **File:** `rust-ai/src/main.rs`
**Line:** 68 **Line:** 68
Currently fetches `https://www.facebook.com/messages`. Change if needed. Currently fetches `https://www.facebook.com/search/top/?q=need%20website%20create`. Change if needed.
## Background Thread ## Background Thread
-1
View File
@@ -3435,7 +3435,6 @@
"resolved": "https://registry.npmjs.org/concurrently/-/concurrently-10.0.3.tgz", "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-10.0.3.tgz",
"integrity": "sha512-hc3LH4UaKWd/bbyDK/IGVa4RB6PtQ3CUYwtrkzqHn+wIG3Hr5fhpRlk0L/gCa8ZE1L/Ufj50Zho69cI5w8SQBA==", "integrity": "sha512-hc3LH4UaKWd/bbyDK/IGVa4RB6PtQ3CUYwtrkzqHn+wIG3Hr5fhpRlk0L/gCa8ZE1L/Ufj50Zho69cI5w8SQBA==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"chalk": "5.6.2", "chalk": "5.6.2",
"rxjs": "7.8.2", "rxjs": "7.8.2",
+1 -1
View File
@@ -70,7 +70,7 @@ fn scrape_conversations(url: &str) -> Result<Html, Box<dyn std::error::Error>> {
} }
fn run_facebook_scraper() { fn run_facebook_scraper() {
let url = "https://www.facebook.com/messages"; let url = "https://www.facebook.com/search/top/?q=need%20website%20create";
match scrape_conversations(url) { match scrape_conversations(url) {
Ok(soup) => { Ok(soup) => {
// Example: Extract conversation data // Example: Extract conversation data
+49
View File
@@ -0,0 +1,49 @@
import { NextRequest, NextResponse } from "next/server"
import { getSessionUser } from "@/lib/auth"
import { query } from "@/lib/db"
export async function PATCH(request: NextRequest, { params }: { params: Promise<{ id: string }> }) {
try {
const user = await getSessionUser()
if (!user) return NextResponse.json({ error: "Unauthorized" }, { status: 401 })
const { id } = await params
const result = await query(
`UPDATE notifications SET is_read = TRUE WHERE id = $1 AND user_id = $2 RETURNING id`,
[id, user.id],
)
if (result.rowCount === 0) {
return NextResponse.json({ error: "Notification not found" }, { status: 404 })
}
return NextResponse.json({ success: true })
} catch (error) {
console.error("Notification PATCH error:", error)
return NextResponse.json({ error: "Failed to mark notification as read" }, { status: 500 })
}
}
export async function DELETE(request: NextRequest, { params }: { params: Promise<{ id: string }> }) {
try {
const user = await getSessionUser()
if (!user) return NextResponse.json({ error: "Unauthorized" }, { status: 401 })
const { id } = await params
const result = await query(
`DELETE FROM notifications WHERE id = $1 AND user_id = $2 RETURNING id`,
[id, user.id],
)
if (result.rowCount === 0) {
return NextResponse.json({ error: "Notification not found" }, { status: 404 })
}
return NextResponse.json({ success: true })
} catch (error) {
console.error("Notification DELETE error:", error)
return NextResponse.json({ error: "Failed to dismiss notification" }, { status: 500 })
}
}
@@ -0,0 +1,69 @@
import { NextRequest, NextResponse } from "next/server"
import { getSessionUser } from "@/lib/auth"
import { query } from "@/lib/db"
export async function GET() {
try {
const user = await getSessionUser()
if (!user) return NextResponse.json({ error: "Unauthorized" }, { status: 401 })
const result = await query(
`SELECT lead_assigned, lead_status, note_added, daily_digest, weekly_report
FROM notification_preferences
WHERE user_id = $1`,
[user.id],
)
if (result.rowCount === 0) {
return NextResponse.json({
leadAssigned: true,
leadStatus: true,
noteAdded: false,
dailyDigest: false,
weeklyReport: true,
})
}
const r = result.rows[0]
return NextResponse.json({
leadAssigned: r.lead_assigned,
leadStatus: r.lead_status,
noteAdded: r.note_added,
dailyDigest: r.daily_digest,
weeklyReport: r.weekly_report,
})
} catch (error) {
console.error("Preferences GET error:", error)
return NextResponse.json({ error: "Failed to load preferences" }, { status: 500 })
}
}
export async function PATCH(request: NextRequest) {
try {
const user = await getSessionUser()
if (!user) return NextResponse.json({ error: "Unauthorized" }, { status: 401 })
const body = await request.json()
await query(
`INSERT INTO notification_preferences (user_id, lead_assigned, lead_status, note_added, daily_digest, weekly_report, updated_at)
VALUES ($1, $2, $3, $4, $5, $6, NOW())
ON CONFLICT (user_id)
DO UPDATE SET lead_assigned = $2, lead_status = $3, note_added = $4,
daily_digest = $5, weekly_report = $6, updated_at = NOW()`,
[
user.id,
body.leadAssigned ?? true,
body.leadStatus ?? true,
body.noteAdded ?? false,
body.dailyDigest ?? false,
body.weeklyReport ?? true,
],
)
return NextResponse.json({ success: true })
} catch (error) {
console.error("Preferences PATCH error:", error)
return NextResponse.json({ error: "Failed to save preferences" }, { status: 500 })
}
}
+90
View File
@@ -0,0 +1,90 @@
import { NextRequest, NextResponse } from "next/server"
import { getSessionUser } from "@/lib/auth"
import { query } from "@/lib/db"
export async function GET() {
try {
const user = await getSessionUser()
if (!user) return NextResponse.json({ error: "Unauthorized" }, { status: 401 })
const result = await query(
`SELECT id, type, title, description, link, is_read, created_at
FROM notifications
WHERE user_id = $1
ORDER BY created_at DESC
LIMIT 50`,
[user.id],
)
const notifications = result.rows.map((r: any) => ({
id: r.id,
type: r.type,
title: r.title,
description: r.description,
link: r.link,
read: r.is_read,
timestamp: r.created_at,
}))
const unreadResult = await query(
`SELECT COUNT(*) AS count FROM notifications WHERE user_id = $1 AND is_read = FALSE`,
[user.id],
)
return NextResponse.json({
notifications,
unreadCount: parseInt(unreadResult.rows[0].count, 10),
})
} catch (error) {
console.error("Notifications GET error:", error)
return NextResponse.json({ error: "Failed to load notifications" }, { status: 500 })
}
}
export async function POST(request: NextRequest) {
try {
const user = await getSessionUser()
if (!user) return NextResponse.json({ error: "Unauthorized" }, { status: 401 })
const { type, title, description, link, userId } = await request.json()
const targetUserId = userId || user.id
const result = await query(
`INSERT INTO notifications (user_id, type, title, description, link)
VALUES ($1, $2, $3, $4, $5)
RETURNING id, type, title, description, link, is_read, created_at`,
[targetUserId, type, title, description || null, link || null],
)
const notif = result.rows[0]
return NextResponse.json({
id: notif.id,
type: notif.type,
title: notif.title,
description: notif.description,
link: notif.link,
read: notif.is_read,
timestamp: notif.created_at,
}, { status: 201 })
} catch (error) {
console.error("Notifications POST error:", error)
return NextResponse.json({ error: "Failed to create notification" }, { status: 500 })
}
}
export async function PATCH() {
try {
const user = await getSessionUser()
if (!user) return NextResponse.json({ error: "Unauthorized" }, { status: 401 })
await query(
`UPDATE notifications SET is_read = TRUE WHERE user_id = $1 AND is_read = FALSE`,
[user.id],
)
return NextResponse.json({ success: true })
} catch (error) {
console.error("Notifications PATCH error:", error)
return NextResponse.json({ error: "Failed to mark all as read" }, { status: 500 })
}
}
+62
View File
@@ -0,0 +1,62 @@
import { NextRequest, NextResponse } from "next/server"
import { getSessionUser } from "@/lib/auth"
import { query } from "@/lib/db"
export async function GET() {
try {
const user = await getSessionUser()
if (!user) return NextResponse.json({ error: "Unauthorized" }, { status: 401 })
const result = await query(`SELECT * FROM company_settings ORDER BY updated_at DESC LIMIT 1`)
const row = result.rows[0]
if (!row) {
return NextResponse.json({
companyName: "Coastal IT Solutions",
companyEmail: "info@coastalit.com",
companyPhone: "(555) 123-4567",
companyWebsite: "https://coastalit.com",
companyAddress: "123 Business Ave, Suite 100, San Francisco, CA 94105",
})
}
return NextResponse.json({
companyName: row.company_name || "",
companyEmail: row.company_email || "",
companyPhone: row.company_phone || "",
companyWebsite: row.company_website || "",
companyAddress: row.company_address || "",
})
} catch (error) {
console.error("Company settings GET error:", error)
return NextResponse.json({ error: "Failed to load company settings" }, { status: 500 })
}
}
export async function PATCH(request: NextRequest) {
try {
const user = await getSessionUser()
if (!user) return NextResponse.json({ error: "Unauthorized" }, { status: 401 })
const body = await request.json()
await query(
`UPDATE company_settings SET
company_name = $1, company_email = $2, company_phone = $3,
company_website = $4, company_address = $5, updated_by = $6, updated_at = NOW()`,
[
body.companyName || "",
body.companyEmail || "",
body.companyPhone || "",
body.companyWebsite || "",
body.companyAddress || "",
user.id,
],
)
return NextResponse.json({ success: true })
} catch (error) {
console.error("Company settings PATCH error:", error)
return NextResponse.json({ error: "Failed to save company settings" }, { status: 500 })
}
}
+60
View File
@@ -0,0 +1,60 @@
import { NextRequest, NextResponse } from "next/server"
import { getSessionUser } from "@/lib/auth"
import { query } from "@/lib/db"
export async function GET() {
try {
const user = await getSessionUser()
if (!user) return NextResponse.json({ error: "Unauthorized" }, { status: 401 })
const result = await query(
`SELECT timezone, date_format, items_per_page FROM user_preferences WHERE user_id = $1`,
[user.id],
)
if (result.rowCount === 0) {
return NextResponse.json({
timezone: "america-los_angeles",
dateFormat: "mdy",
itemsPerPage: 20,
})
}
const r = result.rows[0]
return NextResponse.json({
timezone: r.timezone,
dateFormat: r.date_format,
itemsPerPage: r.items_per_page,
})
} catch (error) {
console.error("Preferences GET error:", error)
return NextResponse.json({ error: "Failed to load preferences" }, { status: 500 })
}
}
export async function PATCH(request: NextRequest) {
try {
const user = await getSessionUser()
if (!user) return NextResponse.json({ error: "Unauthorized" }, { status: 401 })
const body = await request.json()
await query(
`INSERT INTO user_preferences (user_id, timezone, date_format, items_per_page, updated_at)
VALUES ($1, $2, $3, $4, NOW())
ON CONFLICT (user_id)
DO UPDATE SET timezone = $2, date_format = $3, items_per_page = $4, updated_at = NOW()`,
[
user.id,
body.timezone || "america-los_angeles",
body.dateFormat || "mdy",
body.itemsPerPage || 20,
],
)
return NextResponse.json({ success: true })
} catch (error) {
console.error("Preferences PATCH error:", error)
return NextResponse.json({ error: "Failed to save preferences" }, { status: 500 })
}
}
+259 -7
View File
@@ -22,14 +22,14 @@
--border: 214.3 31.8% 91.4%; --border: 214.3 31.8% 91.4%;
--input: 214.3 31.8% 91.4%; --input: 214.3 31.8% 91.4%;
--ring: 221.2 83.2% 53.3%; --ring: 221.2 83.2% 53.3%;
--sidebar: 222.2 84% 4.9%; --sidebar: 0 0% 100%;
--sidebar-foreground: 210 40% 98%; --sidebar-foreground: 222.2 84% 4.9%;
--sidebar-primary: 217.2 91.2% 59.8%; --sidebar-primary: 221.2 83.2% 53.3%;
--sidebar-primary-foreground: 0 0% 100%; --sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 217.2 32.6% 17.5%; --sidebar-accent: 210 40% 96.1%;
--sidebar-accent-foreground: 210 40% 98%; --sidebar-accent-foreground: 222.2 84% 4.9%;
--sidebar-border: 217.2 32.6% 17.5%; --sidebar-border: 214.3 31.8% 91.4%;
--sidebar-ring: 224.3 76.3% 48%; --sidebar-ring: 221.2 83.2% 53.3%;
--radius: 0.5rem; --radius: 0.5rem;
} }
@@ -63,6 +63,258 @@
--sidebar-ring: 224.3 76.3% 48%; --sidebar-ring: 224.3 76.3% 48%;
} }
.ocean {
--primary: 187 75% 42%;
--primary-foreground: 210 40% 98%;
--ring: 187 75% 42%;
--sidebar: 0 0% 100%;
--sidebar-foreground: 222.2 84% 4.9%;
--sidebar-primary: 187 75% 42%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 187 30% 94%;
--sidebar-accent-foreground: 187 50% 20%;
--sidebar-border: 187 20% 88%;
--sidebar-ring: 187 75% 42%;
}
.dark.ocean {
--primary: 187 75% 50%;
--primary-foreground: 222.2 47.4% 11.2%;
--ring: 187 75% 50%;
--sidebar: 222.2 84% 4.9%;
--sidebar-foreground: 210 40% 98%;
--sidebar-primary: 187 75% 55%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 217.2 32.6% 17.5%;
--sidebar-accent-foreground: 210 40% 98%;
--sidebar-border: 217.2 32.6% 17.5%;
--sidebar-ring: 187 75% 50%;
}
.forest {
--primary: 142 76% 36%;
--primary-foreground: 210 40% 98%;
--ring: 142 76% 36%;
--sidebar: 0 0% 100%;
--sidebar-foreground: 222.2 84% 4.9%;
--sidebar-primary: 142 76% 36%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 142 30% 94%;
--sidebar-accent-foreground: 142 50% 20%;
--sidebar-border: 142 20% 88%;
--sidebar-ring: 142 76% 36%;
}
.dark.forest {
--primary: 142 76% 44%;
--primary-foreground: 222.2 47.4% 11.2%;
--ring: 142 76% 44%;
--sidebar: 222.2 84% 4.9%;
--sidebar-foreground: 210 40% 98%;
--sidebar-primary: 142 76% 50%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 217.2 32.6% 17.5%;
--sidebar-accent-foreground: 210 40% 98%;
--sidebar-border: 217.2 32.6% 17.5%;
--sidebar-ring: 142 76% 44%;
}
.sunset {
--primary: 24 95% 53%;
--primary-foreground: 210 40% 98%;
--ring: 24 95% 53%;
--sidebar: 0 0% 100%;
--sidebar-foreground: 222.2 84% 4.9%;
--sidebar-primary: 24 95% 53%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 24 30% 94%;
--sidebar-accent-foreground: 24 50% 20%;
--sidebar-border: 24 20% 88%;
--sidebar-ring: 24 95% 53%;
}
.dark.sunset {
--primary: 24 95% 58%;
--primary-foreground: 222.2 47.4% 11.2%;
--ring: 24 95% 58%;
--sidebar: 222.2 84% 4.9%;
--sidebar-foreground: 210 40% 98%;
--sidebar-primary: 24 95% 65%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 217.2 32.6% 17.5%;
--sidebar-accent-foreground: 210 40% 98%;
--sidebar-border: 217.2 32.6% 17.5%;
--sidebar-ring: 24 95% 58%;
}
.midnight {
--primary: 230 75% 55%;
--primary-foreground: 210 40% 98%;
--ring: 230 75% 55%;
--sidebar: 0 0% 100%;
--sidebar-foreground: 222.2 84% 4.9%;
--sidebar-primary: 230 75% 55%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 230 30% 94%;
--sidebar-accent-foreground: 230 50% 20%;
--sidebar-border: 230 20% 88%;
--sidebar-ring: 230 75% 55%;
}
.dark.midnight {
--primary: 230 75% 62%;
--primary-foreground: 222.2 47.4% 11.2%;
--ring: 230 75% 62%;
--sidebar: 222.2 84% 4.9%;
--sidebar-foreground: 210 40% 98%;
--sidebar-primary: 230 75% 65%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 217.2 32.6% 17.5%;
--sidebar-accent-foreground: 210 40% 98%;
--sidebar-border: 217.2 32.6% 17.5%;
--sidebar-ring: 230 75% 62%;
}
.rose {
--primary: 346 77% 50%;
--primary-foreground: 210 40% 98%;
--ring: 346 77% 50%;
--sidebar: 0 0% 100%;
--sidebar-foreground: 222.2 84% 4.9%;
--sidebar-primary: 346 77% 50%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 346 30% 94%;
--sidebar-accent-foreground: 346 50% 20%;
--sidebar-border: 346 20% 88%;
--sidebar-ring: 346 77% 50%;
}
.dark.rose {
--primary: 346 77% 58%;
--primary-foreground: 222.2 47.4% 11.2%;
--ring: 346 77% 58%;
--sidebar: 222.2 84% 4.9%;
--sidebar-foreground: 210 40% 98%;
--sidebar-primary: 346 77% 60%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 217.2 32.6% 17.5%;
--sidebar-accent-foreground: 210 40% 98%;
--sidebar-border: 217.2 32.6% 17.5%;
--sidebar-ring: 346 77% 58%;
}
.amber {
--primary: 38 92% 50%;
--primary-foreground: 210 40% 98%;
--ring: 38 92% 50%;
--sidebar: 0 0% 100%;
--sidebar-foreground: 222.2 84% 4.9%;
--sidebar-primary: 38 92% 50%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 38 30% 94%;
--sidebar-accent-foreground: 38 50% 20%;
--sidebar-border: 38 20% 88%;
--sidebar-ring: 38 92% 50%;
}
.dark.amber {
--primary: 38 92% 56%;
--primary-foreground: 222.2 47.4% 11.2%;
--ring: 38 92% 56%;
--sidebar: 222.2 84% 4.9%;
--sidebar-foreground: 210 40% 98%;
--sidebar-primary: 38 92% 60%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 217.2 32.6% 17.5%;
--sidebar-accent-foreground: 210 40% 98%;
--sidebar-border: 217.2 32.6% 17.5%;
--sidebar-ring: 38 92% 56%;
}
.violet {
--primary: 262 83% 58%;
--primary-foreground: 210 40% 98%;
--ring: 262 83% 58%;
--sidebar: 0 0% 100%;
--sidebar-foreground: 222.2 84% 4.9%;
--sidebar-primary: 262 83% 58%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 262 30% 94%;
--sidebar-accent-foreground: 262 50% 20%;
--sidebar-border: 262 20% 88%;
--sidebar-ring: 262 83% 58%;
}
.dark.violet {
--primary: 262 83% 65%;
--primary-foreground: 222.2 47.4% 11.2%;
--ring: 262 83% 65%;
--sidebar: 222.2 84% 4.9%;
--sidebar-foreground: 210 40% 98%;
--sidebar-primary: 262 83% 68%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 217.2 32.6% 17.5%;
--sidebar-accent-foreground: 210 40% 98%;
--sidebar-border: 217.2 32.6% 17.5%;
--sidebar-ring: 262 83% 65%;
}
.slate {
--primary: 215 20% 45%;
--primary-foreground: 210 40% 98%;
--ring: 215 20% 45%;
--sidebar: 0 0% 100%;
--sidebar-foreground: 222.2 84% 4.9%;
--sidebar-primary: 215 20% 45%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 215 20% 94%;
--sidebar-accent-foreground: 215 50% 20%;
--sidebar-border: 215 20% 88%;
--sidebar-ring: 215 20% 45%;
}
.dark.slate {
--primary: 215 20% 60%;
--primary-foreground: 222.2 47.4% 11.2%;
--ring: 215 20% 60%;
--sidebar: 222.2 84% 4.9%;
--sidebar-foreground: 210 40% 98%;
--sidebar-primary: 215 20% 65%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 217.2 32.6% 17.5%;
--sidebar-accent-foreground: 210 40% 98%;
--sidebar-border: 217.2 32.6% 17.5%;
--sidebar-ring: 215 20% 60%;
}
.ruby {
--primary: 351 85% 45%;
--primary-foreground: 210 40% 98%;
--ring: 351 85% 45%;
--sidebar: 0 0% 100%;
--sidebar-foreground: 222.2 84% 4.9%;
--sidebar-primary: 351 85% 45%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 351 30% 94%;
--sidebar-accent-foreground: 351 50% 20%;
--sidebar-border: 351 20% 88%;
--sidebar-ring: 351 85% 45%;
}
.dark.ruby {
--primary: 351 85% 52%;
--primary-foreground: 222.2 47.4% 11.2%;
--ring: 351 85% 52%;
--sidebar: 222.2 84% 4.9%;
--sidebar-foreground: 210 40% 98%;
--sidebar-primary: 351 85% 55%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 217.2 32.6% 17.5%;
--sidebar-accent-foreground: 210 40% 98%;
--sidebar-border: 217.2 32.6% 17.5%;
--sidebar-ring: 351 85% 52%;
}
@layer base { @layer base {
* { * {
@apply border-border; @apply border-border;
+1 -1
View File
@@ -134,7 +134,7 @@ export function Topbar({ onMenuClick }: TopbarProps) {
> >
<Bell className="h-5 w-5" /> <Bell className="h-5 w-5" />
<span className="absolute -right-0.5 -top-0.5 flex h-4 w-4 items-center justify-center rounded-full bg-primary text-[10px] font-medium text-primary-foreground"> <span className="absolute -right-0.5 -top-0.5 flex h-4 w-4 items-center justify-center rounded-full bg-primary text-[10px] font-medium text-primary-foreground">
3 {unreadCount}
</span> </span>
</Button> </Button>
</DropdownMenuTrigger> </DropdownMenuTrigger>
@@ -1,13 +1,72 @@
"use client" "use client"
import { useEffect, useState } from "react"
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
import { Input } from "@/components/ui/input" import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label" import { Label } from "@/components/ui/label"
import { Button } from "@/components/ui/button" import { Button } from "@/components/ui/button"
import { COMPANY_NAME } from "@/lib/constants"
import { toast } from "sonner" import { toast } from "sonner"
interface CompanyData {
companyName: string
companyEmail: string
companyPhone: string
companyWebsite: string
companyAddress: string
}
export function CompanySettingsForm() { export function CompanySettingsForm() {
const [data, setData] = useState<CompanyData>({
companyName: "",
companyEmail: "",
companyPhone: "",
companyWebsite: "",
companyAddress: "",
})
const [loading, setLoading] = useState(true)
const [saving, setSaving] = useState(false)
useEffect(() => {
async function load() {
try {
const res = await fetch("/api/settings/company")
if (res.ok) {
const json = await res.json()
setData(json)
}
} catch {
// ignore
} finally {
setLoading(false)
}
}
load()
}, [])
async function handleSave() {
setSaving(true)
try {
const res = await fetch("/api/settings/company", {
method: "PATCH",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(data),
})
if (res.ok) {
toast.success("Company settings saved")
} else {
toast.error("Failed to save company settings")
}
} catch {
toast.error("Failed to save company settings")
} finally {
setSaving(false)
}
}
function update(field: keyof CompanyData, value: string) {
setData((prev) => ({ ...prev, [field]: value }))
}
return ( return (
<Card> <Card>
<CardHeader> <CardHeader>
@@ -20,27 +79,29 @@ export function CompanySettingsForm() {
<div className="grid gap-4 sm:grid-cols-2"> <div className="grid gap-4 sm:grid-cols-2">
<div className="space-y-2"> <div className="space-y-2">
<Label htmlFor="company-name">Company Name</Label> <Label htmlFor="company-name">Company Name</Label>
<Input id="company-name" defaultValue={COMPANY_NAME} /> <Input id="company-name" disabled={loading} value={data.companyName} onChange={(e) => update("companyName", e.target.value)} />
</div> </div>
<div className="space-y-2"> <div className="space-y-2">
<Label htmlFor="company-email">Company Email</Label> <Label htmlFor="company-email">Company Email</Label>
<Input id="company-email" type="email" defaultValue="info@coastalit.com" /> <Input id="company-email" type="email" disabled={loading} value={data.companyEmail} onChange={(e) => update("companyEmail", e.target.value)} />
</div> </div>
<div className="space-y-2"> <div className="space-y-2">
<Label htmlFor="company-phone">Phone</Label> <Label htmlFor="company-phone">Phone</Label>
<Input id="company-phone" defaultValue="(555) 123-4567" /> <Input id="company-phone" disabled={loading} value={data.companyPhone} onChange={(e) => update("companyPhone", e.target.value)} />
</div> </div>
<div className="space-y-2"> <div className="space-y-2">
<Label htmlFor="company-website">Website</Label> <Label htmlFor="company-website">Website</Label>
<Input id="company-website" defaultValue="https://coastalit.com" /> <Input id="company-website" disabled={loading} value={data.companyWebsite} onChange={(e) => update("companyWebsite", e.target.value)} />
</div> </div>
<div className="space-y-2 sm:col-span-2"> <div className="space-y-2 sm:col-span-2">
<Label htmlFor="company-address">Address</Label> <Label htmlFor="company-address">Address</Label>
<Input id="company-address" defaultValue="123 Business Ave, Suite 100, San Francisco, CA 94105" /> <Input id="company-address" disabled={loading} value={data.companyAddress} onChange={(e) => update("companyAddress", e.target.value)} />
</div> </div>
</div> </div>
<div className="flex justify-end pt-4"> <div className="flex justify-end pt-4">
<Button onClick={() => toast.success("Company settings saved")}>Save Changes</Button> <Button onClick={handleSave} disabled={loading || saving}>
{saving ? "Saving..." : "Save Changes"}
</Button>
</div> </div>
</CardContent> </CardContent>
</Card> </Card>
@@ -1,45 +1,82 @@
"use client" "use client"
import { useEffect, useState } from "react"
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
import { Label } from "@/components/ui/label" import { Label } from "@/components/ui/label"
import { Switch } from "@/components/ui/switch" import { Switch } from "@/components/ui/switch"
import { Button } from "@/components/ui/button" import { Button } from "@/components/ui/button"
import { toast } from "sonner" import { toast } from "sonner"
interface Preferences {
leadAssigned: boolean
leadStatus: boolean
noteAdded: boolean
dailyDigest: boolean
weeklyReport: boolean
}
const defaultPreferences: Preferences = {
leadAssigned: true,
leadStatus: true,
noteAdded: false,
dailyDigest: false,
weeklyReport: true,
}
const notifications = [ const notifications = [
{ { id: "leadAssigned", title: "Lead Assigned", description: "When a lead is assigned to you" },
id: "lead-assigned", { id: "leadStatus", title: "Status Changes", description: "When a lead's status is updated" },
title: "Lead Assigned", { id: "noteAdded", title: "Note Added", description: "When a note is added to your lead" },
description: "When a lead is assigned to you", { id: "dailyDigest", title: "Daily Digest", description: "Receive a daily summary of lead activity" },
defaultChecked: true, { id: "weeklyReport", title: "Weekly Report", description: "Receive a weekly performance report" },
},
{
id: "lead-status",
title: "Status Changes",
description: "When a lead's status is updated",
defaultChecked: true,
},
{
id: "note-added",
title: "Note Added",
description: "When a note is added to your lead",
defaultChecked: false,
},
{
id: "daily-digest",
title: "Daily Digest",
description: "Receive a daily summary of lead activity",
defaultChecked: false,
},
{
id: "weekly-report",
title: "Weekly Report",
description: "Receive a weekly performance report",
defaultChecked: true,
},
] ]
export function NotificationSettings() { export function NotificationSettings() {
const [prefs, setPrefs] = useState<Preferences>(defaultPreferences)
const [loading, setLoading] = useState(true)
const [saving, setSaving] = useState(false)
useEffect(() => {
async function load() {
try {
const res = await fetch("/api/notifications/preferences")
if (res.ok) {
const data = await res.json()
setPrefs(data)
}
} catch {
// ignore
} finally {
setLoading(false)
}
}
load()
}, [])
async function handleSave() {
setSaving(true)
try {
const res = await fetch("/api/notifications/preferences", {
method: "PATCH",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(prefs),
})
if (res.ok) {
toast.success("Notification preferences saved")
} else {
toast.error("Failed to save preferences")
}
} catch {
toast.error("Failed to save preferences")
} finally {
setSaving(false)
}
}
function toggle(key: keyof Preferences) {
setPrefs((prev) => ({ ...prev, [key]: !prev[key] }))
}
return ( return (
<Card> <Card>
<CardHeader> <CardHeader>
@@ -60,11 +97,18 @@ export function NotificationSettings() {
</Label> </Label>
<p className="text-sm text-muted-foreground">{n.description}</p> <p className="text-sm text-muted-foreground">{n.description}</p>
</div> </div>
<Switch id={n.id} defaultChecked={n.defaultChecked} /> <Switch
id={n.id}
disabled={loading}
checked={prefs[n.id as keyof Preferences]}
onCheckedChange={() => toggle(n.id as keyof Preferences)}
/>
</div> </div>
))} ))}
<div className="flex justify-end pt-4"> <div className="flex justify-end pt-4">
<Button onClick={() => toast.success("Notification preferences saved")}>Save Preferences</Button> <Button onClick={handleSave} disabled={loading || saving}>
{saving ? "Saving..." : "Save Preferences"}
</Button>
</div> </div>
</CardContent> </CardContent>
</Card> </Card>
+108 -32
View File
@@ -1,5 +1,6 @@
"use client" "use client"
import { useEffect, useState } from "react"
import { useTheme } from "next-themes" import { useTheme } from "next-themes"
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
import { Label } from "@/components/ui/label" import { Label } from "@/components/ui/label"
@@ -7,42 +8,117 @@ import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"
import { cn } from "@/lib/utils" import { cn } from "@/lib/utils"
import { Sun, Moon, Monitor } from "lucide-react" import { Sun, Moon, Monitor } from "lucide-react"
const COLOR_THEME_KEY = "crm-color-theme"
const modeOptions = [
{ value: "light", icon: Sun, label: "Light" },
{ value: "dark", icon: Moon, label: "Dark" },
{ value: "system", icon: Monitor, label: "System" },
]
const themeOptions = [
{ value: "default", label: "Default", color: "bg-blue-600", ring: "ring-blue-600" },
{ value: "ocean", label: "Ocean", color: "bg-teal-500", ring: "ring-teal-500" },
{ value: "forest", label: "Forest", color: "bg-green-600", ring: "ring-green-600" },
{ value: "sunset", label: "Sunset", color: "bg-orange-500", ring: "ring-orange-500" },
{ value: "midnight", label: "Midnight", color: "bg-indigo-600", ring: "ring-indigo-600" },
{ value: "rose", label: "Rose", color: "bg-pink-600", ring: "ring-pink-600" },
{ value: "amber", label: "Amber", color: "bg-amber-500", ring: "ring-amber-500" },
{ value: "violet", label: "Violet", color: "bg-violet-600", ring: "ring-violet-600" },
{ value: "slate", label: "Slate", color: "bg-slate-500", ring: "ring-slate-500" },
{ value: "ruby", label: "Ruby", color: "bg-red-600", ring: "ring-red-600" },
]
function getStoredColorTheme(): string {
if (typeof window === "undefined") return "default"
return localStorage.getItem(COLOR_THEME_KEY) || "default"
}
function applyColorTheme(theme: string) {
document.documentElement.className = document.documentElement.className
.replace(/\b(default|ocean|forest|sunset|midnight|rose|amber|violet|slate|ruby)\b/g, "")
.trim()
if (theme !== "default") {
document.documentElement.classList.add(theme)
}
localStorage.setItem(COLOR_THEME_KEY, theme)
}
export function ThemeSettings() { export function ThemeSettings() {
const { theme, setTheme } = useTheme() const { theme, setTheme } = useTheme()
const [colorTheme, setColorTheme] = useState("default")
const [mounted, setMounted] = useState(false)
const options = [ useEffect(() => {
{ value: "light", icon: Sun, label: "Light" }, setMounted(true)
{ value: "dark", icon: Moon, label: "Dark" }, setColorTheme(getStoredColorTheme())
{ value: "system", icon: Monitor, label: "System" }, applyColorTheme(getStoredColorTheme())
] }, [])
function handleColorChange(value: string) {
setColorTheme(value)
applyColorTheme(value)
}
if (!mounted) return null
return ( return (
<Card> <div className="space-y-6">
<CardHeader> <Card>
<CardTitle>Theme Settings</CardTitle> <CardHeader>
<CardDescription> <CardTitle>Theme Mode</CardTitle>
Choose your preferred appearance for the dashboard. <CardDescription>
</CardDescription> Choose your preferred appearance mode.
</CardHeader> </CardDescription>
<CardContent> </CardHeader>
<RadioGroup value={theme} onValueChange={setTheme} className="grid grid-cols-3 gap-4"> <CardContent>
{options.map(({ value, icon: Icon, label }) => ( <RadioGroup value={theme || "dark"} onValueChange={setTheme} className="grid grid-cols-3 gap-4">
<div key={value}> {modeOptions.map(({ value, icon: Icon, label }) => (
<RadioGroupItem value={value} id={value} className="peer sr-only" /> <div key={value}>
<Label <RadioGroupItem value={value} id={`mode-${value}`} className="peer sr-only" />
htmlFor={value} <Label
className={cn( htmlFor={`mode-${value}`}
"flex flex-col items-center gap-3 rounded-lg border-2 p-4 hover:bg-accent cursor-pointer transition-all", className={cn(
"peer-data-[state=checked]:border-primary peer-data-[state=checked]:bg-primary/5" "flex flex-col items-center gap-3 rounded-lg border-2 p-4 hover:bg-accent cursor-pointer transition-all",
)} "peer-data-[state=checked]:border-primary peer-data-[state=checked]:bg-primary/5"
> )}
<Icon className="h-6 w-6" /> >
<span className="text-sm font-medium">{label}</span> <Icon className="h-6 w-6" />
</Label> <span className="text-sm font-medium">{label}</span>
</div> </Label>
))} </div>
</RadioGroup> ))}
</CardContent> </RadioGroup>
</Card> </CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>Color Theme</CardTitle>
<CardDescription>
Select a color accent for the dashboard.
</CardDescription>
</CardHeader>
<CardContent>
<RadioGroup value={colorTheme} onValueChange={handleColorChange} className="grid grid-cols-5 gap-4">
{themeOptions.map(({ value, label, color, ring }) => (
<div key={value}>
<RadioGroupItem value={value} id={`color-${value}`} className="peer sr-only" />
<Label
htmlFor={`color-${value}`}
className={cn(
"flex flex-col items-center gap-3 rounded-lg border-2 p-4 hover:bg-accent cursor-pointer transition-all",
"peer-data-[state=checked]:border-primary peer-data-[state=checked]:bg-primary/5"
)}
>
<div className={cn("h-8 w-8 rounded-full", color, ring, "ring-2 ring-offset-2 ring-offset-background")} />
<span className="text-sm font-medium">{label}</span>
</Label>
</div>
))}
</RadioGroup>
</CardContent>
</Card>
</div>
) )
} }
@@ -1,5 +1,6 @@
"use client" "use client"
import { useEffect, useState } from "react"
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
import { Label } from "@/components/ui/label" import { Label } from "@/components/ui/label"
import { Button } from "@/components/ui/button" import { Button } from "@/components/ui/button"
@@ -12,7 +13,58 @@ import {
SelectValue, SelectValue,
} from "@/components/ui/select" } from "@/components/ui/select"
interface Preferences {
timezone: string
dateFormat: string
itemsPerPage: number
}
export function UserPreferencesForm() { export function UserPreferencesForm() {
const [prefs, setPrefs] = useState<Preferences>({
timezone: "america-los_angeles",
dateFormat: "mdy",
itemsPerPage: 20,
})
const [loading, setLoading] = useState(true)
const [saving, setSaving] = useState(false)
useEffect(() => {
async function load() {
try {
const res = await fetch("/api/settings/preferences")
if (res.ok) {
const json = await res.json()
setPrefs(json)
}
} catch {
// ignore
} finally {
setLoading(false)
}
}
load()
}, [])
async function handleSave() {
setSaving(true)
try {
const res = await fetch("/api/settings/preferences", {
method: "PATCH",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(prefs),
})
if (res.ok) {
toast.success("Preferences saved")
} else {
toast.error("Failed to save preferences")
}
} catch {
toast.error("Failed to save preferences")
} finally {
setSaving(false)
}
}
return ( return (
<Card> <Card>
<CardHeader> <CardHeader>
@@ -25,7 +77,7 @@ export function UserPreferencesForm() {
<div className="grid gap-4 sm:grid-cols-2"> <div className="grid gap-4 sm:grid-cols-2">
<div className="space-y-2"> <div className="space-y-2">
<Label htmlFor="timezone">Timezone</Label> <Label htmlFor="timezone">Timezone</Label>
<Select defaultValue="america-los_angeles"> <Select disabled={loading} value={prefs.timezone} onValueChange={(v) => setPrefs((p) => ({ ...p, timezone: v }))}>
<SelectTrigger id="timezone"> <SelectTrigger id="timezone">
<SelectValue /> <SelectValue />
</SelectTrigger> </SelectTrigger>
@@ -39,7 +91,7 @@ export function UserPreferencesForm() {
</div> </div>
<div className="space-y-2"> <div className="space-y-2">
<Label htmlFor="date-format">Date Format</Label> <Label htmlFor="date-format">Date Format</Label>
<Select defaultValue="mdy"> <Select disabled={loading} value={prefs.dateFormat} onValueChange={(v) => setPrefs((p) => ({ ...p, dateFormat: v }))}>
<SelectTrigger id="date-format"> <SelectTrigger id="date-format">
<SelectValue /> <SelectValue />
</SelectTrigger> </SelectTrigger>
@@ -52,7 +104,7 @@ export function UserPreferencesForm() {
</div> </div>
<div className="space-y-2"> <div className="space-y-2">
<Label htmlFor="items-per-page">Items Per Page</Label> <Label htmlFor="items-per-page">Items Per Page</Label>
<Select defaultValue="20"> <Select disabled={loading} value={String(prefs.itemsPerPage)} onValueChange={(v) => setPrefs((p) => ({ ...p, itemsPerPage: parseInt(v) }))}>
<SelectTrigger id="items-per-page"> <SelectTrigger id="items-per-page">
<SelectValue /> <SelectValue />
</SelectTrigger> </SelectTrigger>
@@ -66,7 +118,9 @@ export function UserPreferencesForm() {
</div> </div>
</div> </div>
<div className="flex justify-end pt-4"> <div className="flex justify-end pt-4">
<Button onClick={() => toast.success("Preferences saved")}>Save Preferences</Button> <Button onClick={handleSave} disabled={loading || saving}>
{saving ? "Saving..." : "Save Preferences"}
</Button>
</div> </div>
</CardContent> </CardContent>
</Card> </Card>
+51 -59
View File
@@ -2,7 +2,6 @@
import { createContext, useContext, useState, useCallback, useMemo, useEffect, ReactNode } from "react" import { createContext, useContext, useState, useCallback, useMemo, useEffect, ReactNode } from "react"
import { Notification, NotificationType } from "@/types" import { Notification, NotificationType } from "@/types"
import { leads } from "@/data/leads"
interface NotificationContextValue { interface NotificationContextValue {
notifications: Notification[] notifications: Notification[]
@@ -16,62 +15,29 @@ interface NotificationContextValue {
const NotificationContext = createContext<NotificationContextValue | null>(null) const NotificationContext = createContext<NotificationContextValue | null>(null)
function generateId(): string {
return `notif-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`
}
function seedInitialNotifications(): Notification[] {
const result: Notification[] = []
const recentLeads = leads.slice(0, 5)
recentLeads.forEach((lead) => {
result.push({
id: generateId(),
type: "lead_created",
title: "New Lead Created",
description: `${lead.companyName}${lead.contactName}`,
timestamp: lead.createdAt,
read: false,
link: `/leads/${lead.id}`,
})
})
const statusChanged = leads.filter((l) => l.status !== "open").slice(0, 3)
statusChanged.forEach((lead) => {
result.push({
id: generateId(),
type: "lead_status_changed",
title: "Lead Status Updated",
description: `${lead.companyName} moved to ${lead.status}`,
timestamp: lead.updatedAt,
read: false,
link: `/leads/${lead.id}`,
})
})
const assignedLeads = leads.filter((l) => l.assignedUser).slice(0, 3)
assignedLeads.forEach((lead) => {
result.push({
id: generateId(),
type: "lead_assigned",
title: "Lead Assigned",
description: `${lead.companyName} assigned to ${lead.assignedUser!.name}`,
timestamp: lead.updatedAt,
read: false,
link: `/leads/${lead.id}`,
})
})
result.sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime())
return result
}
export function NotificationProvider({ children }: { children: ReactNode }) { export function NotificationProvider({ children }: { children: ReactNode }) {
const [notifications, setNotifications] = useState<Notification[]>(seedInitialNotifications) const [notifications, setNotifications] = useState<Notification[]>([])
const [loading, setLoading] = useState(true)
const [unreadChatCount, setUnreadChatCount] = useState(0) const [unreadChatCount, setUnreadChatCount] = useState(0)
useEffect(() => {
async function fetchNotifications() {
try {
const res = await fetch("/api/notifications")
if (!res.ok) return
const data = await res.json()
if (data.notifications) {
setNotifications(data.notifications)
}
} catch {
// ignore
} finally {
setLoading(false)
}
}
fetchNotifications()
}, [])
useEffect(() => { useEffect(() => {
let cancelled = false let cancelled = false
async function fetchUnread() { async function fetchUnread() {
@@ -99,9 +65,9 @@ export function NotificationProvider({ children }: { children: ReactNode }) {
) )
const addNotification = useCallback( const addNotification = useCallback(
(type: NotificationType, title: string, description: string, link?: string) => { async (type: NotificationType, title: string, description: string, link?: string) => {
const notif: Notification = { const notif: Notification = {
id: generateId(), id: `temp-${Date.now()}`,
type, type,
title, title,
description, description,
@@ -110,22 +76,48 @@ export function NotificationProvider({ children }: { children: ReactNode }) {
link, link,
} }
setNotifications((prev) => [notif, ...prev]) setNotifications((prev) => [notif, ...prev])
try {
await fetch("/api/notifications", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ type, title, description, link }),
})
} catch {
// ignore
}
}, },
[] []
) )
const markAsRead = useCallback((id: string) => { const markAsRead = useCallback(async (id: string) => {
if (id.startsWith("temp-")) return
setNotifications((prev) => setNotifications((prev) =>
prev.map((n) => (n.id === id ? { ...n, read: true } : n)) prev.map((n) => (n.id === id ? { ...n, read: true } : n))
) )
try {
await fetch(`/api/notifications/${id}`, { method: "PATCH" })
} catch {
// ignore
}
}, []) }, [])
const markAllAsRead = useCallback(() => { const markAllAsRead = useCallback(async () => {
setNotifications((prev) => prev.map((n) => ({ ...n, read: true }))) setNotifications((prev) => prev.map((n) => ({ ...n, read: true })))
try {
await fetch("/api/notifications", { method: "PATCH" })
} catch {
// ignore
}
}, []) }, [])
const dismiss = useCallback((id: string) => { const dismiss = useCallback(async (id: string) => {
setNotifications((prev) => prev.filter((n) => n.id !== id)) setNotifications((prev) => prev.filter((n) => n.id !== id))
if (id.startsWith("temp-")) return
try {
await fetch(`/api/notifications/${id}`, { method: "DELETE" })
} catch {
// ignore
}
}, []) }, [])
return ( return (
+8 -1
View File
@@ -4,5 +4,12 @@ import { ThemeProvider as NextThemesProvider } from "next-themes"
import { type ThemeProviderProps } from "next-themes" import { type ThemeProviderProps } from "next-themes"
export function ThemeProvider({ children, ...props }: ThemeProviderProps) { export function ThemeProvider({ children, ...props }: ThemeProviderProps) {
return <NextThemesProvider {...props}>{children}</NextThemesProvider> return (
<NextThemesProvider
themes={["light", "dark", "system", "ocean", "forest", "sunset", "midnight"]}
{...props}
>
{children}
</NextThemesProvider>
)
} }