From 8b9be4fec01f4f7bde94658fa381d7ac138378cd Mon Sep 17 00:00:00 2001 From: "[Tui]" Date: Fri, 2 Jan 2026 20:49:19 +1300 Subject: [PATCH] Initial commit --- public/android-chrome-192x192.png | Bin 7460 -> 0 bytes public/android-chrome-512x512.png | Bin 24185 -> 0 bytes public/apple-touch-icon.png | Bin 6651 -> 0 bytes public/favicon-16x16.png | Bin 410 -> 340 bytes public/favicon-32x32.png | Bin 848 -> 0 bytes public/favicon.ico | Bin 15406 -> 0 bytes public/site.webmanifest | 1 - public/test-output.json | 84 ++++++++++++++++ src/app/layout.tsx | 9 -- src/app/page.tsx | 155 +++++++++++++++++++++++------- test-minimal.json | 139 +++++++++++++++++++++++++++ test-output.json | 84 ++++++++++++++++ 12 files changed, 425 insertions(+), 47 deletions(-) delete mode 100644 public/android-chrome-192x192.png delete mode 100644 public/android-chrome-512x512.png delete mode 100644 public/apple-touch-icon.png delete mode 100644 public/favicon-32x32.png delete mode 100644 public/favicon.ico delete mode 100644 public/site.webmanifest create mode 100644 public/test-output.json create mode 100644 test-minimal.json create mode 100644 test-output.json diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png deleted file mode 100644 index 26ebefc761f03d1d6089f6bf78eb028dcca18659..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7460 zcmeI1z;V6tg%)Z^20t@K@TPcA& zEx-9=aV>Lwzeg26sl9#XZ<)vM^tmT~aT#)Wl9ub9>co8$Ke|Xr*Sd4*;aO#256=Qa zgbRV=8y!29cCO6%ztVsG{OmI^|6difG-P7#!1Q1t=;+7na!jEj2}%I8X+5X^P7$C6 z5CK^{F9f50-01tWA?6V^Bs!pLlY8!VQaM-TEQAvnTop=Tj#DVQ>I}{RbQ*Nw)_`?r zQ6eBUfJKExlp*LV!8Hw#4N)^)(*p(mhZUTJAVtpZ8?Jo>IAL@u$>FRzUsj;h06&2L zYo8e{dB9oZ=tKtyv3F*c>&paxCxsKL$$D+7@JmQY{Cdig^z~YkUv;`bLJ2wI$U;T(TGxeOve!sYVpcEEnZMm=6Hi~(oNv~V920T6JHHhrF$O11 zL$170xBQ2J=)duVx}3tFNR#G!dwYE?EiDgEe*d--_Z`cBFW%V+!{KkZsfzFr=VEl$ z1wfbTiWN29sP(ZikpqUne@w7y>JabjN)h6a6zU(;Apm?lK(>1XToXU#PPcP>WdM&1 zIdRQrLk>SrX6mAOw2So|WDkj^UR0Kol?#Etd;bem76T7;khrpjH#SpHJH^420N#AO zdc-IwaCdjA#2_R@x&DWpI7Rq>!p`qFU&5mVvume7+<+JMIykWjkc?i$UX`JGk!Sro z!3`3gP#EE{;B`|HGQ_KRNmQ@kV{9mXDS?4OSu&lJuS>3r478I8IaQ*Jk(87ar=l_D zR~)XJqK8{A3gE=F#=tm$3}G?T%MERa5@VKN_nE;1LF+MqmrS*2m;{Q+hDe4B3Z;Fy zjgdK00)}(*-s@QTb~em?kchFg6w8v4>kELZ0hux7NDYi@I%E6D|2csZnTfHU`70zk z6B<+Th?ln(NIM0iR=dAaDMR>(5!^%!8tRGtzh7mf?EDReP?}>qFe2_$L$6roC$FpG zc)%b^o`Vh|lI+J(vDmSH*YD)mF*a5X+o`}-cH(2(eq)4VkM!s~jKQWg@egPo%hVVV zp;KcJeN3-??&~%o8qLEF&yDLE-n?wOR-&@A!^iS^4|0pKMS5W=m38eC5YWCI_5-T zSSY0~ti+m{fkw&DkV*F?R5!-E#^#&?Y%FYkQOWqJIsu`P zu|FO00;t%(0fU6%D|ktm?yRhRffM;J+hSk+z7uX-hcJ=kNNH-?M*foFKeC52lBgQ# zvR8XH8{!9ye-;@U9#%Ba5ZIvWomYkOw zn>^B9|~bM-5`!MjiP+2QV=gDMX1mVJ72OisK)o%E8~@$maI`^HH?-eNX^; zknE2jb}!v(n5}?}ikyH@`R8ogTsAH)99lK?x;hs!ZfHsp;tY(yuri+JlIa{v8*iPp!|}B*?Q@hoXpZ{4?j!pKO!g#=%&o zBo>{!`HT%fZ}j!qO3Suw`+07e5PT7*l8|qwDqQKB*^zd3Ht<)*&$yw`q&0gR8~=f* zIPB#9uTbxVaP*%_|IHhBB}1oo)=; zPPrM6)Dz2jIkqb0RRMEk6_Lppe;Jb3a#Z(QFFAR*d!m!Rlr>KdPspn|?I%D+>kIeZ z$HX77x}~>h2yzRHE(@(39UW2AQF|mHbnFla2wf-#vdHg+`Q23BmddP=6Ua#Fih;Ws z(F~s|@8%5dWDxIX}*f3z4wa{qf zOg)IbEdOI(QhmMV*STh*el|9C@^7|VEKD{If!D;TLyC(XA+%)Zrw*&0%P!7)|H zlV055Ntz>9ETI|YS^xNi3)lPJxtEzYGDl4sf3 z`}37=a|)Vl1&fZ4j|WO(G#wmT;ue}|P^DGliPQ}loN|U)XsP;YkE5P%*a>?yyfnb3 z!=;=&7q*bSIn&9rjrrWAz>DbG$%{F zKZVLY4`z51Kd3oPK@%$J7ctj}qCpd4?s+mxvJ05r=-UV~I7_bT<{fVAa_}^F6_4;2 zdz(U+KkV(Hn~)JP!*&&-tOWkR@eyUYZ7jc&#qK>l4$rnV%D~$|_@MdEWaa3@E<(vG zcku~_dxbVdJXOH=Y8jn~NF-H3e{dM3+>}OW=k-6#D9pbU%SlI4euXV9Ftgl`?rnJU z3ZAJp)gI{IZ2wK02_8>v=6=m&U^fnj`K_TCldLXG#a_I1F#S5fLk;wuro)v&8piGc zAaQ?0bke%(y}eKaF)Mw?9YIMs8z0}jkJ61@IVMX`daB3w>Zy>>>tiBRW5t2~0q!fn zJ<@U~vpQGSCy2TBvlwv1*=eRs57j_u+U4AYqovn}>i&@W#*6-C6QSn{SR~`6A+ooy1SqoO0ENr~hI^xJ3)$7%H@xtN1 zS|Z813RJ$B>jTE>>LLdJJs#hFO?ay?y1@<`v>VIXwJTd0%(^tq2}2W+!0fbxl&;Pv@D*$jCSy7prK=mGs6sqR-piJ67tw ztk^x?|7<`5Qlh>Hfr?)DtFQ`|zdiZMWP7ye&E$evDQjCsq%kWvJUOS+gpPU*yHnCebmq0ok&uu4YjG7GaT;{b_UL)r?;EdtIobN)-n~68ek_FIzN+}dOjlA@LPDKRuQ2II_tZ@;zEe${h52~FiuKvW-}YMEV$EjqTuDgQgk z(XyTI5$}dsw7v~mcWbX0@+4z=>y1hwIB3TCOORzPYfcUn5`xmwiW$PqLS<}J3OJ!r z0IS8c{e{_um~!p5u~Kz*%d|x{JhAup_qzuNLT;n5=uI!0>)?Wyb@X~OZ*>3s9^+)j zOGv|g;axXYsbOQklQpHNL^7OZb}X0;_)Y1_wyIK>t8#8ZzC^C#t$A5p^w%*`v zD+z`E!kGEry%8%?qzh5-ach=F{|7>0*-#q;I>zNNI18@TuF2waCN3^V=b6IN(mqy3 z%1jr2sU2Nio0IePR_#9|@Zzm?ERnZe(c5J)f7lmEP|Zygfd?aVjG}F+GZes{wdWFA zztFCTu)zIDLv~wR3JT7pM)b#u7CcRWK;RsBd2Y@z@Ooy3vhhb#(U&iCJZ%XTLX$@! zZm4rb`e(d08N{=W_cy^$<4bXEEkv=ue^Rxs7AL-j1>qT2{95>BOL7~5*f{4y8ZBX> zIMQ%14dd~C;B=#5+rEt%a5NuuO;x~Fcc1*NNNW%MWtNXO?8m7(230)3>VlV-w8eR|V?v`vu(Ni^mh$&u1!0s%pQ;k3s>x!fHFkWwI#b)}wyE87#G=Kv0}<`X zn(zIkqY`KzbY0atpB^S+`eXwfeU~umt$pA_*UxG(;jDX#i4?Z>S8kF)ytvqEffu~kEr&q0%`Q9*%wPoIxAnp04 z^V=oqTZKsBv&+3JHa%Tgi?^d=VUGvOwW8MZrIUtE+7J(q$58J;xy>HT+?tm$)e~Bm z2ltleLTX&Ep9?&o@?VPk@788Rb7g|A6uDv2sEf;Y8;7#=1vE@`1xHJde3_F4cbc={ zuiwz9R)It%K$;${c}7nf!PjL|GVL4lIVg%dFFY?MJ#aLKLSQ5j(tL>Lm!dvm;bl$bW#;5})cK7ZJxQrXmS zk2AlynAKz;b}P5EY;q7l4UA*is+t_UDYn|&-1_-J7?+hdnQ`qb>YRP+uA^tEiGDup zay@zT%|Yf!Blv5z#GUh`@A~8Z=4UVb>(1HatjOYdZIYffYwUsfG9s_iR=iy8 zdQ~1DoWM5uOfUSD3@Ali=i)05=?o8W()ivz{D*^o(bX7}FMpBU>do;mKmcSt*`Y=h z*0?83vs-=n>6*b|aK)b0Q4O44>5Kl$ZAuXu<>LpP&Sx%@`OhAtem1&Co|Lefx}gqU0Sj@%YM7s$P4duzR6+J z7&DPujn1yp!Y1iJoBC7M*RD8|g8J$@U~?uWCHE_y3|B$7)VlGy*Z)n=6mJZVDr1wN z1~Z+sA9^ZZq`djM9JDJNzAMIV_z8QOE_CVQqW-n)}Omjx_| zcSnoEVS=Wn98`E0>Z$W&U0d;hwkx_DYMwy*Gx?_a@YYJNggrF&&2}R&j1B(96~zy# zFAp%2XFgu}`SLPDVgVSku6Bf@8Xxpc;{>GtXapoxaw=eSzg`DrBX(aviA+vRxN*umT_+!n8tQW5^+IV$O?DO+T@)k|6nE>3jB$iAZN z1P&akcU90cxOUl-FctDC-3b{^=B1e>oj{+ecktmp>J$APA*A9~Tx{~Y0j762g092 z8X)5ngX+joLs)cdDE+Dr6c5`qNtOgIfqO5Td?kB7I>+9jcN*sh=ARuMt(~Gv1$pBK_{vMq?6?E z6D5&oF`pf6i`F5y1G^!4(1seLqJ(r zDp?o4dgn11kOvwv!}mVIS($bh>)#;wLL1U`_Z2<`cSBt5_g9H~1gCP%aIpV_&V1*; z_g_A31p^81y+Q6+Q|dLkN#&j=qK zhx?CzIT^bGFEw_86>?68I&HvNi(iZHZ`03-Z=|K}&H+932;*<`Yfj%WdwmUH0Wu%Txmf=5X=1-J}Dq0Ci<_=L9 z><>Ys-BNVkZYDDh%B-Z%%n$jugTqaeux#`V87GuTn}jx=Q=W%nxq@r2&^HPWorSxX zH843XV`@+fm4=_ZxNA3hu#WkAm+w(V`=jscjVrvWoM{!rFtyPdD#v+%bU>|=`a4fT zGw`g4cjH9dj=A3{)3eBjVdXxHo;c1@olvW{p?xrr<$JPHiP!*E<+f?F7Ez^Wi3No> z;=0ksNl#y2pOcxHuV2+e@I6uq;U{!Tf~8NYQ>ZN6`bvK}6tl;ge~Af|jC|LxR?7&s zuFEv7ZRZC(~sd@nCh^Kne8ks(2-}ZD$yoI^*HANbHr1ue;N~ifEx0Oi6Q#ECGjPQ)jitT z+Si0v0ZQj)i`%4&kaQShpi|#Yja*xM4S3D>Q=pnSr|38L!Swd?{RngQkJvax@yh9s79?u$ujpq;!5V=jXA`FOy9XlouI#XhdkrNeKfTdvM z6>A7%Z3`dez7f7*1mlF|Ix<5qAA}f6fA1s)NaPh&_H5n ztCriPp&cDdxusJ%nfB$)%~Gibo_4=@u8 zti(a;xam_hfr_h|Jb#0UocDh66$%DX9`|M4CvXN0tZ-jZ=tYY z2rJ;V@&5CRztq4)fDO_=(u>lF|HR%4DgCzz450SE?HoJ+VF0v3Y0Mx0>kRTJ3mB3PY4vfj1<(+ zU>Y#^{z*ebf3Z{1RGpiDU54IW`6<^DS?G|#BzExnY;uzbKR5p9_ZxD4`|Ms0w$Bcz zsC{#ll__=#3ZZ=b{5_zJuspeCd6?XNfUsio`P&U-Yb(7Mb95d9)sUaDl=7V_o;p7X z$rxUHR!jjUMj>U;TUJhj_Xa&`JyKL^Hh=GcuAwr>!!Rp7(kS|$T56G}kFzI6*XfWntoX4|&p9RA+B@>vDmQS@kGS-o}223e9JI+oNY zVnm>jb9dnEiF~in?Pzj+0gEgs5^UN|ha-!{Otpv}NT#{Gbo(NQEh+E^5k!OSG4j|$ ziF~@pOku*}8Je;B>FH1zq!?DbXepEZoQf32l# z0-P`+b*xNz&F}}T>NNxUVRS~8Mp$as?t*mlpM?8n2voIX=!BTqKH|M-m+{~Dgu&cJ zNFelZ>xIXHMzRC17zPVBTGwj{b7mTcbug#Ja$!|l%)m1(OKB%3r{!hds@+``+4_h! z5_#}3LQ*CPZe%33wzs93n3yg#SUJ(2H__4cMz?XqkYOy!$9~g$5T(x%^Om)+BnMR$ zJN|9ROQZs@>LQC(gIUp}O?wDykU?8!2$m!dWCIU!c1dRtA(i?@D;d4ssmd<>XQy8> zL2U9A;x8c~!D?@^?{ggN7lNbgk+k~*Vqm|ZprEEH2LbUNfy=g#l^&|^u8>RBI#pS= zOdZ6!N&I=~b&$qtfN=>`WLcxLVYrHeh8C$(Nk~geTjhOWEHeRLRvZ`@ z36S(wDbG7I4u)pQfOT>li-QZCkG28BBDQUrateu8?OZF^V)Tps^e5nHGq9wV2X$tT z)-HO;S=Zdq7ea^iY)4m4vhgX^r$YRKx&qo70lM9E7X``1cp49Zmmv(=1>^$*Y5N?# zgVF0n&oFavj%4Sg1az1jb@x$Tr`3O>8MwK_*gjEn6xOi|q|egrlc!^b#e5ckzQ_Ec z?`P-d()0Tak_L-uPY!K(QiVU3obBe7mz!&zP=(UB!P9bOi%1p9{az!1xGKfO#l?N6 z^L8zn7KE+^W`98gs8wfK*o0*&q>*Ph7NZUyO)c_`|Hc7hbO}Hbk?W~Q8yHJH6%6x5 z@!m0;a#~39{2cgXQj3zxVbb><2a!rl{YDiZYyaxG6skJbD{sU|H4rWbcF(Sml1m$d zilNEvYxmxQXY&gwWyu8h^Sdj+wlyW86S58pT3nK8n9ynk36$le6!d3DYe&a9PB}R_ zPPVqTB+y>E#0A$fNIK|d*)pSnV``JWQMc8@lNaB)Odi=Tc91*6bh zWvmY{9IpuF1#gzwjq5WJBFsZQZ*2zL}3dn3lN~a(7_3?QdA7@XLHD-b026r=0gMre1TukCO2AY zoFD7xkl_YN*>Tf+E_PsaYwb>zldYDNJqIeIK<)~^SCtsKRU~-9vC04k#v61Az3iAr z$Vm;v;a#Rro;<0jMWu~c{?5XI$$*K@C<6u4JurYbPYT@}uMeXB`0)e$@uT03>VsOa z6|kZfxQF}&2WsAA_5eg6&*kSR!6mVRT+o7t3(?11dSV#0EW;2hU!1$D-^z(1_QO2j zRad~T(gnG$t&b6aAUD<7FrNY+=F zv;%Q_nZV(f!m)~H<)w-&Ci+Jh^vc6ISx`@%F?ZA^e6b((r*@kTAAQ;l({9?i?2L?P z!W3H^mzapKvZ{X?oUL^U-4(L+y~V=9)i-Ub+o!dQjAo$l6jj{oEJ2r{uVuU?5yeE7 z`c-PQ6|D$6UPyH{iy)LtoP|+~$ zG8ynqM+-r-hkZ(FP*A}3oW!Cio_92BRKesMXP2fOYua-kj56r5KtVwP)VVfZOAFxz zbal}~GMlmqwBqCOdc?{kw9JW9C18y%S(EGY+I6k2=YxAqdo_c*Q8rioS}DkG%UJDc z{=b#PCnomGGiKyOXnH0mlPvSn&_skpB4UTt_ARx`49;4_A3yfTzlQgQxMKHZqbCJm zO}5AOBNe*ojosFfyPhTYad31PFzY<+BX)YlcT29zqgpkD_qEKP4I|MihYrr^*QDWh zZJ+VLe!X|b;gjue&Ymf&Ss|zWoWdWJB{RKVw?Wuw5O6_pv6Q>4Ajvyo-Su6a;Ju$2 zSKH2eb;4)Dtr>y44AzAwpLJ9NJ@v`l{OQDKS6U84wMcVv%+k@wXeqmTds&w%$UMF^ z@(2qDgzDF=b+z~QS}PLkn!R?>?CgZvvP4MX`8_Wx6r*-H**wgGBi!7s%K?5L1`AC5 z>d|N$NsVtwoom`RKNdXKguQ8j{gh)UDKMUReJ5_}wEVJ<*hO%5}xCXHuYY|5QC= zV_KY-nl_H6e)ixKQNRUVm0hBxU3hKW70$`Yd6u^^VLJ(pizCp~*3NM`r6?QWVrNa- zpG6vPL$z}~!K7~S-W4`@v{ColS;JrgA~j2hj%oUUCR(z2zcJ}^diO>z+A}#h?jdpL ze7fBWC1ulhZ!wT=Zy&{d7mcVKnD-a5ASNSStd?jca7-&}`PNXID2Vz}`QxH-J=M9n znVDJJ`={?)31QcOt^Xp3H7twO|6dGAargS8dXJ|DTJJ zK@?8S&BKkXCA_nd+HQ(^FlOSl=Ao$Ax2-Sj1%AzxtN@A$n4fKMvQ#V2TzRFv;tdwW z>f)1lo~hRqC+r=bUZ;Hh+pw_-$Ezak9^RrWN7vTGFx?lbG21 zuO%h6KE|wy19+K0FTVEf?BzT?i@i%CA>;hMmY)^tx6&l^GINP9P<~%u zU-zVCXN@P_&xhB_Xg7(I+afWZ9 z2Z}x67kuaU1ZisK?L(mQC;v7jC1xT1G(%|%5@Cq%Y1ewXC$F5XUd31*(2Fx6gpD0}-k^Mt z#x~7JFHBUamr2|(y{VsX_tlDHYkqu-1EckuM|@(}z~kwu&&{&GXIL`=Avf}i%4*!A zqPynLtJBb!@z~2G2O~MFjT@Gbsn;AT%>5rAd&nGM7vjU*iqFyAB9-AQG-iNT#KkpZR# zSBG@B3h9%Hjf~HVBul##7Zj=kuP4(^Pvts(SNh3yjrC+zl4iRU?|Eo(#0GwPM_#J& zxU4GnCa*uGIl5+hJgc}EtE-D?{={3&k;mpv^q&4Nbe$b&KZcGS_LJ3|FT`9czq=W51s%Oz zVX@EZ-6WdjeQM0+DnB=;@zt4czvQC#J^jqf%JzA%z>?ZW;SIXKq|3#ot&o=xI(rn9 zgIvcUiv^9@&fSs`3+tpK%3%+Y*7(|&ky<6Kc2(l)WoNl)r3Tmc`xP9=CnPL;>l*E+ zmKwcum1=nI;-sPB)5VS>X%>xCiF%B>U);Ag+@dsPKUdqoy|bHBo{6V5rp5Z`(YgO6 zyH#``M4s*%efA-mO#>{B`1I@~yR{XU9~Fh0hbMOIVU%svhmd|Wo$Lpxep@38XPu4u z;#b4bMIj`mSREZwq$0j$?Ep=wBD!q znQEVgM83p(TIcAKXVT%+FG2o5Q9dSvFp15hLoyaQ_>hQm@T2edgj&G zuXfnP=adv%OOPVQeWFF3Ju>7_&qot;E_Ff;e(FZ;n~+v(Id$}0QL#BwRKIGW(j4>X z7_;1?|Lwj*s{f5YyYVNTZ#fqb1PBIT{QNoKCX9}9bu~0H66xocLe?aBFpVWSjt=f3 zqDs~1BJUZ_m$v&}F_NG0IjJs)Nf(hdD8yO6eTxzGqLC8pchUHCkBX#C48K7|tIDEu z_Ss>rg?*?i`^UPnSh2?z7!cNSP=($CTb1UY7sj{x ze)Kitw*FZHL#P6P-oy(M-spWypl2Z!PF?Tr1kCZdXK++>D0KLWR9`q=s}QOB%qUvPA!J6}=q+nv;IYL)2)?#}F+;VnFd2mUTX6w-`X z9P-IFc6LtG32|}ePay3-Pfp%tRp$Ef1&VEl&|tpV`1x!A%`1S56|iIYT2_V|tXRm8 zK8vKf?ij)cD$j9yVpNP+dGSf@dP$+~s`>Iv#j=kIP=1f%OVkn^MDf#*Nw}V4pPZg# zH#W}9SO_$Eu~2aSMDyxW^By0T=)>fCs;?)rN70+md%9}#vo_6Mgg`gg&4i0?pJc<6 z$S55i5zf$8XU}jGNy-1pI*n;#DoCs7Ek4eZ-Mx3U_$?_2&2$9E$`b_yAXy3f(j;;k zoy6fyWyvm^nT3kmY`V&Tny@xB9CD`|k=FI}J_p~X%h4^T&HlPg%4VSwrI;L>Yt~z8 zn*(S_V_AS^T#08IiyRSWw$ux?+qTn9$j&o$o(i6SSuuewlcQ!YXp-5AYnYa1)%vb0 zoS2)(M7-}czR62J5(zjtn{jyHGO4kkWBU=>MdgJ$;Kp){JeyV;;2OGB$0@fawtZpy z+;=3e-zfO*pw!TaQT&fS6l;PLG_4#Q@OBfqmZ!&xHum?sh8ANILs&b^3BpDkPWnm( zdUBQr;%jTyzGF?inlfI01Ui^b5F54!uOO-Jfbj-Ck=n4eHnoqRY3DQ*W1ZrPMqFKa z5Rnj@7h-tf-s{|JWDq7z)9_fJA}QD6QeZe4Ir&*7{`4i7oRw5iF^fly&8AqG7xhAH9)R&Xx@bhMOa^d zG%4rOqC1?S{lF!$kk_x%7Qk2Rx24oYjmz-s3fBdnmG$+qi)XS(_XS@%HLy!Wh4T%+ z-TU9a0x>u0edhEzdrgKGizQSZ9_T`5&78N#oy$&Sq#o%4^3ol@#}0wB@QrB6uE&?= zuS@5m#yL11b!0Kf9V|-YdeXxjUq0TF@f~v){b!FRv?8LS7EiveJM8V~+M~9q=G79g zT`ewRX74RLw>gtSfDasm#l4mEo=l2s8WfU-Ly^AGY%R3%zFYIE0v~?GscXK}`duL% zZ0CBjT5jfc?}iZ<0gFiwfj)HcQroy~BHgyTv*fbm1Gzw{0LF%30X&qjr?sZKcvm+R z6}zN*Ug2y<(4geO4k4;Ic9$7|L16C^-XsmlQXN8QG49=fVdKGMR!4YKa$@YCsxf;4 zlm%ksj@&;e7I1jz_(EBkjv^9N8160ecmn(30WL+Ncod1S_Vj1%ab-VZ24E-2sORA% z9;}VzFyOESWiz+lNb0+DshOE14)=l57MEfk z76Z|%^JR^T=R-Op^aV64?i1EAmQ%=6CDRAt@=T zr^apc-dwOZD$bVPm1AurIXo3AkRjJ)t&$c8&h^vg>E->~6J7`^kmONee* zSIH3bex$Vjz1Pg?CD7#K77a&%vi#!Ns*4iGLo>-*u2Wv9J*v2W7D9(e{q*bX+}r#I z#cr|ea8ArzT==}DU=~O+V!NHGcVoYPiNqBJW3GMytgNh9-%BI&ox`tHr*PRv zaKggED{N=@sN8mVo{D_qA1hlt{wpQwFJK=eW-hf4cScll>he)tq_S4Y1gt|QGWHT(^`jF!`ZO!QEO{cSfA@xv{&N*hqFD= zO3tl~JAy?+z+bTzUWz*T$=65n0iVshKlSOknVccD%TB%cSlRD?t9~r8_$xQOesn%c z(Ux?0&Yk+n$jBRX0?oix4)}^H-C5&YzVg&h3FS|-cmM)iq}koG4{5mY2eyAzG!F_V z)P19%th1Be{an+F8C-6@jDi78wd#g{eNB%)5NdGk0wGkei0`d|A5w4_a)OzGQr9_{ z0b|&3>??!TcjN)Lx0^yi0-XN&j6%2G92^`ZR7v9ynR*7GB$e-iV0imvSbg0jgAsoSj-C~B_$`rgQV5h*67PO2ZY0IgTL{@ zBjt)evyze1`1HNi(tPQmXyTgitMZ-w^>$iUZTs44^C6v*@K|N$Vx+JG0;N*z9N|p- zh2^$SfHwOO*x`xor3$i}myx?Bj`+e-Q|^4l)q{VTkf@RYzxwV!#R0C=19YA*9Fd>1 zw6xs9msR`qrG(u^^le95-{@1<+AKsl2<&6O@q7rVE6rpK9{)<1AF#G#NuLt>!o(Ts zNqti9it(9=rvgWWB6+`eH)*tvZ9c{ne>*9>*-p&}zbzZCI=lR>sY!$@_!%qJGc7IR z=ZfpnZZ8ZpHMJ0#$t)o)G4b)8_Dijt%F1_YS}U@Q2NsY$65zO1Yzy6QZ$SBdb)A`o z&}u#o8(mt|hO6yd`IP}5Eo*hb!uG0_UZd+ir|Z#kA4OzwK=!$?@AgH}%aZoI66b=# zua`mi(Nl_`aw?<2c~?Ca+x2+;eCqHXp2s3b(`YloT{f>f`_$~Zo=tX~HEdaLN1n-9 zzIqNHxLerqoKk$X$*ZqJUw*f5z*&F1EnIf^0Y*&^vtWH8GRf=Gd3F;a3z)B(qoIK3 z9~i{PYn3lJk`TB(0hLR15iXnMY&3ZgBQ=YDH6l@E4bof*rYDp(wzaknf1Sf$sdn$p zJSTe6ZWc7U2xCTF;Ae7XGf}8bn{Wx3d*4R{>RegTkXNQ$YdI<8w%sWw_l#%Fc>~ip z8dgif@qUT#+sg@WY3|rt9^H+f`!^!qyk~!U{-;goT}#ENlcttlTnb#Gm)hfr9e`R9W0OFTdRq! zaYtW+a$oYzK%iBgcd@qMTS7FPymu?KIKj;u@Y59joPzolCAnMI_Ah|W+mRoo*S4Z_ z{?KQ|PPEjgQ4}>%Ep>H0l>I3N=R$T9r|{Nm1}%{Dl&tycc=rb=`iDmG7p!iAVi=gB zeyVC}q5kb)`^#6m-<%7It91j}x;ctt@*KH9-1ciX`|#c&?oy*~(6-Sqz_X1*%Zpxx z-Z#!R8L3Jhpu*mnp7Cs5?xjUC-8`EodsY1bGk(#~KM3PnWWq%L(lqQzDn5 z_vJ5smY5LWU=7SJ;b4c;Asw)>w*l*iw`gWlYqVLKQNTxw@-vh-^`tA~4O~Dbg14B@ z+0GuOE~uHP6bkujY*N>=ND3l;(5^EoD_*FEm!Roln*^D zensoP1Pu)h;e`cY3K+yfvb6?D(Y0$tfwN|0{b6y5nNkqX1|qRDyd0-M{JPW&+Oj z=n(=!q{PDtL?py|_ADLWPPf}kI!~@d$wB3+4A<9YApZpZ%>8a``!{s5=2ZT7yE1bN zHg5!{;MW$=ROd&r2d`$Jec!3Hy2fe*LL&KzYIkXnhd|t06?^xO z53OeI#GVR#fVUXge-IaWy0W@a%i-cwu0Q;pMHFEO%VqoeFr&MK|0sSot2Th<~r?d}Iy0d_hHtoO$Yyh_GJTH*|2h z5*C%b7rKnkZ5kj@k;=P+4$cD}RJRQ9W$4SBz3t|QcP082b~&<_qzg}e+!^iX0QIC< zb$1QUOMHdrKN=CH*O^CYG&F2bzRk(b*x4DRku#p=bQ;_obX- zBJ1(uuB%AOCh6~Qt*zDc^b#6_IL-PK*#MG4JHK|47dBM@sj)kgEXjAMl&=Q;#mxBl za==3mE2(H*641d$4ytQCXq}Yk;v5JgEIdpxuxS-YsT+HBo7d0E%J%&2kGs7db%1^T zQ9|k2c!?v{d{gKig~}K~zWC*CAbko}c6KQvpLBi( zRV~|O!oG65TcOc0+w(ZOirEy2LI|wg2Fihc^4>Y`F=r+c8*Oyp99PS`rOu6Jj_13? z(K)=A2L{+zN4eU*SfC3qstj0{m0w4_CcS(izSrPCnryZgiAfYJKAg; zT3Y7U<J67wgy2@Yd8A z`7>O9UX6sPKLki*p#7$2&aR&N$Sf>7KQow!`yRRc-abU3jU+V|1 zJg{DU1^h{KJVIK37`0q<~ zU-W<`PB1+g)rOq$IX2b_r#t!r@(Gr~rFl=9*!ZtsaTVfuNo591c1;J43E4tE{@^ z%rDhMwbT^|SiRV&`TmH0DSm^%!2F8Tc3-<@xQyhxaQt{A?&!9Jd=tJ>fynUz>`0~a zM!TJS;L-=M7vUCZBhhKJz;+R-9~7{EOMaXXn5CF>T+#K0rB05yVk=i?nk}OYOc3=U2wQ{Dus>v4MtH z;1hyu$u{)gt-)MKuf9)Z!hI8!(_g&dT;e}gnMOvmJ!sTWhTQ@Nm%6>b#&36HqOJ@Z zRgDCFsjP(ho)Z8Gx`R;_yNKL&#?{{XlHZ=zZFp)pRyo3p50T0w5Fo&Y3UIFZ>ij#u zE_|K0W+~JN3qO;Ww9P~aHZg(}xcYCzhuhXSJjKt1rb8FaN+=P~8%xHE?GtM~Pc_A3 zO14t3R)(X#q`{NK_Z0(oEvU3I&Puk^!oEeXIWYk)$1a2%WK*Z4fAiXmtE0BhY^6<5 zTzGc%2TXHdLDUQqoM2JPwNR;RFD)ewKD+5pRpgjYn1FdYFlV(p$X_9!Mf+#laI4>s ze0>#KdqvAfN=3kA)&3AC8r)bS3M{Xz9Om}pq|MN?{H^nvzYYRP(~$^sKAR(npI(Sg z-=m3$jCPmwbdjR@gNq;%+)&W|i-0f;`Uh7h&BuM z6WBhmZEcP`@$~pMJT|q;w7j{$-O+nce(wDzE7f5GZSQcz3?*Q)FF?&77V8>@Z*6HA zQTbsHRo1*V0$?))qK}`33>0bexH*|Tgex!`Le1Znekwc1peJM{+7B~EWfPi#7 z1PY{!^VEywKD%{;uwyqe(O0G+&#+Tp2Vomov?H*n=6x<#T~1Ir9hlwrpiA5Ma6n9< zu)xR}xs^CV>qbejPh5%RG@`EI;VKwL0RLH^bw^hyjw`7y?b^3hXSd8;c3d}_*r%4D z56IB-P17EotUVc^U#O@s z5#weKSyDTT!G9&2k>Dj&#;JqK8xMQUmbS{kZpM#!tAi>X`(BEaJ83_z%Rfnfj{%g8 z)QMgpGNb+NbAl6tW)I{J>5iXO8R}d|uMnPRN(N@yxMQ_!J5%d9gE>*GAO89Cu1HoBd$+h;_ z=wjBKXHy4zLgN={K&P`s>Cn~XeRlJ07=M@j$StDjtom%cfYC4JIr^HiPlHdg?OB^014p7}qXdWsg1C!p1svmPM zv;v!+4F8xKZKdATZ?&#-t+wa;q=^nt?&^2KZ(cUj7}(mMKR&J)8ARc#!a>mMQ-Y!R zy72jN;37(}AY73HC<_YvVazF};=?IM;AhnDEXnFL;b8q`GxT*-RTFTbZ-o2-zdA8y z3<0RT;p@XzQ)c)v;6otMe#Ak9W4653?`E>TmwO?Ud(No^==AKHf7sf9t@b4j9W8~2 zIDE-ar#-ws-bdlkG*c^6lR1wR@=3ql^WB34)VMU_UOte?Z9C#{hn#Qq)NlQ|z>|U? z%M9`1RE)uV8DMAH^FXr4Q4F*=Ls;@DBp|Ht`Hsi?vcyv^{pXLtuxF>WrQ$-5x0Fs> z-PW);t817VZyEGe%V`h<8Dkv5%qZh!#?jQcqh{-+hKLr5gC%4FK{QT8UMWdMP2P4{ zRf6#Lr^*B`iZ`HAaJko}7p-+QHB5vr4uU3fr2qlXGio>w;4-~X+Zh2mIy$a!pK-DA zHE}0^H)(m3J_2k$=6x0F>+n5&E6kZHzVCdsyu2Kmy?A<0UIJ{7fWnYz3d(vAFl&>! z9|B$As)IFmO7LL-PxgP@gSH;XPE}RkFRn35w-EV>)6%=g{0r`bamcWA(O~Td9~OcZ zuK@_b*BHUF>_Uo08t^W058lZ`X9*S;oQ>`Zt6 zB#Y@26DCv+hwAEO;0*?mCt*p?%|(eUYHD5Fq64-!L1i?!!t=mwUfIFKLV_n0@U|RS0-(%A^FLLWOfF{0valWAKiPEKb zr}d^c@X*lE_f4M%8UIWW=`i{sx=`%h7Y|}xGYh{>&q$i+W0gdIw*Z+Seb+Yfz-N#S z9Rvez&kQf)tGK8rQZ~-rs?D+EGyY7;i@*H@ZjD3IaDKo%l zuM^#$Qs=gPjeuX>zOKqv*H*t?x%EQ-gP_8e(39}WSN#yMYG$dO@bkVOO|3JAqM}LR zjP7KEOU47puvvezB% z-gH2rRuMrn@9sonDW)2!)~b1Wn27t00Ky+ATzg*rJKS8tf|(ZT#`7IXZmRCi(WjcJ zbrFO*S2J1O)^xJ@xeQvLf*ckPeEpUz0UPBn z;PJ07Cq_*N;kRhPAB8vsVkbDR^blP#lh0<-hn;WPehQNO9+dhs!xiHR*(nB5zP6jK z#5N};MhlYCWrEPh3Rb6!MP{WSp`#*!FWwof<{ODQ?RZqCE9e1Fd3lk0EKGe_>BZ4x zrJCIYxNuW!uI}1`<4Rng?^i`Fs6UB{!a^JjZvXLn0{|^vVY8}@*EiD=OqrdoNFZ++m}Ddtz|iGoAXrFdzrpb65cXDu4Z?3 zp0oUe_{A(muOwp3i%BKKf8>`)Jr2^e%3U~L*@CM$m*38{Khg(yLari(Q z*lR6!q(}VY&+v}~!1eh)S0w$7HpWdOVi#2&*e;^qCWKK0sB`m+Fef;TJ4aU-mktHw zZa1MnE$_t#ii;Mq3>8r^V#ygakH46E!!X#|Ioj_AVM{6O!Gn*E1=kbxG;GXNd=z1J^WJee$;+G#>=5vn{VAu;#bx4(dmz4m?g!F_e0~$h9I| zu`lktHToi3Sy3HmYW#^kaI2NA2()FQL;KyVRHU;{y*f@2Xt=<_blBIg3S7RA^RE*> zeB}Q-aLOnTt3(YtZfE5xlR)6VljZJ;{wi+EtF@Sm&w5TjIE|tm*4{>71}hZ4v3$~BZY-4&Y$sxf7sdFI(Y{FSjUVP`Ha9FyNv0d zJeof+k%B2Vml#&zAUOKL`_`rFs;k1B@T}`QCe%APDy)|aX)?Jt{1_9XBG*p1c6ah{ z+P09BnT2K8`&NiOC&L;32U|ddkL3giyVJ|X-ic^RD!1rBLG&(2cDnahBXHE;9@oS_ z2VSsPly2#w9$9l(BHTm;WugF5x#fZ|#e+i?&^v)x(v+*I@;8Juv$r9xDJ7@TSlCO` ztBQzl_xRUE<$t#AIfIF$U;LPsPSvX%SNgqn8`u;nqPYr~?W_bS(k-kO*YyUUwkBZ} zeX&FsXB@i-)KqbzwmQZmQ+=e0&6r@?H&7<^jqS~|GqETfT$Up;BgH?_g9KPm4p9aU zL-cc%_}6mGN0s=l=92QnZCu?ot=?^P9%Sh2MX|Vqz--?lTnS?A?B+0eG6QU?4_XlG zJme&G@3xg9r{NLH79)J}nct-KG_g{s~aX zF>1*m?X{afe~Zf{B1YT0lz>G8lkqmlZnS@VKzs!g4gkp z*Q31!e+%0$lrw@30eT_hE?L!-M=)WIyA#cFH$+nSpie3c#c^4MNG}v<{ts zTCQ(fO)>v{olY0L4!YIc-XzRWJOjBbAQFeY=IC7#^cxh&LiMMx1EYUBP3PxHpeg}J zA2PNP^={ft*KX}cRwVfYkUH57xgg!tgYA9W2i4#H@ci%B1R&3}R-&1M!+e^XZ@)6x z=IB=f+{QomQD9u4%9NIWt_3mmfeQjDcMM0jzTfH;=Q_pyiVvWE=Ie;`HGt5{KYci) zj=gyM?(Q;B z!hYnx0CxWLMf+Y^%BJ3dt+d$KdMy75K7dXJqQ;9=Stw+M)9$Kpa9r5?S^j`PMIBt1 zV|y4&Tfv7GAS3aer1^VPS_Z`H9^(+Ewz$?yqMMxD*YHNlH_wrw{FvqE)Sg|A;^2)saJw$RXZqix(OU#q1ff|C9?(pP8n*KA}HIbCAwcq5mHhHRIEIhOB%usGKIm`w@q7gc)ekh292J5TyebIC*Hw!Pggmx#>qNPnQQfhYVc>yRE=tb4s^ZkS9NLGF%w^I}e=)5KTWm{L9=w`jy6)s}E#WR8+hh z$G#=Yr2VZfA!PX7@~;;x2EaMl7h_Z3VaByJyefGk>D8D(kynRVwC#x7fhEyZMmc|6ni6Ag5Pgh) z;=k8|AgwVLr_GL=>JIIj2wFY2dPo zWnoJ)5s)O#%Sa)$p%7Zrs}yB4E+f=L`)#KG4KAY2g*m59 zi>mXJWAcvEF# zK7|akrq3*NDa#=O^^Fr;{M8@7r--i#(Pv1!zlvYoyXhY)#si2zZ|t1BME(Zwj|qEA z2gHjYh>9+2N%36%k{5==@?+2NGM0bw2os^|m@k^Z(V-3bB^TKz-X{PiaUr6&lk}73 zj?>sBYo{SC@Y+A?}sn$)=}Bz0yg(H1gbUUg4)?0=t&iiD}Cx&`Q|G< zi$2{WrN4Rf8!(Tb7xP~CU1c`w`>zcRf(e@#v)kUf4}s!eN=iy?!(TUWdeCpUGig!q zni6^bpWuP~6ePs_Bo2;CwhO;iMCjknN6C(3Kxg7z&P2{iv6V%xnoE}$@QBR)%yg0e zX^xu)*rhzWz~?DVgzw?%dOD>+6qawevl0T|uaZ8a5;NG9IVr%rM1%4g5a<+p{$r3t z5Sk8OtD@@dDS9Ye@p^NFaBB9_GtD{(#(v3*ic7^>ljMKkD)T;p2pg$sZ zOly7Swe$$l5;f9bB|Ct)#r6`s)V9Q|cHa2lf)5x2QVrfiw*UTgP0T4|XQjnX>&BZK z%GKnyb%ELNbk&!CE|mnp?B4M@S;S$%yLjp61B37b z@X_~2*TXyFhrrK*G+|c~WK6~R{H+^L)_EjJVkC&urfazK{qp>Z8BKEFMt(lJ)R(~x zhrgHar%+Ebj?HC%0<)Wea%Z&j=&}1BwtW&Y_K+A;kBzcHe|5W05;lG|_;B_PDb#m! z=XlVSU5@G3=>RbcfHm3?jH3lvOSLEIxmA{!2f0;&{)?T;$-wgkv|*Mqr9qM7u}~7KAp}Om;JDZ*v)T+51GwWIIC+)F&9S3*_3gy^gI-H1yyiG|&2tl8S-f+y9)5zta0uI+=Qt8#yDFE=P*yeg9%W_L)ZYIw-? z{{7RztH@9;!~#E_Q;F2S%o*VCsJH;8kT%|?KU%Ca22CSk+eKP1g_?XFkZ(A~5^#89 zsi)T>v`2frVD+^O8D>jVX}yrO3tB9YY9aTh2H41H7blF-rxBK*9E?6Gbf?5RfIiFB zg|sK0A?#dei9DSggP1q2a~zwP2=0(AauHO%2`F81#IKkG=b{g(6`6scpy#?9m%9jB2LxQwjs5w5q)i(8e)TD-Cd#{>5B5Nv^eLdeH#ucn|T|&`8M1y;-1~(xEpYh5i+OlQm2m1bc zIdv775L};RktN1AmhAtubKYM~En6H9F;oRY2?$aGh$47FkzNBgV7Y)Iy$H&s2t1J@ zO&}yFQZE510YkG~S`?&7Z_*;6DMcg@N+<#k5D*iDB=5xk;;rRxbIzPKv*yg6@7go7 zKbr~8ZJzq{N!XG>u&0Qe0||fkWs`reAODcwV)DRqJQ~3Wxp4l|JWp|KM*#5&GS2A< z?nHy!&25=4>c*Qs&CE#s^)th$H3JO4TB@y~@z~?$_jJfNDwxJVXW8(a=FMzi3kz_( zQ`QX4v%TAaUv|OyKHBqpO-N5PS!Z!06^f;idWg-NnBJWIiGQepB$EB-r+C` zjPivGA})kh&1bTQ-KhSFdjkUEuNyo3Oc>hHur5SS$0q8X+bQ|@!mv^vy zub`3(1sy#GUYZjFFBNc6qE7=IC(F;9LgPJzD_C*pqtK0V>d4!%>uuOCa{m^tohobu zjPVe;lz{vm^}J@~9W?OMk+V@DdsPRgqQ$4Qxr_OeJAxO-ithXR?(|l-l9rYD(1YnX z;Edz_zpw_1U=Yd?6K>iVf8o;C17P!nIe)eodZKGWtwNzl|L|zX#$p05fwcyC0w*Xg z05ALm1f_@x#v8#aWFc?!g1~v9;5l>P8U_aO2Ia%Py7z&%aLU~a8NdirR(z1LPiFq) zNS7N8Z|h@&6gk=1uo3t-9a|J)oTTpf&R}A}<(DBUKtz*Ki71J*Xd@#{riYSfG7$Vb z#f;(l;nl-g)$te%@9x}26%?4BtSTd_q&^8#TAY*faN(_nA#Udp`ab`%j|!eaQ1B$? zP+Lfx<*>rXt*oLDVlk7c-1@;V0Swm-IM+ei<;|Cs0zlS8`@Xnc0ijj>fKsVSs{;}p z@k^E<9A@Ih*OM0iGD&KM@<2)e3H8FD@>fP6tfgtQe!XH$EAMHq% zX()d~2^nzRz4yZorzy|Yd@=;Nc*B)@ru0^ChjMAf`7^MbYW_`O_)$Ih^QJn zV~5A;>4zIRKuIZCOZq#Kc3+MMbvVJXYezdhztsHg3}g{hX}a%Z%}CyWxbgPne_Rl@ z2-DCe-!1Y#ByB!#h%n|v;JL|NA|pyH^y{v{0%&x%>5FXBUO?{)>}sBgc3m zvAc4BDjy6TwKPb8ix&*&Wg;d;63Z41AnqYjhAYTfl?u#4ppI6bmGMRltpxT8M6~Rf zb@KP=?|Nj`i-jD!JnKS%T2#5HXe}d=xdGwg- z(yP9|+a}krSaED!gRvJT+I4Is?5t`H3XmU2_9NU?AkhW}k88O0a)D3hqn-RNy6nGC zJR0x8gRg+2Q<*8+(!>1W4#6I2TfbgR`Z{)Ht0xzes=P4Tr+)P>yE z*UF!ky?%;*Eu1}3(cI0kzM!*T(aewN;?peh&gdL~7q6Roo=8riR5z!&-N+`q7`Eg^ za?R$oKCkt`_v^lQm)LTvfC0g)ijAh*_u2bUqP&}9old8#K+f+`l+dKWr8s3(y>+*LQUv(G$CLuOMzm_XM_@kQ&4r?%yfcL_w=bDo z&=4u(Q@E*;J`wb>{>2nH!i9hPk%vl;{!sco<;yXHeyb3S668@}kQpcLdE=tar}Cih z{hCJeJ*LNeMzpZYj}>1p)ric?Zg_>8q}k5{_F2eeUQ4>oFY52wD|z|BC3vXv6zUM! zeGO!l=1labkpN_+f{naNQk5hu&9G_e|&7Sm{0fB9kbm`8TcvFejoi z@_f|BhK80_&gGYp{+jcZ^%CI5W-Isx$Vt%pFjl(Q4ixvrpUdAIOftVM*@*@lf*%~4 zrZQQZvqJ%{s~KGL6(P^EuH@ZQEV&!uooOb95ih_c`qlB!qmTYkdV9U`^Uipr(4Da z?X0Ei*9(t+?6Ni`e|E`cqru;-dm{-?J|qan#@vsU?$0J?M!K9Or*hj^P^I}h63cd& zoGeKRmN1MO6@GuBKHQ6^^*Scm_;O#P7fVB(1+6xClW6SK>uYN;a_)MF$jDqlv`_2v zGamB&_A(+%hWjA(ArQvWufEleT@9_zXE14VM;|lyQ2BSln*R=$h!n!!%BA$P9m(uraV2{NUNn_Ko# z;{clBWgm^RX)ROi!=PqrjHT7ONzPWKZH%$cB>XDtfW8wU-R`r%8g-)6C@sLuQ<4~H z!9TvGxHHH;+>!f{UInQMqJ7=GRJXXnwX+!{MyhX{ZOpTbjl`cC%!f_-V+%(>8i*pA z9A}ss;glL)A4|juh00{BU0QD~X-xdrtxvSH-a@U!(Jj?wk341I;@0+%x%5F~q@9&+ zec-fx3&9bw-Gl1f6ry9-KE9lj?k#ZW|4e#dAanC1O|)k#lB?y#g{^ZsuZfQm^#*6! z)ED3i0_!UpL~bfg-H+B3B@$p(L(QS#XJ_{^sucWMGlqsPQ(V1!@zXK4sw#HnsVkF5 zHACWijdsQ|Mecw2gyWW5`mwUu4yrgt49tf}$>l#7;YqEPc5{8b)mBhB8D%4F>2#S~ zv7fc~vF1&vx0GFvb>GmcP$a$b?h&4*u$nh*&`}kS%ES+WWt!m7*ag@ z@D(hE-V2KD@+>ng2Hg_v5ftQs|76^ ztRMj<@)!qau?f*U+8B(LF`RD6->&)`)YhKn)uwXdVim4z-!ChE+OX$sWn!qkw3!8W zM!jstp>@5i#38JuidK@$7?{GIlx-4k+1|Fw)fj$7*Otu_(lqN8m9ViJ%#%GzO`$IP zky9PlSI~N@xSf4^G|jpi*+&ndey?}14wcTJs?rIG&1uO5V)Fozpt$%@imtGJ&(^Ik zYqfrS2xG7t{j9$$CaT)Au&Q!pZ;1I|$NOOv(|s;_ukF~+!!P$)>-}oQpy(qB{I?t) zgJ?RQ5y_;stz|O0U9}P}-rwp~pG$ETP$=on-F35_O&RFkfg)}HY53dCt1mx;;N_}H z-N^ShaCn|$XVFwKOA8pTbhK+aWDK0EH4h>Vt4@Ez4bwq!+PRBsyM5*KPQn z=Xi~+?aB~G+l#QdSX%Rs**B}njfH&}Lk}AXa>cZ{1%7bazUPdegMe1`lAR?r=Wtiq zuUQHgvP9Ul#Z?!msc2OxuR2suyY|tFT=ht^e>mAYyo^VKN9Dc$)Dq4`{it;ZX5w&< zLaBLJ8>>5#M`(*Iba2=^()wF-nLP0zCY&;ipB0gzRcMhXYGzdr$@(z-GF%IfBX4@! z;JdqDZhD6_M>2lyuaNI|NOMPr7il}6d5M|<^L6$YRITwq;Rtjm>m1+!oB%_Br_mb- zj=LwDGkDn*Ksq(8Mthn5B^fdW6LDEi6sQ+YrU!lMKVW50v& zXo%hbNj?ei{MBADXo~&rcf(Nl?_crTDt<4J-&*niBb%`tO7MYh{r4%BKrVUERWmDO JrRnXs{{ds*+B*OM diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png deleted file mode 100644 index 2c91d4b6be6e19a528a4ea011fbf0e31ae5ce4da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6651 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 diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png index 2c29f4bb90d5dd7abd6714c5afdcfd748a4bff75..6223e1453ffbc79b751d1db26fbe624c63e7f600 100644 GIT binary patch delta 313 zcmV-90mlBC1JnYLB!3BTNLh0L01FcU01FcV0GgZ_00037NklS;U%z$$sR5})(OegPIP~V(D>vW2e)<3X zi>Lp;?^yEx!-JcDZk)Mw6olWsdhrJ=2gM+@AU#M19QuFn%710J0vLY&@E#bWi-XjH z^q?4U{~GZIfYg#~z=wx-|NmIgPrd=~L54iKL!<#Op8o%G;V}7L`0)Jk|1YQaQa23V z6Efh!(F6alo;>#d+L;soZ(lt3|Iw}M{~zAE2F4&ZNDL$gQUg+pVZgHP-T#;O?n1%S zYqo#?8w5 zoe$*2-@iFOUAnaED>m=Ky`W=mF3!g(5TmQ7=Po8LZphEiFT%ym1=jQJ>sN-4A3wc$ z_44KU%a<3G4 zfdgOA6B47Yv7HVJ%Rd7K21W%2hX4Fv!x))9F#P}b@bBM$=P#W(c9nsF;XllhL7Wna d4N!``004^sasK0ixds3L002ovPDHLkV1ii#zNG*F diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png deleted file mode 100644 index e2c03c89d363ce893fcef6679b3498b8b56f05df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 848 zcmV-W1F!svP)Px&3Q0skR9HvtRNYIHQ5=4L?}wsW`$$Dsrh;F!t&exh8L7Fb8;QD$pzyA4L#dno zgeW5FvaW)PpqmKvMrf&pA8oVPR%(G}*}`d4w}IRH?$j2GW;J=;g#`Ou9L~jap65Bw zIlmuai;K2c9|Z%21PTfKe+ih)POYF#R&Y$#Gl4Hk%@LB7c#?!=Il?Uj0 zN$RM8$c}@f!;C=^c&^D{FqZ2LM$%|XA&O~zBoc8%qfsn}!z>&Qhh#;WB!U+VFFBbX zaJyZhf0_EjfYa#|mSgg15S=#|jYlk2tI*WcjM}<7R900%5QLl;lw}!TgF(#B%wTG2 z5`Ldg4ljLs4#Hi13IEvTa>>6FWEt4k(tc7Dg&QpnM?k0YL6qM&VT|GZ^faEk zp5fKl=#;Fm-igt{zKn?sJ4ufA>)R_Tde59aM>a{yx@96B$Nc;}g269X3@u`HWd*TV z3<)`r#)*Q6lF}0Bbb6GPmBF;b1k;Y45JfSI$K&zf(ZdI9DYS6aJ34$N{eM!6)Y^W@ zR9$o3=4ge*ya$c-_4qhD3$Mq6fZvzir=nF;si&%`t%ccQg=Dj(_tPIfz#n)E&)6uw z%*|c&jt$)=v)NpvHC6_Xoj7Uacphuf2qyi0eEKw}MsGuGb@eVZTP!HnXpvMD4D>x+ z7#}V-k=@>5+E#9uZ?^7*&+A1js;Y}N6kZP~)o5XrBux5zSXvELrk;Sa9qRnZSaPRo zwmc3H(Pz)dU`^%^bOUrR4?eX=8B0?4#Q5O-Up;o9wXKK1T?3H2(bY=*iBBNOE_=s^ zZ~f|m3`TOa9RzVV0kq|>^EU=Iq!9JI85#1dp95KFo1?RXk#Yf`QvmdNnPCY3==3Ly z!<~tdp%?49a*jE>-7YFr>L8vv0Ja~D?FOh0U^)C)QtTQ**YVtE+fhFrrh6_~H~NA6M2^tF$Zc`}^0_rnM;pYDIG43kC`a6cX6- a1ik}hvJ^swQ|a{p0000Bkw8+O0i6TM1 zf>0vzVGVTc$!Ch5Y(F3ztcc3zxt} z=*-^Cd;9MD{yv`fdEecA_xD>xNmH&lPW zHUC1$ybnD|QcgxRb%AYX+)O*Ve&;tJ|A!^~r%sUkoN%{#?4t~2sgq;)OF0I#KiW`RbLQ7a_RG7!IV^|vZI`x|X4$%_ z(J5^$o6xpH{`lL&LYY-{HKz*(nN`${{Wz9dC-#qb}`{4sVWVzGIf=`zMa);-Aas+tiONO+AX|{fjuC zm964UzGXiyz<0YkrR!{3wrVM_5u;S>J* zaUWEaZ_C^nlLdRPl=?`-8-37MF?@!@p08(QWPCBl)IO?zVvej_Hcu8mRwd=5ic*e) zHffta=qo1@{IEp93lx5s{~6_@3ei_B?QNUoPwyO&Jv&;tx0Lbaqa?=+_8Jd$s7o8P zMVquuAM}N5a@vLY=OGREi@K3Rb30mIXmn&LA1l8*en@t2|A{m=t(KL`7fDU^OqugY zg;Z5eatiB)6pxECl%)=JX#-rp0(+xrJAun?oA_LDuo%8omaZNI{trhK=5_o4^I9?SKIff> z?>($@uGwcp2C@e%!`I;W3WrP!$DQGLSBu9b+)nZGEBNEE(0zD zE(0zDSAhY>Nf4q{#-q4#5|H5jTn1bQTn1bQTn1bQTn74vfwYp6lIsfk_rC!#fg2H{ zy@`eO62zm}2e%jHbNdF$rL7Vp-|bD^8!?04(ul5BAjUiwx#y*bF|5M*k0XX}E#eew zS!bKm2N}vDr(D9=uVJX^jI~|bTWWg2ms z(M#ZGsA>AXb-8l`F1=AreH@sN0dr4yy)xVv&l7zfL0J?H1TuR%C+2_wxA1!h=$%CQ zJmUVz#{H?K`~MORdaIMg(IQz{-vj1tJzU4h{HD79EY?FS?-_~aBBFWkz%_IL_&ZQi z?K@TWI&kgpL#+7wUB|#{9_#!U*D&t5@%wk_djHP*6mXBW4F9SBBmAe3C%Tt&z&s|d zkLAM#XLm4vfjD>ESg)P6L~Lbu7YecB{<@rT|4=COCERZt*Eq1|;wQJaAvBlc#K`eH=D6$g$V=bYhKRjvbjNB$mp_W3iTlALHKtG$>EF2Y2=k z$l3CFJ+8Fa$@Lw7V{f;%V?JU>=0@LobDzWCYkRlL!QE|6VV#^FM_;1+X-q%)cuJJ@{L=5Z@5s{Q_gzhHLx%L6P8@iT96|XICym&bmboA8ePm z55Ma0NuRwP2X#0Xv_V_1{Jh1nO&^0I+8Ovg88y^aQ}-Ky>)dC006URLKklV*%}>E| zq6zbI6!*1%bFDu(>3&%-XS%Fd_9JO}re3z-`&E9s+TONR_U`JRfc5$7T4CK~7iu4~F=z-7Q?z-7Q? Uz-7Q?z-7Q?z-7Q?p!W>?7mbQ9Z2$lO diff --git a/public/site.webmanifest b/public/site.webmanifest deleted file mode 100644 index 45dc8a2..0000000 --- a/public/site.webmanifest +++ /dev/null @@ -1 +0,0 @@ -{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/public/test-output.json b/public/test-output.json new file mode 100644 index 0000000..f10f816 --- /dev/null +++ b/public/test-output.json @@ -0,0 +1,84 @@ +{ + "entries": { + "0": { + "key": [ + "setting" + ], + "keysecondary": [], + "comment": "πŸ—ΊοΈ SETTING [ General Modern Fantasy ]", + "content": "\nThis world involves both humans and supernatural creatures coexisting on modern day Earth.\n", + "constant": true, + "vectorized": false, + "selective": true, + "selectiveLogic": 0, + "addMemo": true, + "order": 100, + "position": 0, + "disable": false, + "excludeRecursion": false, + "preventRecursion": false, + "matchPersonaDescription": false, + "matchCharacterDescription": false, + "matchCharacterPersonality": false, + "matchCharacterDepthPrompt": false, + "matchScenario": false, + "matchCreatorNotes": false, + "delayUntilRecursion": false, + "probability": 100, + "useProbability": true, + "depth": 4, + "group": "", + "groupOverride": false, + "groupWeight": 100, + "scanDepth": null, + "caseSensitive": null, + "matchWholeWords": null, + "useGroupScoring": false, + "automationId": "", + "role": null, + "sticky": 0, + "cooldown": 0, + "delay": 0, + "uid": 0, + "displayIndex": 0, + "extensions": { + "position": 0, + "exclude_recursion": false, + "display_index": 0, + "probability": 100, + "useProbability": true, + "depth": 4, + "selectiveLogic": 0, + "group": "", + "group_override": false, + "group_weight": 100, + "prevent_recursion": false, + "delay_until_recursion": false, + "scan_depth": null, + "match_whole_words": null, + "use_group_scoring": false, + "case_sensitive": null, + "automation_id": "", + "role": 0, + "vectorized": false, + "sticky": 0, + "cooldown": 0, + "delay": 0, + "match_persona_description": false, + "match_character_description": false, + "match_character_personality": false, + "match_character_depth_prompt": false, + "match_scenario": false, + "match_creator_notes": false + }, + "ignoreBudget": false, + "outletName": "", + "triggers": [], + "characterFilter": { + "isExclude": false, + "names": [], + "tags": [] + } + } + } +} \ No newline at end of file diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 35bad08..38f98a5 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -9,16 +9,7 @@ export const metadata: Metadata = { description: "Convert Janitor AI lorebook format to SillyTavern format with comprehensive editing capabilities", icons: { icon: [ - { url: '/favicon.ico' }, { url: '/favicon-16x16.png', sizes: '16x16', type: 'image/png' }, - { url: '/favicon-32x32.png', sizes: '32x32', type: 'image/png' }, - ], - apple: [ - { url: '/apple-touch-icon.png' } - ], - other: [ - { url: '/android-chrome-192x192.png', sizes: '192x192', type: 'image/png' }, - { url: '/android-chrome-512x512.png', sizes: '512x512', type: 'image/png' }, ], }, }; diff --git a/src/app/page.tsx b/src/app/page.tsx index 91ac037..7e6cc60 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -101,7 +101,7 @@ export default function Home() { } setOriginalFileName(file.name.replace('.json', '')); - + const reader = new FileReader(); reader.onload = (e) => { try { @@ -130,26 +130,79 @@ export default function Home() { e.preventDefault(); }; - const convertJanitorToSillyTavern = (janitorData: any[]): ConvertedLorebook => { - const entries: { [key: string]: LorebookEntry } = {}; + const convertJanitorToSillyTavern = (janitorData: any[]): any => { + const entries: { [key: string]: any } = {}; + const originalDataEntries: any[] = []; - janitorData.forEach((entry, uid) => { - entries[uid.toString()] = { - uid: entry.id !== undefined ? entry.id : uid, - key: entry.key || [], - keysecondary: entry.keysecondary || [], - comment: entry.comment || entry.name || "Entry", - content: entry.content || "", - constant: entry.constant || false, - vectorized: false, - selective: entry.selectiveLogic !== undefined ? true : true, - selectiveLogic: entry.selectiveLogic || 0, - addMemo: true, - order: entry.insertion_order || entry.order || 100, + janitorData.forEach((entry, index) => { + // Handle both integer IDs and UUID IDs + const entryId = entry.id; + const isIntegerId = typeof entryId === 'number' || (typeof entryId === 'string' && /^\d+$/.test(entryId)); + const uid = isIntegerId ? (typeof entryId === 'number' ? entryId : parseInt(entryId, 10)) : index; + const displayIndex = entry.priority !== undefined ? entry.priority + 20 : (isIntegerId ? uid + 20 : index + 20); + const order = entry.insertion_order || entry.order || 100; + const probability = entry.probability || 100; + const depth = entry.depth || 4; + const selectiveLogic = entry.selectiveLogic || 0; + const groupWeight = entry.groupWeight || 100; + const group = entry.inclusionGroupRaw || ""; + const caseSensitive = entry.case_sensitive ? true : null; + const disable = entry.enabled !== undefined ? !entry.enabled : false; + const constant = entry.constant || false; + // Strip emojis from comment + const rawComment = entry.comment || entry.name || ""; + const comment = rawComment.replace(/[\u{1F300}-\u{1F9FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]|[\u{1F600}-\u{1F64F}]|[\u{1F680}-\u{1F6FF}]|[\u{1F1E0}-\u{1F1FF}]|[\u{2300}-\u{23FF}]|[\u{2B50}]|[\u{2934}-\u{2935}]|[\u{25AA}-\u{25AB}]|[\u{25B6}]|[\u{25C0}]|[\u{25FB}-\u{25FE}]|[\u{2614}-\u{2615}]|[\u{2648}-\u{2653}]|[\u{267F}]|[\u{2693}]|[\u{26A1}]|[\u{26AA}-\u{26AB}]|[\u{26BD}-\u{26BE}]|[\u{26C4}-\u{26C5}]|[\u{26CE}]|[\u{26D4}]|[\u{26EA}]|[\u{26F2}-\u{26F3}]|[\u{26F5}]|[\u{26FA}]|[\u{26FD}]|[\u{2702}]|[\u{2705}]|[\u{2708}-\u{270D}]|[\u{270F}]|[\u{2712}]|[\u{2714}]|[\u{2716}]|[\u{271D}]|[\u{2721}]|[\u{2728}]|[\u{2733}-\u{2734}]|[\u{2744}]|[\u{2747}]|[\u{274C}]|[\u{274E}]|[\u{2753}-\u{2755}]|[\u{2757}]|[\u{2763}-\u{2764}]|[\u{2795}-\u{2797}]|[\u{27A1}]|[\u{27B0}]|[\u{27BF}]|[\u{2B05}-\u{2B07}]|[\u{2B1B}-\u{2B1C}]|[\u{2B55}]|[\u{3030}]|[\u{303D}]|[\u{3297}]|[\u{3299}]|[\u{FE0F}]|[♠♣β™₯β™¦β™€β™§β™‘β™’βœ¦βœ§β˜…β˜†β—β—‹β—†β—‡β– β–‘β–²β–³β–Όβ–½β—€β–Άβ—β–·]/gu, '').trim(); + const keys = entry.key || []; + const keysecondary = entry.keysecondary || []; + const content = entry.content || ""; + + // Build extensions object for both entries and originalData + const extensionsObj = { position: 0, - disable: entry.enabled !== undefined ? !entry.enabled : false, - excludeRecursion: true, - preventRecursion: true, + exclude_recursion: !constant, + display_index: displayIndex, + probability: probability, + useProbability: true, + depth: depth, + selectiveLogic: selectiveLogic, + group: group, + group_override: false, + group_weight: groupWeight, + prevent_recursion: !constant, + delay_until_recursion: false, + scan_depth: null, + match_whole_words: null, + use_group_scoring: false, + case_sensitive: caseSensitive, + automation_id: "", + role: 0, + vectorized: false, + sticky: 0, + cooldown: 0, + delay: 0, + match_persona_description: false, + match_character_description: false, + match_character_personality: false, + match_character_depth_prompt: false, + match_scenario: false, + match_creator_notes: false + }; + + entries[index.toString()] = { + key: keys, + keysecondary: keysecondary, + comment: comment, + content: content, + constant: constant, + vectorized: false, + selective: true, + selectiveLogic: selectiveLogic, + addMemo: true, + order: order, + position: 0, + disable: disable, + excludeRecursion: !constant, + preventRecursion: !constant, matchPersonaDescription: false, matchCharacterDescription: false, matchCharacterPersonality: false, @@ -157,29 +210,57 @@ export default function Home() { matchScenario: false, matchCreatorNotes: false, delayUntilRecursion: false, - probability: entry.probability || 100, - useProbability: entry.probability !== undefined, - depth: entry.depth || 4, - group: entry.inclusionGroupRaw || entry.category || "", + probability: probability, + useProbability: true, + depth: depth, + group: group, groupOverride: false, - groupWeight: entry.groupWeight || 100, + groupWeight: groupWeight, scanDepth: null, - caseSensitive: entry.case_sensitive || false, - matchWholeWords: entry.matchWholeWords !== undefined ? entry.matchWholeWords : true, + caseSensitive: caseSensitive, + matchWholeWords: null, useGroupScoring: false, automationId: "", role: null, sticky: 0, cooldown: 0, delay: 0, - displayIndex: entry.id !== undefined ? entry.id : uid, - filterToCharacters: "", - filterToGenerationTriggers: "", - excludeFromGeneration: false + uid: uid, + displayIndex: displayIndex, + extensions: extensionsObj, + ignoreBudget: false, + outletName: "", + triggers: [], + characterFilter: { + isExclude: false, + names: [], + tags: [] + } }; + + // Add to originalData entries array + originalDataEntries.push({ + id: index, + keys: keys, + secondary_keys: keysecondary, + comment: comment, + content: content, + constant: constant, + selective: true, + insertion_order: order, + enabled: !disable, + position: "before_char", + use_regex: true, + extensions: extensionsObj + }); }); - return { entries }; + return { + entries, + originalData: { + entries: originalDataEntries + } + }; }; const downloadLorebook = () => { @@ -221,10 +302,10 @@ export default function Home() { const deleteEntry = (entryId: string) => { if (!convertedData) return; - + const newEntries = { ...convertedData.entries }; delete newEntries[entryId]; - + setConvertedData({ ...convertedData, entries: newEntries @@ -463,7 +544,7 @@ export default function Home() {
{entry.comment}
- UID: {entry.uid} β€’ Order: {entry.order} β€’ + UID: {entry.uid} β€’ Order: {entry.order} β€’ {entry.key.length > 0 ? ` Keys: ${entry.key.join(', ')}` : ' No keys'}
@@ -508,14 +589,14 @@ export default function Home() { )} - + {entry.group && (

Group

{entry.group}

)} - +

Content

@@ -531,7 +612,7 @@ export default function Home() { {entry.content}
- +
Constant: {entry.constant ? 'Yes' : 'No'} diff --git a/test-minimal.json b/test-minimal.json new file mode 100644 index 0000000..ca01610 --- /dev/null +++ b/test-minimal.json @@ -0,0 +1,139 @@ +{ + "entries": { + "0": { + "key": [ + "Dean Archer Wolfwood", + "human students", + "integrated education", + "2002" + ], + "keysecondary": [], + "comment": "Founding of SUCC", + "content": "\n\nFounding of SUCC\nIn 2002, facing declining supernatural enrollment as young monsters increasingly chose to attend human colleges, visionary Dean Archer Wolfwood made the bold decision to open SUCC's doors to human students for the first time in the school's history. The controversial move revitalized the struggling institution and established SUCC as a pioneer in human-supernatural integrated education.\n\n", + "constant": false, + "vectorized": false, + "selective": true, + "selectiveLogic": 0, + "addMemo": true, + "order": 100, + "position": 0, + "disable": false, + "excludeRecursion": true, + "preventRecursion": true, + "matchPersonaDescription": false, + "matchCharacterDescription": false, + "matchCharacterPersonality": false, + "matchCharacterDepthPrompt": false, + "matchScenario": false, + "matchCreatorNotes": false, + "delayUntilRecursion": false, + "probability": 100, + "useProbability": true, + "depth": 4, + "group": "", + "groupOverride": false, + "groupWeight": 100, + "scanDepth": null, + "caseSensitive": null, + "matchWholeWords": null, + "useGroupScoring": false, + "automationId": "", + "role": null, + "sticky": 0, + "cooldown": 0, + "delay": 0, + "uid": 0, + "displayIndex": 28, + "extensions": { + "position": 0, + "exclude_recursion": true, + "display_index": 28, + "probability": 100, + "useProbability": true, + "depth": 4, + "selectiveLogic": 0, + "group": "", + "group_override": false, + "group_weight": 100, + "prevent_recursion": true, + "delay_until_recursion": false, + "scan_depth": null, + "match_whole_words": null, + "use_group_scoring": false, + "case_sensitive": null, + "automation_id": "", + "role": 0, + "vectorized": false, + "sticky": 0, + "cooldown": 0, + "delay": 0, + "match_persona_description": false, + "match_character_description": false, + "match_character_personality": false, + "match_character_depth_prompt": false, + "match_scenario": false, + "match_creator_notes": false + }, + "ignoreBudget": false, + "outletName": "", + "triggers": [], + "characterFilter": { + "isExclude": false, + "names": [], + "tags": [] + } + } + }, + "originalData": { + "entries": [ + { + "id": 0, + "keys": [ + "Dean Archer Wolfwood", + "human students", + "integrated education", + "2002" + ], + "secondary_keys": [], + "comment": "Founding of SUCC", + "content": "\n\nFounding of SUCC\nIn 2002, facing declining supernatural enrollment as young monsters increasingly chose to attend human colleges, visionary Dean Archer Wolfwood made the bold decision to open SUCC's doors to human students for the first time in the school's history. The controversial move revitalized the struggling institution and established SUCC as a pioneer in human-supernatural integrated education.\n\n", + "constant": false, + "selective": true, + "insertion_order": 100, + "enabled": true, + "position": "before_char", + "use_regex": true, + "extensions": { + "position": 0, + "exclude_recursion": true, + "display_index": 28, + "probability": 100, + "useProbability": true, + "depth": 4, + "selectiveLogic": 0, + "group": "", + "group_override": false, + "group_weight": 100, + "prevent_recursion": true, + "delay_until_recursion": false, + "scan_depth": null, + "match_whole_words": null, + "use_group_scoring": false, + "case_sensitive": null, + "automation_id": "", + "role": 0, + "vectorized": false, + "sticky": 0, + "cooldown": 0, + "delay": 0, + "match_persona_description": false, + "match_character_description": false, + "match_character_personality": false, + "match_character_depth_prompt": false, + "match_scenario": false, + "match_creator_notes": false + } + } + ] + } +} \ No newline at end of file diff --git a/test-output.json b/test-output.json new file mode 100644 index 0000000..f10f816 --- /dev/null +++ b/test-output.json @@ -0,0 +1,84 @@ +{ + "entries": { + "0": { + "key": [ + "setting" + ], + "keysecondary": [], + "comment": "πŸ—ΊοΈ SETTING [ General Modern Fantasy ]", + "content": "\nThis world involves both humans and supernatural creatures coexisting on modern day Earth.\n", + "constant": true, + "vectorized": false, + "selective": true, + "selectiveLogic": 0, + "addMemo": true, + "order": 100, + "position": 0, + "disable": false, + "excludeRecursion": false, + "preventRecursion": false, + "matchPersonaDescription": false, + "matchCharacterDescription": false, + "matchCharacterPersonality": false, + "matchCharacterDepthPrompt": false, + "matchScenario": false, + "matchCreatorNotes": false, + "delayUntilRecursion": false, + "probability": 100, + "useProbability": true, + "depth": 4, + "group": "", + "groupOverride": false, + "groupWeight": 100, + "scanDepth": null, + "caseSensitive": null, + "matchWholeWords": null, + "useGroupScoring": false, + "automationId": "", + "role": null, + "sticky": 0, + "cooldown": 0, + "delay": 0, + "uid": 0, + "displayIndex": 0, + "extensions": { + "position": 0, + "exclude_recursion": false, + "display_index": 0, + "probability": 100, + "useProbability": true, + "depth": 4, + "selectiveLogic": 0, + "group": "", + "group_override": false, + "group_weight": 100, + "prevent_recursion": false, + "delay_until_recursion": false, + "scan_depth": null, + "match_whole_words": null, + "use_group_scoring": false, + "case_sensitive": null, + "automation_id": "", + "role": 0, + "vectorized": false, + "sticky": 0, + "cooldown": 0, + "delay": 0, + "match_persona_description": false, + "match_character_description": false, + "match_character_personality": false, + "match_character_depth_prompt": false, + "match_scenario": false, + "match_creator_notes": false + }, + "ignoreBudget": false, + "outletName": "", + "triggers": [], + "characterFilter": { + "isExclude": false, + "names": [], + "tags": [] + } + } + } +} \ No newline at end of file