From 2d950a6b997c91f8a96ab12a02b028806a40ff00 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Wed, 31 Jan 2024 14:26:38 -0800 Subject: [PATCH] feat: fvm: update the FVM/FFI to v4.1 This: 1. Adds nv22 support. 2. Updates the message tracing format. --- CHANGELOG.md | 46 +++++++ api/docgen/docgen.go | 8 +- build/openrpc/full.json.gz | Bin 34601 -> 34712 bytes build/openrpc/gateway.json.gz | Bin 11870 -> 11931 bytes chain/types/cbor_gen.go | 127 ++++++++++++++++---- chain/types/execresult.go | 17 +-- documentation/en/api-v0-methods.md | 102 +++++++++++++--- documentation/en/api-v1-unstable-methods.md | 102 +++++++++++++--- extern/filecoin-ffi | 2 +- gen/main.go | 1 + go.sum | 8 ++ node/impl/full/eth_trace.go | 6 +- 12 files changed, 345 insertions(+), 74 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9cf98e889bc..c18f2f6a4a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,52 @@ ## Improvements +### Tracing API + +Replace the `CodeCid` field in the message trace (added in 1.23.4) with an `InvokedActor` field. + +**Before:** + +```javascript +{ + "Msg": { + "From": ..., + "To": ..., + ... + "CodeCid": ... // The actor's code CID. + } + "MsgRct": ..., + "GasCharges": [], + "Subcalls": [], +} +``` + +**After:** + +```javascript +{ + "Msg": { + "From": ..., + "To": ... + } + "InvokedActor": { // The invoked actor (ommitted if the actor wasn't invoked). + "Id": 1234, // The ID of the actor. + "State": { // The actor's state object (may change between network versions). + "Code": ..., // The actor's code CID. + "Head": ..., // The actor's state-root (when invoked). + "CallSeqNum": ..., // The actor's nonce. + "Balance": ..., // The actor's balance (when invoked). + "Address": ..., // Delegated address (FEVM only). + } + } + "MsgRct": ..., + "GasCharges": [], + "Subcalls": [], +} +``` + +This means the trace now contains an accurate "snapshot" of the actor at the time of the call, information that may not be present in the final state-tree (e.g., due to reverts). This will hopefully improve the performance and accuracy of indexing services. + # v1.25.2 / 2024-01-11 This is an optional but **highly recommended feature release** of Lotus, as it includes fixes for synchronizations issues that users have experienced. The feature release also introduces `Lotus-Provider` in its alpha testing phase, as well as the ability to call external PC2-binaries during the sealing process. diff --git a/api/docgen/docgen.go b/api/docgen/docgen.go index 181efeb3015..6028a40f250 100644 --- a/api/docgen/docgen.go +++ b/api/docgen/docgen.go @@ -154,13 +154,14 @@ func init() { addExample(map[verifreg.ClaimId]verifreg.Claim{}) addExample(map[string]int{"name": 42}) addExample(map[string]time.Time{"name": time.Unix(1615243938, 0).UTC()}) + addExample(abi.ActorID(1000)) + addExample(map[string]types.Actor{ + "t01236": ExampleValue("init", reflect.TypeOf(types.Actor{}), nil).(types.Actor), + }) addExample(&types.ExecutionTrace{ Msg: ExampleValue("init", reflect.TypeOf(types.MessageTrace{}), nil).(types.MessageTrace), MsgRct: ExampleValue("init", reflect.TypeOf(types.ReturnTrace{}), nil).(types.ReturnTrace), }) - addExample(map[string]types.Actor{ - "t01236": ExampleValue("init", reflect.TypeOf(types.Actor{}), nil).(types.Actor), - }) addExample(map[string]api.MarketDeal{ "t026363": ExampleValue("init", reflect.TypeOf(api.MarketDeal{}), nil).(api.MarketDeal), }) @@ -209,7 +210,6 @@ func init() { si := uint64(12) addExample(&si) addExample(retrievalmarket.DealID(5)) - addExample(abi.ActorID(1000)) addExample(map[string]cid.Cid{}) addExample(map[string][]api.SealedRef{ "98000": { diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 0b0acf6dae7a7a7e8d64017a070186a9a62d8b6b..acef3970e7387cc9c034b7348265982b8eced8dd 100644 GIT binary patch delta 32251 zcmYhCV^}6$)b6W^lWp6!?V4=ccFmLRr@q=0^QaJCe~$)NOZjguA9=7HbokA)~GcUXQbxH0nqmNAlmxT6e zuj>!1gx-wuSE9Gkf^>UA9~7W?9^Xpr0!mIa)2kphD>YycTnqH^a+Ig$D@obaL`kr510sLe`n5fT0KJ8a%$o7p8(QQHL3n?sMV!x4 zyd!^o7p?Ci0B(P#-bp#jOpg41mltSkl-j*Zx_g%xs0F#9+4xnDtki!Ee}H{Ql20mK zQ~o0VE)USExw@8Q@%EAYX^^@Rrg{KJ@B?ES{uu=MD{Iq8U;r@oRCCFk0->G z4V++s7v`_HF~Ld)S=UeIK+^0AxSWVx__!-0m=u#2xO=-BD8RiRsi|9DOjy3K<;!pQ zyt;aAHnN+6n^}bD8|cZfSOuxMdV3Z5nR!MKB^&)2rn!W$BE-yaQ0$v}c9*BAq9ov)t>cIebB(ixh> zcr>q5(_%O{hF}8#?Y@D+8m=F>x7^%I3zH7sH)-38@?NklLoDJfVXz;F-9qFk5EvCR z^c_23@=$0b-usO&aGKL~&k*vd6Ed+CEO@3c1tz0q>C9?r-pO=xd;cfTCq5r+yko}M z#YV!mbwYylIo?!o&+$f2$ctbO6d=wD-CY>>LgCu_XAd_ZuPA3{N=ezeF;XMdm&06> z9#_cWs&lO>34z)xcx{?AqcE~#eJnCLys|hfU9Z_ADg=J;E9~-(1Sd@ZzvPc#p?Ppw z%)UGvVvbDaZCz9y>^c;Pv%V~rhG_Q$BTQkOfC3(j5B!JC48809o8_{Zx>l1Rm3Vb z;WRF+*y%K(=!6DxczlFY{+BPF7`DNKsq3J>2oWm4T{8b_qM6o*ks7)+aextwNsz)% zv>=m(6~8?het5PGI@>UbmMqeQ6Z(=gT=gT;B>^=Z9(9bi7t#$O;GG)+)lVO_fJ~d6 zLbVLmmHsd6q8EkG+l%FJU!;!!1%J`m$BDI)*#2jia2q-QLXW33xtD~O)cck>4uXrb z*HIXNJKihAx98{kv6eQn?rIY|RY7;KUosl;N8QA{c2XnIYU5IN!ozS=3d zjBk$|O*w5!X<4c&8F4{U)4F17i@Izj!7zBbmNa^8qMRy$>&jbC zF%<0HGETbLprRYx;-X_bBKZRUy#2=-QQ+`Vtj6_Kt8ljEus&q7XL3obv)@3$o zV$($&FgJ$VwcUPkCG1yW!2-Us-r>Z@P%UrG4O`I z`$G$D6<<93ao^sCqL4B&{rgKkxMkE6?012uh6vuwx`<-KJ8%Bmhi^FH*ML!HT z{(J0wi*JSKHtWgP5?n3hLL=f-GW=*kR2J-yVubB92nuJlPz^db%1U63Rfc4qS*S*Z zSnC|ujJYRVMWfNdWpG=WQ@V!96p2SW+V!zxs=m{sDN`Z^p1T4Iy}L{c*Od(>R>C9U z7Zz8JJ)A6oW-l!%qy$Z-#wY-*aeVv%m9WdWU5u0PVHX8?bBd8}=eDE^i0mgXd3fKm zX#FJSl%j9We5g=jkj9ZIvvBX$%=(MrfqQ|Zn=t8LA>hPD@y8$d<0aBtOxC3UyvbFwoKE1Tp+lcLCOu3^0O1ZHXX!C#!Jm_rFUKAG< zSQ2F-R5^l1sBWM6E@a+oV-%A9SFKPqqZe2z9&?wh?XYvbHgreUr$A*V)V)A?+GjSR zSaG-krtd@27%4^k`;$ZUDeTV=xBFoFKLxtL@|2l`e+oil6Zd?6p5XX@+@AFG?Z7>M z?C#@qe)%E^W$PQ}{(J#|3FYbQcfL8hf-Cg|dTsBX?;qcPoS^c&-#;816%OsyZcnVp zt1vH|A85^qwLi|4Z6zqjYq0++v%;qSrM2%BZmKzYY`F|0*Egzif&#Za%Oat~M#&W2 zolTJYP-I_DTw=J4WtjD>j1-U-xbp9?0wjV$`X@V!ZDz*b5~to{t$0iz3rmp=D{0@k zmT$SXlpIaks&)mE8eOFdfsVdOoENmZ2~;1}&@BC%z78!O2D69ca{_Cvx)fmTF8Adn zpOX%Y*@F%v?zE&1I!pDZx7C?*!Dm;Y0Y5kYU4qSjD@ZOF2yoays(dvC3_KCr0#wtu zUAW7`?WW7jb?tvLP%6HeMue17brB{k7PYaBM!h0#26RJ`mi%=bb!sHd(D4tWo$ld` z4&~1Z6b@c(iF_Mh(S0-xfYD{Nl{Rbuf7F)NXS@>0) zxrahV)S;fM7eFOpsF+%io=Wnd@q>XbS=&k|ot(c3R->W}WZ>C+)-(Zwx%Nl5>-hD6 zn#8EYOi9r_+7YC7;;29Lq8t+uz){$>6%Z+eM;?$*KO;V@^p601&%0MZkO@COei>K>3=^yO8s= zk5@|ABTS?(j7Ooc!es1S*A7fI*wmg?2YCjhomWo3b+;iUeY6j95~E<- z7B_XH&Q!X`zC!l12q5}DRb?BZACRq|FH$T@Xwt{W7k3-FQT5ZEv0N-F$WnD!7nyJ3 z`s%d<%Z)|=vP|}tXpN@6OH1t2T1{`IOl8WX0E)UMuu(3v`m<#)OG|ts+);*D6V|~= z6;1Rj{9cS+NcX~bsUcY7Gp==omZY#2tW90-4nD!BW+rhBhKjvA=ZTZHa$I!5Ummb$ znTNW}rM+CZQhY3OP?QO2gWu~U&<&I78(7#x)&7PHvFw>)`M888 zQ=0^$-DfVWq>y+RO3*FoXc9{6jwDs&TSJ*gomDl^Cr6T>>&A8V0f!LiG^0qe5E!Q# zRoT1;956Y*QH2#%=rc)Jnqls48UvEV_BYXN6aD0iE!CrM$b&DFV4^BeN4tC}(;HV* zAI4ZEX>qY>1uusxl}3$h7Q&99!```ZAU_3xl8AobufRS;TuiL+;wG(uo4MfRA9JNy z*E1p?4$LyZD?}{e7ze%$KRycev&v`&z>T&;{htvO53X*{0|<*&5}oMG4KMU~F+uT( zu{3pg4O8g&IwdBeA0t&@>x`7jm2a3p2_z|SY+wu$p@!wyO%BwE($YE6rWe^@ktLCM zuyjDJh<{o5l7#0721wVr3_lc-1m|^i+?KuyRQ*%8-nZovpk79<=1>nxDm`A|VhRT567-MkT}dv;j7%fZm1!GhsqSizT#`#OHPcS(XBGb>Nmm8` zZ#S%I*@->AdRt7biCtyfA@e%maZ-WK?Hp!9Rt8DIYUDzRI=G*k$dQ zn%yZ}9-}Cfb+>F;U8y%TF}|vX?ZjwqwWiAbPJr4JS)lQ&Pan^B+)=|0-nif9)v`?~ zgH4dp(qCuFTXjKKh-E+IqCF8X=mxp59Gg#{HMo~>^|I?NzG3LlSzul6lW!t+0`V9r z^FubudAsAb-^Vg7RmKP+=h?5=GS=*FhY@Ap%bTaXqMikYm0=IfRuRYb+sJZ?r3i~ZY)mmX%e#*0 zdW(;{ms+7FWOm2mp7rLC!&$9yZ$?L3t6+{2ESprh89qLXE>2!=VHy2O8B=NFP z3bXW&eGRhPo;H{dI|Z*h)+AKkR^=8t-eL6x*IFIp@&)u+=`TsZki;-EqQZvg74HSk z)s+U6<_iw$Pso6y$Z1QfDGTZ5&)pQ~`qh_Ulqmb64M;f*SP&{=+b7{MznhU57%B3i zIOa&^DD;g9A3DNWk_ywS<`7BzB0hTHtc76+EVw;#I6tC_R7VQ*45stBR@e`lOA@5p z1k#9Kq!jk5!Ly103+e6xI?`P+q&B7oOiUrcG%laOAFY&ML_w@2KXXDrg?~zN9F_*6 z6x>7&yGChI4o0Q>A5jKi=AMD)oVLV_KY#i%#Gz#9i%iQ|u~nG9YGK_A>B{zY7}8i4 zdiZ$@ykeJZ3B3nAJ@tGZ^*GIreC_r{ba^qne+VPxIC&8RkhhEwgzM2?cW#;9-%k#W zzJ{nT0uJHUiln0t8-<3I|GYU>2A`=i_{Muj&LQ3>pfXG=q4)i=sgS!3Qz^hjs72jE zvrtYzw9qe&U<%XEy&np!lu=^Xgv~dXgG!8of!9|tMZk3hrxZbKXLr#QDx(Klb~uz| z9E|-pbrnEtZ@(Wc?-GF=hHwmdH5_+AkpYPg1@HCvUYlfK$Wx*H1g}N9a>~*$f$jBI zqXT4cqI1Yjj|v7+E*#(Q=~qP$xUyvvli-Fc1%@7W?<=)qI{Z_I9_kfq^WM1dS5cec zm1dhOyo^xX*Vvj3*||TH@d}6^Yq&tC<|;BWvlAAL_U*~AmU2g`)~S+anl=$rX3`qY zp%@7d1sOTj2pTczx|C)JA0U)#3CE=phHxZM5`z>T3opJ>le^heVJjHuf`Jccvm%&k z_vjySd!jMC-18zN+3`g*bG{y`*LXg_#-{qxwTlEQ}DiYW|t{kbiFQZMOp&f zcV7J`>x81(_Q3qEFneL`1)!;N7 zno)J(8~Kb%Ev?L6X1aF0ge?HB>5NJ!r$|#rMC}0^z=6i=UPQ*Tu19Ll})cY;ma8sip(tS?eP<3z5H0`0@)*(w7_BKcSf;7!`lbM~L&iEeI>t#6 zV(=RD(y6BkYs|~{dzjN(^e7S^7`zC&!Bo=T0*CzjgfCki!O1hgZ!Tt@y#%2(=y zl*zN#-^iqYJIDYl^}|Yghl$bAt%4IhM${yJl#33`b+{d*(uPaN zjBJo@9hq({2TwM^LI!v?KN>FSz)xYgsvV{%SlfZ4w*2;Nc%&p=dh^CAeqd2@rn`nj! z>3g($`I_k47Wo8x0YY`KTVvn@3e_Z!sQDNl&1MH{iFvH;YH`e{Ax0rqYIx0bjMApsm*p6YSwqW%bwg#&%ICcNsHt=6*0E zE69G7eSHf<%aZKG3n(H-Mhm{r9i{Cf5O3;QoaYdhX2=Iffa1~=VRfZ?7NetQFpASs z{cCYNruQl5BN9E{IF)p4=@vtC>fwurOMZTd9>qt<{S`}9-J^dZgYUXnlu#oHtI_^$ zAY0%8WK|q!saLpeDEl48R~=~RcGEZ*sx($jg^Em@)X+a#+qunJIX4bWOkG)eR2a8N zI+}uB_+<)Mwlud)ub(86*KRy_IF)-8TcBNL@X2D)2{EBcT|bYsdakPwrX4t;+*4s# zk7pTMqI9st=_pC4u-r0?YK*vSsg@}AR9IyN)n%sq+TAD?s}7w^Zx+24$J%uqZf6#A zm>}3-leVXh*Iz!K&*kl-z$!ds?hTLwH6))N`+c>T>4y?oB1km#nx3Zt#1{!xdT#t6Zos9#WY~Aqv zLlvL{o6Wn*ePLP@E!NLY`zr*JV!RnIg&z#k{+ChF6YaH(0N?+uZ!soFz4RP2tG zMCr$m>xHO_XJi$uoB4z_hYTrP&$a46l7S-j9?l17uD|I=On-Ft+N)oSvyCTG3TD34{K;{-6_ z-R=&r(arR*KDkhmRr%mi!Nw?P00)ZkH$bHovdlg){+3f5IOdFhNlFl$sEYJ&<#k}< zLD4t~i}2)S%RRFJSH@nmfXH`oYjP0_>8t4pLk1I&Bw`xvNwfezoDU`Q z!8>SLB)asRw|&FQuAvmRIp*p~8z4nS8K(|c(i+-^Eo9TEDPW=NNL#{o&y1!{+g>Sn zXQEm@&bbu?HWAw;5r43i^>VCHdFh9jgcFlCZgr&H3nK4zAi_sI1=4#V4!I$AFmpTT1r<_NUP|6{o zsGKrYrelSBxpFuOw6V3TXV1zAZ_})t9yoT>)8iWfO*Uqj|0XVBU*#S%$~)^Cj?|}% z3UEm*U4c1*i>;PTA6L&)2K+e*%qXWMG~GD7nhbzyP%Gn0v*z@=TcKQUgh5y#pZR%n zYL;aM*qHvgJbDw(`{)q;F{NC$b&QfXRkf9rVSINgoZ9)SjC!J9l zhq|ZnlQYlxdF30-RN!hmm6&O|VlS+(;gytK0-1Fn+cLbQjxI}{#Nc*04kLFh=4V15 zCyhEka5pjY4hn`Tb4iDH7*HsiVg9h$BEgT}&%obbF{|fACVI_Aq^L!_QqqQI8Zu-! zFdj@WMqYN(b8>Rx1E^iLmMxk1q}hE#(&RXk9Sh}dPbUfW%0}R8nPjJA+Ra& z$52qliTMs9@g%JZ*)vj7DdGMQx@Se{$6Vmy^ z?xd_zE2@(x{M_!i@Q1dom`J&_RMbQv5+BF1DhKm0db?LO7k1M4KKjVfn7PoLMIVDj z#mU)O1&)UoG(gXjiS=>|TDy(V;3CT5+*8A-W7{jBK3>}d3oe5UL6NYC z^2^8Iw)QyBaN&&SKARKiXw3iC^{LilSBRC`(Xy>%((7AfV|poWC%*=w*iWt%o;d1gquY&FB?sz7w#ClLu9;^CvqB(Yo@ID>QA@n|gQh?1 zx_acDSCt%wd*M$CB|yvpk!M;r%T=v|8Tz`+eKA@tKTgShN$av7W*DX|G*c?!FcdB2-6 zM=QOex#sYTJH2#ARFGHQRPc74G4PfvioG8%tWD}ou{j-dC&9U#gv~8lPX)Zst62|O zSh`P_=ERiQKX5sacX&?>W7Pd2&peUEXhcjf%)37Jfa33HvN1ECCn08SCfJr;*Ty`S z^#vSbJ)6^Tg9+2}QSnIBlDZfvTk}Z1dq70O<^!V=qT~t~?2+PPC}axVkXHRCXM2uZ zZ6apdhRtnRfkO&d>^hU?|F zAj-K-y-`69U=b;g>D3l2qSSgE>jmht2I+0ji))#Ow@O0+MkV{eo=8@rs-CmKu?ul2 zgTecGNrQC?^LyxTPtFdmu)n;XFOQ9S@;Y3kkZp*YM=+;lw)&Ju z4wG?|M;q@G+yzVa+n!xhpyN%I0AtU8_Om+~bfYw*lNHu794CP@aB^-ri$!&%a@uMy zisC0y4DYb!@IK=i=*k&$23WBWAwNEPLKj^aaxrS$YGqAj^*c@_xF3%@Cn6c3_T0jW za?weTI$t;Mwi@5^GTYq$w#7`pwvg1*cx{O-=#3G>O7fis9XEsn@4zt>eOi4}mgKtP zRU?w|F_e+*P53UJUrB3ipnj%sfPJ-(%t+?<{0q^c zlQ#5A*|#_O7gLr*-ip%$XOga7z)0xT1w$fD1(sc?Ox;?kD}}sI$*K$x*xkP@?tSVa zLj8Rio<1l9n<$tYhxHRpe|H;#F)yo`XId8(4O>T%B0Q0=YdOMeIfb{GK7J&}`3g2o z8v$CM^fbfTKt(AR;3F@r0BWt>`RC0Du*ZsX;nQU}>_-Lb+e#;kV6*}K04O?D017(H z7e#TyrYO4L+LgCz||o{ZB{B>kHxVz)?NMS&lmDeZU3O>AX=oT}2kWTF@%3uXFuf+CYw zw@9Ox8CIn};-b_t>JL~nx!-EtaI+=sJtUQ9Jw;3=<{}7>T4s3mi6`BH)jVu;?nyAL zyo{Ii>D%8ln#c#M_4H_Um1qogSM<`~Xy|>^T^0{R{itL2aQBbD*&lexY1Be=0a)ew zd)N3PT3jRm3VR;8r&c9)g8aF*WvbH8%`DuOw{O>vd0+a(FAf>6D(SvuyU&yV4kr0M zD!bCa8<#-NqT|H8EIj-wAFcK1l5ALMb`EZ;#W@pBhh>Ha7CY-!#TD6bi2)k^s@dqQ zU+DA?8jjTd-=?Ldi67I6en`BfT_IQh0(walZ&=}g8ZZJx(1kvC>52`8;#8qW7Fk33 z8fcwuMj<>SwQxB1w75vr9N@I-vwyJ>J)lbc_YI|uKv!m={L-`+5Ls4M{5U_R?p8`9 zv}UQMlTqk%kZ7c$?X)H(IjQjHsHvwx3-ysnhYHd@%`y2Q8w271r=lYm^abrG$8@GkD)#>uMQ`7Nf8M@iM zM(j}35^@7}$@Ay!Z5k#1(JMRP+0&|3czpvPS(SF7p;{rn_UTQ_0&nL~x5?UQBv`@F z{@m^QLE10uxk`4oeeAU>W7=WkQaY2uxh`l$;986%;vpV3X$ntxbD{m~B79VoXFI3) zWPz6dz9L=~=RBq)f*SpNGT zyyHSgBkDic!K8&-KoK3jI`dh3JUJ(drjVNzW33dR*ry&GcI3O{NzV7{0fFn=w*M5r<5ainM38NJ|5_Nrx<3tcF{Hx^PsdEyBX~eZ(X(JYQuNDI3Wi z@o~8k+?C!q7EEYaDuYCqZ~uS`^2dKD3+lLG;ouYcU7SElv=rivOY}|x;`|HRaYXd8 zYt0T+?#yHjAW!glNi4Iz2)D?#X2ZG5O4w+C>gT}{`@|YnSI>dZe&=o&L_UcM@e65vq*hGb*sVj|$ip(r z2a%onaLuvZIh>i;hN3^38e_cB7E?Gzo!{?P5-c<2IX5%jJQn<;`ImG|O>eHFlzyTA zDh!GM)>2av;EnceoDT94qZo-nERS_3b2_7vSn=Mh)NSj@0k5f zo)&j!)bZ!~)C{L#gZPLfJo;#p#6=4$-d2@PuLnqQE@+IJg(w$&% zm3q?KD>eYVg@~#Q@L;5vvq5{iJdgUOUSK#0q6*8K?Q%*0Q0O!qjVF*>X?LCYJh*1e zHl{w){0_32>wMtyLKV0LYy?P_n7E&+39-=nEcnY2J@WNEG`dTLtRqNC($u8M9W^U8 z>)feHR5g0la|l)ssih~twD>IJw(6Y?=n^l#{$7q~5~_YM0U_H3XrJvx=@S2Gve9Py z?H%P^Eyf>L_&be_f)A;W4nGR9Q+J@Z3QDB=d6Ud1W}h*+MP`!>@V~9k3ep!72cmii z$5fwRDy%GBl=&-DxO={B4qzkRXELxSz(BqYkpRUJI#dALBFq}v@9mxsB?-?UkUh5P zf2_r&D|Wvw^RjQ139#o7JWsRMa?u%4s0IDp&oi zh7K0GwB~fIyywyE=61N#7BD4>3F|JJPe(jc@lPgmY2oUyiT;{d3Ui!*m)Q6b@|I*M z3n;Exk)b-}t4fL-6VYTsW_04j(mvr-!_aJNp#sD^=E{>Te{lBbMBIh6b`TF&5qf$r zvFs(zps%!`kdnH4n}2W?PiD*<3hh5b2aFo9W%sz_C{m5iLCuJrQy9J`Pb3VHw^W~8PWRBM(n4IN~qKLX@%MTiCn&BBTQfQv9be zioE<#p{@dLFfBx6V*N#WBtfKsCXr4kcAgg}WTi3&Bl=TVkJE=`gJn)tSB@{ij=xOj zEJQHkA%m9eg@p*zSJekuhT&O@19I^;Nbt^3J+TBd4i`Q^#o$ zAc)54MTaqkJY{Z-JFT({3(4^;|oT z5}5HAa_u(kA);1;F*#z5vV;ziLBWU?TGQ>%u=?Mp@PK$Ci5~)>#V@9#bEY8i-I~N(| z)!96Ah@(u{Vu!8V;y%d^opt82aUk7%3J#a=|59xEKS<2n(FskhjHg*Lg7r8o7u%$= z4NzYmRl5ffegp%+5c^`oVQ0tsFu`k~!apPPCy>66>iW`>>331W!$5Husm>rIg{<_J zEflwxR}7O8eY+GzvP|SB3haerl_m|>k{DBH10$hApkN{;F(Qo@V?`c?YDxF2H_KB} zYjBrj5`-imj)7@eeG-i%pg0Z<0t%9a+TwRn26iPw&L6z;R>GM!C z2jBH69yN5-3i2G=>LwFTjM`{Z3mS5}Tq&{Le(76I>EB7;{h+BCZ0nqb@mGLDD^7*+ z3m8;GuA>567&zm&DwGaua4{sCTh;Q7j9S1F7E_f%X;C#*8E3AGd&3#}e%6SWNF=(SSB?LfNCQvFn$b4F4JAO(-}dAf>3>A9vLD?)iWmU-*skEDei9_OXcF)Kd8BW9?2dL~ zbn-GzT$=BeTlp+M*{2Q4`j3;PAU`C)hyVe$h~j_V`yCV+UYrEA(DOee+CDPqzMEe6 z{4_V#{ubwk3x#ml^3NMD@JUI*Qh3w!pSx%zmikxtwF3tf{rSW-CP z0T^zjVA#njn$}Cy9~D)1=V)Ac$OW~!Z&x@L`I0Ix5}o9^d)tF|K28@d(BiX;dLvGo zpBuNTI0b5~Yl&DU*e|vKi-kwG;fmYtP_l^Np8vEoiq`|dQeKSK15RK!vbQfqI#~Ih z-aq?6>w*kk=ZK0PsK0jyhX@`V|EuN;;6CSbf%|AJm|=23AgYt6o!g9L5Oyd(HQHWY zZENmm4&Ki98WMkFt~$8oDo9&y>yV;~FIkhkgoDc6AkX>nLiA@H1v$ip4Zf1$QWdds z16SJ)T8G`*hkY~?J;78douJ)-K7>527wYC3!9JRMNtzQttu5KwjEpzUX@X`9z?8lY z#x|4tfRYle3325Ynet?JHY)C1FC+Se8KXY(H7*!%z%@eX*zjj`gR57cp%^0Ub!WE% zU9hB8Xnodi-T$lk_1u?z)Qrd$gmR7t<_xpezBpam8G9 z=!t`Vl*Pw^Ho)tL3jx=w_}-vAAhQh@ltEB#Qzb`p9FnNluFb?l)%{qb%d&WHgF}t( zu_58Qn9!&jyQp&Z!!<-~8jQlYzCjR-0}?1IP(eaBQbCiXey*^)-yN2bo`KLDQIxY( z9H@=KtKOt^!3eNpiVeqv!4Vem?B~f9jo&19hYT4eE1wlRpbcme6RIl5HEIJCByd8J zW7c&3KVa7=82fZ=7YN7p3m}+vxoNNk^_82rb20eh=j6$LZ+V}&6~ED8=iM^k+kk(tBOIFxuvNkckdv9hFp-r2qj+Kg~Q+QR^z!}%7rk}`-!`VO-+*FZREr55=p*tY z7z|cwa*uQk*WgN7+6|5D>FQ&Qa4qAri65_xyq$gbi)z3)GNgl_xznW+ziZ@^OsTrk(L5~c8zNTO*CUX8hOXzw?;F0b%YKj|U!H}k7#$e_W z#LGl8V^CLP?X0-drzBY!UHvl#a@-Y6v_%yP^)TtkH2tYe&PnRtvkbpSN^B-N06!zB z>;vDFfohwKj6LWdx4n;M21)9PVoa3t#)Ly2#!JNkc^xg`3a216goo9N_94-}5#i)JGFg!>^vSZm@t&v(pf#AtMhz|XQEcS)?vZR844X{#w@ zE@-2v0rfY8Uk_NfZ$xL)(wbBu7IE2Z$m`h{BlOG*GoiRJL+q>bT;FlVsT+v>pk6uE zKx|675|UI~2G}pR35TL(p@)0hW62*0Np=6(&@5<*014V(?07Us+?mcLN(&EkJkgl8 z%-Fxa5lj?ezMTSUhyu-iZxtu5u5PitV@^6ACJPgvJ$%$r8Are}i=HDK7 zwIs9Me_bz$^+99D9&-NDu-B~98EQ6+c2Gnt=!#Z10pyu@$363}2!;w_}QOgjr{@GEF6yVVt_?1(&02F8~i zo`nz7CYsyaROEqRw}ij zCqSsQf8759_t@L+VgniLh(?3dAge3bR%>Nc%Zis_24_&kcM$2AsM#G7ZTkeg zH{JQmW{2pSUB`!22=R<4Y@&I9ssN(t<7{UU>ZI!@5*QYVUX?by4?h&CR4NX2k6bh7 z&IdQNIMjky zRMD1njghCD&Qa?6`$M*B(dThI7OM>H7q+LEk(2uY4A|%vo`A0?`QR4JBfwtFL{k%m zOr|%38MESm++^2Z5=F#r1Or`diF$DDh*qzna+umw%;N2Q6+ZaEd6*fIdTlcyB87$90iI-7N_N&y+zLaGI3%m2#^! zqvbdMP;jC#JB)P$^(3c!HXt@PKKKEUotqCl80g4d04@$h;lTpm0aEjbgIfUYc-#PG zyLpu!ZJ3JzhN9H-wPTQnSeLJ6slh1$r^`B-H+lbXX^wrhdJH$!1xQ^1^=&Dh@aCcm4Td%Np2@aO>PcX_ z-ye}>#*fw53N9X}RS`M9SK#b{$dRQ@$qafmd?g2y;)0Xsx`(P@{DtM%XX2{c_! z3Q)!(eZ+WMr3pk_kqP*+WYbhw@6u1~c3N_+a3l}UY8h}7@1a*GTN8lAycPh;_b_Uq z+}*l_&4nKU%bHQNT$71R87cEAxD}Kei}Ry3pTnMVE;#~GQA*7I=*{e5dff0llpea9c0TT%F9M* zf_fffa1FLPBDUAoPqrm4yDo{H%e54kl{yjIt}UAayAp=_zJWg^ELR)(Cm$Um%=&Yx zozl;#g>1kNi(cI#*)F`+ogUsq)8J4qs(t)NC@5E=j}k>}W6nyel0Wbn_A&7yo6$SiD|5G(Cc?otIw6pGu0VsvWQX0p2|aSGKg4I~2#8)&|VCk%bU8j}+?04BttO(|8~KggKw%e59+1`tKWb z?p3oOv6k-}eDfgk07gLX+RvpfI0zI1pHbQVPQ9Ia1$53t1#Dh;+Oku#&gaj)H{=iP zX4gK_yoRuCh6OW5CVIPWUYUsmXKX<$j4?{z}n7WELY&SY&Hgte!T-dBDVJHQfTh~9Z zc0usIFd;v$&Uy;#azjntZ1?pRa8W0rqYAdlpnfY|?S-Rn-Tzbqsh#_iDm5xMF8eh0%V$dFem9C5# zTN3pMzsEgZe>?*!c{I_}Q>mN3JB%$JbR$D(2o39vlS21lY?0gw)H2qYZbtjiAKsaM zIxKl`)E)Cm2O$$K2Bpt5nd5~w7iZ5ry#8?Q=Fvvy&7*D}u4IaQ{+C)rsf4zSbjFXi z6rZbReV2$ev0K-jG-I6!G0y!ET^iC;MSO$B;`W&oi7yA}hS?5guNYKebN{~g@U>CJ zGC^7^Ape}AvzPMuib8S_&MB|YD-R?~2Y)%}>rl>{rx|?e!>I@!WvnXEgt$Jq5*s2Z zCg3G#3$Phey)5`$y%yga_sk@ftQ5;R1dEEi27eX%;@ENOOJ3J0MDkN&3=*4t2JgmD zzbo`BS)Tr%ko|Rlg@^1CvthnChORS^Dmzn22yG~`J-babJ0?Gt_$sG6ly2IJF5obT z%847O=BAzs$)h(&QTo9!$T9f-nR6D-do=^~i7#vZimEJFF|IZvG^h6=qbC*dbcM2M6=<(g`F0Z#DR@j-u5=vOBVt+UY>41oa!c zH-PyrE)F#?d-`_+)K4oJMg3O)5@GYgpr+(xp3zoNKuk73bF^mR9dOn5Zm{392-{FiX6Dm zHi!Lmuv_9nTcrP}f?2gN_2|7VI(q1A&;gKYGl&fI5+^|qDx3`rj`dFw3LDG16S|ad zv)op?Q?{H{OVuFGsxGaK&8lwK&IYYto(?CmcF<$Xld7O5w+Dvtx@F6&N*Amq4$N_O z_<%1W5vtzgdxGyb8^2bg9uCOjZ&ILDwJ1W0E!mipwn^mP{aCR7dYq9$m`*+F6#{<> ztAM8gXN9rZjI8#YdYBUQU}*ow*0*?Ue{#vLH>VJHiZ(Yh2-+nUPF0##MT6*?D_1K` z&sbWJ?n;2TBE%5HBtSk9I&e&&g$NBkgID%r;USL$l|LyjT>G)}o8*Vj`tT?nsdEsp zT!aGr1UMz43jqB41`80{wsX$p_^A{Mhn0A@ukmPggbTWrox;FD68GS(naI%O(tJ@k zxx;HLLu!jFPD>Sg$2lwml6sjKEM^P#H|d$yMSJ(!*sWw4XeK^hkQl9 z3q76UfL)?EqBjIQQ&-yF+M#jALjYzCNpWG5Zo5(8|eDBlMVL}X5 zNgahl?JL8yxomsF4`Ou+f*L-X!MVQI1|2vr#sCnMmd|Gstgh+PVbjyNDK@1rg@t#~ zlQ0o~URFLr&1MH*7*6ryT`ifx_A3k-C8REf+@&$6b0~0yG(=rOzi;WaI90;un+p|f zb3q!GS=z-Q=|3cecyg~vCOHMyM|FoGyxf}DoZpX3{yVU*`w1o9xWu^2aGv%J=)Ho% z%LC}GaNAm2xlLAP)#pu?J+F-QPe&|rduVk1PH_B|gv})!O7P*zCPC=4xGedw#E{%9 z<11-6>rvX=8j+{TWm$|wMB3|_bL9Rd>$;YeY<37Cm9FT}muZ_NG_YR0Ox46y(Im?~ zN3~Hqt}}D(9u;_aI5)Y`e#;-P$%Lp;!v%n~+XYr#h@3UHln$eFax#e2gN;E@z$bE{ zl5|y!pAnqBSol9?VDY)H9sRvK$ROP1di>=)VMtQz65q{4Al+e~s> zG3hdA)D=&(U6zZoOI!V?aBJN+5ENvFNMN_E{jH4r+mV9?nkRU^IHXU9wWCJUcrhSK zF@f~?v*=!63&-idI_H0p-`qAuAk*S_c9OZ5)rdsHtbkrl>0r`VloJUG)(GQ$z#!s9 z%JXjn*H0x}BwjmlsP<7{*z0nr{(ma*A5Gyy(_k-^Xw)_MUlAosc=vDNSXayP8%%^$ zT5}TEx`if{8;otGxmFtI2pu`*2ON#eqgN)_rsj$`J5W4=UhTP=J@P*=hhFxl31ZSE zVp3Cv8vGsOWDCny|2ra(R+1YW9%v%Ti4CGf(9=R~HvsN@ecQDHxnLn$eoXO?JtbvNoztk!e|W&-3kx1J^~#+6A|V5b!0zfz72m_QIoKzoo!`zMW}mesW& zxAq-!~pm}mkgIEc15t?5Pk*K32 zP|OmOMcrBLSYu@^G!jfWTi@hnF@uCK_b^#gRz6i6@BgaaLF73;OJ>Ubs%4pmY_(A*46F!I$vKeJnY+Et3*U66U5I(R;0mmIs`AH{6 z#V6KnFd}3n?LfqzR7#1IW8A_53mHskTRmEcvrXaGKhEOBn!aYbjyTwOrf`A&KLKbx zm%_lZ79Co2XwjiXhnt5EM}t8{y74cFf5MC-(k6vgx^f9FdRt63 zuC0Wkm8>i+N%K<`KQ@3!sw|Ml9$OzTTGwSZtVjl^)(zxy)_j@8RjX`U9nzl^tX*?) zshXq>NufqL8#1H{(#qH1rH4W!Gwl(|!9C&tl6&CL*$fdLCGW!wsH3b~9a(md7hkJf z^YJsUOknxNJ#ln}gP%Qp2w%YML*!xNioXR)LMTj1iC^rJp3TQTX5MEuWxa##;i#W` zap+U$TD|(!@5y}pNgL|r8453Pz!3ig8Q&fZMB%MbzwGUMOrVeXy^}pkGz)OkFz%=# zyWJVQcawZdCVx$J?Um_@c;EM_YzMC?v+Y!5;8H6uO1J)gPTb~*tfUQdhI@77K|+w9 zt-qK7GsQdELnt4HWkcy#E&WPG=W10k6DX(a*11!&&ekJJCODiS_uY(ZSEszhA(SKThzamqSR9{Eb_r(xfsd-)5-0pR-yLE)!g-TmDT(dc$TWYj3k)zofxq@yz zkp<$D=L@_|rD7o4))96=D5zm_ZwCT~{K;!oW{k;Ht)3(|DslmiTiXJs9ALR4G*fww zAkZ6}eE`7`b&&&J+7q;Yk`+t&efu78mm_af%*rOv?gS(Nf1^R}|iux=FL zrtNILsYp~IIZFVbc5+12>@t0E%33%j6S`2`i2l2?2=r(c-@KCaJw==W8m4Y^58(Yw ztW`%11B?;BMTo>fvjN26))l$*5MTjv1gE&sg)Q=yva!tlg=7-oD2|e$=jUZr?g1O0Zw0>7-w_G?-RlxIC0OvJ9l&G9 z;#jnljvr71nYH((UJ>uTm>6j}5YIRJgEnKNV z<_v9tQ+b?2#rBYYaDa%^H-wVcN#Qwh*?$!Q0KmvX?W>1*<)yV1B#FY(XP>vO2zU*? zd58cSaJKbzGLZoz0xL=$Q1L@D0lvPslLH6N8IqAkx|Jv~CzHT1R+X557lZ;h=X3@+ zb|kIQJjofvl>DYB7OYREFQbtI!T$0+aG;ogF#-V!HGI9r+@o_YwXQ(EFh0r+iGNx{ z(G18g)dE277Wg7qP~O3YZV&;tV%&0oRPu!wb^MXiL)Ujgk9{gJ@c2GH-JTH20F}pl zGNZhOSmq-YA2y!*q>9ZXx_;EIF-WLAWs?@HhJYaA_EzUKlFHo$)ms!~QBZpnv^}Ue z85^;Nn5%OH-TT&XC~lz&7ey{L@PDF!h8BaHxb+&JUEUwq2KS^#v2q8V^?^O253Ed} z7M1V1E9W&8H`^6Qtt6X$!mOp$C2E$RgZciWsZbGZ)d-V9gU!W>rgkM~WD4Y!+{n{r zwI<8e{6_Y|%H60N!$;f0iep{!BY#1+XUfiPx1^K$%lZ?(|InM07Xfl!f`1pUbh}3W zgM^Ik+z6SWEp}I1b8pS4Et-3oC1xg1e)ir;kB$!1xWqH`i8|MxF^R7mji150_}OPn zE)bXKM?X2aRNV&WdsDR*%aWQzEN$F62FX{RlLUEH_w{ox zjch_nct{J@*)a~0qkmf6ZfcaITWk!xlYZNo-%pw0ck2%LYm@Dr+cGLSso%u&`zjE1 zx8zk3u5LoRf5-P6$w0DPta3KcY=N{$sH#C9nGPBYkj%i%qRci`pw#+?%RY58$C7pN z7`S*E$x`cQv3?foXL)vhmTouEgrYXnJq3By+N7$Bk6fE5&VMp|og;2dDPLCvyH}Tz zLt}~~4>{Kt0U|COw{?V-Hq|w*Reu_!RIVneqXf&fW44giLRt%HEu^)O)nOd3?l>q(Z!qq3Q0vFJ;EdeQ`K$_~qs<`NJy8iq~$W?`j;l@?Z7 zSZQJ9lZTb1SAUtz{UT)24^sg+x;r9XJZ(Vqwl3{e1Oa4Pjpe|QY@!Je%I+KoBcQGb zcnMy-%CvbdKcTTlPS)uzASFLMd(@~DB(0CHyv~$d+e;`)V}DAxpa@RO3z>k^2+AH< zoZ0}V_Ino|4fzE6ew!q~smd)+aWn;>7Aae#Y?1PFLx0Mfnh<(8sLQygMP&ON5UB>t z1E#EMU*-W+u~R~G8cYRQGcf}OnAOcR0{ux3uPb z30}-#@LegT9|oR^VrMnNveieHDLE(Ei_jy}bmw#!aM#^o;+t5w|>Ub6A@b@3DWGjosUZ&6b zpd4AIh1AOr%ft}Qk`+lkD6fSiuhCr~))3IIKOzg>{TSGl!EC9mYk(BlJ25rl}vx7Sn#vDTDC%_zd9v1)LDEqDDJJ36G3U( z4FtFBH=JvPs^o2QW3C%ZaxA5~7)pG_E+qFL5ZH!sfmb|8rig7_kt>q441>VONHrcc zt8W2TQvDwc1TYjphlxsC;L<}^B!4Q3nY>k4wc-LwUUM3}*2*EiVHgwTb%g?qy~gB< zsJ6SiLO1)pO%JbVXf3zmFKJqKybtLt{X4bW{|EHvNN@Ikfb0{VVct7=C@<_?i$|hu*NY0YSc}4-c#dlQB}{MiF{2@Xw#m|claCaT}R)s?G`d^ zJ`%nD8dr-J`-5yATTHZ6#_p72DvG-7OA|r&nN5Z9-PvVLpV?G2_6+2w9P7CwKhDV= z=10^;y@Nr&cP`a#IRPIa`#znCFZ{OOJGnuGvvW#$SJSTq;SpuB#Yp3I_HAS0<&+;n zhTbD|sKzRue7!;83FCMsZ^2K!km&ae5$N;#lgd>)fA96p>iwQzxNGFbfoZ3ri@{*f zR|u^qGuXQweuIw)cF3(M-aCXolt1KjMcaRmjadVzW{4tV^c#G2B3;6{G2 zeveNjhdAm#O#O%R-of4={zt||&c_b){aBRQHDT98vL?vf_kRghdm`+&VvEP~5Gu`? zYobY*e_-5(2`1Ep{4Bz~qKIoiM0)<(#gD2fFQLnsnvIMZmgA=7jDWvMjB1`88_de7 zp;Zv`b(2`;h?|-L?gBcxU z(qE#LVy2D~Fg~PlS@AKo%4p(ijkSx}=#~0ue>vM34b@HxC0ZyE$OYk4Rxt(O8%$3I zjJH_z3fDLHoWvGJGx3l$2pV@A+YU`@mRTrG+lWk+ru9-*O(#6`Py*39@HWzcmt9QS z2h@;@TM6=v*P~g7&6Ge&tgTpMY<^ml{fetN)NYa7K2iv~WjIEriK?BuIJ_(vMt^6+ ze{7W_SvInG(=OekS*UHQ`R0)s`4O7z?`23#$7OI2Md4?+9%V>vz%jj%2gZosBBXZK z_$}32gR+c_*1aN^Uyr{YfD4b#eHU;KGr-|>w66!Q(LDp0Fpi-6|8=$zX9K++GtjGU z1IB)tNBlAig2Gcmr!Fu&Tg+tVhYz-gf1|xk@QEnGF7#1fe`*BG z044st4BU?vqxdpxK9gU#yBH)J;n3h@WOiYeh5%>Z+nW<}a&0uINXo9bkj{d6i*)Si z$_)bMzyByiT#m{jE_KVYm#=dk%njt7s?uTXWjwmYdDt@)$Vl>ukM8i;N5G-8nGi5C zRz4j@nTgR9(x+UQrQ#!Dh(I_ee*lUG=zQwQ8h?BSw?evUX&8j`2D``wo=n3c<2b*0 zhyVxrK63k+PX}(X?;l)|*WeR{ZnnOnp$}*%#Hf7d%tIOC>4>iiJOo{UCsNQxwM0`< z+evV!HaB&=XRZf1avH>MQ&FT>1c2Az1);JvIY7(+<0w#}u46QzAp$ouA2n7v^E$*- z2dAQFEA^#nOKq)c8yU=lX$V~;1_8;vlYdz)e*rNuRMEoX%I}35f{v$3Mw%-rAXfoOrVieTys(j6X4>>1j!-g&ik>g>Y2GBvcIwkQZHz}X2h3b z#bzhyip&Ye>T|_I6&x-Gp-7d%*U7|093&@SEP`nIu1M11Sk3XAp-@VbFDZ5upbB#g z{VbZHo4X<M8;LU0QSXZkCN zW#OcxkR+;~%n4Jzt}&9$ae74-&bJ)-=L({d5zOX{0}tM4c}c?%IUEpSWihp;rjT6` z8Fj)yr?Kr%{y0<~9GD{GXAoc7`dE_P>9ae19jCFaOZ{eT+Xm75MI)ye#9vy*f5fBP zWhi;Srvnk~83B7nz@8DX@!%T}4{py0*fr778G(kU1lol=#geQ|M87?lU=JqPg9-Lv zf<2gE4<^`y3HD%uJ(ytKl~2N5X%8km$iak4V7g&3exvP*8(q^e5yz0j)+uwdZ8W)B z0gmz3IhtZYJ900OT%~lPFFX@(e~%ILPmkrbXT^{i({#I80#}i2w=e}}H=vbKr}uCf zh#pKrI+J1K9MB1%qQF{>t<#9zi&F&`z^aOC|TiVyGFY^qhWSiw9UW@ zBUye|ta$y9-4(N$p`Y}zlyz0-!-}g*r7k&EqVNX0C_JLR4><~)=~~7y!e6tK_IRC{(dtj6*(W0J0>c zi**~Jm0Jrd4AUA7R}!TqHWsdt1{1BPD2N<;Hp=8d^=TP{7bdi#kWtP^9BOE3Nz}5vLml+wjN5oMtxi|2 z$fRAjYjCaJG}oIc!Bm*X>^sBD*UHIOByE&p+NryQQ97!ZQcUR8@*U>=CUsx1w?*GqjpAM5VP5B1J7EhOSjnbU;dNAV|-u&F-=h z&YDeCs5!nh)2wpEhwwH!P}W-;mvQ+mM;bG%1C&@({jytk@#P1^%hTf+>6WPWa#y0i z;tf)dMO}7h(4+=okXJ13KkZOd_=TdK0Si6;6??uCSCs@XGc2i& zNcY91yH$Ycp&J@fS!&Yi5GIc&Gz3s5X-RwQQbkUWpQ~=HUOFqYGzKewu{5lbZ=mF> zzIsvP*OW9;|2{^9M`z=ro#N>CG32m2buRa254H!RVZV2Y!kOG~lBqBBZ+I8~KDi5U zbiPX8BHKvAN8>Vy0F6f3G$b{l&?u-lo?D}XMRKl8O2#v1To|wRCc-rZ2m5t5;b!#I zdm5f0;$kvAMzG}txit-c)4n~V=3%6 zbys3!bVbWu&ukmZ`KMFSR134#RI{^xyfV)zb(YcUj+6_} z)%v$OxY?Z!EjXa`(ua2K7)GshbBBUen4KxiO^s*W8Pr|B@B#5d1RY9F2oGD{y^w9g zENOYNo13a?q6kyPJGEM~BUo_7LXM8KDjUn^0Ld3oK4+!HqVK2j;ckJ`iB69z%X&~5 zpZAD^F+v0cA$8|}4s!c(GG3i>Sf-gy5)#YmS7eMFIztS=8;E^4_R+J-e_OLlTDQJS ziE}nX8H}Ep+!tUKKZLAqm#@ma$fKee6^^85^gF{9V$ zqr6-!F0Wr5h6w##@$Pg=9{q(qZuss|#w21Q@X`=0_IJW7@ zl^pRVU6*ooli^l!he_`h%-o=AR=hN*m}S={74t06q;8s>e;d@xutB4Gd3J74IWL_X zRLx1!1~qd+zfsMcJZMn2ATS%$&C0wc6*F?bLB*UlX;3q(7aLT}i0CHuQbNB;wKSe+ zP%o|9n^eo{iY7JFO1MeAvfYI@%Wn1ofAMojTsk9&v12?%jK2@*Ol^<1w*IP{Y;eJS(Ss`UGsjJvSd7(#)VNKv z-L&$H)=q$#ue64A%#wSwrCFDbLz&PJgmGPaC$e>?ws5CrS)e>odiu428~yNBB~V$9 zj4|sftas}&epN_?OYB@D-riSN)8-n8YfZ_+%j;wcf7%Od-Nsgh$W~V_Scz>Vww2gV zRbuZg$f1?YdZ)m8F{F0F`+(D}V>*MFTp%GbL~oaH8Ygqii0}pJg_n`$4-dOb0k=US z;wrKq1#(w^!IcT~)to7QVw%V%Ahx>E>c$RqIq}hjmjlWkSt$R(l5M1fUxf-s`(!u)0EqiMpLBCo6!Of9V3BAur!Nka)Y0KH&Qg)0>&oMAV9< z);BZfhG}??Hba+B=`{mm=v>PKvyr5Nz8_t%z`!l$9)MsbCJK|OK-VNPOHEqQq<9K8 ze^I$EtGahN{pP_IK>5Ai8+2Jv!F1d#eZ9L~m&`{h6im=EHiD|ZY8yfIvU(dK9*u#G zplMoQBg{l8z&*%i#vXZ46}cdwwH29kg#Oo^-Eu&iAE7Q!+AxXrh>+B@potqZ@tG`ss0;V(0&7?@O24#+`j%1?4ZZ zlv+S!ukv)l@OYqfLIw~Ie(R-fFLisV`(vc;eiL@ZIgF=>n^b>&t>kTv#Cno8M{1>< z&3)YV6Kdva7!x&jM>L8c zN3q~UzEF%59)BOGB_%pVVc=C%e+C)Ng~@3y~x?+!H39?e!* zgPwV=OC9EoH3oL}51HP5m^V$<4F`K`>IZ-@WteBI&H0*il1hP@NM0{(_ujmvA zWJqa*AgO=G4oMf3#~dv$F?ZBT@1C(%t;_d?CA}8juNgawcI`#c8N^;6xiN}ajSpU?tp@;8suz3wK=Lki3=fW0^&k> zBJYz@_Zxs;CYlCgfxm^IHw!$zS-{UK-5>q?qkn(&|EZ7u&qT?5(**w@gRkEQ9N!@| zKy45DB|7Ul?*IDsyNvGHQq=w=3Im;t=xWuo#7bkldtE&(3;6*y6&(_qdsH?;E>*jt%+a7)*$FnVo!qB%MgMBh_=mB;4v@nsqHRi(nb*Zvqa(gS;nE-Lq zKP?I4clIc*xHhGYk#t~;txkP)>Pl2`Lx(9XAL#wB?UDATes;-vTP}#6r^@&4|Za)yR!qXI;2ir~HGit5hK^(zhgw_k>uOhXcAXQHe z@%WT*M-f`6zrh$_6K{L`FSpiNz7~HO&0U?MvGh;T5r9f={=!T!fHDaLkbohQST$h` z7X;84usI@qY=19WSBX}8;@5O!`qE*{w_ntKsDs@mY!JD$j}Z(bOxmJ(47)lzEOZF3cu8DlnPmz0&t1Pa3RixG{jn^01G_ENEziYx7-W{!VV*h8&X zPCa-@8NW`3Gt3yKL|P>WJKqKy$C%9%F1CGX%Q&J5;T!MvciY?Hswp}-O^ZDCMu&o^ z-)ll$kz(lsOrqA&vKfK(gnUbDgQ~hg(3j}8l=o>HU4^~otitf1!?YwU;{<_`_;8sz z%W^khd%54seHXdE+Ro6@%pj855Be>8z)TyT|NA{3v78}BxDc8~Y|p!Dm;0$057)b&*a`i3b043d-Tm=De6%sxkWi*#V%Mg|_=-tL7nk&!rzx;?+=7g1lW~cA z`+Kk6zTSJYckm`x0LEO7o(Zsex4$c!$`D}*ld8>01m{eQPTC+6VltNfXcn5)Plt%0 z5e~2#hpNXnD3;-G|D8|{b>M%%XNE%icPaScds=Y?r3SF`nLe-C@2=T0^+*U7Fe{=)!(^p;|#4 zeoZPyYuIbiB057MmaQIQ0^{Wg38p89O8OO99jjY?gRIGo#0dx5g2(qt?pMcF#AS19+SF188z0gBc?Tm9g4irOuDvRrCQ1KSuF6XvF*z!ah}F*YRX!M10hn1QUL+U!%+X^(}uT>ZZzMJT%5Hq@T4^ zUUE(K(N`?~>@bFT_SmFFOjQyS*6>1=5j8&^3_M}K3+RMixUUy?k*Lle%*fv)Fw9(x~PzJ9vihNzvcy(jF98TEOT{rd#lB?!_|GNc*uuYizhm2 zr1zlqJC`r$PyKStzjHC0SOwnwyKw~Ij>3{PxT;$4Exfb#b@}OK|*n6MJb;9~yhI|+Qye)ruZYKRVjevS``WgG>F_Loo z16_antReZdjQVw4KCD&0p>Mi2>x=m)s{)~_t2gKO=KS8A-<$J$bN*A;n|pKqI!e#m zl>l#->PB4cbtWHOCr4>bqk*Kc~r`)(h8_Mu}{dm5ma)cP`4` zQ4+_9@M8S6n7b0&GktbSLUgZUo&TJpOd~srC_~w=35+5{#@Q2Tjy_5_9gWgwUu9^V ztR%ZiElGdXL33gWsSomnQu->yuIA+#rPCn{rg?uRj!_UnrBUVh@l*h0k_v!`U|*^FGhD(B7G@C zOBa7oi3LhN0u>JNmTmE=F?tUvb;vwZ!ArGtRm0RumX_PS?m$94ILZCUjykOfV*r7oOrqpLD(vuA&s=(Mn=qg3t1#DZzmBAp>FGdUWAAL}qR zdqL<4%21b@rSQ_les_lNkTRXAkW=-yiUC!)V_wEBL&VvZv~>IS%#rGIvwQ5X z1Q=UCO;3viJyrPSH5WA2%iHq^8GFjPdfavR%1k{4gGagpuq|+^%poHjaTHs26sCW? zRvC0U129GalORgMm#gqUH9YTLyYDj(^_hqI%tL+Vp+56apLytoUdVd=stMKd0`Ucn zrx)T~D;3=$P@$p!27V2dreS@zQnj|eZP2XCg#9(@JogPsw9Qh^mLeW#uOU(2sK055 zggjZKA_DIw+NmIkcy69<2VSRI zqwaiKK6Ju4&JC0%;JPgI=M5{Prh?YXBWs~((dt!VILs{+y*TdlJ7^y~Ii7cEUhK~{ z?q{2txl%rf*M9dfKCRuI)=sS_Dvw?_!I)ej7^>vvtwd2;e9Z{w_d4l0U%eGcr&V?r z)@--J!O4+vkcUe%*Px+jlPYo^e?&vn;SDp%$Gd;MA%_i5zGq0ozUPTfvsqJ_8k^^R z$M^M{COiyzx?i@H`J$|&+9?HofWxgL911~yO73WIB^Q8$q!$%+DdsifPBLEB9m{`& zuAn^?h%q=u0{|IIW|)it=3oI?>Vi-%?O{ZNX&I7AsheB3BF(3D$>5_c;o|Ccs2cf09`n8Pc({qG>1u)W2A5(;5R3t2 zw}d4@fEXJkQM61MO*?u3784vyWFawPAi`4wAP8wPjL;^VBNEEF`M!GUL2IP=L=?oM z5sHO0J~}-XL%#%c1U^Cr?qHN4CTGJf$v$IvOrTJJ24I+QO(u!}O=s3RSUsr>~d-+5yydeyE%t}kY=V9(OJJ~kt{*?Cy-6H z@`uK5hQF;LtWu@41n z7a?A>e*1qBvNJrxT)HejLiPcnBRJ1qUdCvKlbL>SE_ca|cRPcPODzn_c}xZym5#gN za2}%ZUA%|)1Io~XPnK-_>VA4Z|9eDs7o*^xgW28gWJafaF%0jg@P403wep;euL3zZ zC-;~ujdpvmaV591Y6d<+_E~0`cstlQxfAQ)ic){x88m~e;D|Cw@mxvu?#4D{UUvB* zWatAzhpMgO$)9&9K4Bcsq&&A?s7u0#KpFp(J-WeWK(Ej!A%?O<7gDWI$V?}4%fpo1 z#84eJ^fW8ZrTk2@r<3CZQSYQQQByLThT_*1g5jSe(urH71Mg0#Nb)Qv7&?{rFSoa? zqe_3b2enTKcDP!twU<9#mXhwYobT#g+MjxYPGCIN^5;T{H6<67ejyHiW4S^C^$%13 zaK7>GU_1R!h{x+>D73y*l=X9>pA*@fAW0N`7hCO#I4zYa9w)}FUm)QFZjvl>o>X;5{g;}aP zXs2y*o*!&-Gs4BMloldwMzCs3wP^R~UbPGOc2OqTU54H4A5Qo7^#;>2lUHsJatre@ zyHXVrrPvdF`$q4a>w`yTTZUJHIkUUCwO(yMEqgn+L$#Aa*)Eg`p$z%cYXz}6NaC7$R7y2t4+@i-dXG_PALAE-Rh{~Th2Pwbh3tilt45G?}wG8 z_KDtq8oJA2=Z$G?k^RGD>>#tYw3Aht4ajp9w-V$ztA}5Oew%zD&`qf-`^5tWjA5B$Q;GZ zgA%`659W28C5+o%$8wj{Ivr)J2SDGnmhJivj3T-)5&!?mJaMA16fRq!?4?w*M>_Ee z1a65WO@S0&y*IP>X7=99-kX2f#qH7j7XDyC!197$2jDjQkA%%qopit8+miO-yGwwrL>)!k0(YHrJ;XP(LffcE9C?`JhRoJW821-d+zmKyDd z{88e`95EH3JLFn-S2493_embNkSOy~Q?~ZFeUH7D{xZtyIF zj6Z>Kv}~s)=%P*-<+{=r2TJv3rwNQ(4dF+`E8$x_b|FpTp|>C(NU9uTU2i~Hd%boa z!;O7KFTHXgQK(j>J==c*SGp`oq6lD;-9pe?mL!AiI~2+unqE>6A8c9s;0!M11%)93 zFbI+uawO==WG8|+8-RqNYMldc3dV@11#bz;-pP%%-!}Vg^9602O>kIifnoJnSU(RI zmOlz-4}eumq6fh00kGUyeHZ|&pIQ0eZAu}blgPrD<8_TtDUpANJ^-B2z{diW^3}Ee zZ#UTM1dwqw!X#vAhQR-tr!S<>Hh%_q(J7C6Rr+PB(q^qU>(SO%E=qKoMpfPs%7mXk zdU{65F&@*@^zv*_`%T#|s&kpQ-->KP54|0wmH8W{a(s5aJrz2^Z;Q%tW}B+gH;%Td zTap^9a3te92-Sb+A9$3rSxIx1n7Wd@N|SU;F2tNn0YdWGm1b}$EmmnFro{wD7K^9K z3?^#c0yiqc56X5x4iJ{%P+4KK!7AbmEKrOGY0+;|AhbmGn zMqv^l!0Izvqf7yUtg`tIM7?XAKz*Re59ki3E<%$vAMCb|lH+-JfRJKbSr2#v;c;xUqP z#hBvEW1CM;)yj0TpEmYmtYW_Qq!#8DYm|S8g~rFmQkY9V)m4QVl_!z66|FGeUY>US zswwTzm-Bxk90y4x6a5M;GFlpiv7MIPK+qlZxkO^6(%evO1NL*Nj6dpgb9+}nKsRxn zrer1x!0ujO>@-?pkd*{X78P&I=vF~SZ`~59=whX<%Nqh9Myj1)sIPJ)gyR_kSnx4| z0TN0oR9a|2!w#Wgdxgebp(#z1ije*C7cL6R2ONKWk=I-F{`>()=a|?(50jYi?B^K` zruJ*A;_TrSVko{t$CwS1*uW}z?($jHzB0eaRg3bbl`V?u?rTx9+-og}n9+RMo{fX1 zJRZgobQEDkxOkMb%(+)ZX-!mdc}&$lO}aqw>aDMWhwcnUH7#^Nqpjr2HW!7ELlD61 z?xcU(tV}=UtwYKn6l*+LfC!J5=1ycvh{Iuo47pp9QF@UEkA8#ouox7VUD-lV@rA?a zZ$Hq$KT)~+x+#y0kqB34j2VxYSCs0BxrXR15c9|^QYLFMl}T@!a>?jvA9tVy#*eE1 z#Sf(U#VvHcxYzc2ZSM(-)?VA|MzX$bO4srgV%{1zNf)k@r5QrfE=Vxp2m9TDCF!cW z6Qo&NJb;o67j0pZwsd9`eamM6FjpB~7)S`mQ7)$njAMLbm2a879-+hp9q#o3$2Q}(J zje1a{9@MA@HPXkyx7&3Q7MXk@)f>Y2Trvl!8wdu>l3={N_C=fO=}`uEa;4%=GAPfEH7oLEi|m);S#VV z3FPgs&rI98&^?clL~)Yl%U+duwyMO7lN_(=t`sjxpfcLEksGpPh1B>B{Q7(Pe%0Ya ze$HjlSa{@%SjNV0 zZ|`i%|8KUp-^u^~cVn<|qSF3Wzf6rdc`aS6-!JFy=ko}QCFPAfkn4Y^b_p|0XL=$j zsl;JI)I!lGA>?S2;~A>Xyx7j#Rl1?Z3wE%^M3ymk=P;Wie%+AG%WhJ9T65vW-CcWo zPU#AHEu1+WNn{zf^p%7XGyHE=A{530vcGUqSV2D5>G$Bp_ zldk{-1TCT^2x26?_{x9eq z7%`Xo8V6IgK)+ml&{t^7-U%U?A`}QF(rdO~F*%|MQR(+r6h1^SpyY(`7;BcUs7#S4 zcAaC$VP&~*15wE(z2=(sU;l1czupWsXV9O4q~yep{XzA zzTBk`#}L+{T)QDycjPtU4k;dH(3k8h-0Z5nhjC1;3nIGbywM9lSTJa#Sq zfyUx<0wd|X&+ZC_aX#JS4Pz2f#XbTXWDnBoL2gsD%AGai{7MZ2l zxGb8y^4m_F=Lk3;C|U}2XU)zJM`bSjywdcdr)yj5LvMevKHGcyx(=~mNrKO02IJ}b zC~E8QvI$h$uNw^;cIhrG8wGCa%^JCi=Se(9($l4l7Xb_=XaHt#D%KC?U``ps!$?Bb zNIN#C>b`-*N4&!{VbL-lVzai1`^C-EH+46>)A3qwlCJHSP04gORb70uS+xnN^Uqe! z)S-l8!XbY&_aT&{7QivYy-&9H$vzv&@wV@x9l&2{U z_P4idE)Rc&QH1y*j35d8!!&ZG9ibS01HWqL6dr${65b>Xa^xGJUu=3_xGzQi>*Yb7 z6+6CTsGsS;jvUZ}0fsa&AQJ?`6jE~1smAf-@Dr*Qrae$K5-xq&0{|4)@J`K*4>dQB z(Fi6HuLH1gTgrJN)xlRDP)=1u9|*#!hX1D3T;Qt;t|>ddhU#N;i+v#}tRJ-1;|_JS zICg()?kAX`j!=s*M7yx__EvjdwyCXqTrP07YU9$ChVmZ;bF62$ykpRIM*s91(hEBl z?r-na1o^9Ja&j*wUdv^o3cG88I!5Uav|N>`$EM#&EN_9~RjWtWY;O?r7~esTz!XWq z3Tr{Fu|fRw%PBvkbx~>AYnPxjr4N#Fav)w zm!3xM>Uw?ldtZ;r`*>33b9mJ6YkQV1<*(>kBFk%D1P%z(p zbuitr{@jdEI7aa;(e04Xq$HW47zZ#i#dpA_U3wR6g2S_GpQlkxN7ZNm8(Fj3MZ%hU!uk9FDZZN zFm>INo7lY}`D}k@yC%L!&l)@?ZPyPT6Q8UOe|;M+x!7EP58~yV)2-_aA$ZmHDn9Md zpsZPMPTgSD%AE`!RpT z73U{=we5MR1v@*95mI7E4Kzl3xu$<9_=q=cH_|0Dx0xV^LjBlH(ixEYZUtV}CRe#< z_$Z1$0}bB`z$(jOHv3#eijMJC_u6l$4dw75rZfBZ1tkGeAAXUbI0~!aBV=cIh81qZ zN60=PbOh(w%gY$ea5B>m&SiE9iQ03ihoB0)x-tp>a5xXq_%7bV`vGNW!6$!9Hhy(K zy`TR*BD;%G@Xx{QZg(=HQ@$96_fvSk&o;jMCb*TY_PrTtwYx=8-G7c)%xQ=E)@1tL zr5-)lPIvtDIJVtKsDDfJ{PQkmCi}zfS`FUroFuMWy~U3_;pSh!avp4CYLg>`$Ky#8 zYiN2I)XSijGRVH!Y|s5CtLlG0Q!xGgo!!RJYI6~2z1ZpkmAXTK8lE=JfNqGj zW|bka$ep={nT5+h<2O(UjT%}lL;(#|3^oJ{6h)i*E~9QlXQzT64)xw!`5$ma?={AQ z%haj^^xovwExEBSV1yJgnOJcG@5}}6ml8qu^vt4-Ny>WbXCD>WmGs`PyQYAK zdq)vQgd2U^TZ9)WR7WqZPHj{o)J=Y)D*mb^@|6uTE=zzrRb=h3q&^u=^Ync6cH{f^ VZ{Poa00030|2w9;9DD=$1_0VHJ*@x$ delta 32162 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 Z4>rDk|Mva=2LJ&7|3;wZ-7^F61^}v!%as5C diff --git a/build/openrpc/gateway.json.gz b/build/openrpc/gateway.json.gz index 989597d3ae33dab69b31a310b3b0c972ff7decd3..1b78f6b0a06342db6e379a7eb04752617b8165f9 100644 GIT binary patch literal 11931 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 a@vN`+`}gBtP!N!xA5I0>>C+@IkpBe=RCRm+ literal 11870 zcmb7~V{j(Gx8`Ff6FU<-nb``@jtt=hUDZhtsk)zx3R z>(r^|oaaXv4FmF@^?l`Q>Acyxa;Lw4_m$*=uAap){Up-;=ic_}eM8RqR+ibG7&S>j zxma4bH6`Zzg9SnmRR>ZqMP}2&EHeTE2{V`A6#tX82gl_LV2U&~Bj;{DYXcY~@I2Wo zi$rnD=VBD_^!SOrsy;gMQRUoZx+5YWnETuN>gH)@{cgv{2A~{4nM;rnTqhulB{Nh@ zm;g@yql0G@Entf!A|8LXlSR7}5qwgDMP~o=c~#%|Hj5{-EA5_w(T@upn?K+f5qOH} zXI;$Q2WUZ@bY{}o%Q1d;pUiMYfM4es9rLs9euHE%XIvw$5fC;I=`$7Fefew~nYF*+ zh!GdBcfK(?>*|-9oqE0I7!pIWeL?&{p7rJMSzwm){azU2cwC=)WNIFQir@d%$YPGL zH@kN5vhVAN-`(o_`#xy{81UhS{JVgk(S~*=0{%MZz-L28%pTCiN@vd<`U@#0@f6P^ z2rT&KDsG+GydPS*lfhYFYk&V?dkP+TT@uLs3~83LW!ID=Jx%s$D7%M#N0@6<7ai-2 z*NGjA{N!98muUOya55Ayg^dmBB7SR;MeH>Cq};Iv(t15a6wn%IWWh7S#g43bioP-8 zU*y#i8e3vx(e z!v;D)w#Cs7vIqb_U-`tn!NaES8Y1iu%6~y#OYSlK@dUi9$J!b=zp}T#pS9_IDsAcu zUqsP~^ZG)$m`?Y8=@nI8a~;pZ>fAlfk->e z?OcO<0^cw3!E4Ht|C)d3X{9p)Bb zg?xi7yobmFZ?bKjiocR5+qQHs#N@y>@VNFgalgdo0rLS328r2cYbMGJwXTBa1=k_{ zQzXxEJ8DcA2O37aq%BOQO2{WVPL05rF+=5rOx7o4Jby#TD`0a2MoA_D7G$@H0<#AV zGfoNLM_O+?NEPUO?9Fm!9F!IEOZz0o`-!CuA+pw`RA8FA8Rcyhxuah{w=>N=88%Y{ zxu365J0(;UpKJ^6fyi*+#)q4%c}A;oH(pBL{*|NI0d)F{6(wxZAgjrowU*r%2=dCW zk#y`}afjb3Fv>tqk>j8|97)-&Y5RbKtA$8r7)WC4$*)|YdxSZ1v>LTNRYN%hveb!H zuiG(>6#qJNO1rYV+*!7KkPYq#2%O{VDCDv=~6Ix^0MQYcj=Y<0y8Y4DuT?WMZe zxR`gyq?oOV#x&fqr&+$DoOSu939kMFVSn7m;??28(1LRek$$%0HUr!_=$;Py^Zhb| zb-khcypGhYsyFLRkF!ocXYS_9^~_^Pzl^AV?i*uju8w6_o9_D?yOYQG_S^Tu9k{ul zsix7*^sPPm5E}ra(O&@^T(Ms&@T1Mh>TC_m%gtfm#H}sO*s?~UeI0{E#W=c@f1Di) z#lVGc`)N<;f7e6({juOoFNyaTHk-=?Y7Ym7zks@Mfz%($f7`Ziui@Z*(eUa7ya!hkZD}AN2`TJmL%C1YD-bJ}A zcVfc~cftzg^SLYJNfw*|bFi=djyUjLO^oPtCI7fFZ8Ft~You)p_+YR0+t`Y3>F55l zH1FT|-M%)GyiIj#edtY>@jY~M`Rz;*RZkgCpCw57PKVKGWd`oJ~rs-iheA{EM0UZYQY8Q9)NDN*@ED8@L z3Skezhg*krX0z=p78*T%VFN<>09vb``%*1bQhU^J$c?2Ai2K=DWZcY~loOs-icQWJ zm(^G@^|wH8_m9J!t>=O-WB+D{kHbE9Z@#Y6XYW_SHlEAEbt9(x+nRAcR@le&eiXq* zOWhvJ%gDhHuP6wEi<&w9od<-~cFIyrrjCr9`iD75U4!A%CQZvf;_3I5Jzzrfn^l{TngXp;`mOEQLgt7lI+7T7?Hf|IW3tGaFr4H ze&qRidGlO0>Ulm4O$3flsCHQ|N7*IeMenYSc$6$VOUCr0hCncIY)7=X8Oa?cN+V6Y z8WgLWx5oCuj(*k-Q_HvtuF{hXhAiV70yT%Jc%oP1*EZCw zVqNvTNJPF_&G8qidLuK5Hl?)f;YI6AuFCjkT(@Ej5(_)?^`T{aO8m$y*|i^FFM!9G z;7T%JJo1_qJ~&ucTyZe6oUa#3R;nDU2gbr(Jx$ArRh()G@wFBOVz|krWk+ipde85M zEMb}vd#R;3%4JrZvDNZ>O6hPXX^SsiQScBs#^E9e6Vifm``I4*T{aq_&@KNn0e1R{yl?vj}6m9|2&JkgrR8`+Ne z?2Zw|Tx2TV=Xi4TN9RKQB8K~1H@AUZa;Lg&-kbc`E?vQXFS_3Lb9QBu68`qbl}h1D z+~AyBuT?78Lo*D=18^yg5JnieEL=cok~O*eqaIUFXLWwu%u6kq6#YIC-U2H0))KIi zC=#xSRIpxXkBZV0yb{mW^YpOH9S{$!#ZCJ&F!AQ z<(u|D!moRJ{JK_|76*jK`&4u;xdh%{(zqa_o#C1{?EuP0PJN97f(*3$<*N*lKe&g{ zjGlEc?XRt*kG!zZNaMNk5~E+l;%tay`)^nEFb$ps8&d0caHoPO`^n z6=4elc2dog)VcV0|KA%L>VS9VN2Y)LJY(PLc+v* zCg&ma^^xXH>t7g4$P%nM3c}1SGFRh3?BD>mg74mkL@`thtZN0>*aggShAg#DYle-F z#?(DqHHeDhTFnL<9YA^_JwCe;2J{7iX$!BMnV_38Sqa&?)%ue672h@Lttt%^)h4_u zF?cGS^wexZ6i&K`U^#|UTiK~$r{|M$i@w5P%F?6 zh3nBr?RSo%ECUr+4%o+0aJ+EnnMA+n1D}01UzuU^$Y;Y-DG$OkFG@+&lV3z~chaV& zz>E8N1`uK~2{r?j9|S}Cec<>n0l-5D6$AMEEBZl`W-1Yg0_%fd$q*qu1s8N*BQ+;yXWDUn>leoxf^Ni&AD34_YE_l!RmBgZQFg9!Ap{n!)%M9?0k* z_b`jo;B=2&t>p3$pjH#JN9Io4MClOd>o5pu6+-B!NSW5rT*(%g`#0I0wxK@}0m}(klWo3wa^;vP;)AeO6FLLjcS&b>qQ(?QF${~_Uto2tfCMu1D!@j2XhK638>Tbg)mti{5T|uvw zf?`E}$Af+c1Gvk62sc`tW8DyHkyfIaW~M1W+~~G>eC#?yq-L(BYEuaUX=gU46|cNJ zRfIc{Bi$-jh;6GPRJv*H-nrc>6%o01wSdV5G#fK&vyvLQ|6^>o@8Rg$FJ1t6e_COF z=`gBFANEN~zN~bAnnb_0QW`MAJ z8d`+>Betu~6WqW+VhZH8wM|!n3AWM%_H+NR`KC(i!_@1S6;QCzI z7{}9&m!4hhqS144m{$l>Iy;Fb-(pfkz2f-$PutybXqW%-;{df(Z;8jJc2+kb~dgBF!Rp5=lS_WoB_*6S1=XHc{8O#ONn+j^h%$|FyG;>=(8_6&CY^fiWeciqr&pjBUA8wzQezD|0aD+Qv z$H8#?QE1FKy5Hjf&ByaCQ0(oYCK<;sn+9J_T%l;T;2o)#q9gc~0W|R#6;G=Pp$ECr8%0 z^Q$y+)PA!O*k{Cj9ES$h`TX!sJFTZG%b}Rvpy zysg$K#r^pq`#wHGVDev|)EKH&m8Rm6rsA)MAZm`^tHL)Lp~UmKRrHW63TJYAVLKRAQwN>Tv=W3^=+RI8uX-3JKTfupykoc!*0&a%zn`(t%`pI0%wE%{z z&#_x|cE$cIxc4!g&8z}=M?(LtEP)!E-Nnb6C*S_|E;i?@Qlh6GTl6S6pb(Dwj zXi6+4%6CABLq}}Teq*>3?1QA>@4IRcBhta)VTheHD@*}b##65rhmO1LFnl3e^s<=t zScs(G|RDP*qaMpV)hu5Ultm_&RoY1~a0Ttmo>;9Sgv zEq`dZ*|Bj$4WmeonNVHRn1~d&*kx9M$cp6ug(Q^THwi2qMpFK)5MubNOf@ zt;B`eRMb&|QANj<#41T^uCT?k-K@6Xw7}b!vVlmXn-|waVS=7%2v4`Cx@wzrh8O4> zLu7QoKW<+^fJi*c;~ZP^V0q#-4=v5Z$=B#8%c3u9I5pp4&1*-JP*t24$)1=_;M3`G z-Iv7wl8|to%>s9sM57ky8o&+Y(6L9Em=zs_S@2gNurCt-5DFf$a*>QI{fk@Cr=Ha4 z2^F*mQbgU~JcFEF_@{!a@$ zjbAuHgg#c>!8|yW`1qN^$MgE`M-8^HMm9`w;0f*C(uB{dry0u>MPdKIZ{gY2^A~wW zOwd)V?2APlJfyS$lucNIeG$wKt>b_ zCS-{d7J|T@v>U=iDZU2%wggvu0YcF*CEZjLKy*~`@er#DDV&X4}jy36KocW2gyEq~d)KL3wt8^Gu(<-Q7wjWuV}{_DuULJs#`>UY^!%cr7VMcsX3lcx0e5($%q}?{0?)u-zcA_`L zR08S^??lI6!*vgFy@&G7aJHffHW4~|4Dz~@O^G}dgiHb6zBAzfe1a{n2iiB~;f`(T z1m9qkZdEO{v^Us=Gsun&K9YQcPtUlq^DX|b$J#yr`Mi2?jeP2NP|{BX^IuYE^AN=- zzgS!pS>3vGr{8LMyt~Qq|I#?NtX33R`N|iTd#O2D4wOP>VcJZi+90;Lx&5wG(jmfn zH%BH61j+3pm0y_~2QoA{KFGCR>C&1~%s@IN^2F__uXC<7MAh777M{wg z(C=e;*+j(cn#1HwJRGf@D#zHQPR;yepjbHF&;UIJi~G3L^4Em0+T_~xghmG=61_%? z!E#Uwrgy00C;q8SZk>ZG`a93!f1H_p8?eF4Komjqr?^&}u#uKw1IAV4W<+$6O{STK zz=)6x;Z5vchz9ku+spxuSL<`kJG?RpY)lE(MGnLNpC{AfZ4I)@9^i=5ni*iwm<;^0 zWZXl8C16?J>8zo||41Tu$P%%;3w{((03IIzuA);tY+yoyxs)6z4Ye!Et?AM(0t;hb9AFbw)SDbp&ZQ#EI^V&}4>b{?)dz+b8 z=DF>(P~N}}$*E6oUg z*pzPZ)X1*ar|(3ltQZ0LaNB>7D7!w>q9|uI!G_#%EGddVX9Q~b!y|_qS97v`dYqF0 zw5Fy2N-{=IYMm+$hs52-ST>)}U4>5shw4&Of>;JhK|#ksM12eqskU-WvQBYRLd(r2 z9?|J6YjgC8CsBFH8OsnNdyIIBnV<2FNtOmT;VLifZQYgk^2X!_oEzPf&XX>K;P(pl zUKzPjoyqCvg%jqFck<=IU&Mbyzz}pHp|N+{Ugf$~LqR-Y*iu2KWGZ2?w$Be-xm>pB zsj*#fq*Y7cx07>+%dxk06eD9&(_8&n`T$88Yt_-~hgsOU?}HIxB*%JEdM}7j*u8CZ z_BYHqqHruM+pEf<&NUPFTr75>KeMMp69*nXFPc%SQ}?c^2i_PqpBQ!(Zrb#dq9kBG zu{k|4#6xaF3COLUF_x-1-EaA#s##-6NaUCD55|UGkpa~vEWwnl}&6M0&z%x z6?x6SeTKPkz1}ePs3=VNNtf3=3<7O09w%1+fj{<0_z%;7aP(h{xjsgAXz%OSz68ka zsc=k(><`NAnN#mqYb450W2Y`8yfVo(*-V=)aAtl#(2#L*l* zLq<9qrnV;08d7vCnv#JS+&<$%@)|;%^wGsD73~Kq?gysvnbMS)Nq5LL`trnvpX5*b z>OVfxU?`|*6s=wpk1ADG_cn@5&h%!!uvo~QL5YigCepq4nK58167H50nK=z!6cRa> zw$ff}8uv-pn#DWggAq@>>wekN8t{lxMiD?ii(3iUI%xz8DH=7SBkE*DJ3%gD2MTAg zJ1x|rUYWhppIG=QDe$DZk7!zJ_dnO?1c3O^24~=>V_99TPtO9hplLtLk>+PG>TNCb zi7f{3o`Q3k=JHbp`=1;#=w4I9kyM?lI9=#*fB!vl9Uft2&*%HLW!GrwYy;q3wW1Fe z6^&fpGh?CX*opkcg;kr2`xG${>hW1{-=V7LowzuJM-dArFUi3UZsx^fo|ct;A_Fn8 zH_7)pJNA)2nqIvfA`c_yC@4&*i4TDE=ZBNbHj#cNa5u-?IKq?9!dhy$a0|mmW2Zb} zcVYq`)@(qW=}1lmhj^|jeU9Lbt3cnjnCwAAb~s*$kvk_JPZ@HP`obTio+a|LH)N16 zB6%RY=+?uhf(IcS`>li*``%je2`>hT>uO82BLY?hcQ@(P0G7gjJ{ zgT)d}nwf~2hMbB<~ua zeDmv0&2f(}&UcC;H595&~ z4t<;3`r49JrWABhAkx>6>&bT~}3% zUAbIPv(>VW{F5NdU(M`p;0_{MaJL28a0Q&&bAbG&ZDTDIJQJJdgBR3Z#GrBqBeIY5-~U=eXrX&R*d8 z6np?$FHvX?oON>5&qRun!Zoh*yg3O{2wUc%@+fBK6N=OQ83@Lwf+QA5hB zasmcVUdN>HdO~?UWP_CYKG8k-Xyd%4?pQ_#jU{$FLHh!MApW`Q`(=|dL;s+SFRBf& z3r@mj)4Kk>zKopkp5Sy4GNDM{~#u+DS#sg#R-!)%@##_hV4RUJdKQM3PPU)kswuR6K$gY$80dFLBjvDberrzHtW4i$SoC80c2R#^fXZ{dd*l-wFyQ@1DXK zJzr!T@IaytwvZw*q;e%iAe~Lzx#TXnpk`(>#Vn`t03^e4F@^GVMMia$9Vj(XW1*QQ zce<`)*k@?v(LiaR} zACSHBhE*Xh`c3F2V3Jde#In{dmXDWnClTxtt>-4j~!e*g)gJw;dlsI7#D9*YIKw z%=IHIMWG_cB0A=K8H=ck88?Wwsl()DtCQ06cyH}ss=J=Z3M3OI;j9>bNCM957~47p<2%!&mrPeTuO=gyH2e zlG8~xMk!rpf602-@4xPfO45&~0+Zay8Homy9H_AYWH8Sqj@Lbvm5S-e0v>+}I_~sB z4V}N>J)X4>V`Zt6t=p2&oNZ|{9DdgG(#p;HZEm$ius>E!_@)g~fOP{5qTdk>5r=QS zDwC*e;tRU~tAY+t!o1MW2Wupu_UuW08=&pORaFIR_oqOAiMTi06 zE^=?4M(!|zC!)v7M`2i@*Op_juj6y4a1Z!gl$-|6g zPLagbUV+;P8t!v(60jVXHK011AW*PoIserpttei;eO5xb6%ZYs@i2@pFoYi1206a^ zTBGS>4RAtW;{5n?>wbA}ct+@Bp9%L{-cI8Sjq_2mGBrPnGceRf=TnFn+m)rl3 zG)g|Z9!m4{B3u|~Io zWG+raH0rUmvE<4>WUpUnvMN#{`PzDn4Ayk5je_+An6_ma2`xnXVREt*h2#aOT!(Q< zZPmnpgzB*o(HJ4Bj1Whp;ip1$XA~R;Lk=;N9^$6tnYJ=I$1kF-5P2!n9x*yuo9C2M z>KnHx`pN>o!FSYO2}KcwaoIr9WA1%c9LVZ#{IS&ntNRN8zH4a<^|_((@Ne#xTEU*= zxFa*KTpIy7^6JnqGA2;~vAEi#nJ2Y9(s)q;C!tyC2BrpZ#lwb{Np;yn)kyHSQUfZf zJRqhqy=NQ-G_J;0!>IceB37=e((VEgqL&R;GbyTy^QLBxo&u{Wka&YD7vw1E>?n=t z60e|AL8W|Vq@nj_OvwR{edFUV4za8 z2F+CI{-ak?>e0DFrRNaI;2*`Si-{cab*&w3wXSliCgo7`79ii@tbn20y^MUp_?-{S zzRCAjUB2 zvho_O?jb{Pv(bbFQqghr(y)$5HIQvojm+4I#iVqB$H<)-vUwThrKDnFyYhWqs>cyR z7oR_~N>@+|!eY7`xsab}5R1l0oi+U3~lQ4=?xqJ*bIPj-sCIit)j$ zXHVSFUv87UPX9(85Zr+f^!DO|^bP-{lF8sCqd5J& zdI|Y(bTMNj!G?t5&)Ouorhq8w`>eO=l)|2%H#Q*!X3&J~>(>SlxU%8{_$vMlt}8%% W{4U`)0|?0Xw*#MSs8K8!$o~Q?m__LT diff --git a/chain/types/cbor_gen.go b/chain/types/cbor_gen.go index fe8e7e3fee2..9bd095f57ad 100644 --- a/chain/types/cbor_gen.go +++ b/chain/types/cbor_gen.go @@ -2395,7 +2395,83 @@ func (t *GasTrace) UnmarshalCBOR(r io.Reader) (err error) { return nil } -var lengthBufMessageTrace = []byte{137} +var lengthBufActorTrace = []byte{130} + +func (t *ActorTrace) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + + cw := cbg.NewCborWriter(w) + + if _, err := cw.Write(lengthBufActorTrace); err != nil { + return err + } + + // t.Id (abi.ActorID) (uint64) + + if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Id)); err != nil { + return err + } + + // t.State (types.ActorV5) (struct) + if err := t.State.MarshalCBOR(cw); err != nil { + return err + } + return nil +} + +func (t *ActorTrace) UnmarshalCBOR(r io.Reader) (err error) { + *t = ActorTrace{} + + cr := cbg.NewCborReader(r) + + maj, extra, err := cr.ReadHeader() + if err != nil { + return err + } + defer func() { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + }() + + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 2 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Id (abi.ActorID) (uint64) + + { + + maj, extra, err = cr.ReadHeader() + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Id = abi.ActorID(extra) + + } + // t.State (types.ActorV5) (struct) + + { + + if err := t.State.UnmarshalCBOR(cr); err != nil { + return xerrors.Errorf("unmarshaling t.State: %w", err) + } + + } + return nil +} + +var lengthBufMessageTrace = []byte{136} func (t *MessageTrace) MarshalCBOR(w io.Writer) error { if t == nil { @@ -2459,13 +2535,6 @@ func (t *MessageTrace) MarshalCBOR(w io.Writer) error { if err := cbg.WriteBool(w, t.ReadOnly); err != nil { return err } - - // t.CodeCid (cid.Cid) (struct) - - if err := cbg.WriteCid(cw, t.CodeCid); err != nil { - return xerrors.Errorf("failed to write cid field t.CodeCid: %w", err) - } - return nil } @@ -2488,7 +2557,7 @@ func (t *MessageTrace) UnmarshalCBOR(r io.Reader) (err error) { return fmt.Errorf("cbor input should be of type array") } - if extra != 9 { + if extra != 8 { return fmt.Errorf("cbor input had wrong number of fields") } @@ -2599,18 +2668,6 @@ func (t *MessageTrace) UnmarshalCBOR(r io.Reader) (err error) { default: return fmt.Errorf("booleans are either major type 7, value 20 or 21 (got %d)", extra) } - // t.CodeCid (cid.Cid) (struct) - - { - - c, err := cbg.ReadCid(cr) - if err != nil { - return xerrors.Errorf("failed to read cid field t.CodeCid: %w", err) - } - - t.CodeCid = c - - } return nil } @@ -2747,7 +2804,7 @@ func (t *ReturnTrace) UnmarshalCBOR(r io.Reader) (err error) { return nil } -var lengthBufExecutionTrace = []byte{132} +var lengthBufExecutionTrace = []byte{133} func (t *ExecutionTrace) MarshalCBOR(w io.Writer) error { if t == nil { @@ -2766,6 +2823,11 @@ func (t *ExecutionTrace) MarshalCBOR(w io.Writer) error { return err } + // t.InvokedActor (types.ActorTrace) (struct) + if err := t.InvokedActor.MarshalCBOR(cw); err != nil { + return err + } + // t.MsgRct (types.ReturnTrace) (struct) if err := t.MsgRct.MarshalCBOR(cw); err != nil { return err @@ -2820,7 +2882,7 @@ func (t *ExecutionTrace) UnmarshalCBOR(r io.Reader) (err error) { return fmt.Errorf("cbor input should be of type array") } - if extra != 4 { + if extra != 5 { return fmt.Errorf("cbor input had wrong number of fields") } @@ -2832,6 +2894,25 @@ func (t *ExecutionTrace) UnmarshalCBOR(r io.Reader) (err error) { return xerrors.Errorf("unmarshaling t.Msg: %w", err) } + } + // t.InvokedActor (types.ActorTrace) (struct) + + { + + b, err := cr.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := cr.UnreadByte(); err != nil { + return err + } + t.InvokedActor = new(ActorTrace) + if err := t.InvokedActor.UnmarshalCBOR(cr); err != nil { + return xerrors.Errorf("unmarshaling t.InvokedActor pointer: %w", err) + } + } + } // t.MsgRct (types.ReturnTrace) (struct) diff --git a/chain/types/execresult.go b/chain/types/execresult.go index 4556f7b88ec..261b3328e83 100644 --- a/chain/types/execresult.go +++ b/chain/types/execresult.go @@ -4,8 +4,6 @@ import ( "encoding/json" "time" - "github.com/ipfs/go-cid" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/exitcode" @@ -28,7 +26,11 @@ type MessageTrace struct { ParamsCodec uint64 GasLimit uint64 ReadOnly bool - CodeCid cid.Cid +} + +type ActorTrace struct { + Id abi.ActorID + State Actor } type ReturnTrace struct { @@ -38,10 +40,11 @@ type ReturnTrace struct { } type ExecutionTrace struct { - Msg MessageTrace - MsgRct ReturnTrace - GasCharges []*GasTrace `cborgen:"maxlen=1000000000"` - Subcalls []ExecutionTrace `cborgen:"maxlen=1000000000"` + Msg MessageTrace + InvokedActor *ActorTrace `json:",omitempty"` + MsgRct ReturnTrace + GasCharges []*GasTrace `cborgen:"maxlen=1000000000"` + Subcalls []ExecutionTrace `cborgen:"maxlen=1000000000"` } func (et ExecutionTrace) SumGas() GasTrace { diff --git a/documentation/en/api-v0-methods.md b/documentation/en/api-v0-methods.md index 2eb683f2c78..7a8b50eef74 100644 --- a/documentation/en/api-v0-methods.md +++ b/documentation/en/api-v0-methods.md @@ -4878,9 +4878,20 @@ Response: "Params": "Ynl0ZSBhcnJheQ==", "ParamsCodec": 42, "GasLimit": 42, - "ReadOnly": true, - "CodeCid": { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + "ReadOnly": true + }, + "InvokedActor": { + "Id": 1000, + "State": { + "Code": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Head": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Nonce": 42, + "Balance": "0", + "Address": "f01234" } }, "MsgRct": { @@ -4907,9 +4918,20 @@ Response: "Params": "Ynl0ZSBhcnJheQ==", "ParamsCodec": 42, "GasLimit": 42, - "ReadOnly": true, - "CodeCid": { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + "ReadOnly": true + }, + "InvokedActor": { + "Id": 1000, + "State": { + "Code": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Head": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Nonce": 42, + "Balance": "0", + "Address": "f01234" } }, "MsgRct": { @@ -5118,9 +5140,20 @@ Response: "Params": "Ynl0ZSBhcnJheQ==", "ParamsCodec": 42, "GasLimit": 42, - "ReadOnly": true, - "CodeCid": { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + "ReadOnly": true + }, + "InvokedActor": { + "Id": 1000, + "State": { + "Code": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Head": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Nonce": 42, + "Balance": "0", + "Address": "f01234" } }, "MsgRct": { @@ -5147,9 +5180,20 @@ Response: "Params": "Ynl0ZSBhcnJheQ==", "ParamsCodec": 42, "GasLimit": 42, - "ReadOnly": true, - "CodeCid": { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + "ReadOnly": true + }, + "InvokedActor": { + "Id": 1000, + "State": { + "Code": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Head": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Nonce": 42, + "Balance": "0", + "Address": "f01234" } }, "MsgRct": { @@ -6518,9 +6562,20 @@ Response: "Params": "Ynl0ZSBhcnJheQ==", "ParamsCodec": 42, "GasLimit": 42, - "ReadOnly": true, - "CodeCid": { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + "ReadOnly": true + }, + "InvokedActor": { + "Id": 1000, + "State": { + "Code": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Head": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Nonce": 42, + "Balance": "0", + "Address": "f01234" } }, "MsgRct": { @@ -6547,9 +6602,20 @@ Response: "Params": "Ynl0ZSBhcnJheQ==", "ParamsCodec": 42, "GasLimit": 42, - "ReadOnly": true, - "CodeCid": { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + "ReadOnly": true + }, + "InvokedActor": { + "Id": 1000, + "State": { + "Code": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Head": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Nonce": 42, + "Balance": "0", + "Address": "f01234" } }, "MsgRct": { diff --git a/documentation/en/api-v1-unstable-methods.md b/documentation/en/api-v1-unstable-methods.md index 6c315a92d39..7d867c6a058 100644 --- a/documentation/en/api-v1-unstable-methods.md +++ b/documentation/en/api-v1-unstable-methods.md @@ -6375,9 +6375,20 @@ Response: "Params": "Ynl0ZSBhcnJheQ==", "ParamsCodec": 42, "GasLimit": 42, - "ReadOnly": true, - "CodeCid": { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + "ReadOnly": true + }, + "InvokedActor": { + "Id": 1000, + "State": { + "Code": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Head": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Nonce": 42, + "Balance": "0", + "Address": "f01234" } }, "MsgRct": { @@ -6404,9 +6415,20 @@ Response: "Params": "Ynl0ZSBhcnJheQ==", "ParamsCodec": 42, "GasLimit": 42, - "ReadOnly": true, - "CodeCid": { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + "ReadOnly": true + }, + "InvokedActor": { + "Id": 1000, + "State": { + "Code": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Head": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Nonce": 42, + "Balance": "0", + "Address": "f01234" } }, "MsgRct": { @@ -6615,9 +6637,20 @@ Response: "Params": "Ynl0ZSBhcnJheQ==", "ParamsCodec": 42, "GasLimit": 42, - "ReadOnly": true, - "CodeCid": { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + "ReadOnly": true + }, + "InvokedActor": { + "Id": 1000, + "State": { + "Code": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Head": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Nonce": 42, + "Balance": "0", + "Address": "f01234" } }, "MsgRct": { @@ -6644,9 +6677,20 @@ Response: "Params": "Ynl0ZSBhcnJheQ==", "ParamsCodec": 42, "GasLimit": 42, - "ReadOnly": true, - "CodeCid": { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + "ReadOnly": true + }, + "InvokedActor": { + "Id": 1000, + "State": { + "Code": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Head": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Nonce": 42, + "Balance": "0", + "Address": "f01234" } }, "MsgRct": { @@ -8144,9 +8188,20 @@ Response: "Params": "Ynl0ZSBhcnJheQ==", "ParamsCodec": 42, "GasLimit": 42, - "ReadOnly": true, - "CodeCid": { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + "ReadOnly": true + }, + "InvokedActor": { + "Id": 1000, + "State": { + "Code": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Head": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Nonce": 42, + "Balance": "0", + "Address": "f01234" } }, "MsgRct": { @@ -8173,9 +8228,20 @@ Response: "Params": "Ynl0ZSBhcnJheQ==", "ParamsCodec": 42, "GasLimit": 42, - "ReadOnly": true, - "CodeCid": { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + "ReadOnly": true + }, + "InvokedActor": { + "Id": 1000, + "State": { + "Code": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Head": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Nonce": 42, + "Balance": "0", + "Address": "f01234" } }, "MsgRct": { diff --git a/extern/filecoin-ffi b/extern/filecoin-ffi index 4176a1e662e..b715c9403fa 160000 --- a/extern/filecoin-ffi +++ b/extern/filecoin-ffi @@ -1 +1 @@ -Subproject commit 4176a1e662e865834bfdc5861da921dc2d272b45 +Subproject commit b715c9403faf919e95fdc702cd651e842f18d890 diff --git a/gen/main.go b/gen/main.go index 942b3ac2c05..d84343739ea 100644 --- a/gen/main.go +++ b/gen/main.go @@ -38,6 +38,7 @@ func main() { types.EventEntry{}, // Tracing types.GasTrace{}, + types.ActorTrace{}, types.MessageTrace{}, types.ReturnTrace{}, types.ExecutionTrace{}, diff --git a/go.sum b/go.sum index a7983d80cd1..57eb9bcd1d3 100644 --- a/go.sum +++ b/go.sum @@ -1821,6 +1821,7 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1883,7 +1884,9 @@ golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1909,6 +1912,7 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180202135801-37707fdb30a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -2014,6 +2018,7 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= @@ -2022,6 +2027,7 @@ golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9sn golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2033,6 +2039,7 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -2101,6 +2108,7 @@ golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846 h1:Vve/L0v7CXXuxUmaMGIEK/dEeq7uiqb5qBgQrZzIE7E= golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/node/impl/full/eth_trace.go b/node/impl/full/eth_trace.go index 9d24394d7e9..986de034a1d 100644 --- a/node/impl/full/eth_trace.go +++ b/node/impl/full/eth_trace.go @@ -67,7 +67,7 @@ func buildTraces(traces *[]*ethtypes.EthTrace, parent *ethtypes.EthTrace, addr [ FilecoinFrom: et.Msg.From, FilecoinTo: et.Msg.To, FilecoinMethod: et.Msg.Method, - FilecoinCodeCid: et.Msg.CodeCid, + FilecoinCodeCid: et.InvokedActor.State.Code, }, Result: ethtypes.EthTraceResult{ GasUsed: ethtypes.EthUint64(et.SumGas().TotalGas), @@ -137,7 +137,7 @@ func buildTraces(traces *[]*ethtypes.EthTrace, parent *ethtypes.EthTrace, addr [ if parent.Action.FilecoinTo == builtin.InitActorAddr && parent.Action.FilecoinMethod == builtin.MethodsInit.Exec && et.Msg.Method == builtin.MethodConstructor { - log.Debugf("COND3 Native actor creation! method:%d, code:%s, height:%d", et.Msg.Method, et.Msg.CodeCid.String(), height) + log.Debugf("COND3 Native actor creation! method:%d, code:%s, height:%d", et.Msg.Method, et.InvokedActor.State.Code.String(), height) parent.SetCallType("create") parent.Action.To = to parent.Action.Input = []byte{0xFE} @@ -165,7 +165,7 @@ func buildTraces(traces *[]*ethtypes.EthTrace, parent *ethtypes.EthTrace, addr [ // TODO: We need to handle failures in contract creations and support resurrections on an existing but dead EVM actor) if calledCreateOnEAM && eamCalledInitOnExec4 && initCreatedActor { - log.Debugf("COND4 EVM contract creation method:%d, code:%s, height:%d", et.Msg.Method, et.Msg.CodeCid.String(), height) + log.Debugf("COND4 EVM contract creation method:%d, code:%s, height:%d", et.Msg.Method, et.InvokedActor.State.Code.String(), height) if parent.Parent.Action.FilecoinMethod == builtin.MethodsEAM.Create { parent.Parent.SetCallType("create")