diff --git a/build.gradle b/build.gradle index e739f592..a838c120 100644 --- a/build.gradle +++ b/build.gradle @@ -12,6 +12,7 @@ base { } java.toolchain.languageVersion = JavaLanguageVersion.of(17) +java.withSourcesJar() minecraft { mappings channel: 'parchment', version: "$parchment_mappings-$mc_version" diff --git a/changelog.md b/changelog.md index 3c236737..753a054d 100644 --- a/changelog.md +++ b/changelog.md @@ -12,4 +12,5 @@ replacing where regular Water would be used. (configurable) - Added the Barrel, which has all of its functionality from Ex Nihilo. (Composting and Mixing recipes are configurable through data pack) - Added the Silk Worm, which can infest a tree so that can be harvested for string. It can also be cooked and eaten... if you're desperate. - Added the Crook, which can be used to break leaves and infested leaves for increased drop rates. -- Added the Hammer, which can be used to crush and smash blocks. (recipes are configurable through data pack) \ No newline at end of file +- Added the Hammer, which can be used to crush and smash blocks. (recipes are configurable through data pack) +- Added the porcelain bucket, a cheap alternative to a regular bucket in the early game with the catch that it breaks after pouring out lava. \ No newline at end of file diff --git a/logo.pdn b/logo.pdn new file mode 100644 index 00000000..6251475b --- /dev/null +++ b/logo.pdn @@ -0,0 +1,204 @@ +PDN3> MPaintDotNet.Data, Version=5.9.8621.1636, Culture=neutral, PublicKeyToken=nullPaintDotNet.Document +isDisposedlayerswidthheight savedWithuserMetadataItemsPaintDotNet.LayerListSystem.VersionSystem.Collections.Generic.KeyValuePair`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]][]   PaintDotNet.LayerListparentArrayList+_itemsArrayList+_sizeArrayList+_versionPaintDotNet.Document   System.Version_Major_Minor_Build _Revision !dSystem.Collections.Generic.KeyValuePair`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]System.Collections.Generic.KeyValuePair`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]keyvalue $exif.tag0[0] +D $exif.tag1[0] / $exif.tag2[0]7 $exif.tag3[0]7     MPaintDotNet.Core, Version=5.9.8621.1636, Culture=neutral, PublicKeyToken=nullPaintDotNet.BitmapLayer +propertiessurfaceLayer+isDisposed Layer+width Layer+heightLayer+properties-PaintDotNet.BitmapLayer+BitmapLayerPropertiesPaintDotNet.Surface!PaintDotNet.Layer+LayerProperties         ! " # $-PaintDotNet.BitmapLayer+BitmapLayerPropertiesblendOp&PaintDotNet.UserBlendOps+NormalBlendOp %PaintDotNet.Surfacewidthheightstridescan0PaintDotNet.MemoryBlock8 &!PaintDotNet.Layer+LayerPropertiesnameuserMetadataItemsvisible isBackgroundopacity blendModeSystem.Collections.Generic.KeyValuePair`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]][]PaintDotNet.LayerBlendMode'Layer 4 (PaintDotNet.LayerBlendModevalue__ *8 +, +Background ( / 8 0!1Layer 2 (" 4#8 5$6Layer 3 (%&PaintDotNet.UserBlendOps+NormalBlendOp&PaintDotNet.MemoryBlocklength64 hasParentdeferred  (System.Collections.Generic.KeyValuePair`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]*%+& /%0& 4%5&   +1 08BxcS`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````P +1 08BxcS`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````PJ +A62&0N````````````````````````````````````````````````````````````````````````````````````````````````````````````x O-ud +W{u/,H#0H"`&H09a䨑&HH䴷}>gϽ-xm[rZU]UիVu x! ^kUuhF3l4hF38^PirhF3 NfhF3ьBdƏf4$;+ܟg3ьf4<01r.{JqhF3>Σr]ьf4F2x~Ȑ3Ee^VV|iwhF3cy\(4f4h f"3g!+Gy6y4hFN&yዏkߑ_Gьf4Ԙ}a2n-,n|MǓM3Ǔ"_H/U |"C'Y9&`JYBҼьf482#BlA+QG +>yȪάT)IiF3I.v?v2wtΜpMoF.LN0 +א,hF3rPF8}xXs\`-VF/$iQVFN32L=@%0>iaEnf=aD9:VA}Y?/ sqnL^y˯VYPhYg ьOL+z0T(Dn+FWeyB~j?w Nfki?JyRޑ}ڟE%j朓f4c?tB/DzJ+*Aؠgk|?e6l W ;%aO&xq" )SV;ʖcw}YhG|dw^8C6мYQ| 0OY2nZ|(C2uu+#xa"1~{h iF3>:ø3ᅽ[["wLܘf3tl^ xr[0?{Vc?ь;.<|B eA#]8ladEn6lxxiH'Zq,۫ס6j~lY<ьz!"g{Q;gvbE욂tgy qi9-Sް$ґJ{d=r2!hFBYayaU^ ^mQΊX#T3 s3n=呈).C8D82$e KhS4|+$ ˌ}9h/g]V8[ Lq2.2*7΃_xlH-aÏ̐~,~lnhF3^8j z9PmaF_ێ)Nd^̂ZJd+ٸ3Dxi,ۮ9ⶤ!zH!8UΏ-N?4SH3>cy T~/\|" +ڈn‰Q.,ҁe'|7np7EwN# A3]Q(?ޕCƑfg$g5/wJ0c ZÈB:ߕۇ*cEwЊ|\e>M#gIєMh0eaejw}`JҌGc`A"h5酶6EaX^mSXf{zNJ2':v 7m;s(Kcfl:^X{G !G\ݏ+ӏ[M ҌX/ҋ{j#2zBI^mQڊMYNF6 !pFؔ܍GNveH)9=n%]2=41vDx[cf{j +j- -V\qZt$(= qG.̗tz#nKN2# B~%v#ǏIᛍ!ȌQ9ϐ|a5F0זB%Ev&xz +Yd\6\0sy= aJABHnI !+ *3E?cd׻OAN&w,ьO{~\q4c?o"8ݝ0K+Td-E L'_m؂S 3o)B(/27vg)qGkIkZz;y[m!Wl ain8kFj "qﻢk3 * e]';e L't +7x.t9M_;a1>='!גwfzfN?;r~g?r?~dv@c赇7jtCqLCS_K뢐o$eR.36&B1b{R^j Y +^]D=|Cd}Pw&aH?t3 H)0! q9|1`HۏG?gõ|LۜtCf]{8<=0Nn iFaL^z5u=4cfo7-//yqC=/{R^8}>]|mEoZP\6n3߫Pz`"-rrÎH!GGvGnPvC#1|o%xfp6yz͘1hd/'_I&yDҋ܌7 `xd'$ԗNd94#'( L+8N ;_1CPXɨq_nxY-aCgFĺ,y?7/{Xn^?uvIlczj:㙡y ˎԏ%ӷC>cK iد/kofļdD7cׂeFla{a>{/u[1BOWV65: vx8 ^` ?܆;t )1sHvz9K#ðvbҎsYh;fv,֌Ɨzw$ $ی31u"ʋUk`OK[ γ^ڬ`JjHF*X7T ?GNv ?XAY/ig`C(cla+ف ?~K={=ifFǘѱ(8q[c־KTOuEȋڂz½bZbxvz^,Jc +J2˼4Doy uN00$'혼Ӟq];Ԟ+GJc}iǞ;f;r?Լsrυz% ~}fȟ|-CѾBP/ů1="[1>t#LHqjדo{8njK ;E?n q>6Ιyt;l?̵2o%>mCPR3/x{*ٖĘ!EZS~=S;/XfxR315'yGxy>~+FP^s#"=0BǑ3eb>36D?_~~ν=C kٱ;ps]=~N&u^P{w̧Qf(/8f})w5s; ^mz.dE4|儙qs<椖2CvDS8ΗwE=w^_[ev+Y39pP{ӵ~ ǒџ5BfFfeȕd֙YˈKeV8uXk-ojNH#pub\`0[)5.Onᬳ놸sһ2\kFJ?_zӎA;ndvvr8` }dw= fq:ڌu!szHfDGB^(3~R5FU/bk +BVFT"w ++g3A5M%4=7k3#VvˏwQ{={gͣzy}Go$Gv5t#Cs|}v͌M}3ʌE͌sFvf۳dfֿ}SD85F~Tkk z8!rE'f8l^M|1pFw#Xw7poU?@;ܯзblGk%vs>\nIiƞ ٤. +f̺X;2 ^̒fdn4c׌o՗Z?)(1{8{R58/E+h7xF}u#Eqsm$dH|xޕ0@70"YݎGג+ v q^_ er}{WcpAf}In`c8JsJҍ};Tcwю~ӎl/2wv'Œ]Ҍ UkdkDfrRe2Jȕh36+aF wjEی k .螔 aŮʊ<ǂV`| +3XdГ9D0$nd4ȟ ^;g cUi;v,}Z>:qzY2+߈^23Z4aFZkdf(7[^\KEab_y3lԺ=Qfnk *5ƒxAXrBB NnP-! qGr=[n,sr%?j=r;`.x`N[~+sq=Dz<1s!g31vmO>O3z[b3X f=ke8f\ft/\OHz c5cH، ͌ k .2^´BeSO9vfE" #u{M^G~IG:P=ԚDzsob[Pnv`p":{B>> "v|fCOe?ueL3cD!PfH!Q\G7L3R7H3 3z߄r73c aPf`bXf,BY'dE.|i}zݠPݸK#ӷ]n 1ԙnla5Wn$cn;g=V +410vl$J1gɶ|dv 5g=u,CYy5m3Z2C!_{`2㭃 3RfLzOJzO;u4c3V4c%|0<3"0Pwj6pcx5a+0jAÈ3x%[QnDOo%h'Gь8?2Cjpjqqv``;qV;vܥ1fqpnΡb.9Z'OnN>/n %3/xb䉵[OCt/L ä؟{fH7ᭃ 38&kwq㼩831prh6ڌ܍py1bܨbC!]#}#gϗŏCJGw4㹐³!gaƔ:ý|a1t~8<~~xmܥ8eEiAe91\^OvJ7t;:t;;z ;Xٱ9LWGj=k e­dzzXoaIYJ_'vl츐فn}uÚ ڱ^g y_Gѝ۱v9~6Fa]jY]34CDͳ?r#?z37Xn{S:?TdfnhfM?ӧaA!0cH >Qҋ +(74'1"c[s=#ZayËBٱ=-wksD߳2\r?pQݨf=#`& ~FnG/qKk:9ΥWt/߁5ntCc UWS+ړZ!Xn Iu-uiedḍ)bi6uuvzEnpk,itýM!P/%HNJ #PVA0^Ì\| * qRy.#5Ao5|vaq2cPv ,Xj̍ԎCIn(;Dʷ ݠ0yx^ uO쀴n@ UkA3w 7pt |~y{Xї_0CA1d,ީUتiŒYiFڟ¬c!f.8eػ2cnj5 ePfH7})~+b=&ZpF+L7Y:WWH+`J =hR7GBύY='*m91A?GjGojҎv7;089~n@Q=V퇏ƱҎI7czz'ޡ=o{oWwʬڔ|jUG\FC~NV.VUk)4cD!Pf3߀bx4CwaFFnrc!D-6cÎ06cCOTb/BnPkua8LbO97mH }VȐգ{~ö##=r7vX~TQ;{ ϥ;.vtǜO1w vCءU,; \O6.&O憰cen ͌i5S7`y 5UA;JQooԎ1s8cP~nvq= /@K;);ЍGDX8XOيI݀|ښvk 0cOSIy5j.>OiFaRfH7+{2C})݌4j Ӌ޺x/e=+N {[ =뱭𹡇Xm!p4r̈n?TUVXîtiǩ8;doFan#^:CkXs:~ީdE$d"Y=١jt3DJwODCҌԍ 9nؗiD*5C3 wOv flh! eFvR  ŸѓZQ7{(+(/L7L#¾u_ .c )N#.CBϾ(ڣ}S ێ);nj׌^y%܎-;ЍKuflܘLݘj35GٟRfl3Zsޟq?Zk>G㎘psm=ebù^xX0Uka=`~ n 7)4mׂfrc1ْh94ZfnfƷgWQ \ɻf< ی܍ ;QfDxָCV)a@]kv{Eqو}gnx?^-G/zσ.^BQm3g2; C[UC#hv&8<;g;$%дCҎ]9Bqn_$kk1#;2;\Ϯn*Fng5ZC3ϗ cb.flݧO4f?Qь=.\_Fь ͌لfdn8+bB{vy /,\^nH+Vpj *wGsza(#B#o6F5?Fюi}\;%saHnvȵկvH+qT5zXߕu!k;4;~pDzXsqz-\ѝqȪ52S@3\yArࢸ'Q7cgM#3mtC1Ȅ%{_qyaA2eflE^=Q!+ 7^KxQtkY\^ѽa]k!XrqVfۏ^γz<\pkb99ݎ0x`ۑud5̍8_K72;R7~8S9~g7nd*kc-\ѱC/O 7zOeFj>C/؅}xowM#3C Hftc?!2c3l#t3Vfxݨ腊ۍg^~w{?*{2zcH}]eTٚ} C#Pta19[Uu. <+ӎH;V%0Yr;y*W:~FXŹz*AZaoJ١lN>ܰ… q.?f}E<QطޝXfM0ߌ}d!p=_hb͐n8Oуw2(΋j^Peؽx݋!52?zgf̺݈3cENËV//+ +{Zy94o-Dp^@(PK}\k|Ğ@˵_Kwg;k+رqd);1v5cVJ%4Z#9vP5C>W=yHQtCpWљ• ֐Spck^Oof~oc~m:c3};5e'PVU"fA{x/\gyMuKLk-S{*^nRځPvg?s8'dv\sFZέ2ҍiҖatiG^s0k .?'Uk$=pC̣?f;Sʌ qLN]T?Ҍ ˥4q_IdnDwcԽ{a0C_gR ׼ZK_w}g7.[ )Zxng>lFvnOsïL؎ȵe^-"K'L;*$.%qߜpCء;fs /N 6'zOj  ycUόw\frf{?'Qf8݈4~뷌|{3`ﭥ-DB wp{zJCXkw}ٯ] ÷w. id]v7"8A~6Ǥn; NY*_Kc27 ;NЯ7s=͍ɢݜ~YscqpQkOf@^\L(}5(3ݴ%SW_iT0C濰 ݈077I3t:>aBc쪻GOO"?Fca_|b>H?:7 ?Y ;0ô :yޯsΉ ʎ:Uu3S^4BƻZ*3W 3} s4 ,IZK̰׆~0Q}(fa[s\{?3a\z"d 5Cٟkh-$ۧF[;.cok%q_|rTۑa3N;:{\[aS`'W[vl5ޤqw#ut1vϻj ~szOA퟊O7mߌ_4Ck4pa =3yR5|ϭ~/=} +{n;M菲(3t705uϢTt[B{C/՚t3 #hQϱtCqDH;^vH?u0ɜnXvTWQ5Gcu7&̚cE:Ŭ9F5G y?[?e L"tQO4C!ruH30'ߒa +n b!Hfqy:{{ {k + +='w^=9 +z83?O z$tfz/Q5ca[v,(;pmW~J~,s޴Ps_%΂w]L89 7JoK>ѿW ZC>ZcaFk"=Gܟzp6s}۳̰4l3hF_JG3oʉ<1mr=3|ԚL_ +TATr+^ e5cp 6 =Rl[j~F^c!-C١!Y2~t;ަ]9L$scG~U<`8g"W?ef {q-up > g++<  ^)ی-ow"u>׫:>WjWnq#sC;j7yPfڎd"m~ʎzU;R7~UZsdn{jY';' ½[Wk3~YQ0Xk`R3zc7e`?EI؁w~dzA?f~?_Nk`t30)BQtXc})[)3DŽs-;ڽ<;^7Ϸ#z*=*} )=vSc ;~it1an9:ww 6!PnpV lsv +cHu:. ]kkݙZCч9q0Ì w'$!ߏʌ_Ͱpq^K/Pf (3|T{ik݂Z/漮5džF]"Z|;;sW~^Db~&{7I79Vnxj/lyRC9Ww{*Xky"Z2twWOOf켃nZg+mFq 0*{g3n$̠$tyg;7rqa[ua={}ڳKW8a?f١Qj%dŚR*tc#c@@v*;c>X99R;֎&_H7\5iP!ϻuDk?fm&msDOQfS0wPfSމ3s=9~6Cm5H={A}}cp}~;.l9kztvieG;jN߽)ϵ!hu$iSwn+7pϭeGƑcԍY7nW@3: xHְ#j ݍ9\hij糺Ә{bƩkFpޯxaF|{񲯡ܰol/ʺ)ۏA }{\~[}v\Q_ۦa Dr;yͱ9kƠt:D_ ;j FHѾBұHTȌwM3/ܐߖ\"Œ3C .:[ؿy-ʌZ:ZC z8Cw}/gܴCyrvY8Zt#9 #Za9kN!<*5nZƅ.Dbi) $3ީSZEI3|(/Ig-\}vT2n>R|)V7g`9߲wie;05GΝ3fH҅n;~h/Qs<Z#ǏWk(7ߑ9lTf=Zӧ!?J)jM#d,d>>f)X$[\q>UOpc^7ˡ?g{A(஡ +:SwN~ήܫ?MQʎ9ڎG0 UxAFwCCWnP*z_nCs#PsļOp?sXk D?WOF Í̌[ ~PQfMe4|lLKi Ye zwץ??)$ 5`׮9s(S~Ty]9 ky5벃ӯ4w̐]gΊ%9 }VqƸլ5Fé'%#j ƙ WFfF:%V7}n&ݐf`ff|>wA ߹vun *1]l\_STܫ?vCQqf[zn=6L7x*17,1j5Gэj9Ƹ7vc֐nxjZCtc}ȃ`1p澳?աiPfY1w[ҟRyRfy7f1Gfeĵ_\BEas)w- c.Eߵ>7szJ!y;y[~Uv{/{~]s75pU rî9~虍 %@3R71s7_Zc>Tkv#Ќ(1zYk ܠj+ɦWpt襗J򘡻1#{ ʌogG{8Q^TK]N\?bw|zc)Qю/+?\^ڑAa kU쩕fXnW;Us7c#p"axjx^st%Z1)՘ X+8,Hkkk edl]kpӍZC3CqdLe`g>.Y?<B=絟:;"E;H7<̍tJ>S~pRCͱY١nH;ϡԊ6- iz!̀LN`fAʌω赆醻n赆?%rnf+S\30HkȽ}FyBͥuלmP?ɶeˎ:^{Uyv쳄{a_IKf]ώtp#l^snJҍϮ2ܨn|ze톪9|iנj Ƽpc19pcPnS7n_iG,3w܍E7 u8'sZWVvMYsymNjIݯ>+uڡ#Wea_5Ϣ#z \7\aі҇@3n;<30#ҪZC1~q2q, t[kdnג HLw^rShtx(/=c =ReWAm֍kֱ55;;ppᷣ_=5fGtw~U ƉGl7BsxzUx`̧Wuޚ{Q8qƊ!̜w(֘0CQ2tYkt.3r70n2l1tC3COf^{k]U~篫?Sk|U7:e^Ԟ]酞jv~hv\@pCWϯRn,CA=  a(Z5Ҍ a̞@q?7 030K?gҍkҌF?Eӷ1_HP i8w.z8GYG.3Wl/\)r}8q_.ؑuzE}5Gn@,n7\vw5GDk5Y֘Qk3R7?orcp>یkn燠ZC =az'd=TZPWB9P{Qԟ?8硯EBWaE);x*ҍUXstKKXsparCU=jQ5Ќu 2cpF!ݠk <_H_}Uk`XunF~fs[tOu# ^,yzwmVV}םk)aR{b ;u(ٯ"jҍ}Uk]%"VvhG܍cZcDn;P֘y[k(3ͰE7S>dЌ{8x3cy*NT(c/Bnv>o_ SgǙozi;L/ʎԍ#~uF]0\sHf7_vZ +?]h Ofcf|s65ມ}mL n?h;OX;C<\Wqƾ +E9rsH7>nkn xb5[sT}_YպÍ #t#PknPf֐n굆>7FI3|wpQ]5 62_rE# =%uxjyn51_0hz@&.(gW}_Xk{T 4c搈2cSkL^|UkBOK5*E7fL\#؟?eA]g8ySB=*VOeN}- ܋~X1__EiBFUĝw/2;̚CUu8H{Un*MLYjr⭇=*4dS^f^$k 7TN>01 nLx%)ڍzy)ߌU 1#b{Na{wp_;|u)";~H37Zdkokfn9rŽC‹Zt7df{J =9H7՝h}Sa͔.8yw2Y}yT +X {~y2]uL3Wna5&oY?E!ͰSgk=EȐ:ݰafTqC CVTCBZ aفVQn,Eͱiq1a ?+7ߓ`0n WftL~Vߣi27Fa?G3a7]ǭ5 7F WOQf,zZQcQGQZ;|AK FvjiFٚs=27v0HxkU303 e 7 (=*րLͳSgbp5L7Ʈ[_fҍz}f̃^ӨÌ̎%27H]k5߂Yî~T#ڌz,7#BOw?zv>ncM7Қ}`nn&G%x!G%pt7:]K]/7ʹAյ՟S~=y2CYAUá~vW^i~/Ǝ#aFι0sYsxw{ +5G9nˍ{U!GVx/Plׅ27Z;5=*ڌɛ /Yᶣ ӏ1C9PϐN?{BGtJэj4gK;/T\nѫfnj WU W*wأB3.(}hW\=* zrF7]nj ۍxj;z`ޖgˍ25G')(/]s>ӻ0CѫUmtԝN&$27h7 vv7<=*ulGE+WW գk ݍ 77YplM =!3L7rkGU/kuzچvZ臼&rٱyGnvk=&ڍg ^sn] ]sؽ*uWUZJqrZjjt_mGJ  έ5n֘{Hn2#t6yu/p Tv]0eBOe75GYݨH͐bgɪ9\nhU隣fCQI7Յ D ƍsF ֲQmU0cd B1Y boek 02N4`ohoG~f۱yڍa;8n` 7b +3ܠkn(;Zj)dZ\ zTXkfnnl:zT3ʎʍunXb3D^Y*/ۏknaA7h;2/nUiv͐(sѫ +hM :vzUmS= a7c`=Jm3gD nacfLZj ;YN3f'q?h;(/nЎ~;nQ05G~ޓǍM7;|n竇nLjnLXn'\CQn"_qg=* X{T] یYգ{UPfjGnE?_y!Yb̨ǭyui׋NX iGZNX90q㋖+UG3 7v3 冯G%x+u#5 +n̄pSr7Fnk,Wdl73dkmRyQEЍhKͨ  j{}1Wf{U{97^U^ҍ̨Qk';X섞٣/ȭ`vCOЍ +2ѵF v b?/r7nZbWI7ҍk3ii7W}͘q;qpc4C!W=*mVtc,w#Csߨ KirC߫𳀩ǍjvPṱFnҒCU^hFWս|>=ǷjL^y5أ;Qnz]fF좳г1vd5nT0cͰhEU7L3"ލŒn)^*CA#sU1*tc~7nӍ]Ͼ^GEsWk;n/arC5Z4Kiˍ:(x74|/^fvf0zän> Yz- :+ګ15`Qw~wKG+]>&"铿s)X|SL] dOD}'3:F&o9n\Dkbo#vˤQ;ʯQ鸑ެqfnh(v WnnU ZvvnGpô"7&Fz f6jU7THagP5#y3D~ ^"Fv(񂵺=ȋ]7kU. Mў؍Ȍ{nP;2{St7~Qōόqܨ~su^\}`5F I/uC1yu'aFύrkU"7&o<&Hs 2aȎ=q{KYw_g*n5F1熻6 _$`[7^wzrcҀdjjF ލaĻnPekTY7-~L[uoC?g*n p#aGnS^UsSb/t(HAݐnt fP/XngəZ7c7xmp2PٽCˍϴ݈YiJ ΌPna}+geP7x;&>̚QƍcFuȍ'xsCZ;:o&*{~F=ՙ3 ֲo7쨣uQyx#4 Sn-vё!w\Ox7V!s7ʸq:܍K{2^HQnOȍYÖ=?ܺʏ<7uOyٙCF\ 5Fvnv,^tc5xsgtc"x̍=&=n~TÖKA܉~pA %7 +pa"?|a{?.80u&c-7b+j7.Dnl+scȩo nP;߻,m` ;t冭}frn/X͸!gƣnq];Tx*-ޑY =ƓfnLv#C^ =f";NQ ~qnYəCFGb S3G#];]3n^{Gg3nЙ7";4RwGTg ޏnT0äU(G?ag¶ntJzPvc5 gcލ$*{ng'p7a ]? {?+ߍb/l?W=Fٵ*޸ub`nҍ'JQU7֨Dn}.xdTnTä~n~ 7Daڍ2jܨEKu7^云CӌB7fa،QGpkTo*lҌ;dn!'nT&ܐcfx3tI^*n}ҳF7HV6[̏~ $`܌&ܨz=HvOUF3UhoCk`2á;ZFڎk!e>tƑ|/ʹun'I݈ogn lѶ ޏsI?cݶ VSn5y (1*7{Lm?Yq=Ot\7.f܈0hF?A 컜t3wcjc7Z5Fa㽿p~ QtC?|9dbۍ%8F Mƚwzj yC 3n[ 3J1Tbۍ<;lag7Qlݚv{A:{VnR37@إσ1j7HWi7h_۩UN U3L1[np>O}7| +7,1\7.ֿ,PÐUK?|_mW Sn̨5C↫B7} S33n>|1v؍]Ʋi?ʹn)pÅuI/=>Cs. %f$X~?.ô6}}b3{ƊϺnD3nXwcGՍȌ:ҳÎB?$frC[nuNf躑97|Fd7XlÁE~väuB 53K7uU݈pn5Nf1E57|_z nvC=7Dt<3ĕ> +76TqcAacgn,th,X֥(cGY3|a 6~ W7^5 nDv.aGp,B_fa âznvÕ}/SU7\>\Tv wuSBxMY:zӾx]k7\]epJy^v 5t>n4ӛRSn àgL v}̏2^vC7 n~qj-`zy)76O`/{uMCTQ nc'\dΧOiKqp~-*5nw<\Ս#ݑrna vQ naÍF`ZU7.3m7fg<8r#2np]]aҏ2n5Ä*^v#=7|o\AHAܠf nlp#F`qFn¤fTtĵ7Hg8pgp񰇗oж cnd^]QՏ~qUݐ{a nǸ67Ŷ!.`sN(kEU70 BqB7|W݈fpե~ f躡Eu7^( j2ntתLuMu7a螮~tÔnQ ߯w1 77snlUw[xpöy%7LF9/hY77Uin7X\aϰ ^Q {p}Y"=(]gqnhdȍ{yvV]ܰ 3^Mv.;7nbHŕ}"Ç.Ha 57\^ jܨKN.8u4ݐq^ܦ[nkE͍+a2nϙr]]a _yz\7n乆in>3nd*vTq`3n8wo(!1ynv1zqk׍n]*FY?뇮8z-̨w6}vC u蜺]e1ra3 Q9)7T• n{G7 *}j̑vc 7HGoR3FpCnm7^tK{i73En}gck ;>UgEUsqC\Q-7d~za zksg37f  -RnFڎ2fv nX{ ތ?%w:7Fd0np&P”F_-HTt#50oōpz\ ҲiʋngO|^y7p7~Fw &Ae(WB{Rt/ı/n =U"7pOӸpoipQO87\\G]H_maT:REn|=S7WnQG7Du[n~=4-fq8m׆:eqᆊ!uqn 翩y;<ƞ8_/tcbɽ &ܐ u$Sf8:v# {`-tCǑ6󆛸rCO7tMt:oME-'Ǹܐڑk oqo7[ g}CmO|ϡ ؍1CnD]n"`uFul["7ޚ_J7xgpVhZŅ(`) 筭g{%ڤwǑv#>7po ]?tpQx+}]=qWnPr3G U?tssChܨZU U[\QdG3l {=3Tx8X߸r#]/l< mQ wnHޏG= ^t nTqo&wFl!ۀ0ǁK 2fTq)FcpAƮh11޳}&og߂46n`oËEnU .~n]#ib7-1N6mG֍/6v#1~u4A#mUύmjp.^:^'=kQ17֨0oUnpxHܟkKزY#ojGm +nԭ=;.Kg8Lϓx7Q5Íת܌z&h`>J 윸]pη5mf05\o|hUY7@5T͉;E)7kTČ O3qcؑYzȹ9//XFXǁ:^fAz7h?|z +7|LɍשI7zv8?k&mF_g>s#eƙpn|F1qFX_і ĦǷfh_fn Y50oxs["3czy0zA*sCV@HאЌo83"7fHs;?P7b3[ fj3Bn _C +FdFt؞i7Yt>ܐ|i1#p躱rFyn 1X5Fҍ~8f UMcx8 G2kHרB37Vb76Rn`hzVp.R:efG7Vł*voR57cEGw?s09s׫0s4+p)4Ue{g '7ykVS 7fp{uR7x; =T֬SS^ϻE3G ̑/w +@Fw֠nH֧0kӎO3G zٸ 13OƼRrp/AGpm~xI:ssޑpnCy}hԩǸ&4͌'f T٬Àɻ'#Fώ#Mwu04!]]J`}f͛5&̀;)7vpw_mpCfG:^Ed`_شYW 3FȳwӟB+ p7k̀;'W978;N^1+fDfG!:^%ou!7kkƍae A }sd֎kU*DžsCdpy)6#)1#vF!9vyn5TJȌ}5 q놞 13OB*k.^3 JTʍ 7X?;2;Up h +%q"梳>Ef Fz{uC^d}L D7:SČc)bܨ_ FzxhAn Q5&ܐp 7r֫| lg Os3Z3s7֣<67yfHF_!ԍ:Źl~DSb7ޯ/mb:{,9|.u8C]mZbAsnvx7|sЅx7A_^вC  Mt#[7d^ A8􂫮7A*vL?Un 4+3I71cxm 4 t8A3 /7gAn7Apc5AF~ @Atyc8+ qմ?8AnP;B +zlu+pAnk A滑燎pA]nDvP+@i ́+n{JCi#4$fVR=7"J`} Y`%~,S|!4эUH7AC'XvFH1U@mK#~ +[WWq>DM$@jN"*$ؓAmC[V̻odN{w[gM6R8ygJL xntA7q֎wmn@vYf+jLH  FP܍> Ơ!L Hߺ_{,HuM{mt4}R7 x/vT"tx¿nKI#fN@݈n7A7wj{^ht_}. _T5<&jrgN@:/]@7trVک֥ gN@U;C-Hiuc;&׿{,Y;i/I/[FgitcB:= P=| ue!5cL HGwu6iFZvi+pN#{m?}F vHǏҏ%m`o ݖf47)-ʿU3}' A9-H2 PU9F_&;ءFZL+҂3}' oTA{ءI Y?[hʭL HYtAc6{ȅ٘bٽg +J!MDx/t"b?m vNyv{q7rogfGZ\u{fDn}fvBrv7;jtLnmtN^`OUgZл z{ogzN3wv5 lFMЙ[G{҈]_^fF7"3 Yp?E=73<-Zq0rXUIkchVW<صKWC 6v#x̓7873TFDpOZѵK2҇ x/Pq^½hv!no|n47geAY{#SWI#2HҌ<d +ץlJ|o@_wLHO@|+D^@L @Uٔ|g"ѵ48YNG/ߐgzr\zq>~)@nK 4/@H逷! +1 Om"; +T.,+4VTkX1k`v,`7h5ňVTLTF4*X&-=9g̲|>geΝ{y(2 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0%%%ZZnEm۶ڷou1ܹsԵkר{ѪjQ>}~EkFԦMgϞv2OS?9z'z*?~OG`e_|TAitQK;biG,]s9b|X>G,#v_CzҌ⻃{'={syx}XK;biG,툟}XK;bi{PRPKSbI,_K?^v%*'n#%"Ni"z[C!iC/=2d` H=:;wn,Q~H,?$~'{o|q#G:xԨQ#?xĉW_tG~H,ĽBDK;v\#XAQF_Wx;ߐ~,/ 3}Ӎb~2xM(kZw-WYex 6{~W.ޟɓ'=~Ҏ'=Ry qzq8T:O +vM7 j <Wk!9MurEΠAhe!UN_V\*m@oϳN/#?S7%ҔtD\nISגmO{ǻ{|UW%}o$s&ףۊu&xgMè5\}:Pݚ#O䁶>紟^ jРAOS_idݮ`ރ F +KR7lcEEŁuee%iq۶m]̊:6q:kh &١UctsF'[vȺQ%-q|Ӎ<{GO{V{Ç9Om:k0 cF-"袋 ԢҏSX3  -[76g'ow'? QZj~AҍԎ_Z_wxkΡ`ޢuc]8F1btcqF~f*&c묳N|ǿXKC|Y1%21 K4nU1*c:裝nn]%zK֍? X{W\q[{(Xo3t֤I +ᇩE\(,*P:zvs`mu1%/}'F]vYͣ'Z裏hs΍zx̙{ョNC曣n)x 7]wub_ޤy'G'pB4vh̘1yѣ;,Rw[G[mU|^馛FC #h 7[(-R8իѺ*>QԩSzH1~G2t_72LLl{]4Rl$Zo 6 0`@G6dh6rKj"Enm${~ǚu]wg?TxAV=k~xtGDɑy<sz)Yjnpڡ~H pES%qb?^kb?Ĭj%;tJZ䏤MdMewG' IW +F$tȺ=}4+8Ҋ5ڞh+Dgac0^H/K}7'6?~|l62z'5b?4c4c߿4\rɓ'̚5+vmѭ͘1#}ڭu|N:5ygG&L=>} Vz^)T)_)[UVFU>V~WVn敺ϕCm\x[{jI=+ܲdȑJ;VRQKJ=UysY9nܸJ=yBoo^1YwT(I}g=Y'BJ֗_Ų6m/~${=k=/[~w#}e狷cm!ҾJS%JtnĝS鯿s? ~ic҉߉J'r eЋ2EŏčuM3A1Stau&NfH/z.͸J=4)͈9{gLw?1k4c̙hF44ҌͥH3I3&빸_N=sۜwsC֌VvZg^jLn9Bct4~ոލya}@aâwhkE+2Pd{ٔj,sl ;j:z\T6 _T6lծYi<<أGrZ\ƥ|3wJ3im15?р}و,=j%2Q\'EF yѽp=4mu:fGcy,jDuݫ|Lb)7ƏLCyb=m4w|umzC@iG,yt3~)H< :`,G?) /Xc=\q>[c ~tu@b qg%ʎތ*q.iAJJt>pn߰|%.㎱lk]b?rxtb+{WJCzQccn&Tzqb]=/)[@o]q(f'͘Y^LjO;bťbiF,m-[nqvk:iӧ*͘&xTK3biBrΣ,IsA3ʤkH3J3?V1U(=:(V14o0%J7lߝ ocC)l Fğ?#km5ӼiXG|*06yui+0`#YE@:Frk%! p7G|VUlӄ3]\zEHvf \]oO7s|O4Xg>zr!|]%}/WtW |8A +]gŊr\qC}~mewKzwq 1^Rijm";zr|_OwnlY~!&mcK78DuW87l4j"9oveg8鄣qι}o o4F8JbϷ~q.?k`fJ/*o[$cbłМXZq>5l{mڴiĢާ}`]hj{~~cu>餓Q5iE,_sS.ϡ&צ=coбA9=WzK/b'ܜS)l 6nhAbnmB+5KvM2G{e;VEЎbܝ\ck8&%^ks}`;MBqs19R[G&8\yqt;fC_C }Fr x_<~o 4!/~J}~vz?y'erX_0 bol?D $D%͠>K^po.h{ٿ(ҿ[W# g%|4l !i +bRο2ew5t ?FO^ܧAt#d7F^ r:(tϯҰw~<<[d=_zwI֝sa"#bTȔMs(d8c`KӍG +o*n$׏lVcD=7h۩c>hA~򳝿|G~tSQ, Mk;bަXrLB.~ W5-8#}:W.E,F炰c ~akyJ~4v_C?É+*/rY߂%a!l+˵I\cYi 7_w5`˜!SlVUϽ:M,y`ÿ57{L+" =#c='oLk?Fo ^-=9Q~-n}0p%FЏHs'ۜ:\@l ʡ|8o9VϿ`qӺA_..161$HP)%{ėEޢy9w Vѱ'w؟=$Ƌhb%Oo_0}x8(xQOzH?gY=@|dg}#訸= ]D|~y?Q7J= +Ѝ󛕴3 s +#1F@~r-uW\]1CNogiz2A`κSwНwqWǧ +sj)q3}|C)Κ 35ڏ?1`4W\j11{š{}b;(W >81YbgF{&ݨuss5N \ma8,>>u?-?[㱚[7غVgb#zFa]G&PG׎u4_&Ϥ+hi׀!NźmӥE;l>`>H5qjl~m!L]ǩlLn^JC]:yZ'V=V`U;΋xB4>?Ugsh?"^s?~|IݤEr.O~IuU#bݻ^u˽Cޭpے K Uy`߳|@_%}MBLB9Tf[mb5fWc+( [E]EġCZ_IQ ԑ+5ZRo+k=]˿u0P|!nZmGPK](qCtC_ӟ?\֔=߇Ի0GwyBϞIW߿O6:Q_C܊9wϣ`Ә@Qj^yZ?f9v{͡CMm.|4^ԍRV[nNCXkP[c 4qRb5؇CAKދ9z t~%[}]}A^Db58묳}YO-8=44\± I +LWw={v܀; [;6uck^ഃm%^=rHb4XZL4{bGH_~,'1ľ^YZ?8|w_HDu1-罆^!u^!3|Sǎwotc{ل(=݄c7F7 +b sM3[*[t쳓|׋>[<`z %Me n<2KEWl^X+U%Ĕw}?ߏj?Lz 7I7k/TD+7(X1 +o\ZT3%NT_yHz=T1>f1m3R{25nD'yb]? @Kt|EX%qͦ}תN:2cZyq@/w*u.Oa *R|kۦ +VHsM#m{ҽBwX7'|r]Moq^?kcJ}JWsM?&9ڋi|^_/* +8Ы3 +NDbT8XH/nw>UZ ~A!ux̿BMA*/Tg{HZ\Ay6"nYg&%sJRk$.hL-5)O |Pc."ϠK~\ZLϾjU?r{1鹽AwuOAP3k7裏^ N7^$^Z>p6 SvɺAl]zj +1+a=kuW=Zk Zy_9p3́|});v,$~{!cnuluA?UT )\b~ [׊MOČ@+?N\D_$& /Fz1Nj_Gi +d0>XGEyNwJ{X\"c +q =*U\k9bC{MT|-sIae:ZYNJe`ט9Fu}u +A%Ӝyeĩ:b=5uuCoVR~WUg8듊Z䷞8qSwr^hA8ݛK/u{WЫuڴi=uѣw9sE~&}^}_BZ6u{y~Nt] BNUl<9|l?4?x{Sp}}P#,A*g9Xŀi@M8U㸆]Hݠb 1/ͭd{K=k367f-sÚW)FUC4lR=csk우o :] +S3S48=۾Xɺ_ϛ{y?"OڎL[*kP[#S}5c|d/74cT/l?y tg#tn_<ƭǏwMK4yEm&uce/2dRg~!_uVW+N7Vv~E$-35k.`oPof5خ&s{󔎥$u#)&忕ژZb'AA9ٸAcƌYD^9 !>&nQ9;2v,%YOr 9a=_.*T qC.XE#wbY{P[T81kTdڷTӍrZ~_u:/y\6iR=B+> VTTTi^M?ưwsƭޠݥΘ1#f]՟͕t]5Y'%L-hn5ٲ5|,&랯?+n^+R>LwHCRWS91Ϥ0. Kթ6n:z]:{ r~T+n%3f*F^: +n4Ѭ^_ꞗH3$zyqjsK;sX]XcK6JcbpQ!?cw1Y|2s@gVQh&y|nH+>rDJ_Ū>Æ_K}B25\ęguRꏸ7jgo0+C76 B~cŲ\s6C7[ӽn|u{SrkJX^"@m5aմ>she~A-[V)&QmkNݘ9smH;ķUS_I|`ԬN|MZG!oyd>#|hSΝ)b~CK\(w5mjA| 1=\n׎eC:?k{;#}+dC\^8.k87_ŵ{d ;fAt#C^9 U0g-` K_Zk<uC~Fq;u׮ 1B_5t ɋ~l4ľAk 0-9Y*Yn9L cT?\q5 CL./J~㦛nOv5^e]79qb~9۾WYVC;Ἱ,F'k*S9PT=ۮRMc$-ѵ\o֬YY?=&ך]Ә1 ۷)i] GSC*_`.TBx`k1*B-[ؖ_gX@l׎ٜu+_|U^;؇cK]W&OUinYM^! brѴiЏ+Kn/6įl~]0٠N7۫.5?9_$/9g*3 b~ >ko~D f!Jeb|u]Ik2$N7REL7Vn''>$9 zB|zzMM|Z2gv̑Z:?n wv(>Ue5*kŨ#i[w7#=fٛ/'$b W`9w2UI]vEMӟ\uUŏ{W$yGyb|k rEڱc֭IC0vbeF[˯|" x=b|QL&MUl&M لDxr=h -wYj]\z.o o t{o>*uoqӍ8xu#1YtDrІEe>X=;>ֳ!fՒ@uWFT3 D7_}Ց%Ґ1Ґo1~_gUqgsA-ߑG˦Ɗ"(0u]Ivnb䘩{ѣ;餓֥C5J+J؜=sCVm~O Ti׷Ytc=7%.֭KyF4Ƥŗ?g >~Z6ơG76L~7*_u=C֠E醯__A7|/#F`, +׿PA1BK?'֭>,89$ }6~;FsE v8ŇfL2e74<9|NP.|8b7.#6U7LndGǕ|//>۲Wli#ceUܴҎ+ݨh) K]x%XP똯n/e]ϓ&Mr!ۺ4ҐX;.\gy-K/MycRC+|tfkGdBR_ez]Sa}GEC{z?Wo#絛&Vk'> OBnЍo$p09Ϙ|Y{jog"׸s_JPq/ڼ-x^܁P7pB99uo:7HXEȉ8VƂ"37ɸ6qԩBlr!QS7ڥ갖EԷ;ݏ$1<rv̗v֕?=hԨQg*Z!wq1\&PC/ jV 4N:JN?GDQ"((~H?J%ҏ /TJQ +O*LX t5 +I?&BCTl(;Z,7ljAwXLn86?!&G| Gu‘4qU Ʌ7 ~!!z{4=MsWO_pl/+1%S03iJ? '1HbwߋT;G1I+VҌVҌVҌVVҌҌ=콏u TIӚ% h:kVXI~>[ףUMKڷ\\_pU_s/{5ٯr"S )]rэS5XZ7xNv$AI }HvYڱmsQ~rڰ/+^`_g=\Q TIQ(_j M"0D6blٌ!ҏ!ҏ!s ǶҏQҏoI?bٝZ,#UZp$_C-Yu1+r+ZX8[v{xx⯥+KZ^(?-Gks꘡Iڂ Uc~ȩJp~]gçt/]mAߒ>[1N8w l =+n?"`pҖaq.PQ:iuS e\ƑT\=iF4_y̛ |Ҍۥh'u#fP~c=1#ڰ`Rr?.f5 , j4k:_Ծ5/:.K|g䯙W<ߗ~/s%ϋGd% +K'.PEԸ%ׇbY!X&FWiDZ*Z /a_ގd"/R4vإ5&6Ԍ?FF6FFQ#~,~|)Oo4q__>I;Y5p1`__AiJ7hL@:oVG#{҈#Ş^#\ 3NtWMZ|wA]cņ^E+}ͥGI/I/><=zGCbzYD$=53K~Ta >~WҌ_I3f|-͠o ]ܿtGMSo3ϋRLO gZ9%cׯ/!?d vh7\>pOI_mDz^Sx %n>f:؜Bثob߇/9Lf |ĺ8f=\7c:~>{z>Q=g;YԈغkL=$.VlF1@ '7UF@暁fNO %}㼯/"}G?mCR~h7c\bɗcðwy$r3"ZsecA7"]a.q_3%sa69d{g-υ^ u~bYv7~,s3|6~=ӇWޒF{,k ?-@ra[%9){9zO +~f~9z +-|'#ʐWqą||\ _54Ü7uܐYc2˜뗭謗;޳-Lvjq0G4zP/\::P1ݎ3~q?Ua|Qًf؊9F uDԛN:U;33A&~~>k{ +{8_4õ%awwq]?nj&:}Flmbzlq\vnu[M/kf?qw64uˆ^~o v>6'Q}ﰅ]?K۞~10ZzszVo+79X0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 jT +àS_U|! +1 Om"|/ +]U=~[zIr !CB!)> ņTQAQbJc<߼9& rgUXUT-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[Җ-miK[ҖX[paVΝd޼yAϟdY_hQV/^%KdeҥA-[dA? +VrG\2ȑGYjժ W.ZfMk[.6l䨣 +rGٸqcc9&+6mʱ͛7;d˖-Y9ɉ'-miRHq#miK[RH퍴-miZ֭Ҷm mڴ):蠃ڵ+j߾}Qǎ:uTԹs ]v-֭[Q݋zQԳgϢ^zݻo߾E+߿ѡZ4pA |g0dرAbXxX8B h4ء Q4~FҖAI&A5jT԰aq+#Z +6≵M>(t%-FӧOo(fvː!CP;~Q̱vb(ėYfQo6QD1v 1#-m_x+XxA_~QzOJ )(X;E1J [ _/A1 bL`M1bM`N10S )k3bK1/Ob*R Qߖh0G+ōKG*1(Č:uխ[7BXQ,xbmcS) b`JJ10%pbEqE1 l#(mb1vIa+~Xj٥-mi[EtwB\/j׮#!*IXbXXxxR < 0L)OJ%%H pDqcE +B;bb!ĐboX eПE_JRXրİ#miK>LpKTSč$!#GV!GJ(`H`H`H 0$/~;J`?J%%bbҸ?4nC}W{JciK[>KRY55k,UV!V,YPJ( R +$XR + )CJ!R`H)Q +(~?J?`?J%?J%8g0߲qu?4nW;\,{(PRH[>O}AR,ㇵT+;<~$H1QNCJ(RGV!2`H`H Q(v;ʀeAʀe2`G2`Gb|WR`G)bbG ?J?;Ҝ,k(voEИ%iK[>ǫ$H +JubO +/Ev~EՋjԨb` +K)5RTL < , + + + + + + ۣ + + +l**{T~?ʀe=ʀe=JR%I8 ?Jk 5v@hwwVnVjO$91\AQO_~{ VJHHHHUj"(#XVk?j?jc~ƚ 쨍5X Q G-`G-`G-`GMњ=j`vۣ::s5`G5=?U˰(5G{RQOQQ兩FfcD"*!Y/zm/Gbam8vT_Q qRDT RE:&SRR8RQQQQQQG=`G]uuuuu෪쨍uZQQ Q GMGM`G `G `GuՉj+ v`QJۃ؁fIRޮ]qߪV6^n)g0Y&zrP߿}ݻglID̞vj?~PK +qEc1Xz6/h[ +rж w [6ȕ$;Cm -R‷: P_HCF׊^NJ~G(ԊG>KjxRDT +*:&6.>OHC +S#H#FFXg! X ;hUvz쨇[QQktmk?jb_GU(~؇,NJS.G9娢Q]7yԝ?Dcy'3窙Լ%b>ŅzObȯP"N?X8ANb9+F șWe> jӧϽ%ab@cHHSfyDT>׳F^(2cb#%" U U iiiS`-5`]5~4khhuk) ecc6v4zmhk>t}`G=XukcvԂ ]Pz:Cl*w˻S޲:+I::I?+Wձԯ/pM=$|=%|βŋB5PB1Cj_0A̠A5rM |cI0>(#!- -EZAZV,XlQ,Q ?6qJDJ!mՍQmDư +5Uk`HkVXsZouv Z`m6 ~f[5mhh hukz}G=!?}H l1>W^WnG^ϫ}@]$)@O[z_ _劦5Ocm ăRu#T(Fii i'>Au|\C% kc;_6 IIQO4~ uLkimmN;`uk5w+VX--C4>tCS& ?Cԃ> U$QfrwCm91 Y1וWQο:vM̈y?E^/{% _WWsw'#I%+\b#\$&4ɃF>4r+7!7 X:V!.wټA/ݰ?{_&L'ttt"وw3'ő?ۣ"Q`+LnH +y"k?}Sո*Vk1)2Aܙ#ȓF 12O9s!G,1T*Xz C]U>+-_S=Y8eŐ|O%a ^t~"c0;vXݰna wzu~!X:Bt^8z=E{vmG@~i]9tV~h DLGp_emkSx:Zc{H^6Hݛ~bxAl3O3,8#)y{/ק]@[xAz^y'@aR#|rg+ȃȑFrߐ@ #V?_4EB +ݓ*VPDG^_EED1+xJS8b[95jJ3ZJ_q1.c[ƧoZuywaw +]z l/KAW>ڴjiCb %9X55U_"&ʟH,|){8}܌r7>,' ¿ g؋fqsHZ },fоPȵ/AWFʣX=E5`*lGμ@6rk]H3vX싵 z'AO=+Cot] RgC:?:=b1p0sxMHuCW2r(BU=[׌]bH$0 +2R+|*)同ab3c6z#Y(o&y41'J7eTY_z?yrxOuPpH'#䵡9poSG=8QÏ\ܻnl jn|S31 aOpDaR???~ }BG:7tQ/褞M=?Bd0Rzp2F,ãXN߳8zBNF!޾1Bs3/X pL;L{g,g[wsUO"fXP]H +^+|gKFe1X`bI>`ExSGoV(A^nYŐe!G@1ZWBVgb,,,`QB/Z=̳Q0`oڵ WZ#X~ᇯX|JȪe˖V߫*ȕhxk֬9|ݺuqeG}R\o͛oܸq2sܹN:>I?C>To`q;C 9:BOj\^H#` ]LȇU XRUx=Gdq@u-DE_{Bf{S}DgK";BsEE_'WyOfb<]zÃYN:Ey1?#ʛYEEú |7lXUYk|؅bKe^@^\'olř=!?AA02 W,9`.f03yQn'n#G7qGߊXPU]oklݺu<?yG3w3?3>l?q<^x!/f~ӟf~?'?I5/yW23'?w}n۶m̙3"F<~(l tǡ~!EC0"k!-XzBH}H]§xUڽD+V^ +{D߃Tߘ8 +m33} +^d8H3ׂU}Z 6 y[<{pl.EcTB}$ardE2ə  naMWf]j!mߟkӹxc!E!JOȾCG!;7 +؁>3;ڊ_:dz*Ogy晀%ĉ|0"pҥK3+VȜq:/̫~R%o&\۷o 5c727@l>_ ݀%!A5" X)5 .|Az}j[sS+RH>U8bp$`bbh'^(N\E!0FLz gx[^ke8 *Ooi~3 A*z>~\.XwLuX$1qE q~\& ( Wb n@/۱+x|wؑo~6k{rĉ3 #Cҟa\q.Nk!ZB3K>wbunv?.:jBfkO?"=g!*"fQ{{'.ЎRL ߭}zzY̓ } 1 gn-y]D_/C05-Hmbǂ:xOSȇVQs<عd!{By$ut֊pҟ&8-ŌA`td'~79r"d 8ȱQz#댬X n5?*7Lq'~׬$[ȇFk%N'qmg3!Bv־} +22O~3AB&8-cLJݞ~ˌ7.s7*v=2vEi5 22d_HOs{;ACۤt]cgc=`HtW#_GF(&^ +K\Ñ,X5`P+#jCS0.9+x>GsԶX6._RNj+R" 7f9(x/cNO>l# $C=}r]7n?nyes]pǪR̠&D s!!3o2YA?Ft(ee`+/9Vh+q%Z>\1| WPܰ1fO{P쟂5n[O:̠9Em\ċ% #A^Sۃ6̴iӂOKmȧc] 522^ tnk9HC(; +:6_Ck' u;uJ=2N$P* BFme3TjPB<ף_X\xﳞH]%b.fol.i3я]u1nz1k҈Ƥ +Sv:2;>Ig@TvV? \*}MRW[+{"EWL=XVIq<Dzs/4dA:Owqus&IRpsGb(n47Yr8$~_%`t#1]1vKg͛ ~ ]c! ݃  r%y!׽>}Wу]0Bp8QB2i$p|oӂ'G,X VQ+75x-\XЈBa/V,1zj/bj-eZZ\EgW 1VY.׵$ܤ.;ޮs bXs/O+b}^s5I ++ܱ "NqcѢ3!nܛ7΁,7=cDxPj 7lMGUaRUvV76qhCmGN<HY1 )ɹ?ىc|e%v̐ۛ똃19  `H֧Cu#?= `IKwosAx&tc}pubsy!?Jj +ڌ}!M)xO:CO++b=|/?5&Ih cA \*V?,-#` +GaA}HT̨̨.G\x+‡k=Vc~Dl_wL ?N$.>lj r1FT],co+Y SpcBE/r(%[h䒤.O}ӧϥ֭9eʔ m }tnL0H{+#5_qoxd?/~}~7ȵ|,6R/N<9z~۽9 +:ǁ4bu'ޜ@iY ܾނ43=r"# XagV,`%H$!ﱅOטG0>0>p>>0pwZV:v~ t׏T>vu+jEbbߗԿ1K*>757 +=n >+1o߾;֯_sԩ7hg73)[' m,v O5sUWe^z}̻կ~njeaF%9tc3INQ)N|ېzB$i i9Hu+"w]B ~1m?{?6 anJ; +V ?K>{= =E^cFqʓtX$xn$R ]Gbtzl 1v]嚮LY^>鈉Kbyc?{m>q8G 7&%p0ܞ+/+O##ۏa\g#{UIa7b9n]6m3pamI 7ce9KF{';ֱ?lٲ ;c9xצq0-VG~l ] 'N&=`Nœ_/rj~~v1E6KB۠%>ZG0QSt$1|.C7h6b|ycS].}]'%+\W*\ܥǮIőbI@c= q݊_{>[ꝃk?;&#z8$U DBp|YTAxa.6StrX3BߴƘB?c;OǞwU88L$mj1Dי߯qfPl|L?/?5ʊ}qz>rbzmbIVCކ<$|&(q[,8;3$ylisxhh7l>gp9N;V^s nP72 ֏(״f.:Uu`ȑ#3G|_ &ȷhvҼk)󤰏=I +ĉrw Y[H^HO^|қkIz@ ~H϶u 'X6m(|GwI]~_{;=']wO~}=Xѱo4ak#1&z~ ' :t ]Z' 3W:kBO7I8mQZ'`9*OUV4iR7XA?Sh\CZnA}d5wcwfk ;uAQf֬YY#Տ~?Ȝ"尣p],.Нal\8A~^=C77sYn-_׏[\8%G}~ #//Ԕ`] :3,Y(8KŊ.݉IG1 ig}oq8 +8K/tI'46ڴnݺ 3>(-O/::c~[GS]7y2#Xg(c>jԨYȷXw)p駟rie˖͋/^}tu 8pӧ]| &Ls|Faܹ|ǜσusJEvύ93c?*|*ox ṗisGa>_:ev3>]`%c.u=zـzl=; :kAѣ ̵C]>|X˰^6vإߋ!`ƌ̙32Mi"Q=7/}T3zpXa -Z=TƦxo0:TqyK /d6l^d+ckYRԙW8ϟ?E]מ{^|_K>Gn$O#WxK.vd>{@_6bmRxM"7>}:.[< |E0OR7mg?}'ַճ:HD)! }ѿ=1<1f'{<짰F63"Wqwmn|?mO~;ր"^6p +z$#fٖ!O|Gy0hǹ{_c{7n܁ {.b C,X'{.Ydɝ!C޸јӡO"<]ݥKvF^ĸ/1d7^6K_r]=w<c >hBp=pwĆ_J!37ex?;|ō g}XW>9I4sc `DРnc`,C^OϞ=3g 9ؓ /FGXB|y1BW93أe ?`FD[A*W^Un40T=ntpR,n~"Ɠf&X?᜖OC#f.;O|`f+v 65tg?9 ?PXc;5G| IfSO u +܌ov'3\ĚD@U5HW|?BXKw&" 8M07G.c ;U,{ +svYV#v2lk]}տ ʱ--/5O'#;6/]boa5uqӇ/Cq?ˡ+NmvCQPPPpL^ż_&m20 QOuTٚFtmJm?0޴8:ddl|뫂r'/>ޡ_Jq8TxC~)\&d7^ y`O ~@f |x'GWBއ;s̠! {:}[+:|Íz ճWq!W70nOE\e>)&IcN2>f-=X/??|?m +u# |5w/ %֙3 :o`(|:7 +b%wAvB~<9d'C uu[oE^?&uyv{!#Ezw$>$A@B' 9>>WxoR[w!#'%tt8>m.x_k9"h _M3C߮?>s}˃>G>{lڴ)s}eЏ9dNQgX\+"#?]Ōw<N};`ccpoi>9ykg~ sm7E]s=ndd,σ_3_Ѻq[{9br3dbb[98C5鞕¯5p2Yn K)?|(װ`gLGeqf7gpc7!Ԍ?be*c%/Y9uG ^&F9+\3ḟڻG,?M7gzqН#K_~巘o{A\5 G^}6F/ȃ}WkpRͼ4Ϲ.1 wEYp(p쵾٣g6 \o wxcYNg^9|+ڟrv7vG_'] j8<n<;/ +㫲z`J_9<q kk\+6f|-_q׭4Ib#KE7j!n$7Gpc:v?>wU7&squx}W/˧*^w>XwU~|a߆=>~mjHQ=XӱW?-erΥ=(:Ipiq^5E Cq/s]yCp}Pƕ!!# Nu#`5=wQ ?G֭[A?܉'c86!DqsAp*:=C@j6ߖB: m`?+M +Kd 9t S=˽+>4Gc|_~7!Pvk#q΃pĸF,ntt<7+n0.p yn> ت'916@_\.^_;8ܠ{߀E ~[*(*꧟*םfNs=S[|$\,sڈ|:^D<6̛Yp|0Ǫqh[ۯ>W_M]𽿍yr4K`7+n5YLbd2G_71D7z=gSVKyo=fYmC9n3uٗ/;A]xsy2_sRg}ߋ^ }2ۜvF3:@k[ZܸXG&cugonp龖[{5Z㴊cd/b zBoKc r@zr$ߗ(y{#W\|pq7&T% Aa6Oc⃌ٺ(Zs8VD?->AQ  Y7:o՗~bVg,{,:w|F?gHH-doXo+_9؟WJv?m{7x]\O& y-n1C?#̻9'_]l9(>+ͼ?է8|~'!+x[e5{But<;[c0%:ݮD8!+ٚ)+f|ϫOc?2aR9tb'!ϴ]}Uf:؜;n&}u/5j7 ]- 9'WJƤuobou"=ysħ/4{ӹ9pcfD}#x+;glu^] D9G]}sče*[9 f+7^[z˾WϠ/\%ٱe>Ay?t:%?t;]Yc̝<9Z _W(z!-Z`A\갗Bc㰽7&~Q-׳yܖQ{_i ϸ9(?=PX,Gm +L_ u)?uimv]C~ y/dܶm2{I/ߏM[[o '[ڸY~9Z]Yϧv,Vc"7E Y}qcbX(&ᆷ7{_ȡO611C>V7{bT|p?}) >jc8+ Ǽ9`n셯1^.vpnc.9_ܵ8n+#7q's kƯi9k,[kyM}UM^;ԟ7};X,f='6}vi:K{c$ov9n!2pQGN  wBNpfѢE:/x2!gk-?(w"qcqlE`ǖ-[.Ϣ~UR̘lې.k1.m_#5+s-x /kO:Ǯy<n }=)!?[1C&7w?1=w7kȍ2k"|Keܛgś+{ QGqxѝdm+,ވVx <'? QgN<7Yg?2z6S獯sG;vC>7>;옟7_Ԃ?-v{\㯡uYT1}94>TOgMagþuA]un |:i䏐e&Ŏ< 7ho`O1dM&.qPy[cߞ19#c>{ɒ%o/G>{A:G)~W[ng nsE`ν1jōY 6Ǽk濁!8a_ VX~ +ꤓN9vl-4'hXv!o6/2"1|@~^S)nH܉;z}xc_7yaFp&saX=v_Scuϛ1[m+WJn&ѩ]̖]trg/DpßBt'+>lLk$_uMqb{46*)*q@p1&k"sĽޝ={v7plKV: +o95I) 8|jw-nw1_`]"Í +xq@Y_ao5.7Ok^WやōXmg;+sԶ)n_ܸW8ّSpc@$&n9Y^)OS@/hs_=0j-L;7v\B\۴n7 ۑSsƌ~"pcqPoBwxn-l!>B G +Rw?H8&#;n>.߰aÎ>zƍ/޴iE7oN8\ +sTs1g"q +䐺9ewȭgpoNY7b.3:p/ǣ^3T8ԉbOѭOGe on|\m_x{hy27^n͕m "nnG_=(7V7f7NeBn\nj]tsM`m򌿛#.nɧ϶r:ec)G/א~յ^۶ 'MZq|!n6 +.FUi^ +u]@-r):%&?V[YNcֈ[P9` 9+G'%S%}| ܀,t =⾜?c'7 ~D[n%|B:葻^$#L烙 J^7?c|UlqVqyX\9cG֯R3Oߡ.5X>9g/@ػ~.9ҊL/ٺSKQܠ9_MKFohpیG[ܘXn˧ʵn,NaSݮ5V7|^5%5 7f| OW +l{#&qCCs{8_ͫ|XǞ\Fom-S>hPUQ<\ mr@Woڲd8=KQylUl tbG7c1`" >?t;K[TxHeyhFEr$wdӳZP_ zG>c Ǐ`lئ`-f<,\ߧ2N8p=n\&\|}Tc%Ʒ?'hpßsqCpmxM6Ms{m,Jc7l(HV}.s'y{?;FnʿekT7x;O3qmRIu~CmGGl[>ܘp*ZXZsfu,,f*e&!=nq,;7/'ʇ;sYs\F9?Ni[."coX~*3ֺ?_aύ +qQG}{ nP쵑b Yx'E9_7kM|Cˤ>r׉X;ry vNw1n#hqW^ō;|:O M>}s]7@ܘopF$Q(P_ xb̈CƼ'[35jy֣'$n߷Y69;dؚHA ճ6}cy2m 4c <nL0c>01"Z[ßc,kIwbgu[F[{33pf t;wfB< Sn$֥Cd.,5Si~Nk݌,'iv׭!9X1e=;'~YGeExO!}Ϟ#ay5s1ufc:1Ea[}Vه|FsB؎CM,"{vk1 ԃpwFmQBT H07y nH:wڞ]2:[ InL C4qtN<qd2?SC*k$ 7Sō6W}h¹ZhkJظߟw3qdOFӝU8OkS+iz=~S)x^ +~lQКbD_*nfBs0>Y )>d\Yo7 =Sy{#ǹB:q .㩸sgkF;zj_6inxd6=8lEP<+7˽&թ[1oG& gW@o$۹tεpW7,s]b7M7q:Q`VYъ}Mٳ-nYM܆46b'`kͣ [Ra^ظ%ݟk<@7U"*)R/6mN17)mNo︈ W\/~Q +a$A; yR3]jOnrBj&=+"'K#,9zEým{?U7 0t<\qЩ#gڹ*k vFf(n(v$G3174>z"nSk]gxQ`nsr!>#\ͩG|>{~yUE +90R;Lݜ]3uX󩲸9}+ y?73gzqgy>\}ō\"NxGgy>Hރ{qfg1X'oa6>SG‹WnJ bɅޗq#{>_ayȔ[9fqzEp+eiB>Wn6gt+C?<raUC>"ɊH߽JmSYܨpV7b3nv`ϿF3OE-6duiپ}wygFh՟#t߳\FxC>u3wnѢ^_-7|ŌyҊ<(/қ}ޛzZ{U*y +>S蟀]S3ֈO8槮$wg` b0ر0&v4uFz힎<0o;g>9tr-w೭9sxu݌g<Ο$k]7a`km2~fnܰP^[d]D h[LV?,bșG~_6?= /I{fߕ9TzT"/*yȵ 69?|g([sMGWυ8Bwq<(L?ՍFT)ׁ|"ƶ[l@g:yp#$nh.[qc㧚5 p>#;_?3.kqp# +Glc)]'NOÉy)YR_|WDw-3~5r^ cC~NbyUynԖ4u9rE7ɸvjVpCs%4Zsc?yUvx\l3ۇpjbXSܠ~pcȐ!{s.c5D>i +[mß]msvf,TqҼGo_T̟]WK? }/P^óv C+R}p{P_U8_APB58&qZWpݑ32~'tHu<'֞~֖]UWL<[]26KO1Y{mv1Uy-=?V8s-ggE˓c7Z;M ݰɝUk"OZX7מ4XXcg)?wr箺:FQ{^f~rts1.\jֱ"*ōW|&6=q׌oOx⫝̸SȁG߃o7݉:+aõg ϟ+wpF̧ZQ܈n8,b_tawgǠpj{wL;k>ۻ`3}U>>n9k9y:y:>k9Gz9< nÅ_\{F>y9_!ǵ^ ha:'m\ΫvxW|l:6}}-}?T3~p7g晿GeΪGTYEbNű m"RJ؏O( p|67b{D^K!F|s1z#"F 72nT&.n/[1߀&WZewq=Cr=ҧžo$zz1sݺ)V$>Zaq.~*cv@/Wq,nbK琻k;c.xay1cK4~E9֮];2^zX|Y#n< hbh2 3O[(J:cLDN3nPo2?ώċc:{ҿpr{ldClsU/.fR$NƝ>MKQQ?g!%S97pUܐFmء*NqB;yzf=1ˡ9ƙx9Zgt6N+amqrrO&VS%}uѱݳֵjƎb}QX|ît?CğbpA7x{w[sRxE>c=/c9]CT7ٯf)>;q3o.S$=ۍe~so@~WEB>UQ3_s5?ހ +; /:s6rAD5q=upEߓdxr:uBܸH 3?(8Zw%duLO^6Gt_$/[}ޖFcs*˟sb>uO}{!ca9&>~}#5X8F`ZG)1+W/B|ݖFyHKyر.yr7^@ܰT"~l իW=e=Rܠkބmoir :tÏĞo%gy~f۶mr\eZuˀkkil/Cc+@n;vxF^m?餓#p K.۱z}0c\(tG=}y~=8bZG z7&'`FV0.a܆Jge-d'׾=>_/CnoI-16nfeQm4}hl$}Fbx/شXg{z7b>\UzW>`sx3p,=}#]uF9+xrRfS߇$^SF&v.X1F9_ll}躵ku|X8#vs(47bx1Jj1^r︋g"@.65ǜSwbs9l}(u1:{1߲ +25QYܰuOX +q+^@,>b&8M6F͛7ڲe.[wr)nݺ :wt.엩>f|p}{|.W|vs%c9cQ[[hOX˃O5~||B|ej#xV2z9LS\1g|nžXbٽ-f +{o^ur5{x Xq/}oYtis`7?1Ĝ:{y`S[OŎ\qEY*1M1|~g yekQ~*߃?߉h66ux|ȣϖ_&"~ @h1_&H6{M}bwR쩹>;V?Go}Ys'?{OJ,j>6$+\,0aDݦƺ5Nx} ..SZ<#zF){>7|"Gl 7BA r\)BƳ~U|z#]g:٢ky*ϤopVlD! K;: lUW]wwa<C>6eޅrߓјHy΅^S7צ!r>Q.̡?p0d~(vJa񦆕ؽk$*R4YWRpv|ͲGj,v]v 8F|xyTozfkV̑zC%γ:r +?geCx őao9Jdh̙s+cM~{~и W_UW+Oj^7%Mَ2cp/3Ub7s <@j 30+x!6~q&j:G< e3ޞK,롣k +{s[sj׮QߪQGD*Jb# gXM<ϝ?^<'q+#KlUͣ\z_0}QVaG9&]cKum5M2\ߊ?5>#{:m.||K{$s$z\}\/i:^P4&㨊oj 1&ʞס??v>W̽/{spʟ8Ob k{Bɢ#xf]&CٗI8ww{a6DYԿ[ħM9I0LȄ>M׊a5;]jkԖmE}~Z1|&Ži%_&)Iҷg h YmY6-=羍z`gHΉ9wbgŮ3d笮\zgacE6?SLxkg\ȥ-YP_~c4okxUzBm[М$;t|F=QPl[#9M޿8q9ֱe|Os -ߊ#IE>(i{cǶy[5~/ZC5etQ?;1\.^|7j+V'$C5b1^9:.Ix`ce5cvw -?ڗ:K!gz g}?{|pLרGsbanMwsU3}lHS\k{v̱/opz=Nm"zwsPL`[6sڏjg$3j̃m"cj}"zz>!~o;~-cs_?}t&^C<ׄo/i(fs^QLѴ?b8bqޫ]ϭ#axx>.͡ױ{_;~=*wֻSֶE6½_#SUCl<ҽw#}Uux+gO9%b$̈5bgsİz߰{BsOYo[Ԏ3-~O]Ӄ9s /JBPҚȅI=+f%݋׶_amjr?oc6?3$b}C?^OG ٽ$|Kxa>Tؘ,-d߽:bZ R+=ιqP4`'d0p/ ARUusKJկÿgѨOG>?[^ol P~g3͝lWf|,mT۬?{lcί׶w^{Guawҟ՘>yU+ͭv_~Xg(5#bvؾkU}w!~_vⷠ/zTFE/Bnt5/W!6q ̈́Mw/IW[?ÿ/z%ƣVʗ^H{߇s+]9ѹ/y+Y^jZ5ފ=Fԛ]~;eu7"JƬ~LYEwj֮L?^>'}ǂM3ξCqkپ׏Ο^4qF$;_f͹2ӹ3-nfi ?Ge_Z:ȭf|rcR;"]1SKu&n_/".gZ?-4ʝZWC|N)dޞM]\g7>n3vȧJߙ]lGwvߪSΆ_{w6d6zgbQ9&%뱫^UՈ|5ҮVxMY$/&vg^-z7ivWY+u1ob{vuƈ|OwH#oTzN:=tsLW>U_^,\d5Fj?{zҕnҚlJNOH~=>!YN)q kGV?sW5v=?ƶ'QWzU:^Vɳ'꼪z,תޭ뱫{#GT_d{ik)ߡjݫ*_TyUce:2kŷSFj;]7זt3O\( Ju{S=˭iPjG~3Z=c)cjWjH5_}e$tLc Z~|9Y4D/;|ԡ_T{̯UNֿN\YQީUgw=Sg,TC֪Gͽv^=&v+cG_Qړ+ugh s'/&Y=Wk4_( preferredAluminumOre; + public final ConfigValue preferredCobaltOre; + public final ConfigValue preferredSilverOre; + public final ConfigValue preferredLeadOre; + public final ConfigValue preferredPlatinumOre; + public final ConfigValue preferredNickelOre; + public final ConfigValue preferredUraniumOre; + public final ConfigValue preferredOsmiumOre; + public final ConfigValue preferredTinOre; + public final ConfigValue preferredZincOre; + public final ConfigValue preferredIridiumOre; + + public Common(ForgeConfigSpec.Builder builder) { + // Preferred items + builder.comment("Common configuration for Ex Deorum").push("common"); + + builder.comment("For recipes automatically added by Ex Deorum for other mods, some mods may add two of the same item (ex. Tin Ore). When Ex Deorum adds a recipe for those kinds of items, you may choose which item of the two (or more) is chosen as the crafting result.").push("preferred_tag_items"); + + var airId = new ResourceLocation("air"); + + this.preferredAluminumOre = preferredOreConfig(builder, "aluminum_ore", airId); + this.preferredCobaltOre = preferredOreConfig(builder, "cobalt_ore", new ResourceLocation(ModIds.TINKERS_CONSTRUCT, "cobalt_ore")); + this.preferredSilverOre = preferredOreConfig(builder, "silver_ore", airId); + this.preferredLeadOre = preferredOreConfig(builder, "lead_ore", airId); + this.preferredPlatinumOre = preferredOreConfig(builder, "platinum_ore", airId); + this.preferredNickelOre = preferredOreConfig(builder, "nickel_ore", airId); + this.preferredUraniumOre = preferredOreConfig(builder, "uranium_ore", airId); + this.preferredOsmiumOre = preferredOreConfig(builder, "osmium_ore", airId); + this.preferredTinOre = preferredOreConfig(builder, "tin_ore", airId); + this.preferredZincOre = preferredOreConfig(builder, "zinc_ore", airId); + this.preferredIridiumOre = preferredOreConfig(builder, "iridium_ore", airId); + + builder.pop(2); + } + } + public static class Server { public final BooleanValue startingTorch; public final BooleanValue startingWateringCan; @@ -55,19 +99,6 @@ public class EConfig { public final BooleanValue witchWaterNetherrackGenerator; public final BooleanValue setVoidWorldAsDefault; - // todo preferred ores - //public final ConfigValue preferredAluminumOre; - //public final ConfigValue preferredSilverOre; - //public final ConfigValue preferredLeadOre; - //public final ConfigValue preferredNickelOre; - //public final ConfigValue preferredUraniumOre; - //public final ConfigValue preferredOsmiumOre; - //public final ConfigValue preferredTinOre; - //public final ConfigValue preferredZincOre; - //public final ConfigValue preferredCobaltOre; - //public final ConfigValue preferredIridiumOre; - - public Server(ForgeConfigSpec.Builder builder) { builder.comment("Server configuration for Ex Deorum").push("server"); @@ -90,28 +121,32 @@ public class EConfig { .comment("Whether the Void World type is used by default in the \"server.properties\" file when creating a server.") .define("set_void_world_as_default", true); - // Preferred ore items - //builder.push("preferred_tag_items"); - - //this.preferredTinOre = builder - // .comment("The ID of the item to use for Ex Deorum recipes that craft into tin ore.") - // .define("preferred_tin_ore", (ResourceLocation) null); - - //builder.pop(); builder.pop(); } } + @SuppressWarnings("deprecation") + private static ConfigValue preferredOreConfig(ForgeConfigSpec.Builder builder, String name, ResourceLocation defaultId) { + return builder + .comment("The ID of the item to use for Ex Deorum recipes that craft into " + WordUtils.capitalize(name.replace('_', ' ')) + ". Leave as air for default preference, which chooses alphabetically by mod name.") + .define("preferred_" + name, defaultId); + } + static { - { - Pair specPair = new ForgeConfigSpec.Builder().configure(Server::new); - SERVER = specPair.getLeft(); - SERVER_SPEC = specPair.getRight(); - } { Pair specPair = new ForgeConfigSpec.Builder().configure(Client::new); CLIENT = specPair.getLeft(); CLIENT_SPEC = specPair.getRight(); } + { + Pair specPair = new ForgeConfigSpec.Builder().configure(Common::new); + COMMON = specPair.getLeft(); + COMMON_SPEC = specPair.getRight(); + } + { + Pair specPair = new ForgeConfigSpec.Builder().configure(Server::new); + SERVER = specPair.getLeft(); + SERVER_SPEC = specPair.getRight(); + } } } diff --git a/src/main/java/thedarkcolour/exdeorum/item/GrassSpreaderItem.java b/src/main/java/thedarkcolour/exdeorum/item/GrassSpreaderItem.java index 9838ee51..75aa8584 100644 --- a/src/main/java/thedarkcolour/exdeorum/item/GrassSpreaderItem.java +++ b/src/main/java/thedarkcolour/exdeorum/item/GrassSpreaderItem.java @@ -18,13 +18,23 @@ package thedarkcolour.exdeorum.item; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.tags.BlockTags; +import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.animal.MushroomCow; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.block.state.BlockState; +import thedarkcolour.exdeorum.registry.EItems; import java.util.function.Supplier; @@ -65,6 +75,39 @@ public class GrassSpreaderItem extends Item { return InteractionResult.PASS; } + @Override + public InteractionResult interactLivingEntity(ItemStack stack, Player player, LivingEntity target, InteractionHand pUsedHand) { + if (stack.getItem() == EItems.MYCELIUM_SPORES.get() && target instanceof Cow cow) { + var mushroomCow = EntityType.MOOSHROOM.create(cow.level()); + + if (mushroomCow != null) { + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + cow.discard(); + mushroomCow.moveTo(cow.getX(), cow.getY(), cow.getZ()); + mushroomCow.setHealth(cow.getHealth()); + mushroomCow.yBodyRot = cow.yBodyRot; + + if (cow.hasCustomName()) { + mushroomCow.setCustomName(cow.getCustomName()); + mushroomCow.setCustomNameVisible(cow.isCustomNameVisible()); + } + if (cow.isPersistenceRequired()) { + mushroomCow.setPersistenceRequired(); + } + mushroomCow.setInvulnerable(cow.isInvulnerable()); + cow.level().addFreshEntity(mushroomCow); + + ((ServerLevel)cow.level()).sendParticles(ParticleTypes.EXPLOSION, cow.getX(), cow.getY(0.5D), cow.getZ(), 1, 0.0D, 0.0D, 0.0D, 0.0D); + cow.playSound(SoundEvents.MOOSHROOM_CONVERT, 2.0F, 1.0F); + } + + } + + return InteractionResult.PASS; + } + public boolean canSpread(BlockState state) { return state.is(BlockTags.DIRT); } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/RecipeUtil.java b/src/main/java/thedarkcolour/exdeorum/recipe/RecipeUtil.java index fb0598c6..a5b1bbac 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/RecipeUtil.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/RecipeUtil.java @@ -22,18 +22,26 @@ import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Lists; import com.google.gson.JsonObject; +import it.unimi.dsi.fastutil.Hash; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tags.TagKey; import net.minecraft.util.GsonHelper; import net.minecraft.world.Container; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.item.crafting.RecipeManager; import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.storage.LevelResource; import net.minecraft.world.level.storage.loot.LootDataType; import net.minecraft.world.level.storage.loot.providers.number.BinomialDistributionGenerator; import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; @@ -44,14 +52,20 @@ import net.minecraftforge.common.util.Lazy; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.registries.ForgeRegistries; import org.jetbrains.annotations.Nullable; +import thedarkcolour.exdeorum.config.EConfig; import thedarkcolour.exdeorum.recipe.barrel.BarrelCompostRecipe; import thedarkcolour.exdeorum.recipe.barrel.BarrelMixingRecipe; import thedarkcolour.exdeorum.recipe.crucible.CrucibleRecipe; import thedarkcolour.exdeorum.recipe.sieve.SieveRecipe; import thedarkcolour.exdeorum.registry.ERecipeTypes; +import thedarkcolour.exdeorum.tag.EItemTags; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.time.Duration; import java.util.Collection; +import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -67,6 +81,7 @@ public final class RecipeUtil { private static Lazy> barrelCompostRecipeCache; private static Lazy> lavaCrucibleRecipeCache; private static Lazy> waterCrucibleRecipeCache; + private static final Map, Item> preferredTagItems = new Object2ObjectOpenHashMap<>(11, Hash.DEFAULT_LOAD_FACTOR); public static void reload(RecipeManager recipes) { SIEVE_RECIPE_CACHE.invalidateAll(); @@ -74,6 +89,32 @@ public final class RecipeUtil { barrelCompostRecipeCache = Lazy.of(() -> loadSimpleRecipeCache(recipes, ERecipeTypes.BARREL_COMPOST)); lavaCrucibleRecipeCache = Lazy.of(() -> loadSimpleRecipeCache(recipes, ERecipeTypes.LAVA_CRUCIBLE)); waterCrucibleRecipeCache = Lazy.of(() -> loadSimpleRecipeCache(recipes, ERecipeTypes.WATER_CRUCIBLE)); + + preferredTagItems.clear(); + preferredTagItems.put(EItemTags.ORES_ALUMINUM, ForgeRegistries.ITEMS.getValue(EConfig.SERVER.preferredAluminumOre.get())); + preferredTagItems.put(EItemTags.ORES_COBALT, ForgeRegistries.ITEMS.getValue(EConfig.SERVER.preferredCobaltOre.get())); + preferredTagItems.put(EItemTags.ORES_SILVER, ForgeRegistries.ITEMS.getValue(EConfig.SERVER.preferredSilverOre.get())); + preferredTagItems.put(EItemTags.ORES_LEAD, ForgeRegistries.ITEMS.getValue(EConfig.SERVER.preferredLeadOre.get())); + preferredTagItems.put(EItemTags.ORES_PLATINUM, ForgeRegistries.ITEMS.getValue(EConfig.SERVER.preferredPlatinumOre.get())); + preferredTagItems.put(EItemTags.ORES_NICKEL, ForgeRegistries.ITEMS.getValue(EConfig.SERVER.preferredNickelOre.get())); + preferredTagItems.put(EItemTags.ORES_URANIUM, ForgeRegistries.ITEMS.getValue(EConfig.SERVER.preferredUraniumOre.get())); + preferredTagItems.put(EItemTags.ORES_OSMIUM, ForgeRegistries.ITEMS.getValue(EConfig.SERVER.preferredOsmiumOre.get())); + preferredTagItems.put(EItemTags.ORES_TIN, ForgeRegistries.ITEMS.getValue(EConfig.SERVER.preferredTinOre.get())); + preferredTagItems.put(EItemTags.ORES_ZINC, ForgeRegistries.ITEMS.getValue(EConfig.SERVER.preferredZincOre.get())); + preferredTagItems.put(EItemTags.ORES_IRIDIUM, ForgeRegistries.ITEMS.getValue(EConfig.SERVER.preferredIridiumOre.get())); + } + + // Copied from ServerLifecycleHooks.getServerConfigPath + private static Path getServerConfigPath(final MinecraftServer server) { + final Path serverConfig = server.getWorldPath(new LevelResource("serverconfig")); + if (!Files.isDirectory(serverConfig)) { + try { + Files.createDirectories(serverConfig); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + return serverConfig; } private static ImmutableMap loadSimpleRecipeCache(RecipeManager recipes, Supplier> recipeType) { @@ -289,6 +330,25 @@ public final class RecipeUtil { } } + @SuppressWarnings("deprecation") + public static Item getPreferredItem(TagKey tag) { + Item preferred = preferredTagItems.get(tag); + + if (preferred != null && preferred != Items.AIR) { + return preferred; + } else { + var collection = Lists.newArrayList(BuiltInRegistries.ITEM.getTagOrEmpty(tag)); + + if (collection.isEmpty()) { + return Items.AIR; + } else { + collection.sort(Comparator.comparing(holder -> BuiltInRegistries.ITEM.getKey(holder.get()))); + + return collection.get(0).get(); + } + } + } + private record SieveCacheKey(Item mesh, Item ingredient) { } } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/TagResultRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/TagResultRecipe.java index 95cb9e47..4224b6d0 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/TagResultRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/TagResultRecipe.java @@ -24,49 +24,45 @@ import net.minecraft.core.registries.Registries; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; +import net.minecraft.util.GsonHelper; import net.minecraft.world.Container; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.Level; -import org.apache.http.impl.client.StandardHttpRequestRetryHandler; import org.jetbrains.annotations.Nullable; import thedarkcolour.exdeorum.registry.ERecipeSerializers; -import thedarkcolour.exdeorum.registry.ERecipeTypes; +// A recipe whose result is an item tag. Tag can be empty. @SuppressWarnings({"rawtypes", "unchecked"}) public class TagResultRecipe implements Recipe { private final ResourceLocation id; - private final Recipe wrapped; - private final TagKey result; + private final Recipe originalRecipe; - public TagResultRecipe(ResourceLocation id, Recipe wrapped, TagKey result) { + public TagResultRecipe(ResourceLocation id, Recipe originalRecipe) { this.id = id; - this.wrapped = wrapped; - this.result = result; + this.originalRecipe = originalRecipe; } @Override public boolean matches(Container container, Level level) { - return this.wrapped.matches(container, level); + return this.originalRecipe.matches(container, level); } @Override public ItemStack assemble(Container container, RegistryAccess access) { - access.registryOrThrow(Registries.ITEM).getTag(result); - throw new UnsupportedOperationException("TagResultRecipe#assemble"); + return this.originalRecipe.assemble(container, access); } @Override public boolean canCraftInDimensions(int width, int height) { - return this.wrapped.canCraftInDimensions(width, height); + return this.originalRecipe.canCraftInDimensions(width, height); } @Override public ItemStack getResultItem(RegistryAccess access) { - throw new UnsupportedOperationException("TagResultRecipe#getResultItem"); + return this.getResultItem(access); } @Override @@ -81,13 +77,23 @@ public class TagResultRecipe implements Recipe { @Override public RecipeType getType() { - return ERecipeTypes.TAG_RESULT.get(); + return this.originalRecipe.getType(); } public static class Serializer implements RecipeSerializer { @Override public TagResultRecipe fromJson(ResourceLocation id, JsonObject json) { - return null; + var tag = TagKey.create(Registries.ITEM, new ResourceLocation(GsonHelper.getAsString(json, "result_tag"))); + var newResult = RecipeUtil.getPreferredItem(tag); + var originalRecipeJson = GsonHelper.getAsJsonObject(json, "original_recipe"); + + if (json.has("result")) { + var resultElement = json.get("result"); + if (resultElement.isJsonObject()) { + + } + } + return null;//return new TagResultRecipe(id, ); } @Override @@ -97,7 +103,7 @@ public class TagResultRecipe implements Recipe { @Override public void toNetwork(FriendlyByteBuf buffer, TagResultRecipe recipe) { - ((RecipeSerializer) recipe.wrapped.getSerializer()).toNetwork(buffer, recipe.wrapped); + ((RecipeSerializer) recipe.originalRecipe.getSerializer()).toNetwork(buffer, recipe.originalRecipe); //buffer.writeResourceLocation(recipe.tag.location()); } } diff --git a/src/main/java/thedarkcolour/exdeorum/registry/EItems.java b/src/main/java/thedarkcolour/exdeorum/registry/EItems.java index dd581cc0..6959fb23 100644 --- a/src/main/java/thedarkcolour/exdeorum/registry/EItems.java +++ b/src/main/java/thedarkcolour/exdeorum/registry/EItems.java @@ -86,6 +86,18 @@ public class EItems { public static final RegistryObject IRON_ORE_CHUNK = registerSimpleItem("iron_ore_chunk"); public static final RegistryObject COPPER_ORE_CHUNK = registerSimpleItem("copper_ore_chunk"); public static final RegistryObject GOLD_ORE_CHUNK = registerSimpleItem("gold_ore_chunk"); + // Modded Ore Chunks + public static final RegistryObject ALUMINUM_ORE_CHUNK = registerSimpleItem("aluminum_ore_chunk"); + public static final RegistryObject COBALT_ORE_CHUNK = registerSimpleItem("cobalt_ore_chunk"); + public static final RegistryObject SILVER_ORE_CHUNK = registerSimpleItem("silver_ore_chunk"); + public static final RegistryObject LEAD_ORE_CHUNK = registerSimpleItem("lead_ore_chunk"); + public static final RegistryObject PLATINUM_ORE_CHUNK = registerSimpleItem("platinum_ore_chunk"); + public static final RegistryObject NICKEL_ORE_CHUNK = registerSimpleItem("nickel_ore_chunk"); + public static final RegistryObject URANIUM_ORE_CHUNK = registerSimpleItem("uranium_ore_chunk"); + public static final RegistryObject OSMIUM_ORE_CHUNK = registerSimpleItem("osmium_ore_chunk"); + public static final RegistryObject TIN_ORE_CHUNK = registerSimpleItem("tin_ore_chunk"); + public static final RegistryObject ZINC_ORE_CHUNK = registerSimpleItem("zinc_ore_chunk"); + public static final RegistryObject IRIDIUM_ORE_CHUNK = registerSimpleItem("iridium_ore_chunk"); // Pebbles public static final RegistryObject STONE_PEBBLE = registerSimpleItem("stone_pebble"); diff --git a/src/main/java/thedarkcolour/exdeorum/tag/EItemTags.java b/src/main/java/thedarkcolour/exdeorum/tag/EItemTags.java index d11fc344..04677e87 100644 --- a/src/main/java/thedarkcolour/exdeorum/tag/EItemTags.java +++ b/src/main/java/thedarkcolour/exdeorum/tag/EItemTags.java @@ -35,7 +35,23 @@ public class EItemTags { public static final TagKey STONE_BARRELS = tag("stone_barrels"); public static final TagKey BARRELS = tag("barrels"); + public static final TagKey ORES_ALUMINUM = tag("ores/aluminum"); + public static final TagKey ORES_COBALT = tag("ores/cobalt"); + public static final TagKey ORES_SILVER = tag("ores/silver"); + public static final TagKey ORES_LEAD = tag("ores/lead"); + public static final TagKey ORES_PLATINUM = tag("ores/platinum"); + public static final TagKey ORES_NICKEL = tag("ores/nickel"); + public static final TagKey ORES_URANIUM = tag("ores/uranium"); + public static final TagKey ORES_OSMIUM = tag("ores/osmium"); + public static final TagKey ORES_TIN = tag("ores/tin"); + public static final TagKey ORES_ZINC = tag("ores/zinc"); + public static final TagKey ORES_IRIDIUM = tag("ores/iridium"); + public static TagKey tag(String name) { return ItemTags.create(new ResourceLocation(ExDeorum.ID, name)); } + + public static TagKey forgeTag(String name) { + return ItemTags.create(new ResourceLocation("forge", name)); + } } diff --git a/src/main/resources/assets/exdeorum/textures/item/lead_ore_chunk_cofh_style.png b/src/main/resources/assets/exdeorum/textures/item/lead_ore_chunk_cofh_style.png new file mode 100644 index 00000000..3c9ee2e0 Binary files /dev/null and b/src/main/resources/assets/exdeorum/textures/item/lead_ore_chunk_cofh_style.png differ diff --git a/src/main/resources/assets/exdeorum/textures/item/silver_ore_chunk_atm_style.png b/src/main/resources/assets/exdeorum/textures/item/silver_ore_chunk_atm_style.png new file mode 100644 index 00000000..45394b0f Binary files /dev/null and b/src/main/resources/assets/exdeorum/textures/item/silver_ore_chunk_atm_style.png differ diff --git a/src/main/resources/assets/exdeorum/textures/item/silver_ore_chunk_cofh_style.png b/src/main/resources/assets/exdeorum/textures/item/silver_ore_chunk_cofh_style.png new file mode 100644 index 00000000..9a1fc0e1 Binary files /dev/null and b/src/main/resources/assets/exdeorum/textures/item/silver_ore_chunk_cofh_style.png differ diff --git a/src/main/resources/assets/exdeorum/textures/item/tin_ore_atm_style.png b/src/main/resources/assets/exdeorum/textures/item/tin_ore_atm_style.png new file mode 100644 index 00000000..d3572a71 Binary files /dev/null and b/src/main/resources/assets/exdeorum/textures/item/tin_ore_atm_style.png differ diff --git a/src/main/resources/assets/exdeorum/textures/item/tin_ore_cofh_style.png b/src/main/resources/assets/exdeorum/textures/item/tin_ore_cofh_style.png new file mode 100644 index 00000000..14b37c29 Binary files /dev/null and b/src/main/resources/assets/exdeorum/textures/item/tin_ore_cofh_style.png differ diff --git a/src/main/resources/assets/exdeorum/textures/item/zinc_ore_atm_style.png b/src/main/resources/assets/exdeorum/textures/item/zinc_ore_atm_style.png new file mode 100644 index 00000000..c33373ac Binary files /dev/null and b/src/main/resources/assets/exdeorum/textures/item/zinc_ore_atm_style.png differ diff --git a/todo.md b/todo.md new file mode 100644 index 00000000..47f4844a --- /dev/null +++ b/todo.md @@ -0,0 +1,24 @@ +- ~~Amethyst~~ +- Suspicious Sand drops (Sherds are done) +- Armor trims +- Guardian, Strider, ~~Warden~~ +- Glow squid ? +- ~~Coral fans~~ These can be obtained by bonemealing in a warm ocean or by smashing a coral block +- ~~Warped/Crimson grass~~ +- Dripstone, Moss, Dripleaf, Glowberries +- ~~Sweet berries~~ +- Sponge +- Easy access to a wandering trader +- Sniffer +- Turtle +- ~~Kelp~~ +- Some way to get Bad Omen +- ~~Bamboo~~ +- Frogs +- Axolotl +- Panda +- ~~Prismarine~~ + +Watering can? Easy bone meal? +Blackstone and Gilded Blackstone barrels that speed up composting and liquid transformation? +Hammers with Fortune \ No newline at end of file