From 4215c9901d50f114a863e045191308a9ea9fe117 Mon Sep 17 00:00:00 2001 From: Nicholas Addison Date: Fri, 9 Aug 2024 09:19:40 +1000 Subject: [PATCH 1/7] Added setFeeRecipient to the Native Staking Strategy Added SSV approve and setFeeRecipientAddress to the Native Staking Strategy's initialize function Correct the Natspec on how tx fees are handled. --- .../NativeStakingSSVStrategy.sol | 41 +++++++++++++++---- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/contracts/contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol b/contracts/contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol index ed7377eec6..f380d363a3 100644 --- a/contracts/contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol +++ b/contracts/contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol @@ -9,6 +9,7 @@ import { InitializableAbstractStrategy } from "../../utils/InitializableAbstract import { IWETH9 } from "../../interfaces/IWETH9.sol"; import { FeeAccumulator } from "./FeeAccumulator.sol"; import { ValidatorAccountant } from "./ValidatorAccountant.sol"; +import { ISSVNetwork } from "../../interfaces/ISSVNetwork.sol"; struct ValidatorStakeData { bytes pubkey; @@ -48,10 +49,8 @@ contract NativeStakingSSVStrategy is /// @notice SSV ERC20 token that serves as a payment for operating SSV validators address public immutable SSV_TOKEN; /// @notice Fee collector address - /// @dev this address will receive Execution layer rewards - These are rewards earned for - /// executing transactions on the Ethereum network as part of block proposals. They include - /// priority fees (fees paid by users for their transactions to be included) and MEV rewards - /// (rewards for arranging transactions in a way that benefits the validator). + /// @dev this address will receive maximal extractable value (MEV) rewards. These are + /// rewards for arranging transactions in a way that benefits the validator. address payable public immutable FEE_ACCUMULATOR_ADDRESS; /// @dev This contract receives WETH as the deposit asset, but unlike other strategies doesn't immediately @@ -99,7 +98,9 @@ contract NativeStakingSSVStrategy is FEE_ACCUMULATOR_ADDRESS = payable(_feeAccumulator); } - /// @notice initialize function, to set up initial internal state + /// @notice Set up initial internal state including + /// 1. approving the SSVNetwork to transfer SSV tokens from this strategy contract + /// 2. setting the recipient of SSV validator MEV rewards to the FeeAccumulator contract. /// @param _rewardTokenAddresses Address of reward token for platform /// @param _assets Addresses of initial supported assets /// @param _pTokens Platform Token corresponding addresses @@ -113,6 +114,14 @@ contract NativeStakingSSVStrategy is _assets, _pTokens ); + + // Approves the SSV Network contract to transfer SSV tokens for deposits + IERC20(SSV_TOKEN).approve(SSV_NETWORK, type(uint256).max); + + // Set the FeeAccumulator as the address for SSV validators to send MEV rewards to + ISSVNetwork(SSV_NETWORK).setFeeRecipientAddress( + FEE_ACCUMULATOR_ADDRESS + ); } /// @notice Unlike other strategies, this does not deposit assets into the underlying platform. @@ -247,15 +256,29 @@ contract NativeStakingSSVStrategy is /// @notice Approves the SSV Network contract to transfer SSV tokens for deposits function safeApproveAllTokens() external override { - /// @dev Approves the SSV Network contract to transfer SSV tokens for deposits + // Approves the SSV Network contract to transfer SSV tokens for deposits IERC20(SSV_TOKEN).approve(SSV_NETWORK, type(uint256).max); } + /// @notice Set the FeeAccumulator as the address for SSV validators to send MEV rewards to + function setFeeRecipient() external { + ISSVNetwork(SSV_NETWORK).setFeeRecipientAddress( + FEE_ACCUMULATOR_ADDRESS + ); + } + /** * @notice Only accept ETH from the FeeAccumulator and the WETH contract - required when - * unwrapping WETH just before staking it to the validator - * @dev don't want to receive donations from anyone else as this will - * mess with the accounting of the consensus rewards and validator full withdrawals + * unwrapping WETH just before staking it to the validator. + * The strategy will also receive ETH from the priority fees of transactions when producing blocks + * as defined in EIP-1559. + * The tx fees come from the Beacon chain so do not need any EVM level permissions to receive ETH. + * The tx fees are paid with each block produced. They are not included in the consensus rewards + * which are periodically swept from the validators to this strategy. + * For accounting purposes, the priority fees of transactions will be considered consensus rewards + * and will be included in the AccountingConsensusRewards event. + * @dev don't want to receive donations from anyone else as donations over the fuse limits will + * mess with the accounting of the consensus rewards and validator full withdrawals. */ receive() external payable { require( From 03624ea4ab3c8410758367fb36a70365345543ee Mon Sep 17 00:00:00 2001 From: Nicholas Addison Date: Fri, 9 Aug 2024 09:34:44 +1000 Subject: [PATCH 2/7] Updated OETH process diagrams --- .../docs/plantuml/oethProcesses-admin.png | Bin 49661 -> 94796 bytes .../docs/plantuml/oethProcesses-pause.png | Bin 28166 -> 0 bytes .../docs/plantuml/oethProcesses-rewards.png | Bin 123915 -> 128561 bytes contracts/docs/plantuml/oethProcesses.png | Bin 454018 -> 455005 bytes contracts/docs/plantuml/oethProcesses.puml | 41 +++++++++++++----- 5 files changed, 29 insertions(+), 12 deletions(-) delete mode 100644 contracts/docs/plantuml/oethProcesses-pause.png diff --git a/contracts/docs/plantuml/oethProcesses-admin.png b/contracts/docs/plantuml/oethProcesses-admin.png index 8a690b5d5c024b995148662f3c0b143b377210ab..82d74461651daffb3ea0d2f86dc13a7d0fee8696 100644 GIT binary patch literal 94796 zcmagFbzD{L*Y1m8f{2nL0)lj@AYCe=bayIUi%uy~0Ric5q-%lHq9jB>x`dZbr86B&(`XtwWAZl zio?(b;oQ?fjfI65YObQ;_@AF+orCMRCar2|+l=#(dhHe8*(5aO-P7yiHVMp@9dJgO zm)a$W$XvW|w;y#~bNhW1(cVk%BQO6nvt4wD_2>XZ@|YT~l% zQfeei$$Jl?%)NwV>Tyw1iF73|?lSLGd|uvhOjrIgBDZCfWVG^ohB9%ElThkP#mF*} zi^@E{tm3T|4OdBPm4TE|Nn645VrBA49b?n#4?z;MekLsQBwwm;GDn2LC`pLrczuBG!W{NrRKxFG4R((60WGee}~TRJ2mYMkS**rFm zIuth=&+Tq$L`NiBzy|qC3o~oql-Iu9$@=ICMNZ{xBO+AJUoRGvm zKlYjE+p58L2P5*xA6B|>AIR<4e+&|`y#66c1k1zhU4Qj!U83;Cw|qT5JlA)=w}j&( zYr-_NVu^G#Jin-3G`GKTCE{%MH(`T~8bSWAgNcPmsntiyWU9NyalHPftF-6VrNReEU{fAO82T#q}8$ocn*63XZQ0m@<-i zlfG}D?EKBb8c28XjvL1k{@m@g-z_pfdlBi3c0D$3O9nUho)vuZsZ|lM;i6uyx+`lg zJ}pG#M*C}Tj7FbH+YPyMhmnJ|cG|#LG$wbXS=$spz3+_x?Sr90T#C0q~x0C1J$jy(+T+VG!uS{tl6+} zamuSSo`0IF_*x*hFp^xL-8-=5`ir|!SMVrwcCg&shi*_;<=|C_O_wY^=nU1o#rH~0 zN9^^TK##Vj1L9kBZ8W1EnxU;1T6J@ec|0?hdw+a;|4Kth3h#}4`SmnO)wCh|AB4}t z35F+JuAXlUcz$x~AFBAZo>(P3bN(ayqy1@~$;+}gvQL$+yOV!0d%cYJJDg>l=kaOChPzE&sxIgGoqoSJZoKGG$oRhfFd-_V0)=-s<(Y5Rg(|iU zQMrS--w~Gw?tZsnyo{xok^Y)j3in&0!hAxGP|#D&E3AHx3Cp=}jf%f=So=J!yKz@| z`Y>Y0zB9UL<|gH1LsLalB?m)whYiKn8HG%Pm80Y|@`6pojz3r2rTx`a#I8r|$93X& zOI22Wp30oW2d7kxQ}LrEt4)ckfc<@JN>Bc8I3R#Vww3Eg-RkxEj*X}$U zZdS>tLFz=_?v?tY{D4+l0EsXtmtha!NA?jnTB95WfAZY)*ySvdV$d2Gb{Gx&mP5Wa z9MRn-iJu!!)KBE|`g_%6C-KDiq<6aF6%%TG#98&Wx=Jga)>vgv(M*Qq;lpFFS) zV0gN3bfhVPt5qsG@uISVVTtf}Bbux>mNU4KgN-D~zTJ%mb;>)g{WUUA2vzD$l779g zp|YYf=vH}drq++s#u*RFm|Hj6THZaml#J*9eqLS^H&>S>)F7d?#=XgUK|!7B*zuav z$1~k60uh_SII-=Y@yt5cUVB8}!t?Z_ef9A9ao#DDq;^4g3Cr{}< zV?E=k4<@k-F|t@;+uv4Zh<|Gb27gf{RhjNtd#n1=D8b#KbBEL{YD#(Z#Txx-Z1GuP z;qlJ90+NzvOfDPPgL|>kM`AVkF)>Ycf843EbM(z=*G9P?lJ~AJQ(dzN&T|kDPY_ke z?EZkIa`}xzd;EtoOh7L}Nlp8LN9dc~RdHH!A z+h|?Q<#+l1r?^9-)Rnf{{yA27Kebjh(tqI)30&-M?YuMju0MkoU!`DqAR%|=n&z!8 ziI;|YojK1lnK!)d7^X(!Bg=%7Dk+i@b}!1}m1NyjMF+`FONx-PZf)vhOHhSeztZ0I zig<9@*Un*FVy&{`!7M3v*;Un&68!-A{#TukgPbI9S@BMH+`qB0tNP4eA$#{|-r$TJ z|1w1)8_VYHpQ#+*^~P+{UOs(o`yt$H+l+5LIY$!bXQt)-%;bl)*$NroQnQ_G7Y8{t z;dI|xz`(JOtKQZ|pQ%OoMMma8`5UV8N2mSGQ9mnJ?Tw`F zI#Jb>_gBuf>EhfF*yg%F_xXDL)a&&Tqzt371A6w;RgP;P3rQ^ASPNODym{HmV%#_O zSf}pFAFG^GMhO$Ob*A(P({vYN$4NPo3^n6mL6#*G8ix&oSZVmD%0XOQ}7=#}$4QU_J^()qFdj~lp2=H~*u z&*|X!5gs(D+o=q9jp8JS&0H!K%zw`*zulB1E`m#>aruh+7$Jj3LEyVC`5>Z5}{L0(=jwzqIHQmJpA95?muh>zf9apTkg-5fcRF51u;rO; z6h8R!+MJC&0(a-xA6}7#m82DJ5}ar1Cqa?;JVGosr5RQ!vz&?P*xO#ULM2aEl83&= z5BcpM3?fGZOvD~td%e4v>B98Ph=?tij#BU1_ne?#NU}PDIAXjHtT>H|y`MWe$Z(w3 z^Y*9}6=e0BB7H`9WSInaFlN~o<>aE{)^Ih>=3rX=J zTgP1sNn8!bmq6`fVLb|1AbW@r{_v3~Og{l%hzoze^{M^+hLwi==ldh=e}1o=i@zwoh<{6=w5_cTdn;BrtC{j(du6Q5<6yHv z;$`#u8xwlcu^e-o@gklAEqwg^(>gdALLWIvqIs%Ond}G-(pJ=P9s8k`{+}tp) z3-c~I80fN>mX?g1?miEhrA-xf&(6)22+w#PYVtt%)po9a!|9)fv$g5zj|BzNhiwKk zGcy`*80Ay8mxiVF^&7M*EM~t1-{MY3cD)i;Djn9Xbq>DypsBC#lWKw5w@_-bKDGMS zn`33B1cbKd(t6T2r)r!myW$>1 z;dpANO{Ax%zx#!kNB}_vkzyPSk5a1t-Q~}Z?ob3 zWtsM-V52(*EG;dSS2g6XT)5zSiGWI?klX#5Y|GkYEwA)Mjy!dY{6bH%CUU&eX6mEZ zC1<`v=?75+<63pEcH~n<6g?7o5M~wPL8NqFqWFY_l8kBD>pvYp&|+44M5D|EKN8t+ zcA7}to1(Dv`}g`}(X-%Nnwpw2ar>OFPLJJUBt1NYkV*;I6~kR!D?Q1AIr6C{%&>+G zvP}H&G<3D7z`KRW?nGYigH2;SJ*s8FTDL8e4J}4Gx=)3<-^;l1^KRUSXHTDgvd%8nZ^#~o7ebtiq~NhiTR%D4)0EnER8CjeU7K{57J;>o z(ABaBz*c@;`bpn9-+AN@4mL_gVVciibkT}!{=l5_y?0$Ay+8wRo z!9l}No~b(bocw&L2S%$_kufo(qr=e}B?cFk?eD+&21&t;=zu=Dud(s9s`vi-v=v#v zfBX1W2!3Q?;rHU%2_0nSQ<=9s2sB*~3i3!;W}up(p&_%_+Km^?18Te5u^uY=`l)KB zJxR=Zn{O`>*wV)%A$CZ*fKql{B=kXlrX{tJT!h2nYzU$p{>+ zqAg5KdDmIR{H`9zp|wg3T3Uk0%6yE6Zt+@AT))RpUR_ba-7=J?Y}%hL4*4wW{^}EC zGlJIcw(zU+hK93GFTaX-9va!$^m675S34{?FAn(DUs0Ix!>0%#=Q3FyK~hmsSrw9W z>Kk~x+=5(<$$(w<8#Ce*6cpCmgwJYT2UJ};MhPhtns66eSX zWUQ!&so>~eu(ig<#*Te7o8e;|?CtgHJ=#Mv{c7B{7_!LPA8Y;B8^DrCvm7m=^PZod zw~}H=FYlt!nsw=gN{1<9Qq=Bym`5pm`}S>gGzl}?o?KxB0ZFaHLXXu85m@Dai`9Q> z*MCam|Eb3P|CUCUjB{lH5nJYa8I$Y?z9bLNpC1#Nkb|jjn^g) zG&T3)O5d{)P#sfVzaEy5prsZpYrPyoy03Y>J8r`ZsaXK(4l#NYeDSa>rq6rs2D)3fLqL{hSV6AM}~u;c~2 z^fcsDP)ks(eti;aM%D4osNtc2o=K0t&?qH4Jd`{lS;)=4O}$8`dJ`vP9EH$kXGcQZ zlnq0%hYdy2`4OU3ihE#iaBF)z(~1{?e&~7V2x&H*-|PYDRe1XH9rx*FiaQw5`?34f4u(d)f7kG$%hQ9RyEIyynv^6{Fj?bNR$3}0EuFDG{ncN)(ppwY zLJ$;8>{d0rHK)aamha!IAcDCqMcx7aMY=?J*GS|a zKlZWzQDGTd-r?u#8?f-m>7#&!nVCwi!b@0y(PI4t>L?PK7;K2(*QnF;CcP>5YODH6 zjoKqP9Yp>HoLPZ~#d62L&k^4(VyRWPxyzi1U$tYu`)WN@qZ7Hy#`w&RVZ=T7H^OL`?j2L*=GVhg6r3 zL2C#l#qHZN22vY0ZrqqjK5xW~QA=i)%-3T}w?E7N8#Xy83v=_uxiYhUTGG_GIEjLC zNkzpHDClev^&b^wpv=$w`UQa?`4VJ8pgziq+_$2lLOex8YEZ4Isp*YcMn;DCN?7JQ z?DCEo$N}BNG16bpCv?R%%~sG3{}q3{W_^#+O0oHq`0Uc*H;6@@mQ>8qEIJr{+&7Z? z=uso#m^-hDsVI|l9mO1G3!AYDT(Ol&;tR(&N7s7_29fhx-{x%#P|T7d38dySxhgKe z$M=3#;XK0F-)t}&KZx;prYb8d>y5W``cY=VmLr8PDYeVW%Cc0|g#1C7xx2c4LKg15 zd5yv)!$_*~9Y)(zkEMaE0wdyBr)3`9D%+1;Nd#_1f?BXO5XL&6UBeTN(#!|5tqj<9 z%cE7Imk--tP+oC#a-tVO$Vy42y9x>l+98Z}UmQGZE9Kjpj**2uP^i_+Efo~5=S_#vh%t%q^T+Qn+1lD_R9Hl( zrs~VcTwTbf6mWde(=j?iCH$%{zo3A%VTy&ECUzKV9x1z4^R-InRjn~(xLZzoy1}0x zbz)DRU}Iy~xcuQ@tC!JEd}#jU9H$BHI8>*c95L;WNUW%92>OA+V);a#oJV%?4-B2h z+~p(wO%tr&`)9$sEk zeuWuG*h+LK?E3XW^wxvf!BFZD3Bv9?($o|bu<3OJ^Hd8+)vuboi&BMTrJxH zWE|~ZtN&IZO!o#wGD}ALplz#pGfssXGVz7KPeU^E2FldGm+Mn|kGF)WAlMj{_(+=u z0VVH${Nmp}5VqF;sD~X?I4f~&`<;WG(O3O4`UK!hZnG4$qeu~Dmd;GVw z{JlE-B#fsVQr#2nbC`U`+I-<}J%(6@tq(ueQTV$we?JIrC=;I@{^b8~r9L$?*7AxE zX3GIYWKeh+Wa8=#T56h`uTD36pSpSUrrf>~KFPL!rZ=ZLrGgFew`(Q4%uP^w_(r1f_Q^9UEtL<}-H9v83PY@Io1*N9WPc%IF{ z$tjV~?%AtD_J1GfK&pd>ZsFz=z2S&IpX_zA1zVy=ji<7sOQ@p2XPe|BTV?M-cna>_-FmF`qn?!A5c)$c0#1&Hv!s^vzF zwvnmn;1mJ1NZYt%1SV>wGEmTPefv=_ezaRuQsU35Ryg~ofsV!E9yuL8M_wn5y}?xs=qs{8cBpNh{`N>Va_^2WdG7L*F=s+1IWqTbUT6u!Na-`_Vhkc*7v z(5)=Ddej3|*&2bMv{wt%`ONq3>gL{*;Zs7F#Q`x*O@4ZMfBXV_C#OihK8tab2HLYF z(1{IFdXSoF@3rgHq2ezE9**X{j<|5~VwtLvD#%2Zx0QR>#l$i?V;%m9=JJX-P&8jb zF;)$~d-txbO@g0a7?XM)F%OTxW6}j(x|U=y+5>enGLe^BIkWiBlfVxF0Sh@@ZEb@C z1NM$q($m}9+EFji<@^(BUNQ|{Z<#&jIuI!HU#(19C%-~ZXxpE1UcsM~C^*_nH7cle zp{5gO2&UpPDTTQ7@W2M0{#ThYK6vl|8e+oGiCPz%cv0TJH?cT8^7(T^BCpG*N}KQ~ z$LN*y%Bf>!`&Bf%QCOMDi9AZ!{Z+(s&RFAKWdJALh`Dc7weAZ0GcA_Ha?-Vu2dqp? zI(3J!5}e^OegxDR>FFJZBw=M1mdk8f<@Oy>n$axeQ0+*Q&;KKA>>|R$X{_0=28ueb zX#AUlALWgxY4s%6J_)&bqr_pZV@FF19Ut$~PRXirKW#l*RxvYiW8(@mE;KFMTX@9O zYV=fG-ls~q>UjnO8PET8LF5l45Vdze*EG;d~Zru3Qet1YSf*h~0eHj+7 z8T{_u!>jGse*?6o{i{C#4mS3A!u^AT5{^*gzp^6js+nayb4r8LGWms&+x*{Jh6**0 zVvFMvwO77xFvkAq?oOtFkB&?{a$Nb&j6%uQI2}2C^;@l}d3AD#Pb$w4afN<)&=l)J zF5R~fdc`~3I{*iG7#jccnFZ>_ZCbdudF0kMx4|@UmiilroEgZ0nAzDv(KDfx@No6n z+YIuj!G*j6hd&8it1;!|@6ur%bO5%~|LjT=H1&Z>xQ0!3ff>`nw7o@5J_IluYbNw4|05}-bOr{jU%3;Qj}#iO zqUYu0DBrwk(%8fKPflrn`s`VXkXxxjt&xez#S0greIjZ8X_=&3urXx|((zepo% z$7-B-Tj&@}F0WL09NeN#m7G|rvQq|xap~VIBpOL}Pp>OQxK`uhh)lA8>h3vVOa?!e zK+x0DI!g>! zVI$Dxd%ILk#`VV153?ktYNYtx-S7tnS&K6=1YOtLCMI(JQ`=ydkjiPh?<@)0&+;j$ zGGu!oRtHTRU!VIrQZzX;Ki?zX+T5(I#dH7RL#>*J4`~e;TguI*B@Pr`Zz`&){`#T$ z6P~B8dHCzspd_cYiAK9$*(@w992%c)|C=t6l z6qb@mtQ@5Owd5?LAW~$et&~(qX=%stf%HAS&(HD&9Dkd|ROtyzyC0GM_xsh-9wRt3 zN)G9z|_#%N(SQp#BkVML{^sNXv%Et$q|7u`qkDv5!?Xm zZNF=jbuYfylUF#+cez3D91yTLKTjG((_%GM@4uU6`{E}q3gqZDwASaRPoG*(RN)Wq zk#6f%t^^P@56~BrfMeyO+Q} zksa-;tW@gcwDY|gI}?K&a~e12EX|bd?MZ#BMe>S@tdALCxrDt%lob`jKgSH%jFU<~ zAmcC!Zxi5mYCNwo6$-TLi=b=0$9Su3pw0gBnq1TKqn~ZzVf}KsHmvEzCJ1xsBO>!qv1=b>Q_4! zE-o&jq78s=PPWxz{?XB;Y;+}{zLX%rg zf{`?w8}r?XAYhXD>}C#kmXX?(UK=yM;o*v4gNR40j%^tew*VMtzJ2qi#5BC(?`Sko zO1~ht&Dkry(4IVe_zLb(N_NfWhUjwp0loUd@(wcIyDN8zb zVqzj+4S5LMKJY3oZhG6hcjvu2z`g+fTr1{(jo1sg(rGg^lH<=?--suDFK0JNCC{-e%a zl5b#O0J!Ai2w?8GC_L{M!LBl9W=y^XYRDxR@-Z+-|M>BxxjA!+3|%DH1rVxAcUV~q z3|ayqHm>2}6{r@B02gV{f7^kffyR2;An$We#-a)=ES3}%?R;y_0%SgSuwT0-7fdlu zHma+pMMK|OX}O^E@y(a+MEQOG^XJ)=RaHCNK%K-ejY&yJByyR4nW*+@IHUSHpBzR? zP2tYRz@TTe7ZsJnuARPEAZlpU)1x`-RsyGnmr<){jd%(yY z7KMd`s(iR-9#D&VC2?D-m6>!y6qmuK-kj?Uz0I#A1gjfm_5IUJ;wQIq41kv zn(SHs-9>3vEiJ9rl<#JAKv!dD_k8b?x?2+lcPYqw%q75WDHV;+~Y0x&p?IgcoMUQBKVI zdir#ca>+HrMF=_dCm^m<2jH>pkfB+E;q5XoGM=66O^Nq>nVL#HWdw6hcL}Y9kw#27 zXiOhsaSRFYy^X!yq7LZUefAj9lYAgz6PbAK`mt&f<{OaJhlhtJC*2(|m8E~xdvQPk z(q%t%5-*I6=Y-uuKH1!P@L+@2MuhY|weTz2-nWim#C?!dHg>oB%p!n&dqNBtugen+61@x#Ce786+fm0Q(1m+Xh=m-5ve;q zF**6Rt|8xP*%|z05|*1Xarbr8QF2LqUk3)3y5d!E-T#q1EoHW@`#k9U9Ca^fA}7{H zi$&9rpp;2iR5GoYeO%==&3&Ut<%1FvYr*j{?s00&s*zZs!9tv9qR~|)b>WJ}8&vHB zGmA%8lGh+cs{e?>nnB2A)!8h|n_v2?ibG(ZeYnL9cQZmtN(yx#@WTfq(MO#)e>)q= zK{c(y!oo$4??uUYX9uz}GM}@IaiBHJk`{xCsU(vs0yg_il=CVn=MyR5sx;}y$B$ng zC?6DEAJxQ-d-s#>8n4Hd=e0A<7LaywM&=$@yR*!-&tB-`R75gv81w41F|Im1RU=U4Gmqz z3nE^ld(;V{?I2R(-R90ify1=GK$bHT=5!=T)WS061Nv1FrzNYk%A*jkA#%97bGe^B%%wLXJ1e6M7-L*LYyje)~;vXfIHvRQ=mR2j%fh4R4NB2Iqm6s>3 zXkYRa3=9(NppPN-2JKZN1VRQH@0%3rAB&a#?Yw0VpE>?)WG3Vb7wM*#(w3GJ#2{R- zmsu*JPkO4X#w^&`*#~NYeGvXniRj3xTXp}vvJ&h`P;?2rE@JimMpdtwsY-z831(!0`KGy*ltaIy*Zfx2B3==jxY>#gC2@hbs0Kkvvg_Vx)S~!pv(_TG}C{$|;<(w&fA(9Y}`FexHf=Gu)dxWZ^ zndw4ET;-0bx#f$WfyZPbssHr`z=Ye5F zRCKiDc_1H!85tDRsS4N?6;CU0KttxC=4WS_n3>1Ef4|HKAT$x2p^x^?&d%0jrE|R& zkd=7{znx1QmDJTefzm8`l6ks+QBqbG0iKJei|J}wdb(1vp760t^h?m%Cf(?0R*JGu z1qF$D=G$HRgz->98HnHP*Tl{=>I5YDs95(LpY2{p*d&))1KS&51allvAjX`qzJn& z4dsbu9f)`xYh+19Gsq^;(bMaGcC|a+-vE>QWg;yt?eB)V%WkA@&&Mcc#|geHfP0t^ z4YHON=&g><&bz+4rA7gDb;75$9dW3L&=4x&jh|n*KonwQ$Mm0Z?yZ|Z-(sbf+|>o~ zK$T(pKc)85sD~^T#esqO$;raCp&jYS^5a8GYAr-xV>TplM}qA2Tty-yw#-MgJpJFXrYSMi?hoSX6zc(=@2FR5iP{r2=V zYbKldasu~_3GM8w_`$H1>>{7hGh{>OndZ9NSzBA{Z!hxWhZwrjB?|;rtdd7(3=+C? zd*v-ACZrF}N@4rMsLc%D2D%<)5m-uw~s%DNk z5$`M>`jE(!kk9K_D6w;~E!+V_#zX+u{rlVN>ovACK|4+{H+$JvBt>=Eb*|32t!NNl z_+5ZE+EPZ>OQ-MzeGZK~tEerX#P|4&AI$IJ(NSI=p7}jbkE7jHa9}!O@7b7{{a#)! zNKbDvXKmSA9p`0X=>S`d5a_@WP*cDdBf!~gZL1s?2}Q|8Z&OfMf@|?DBDbyOaJtL@3yiQqt>d zlY#gqlZzSTkxpx{n4jQI!-EV2H0jlH0SeoQ})V>G0;J8t~s ziI#`Qn`W|ebo9D)&Z{DLgOuUIs4nk2QF`ylE?vIIs$P`iT{m37+pZ@u-9#1?^hmow zxz`77pDslqV1wR>dDl(bTMd%7kC4T3+T*tp(GmjfD!)y>j=l$Q8Icb>%>G*lp)N!QOmVDSKRMh{R#Hkw0?xFUtf`QwwZngMZr}@ipn{*BogE>; z20I-C!@P^0&K>r1$@-v-z>o6x_m9+%_{Bg^uXqfDCqR>{cuk!C{7BYPN~@p2XR~&%W_d9iW<_r>{&3MwYw7A%=ChD=DmY?4-dT(G5yeg&r?Ztbd(;!xY2kv*~sUZ`d zBIxzOj&AfmC??F(1&^=Zay3QNdu?ecL3H)~2(|Yy&8ojEOPrq{ki2S}Ex zdh(WBz*m&%$IK31v*-#-OvBJa^X1Ez2?hac5Qu!N^jX<}Z8||jV+Poe^@J1(=xS1t zTvw5_auCukH_TW`fr4h~X~Xo;Sg5$=(w(3`P_DYG^ccie1r`R>T;y_E8v0xeojb^Z@Xmn|@6!W+6&n~^ zWZTg9KFKO9)RC%)&eg8uP-g)ovL^YlihXsg%)f*5#*Hs0jonT&vwvLw{17Ir1(P-4 z_WOL37cUx9%H!Z7t-#`u+#9ca#2j@HJ zX}Dl(YNjj2 z5$+U@XJF4T0(C`aG@P&6nd)y}BXQRQ1|^4b6+t&A&(FvpqM`!6)?;o7*)f6Frl-m3 zJOS@~z-%jYh(hF|T`H};y?>5|Lmno$i^r6dY`nj5SFgdVn+L#ZXKSn9jArFIuP--Y zl+Mapnp1jHNQ(T{EtdMb@pDjhn8@9ai1&uV&O5>aL9H1ghDlQf+3meOGV}8TBOr15 zvyUaw6wR%zQf%Xu4#4^ZoR(~bA9X~te#^eFf6x1MR8SC}yH89^%m{4q13_zadBDs< zSNzu&iGpHR9NZ*JpSOVvIDv}V@v62&iCbi+crRK^cc=Zu=QqNuGF&+15T`doj zdELV#7neWXEf8Dc)XLJaeo{jt$JE*29jKAtyGd>u$6~weGOT8O1sAvTtd#PeA-}IQ z{c*3-&$AnUxo*e4n1i)7MY&E8xf190%a{*NG`vZM<;qI zoDu`ZA|u7T>F2kgpbVN$Ky<1H? z(cw*0u(ejvub};^A+Gy;F`yZsM{xbmyxiQ8BE;I-+T#ZxMJ8+aV6{q0>_~P?3;w%v zfwR`FF(U|rJ!!`~+Z{lYAig+x_n4*KP7ZN8l-1RXpZErr*8-1TUS0V89i^OOts|M9 zL7=4eJTwK|r&yGf;NrlHIn?%?Kamp@)W^r9{mi6`G>v}^lWlsGg(}zX6YhGH)Mvt{ z9C59|tJRjwbaY9ym53nYg0~lgZ}QomzW~hjp+U1o%{B9T0uz54zS&;5-XL}G25{@u zny#KCNlbhz$eCwF?DjS-kx zW~A#5715-u1^0fPp(`9DXW0O=5 zM6@gYd!74m2hdWPRPzgZ$Cnwmg((u(yKO!2e5_S9x#ECaynz3}|QO*_c& z5+=XDtk?D96jFf|MwDP<&B|$O+Ehc7Tbi5qCv!h^%y@_(SqzR%KDoo^iUfb2k#XU; zKlt&C;4|^nELpIq`-S63BWMV3?V9W!_jCtUO{l02$DsybcuBh=pFBE{ux~QKdZBN` zAQek`Mw0CPAMkmT?`~@8Px%s8z1j(Rh{$S;Vedci+|cDiL_1?v72K#OtN!%psJAc^ zeIfTIw3X0Cm2}zw6FSJ?$EkihP|s~K6yY4L^Z{s>=Ls(K$+ivEXIKdKPf0Ubgl4o} zbr|Euv-m9v+pT{Da;ro*s<*@aPQ;NCLHF4vxbo}0S=(P zp`9dkpM--3E!C|756prH~FY~;kJrnq;_-S8Mm5m)R1l1Y)<9#<064jc= z(8&Tl1QzsoZ}Owq^LrYfbP`b3Q>VuBRYkh)7cUmQ=nN!TW)k68WAY}ufxy44@l4xg zRp1e?&F(t_^kK3d?;ZPr3p4Tl?3$&495{eF2pxWvN0SOHM!`_sM;Yxb-77QdT0qbQ zotAiBG=6ek)%i_KvY_c7RjFR01*R! zE1VD46msyyYtO@0ndihDgpyRAS!*Ej;OI>ZyEa{RJUA{H8NYZ#aDI(?!ce*uEz1*m zc^jClomo6^%4vXS)@w(R^8iU*i3}@OMMvN9 z%7R&;H_nAhEp+$q$Em>>%n(D>I;fYZ)e&dZxC> zMLhTty8|)$?5yGVqakKIJ08j%kUA30HW4U6uIoSJhlVIt$QQO3>#YXM%^f!N1NNRn z^|qt=Uc1-n4pNR1=1KFKi+GZ=1*B;6!(cyGPVMn2iU#rUf1 zqq|!)OE$5ISi{&rwZq==-bD($vrl*k_BWU+hfRi~{oDP*5l>G~;ivz2u-NKv+AfHx z6ORYs<538?()mj2Ra=33>g4FS(5?O1X6g#hZQGN>DL80wa=th{9Zp5`X7lZz6Du`h z&XLH=Aprp&w`1?=n-my50pE>OviHYu zwdawuIk{JlKebqmOs%bQu9Wn%vtS_WOq*=dv`!0LE^8CVHd{I8mwtSDDF!3Kq_FQq zvZx;zJk2X|H!`B56oB#9nA`hv;e0M}uJQEwInACeypqa4Y^*Ms73_N~PH2b!hx*(G z>Qk1Zvl2T4n`9i#GxukCZS9K*=k7n|ZdQ`0ciui6>4HjWWde;h$(oO{+K4b`1e_rn zL<#_yPEVhiZEvuPfBtkOZQJmh+?UTtknjU?HH|InPJV@h)~wNDY0oJJB; z^_~aQxw%YuctN03p{e*E94f7&)M%iiOI@C@n^`$KE+GM^C6C3>Z*W*AZkQ91Yrs@~ zR8&;HO5PJc_R`|iRBF$cF9aAR(1 zxZ!uiUH_v8HrY&@4H`E(n2&qkR2rS*hvxF^L>*=w+;f<6keLjad0c6tDPw>$CMG7w z3ongC%cWsNM#2~aXEz?9P^hTZ?rz!H4T#IH9v&X)85v`ELSw8(_jIZn^&F^4Nn1^R zQa?1i&aYr=d*6+aBrYjJum-FtIEfdSwRSsI#M9oGVx%B1jr6@o5iKFdBqw z8m2reOG>sjZ#hmkopsxIFAZg(5V|O<06!Q2_}3Xvh>MGxI%9a|F$mykduOLzabK)d zLIE&nyK;3LoCXblcK*_(Z{NPbX{?0?UgO|qLr>_CL4HEvq+4Tc`k7 z9J~9>&M8A|mY^kf;tq9015^ixFjdOiJ`*gze}e>49v~jRialpXtS;KEq(wi z65!_tnNg3~GPeI=KF_orVBv1473nbBEyFC*(`VmOh1??Oc3{wd+5oI(v8C1~0xBU0 zN56+ohA*1*bkt znC;Na8#QOKQ+Sax1e5~XFm+*RxeO!!Q9o+PVo|tJ@#D$CD%uTR!Y;&ccwyw++f@kUk|fHS4K*VM}~;vbW;K zUe;SU;+v3|=rDN2TN-xIG;9hsm=u!=MiD}onDn0AgmeHi{Dk~OZqab!=zXrHwl>U` z#Zhya_1(#~gae>J_Ht1uo|gBw-;~lWNdGrj<6E}gQ2ez4rc5yy3fQ>9_ix{x>rB1} z7#f)XZmzJf@Ci&wPTbp%%4r@`3R2sH8dPE$_P;25?|7=)KYm<8g`}*8LPgo4kiBKc zF~YI4Irg5VB%^Gy_jb(Vh(Z||3E49vipZAD?{(||LAewH*wDUyx-UL zd_C87L9f#1phjdg7chB%YBR*9hb$mXy)c)Vxd43OapND0-%1`o5EQJ25fa?~#iHig z*?u)%J6%kYK<3(mj!;rk0xLspBz#uIx3)ilg#NEJ_H7w%Q^WH3OT>GAsL zi*I#_au3y&5zr8DQC4pBGSH`4>9~DxxZJX7{pz&;>`+R>2<=^j8mY?!=csXF@ z9s$prUaT>us760!?HJiyGnr*@!--!0s;&tJl4nclMaRRI(W&(3-3mSIo>Fdx!FoAR zZrM+aXX_XF1m~%M{m{m=C7j;gBk3@5#@nyXyQoMAUrxY%`QMPkb$Yx8hKlBU#^KTI3P`*Pa zmn2HmjK&&%ApSssIMmBh(0+Ji`Ym_Oj#c)m%iEm%?Plw)d(G5Bf{BA?eTu2=L+Kc@xrH@0)c6Y(cPMfpv$HHMN>idSPE&D4;LC&iS#Py8q#)Jq21N~Zx>j976CMdcX;J474O_=?hB9wOE1hLgAqtdAl4{v_I;A8arxyx9w!HJ8H4GavdtafjH z{=ng~piM?b=A6mMzyPjnZ;#7?8`_?71VnN$p~DcX$8x?c3L{UxAxl z+1MaCbB4jGVi?{^cQy8d>Em4^Ha0fce!(OiCV0Ary2Z62?K%Q$_*MPdwQFqtK(DGn zm{iG_A$ofs^3kfKOeE7-(+=vY0r2-+_b#Zju;fSzvSBfJ`sK`_OAbVbjAz$1=~a-h za2KVdh`hUc-&VxX7qBUC+?}im!Pznqx9G~r2O*~q-qx?>&0QIpnO`kjUGIM`hQVz5 zb4<1l+#wC-5-=Asd;tqo0UA9zGV=Bf*!>5FhXG)FxVZ^>ZYqtZklvlB$3lyMKr-QLgU;mDIR|W`S0hVMjLSP*0J1{gb_*h=ta09p}+43hYDLzmlm1V;Cl{nA6%8&Dx;BX2qKiS&^4>gp+8fwsqNtw!F4$r#w% zmx_21SslQ-?e6N@8TEnhY_sd1he-nPDpV8{6o%}U#y>{N?^4AD)05X;F}9L2SD-^% z)$VUI`$2Y3qZF8f?q6`P*G6Cw4$9^}1JaCVTk1kt;K^N)Gbncgz#RDv`18p=pd-qX zW#2i?NmWdMo)-4KOUD5OPjXEN-bDv{heFbKg7nw_29M7?z8s;c3wI^nS()Aom0mqpzbZo-f&T!Aup!l#GAomx9!GKOb_l1f{K!ZaRH+{NTZFxw2vvgEHDXsbysQZt9JPq~_9 zS(TN%^lu<5`VuQ!P$05HK5=}URxbS>1{@}d&KX$|t_8=3eE>0$4`9qA=1r4dH}cgx z{^~IYVxR7%wk3J$^T|i)EMFMV0Vi9rMlGa-4r3_rmy2BNfQwb@UskG~8FImu?kGJW zn}BVP=LzW=9vHCYfKPB3-Y|rx8QbQcTX$GRR8;Vk$y6D0QVjs*1w9-Lq9N3R45Hw9 zlq?;e*Jo&Y9G1ZzL)wO#mAxq(UOKQKRqO z?q(J#r5@+W@r1>YygN;j=+DkAzr@7E!CNbM?RK%mQ1x<`lQaA{OgGx@+<|@{1)C^% z1ia6_)8ni-e?Q0eK+#;Rr9)c^MUS5EFQP#j*DeA12WA1Iy$4`UtKTbSL5pIoN1?qz z5*wAF?RnS@RD0fhrq51shYF)xpd*&oA&X_G3K$dsyB6o!cqUF6j9#CS zLezM={Rv@JMmB!Fg}6BZZ*VT+_QRPeP6tB(y_!!s$^RTbKa(yNd-%q(ABvL-4S_2C zxHNh1#OZTNZ#)yPJe8f9nxZQ}AOCL=(8fZHUaPmWGv%NUybh^0hasrB4SexZ*(|Jm zt!0Eg^w`{BVhY^jYr(7ojN0Dbp1*u{kZ$gErPG``_A&U&WA`?9cFHbo8yT6y+$OOt zmmIE|RA-U@K{QAQIXKt<&T+PGk^i%~C9s=}BF7ab;4>%{dQBP<9vP`xsLf0GuBz&V zx8Ibw)-!NZxOsTMF1J1Y@fkNacUyhKZH6cf?yxHam`Vwh@y#5lyOF@C85-laDh&`l zxyi{{3Rv6GWY*Afu#}$O#x;A@`I&l|7WwNEO4^qVE6#i%n;BmndC{ zJ~9i9&z+9BManh|TeoHsU8km|rg4krKf5oTFF~L zfI>9{;N7z~>xW3r3bnp}YWJ&$5!O6z{-=3)OtHj4rjNBZKedEh;E*#vP0{h3#3x_m z$F2gb_vOXKDZOxkmUyOr{D55!q4DUEOKT)!f$0Q{IGNXsVa%+3`7u(`@R`y+@DuV1 z3=x3YBg$W@KF}I$u%ttOk-U=ay|+DLp`me!-eeU^sH&cF)~_1x{=hRtpTwzCr*Ifq z<=9dPz1&WB#ql3s6crUqlfC#6e*~t$eVl-Fxwl6Nh*Y#jGRP2CxUd0sers5SW^C zI1oC-)M2XEUQXe~aI7$t6lc2zCFSHBJh`Oub<@N>=-GhR=H($&wE7fFdF=l{yYA_V+hG$2A6m89*EFE3bMy0|aX=jTAEL&nEnv!v??D3sK+V$Z zpO*Q-U>=CAm94WdF_Bu4HE?m+0OC{ZpTF{ivk(9*?){WHC?UQ`a3s|?cN*@rIfHTILcS{-Wv+TmNwyJmezAY`+ zBUjf=z*5aoFrT`>w}NVW>GI{0n_cQmB%hx?kHW?32m!B0^8Nk98*|a1OSr?P3r?vV z)<=a2u2;eok578x;Yyqye>#gop^l-ZUj_w%DJ%}U%=`c_=Z-dek&%)*FO0}c03-sN zjuI^^>#JeNoZY3Rh1&_Y7Q;;hB9itS3uO%y=(gn$hyx4>^s3Rv4P)SYATfsh5QyC4Cr-dK1XI`HEy*f^+*zNyUBmCea)p|DUvGb@ z=y-XQ&_}?WQ!_K0VD6)=Pr?@J)h6k^hucJD3ddLd0%MM3KHb}++xbZ;ZeBV1xC!&o z;FN$V6K67$kiDp@%v8S$Vk= z+z1fS0jfD3Zj6|i2LX&-9UURlxVwRis~l1jqDbS@C#>=Q@25pgiwHjESC{Wf30%E; zwIDV1I<*gsHozt_GBcN*&L6oI-VQ?+q7gI>Fs+&C0c&QywK!a{7<1r9Jkk2)3w$91 z!q9%eZ7+hk=mrQ9=D?k2?EnB$M{6m(xsz(7`*;kA>`3H)5Yq?$m+0NiES}?U#bl+A zoa3-4?R{kx*>(l;1^f(wHtw5C*SDDQfe+Y%5LnvuL;k?`Bz^t;F7O0EcM1?Aq#?|= zA0jJI!;tM$g*8Y_kkU62Py0G<9l%AGrd7e>xYb{vS{?PR4@Ve7-qeR*Antl5ak&H zpqrDE16d*m=tDZHO@JkOvt>xOpTeWL)#p9aQSck@z(87k77)iBy8N?d%<&cAdsLlT zX2MW-5?u;kugCdk|MCH4Si|E5U4>v!PF&sC5QYK%DI>5wO8UnOX!;JM*Hejt!mfhw0TSB z7e+1c2Bax*zm?ASx@IY+KAirp@PW$-qUiAAHj+1-M$ICcZ4_ksQR;V&QQrFC3%~8D z#GPZ&EWlYbBJ3%vt{ixIflF}?7)9J&aQLeoiI2Wo9<^WNhXL*7ok%oQr;D22i5g@?<0aCzzXtK%fy9{|;m}pb1d6tF{2mCkT2(ciq2#U+K!i z+sHTQBt9qLgw=sWoyx`W6qW!?Ac}L=^f*uf7f&e?YjVZVlsOKzJ#MOKS)hp&y5;=4 z;!@jheuAe#S>>qVk>Ph9Gr!zQ7d2|VuhGyfE-Gi(uw071VKx_YL2I!PAZkEcATTx{ zsc@G&0fqxU6s{t0NMH(MDFtUD@Yz5ppCceJAHskIMb_QD%J#jluh_=IXnlP>SOTmJ z43yz1fu%G21tJAd-QeILs1o!+#w1GcE@fvSyv0xh+Xu`B17)TmAQ=EPgQ8!~^vMKE zczvu$OHW@MSAG}0`yC{9JUhb@yx*Vd&l zqtdIAaahXFE3EhtnT;7-(u_KU$i%_2rY?L&yI5hLz_PMce-fHjUwD?H1#pj*DAKPS z7r_OWHl&rnDa5FUtgf!s+=O`rK8X3#UYe7*_Njw2Flbsu!3GYARLKcQ%vL~S)!n-) zV9x6AkCBu2FWigj?Cb>HGY~2$*b`=NpOX~hKVu0v3hNm4`r5FbHuC4zL#v@4Ed_;g z(G#oU{yZvek&NQzYDi?6V&bp(3YPRsJQdi;;Nxs;=fHLQ!~V~jpz#Iq z+%=(6zs9k*ZfQF2D5qO<-5tG@ypah@tiTa|OhQiowoWLP%(5U0Z0B#Oj`&Z2(E!(aDD-D1BCrDi%Uxp{^!oUOMAp)-c{_jDn-6E@!d)8 z^AI4GO^2};-KNe%0~$)l8j>%zBJQ*%Tm1Sxnkeymtp5?A6-NN^4YYv6-lvEyLC;8e zbL;6ubp#@C_?>P>XqVOt#hGG*YM1%5=A%`N#w#nyjuWnhl=dL z%eQUXFSIC28)H#=q7y9<{^9=0<5q_I{gr+y?R2}Mc@h(mJ;IG1VePBgHcx(GtOl#J z$Ninc!aJep@3%r>U&>S7mi&hH6Xe#tdCTuM`Wdbk>vLZ7^$4$W*1?k_!*YwHVGpnI zy!zXOT^%~^mzb52ng|gZW4Y+|6zSGtt#T$+x`3qH-#GWSolGazg4q*O(p-uzy#8qs z=DHyFlY!|3Qm6U{BpFv*N=lRUm?}$3uD7uDHy%Hty3OVeMEVBayE#-@L%Fa$Ck$E^lt z2;c(dsf?U-bkASox;>>SFy##v%=pgxC4p?CybhnBal&z3K&89&#S03{o;$2cNOSXH ztlK+hR=9Z!ltgVBW%U9Fsn;`C&;C}7u8$UW_LIFAHJ|X^*;#$9)`58uv#CrM{rntk zjbdB=HfJLHen!#gQr` zoS~&fkgKxj2V7CGDrv|m89i``of_FgJ!bq>=l#u;I+?dV0l?o?XFY$$wS&MMeM=g&~snPGglk zSEfYV?^SrSlIFdMjGnMivx^fx!{qD`89ZC*w);_;KfJHFz5xyYW`!q{n8ee}Jg)3J!9rI~{4e(#UIp&>$7dP*~I4ZczO+>GEzT`@N2kRiU2E5xp+cKOP$ z-rxsU=(aaAFu`cFN4z-Za7@%*d5j;Xx@2vl z)^Pf&3Ej7E@aAEZ)}|DMlxY2@PYF(ffHCrN7|Ild9z2-q>^#_u^8D4q;X5Z)!ckQ1 zaUkdl6}XAPdk3aBpERJETh7d8vufpp;@Jtl_Qk#Pg|3JD0&;P^g*ukp<~qf)zRN{@ zlAVWe2(X3q`cKL>D-Pwzw42)_q5iQWvXtN zo5isGsj5O*o?n@`0cF8Bq$FkhJE&068_u?(2Kpq+_3@mR8MrPDR%a=%&t{ z+T;Qib1ELz7J*0x4?fH~>M5gUU;+9K=$}z(Xb3%lIsx6l0NNqh0#iviDfBMFU zg)zZ5KS#I9Q3io)I)}n0eSb@kS-_dB^i&=R5&^u+n=(kvr&mFKgvrexTjNoT2SZoN z{UI&2L{{^GoLzr-Us;F!Yx3vKT?~|yjuTKX}R+|S6<|i{ACUdCF z^eOrS#RNeXxVD~{n3%Y@D{d$#`Ebw!Xa!kwNM{1}htg6_yrR4+*Q z{(JN$1B1TGJVGWwuP9{XYK8pF2)$f3QDL;~b(6+!aLbhE-Zoy#wW7} zXuTGpPYXk_aSnz5MHCsJTfIs35)7{F{QOAwNf@9QmO)q}e<&+Ex%f#}i8c=nbRr1f zwU79BhMBX`Mpa;#1IPDBt&cEoW?>=QTmvW_&^-GPbY45VWq%rP=^wJQKo478yR3eU zvqw2ysw7b#dZ(KWTih8Z$Hzq)OY1p2IBtP#e;K(WH)bQ0dHv+6jjO*v!))CD8PV8prqdqE!XL!^}_~I z5K7+uqwKmdw9Q>egyUAUQ_!y4o$8w9Q5c&~!Iyt=c|y@4f)q5Q^xRxtw-uwn2-@&- zfzh8pFwV$;fh8kqDkuRP-q^)1?ds|Zy&^A&cTsP_(dBoFpa5B+2sPsgQQwe!CE%Zv zi)KlkLvR6+SLwp;)4vE4QZz49VC|fXl+>wibp-08=<$q7kig2I&UD8cx*g$NeQZ1V zk?VdeQ-H#I$5>&ERB?UOaFnhpQb9g=-_>3!97{+L+o_woD32Wb(ZjGRWCSElo|gVa1+$bHnk5jIEj)1@i=?|5)x4FkkEPlQ>=0 zWe`NUtJD9eK;sx|ePqF>#PBG+4>Xcw)t>6;0CM+@A0&knRp!KJ*CgI4%OE}eOp&1B z#47eY^dq14)%A7Uuv0V|L*3-ep{AnJ+t&y3ufk9z_CW~S9M5j`hNymuuufQG_uWZB z!O?*kzbANO+$cwe;7b!5pTCGjLjj4$N8j^&l5%pZD^XV!4|i)P-BQOYB|*PJ=1imO zpEp+QAE}`X%yOFkaOuaqe))#mpspE8otIs&RahhGXH7JJG&kzCC2Zv;>3W!&4&Qv> zQo5F0bZvEc7D!ZUOG^&>DG^9hemD+y|1pdjC2HDT90*G``sHDp+Du#{B6Qz^r&B8s zOA6j*b!Fx2A1UTh6imtH%(ILxGYbpgh4f)M0Nd*tKQ8D1Pb%~)3Cqe%EN)kWk32f! zeeAi))H7m3d?sygo}M_3;9d0IV(m;g&yVfx2oVl6X%6*P>mBSOlWAsH9@(lV7xsKE zjCrB@a9+KH#;buwtKPZfCnichM&i{}L58D`nOSH}4cqXQ)~{dPJ5z*i2X_0s(-ClA z^EWDt^j_Q_6SvgBZ@wwKW7YHdks2GDGo727+K z@n@OFwBZ}eXK2b6&=)C!ja%m(Us*i8cxHZgNa?x7``h2yZr`RlBBn&|_VhUHP` zKsoBnf5c9z#~u1)bFKR!q=}AEoFMK|CoRZSzI*Rp599pEdS+w;fF$!lghP8m3;AtP zx@+X`)Syt{H$T0RD?|%%4?iV!(N>49ysNh;(`D*L09k~4CEhNaK4!$cbJ*Ycvkm92 z4WULb&kN;xX;lPt;lm=kNb`lW$@&KgnvtzVpHDiE^}aL&dQ``1Mx~F@qk8CEbr|W1 z_AAFeh=e$*+v=$}qwT&Q*Vt_vq?u``-r<(3(rlfdp5E^d3L+2D6$)Aix{-m6eENGQ zP!u}Pfpa8G#fjf^%$XZdP3V^pF0@WZZx2?=XWo%8{mCFJGx1&yXzc6$cKFd|;Ga=P zP3>b-kA_Sn4NZr;0W@*Vdhp!3_2OJD6pOTqc(*9p+1uaPpr1DOH_DHW_F3FUSz3C` zbY72!zERd3^vDG4?=lV$&hmnaH@=KvbMR8Cp1r4p)Xb?_i-@Q4A^+0R535hY9Rs>t zDp-6hC;OrR)!pzwY>8V^vJy^X)`!XWKU}(dH>tXso+#Hm{`p$i^C)jG=imDlGfK(L z&3C#!k_fM*lF9h$)#Mq{M@C=MkCkDb4gGzK{@$CYb82evgGfmqHFILsWLtcn8uhfc zMy`uT#09-h_gXFu+;^#hks~9XqHTBj5m79bvuOHO#b4Es+%OdH@&qthE32!P3RW!O zeR%GyTMfd9PLM;l79;!vOmR=DQ8TJa!c|u%%^Pe?FD2 z!LBWi`ZSmGYKj%l*T4|kp(BYF+XNP-pz!z zr#U`+SOEy%(Y?Z&4L0IP26g1@(w5%E-Cg&vO~Sp(Wc-itW@3q8RiPuUb{0&wFgDBK zF>W>71Z!!XhX3?VHGl*6N$=GU$2BzY zh+saXnD3LkX$$C0b4XMbNmhZo+aK;wvZ_j#HOIo;ZeULCWA-Y;>$eQDR+pybTGsDr z60~NC{W*R*iiOdg#Z)fT(2UW1i0QQ|Nb^FEhL!El*}J=`Tz5^qTNUkGTyAW5ZRG`C z3qKefJ`luw8XUyFpFA(;;)pp%yqAo%_s5M3d;>5pSWnjKKPVk{qK|5WBW-ZVUe&=O zVSi81W>2fZ-16^0@QKLWAu-F)M!h&m4;|Fm(=&c*J-iNKV)0>VN&g?Tc%<+U?i{;3 zu|@QtP^Y7atE8l^{sDy;e^Gea*Yf*3Xs(eO75fcc&2*MLCdW}Nx&6J5jH$f31t->f z=PXJpXx+=g>sD*oUg|jEt`bfzIussK(Psi{!dRf~8bpn5oT#w{II1oURH8l;8g6T? z8|KX?L1$4ZCD(#GiD+o(ImQV*PC$g7&viMGWz>Sxp--AIn3apm((d1_H3sthfrecW5TTu%M@>mv{v# zRSAiRG+|+YQz)c?TxHS(6@LU?93J?oDUbNMre zYig&u`4C8HXWlU_U4JF#s7_Q-&XNS%Lc<#T3GlAMJST`elm1CI)jBgao_<=IM6{x zCEtQD!XZMle3oY?VSa&D1yz_T6gfcMZKC{nu=zb?b_B=kc{T=8tc5>PR|k(t%ngvm zS$tGg$*+L~Dc!FQLO!nd!xK)*0b{)3X@c`0#6siI^E=gJxzc8*Wrp1E+DZ5U)G6F$5Z=1-)Jn-!s!m+7m`MW=l5|Y9*)9WNW$MS!lV*seo{wQlQ2&LB4 zA-8j&w@j3U`qCvcQ`4qN+|dd{Rd5_dAhnfcgQuR&wr{fu7r$ zTR}|uAw2V%L^)S2ZPbAecDl?$A*1tMg}?s;)57>Z*hYUtt^yu3E-p3Lv0zEdNVFW( zfA$}iY+}vsFrR~^C$|lzp|Z7n;h$UE?l3#VzPa>UF640ltk+>dwQqP=RRpX5w6|j) zyk3|}82oTdb|ebRFV{Z^7up;@QHuDO#-`U|=ZK-cm(vk2xi)5fvDQ;H1rKtvP39o zt^2dw)r;bHvmcMjucRv_p^g?`KT?umo*gneJON90XmiuGONobv2SzsTODXD56}vAG z(v+?Oebta=kr8|a?#r+hN1&nszD3?Q@1kqf&c~jk;%;kbn1aTd`8$k^GHPn;;9Bft zG|L~cU~ZZ0%7FrfU*ygU+X&f7nuqNet6W~wcB8=4`1qmLfzh|_OOLx=@Yz(*_Poa* zJlaO%t)dzRWdRM7}w#Mf%r*X zW(wLVGbiVz(DT8DnhG?UMOAOR<;#~a-F28SBEs(*)Jca+k}9n911XhhIak5BJHeA_ ze0tzIj8_XXqs{WFYUTLXZqXHvw;OMLX>TA3q^Y6%+3*z`BGlWXE!fXD|!f3qO zsrT?KD}(`Gu@}N5za5Co2X!iD~!n$%HzS%sj z((U%P^Cd2emm0&Dj_?Tb_T1p=s)>of5eUg{z5C9|p``dumPETm@`2OGj-nU<8C1MW zlg4U4+nv?bvxJRM*;bB(bJG<0XdEQ@2$1BUeH0-sUd^Z?g}dvI3}vu^y4t|752oJ$ zr*|u^??Z&PbFS~TrVYitb)wf~^cn)LS*-OfYR5t*KwIMq7l3Rx24zGH8Y0z!fh#-& z9FEez%xw-fmZ)I31pLPmpPuey#xN$43`f$v$LhT6vtq=vpZ-=Y$WRs@j)>>xyS(!q z|E|iWh0gP=tW%QI0xUdS)5_d=76)!i}Lgk{rxzv=@K0-r?dxyZp=_5IqiL zY+|kL6i|j*WX5NU#=P5|gqJJ4_W(0kOI?KR{?Nv!&fBYwCn6>$ zhITWe84i4cheCPYp_dCQ2Q-j^o`G?KlU@#ClOG!!`|O!G-0E{Ebhiy5h63oc!jH!_ zfR{VMWcY^Wg>zWKSEy^;R+lo*usuA6l7z=>)OPV76T#SBUuFW^(R|`9g{L^QaGkAF zUBK&T4y3w_wPp@!BKxK5hx<}0`mM{6wIu(&5^O~j6maUy*xOo0hab;bgObKRoEPFZ zTK`3V=8O#&v|`^Q!)zI`h#^JGdi&Pa9KrY58k&%BHul-!q60UU-Bax3tT=Ld?(-%rf`F_G z8lW#s-~OKq_4mT$U-h~S26(U?Q(d`o<t>ugMk1}?kev+o<*K3F!RC+M-q1hq*(_gs z4XcGj!Y@m!pm^eP>Mt`bf}GpR?tqllb@3OW@15rdzSh+p|AF&w{{?*0E)CTETY*tW zha=>_hdJaQwl)Lpn^>e#p>|ApfKhX?24aff`Zx`|=?zPuRD7|0d1&pQI5H|IFmRlM z(6^55$@&7MIN?Q~zi7ssB!nsFD5ntV@BG)dv%H2|w{c!5+*Jl6&;R_7PUsf~46AvF zVL?SQ{1{o_a%B0zR~TnKhP%H1W5I+U1Fz@rn>ai~?a%>)`_XQn4(gxErT@5jPxj2t zWLa;1`Zt@I?(BZB^)Ckyqfp27WpQsI3tR=MXc3mK>>FrZ!GkY8>^JYl7qjqrc4heB zC~=yhPIb4_MEW?D=MXqkyp-IodkCnTa^|U!m$P@>^Aw28jyq66cBj4?cMKBly-7li zL8i|E(4!-7zg}X6_gOXZ?QpxwPjgtAYN7Go6#cXIDXp}WbSRKE2#eTUovnN*ba{EM zsCKd&_p^>}wZJqqWDL$xLX~cbcXmhYT|mG2-hC7_G-FEwr4CEuqItHU1ZSKD#J6_c z7WS>n-BkD%)nF(QMP7hXK9fQkAAzf0U<2X>Qt|JF9nu)8Dmt}L47O0na_%39*mx(( zrgysuP;aRN{GGiBCyH@7p+oZX=S-8m`rtQ>usnuriE6Jw{fm|mY?83gw}yu2Jv1t% z=Z*T|ccee?fo8R9o-f3a$G(xm0(5SODMRy!X1}=B4zqcyecFHo-(JK+A%n?G__-4k z%9aGLe1qwUMp=}B6-qk=h4%1zxC*g-JKi!Hv%(}jFJ669>g=m}k@sspzT!0x1^ADy zT-xMlgQasR8qW;3@k8l0_?=5RATtR*w9qsZXm7T&?}&URp!5tg4sP?f+^Pf3+|MM(G|!);a~-urGWv5 z?YM~IL;B2a3NS%{ZvtMGgS~x2pX|K&g?MQ$D30zMc1`@2g#A?TM$l6I&P7fV`o8qg zi0pG+m9PO$HxXUCT9BncWFa=xYGS4k%Sn)L2s_8&^*s)Xg_Ej*^S$}~3s(>-D)fmA++p2)$==)M z`@36fL1mD9k%`R>2j2ly%4a2jPaZb(NU>RUb@fR9D5+%Q^_^Z^^ zikz~P(stYgGLE4la9e+|uyt~Za!kwUnpr#8Ab|=tec9WY&&S90Q(KA5nFDBp4wmXk zBB5LOi?17<+A~gQjfay?!X_aS1}yhQe(7->U#v2t7wGTjr<@=WF}cRx_}I|!`Kc4q zvZjxwOq2r9Q3L)rxH;ggHAP;>nNR_ti$t7ED7-nF`-TU%ot(Zpy?hA?dfXy$uFa(&V3=>Xmr^KDSJg$XMRkxVWzT zVFMchTMC6;0gK&b}ncrm<4w)njT~q7z5dK0keNR zO#_4LnJl@y7vljCGLFnZ;}S^SdwYAryG!*jKB{;^X-{OkcEp01G~B*KI?4#N1Wn*T zLu4fR$Ncxt7&TAdC42vVq~#*KdNyr=R??#Vgr9SBAPoV3i(wahji{@C25=AHcR_)C zgmYn(BvO(nEV6m=zV_Xa*0HKr!upTvKQ(G^ztSTV-ghl7v_@_->TCl73?~JZpwH%| zk*QZXTbhdv3FXGd#_Qm-L?T;_|5TLE@4a5~JfFa^u@DsE!p zYi!}nl##=xboc;wrFS|l?S~2ls%wNdr8f8M%R=+(eeth9eY&ru6&F)9^*+Bwqk#7W zDvIi8D-#M%L3fo$txtuSm|IvV#&Y`29oMe$tejz?FMOam(S*A zIHoeo=0(lG0`Mj|xnl!MO!e)H^9g``VY>=RS6!zq7Q)i`X#`lZ8y*$qCnlo2Jl&%s z7f6VSyZZYxCBj)j8y9`Hoxq@Y@Y}g02Yc>P=N#Z{@)aTkJ;e>~FnlViRe<;iui)S{ zei!WH0Crt<<@c!JKFhxLB7vBw65%AymkJqe@I=xI8sBEqz9eSYnwt${ALDnQnlY*M z46@PD#6L6xVjE(=+E%1_W4ilbAOk+PUEL(?J1l$(7=@fGpf~^;2OERY)S>2pG?~W9 zd-(XBKBW7eS_HUF_y`mp=w>A)1k7h+Fsct9hOE<;mSlj+3-_cjAQ%&qAFy0%gro-q z5by+mD0X=Beq_`H5ytv!S|bQ4bWu>ynx3Ek4k{+WVFtknKTl;`qGxQ}zDy}fy4|(N1I2#i*327N?YiqF6J4%bS9DV?=4Zdmxcrh4~ z5%BGe9qezs``XuU!*==7OqfoXt6hL!lVuzKt%Q?n?*w;+Ot=+fw`re(Ra^@huRJr@ zt%kTBF5BKRO)`+;!>G6|ZMULT7^+$3i(f>~tz6}P?s8WMvD}+`vyZzbAB2G0>bf0% zR6QMn5@kFQa@!P~hWY6SpeX}DWk7Xn#U-LZBP;<8vnAGo2xmkOUDRVkx0{jrkUfePe3 zAj6eHCgu_qRYXF-7YN(@o|%WDv%znz7~Q}F02Pp;`jh+OcRo1WiP%@8^B%3@T4BV zzB7fn$Hw4ZHhQYAzWbDL${8kFrB;}S?aski=iwnoiRk9;b+XDI5TlC{aAxuOAf=yj zF!Pn>&s-BtF$eI-g`v-43DW3^=v#A=fLpiMsT_7G$c?~S2kOYqy1W0*-3Q%AtpGER z$4_UFSudDNHP#<^ax)7?lq21@FN;HZ9Owzi6{XEaHgB`wA4n&{V|HsrPIOH|Ccud) z74F0EfZi}LgHE6x6lU@jq%v@+Dt;JAj5J1rhhMnY6|06I3l z4YFy%EVgakaf+4oOQl1$?Px5rMw5+i4}!XQm&?_xt{ajq9(W^kbY4Aon$D|aas2%Y zs?qnRI?C|wx;Vnh zb+6~KSAx}2PE^z^iRN&!ps-J#!0J!SCXM8r%*=oR^Zm3TChYl=fVmpojMP-z6CxKZ za}ycfIpi>Lt3!leP zFdK{;ROT}Jr1-|g{T+u5XMrR5v#_^u-yeiw&Oc3M){0QdOhIAXH>)uxd)$!df&$&? zz5ZIMGfA7joVWsR#<#md|KVtv(ap9 zhM4j`hnA@7Y7eD-c!=48l3*o(fCSsnEu(y(VhRj_3Y@0!mzev<=?~!jSEcpbB8j4) zr|R`M#Q-s6e9fVY$CKMZ?-Q-o%M1y|iT2ShkB!e33cGWSl3%SjPieOA{dVTqVwR*9 z6#7#B#w`Ab<&V8O4>lXz9D0~27$XDocPU9`R9I`PtQoUd*;(8&`2h)m4+Rk<)*moH_?IGx&u~nWss9*qj%J zGe>S^pm!{CRANE)0&6$?#xLUXb0u<=hjhUhp9UU|8K9AZ542p(aZBwK(iGFz07tb@ za^>XbJH%gTuEi3f#+YtGoPB9|*_?Vvs}{fb{M7A{gT1NPGU3Bv3uo{nM5Eo@+#nVN zzXhgtk4TR1cfC$8v}2iA)2LOiB&4UYYV)*swL;|<^E4%Is{0k9y0E-+sJa0eSK zJOOGtB_%f;iv^lKQbWVY$Ow+?%YijVfI7r`RD)XPCn2tC<1QQ{DgOwH?quLh-AF)f zd_7%VX?z7b@1halKlb$Ua=rt8 z?d`AWOHpz%JT0$aRfZ^3zQuXmCJZtHY{KC;!{6Bdl6fr+9Mmv(-t9z4?_$7y1-Lzw zuS@{ZK8@iL5b%V?B1cL45s)pE2?=sQVu*@3lo;BWq)g=1Zrsd%`Rv(=QBLLuGBS*` zw6xc+!;TOR66}}S-4(gUp1w4)9ftQ0l;;M!o&L;sTtWB(3Fqz`MCoVG2u6i&&=v#;~=4EEWHmSd;yMJmKM%(#2;Ik3+1fLDFKSsCsDjY-s-^Y}Nl^rZC zR}^*b&P$Gv;RUbk-semS*7%Q<52rC|W}1U?F%Hd^`25rjJe-ZH(RRcsd;+W~6tqx<9Dsj0N&IAaZ zYt<<;QAotVf#aEx-#`G#tJOdmQ}El4AMH=CsCWW@vGaoKbsNfnC~Rfb;bdv3P{U%Q zqoT~a+RG#D_oPHcp4b3kNG=t;v@>mznnSX+$(HXZAXXvu zC{@bVzLeLKPR6Q4Sdah5_ihz&@zK6MI34b30+zZ>e(4`ej?2WPG7jkhJ9jG=#|%9J zx;X7~40{pRG7w|%$kP=#9DE!cgnp$RxC|`9ZW(6R#RB97aRLe@?h(-`SKF>^X@Lt4 zqZC`el`m5c`q;5!Bc#V7{R55tnIEmdy`g?P0}Z?M+RZL)d~Lj-gqHs`#_X=BMFj<2 zYa!FTXnt8zTj!ee?DKYe+wqXnGlYb+Mcdz7E}NPnOAEuh_F#M1-mV&HFNC3A7uJI5 z%7Wm%WmV3on{g_(-@C!5U~hcu?ZtfW47sTvnbLf6(#V$k$a0Go=d>GcsIOwi-?Qj_ zhh)8DL*M%1rc=Q9*564+g8pfuo6^FFuD(&pxvVZ^ny+vVkWRt3)EbJ7_f_FJM z4CH7!uPwU@Y@37YhC)&bTsLi5K?LTO2t+t&E#s`rJymGmXD6jMa}2&urVkp-o9s6S z0*qCTU0t1PoCFZPze+}yq!+q9O1-ZXfm3qq`U>|u3FGj89!$m8WBTxylqibpPG>rw%B8y|4E#a&FvfCUcpYx3B%Cb;FH_np zmAS+PMcoHQG>0Y~#=B}y9AjnsI+bqsPqn5-x~*neSXu^9%8|-T+U-o+KRd~wlsH>U zye3R|mh>pIO_+g}z#-`-@Sj23bm(dTpp0uAhR??jiImq?d_K<3*obc2muF|gvSnp6 z(uT^v+pK&mGks_;p(uz(qb+*@712Lh`1%YMCs+>QxEEY(*V?+h${SobGB-6Iungv9 zPLEMF0AWPU=O~Ri2YRW!i%T*TN*m*Y^tQ+CCtRBL7t@Nb2rI`vPHRatH2HM%v(a@f z6q%gBn^;=c=z#>WOgE2>rRCYJ`K>KDmffdX2+^tuBE}wBEs4-$;c5Z&MrIR%dHxLT zF~Ue`i%qb79olpZ;qgigFYemGT5dd|YXx)V_fPnqo2ewzJ-w*USdUTicacqVIobV5 zitx!4YM6W&QN8oA1WnfpB8%gFBk9^<7g<>MNpTp)*CYpx04eJHD2Z40K znhwd56yHRnS#r~yn4c~pz23L(9wTSdHf@Dxnf9F%iDChOn_vFH5>Asdz1j`ge@9ww z^#b&iowBzXWfJ94szoZdp8>ZN%DKNjnZ_~{7x6jS>%K{w60j05d&%{y%Wy5P*wb(q z2uCUD+P(bs(E8WnqM(~S?cPjwf>GgZr`}(chKGin&H6`R!>PxaXBAu0&bXnYqkjOq zhkMuZEf(P*8sKQ+IW$`2C1l39KZtyjR#eRT2~P!!SG3xRY$N4=WGup8|4$jqT9|Dc9Rbf ztrzprdPT()G-5se7k4Hv@_e#}u8Z-~=FyR=gJ8CMsR*E&?J zJtGlHsZSSPNUMj$!B-Xl?P~|eEYv{oz18H~h@c(LO8#*%!+N+T?rfC#9L~odhV$`r z!nMnizf266)$mxsEzlh5{4ao1m3OA0scEhsPIlvh7AQ@rvA)O03gGkli_;mUxlKSI zYbHDr$kMX!^J$f}JY<2;&G5U8F>!?<%-5EIjxqj}Jig)4y~WgG%bYt1iAIe{i^MO*~dfh;tL;qh@RGh!ANd3!q^ z-?q!o{B_tI<{_tIfZn=!^QLHsu<(sJKY|V> z1H08eyVM4L7rDhz_6T~@y;dLg)IzSUe}@2tpMhUicZ-M&`>)*m9qkBW8~mk=tWv81b(I#FRD&>puv&LvrJKIKJ~ZKt z+v^v~ssacjyE!#${-}?Qa;$_F?ZWkA)z|~3MF?7ls4ZiS9XzM5O zIK71Z8ytY?DgQG3`@eYK&6_s?`IS4)CL~O(Pp;kq@Qoo9@i*A_8+c36bE9!h`O`vA zm{3eUZTxZk+t!5>_%6ek^bx9d?BeN{a4QA!7LoTG;iFDxHK%$i^RY9DSzCMijpfm! zpYLL0G$*^*`GL0+p91HJEJyl?9cpl>>3$cxghbsUC^$3s6aJ!K(tkX)fGBPyHMLGA zO*FX*7MgGaUAgnzvfTQAzRHVxQM;+&&cUW7;DT+(rP)=@f<>F>vzmktX(ys`wjU`C zRo|z|apb$Fl)&4Z?_U~z@Kz_X&zZMqhR)M^qY1Zxtrt=iG}7G1$6z%gD=TXUmHXqz z_nran4Ns*74gl+HS~7u$lU;{G_wL=RYzT)e0>GH?jsdQdex>7Fz6wDBocR5^Zvw1=$OKthYm-t z>0#nW=JjUpDfNq_CpI|#Qb;Jx&ErK?IdQy*@kBxd3)%ezY{MmnhzL`x<2SO-a@=c8 zvu8A}CCC1JtBXPe2nRIw7yODZ#}Qy%F8m+MVG1RK$TUC|Z(#~lS_<=yz|Ny`u0xy? zza1V<#0Ol0?vA$c?{)T=B4At#=PApC&7pcmMs2OFvndqLjh|+HWWVjla-1adPh1;c zjb{hZ%_3a^#P4Cnq*pFNCKXbttJ ziRJ?GA%ad*G(YI-%a%*$Uif4-&XehUnr)BY0;qe?0}|AP z2x@o4Oeldc=TD*0@RA8<7h$O6qs`D(f#D7n^feGizI_Xqg)tLM4i6ta5DI5gs89$6 zdTs3>Rv(JVZP`)@D-WQPWo6$mD)C>;&kqXsUSZvx@p+~46e!V9j)I<-lp8=OIARqt|CO98j9X)^@NC8u)&+7b;nF_lgfZpK%A57cY z+o66Pgd!F+vXwidU*Z|#*Z0_0S2PYnBbMo?2X%b@tYd5pYC~LNVky__gZ&sxzH`>y zoWi9&?c0@IB#tKWvfyv6mGdnVV7+pIo^y~zcF@zFKZkwss!N<9^9c@_Q(ub>nS9bI zD=W)1%W-!P+!$ea^CWkeciFPEj11q1d7&~^MVwfG%nj$D?KHO7je59}a-4vAmu6UN zXe@{^(AC{V;+?OSh8M_FkB~J(gVffLYicsoUnx}93Zlm@ohp50Pg}xHIqe1bnk#%j z%s6`Fh!6&^D>958P)k(sF2B@YWn2DyR7zKip!|J#sOvu}U-sj&)&-2Z{96gWoBovZ zBf$3;z0;rPzB7CMc+^bzye_xx0Ob{e;EtbaN=k<;*lerx8Lb)ctP~fg!WdSioif@I zY=60ZmElKhH45IQs8lmWcMrYM1sv)%P@TNWU3RWYDt!5OSADuSzc2QC2?aiG^*($yFv3(XR8 zCL+fi*md;UBifX`hw0OkGCToD3kKqL?AU>YN)C70y1LYVR6q;{RTJ_V+_EENvBDwh z)OFc&Kg;0MqO6QPom9j(!cMYyBY3E=lltm_lhXAeQz}4Nx-P{g*?rtCV%jxm#lEz+ zLo>4y_gw2Z#dRQK=;8e)i$Ryroifz|j}zi{47X4}Uyq{RPcLd^6Gx352R4R3H?f-t zkH;+AS@8Qqcqj_F$Gk?6Cyy>99*O0k=DKFM(cST9!}u`F_51P^+JU^wyyvB&KXrXG zO&O?e&{(#-jd$6XHWbzAjDi0D-SJliSP8py(Cf!EQN&>cn8i^XD}M1+tqr+kMem3AU#4H4ctS zOlsWRk6)Kb#n8;vD`tvGza>bGBR~5q%-`I)g&a&>Q!-Hx#GNZ!;0qa0!}%d{riKpA7M9i zt9H>plc^Ik=b8G)n?gn7xQ@!pKeRFYTCDp#+*!`;5N9z|ZD-)&I+f^sLm2*B7 z@e+dEQ>W`RScvO}*t$zsoBbWToMBfr9ZI>_5#C%*Uv=M_!JqwN!XH-h@W6eun25p8 zc!mZC;*69s&Gb&w`(IM)^ba(q_gxj%xH1Y@{Z@cVx>4K{FRu`2sGax8O0OqoQ8kBV zq4ij)r$qr}dkigsnunmCX#oS7F%rUYaFF7oxqo)0Hr%*zgN==iu&_5d9QH<&w24T2 zHjXl{H!GbNxDlYkcAPv)$vu;6Wx+NUvCVBsgMF-t8&c=U+R z(yo|!FZ1^&zkovJlpz?p?MwJ%uWt>p)#x=QH(S}WTgPK}sg@-r;3b^5jOliR@Q#;F zYXLLw{FSv)^mz+9-v1gX)R)`q}g7>wMfB@l++1aiS72qtdZe*5RysEUm z-q!;Iv8QSm;s~KpaFnla#c!oi;hJkgtPw_q{T;mr6C;vl`z3xEx2yJpJK-K5^pfj+ z`cvH;1|BA>5y%a5A4|s=Jd_8uh}J@^P~WiYF@4P6ucU!<=sr`n>$ZFj`IlOBstI!v%+wF3aspQ+4ocCGz*ebKG}9_p5;K` zj?*QtZ%>cqJ2qF`NW_dxCK{Ms<+N=8ouGk3KF8+7(WisM!+vfvXU(#;u{oIT&Y-X)#eV z1ntb6`CK`okG}N#5KWao(tXp*C&yvi z58%)bG{YV}c;MXTaI;21W67I0G6zDi+I5Zo>lyZUL=GJ(h#KBO3RK+I#(0ze{Q14b z=|i&P9T&sQBz#XxI_$brRL$feVi_R5Y#16rI}A7;UJvfj+Kw|ila04z$gkhBrO!ux z?D&ZjNi^CUxCCozKJN!4A}g-HNayB! zuzbP|z*LXr2C(YwW?*>lIycui81<{c_kox9WP~h)IN``oj)uopeyME-t8QEetzaNQOV)n>*7U(Ryk0St)v-CMk-7v^=aiMx&Uv zxAy=xLvTxAxW#+T$LHu(!ukFM_&IkduWzlkug{A3iN!>?;49?a)OxUbv&G8~h@_(U;Z!~>5kx}9pvYhLEZe%{xroJ`XzNadF+kpaz zg#fa@&o&Tpnfug$6;mYP8_()1eT{eNlAx(CXcQJ6DOW|q*m>)6zyi1}csx}Pl|@bR zRxHQj)dK7ItP4bgaO+Cy3zypW-~!~EE`Sa(i{QH#+r{}A|E3mdUPzJ>*8#{aRfFWu4{qM1$Jx$@l!Zv9*K>1!{LM}>$vv=W(Z{+6-U~c9){eNP8@<+uw!`Rl_3F>C z)TSIgdcedt>1&6gtm%Foo%)0iW^)fVn^*btdu+C^*G=*j_zqLSZ0-$gpL(@iYd-y( zsRKA3Z^=FOj~d3`VRd;Wk#q~t)Pg682H`p;(j5)o--hFks zb!oI)>e1;e0dZ9zzq3>N_(0>D{HVL76=hn91Ew=H_Y+wvf@+^S6HZP$VScK#juFL9I5jkxR{~ryZ@?-w$wbUU|H!W&~I`#0=u3wo&VO8WAu@7JoYT2;vNG>sV9tNX-+z~KaLS(pA5Z9bi7c`Jefi$K;7&+5Uc!z>xQa4cDRNY~OE{4&s0_JW-B?dJqTpCx1(H`T6+Tp_yp!&k*aL=A;{JvB$$i}yvFHDb&oVIXcqyybY z!#38yNF-(^occ}zSx1L>LKxkD`q}OkYAH_EqC)SdWUXemhsTNsnBC4kUPLbGVEcDu zg^aY>|LlLtM~r$^4LeAzS66?Xk=cw@QBcygw`S}zh)8p z(tmqhXK2YVg13I8e@8`7r#r#Z^ECFAGo=jY&-1UvHXzBjOQ zQp*Qw^n`t;LSkcgw|edR#@1@`r{{|jn(}tJpK%;$l{GVyIDLAX?`PMx6MMK`ODM&} z??*c}YN|k9^9Tzy`5%UDFxn9kb5hT|=U>|l2bYSWpZ)L3v{I8cjl)yn%bqjso3JVPNifBwWPQI zR7YKE@E5%qAE3*;Uc)H$hrKYWMZXK`k%A>06!+s4YuR=K(!JV0C15F-)0dhd{) z-chgYrAga9Z5SmyFd`>CFqrdIPjGQHPo3@@)8*a8tV)MdiNBJ!g}uEEg>uJfeUIVT z3fuK@=dFJ{6yu8OZPS1g)`BBKBZDbV8Qe?iR{6FkI~L~Z>5;(k+T-Mwb4CrLnY?HA zxXOW*xXQkw;5=1SB9~5?;uOW$J?)j(_lkAy6S_w}#jE*(%fVxOsbr8!4GEbU81`k= z1;WTn%AR0`)W|!Xya^ichPftS7wAB-d#HEgbr$J)Tg>Piq>TYm})-L zc`4}`J%n;&S6qhk8(Ed;Y2M!KisPTB5&(-wivqhCOpP8UB$ysN$W8cZ^Six{{1_qx2likHHm|;3?%X-&oi1)U(8&46+ z$G{kAZHXycH-0mETj$0T9V$C4UrfQY&I5{@_mLjg@7xiB7{bA~&Hpc_xr8-Ml*}{k ziq8Ab#Kgw-fQeC^PFO}f-OjD&Q!M7lrMxXd6%N>hTv8y)fBzXuwo}LUs*`X#c<-qv z3`W2Cp622Tb8}t=6<2~%-Bai{y{-H`3wMOlQ&Csf|LWDN$j5$umB5+|BXe`zL4H$G zQi41cF7YtP`*Oxn7L>&{u=0&UAv2mWV@68s;g_Bqm|I)6VS)=m#-Sb%a|fUR6+H>> zT&TL=RaTxnb7rS=|9ZhISFcvafbIKhN)1yMWEf(ChX#37D-*llH>#@oL4pwZ6Ap9G zr-IoDdWuHC(K8(_*jH0BD^#Tddn#3BPFe47SgJ+>$>4yj+}cpKdqokN&w;bgKdAV+ zj+pCZoEF_dZhYxuSmbqAFGQvegC`g@g(PTfJM4PLIp-Og_mEPhyq_AyU z71&vq6V}8EbymQe=3{HM7vF8(X$Ru}hijct)cpDjOk=Hk zN9^n#MMjqF7*V>`*(E++%U1_F-L0B{88v2oMoM+Os(}WN@4uK)T$eeUpKe?Ar@bwY z2Z(<4%2;<|6ABRy6RGRoPF)}BE-hBhXQAoi?vm4#-e>sUxaG!-^q4ouSN(ZCaV8P% zKs%1UhMF+vc+VrPfEk~OKKW#Np&pcAHE-VZG>nHX;@G6Fs;cwI%93zH+)STvL-d%x zcl{QdttkU?mssU=Ollr>kASrPkV<_c+=BgONa=ffuu2L09OT?a?loeM-6=8_F^G$Z zH2NGx=R1glsdkmv-$$z|F75#8!D$8+1xCzJw_d(;NB`8Rttqsmyxx72eJ_hyJ=ypE z61ui$e`~c*^(rh_-wR8YV@$s|kEkk#jG}GL|qEKw0zaOsYGiaxoDK=s|oq7qY`{bV>j@+X^ zi2ko-Qdgajoct*FE5YgYfpzJ9R1rr73bmjLZaZ zz-(`9ToX;@T(^mqnmT^8_rgg<#hJwb0>+>|fGA|}=TEKG_v!QQq#ygRBZJ!unmZUh z#y@%lNm7bdxVy|@I0Eg=w$kn8d0a)cgR&}aqVoXFEb%U=9LK(OkhC$DT$2%1@W>p*v4hn-q9Zf6TkUNdO=1>JAQ1b8>c$x~Fk? z^G(pGktpB|yM;G~Kr6Rih8e;rkDZ;}m$TRq?Z+;5ygutm^QJ!DW!(Elu<1nU@)1ni z*ZiUmoX@~sOLIHB_gK_8efspZYonm4&HC|a5!^1G?HBx|#GUdoSky+e!>PH)(YtDp zpery^7qF!L?bD}B`FWLKck~g!>457*>q@lSj@aQUHErJT6`U?CqS!RM>s_oL-Ykr; z0T3G5iwdfYC+_?U>Svu!r?YQu;bv=RC+pCpq!Jq!*SML5$hKc`A$($pYIP{|lm6mG zou*vy#|@`yNxjFLCcsYA^m9q60k1yKJ)Owvy>y-)?^fUYtM|Vv7Oq9Sj{~~8x>!;` zm1YrTfGrdH=%5K29Wm4(kSx}3u^!UoIt#$MgkiL*YLt7=3|8kse92Jg1eHZt{8n%< z+1_3=tQ-vWpMv&o1Qg7|oOh9eLkX=d2ruQ_1fY)3j!#$9eg%y7pX~N`2-!AZXrjC) zZk#%L)srUy+nHmtLs&7W3%CH7R1_pi5s!-K1SZE-ku%f2>Y-+0ylDUQ>9CE>+@q|q z&qUvZejz?<(c;CC5;vjQ()p})c^gL~`?cgm_aTFXM(kGdugh4yVc`kqy`10cW2Unj zqPeU$sy&}@MwFCf0OSUa?7BV}y%c8IsWhh_gf(m)@0xY6?ni}EHlu#AwEs`{(GD}& z6^T0R8>?HWs1l`FYH5&XHPhZ2JQg61CF>1-6t|hi$;r9VDL;ew5EG;T?7qR;9XE6H zMkqDE5lnf=En&cX^5-Mo3^>^8pZ9KFZ zReDo6|CI&&*L_sJ-OL>#9#|lOgtD6#MNOYm8c)<)WlY5QkExSo2trlF~(4pZa_f^!gK1||rraV^@(HjGYI$-g9rH9>g^<;zWBxwv1jn|YLqo)=#T$O+vI=(6ITyYJ zx1A-v2vhJcI%^;utu28jiFIy&UnuY_)YSf&p*z*Jc7-|Nt`(c}~v2fYZsBa(6HXLwiZ);5eUtcAIflBsET}~NTZ;zaS zYm> z|1tlnGuW}(qJdbl*6}X3a^?8X{dz4(%MSMf17mskHXb^U^?$m7SaT?}9Ntv7H)Es3 z^&2<%cAiVS(+9t-o!@ILu;7SK=8PRceQynMN%IoGbNg;A>v_G_N2&YMr%%keK|V(@ zgn_W%FZoz?!Ur#joJT@JF;)XpQ?f+bfIWWJXzq-Rj8ss^Hr(-nMEBa|kFfL|Yll?! zgWOW#nRU{-`OT~FQxrIywoFap);n3Zgjm&SWMmUb)mAO&Zf>rEn>q|TVyCrOXssh@ zYge3CecS_NbiJ_b@sH=d`)Jz*EGXEL(%4rjFHvnQw=vxN&G$EbRR(6*DC7u@VE$cG zXXWdG<10(vas)NlpSeF*iK60m z;0f=zN>4D&HZGbyYnJgjLV4_ZYpB?4OuIfhKkwym>zE5}x~8JIdLR^TV6m&fMs zyFt^--htsaW!{?tM+J_ijq>tl{Pp^z0IqBPN;}rCe;s|6*Frzo-1yw73QIP|H1p45 zYAG~$Q#yQlDKXwBKfVQgn32^N64AwaEH%Bw%`IjK!cF8A_OzD;MA(C@$RIfvidaQO z#THj1USA%p-%(W<1v%fQ=hIYjl6K{z91sk|gVG)-QfMbHGrmgI9Zun1!)qZbF3vUc z?u*>fE_-cN4HNR9sf?)VQ$ydGShMXKmBSpu_f{PQZPZ5fEmn&NN~7S^33F31eyN%* za3@?k!NKEbsMEg7YKsXVTHlm<;(&EuTFXK)o>tG3)-8vlbm}zSv2<(f)76#w(-&FE zp8a~?yXTz&N$(+OVh7lH+~3=~lnhkqlcy#*a_>Fa>5BJB zwvVUcv$hcLzWqA9WCHuGER;l&!J^_G53_hoZAk(z-|v)($^E!U)2EN9sr(UxqeqS| zqk6plUL)|<;b(=agg4L=MK5kVlk|?aLrijFpo}Q*p`@wYNM0II)bXFMuuGM1k7V`5;S~Tq?{oJZkYq*6x&ZouX=E zNbkei>S}}Qqdh+EDVtU_FDGtF5`6{uO_7m}Nv~EUKcE6J^!?u7zt!eV!99E?=Ca2# zUlte{zGHOfj+<@>+q^D@3j48uestboqQ$eI8b<-4y`}fp(W$Tqo?H2nFq}BhGMDX2`ujXU9``(Q)S3SLx3S z|KC`?!Qw|nZ2UWP`whlaiX7YHsggTr5mY=)WettDuV2?-sS&0-y(@S>A84>2Z1U5L zdw2xyY^$$gE@kl6Hh~IkJZ#|qUY6p;541zu7G z`Ijt-TJa@i)0H7pgaV_vw_ol)_7MCnE#n>KtESlp^_7mX(*nsUIzwBHeepbA}U)bt1pPKx3P& zzwWi$pk~zXG#MH**PA2C8N4Z;t2MSWsYd-@0~ov-NclJ?O@>eY+lqcx=+fPNlERPng2C6le`}p zdKIpvp0z3|utf=fE;BdE3GYpPthhgHd@u}#9(E~C`gbgo1m;hn(AannN$1e_WS_~M z{YpV@O{8lF3A;I~vNA9EsCR7%KNDt+FP6+RpDu>dmy$is+<`i(^wWk-ho4_wYU&6X zkoV>1!aotAiAB}Bksg+BR=6Q9B~>k4Ae5W#5Nu^>`JS2s=E_l@jjz1f<|J6(|}EleZ0qrhL@`h=9Qr?c)4V zgN-=id&M_wpz9xkjibZNj`sG>l3Y<@3Geq;E8Ry-vvi(*oJDC~aN^eXaO!zFW4dG> z@y(oOd~etz(^-@B`SRQ)DKEe;er<%!URmXDUt7w4@5AP+Vl8k2I<_;1K;xP-|LMJXS;1+9IOE%A%;P)VZ5Bi1Rx3OE&P%MbxOn_dJsm$+ z;qCIGVZZyjNC^4l+@W?+jt*jK90f#lK7$v9UptwrtRNtdBD`yT`>F5vuVm+Eh@%i0jHq17I`4Yc1XM- z+NvtEW)O~DLL9eJ(g-h_(UFm8L#Q0TKd{<#64Fj>E3|Y!zJ&PBl(H5*>v`!V>x%I$ zXk|`O^)EiO@%8z97)FZHKiL zeBbx)p;Gptl4sML2WC&?R_KFkn(^UcCPmtT3}xLtWV9&F*}D+ z8MHy-#Zx0s_~6`vlfUTjXm?oKhs+;P$YCeU_;9d&&h2&-+uDK+u0IY=yn6j?phxdU z4z^<;xOj>5?j8$rAa0{}#AkJWiXbQPrsrA5Tfq!iaR7J3ga6^XS2*R)M)T0B=&yDc1h*C&PR5(6>mth zs&c`>j445e5`8l^+U+hOENqlweS3Wyt`bgw!rk#!#?pEBj?M$w5RT2W?A!5V5tN9~ zD!w*hIUipqV2rO{cOJ?+k4h+h1Rx5gqSEu73bEG|U4U;ojw0r{Y3b>)Ho9KSI7W+C z0ZgS{V|9c$pw8^9EMT4j^3c5q3g$ab(RrYD+q_^Q6)}Z!OXzdb_9LHHp#159e;UsZ zH+;jqyj`(^ZS1^~p6^snODBR}&I%{@z4|v?jCXcNriX|^xLwS<_%O`36wdwVs#|Ao z%)Mo1xoc8Aw!`$~+{B@ncb-0GX6PGpltSaU0L?jg<5jX|n~RH!y-&WZ!HYqZ>1s=g zjNCJ#w-_GP+;yoJoT|BJ+w5G?cl~?cXCL`cnX_-l&MiSA8bEb`0ZR4HgYB^3yQAip zy1^?DNVfYYkELJpWd!FRE7SkFX!f<~c=KerL(_>{9-8R(`S?|{uOeXOcK@G%Z&Ie8 z;I^b(KY9jI3RD|q`Y&e^X#fvBeJ}Co4@kY`pU7}TWK0>@@SGJpXmjqP(SJt1$FqE( z>#;T2_3$(HKY3*4)feeG$MP&C^!6XY;2a0aS`<}W^u#r3f6UAn=l*_ILQJgx+c#*8 zXW+-h@1x8Or=FcnTbE10AKKzJ^3z!l6-yHwetzfI-9F46Rz?2k-v|eSJMF;(ATvX=?-9zd>1o5h?yofEE=yD;u6# zsbbWDcZa>az#4?4;k#0i=Huh@?2uvVu@Ktz0y$!NXLxvCRh8awB#g~jKS$65`cnbb zQl_o=v`8wHjVMZh+UTIJ0iGA%3yZz`e@A^P$kwVD@LNAJ48m9vETpED@@^)*V7q{H zDf~6~-aSXCBq8i{cXxNf(i%FTQix?l(C3NgI5c0kynYD~=|Z5%5H*8LZ?5RKA|AKe zP>>F}%YIVV)xQHJZN-zRcS31Z#xq{dhd(+RxeaY-qMV$ad2*dm=mL8g{`u3|17bj3 zV?N!>4hT@b*lcVly%(kS@9xzR6>g=>r2EI{URW+F+*s3tmxH>~je{0(TxS@oE zhTfzz7uNAcP~Wd!uy{7{Y;Z!dbtqM#lz`i0X3*{19Ltt{!3cKoV)Mt;f`!k8fTjou zF`!7Yt!fWBTYvjLJkF)h##VG4b#QR-4?qF#WP@Y_FrkHMOGO$q&)fW5Q1wnYRcS5` z7Y6#_NMOt%9q7&O??Fn5vsNd`LluXdDpl|J0!k&<{zM^lka;Nex0fA-G#;}}M#$yB6JYo524S(Wo%hI_+p{F zY=7BaZ3k=&5otxC2@rPHrNemD+qP{3L5z^oCnRvMgyDDQ@lShp?aD(u*87BsAMiwg zQnkj4eJlF<`aXR4AaO9`^6$U3%%2t@XynY$Cv(hMxKLAB`9K@|RPgr;UxPa5Rx%9f z6|tz*@`{H?Ag4auR28o;mrsFmi)ZCZi9onkVmtr_FAj(b_DAtuKe1rh#$9!@4?%JS z&z9pSPwG@=v~a0AKaP+0^70CnKKa0+-r|QbiHK6EcP?k-a2XxHgcSqZmH3EL{p{26 z1okI(THv{ki4dz%;2gtqRuxlv`?lIZi_#D zz|8UamNNb0`zCH`)qGL?$6BQ#U-U^HKk8jd$GH*J52hXe1kS?&uyZj)C;spFb_y3G z(QM_SMXOqvn2y4M(VI`&x6t74uh=GOpm=ow|Gjf4Fex*wwV6e%2qeGN23|Xl7X!vf z6~7@DPA%9-YOrRNvDDdi=MitK`l{@mlc}%|)SbqI+=t`L#Z?7k1PWbm*w%zReqpy( znZ8BMl=$*SB7I*^3#Xd6y4u7$FtB&^=T8EDy~(qU&?})9HpY+5ii|{~qDcC*liY#H z+&kI$p8mMGtN|*kQOAhy`RF@+nmrjOME!vQ(Ss1BF$j&Upb^&^->^01G|)c?+>ov_ zD9ZQ(>Qb>n+Z0wofAPh$S%%gfqeK{fwh1Bmujq?z=1;RhJfl~i&@KbY?UgWC^y{~} zx3Jm^rspo$9^q2IJObTSVd7TiJm*UEW!sEd@4I6v@1Zs$(wnt-<2}I*BM;Dh+O90a zjdTku*Ds5pKb@){mCyRi@q={mU&zYJ0)m-}{q$@?LPGmW28tzeo9-?r{#N4i;h%E- ztDfg2v*Rx7E!%2+>)D|^G+>h*5q_87BUb0(5Xl_-0T%NqKU#D<$1laX&di?ZV$7kBe`?tA;76 zoM+J3VIHy6oqf)nJdXc zy}pTGPwXb84_S+9gVRmKpdeOa#U$@kJXI_Wzqgl9U;!&_9^c+J%dkwBMqHRhlbMis z`IE)b=>otwYB?t(GBS96oq?&8)B1PBj5gPK0)MLyI6~y4kPz3ErSa%aU>{Vu01YWt zVf^}Tv;!EehSCP!u6;7j%{+`o@zTYM`$kI;?z)S%qwvKT+A#6p6kAqSV*g$oznroVr0QV5CPX&B%4^lVzjhE4%PI>c+lC<7vZ z=D&JX9lvx5g@5O{pXgcP5!{Rv#KD1hyub^8{mpk=KE(J4E3Db}rtIR4wv2lL&*^*j zmf29jJwR2_f{kYI_ImwxP87}s(K4~Jj&tG~EfT2?-~p&50e9|P=QK@sPz04dOZX=A z(|=NUp)6#Fj*dUUL;?DRJwN{R1w31=Tg6k>Ekd1;jIJo)&e_JiygcUt^GK@sEtC)y z#TZQhU-^Kgu6?%+$@|+g($e4w=C#R73sU1aS;=c?Ih%QXUK-128<124GsNQJLUTeUii8`N zj{hzr?pc$Oi&M@tz2^A+1JIIKX9)#}!Z6#cOKgr4Dcu(&0l}-QSFiryCbVu{>$>4k z3hfbfpgmuKL@VtOjN?YhA|u2*4MoC#s)Pf9;PGtU1L;cau>`_isiGH2B;+9J-}IHi z{sbQyYhti%yA^bxH)a4@n9=uMH==Mk7Eevg{vM>_vwX|GO8sG%BpnhB&-sq>bN$=V;}Hzd`iX@or4F(pRaQ}^Xa+A`Sa(|!K${v zM{CX6wd}KAz~n)p*(t6gJ+F`xMDAzyvi;sUjn+t1>Ust?)3%U;u^;1}$bN1}Yjfe73*y*_; zsbE@i-y^H3qa%|T3cN?YL-u_C{{1_)7)45eua9gm`WZDfHB=l-<3v+*$fnM1f_kfD zWleZ~)gZAcg-T*{3ljraUUCXY$(f1f1mC)~N*ep$A(FaV@Z$M%HIXAnk0QMcAp;Rt zWFmxijJ5&-Ljks}^sbs;qBIq9Dwu&&skCw?M6=?~p`+O~mj;!17#aWpf5r=-(hyr< zk5$}>S-tZnVlY@eBCHhFKG@!{`pmJt7+2u=H!rZ6$dL7;XU*h-_b*}S%bAT9Tws5a zr%VfwiT*o@r*H`q5tLPC5V_|P2F0U&VdEohj2!G2!YIVyDy!ij5V`djmia$oR8;|M zl9Q5JN>Rid=cI89G19yE(OJ4S_vqZ*+|G`UXn&?rXiK=?hySU6 zk8i(!Y`WMW}1I~cQJ~#s}1aPp%3kU0V3C3$4e{~&u95B)PPhX>#id=#^6oisBIpY8q)#41B zz{4|-F^@!bi1XF+<41Ln!^xApTdm9f#J6p0dErJZ;R+!h!7<6dw~fMeIG`W&jmdHW z8mXmB5pLiUbr`94iE46j%lG7>HUuo_dhXoTYBd#=rw8*dWB#sUsc;cE4?HS}ux4JR zYhv;q$4oFAc4L~Fn#!I`m8k;*RQb{Im5UeQ*;Q6nPW~m3X-(9Tv^kzC=scExdvf>% zNz1TTK&wXE3nDq8qjXoY?=4g4L+YW+cjBFu4T zP-wINJ`4=!yjg~*?s+*D&F9?TKQR?*2}iS~(}wj@6ow8@QUukQt1g*}N?Wop^%1q< zT%R{*Jsh%&+<$yHyNxo6k*0w7;v014^ncqdisKAouCoTlRuglbjaVBRAP<-pl`B%A z>JBL>1C4bO5{XZqYy{~CU0hsTkqOB=eh%7Q=brqf>KU0QKJT-%jDB{gCdbtU6EZk4 zz^?GIO?(;tyX^#$5sVhN;u$FbS{gol7=@R~e{N3Pd`k92^MU@t@FM`Q6xyK6_s+Jm zh)dXni1sY)$eukH?;rSk{1UB(4W_X8VfdfmlD+{0ioU)r-AMptcJ4Ga_S1k)oS=SG zyu*r|==lNlPYz#N|CsYDCiU<`s?cA(VZ*VOlE9m1d_IsV$dzI5jWKmab2y2TG2>(? zdN9N$3?YO9&98!A2wrjfli$OY7LPaac6D@dJQ8D{iakzF>2fc|fR~nr$Q-?&j3b6& z6nT1Om0i4JR&H+Yh-Q@O!cVIw`^1muCXNhwt=VX6sEfv%==#(8j}0S2wNWn5OUxOH z8yAPIe&C%uXMTSBRHy&XNF-|RIaNkT<@xSs4rh3}YW1xW&`IvS!Up?)AdX_p3-pUR zlXd79Rg!nB39<=ft1Dgm4-Bs}n~eKYt}^u9tt&j~aSBj0Qs!GMoQ%C2>x%5i7Plao zN;oK^zE_a4aT(mGV~&t$_HSt4S1#+E{0954vYJjrPN4_Xpk%sDrO>KX7^zJ~AGaNo zXz-j+?$0dUC-t8`Vc^_AurD1NDQ%ZHy_G%u?JVsiKKl}@uDc4U6OQxQgm`yY1ee9oj#)!MDdWJSf z^(l||WF7ouDmUKr#U(bPTX`lvc0KRut9=ox^RVT+0NUBZ=;#@*Vzov*NxXVq>Oj%LMu8^zn%X4p5K{HSdJiA%x7bJ*WWzY8YZ=jt%NR_ zRQuPYE~P4+rl*={m=uY8TVxXE*f_UjvcuR#;-7!VlGWcG+B{gKF%A5~|5GoylCVy< zJVtftcM2trNWI(V{Pk4RaC~}u9THakO3JJbiJ-7x3iG>PngUN?BVxFTX1h9_{=c9p zWbqCYQf>X5KcLl`4c4LtD}U!%;>bqqOi|9KYe zmN3y+zVdrpG{lKyFdK_4oI)&7bdQ zT;bWvL_LfVs1ffqr-$06oyRBUo)r(?c>_?}JOQYs8aBh&R8wxizgs-iZKw^(>e#Pp zLB72R&KZ7lk_G19*G0iJdDRBavp+%E!@c%D9S_3rXROfi1&8AeT#=JXV0ZE$IvO6v zqTOr@7p~lFNzian);%EL!E+td)TVO{F5PnE(=m5J0zCcoy%X9s%skK*`Sz-iK*iY! zkcPZ=Q@3tW=0v~qS>M2b-~-m%Kv)81Jj{yiO%;OzzT$%U-o3kSf%rAl1k0n9b%=_? zQVE!dtuM3a`@X-BBAh1P6;n^VLj7>P@LH2iAnKHW9xsls_1V~wM5@5hPTt5_>7%?` zi?>w07LRRGLbPC#ZIy`L2|%tGJ)RI~2~lzC)6)TwFIe6^2NPkZ0AOLtW))F8Op?q! z`0%3gqGOTA3*{Y}FhZQ1UJz+$0nbzp^-IrIOPIAgRkxm2JJ`$!~Hsv4EVY~%G!;g~%KHXD6?ek;Un<9U1-v^nv7 zMUHAgB4T3x=cHlr{3}}E!}3c_Grt9bGKSrFGnGfwi20|s+NtB9auzV-LMfx*c0^}E z4447a9aL<{>v~r)>qg6U4j+~0u7OT8#%S%GpgqM$p6dtZpnrAcxo;QvzSbtcijIX& zweW5NaYKoyU8aBaJS&HIaXiA{GoRDu&)ie6?|%+RZ;$*LhboXfkUWWlkB|RUA1i`1sltV?LbZf&|c$MNa^TS|Wv2f0H;=>>7(XbLZYR!1%&)qmSHo zL)?aUXQm1jh`kv5(Ct<&KnwV1GPI64g;@Lqgm=wtK+Z4>C)f~065`_CK0bGoZ{39_ zH);;Cz~7}yaL~uC3aFM4@z1>b54vmqT@oGe5lFJhSrp^?5x8%2=~tbNWp@cB{IL zkN%*)$~yGyBIs)~e?_&alqw1EXJF;}1zZlu10WxYoj$(Z?%mpajj#%tSEoHv>B4WTuU?yRQgqXwafH zm=_l8FlB;&cEQ#Ixlu|4jqvd5gOU7|Szag{*COX7k=*t1JQ~LNwS1A82IQhWXzQsnCy=LA2C+@EaZafJ+61mw)Gf(4pu=OhGWj zY;9_St?kQ#g74i84O!Q>ihh6d z4&x-QY_m}*_}tc(j>S-uA0g=CZ){GeU3e|PR@#XRC}V&SK@=DF0w6As;rE;19#vQ8 z0;O2crJKA`Z_UjJmV^dMYR%L$(i<82R29g`{RgqRw(1k4zN@YxI&A75%IwbZyQ_fn zd(!Z4@MLnBPF2jS8OMr%{{gQT`dqu#)7Q5|+~s@iQNT7ExXIe785zcwsgECbVor%7 z0JJ{+nFTlbu@}#Iu-B?D2c5H^3IL(T2fy(sAw5erjL>>*m6fltwSb`rCbpkt5Si@e zmV^00jOyJo{gX9+ms$k0#jl9r4nS{38L^3|*W(q8sp7HvtigvQ(U?$|ujv2)--4D~ zZ-n8QdOIeYf^fo*^OPY#B~p3rA7tG~?{kjA?InvBM@Mms8$;gZ!a~df4LC?$FePz+ z4;fM;W*#js5`FbKbPQ>t&?A6ImLxYw z6sT43@$lwmL87b}BzAlU1t?YovIr=kboX9dw=}bfD%y7GSolKhv$ZG9a+# zA0c(Wup@&Ef}tW9-H(ots#1HIKNqrnpRBxzI$Sa|88;uRYvsmA`tYb;`K+vlB89kS zQ#2B(6GgLsoQ-un-S7M)N@Xlz_)q^rpk$kwap(aWaVQz2f%!v+sg5f@arVypjd3wDIi}_%sOf+thRPMvdzd$9v1?xUc>A>u; z*MKzEJTH1JIdaI?e=M%{a6X z+O>0-Fqv%s^);tCSw9M^U4sRt?G?R>kR7LgHERNs7@+aOnkm4ac3_0>u8Q&5{)=np za;>R2>#NWE<#p~4sV;Y!MVu*B%OvwA;X2%}_-qcXWGVnoN_7H%GF9D?{`d6p^f5|R z1xj5vTzuM5(k2$RNxW&|5x(+1FG;j#zf-c|L=(DpTJPdvy5wPs)jzZfr(8iY=7y-_ zOrD{E|5HW$n!x_<%zpn1Xcd3(CD1_#oa*lyX_7FYS88C^`cEbO3!?gaT*_(#i7s#w zFU6>pKt?C&`5+#gNEibk71VT>2P|n|Ov7VGO8(omUDc4x+kt?Ji4p<{jEx}>?Mwt5 z_XB&+16y+k7$k%}cHR=AjVld3Xl!h|`I%TCHoxti&SRH%sDySJgLJTyw@Xf0kU%Z7 zp14X(rOsRrm4+;*WL&hvhY!!^7K4+S0@R>RfkU?Bi5jEwNz&=gngixz?qj9n+JJ@@Q)Jv$+CHnN!2NyXVWw@@%dTpD4hBx-wX9x!_Fu2qdFi65-d$re}Gs}aYTGKUpt zjBo6Mz7u83I`tr3V`GtmGw7wlj>%0~HErFQKj2ui7p^siUcw?GagQF|x(_O$^czV2 zLbjjSb5g}`GpcUb@B-bs=Iz}Dcq@qx^}C+4Q{%ODZX-SW`-}{gGt<-Afu{k*#DU?S zsuzX4Lqcdrt(1Xk3f}k2&p)8TQ`DwB(u2)#fuiY3$B!4lLeR8{*Y$snQB5Iwiurem zgK_@>?dFZy77p5yLB2|W+&s%6%f#x6gBc*mAHRH7*GSikV^J#^o^YObzn{o` z0>;ep++`2%9XoS|9*s%p8+p;C2CAy6eOdV!X;aRHy8TAWtoQwlHyc$EqoX!olW4qY z2?Yls(`_^(8n0L2;QGEh&mJ4oR053B9b%H`DtYVF?tOza3T>PP#z%k=exg(Kr(e%k z*;5pM9Sn@H+J<>nPj06&0z7Lx8_+IcB)l>8;fd1Q8KJZ@F1Q1{w1>!;fmmp0) z7I6bv&td%wx*3V)_q5zUiT)K^<9k8IBN%!Usfu_&2R(P4K27^_#K@=?w+O5-A(-*>dr|b=e{10*$B5NgSD2zh^42Wcr&GWbIn~9~y8;dAAwyWJ78()F?#`$Y{D~900`_^~&pzIH#=k&dm@!bv$ z5!*fmlL}P&6`2+42Vj9CBIvXUIvMPWAD25X66>j=$hZ*4UIGqv(3LN{)~M zvv5XG@dIRL5b3yFKg6~J4KI|E@Lm97Yw9*=b?I4nXWze*K;Y|C`PxF8Dfy$czSxm2>OvZx6I~5Q!TBJ?d@@{t8oN> zwd*>J|Btozj;Fd0|A0x0iX|JJLJn!#O_xk;Q&-2go$9=!yYQ4^4rod9=;BYSCvPP2&v)@7m)6%_2l{#Nd>y>Rw|G(vxG zo{iB|dmZ|4!uM2LYtsqyGcwyWo=PEICd;Zh*PMy?L|Y0(Pm{5BmTqA9uSpFux3DFN zZ%j<0APCpS-lljRdL~Xm)#7KRhQE=$Q0!mSVaOt7u8y8Ra#9tN+hZqBWM4^2_5DpW zwgn;a*uc{$fN98^f1;lH6WgRqDEsj4_WONKw zeNca&JkdLPv>Lcy&Wk z9+WK@aF2mb5UTOa>fd!q)4S(4EGHa&2Et7=)c_QbLbrUy3VGOh(Lif^q)uZYF~{EF zM}c2pM=@uTW>j1=48AGTbx5J>E8aONdE?M3)GBWZR9p9N*IL_4MK8K$;xxKB; z1T|$4pdom69A}qWuih8Z{}K)rY1O~jo3u@HX2(vc^56BLulF0+LtNG+e8GJW>%gX= zd!f?}_FD8nq1amIIU`<^F7RJMHs|@m`)J8JE0D!m-d7vzhfctNz0EWZ>Mt%P(NRNy~} zPOKs603ix(1qP2(@f3P0>%xUA_gqQrD>()+H)B5QAoPAf%=}d;+v(=#~FPiOFZ}guf!(L13WBrJ7Jc=uW zHjz+Nrcgbte#vkB#P}hzQVP0CIWH$CT=-x9r*IPYn^7A3Q)uQxaYfa!8~;0~3dXXU z#?sT%026GijzxFiuqp9BQ(5VJz4CY}T7R@xM8*+C9f!6>juA`T?=Qnp+>LB+FyF-J zF8&BI|L4fUxIV;3nsO7;pQx*AQ2z2qNSRj)nosR-nh#p`E~$J2Y|%rbQOM9zwkeSn zt^PhSmb4OF-CGY7pB(yvonm75EU>|E_B6RhldT&zhcw)W3LGvET?0WSu3-OjOhBmj zri=7-mf+jPXp4wpMwW-sROiCgH0}EY4=@ZMBCKh(OkKNGV||JT2c|TBHM4`$mAoUQ zKMOVd=}z4U1tWaF++1AM;Pz1P7jMK`h5EXUQVr&F{`=fgFVD4ue!|mJpaA#odImAH z+aT?N0rl5D+YqXeo9smxNf`4bG3;{fH-a<(L{D$SY-RxQM`YO;pO-!)u8+Y+L_(q? zJ=4wXUqVUZ=pGZ-uSosBbc}zIa*Y2V4mY?FjxvV!|DVZ4(%oY-C{^qu5%Vuw>QPvZs)#Pjx(o+bJzbhw$|%kDe)9ac>vpaY<5~1 z?N(Ie@@WiGX_=6TdnO!iRHiySc)OMYXmc6YujZ0CALvv3_`2}ubX(6(vsYM}ME*n4 zn#S-M_5GhiZB`f+NAO}cHr|mPh}LjKcTF-F1iBcXa|xCnkv+x*bE*9(BCY#28|EIb zk}{XMO>_R$m%e=v(aPU=@b*j0-qtn3orxwA&u_%tQ$NbE_v`Sxrm>Hf^OMIOWxj}z~38fos%|AW{B-yueqD7?leco`C8Sqj*d2tht`YA6>+Mp%P}M~oO#&h!X3)sD(?;?rV+9=p0-OMBJxCit9j$uDrMc$^rU8Q<9e-2k z!9O;h0^y%tTZc>&iC?R_J|Cvo{-vD?&%6}b29DHK%l+xeEW7uPS2k8wr)uv62|YsS zSBi@t84$$v8DvjoV+;{^j@HHz?2yp9GsbW{vSMiSSQ!N0%3AuEh{>_L_sflf;pTn>1Af(d=I_O2eRww=tKA5 z3mp3G3#@)+2=?bx60p{#_GzD^pG4i?+QkD@G=oZm)y%o|gR6E!G!+Lj!t4Bop+0TB zlz0iUj+H55O=?d|=SW|}N6;f9-qPYec}VDx(Mj2DFfNa@ks=P3&BtGAnGxM} zjoY8Pg(EihFj(JA1D&{k(hR<3s22N`mEF||%okB-I0O* z^d#Lg4qpOf1j}z2o;V3?W2gdl0G{v&{=dz#g{jcF0!$}XoJI@GTYKdT^N$QP3g$Z! z3|1YG zFUK1_mEb%gra?ZCOQxN-@2pt=r!6~SI!h}^30Q;Yp_qAZ^E4ZzM&iYr)vL*WHaO@q z+<8Q1XSB(2Wq7`py7=rTk$ehIS~f&08O!Yvcc6Q2Zouxpe43M*PFhaVeSe^mizKqY zJXxfXAN{u&mW}=3(J9}}i4TI%O`(b8NQcqK{P5r;zt;D zNoNrS1$+XMA@FSwfgSVD`}KJs{2N}3!$GobEiEaKJNifzh(<~X-23yR(HAX2G62KJ zwUn|3nvWAFg2D|Qx*`Dl!a=6$0Jz?Ur)W3JaS#MRbxuWfYsIJ(-i4pG@*qFxrk59< z{^mzxZ|48Aps}&vy-2wx#BehE1n)G{hFVk21$}zJZ=>_X`1tKxw@eY@Di<=v#B^3v zb-$txVYn}S`SRsTm%`Z2xX8#3fauUcMTB_q1RDZYa#2@6-BqHpD9{c$n`%?j8f(7(mS{noP1>c=+{Cd7f z=-!5akdT4?erJ%)|Mju!24;=6}?SWo?*|KGVpJ(4jhE6pRavEvrbU=8q z1@N@4Anipk5u^~1^kRgxz4Cb=jn?0gu4zd{D01yB@TefU^<((G>iFXTts1%X5)X^t#praO3`-+uTXCFg$und44t z%wiK^_p2nVVuq97R-icHp-S7U{!e<-RIG6UrM8T;aN$B%=muO}6Ss{M014VkhU>6A zoEW_b<)GS`vuB%VTW`$jAVaAS*%_FTL+*rz70nhSDhT3$JBV$t#Zxsu^ekEE?Wl_p zgNpjg(lu-0%kN4hU95u*0WT0X273LI7~Hk-_f+>VbtGr3>FADsPGZDwS<9!9`Wkpw zt~A}AGYg9{#C|uPn-aq>hHgC6whf-d=SQww^>2ARylZoQYdA-4{C6H1ot?F61^&$` z$}zyoKNljilF-|~an!OBbhN|;f zGJMt;xVq~5Wlqy4rS5e!ycT#QQa8-BxuJN(y z7gJUX{*bfRls?dOb#xGr2@$Eq#CFq)bvIw-GmLAq$W7$O*}?q5hDTmrL-!0P!+>9% zipSQwCl=Lpy8j#LFtqT=A&g?gg1G88$k=_E0~L zQ~$nlV7Gl@{}x#G^ckt@B3MfT(M0KM+*a*4o4sVr6WjJC{gk#Nh-GHZ+p~!8*j$o1 zkSMqa36bc7n3=i>`L8`u8D4!A78Comq0<9A)-=x-_D^XRD^6hq1}tFx;cL%)V&fue z0jdx#N*a(vfifoo8L=Fhr+RrojodsRsO_G?=A z??-o_c5N2$B;vt>*Uv#R3r{1{U%3&)Uu%sVMf}zH82Hn_|BZS$NGAv*#hddr;N}oz z+UW|PbWWcj;uXK-G3B!j-f=~h|58C0EuY{=&}3#udft>cAxyS5rGT&sn~aC0dGnlW z4%;1uO~*(4p$6a&x3>|8D(PE>v zd92xe)-w-4I$(H!tL3jG3-ycYpXg=17+v?uI}-!IPM5B*RXjW18%kOckkIUlQxQ#r zXCM(TKsU1;T49V0#nYLHPSuWm`SMe_`R~0-t8p5sJw}zZD3gXa0Z|zG z$5n`|K2s7LrO^g(prksCG)+mfP;A3)Z~Riz*t7c$ww?*;BbG*!Oc11Pg&fnvk@67s z$zaD|XsE&3<|$-2mZoASHxo0GppizS=-fM$rD++F=p$=waWk zy&4BUA&NRRDyky*kShc{qocm=5;?=3%hfeCrTN3n6?K%0zV!6$ModeW39vuUwQ#y1 zPK1<11izJR3h`c_1|K&ZDua1?E!{i|LLXF5dQ;NT=ZLNvB6d=-*Z!;p9FBLbSSvz= z_4$iIbi;huzXc{lKmrDwSnPCu|MqNB{I>Ra{gVL(yC37mnXT9+C)Y%ynX{W0h$UnT zBtVAyDT+8d7-WBDo$g}}gb74{`}%c#zs+c`e#s8k~vRlE)-`vD2a18PE!h`>oV?}D1lat*|Ak7EgyV6}mjET1M7P$TmUC?lv_{OxtN}gtKX>nVl2shP@X0X|M)5jY6C%K8v z4XT)1ZZ^Bj65?=T1=|L=n?(X1_lA)xLv)Do0AbbS%uxL z+2QijKTm6H@uA^uIaUQGS%gUl{TD1=idR~AC){&qZ=AE2( zob?BW!}H6fwjCbI-1s_C@5|x%=(METF#*|Lr8$JfvRbA`6FFItw{iN8KE*ED>Ka{R z-23j=mozTq{`|H`6)^}pPHc{Yt*RsamSMYysI4pab!vE=8lE%4@oEBo5J64J$%Ag2 zf?sk`P9U2-95iJp1OI2gyM#~IkV1+)f6gMkR##G0jEwkfcbRPA zr!1FR`?N4KoifRufRE<{Zq*Yh1EG}Qw)^y$c735ahsV+(a?e*a26+5S1G`vM&3XWj z?8K{_l!|E?(RI|A(NmNyRSEUkJQ!y6Gjo#W{2is0y0TaN3bjzKUzh8nq^DXA}w+0ySHNfJD6dOU8icm!&C(gi3i43KE z;OGv_UJpa5fOh0FiT>P*%()YnVF@h%EzGS`2Rdb*IxUfUPRoVx;y5RF~$0T+enX|N?L3@ z;(3VG47%Ixw$a*d`@KGOVhO(Ccj6nOlY?4=nRrnVl9DZ0b}Yv1JulI2 znJ1L4t94mc7TZ|uL=K`evIPj0-lefeg!L6=KM@6CXn5$`9p zpTd{-+QPhVKkq2jU~I*?%ZzT2m|dsj8t6ZxJQ8cA^!5Qd*4W6-+|PM9bN)NV`Dg7i zu+;YqA^L4{!cjTiJTuh{ku{EvD&Q+=R?JMMx9oM#9lzPOna*bIV$6a$D^QgTS;&+O zlioh3$ZIJdkY>jy<{C&L$e*wA8efp zf!PjCs_N+va1^>@)id8;YdX19RTE-I1fx4MCjF7%eE43J<|5mGwjv;uI=Qp=V1FRL zd2Y}i`|L@IG4z2LC=jeYwmQ`(WWGi0y4xIS@Z5`8CNf;$_ zj8AjXZwiTU2~9S-P)O}Kzvo(rrOti>G@F&W&a3y4U8Fv`@w}f+sbHv;7;R>EuX^&s zkWcpUjuNjgTH_BR+V*H!$VEb{i1Z{SB0Y)mfy;B5b;tVem{oi7Xe}JrSHQJ#&-216~4u<_!F+aGdR%qHaq*uS8tKi zaH7_K82IYyx@CNKoqkU&XKL;A*D1Na+9yv`L>iwT{Ny*zPmXK2<#K;OmhtJ*);Ibc zkU<*^5tkW^>xd0fR=zXE{o6^jdy#~G@);T@I0YYhg(4YvAaq%`sf$b^ecId>wtPXu zd2hpg?@01Xt_|PIvPDD$U3vhr2|-G%jhCZ$hpQ*=FNEU5(<@|I;iOCal+yXl+mf2E z-+X#h+jDA)tbUy@?Ja(~j9FFG(FjAgD7RMCvwiQm+Jy=oUccVWv1;(%)Pal{@{u!1 zVLv=n?Il+ts8aFf+7I>Km06efH|Kg7^t?Mxj<9YI5E>ksp~+^0Lh36TYE#s$>H* z_q;beUV0UidD~}t2ZFO2+Jx7>``j@V;Fpk*Q6J<#(3@m6W;eRb&RIX2R#kp1!Oh65 ze$YCD9%D2nT)B2skeU^Ex#n%;(Xsv$t(J=@g`S)72HKX@v*}Gkf;~Dq3f2N1RWPz6 z-@iYi9u=dTW1TjIvUiwRAu$2W2ikM9L5?&Zt1+P0l8vTi`^#-kS^8#mq=oI|cX zPA>7ldK;B*@LdDmgpuXp2aZ%yAVNV7%-)4nn5VR?Z^+6dsG+Su_rGGPjF zZ$pOOe$L{uGVd4>{YVG8Xl<0Yo7%o5k2kaF_}1uNry>SdFz(E2!31w)EHK&ck&~~` ztuzbHqHk#!nYGzct(wY-jt?@Z0hzf&;M=I~4*0Z5jQ-9Ti`T)N}YMw?QX zO!N3~n%Zrk$QZQg29m|;qW!1&R4pe!aw3=yd!Yg$szMVFk)_TvX#U^45yT2VdHESM z#jW-;I*m;0$X;Dtz{k1{iTI3+w2PNgWo$0>G;6x#;ISOLf%FJ5 z5AUSVtHKCFT$CJe$eZAe-SFfCG=8N9^ zInyadH4ke79FN$MvGbA}=e&gDJ)7cml`ZSJu(G|+C|FO4`_TkxA+OdPR^N{7LS<2 zh$`rc+b)<;@W9heo8zX~O2Er;*VG<;|_ zurJmjfI?dgLt0}z)_Ws#smF2jdZ~qlr0Wo+8KpvRtD{Gl#Kq~8XaCo73bYqL0_I8Xr)vlsBajvBlhF|&Ym9D zR3VeFnaBB`b54-bB+vGRb=!KxWuDWtqThUcD-^PB4bUu?vR{U17g-VbjWwh2{j>jlWNrL?4)89 zX1LaQKn8Xo=!2Y=J%vi`pvgIUi;alA7~?-4y6=E_uHy(<(YWZ|phW@SU~PhSg7>54 zy-lCL9U44Viu?JPFX5ZgO-89vAd6M%+R0pmOgXu>I29rbijmRQ%l*f%2ZV=1P@ViV zMAp_lRzm;oi97f2-8;S4duIWHY^~AShhNq?`0}ci0ePOR$T0%XP#A%Fk5}q^v853t zt>Meq*2P-))QLN&^01?Z)FH5BALcCV=^-7bBaUSec2*xe_!g%hSfQPpHbsVpegPgK za8&RIG6mBT6ODQvwAO_Wa&Az5^c~W=YlFc2L02m|J5R%e1XW}_Qny0L(X!}Smq$Pd z0m6)*pC1SgEG8FoAn(+-w%%%XN>|rc;rW>`Ope(-JSu->!jynSnK@i(vWPl$4T` z6#a6I#-^=XACYIakiAZjh>Z?NT10q}6t;Ig)w&H#-!m1z>XS8CTDzXB58~xQ4I^cE z+fXlYa(U)VV1q-+att0t!A9%Sk8H1;$#Hw16GP9m>oZ`cP*c5U97O!fctEZ=jn6UWW zuuI)OsYVgfzbm|D%SOrYG7NrgG;OozX}j#?VrojTY9SR?(wME=w|kbVHbcSq{=tb` zDIEKwh&1+R@*?1U)$}|`SzYuIF16gLRJyqD=MTA;#$BT(6DHe6LbSP@%RfzhY|g7u zT@bT^YjX)?g{ERr(%!zl*mF|JylyO}17h>~z4K9ag+Q!;+A&BoA3+t(tz2MKYw78@ z-`hqzjXdd~v~#M`dAvKF*X~QohmK8==cC3I`WyFJn3L*wj^MchfcnK{~j&dNw0eew((Tb$od1${AqOY zI$v6y?nLKv&YixQeJryJkFZ|HqVI`VB|sH(Lr0%j>;?_u-Sg7JP4y^F+k*$6=7mhF z-Bu4fd&NHEh+AxIHOJdrV@aib4$505uC$kN9MX7-wE&}^e)QQ0*%aJbkIiD{Rd0$* zW7^uqLy`w4o2zf$a71eoM-?9vauLt^`bz0SZf-E0zC?WUp@idm4-0+$+7iuj=g$0^ zSSy-K`A4zCWUCcHFD|b@24lsyfqC)^=3c6;u7>Bxxgxa5hPy9MT3dh3rcGHKa#unO z&e^hA1@|_~7k_%WE#f-M%?$o;VToFAZz;V=*W4ohAh`Zz()uMKO%s=DkAH3F+5BYZ zB~#by*PY)!?91RE3tQ&mBH@c8<4a4ms?pkvy;^UVyRpt*7b~6}OxHwVkZ4) z?|d-1Q#)q?$HgbzI2i1I^;w?V;WfZ>j&0aIb>!>wGZBloziS+!nutI3`{^c0CDbiKl62 ze0MRtoi+ay|7drpWpH#T~g-4CbYyg74K(s^>J&35fA{T`_vY<6iU`>>fm6iOZ&I*W?@Cz5X&7-Khx$?r~k1yaTRP{-?cjA;uZBemeKc3_qOXU#^w<`D&f^*NmYB;oXUAY}(E|N^oJd`e2|>@geT%yj0Sw zb`?EU@@2;?sIIRS7e^2C-?`kpB$T3YC?Gku-KYGyz_#m*vyA)Ojie28D(cjp0GH1y z7qz!1x$~O$lpIY+Q1jGR(jrAqte+}F=i(XF&x5d;*fdEhP(hgyZM>!PBE3l+%R4wkVsZMF1TqMdv!iW2{5{pXCUb~D!>XijHmON?7g zSoj7eUvDjW8|mfiTlf6!3hs|}SU`{KxLIVcw9Ofp7^SMB{!rWh_Mt-Q6GI7mw99T3 zET)$h6nM{l=;N`n^24iF6Vo>rd9UcNtv+`Q&rNaJC+RLnaZE;s8_otcDlJoW-h8YQ zT{mi?S83i@Q^Nz^F0TvP>-*l+)w$Dh0xx@y)*s8|QQBs1fnoFzf=T=( zEzcL9D9U;q(mpUSGQc4zeYk!`{zHe$_pNV>iekP=N2IZ^IJx%+e%&%Z-I7undcE$& z%Ql};_ghbgWA#%u_A1V`Ax}yfFNqf9rq`!^%jzCSJAQM)SXWJn2|aZiC#P3QtDa2P z^OO{pMUWyCsVQ|7)Ooj8 z9SRoY>O1)5t{&!vbqz~Jyj$aA=wkIeAt;!852-y4S@!+Asf51vaZi%Nfa4OEU_ArQc>WCAtaAJ-4-*1Ek zmY-ay&YaKqd=|Dq1a0SY66+BagEk*P`strOp+Z-SBcCPl&(&q@d}OS6CwOGy6XHi! zYNPq|_TE2p>LfGKUCjQ>p!JEu9Z+y0QS*}A?hD^;sg-l_2(AbFYby2#fk+~o*omfw z%A4$=fUGxSe}SK$pZ+{>VKK6rS0=dx7(XZj%}=QtIuHeNti%?;O$6DCATj7iA|ixL z5QM)#g-?K31BeepTl9=puC@$*h^cY&oKKfED_?zAD$W*h55`>jA z{(InP)i|uQ>a3Kg|GB8qm5&n|_LzwUjS7D_>}>mV#r&}O#D+p93U?MQ7z+trzPy5g zSxQQ(ku?sk4J?inbxGr1etCC1+8c^Qd}kwN~60A>4#c+EG2r<8x!GFNL8TvdsEGI ze+{SB-Z?BRE8IOnDu~Yw?SDw9tQa4o`vGnl6O%bR@$kK2qAJ8V;APq75I*Le%0_xc;B$9 zarU9eyt9k(m(3nv!~#c7+#4pk=!5Mm+ORttYi=!&TkrMeRjA_4jnUGs`A=T}Eq@k9 ztgMo(M^uC3vt^t!5+7sNLVTCX_+g~*M=8?_n3!Tz_V1rN$r>ffctk|NPDkv}0>9!1 zJ;o-q=Fc@R0P?z}jf8tfN5E83Cu@XU$4m3Wb~HONDNMB@Gjdquu!@RS`6?%5zYsrX z_O|}ME~XY!ivH@!F;pseBJ@cJu#FkII0{7!XyYrtMk(AEA1AZjQukgR*sU>vkPgJw zI$^_}(4oL9>_`a2YfY@l5l08$Y*m$~_&ZRr#LB79!6``7irxgJooKtj z`QymvKduU~R@wXaJ%YO={V(Op)%3q{>r1>vyJ4_^BVXHqaT8($=y2DpkI^hhg3kgK z<{;u409x21{QTLouZS9sbts~a-dSD4C2PFsxKXS@H`JIk{#szMc6w70}4 z3!S-jh6PDnVMEe6X_)Kkmn>pqGwpzC6Xg0rcJ{N8$}!5+N2H2(03;4Qm3pxG`rwYU zWsj1>uvaHpq0~$E(Y9N+Z)BcfOu|85PfukW&~jqCutd6T zE@ugKbAvQ;yf$sxWSQtmk5SnpbTh?y%Aph^_8rP$uYG6j5MrFWR`+z(xIoc}F}{>{ zJ^T#4Bt2iCrq57>t8S_4MI4o&zxI?X@a~wFu0kkCKtG}av)5DBAcsdXGL?^?I3$U; zx^70PRXrKWhu9|jcFSDZUArLF(_SC+tg8*osNjP$(06J#oP-P#JAj6D5hyP9xX~J5 zg*Wk>c2!5Vw6us|x#g=9>N}*Q&Mxv)+4VEkrwvL}A^Td57^`G@>0-CJw+E5ITCj$v zLbtwdT=~sMQgp7&?%hardu)ic*N}Gcx(Arcs~W*x2~}t$1!vy8^KLnU>Wh{vF}dB_b1cJo>$&pP zma0o$mzKJhLNgjw0l zW;iE8v+ICuuRoFL0HcCo9ml6Ty~#W>%$Lc6EdbghZ9HiJWGcyorm9-^#x2k3Z;-bi zU7zK1G{(x29sn-N9{$;{>^mp`hs-f*L+~P)Mxxs=Eu?!RveF9YAeb@DfL!EW2x>rpA^vbL$pi33uiy zM*?vzCfG@GW zixF&))~AdN4Lzq8bBbs_=ju;HXfvPWMcu>XHd?u~KyG|#t*)KWC&;AK$YKv7d-r4C zYO)*(aMCioXSP-IGT)3CLz7cBqr$~qqx&^_#gMVSu5Qt&>Kv!GQtsN9<&2&UMP)>l zTraufg&Z~rz&>*}w!j6U*wB<7c?MiJ=S1{CMHKVnYbj0z%KD+TOb^_#)c_PxlT{7mU}lYL14T+gyyJx@vS&Xpc4}_*1|vG#xkTog-G6R=qMT=-Q4(^u$%vWzPHS#KrW$iKq1^Ol){kh*u6F`ThFCl4rmr zwKAicBr4fHosj;Vjz_!tnJrLZQYP;7ZDM@K1Dr!+=acGXVp4dMNIGTPA2*Bq0?%7x zfqrb#^_BkLC6?$oe8tJi=R)!N%m}i>cKgfA;pW0@Gpq-GyiN_-)0@A?U-4~GAd{|$ zEc?cI*^i{)eH@LudTUM;D-N1`H-5&H@cU3_Y_G=WV0;+Hzc3UrxE98|fL>WNv`k3< zRJE?j!yN7D7=@q>Occ__5%^xUK?KHdMp7spJFRqfFJp$n{ zw_p~CjqSl9r1uPL*r7v<-zDg$6g4-85TqvZ-;ugbF*d${-c0xB-;`pc%^1rrS=lXQ z+Wj`9X3Ua)#0K?${KYd1HkWutfcFgu2*4RaEXsfpTV?Oe&lV0*X!K?|xV6#dpy2e| zh#RM@oV+LKlkFv5umaoCS$X+c^5X$u@Kn8|IR_UJ9VIbk;6Y1cqdWZgcA$HRz~xOUL36l> zTC)1o)IqD1GKsP-Los2`1jok$RQO_t%`vhxg)UgHYizupTU&B;5C*ql&$%o9{WEPS zI3X!^c6MfFU9iB63=b1gs$O2vL$FrhX_J$aL(}EKFaM$xdS1YtXtL30g|ZzY&rI}4 zRACh%{pRi4h0tu(-zNW)Ci0dN5f%=$5j~!LWt+tW>XNLi?ASo_+e%`poE;G+3zkXI8|Ab zv7s-oSmGZF>L9I2P=DE~RWi`DgY|^DksNct$KT1chfiSr`d4LT_otugL=1_oy*5v$ zW#N(Qvtu0HU=clLvOLZ(FZlBn0w2(2ojBxALf{22H@8nv&=TSbG3LLtiaO}xVCm6Y z^H9e$*4$Jq$>bdmp3UvY7A#l*tNvKCi{a02e-HuGGDULjg8d36NUk}~s;;h%w)XnH z1mb!FRnVGAB?bAN@n;UL($m*ZIs{!xgwHdo!m`aJzh|P^mxC$F;}}^UYVvYLykuX# zeXBxAz;uxmOYMDoYu@yt1(bQAhf(wx=JvoQNR0v@~prGCg(b8!U1!*%+mX zQFWMVl4wM(_K7n-+1a9mbf59{@GskFYA@hotnbat#+i-NW?zw{SJ8?f@@Ey(UKdKadK3 z`Oh3p7Y$DGLs+DcP-Wiiwb}P^wpFd$rspZ-2RABYDYAYc$dJ12p+g`MXb6x0^_R!0 zaL%wKLfnXU6JafHf^YagdE%GXi0Y@}!P_4d}Z66i(rhgw~c?sqr%OvN59_3@ZR zqL|iRD`ahiqL~^OXFv+w*zUf-D4I&E^LxvuNJhbQWE4!C+U=h*?j@KH3No;#-}4;h z_RAV|icj{>(pFMhNWNi29HWq&T`ST~FB1C!IM}B7E%J^G*R!*w<%HCWU zMI}H%tp^+S&zn7b9~Y#iq0NtF*5V*Qo*TSCY!EvWgTqsSe1Hl>MN5bQkTIo_>X-BI zII~`pv4NL%Os24R}kh2^9(V42WqvshV)(pNVG_bX6{(YiGV3o*kB!p1FxP%>TT=Wx3% zQrv3{5BkCzHs2~hj@JsjNK9O+yMV&YS?V}a2osVqh*injI=r`4=R$!u zzGGtQegkNwGX=6eUgmCAxXb?h9Ek&}NU|e_^t8G7JRkPV8A=&!$fA}SETQ!rlmzUR#n*`=t*Y~LNJVKSc+Qt{=GPw zEj2{2_VoA1V^!m+Q`?b??CH5IgAXSV{HVMb47pNS&us!U2CFiDCG|Cu$|}pBKYw0N zj-zI0?oTWj{+^P%PiYvwEyZ>@H|(&5k6~N3p4X>2ecaH z(&5yd88u|bfyKnDLMG{wyJ{@Xo>hL@+1*{m`U}PZ9b~vDF54hF+4a6ADRIH8S9%OMK#!$pLR*nZV zu%5xEn0N+dO1gl%pN`gCoJenpKcCV46A5m@%|5&=#&-xDO`R z3lk7%YMQdEqiP*eGazdJB(!(Ig1hJ|MZ+(O=j_3%o^Ueo6lL=UNW~Yg+J39a{r>$k zLY{o_*`ir40=MIBF^aw76<@7yVZeypu&PyV0p3$u&1wZk~Jj92RJ zw6^?^_742W*El`*TZ{^tW*4=BBOjg>P~Pv&8oqonVjeJ-C`kvDq`&@`0IA>K8G*Nr z-&Wr7@!|Ht$baNnLV`rYt(yJd&Y@FS6L)Ms%F!pkLCH#88o4gao0go8;9~uY!+wX2 zp3K2R>@UIY$l?v#;wRT`H2yF|-2haQvQARr#Z6*$D*R3+?5lUJ+j}D@R;BJ?6Pkkzz_bGCXf=u%#3Nc zuG^vqeM0@WFAfxLufzb{e8tCiO@W*s;wCUZud!N;WGuBTf z8I4&Iizv{L58u6+`F1fL(X%>-=`}Aj_{7DGM>E&lZB6Ts(}Sy?-}9``*J zgi`SQ!b3u_;ZzI@H9Rr`Z6X^BUbkAPScZ&$%a>NjfCzLh->OxrW)=}C>vlU4!1D)? zyK%P?h@yjA^)J+iMY(LjMScBM4Vzepapk|n&9-vH7pwiKYd3OF^}d^134Dw76aA2# zCV_9#>Fn%Ok*HT&(SIle6T#Q7ib9wQ**Q4QNq@)7q-pnhcz75*V$w#GY}F^9)}oRk zE%M+pDWiNQJEisM^Ia|O86?qYXV)s+#taa?Fj+%o89%=!yW)G~n=Dx)tFwK%r_!TX zs-SFK$n^AdS=8J+B_Ed>hO`x3Pe>Nj0V;E~zYXDw8b0+G$=o6HqPsREofas(Q}X3$ zwCEbqIVZkNXlZK~WM{yeq3y)=WW#mhYwmdE8w&L>TR8(PC#Jo%>js7N5d?`)&9K9z z)1%sul;^WZCLGTw$laRb^h;{&jc^7ZM%E!XTo5yTyab26^VG<(QmiZTH=En+^)>n` zfJIO7j-Cdn(QqCe$%*{o^{Rq@*SxzT75K;|E$g)Oe{kEfmET~%Kg7dD;+w~@l5=g@ zFh8G$#(UIu<0U){0)}XT6{(*aVh(+}{H?b{aX<9CCK5YE#~)AsJh5f<*0d(+(ZK77 zPQV{vvSsjRXxcy^?OtaIlh!@NV}P~GnHp`lGzVI`_}AsgqC5+P8~D~9ChPnf^XASW zmAkq~w4tOGIv-{Fs85h;rm@{epi7i@i^rOk<<+|H-}0 zl5LdR-b@6h^1ElHDnz773Wkq;D;#=UBlBR*?$wG~hgTOA6vY{EQ&SO_`wLn9fBnA) zQf+Hv#uKK;C6Gbf9T8Fam22buqi>EAsMI#t*t-`K^rmQb#ayu6;W2J#QZIQ zyr**4$O9|-xfp0x4nc;87tqyanz3@dB&!!(~|S?!`m|Km6M z)6%pr7K-qpJ1acL7`(70B&mHZ%@UYDm^S;;(=P|^u@`*jGCDrl>b)e{Hn(Z1hRe&7 z2o+$R($76L8mHeP@;-R)^+B^PHxln0?TG6ql5EP`vY(fp&#Y=WSmL#1tXll?Z60Dy z_*0{FADcr=w6=9gZNnkQ`% z^%YK}(R5$Ea#mJ;ARI$ZciOm?LK+Moa>_IrfX;wX`EUz~2}_$orP*bV`2LDI!eag| z9tOMNfq99sHPYq|a4wX{YVUo#dY|~{ei>DnkBRz5@Jl+CK4SOewd-k*NVOCWqm~8^ zyShdXGy6ToqHL_*IhlQhnfT<#iG~@}W?kK*N5Rm3bWPI3-5&dp-n}QwnY7L72fI2= zvod9;tb6(52O)mC!@gwO){2>d2Rga3j~^f1q`^k1ivv?R>aQ3j59 z^~%pH4ruDWbeaymAN>#={=L0qdg|u=2Yg3)cWwPy*LT$Bw7_Lk&-qHxlWn$8%Y^Iq znoJLLDJte7`?Rjk_m^j$FYk@>nyu^^YF+KrqtLi)+h(S=``PDY^=orj?jIli0rkq0 z0I7kBXMIU64f8f0>DP-%UBDl5*sySa@?^Ip=k)Z+IX*I!h?cPv2t4O>Xr&<7OVf9+F{fL{w`*AFz-(Qs~Dqa${1DtI8 zEmkGFzK30P@9!PX@tAqJzwMpx-2qjD%Q6GPK{bH03rJ8~t&~ZY4~ir-^$8DseR+bq z@_sol3d#Uc@eQ!)Ony;%bHDOA)0ppJlf0})^*&Ybjhmg>%CWXx*rrK{dt=b48@3~K zkD4WRDeDaRcTw5~&#dh4@9S)<EGHj~zN5;>e9fU@^dj~~5d7rP6 zr{XFOk5NGZ?QQmxZx3WBd2L^*cCq7dc-??cP-M`flE;fpf*RyaN>vV9ytGswxn))C z9yx0Xcy9j>ZKd+2J^AyOzyUv~PUllUsWSam+HKD1Bi0<=2DI~v7vB#K%X3X|cqo{> zpni1uet5Ui(A0;aImv7^(mT`?RmqN=r&ONpqJEaBOiJga5@zO)uBu>cf3u(*wRd;b<`bTS3 zwmmUvTKn9*ITb#-j@%J+*?7<1#>M-faE#tgDL7da?-AyQ7e{;BSH6I_ zSDOvDJsq{~8ATW8_3854Rhz~tW>yQktnYXv(7Zx@MEA!VgYcDVJZv1`7XRV;@v{nN zTwzDL=+aL!lj=29tIkWc*|jv>k{r$x(Jm4vA3Ne=kZP*@P<>l?x%DxZ+ZtPp08~&3T87U3i5Jqt{El5FSvm%R){N-zk#}cX_k&wKXFQTI}j9&FfG=D7Ivi|f| zNs6U~h0w7D+|gV-QZ?_XYu;IX9$i(fyOHPNLn#2f=`RJPrAQ4 zGOJZDJX5hijh=~0=JacR#dKGm`9Ln8f+Pf)xx#rbimwY=PrABP5vL+?WYcBOmObf~ zM8tc{3FeHCVDY-GixI?Bhxx|bkoLP27tmF8LbmDgjqg1x(hh$JQ|fcffVXa zn5bt3o1H1Ev*fzr9_lZsii~Y9-Fr_=`>rOreq_fW6AQ~!#>GvdSGt8dARBQtkX14? z^l;*iRpEcRhwnsHlb-I{6g$pp_S~RH($*iJRabFEm(#4KXZDT!d@t73R&rF;#?PgM zU8B@UZ6HW`yZQdy!V|oWFU|b(vsFfKC8WD=>Xz!eKGktcosC^fTh`=YOtIdrvHVnw zf*yL#KfmV&(gx@Ger`~EJ6}>`_lnLt2?^)&oUhk79PT%c(R{XuwM+GG)QttpntvRX z*tmwkEk`uTh>O9x4&>k0p#LU1Rq%iz0PD~r<-(|Xmf5`DiwW=eRDl zEZU%`WG|T(FYwxk{wm#zbHjwpF1=+9k=>1kW8x>dN~}pBq|yf%QhutdoQ{($i}~^fM4> z0|1iK2qi9XNP(qX^FxW-_eMe|AYu@RkN1`qIaw}7jJ~HpJ_9Y-FbVkwQMT=U_j8a; zJruqZR)Wxwi*fl52P_?2W-%YXeRWt58$mM)onAYo$#vYe^A%Uby@$3hfdB?0r}yuJ z`9Ya;XHv!@yccp#NXHdp6+2;-tvzr8g^D*=_EVr&Ynj)A;iWRi&u8{HIXI+rLLLkb z#r5jSu6)+CuC8K8yg-Eynk6LLH9M%$v`Rg_tB3l^jRO`J7MI=!9pL2=Je3>+*)1>j zGY6^rFQ=Udh)Qs?MOr ztE%5gkALc}gM}a$hm)~NuE}!@!<~?qf7X3K-q|W4;^sNmHLo+D?Ou!KrzVDWMfS-b z^61X1tlUwqEdVRy*{(_z>!NUl{;`8KT|meWRK6Yj`jt{*VP~f`ne~YUw6w|FH>jWg zdQPI3jnI;+CN06U30#AZ5coGqrsvL48o~JCj%`B7k>cK$?q6?82v=Iph_kkBDLtbc z#&-Yvd}cKo43gSEU?E`7V|e7#M|&apT0084PMwAMdH2!ELBk1fcL3YIht8qh2xQ}J zR0ckT0Ha(6I2%SDj*}7esTWO(k56F$`jq8UZNWln`WQdr^x(=P!?6p=>M*-oR>{Uk zN2_050IzOwJ@1>akQY0F;4G{sZiu6{R3MrrcG z;$a-x4(RA7UTp)-R(!rfvyr3sZEsX675FLCq9=?EJwuH3vh>5&VdV__pBtA1ST^NT zTyu8$V#)-9gfzY0=_Mk2JtQ?R;7$@aI5|J(soH^?X)6^HuLVb7nZn_4#c$DfbB%GR z-uo6rdTU+X{ps2_Z!93slcWDlm(|ei4cu^1D|+S6o`s^2zH;+O6w3}w4Rge_!<5wNYF=x>pIcmiNv#Ubh@oXLsQd8 zUfEXQIMQOEPaxw~NGIwmLHpGdz)6Vv+gra@LZ#3UJ*uuF+9l&|FXURo9j1y9oZ08C zP^DS#DtMnJ!tuspv!oKhUr!x^=&DD3z;QE6Zv{!CmfkSrC3r(2R9TtjYo@R7YuH{) z`+<@KX%qS!*!oW4Hy{lSKwON3kI+pdNbOHfQMUs{p(h8x+^O0Ont{cc8R}L{aM;*D ztJ4A6d1GVM?G-L#SS+|YHj<*smS<9jdrP}|xnXk>!C!Ylg3%iQ72f}TDWhf)_<+3uHPcd)n4gku8~8N;-a;d%}b~_yL?Dh1AYjK6+p3m zs%T9YPp$|nbL2e%N|&*ZU;9d;Y#X360913mrXjsINEs|}nZpGU{4w*r=`^X ze!B{*_R``aH0KMBYJxff)DH@#%y2Vc#Pt+X*ZnK(O5cLOtqK9L&jV0z0qb7e(Q6#( zxv)JO(zJGUK(HCq-5313QvT%Fg%{VkqFyWm`-~%589aCX>$b$@={WetL;2IprAVIe#Rdsm3-VjRk zh>NT1s@pYnc2^_ukM0`=oZx9l*3hJjY+12M(+=rx019Zg(KdiW@nEnI#f%&;h#{VQ zg}5cs2aH;QNdeJmMs~LLnPEX^Wj-wmO8z_9a1A1XC(j_j8)=&jrj0<)@Gn=R;^H#F z1rzcYNR)^XF{VrFU$~$%ijD)tD759!d^rg*V4QZl#eU#Ppm$HOqq+%n3F^LF><4w- zo-<^LJ%@zos8!hctev48od=Vyryhtij%{-Y3(-@(wi75Mpt$X}!!7;jC)R`fZu(3)r3Cv6Px@pjDTKDa& zi}ddQ%jNFMKFe}VuciW!S1>B^2ej<$zU@!)s`?hY9zK~V$?5|j9f-F@yTHZH$M5?t zc%vg-Z;Zil?kvq3kM9B#Ya5#}5bd@N4rF&SWtaDK9UyKw6X3582^iZp&7>jm=kH$B zKMf45gX92RcwBO5P%wH~x6xXYXsl%FxwfLnuawf0pQoy7mmm2wmo?Xfe3da~037_- zXfPZuc|GqBu=};N909#$t`i|DOL8WAtV&8vcF*n{6k(uf?Wwhum8O|}qO48Xix+2f z^K`XlA`~W!aizjyVElzv!(I;`Zx?9C_7`WP-(@Y{TMys4z6t>|B4&D>B|`?-14+Ie zJ52CHa4VzR{y22#I4C(yOwxryysJ6>pK>#28N~N&tR>;uWP**7mHv$yvh3R2bn;*3 z7ccIyv8ng2GdDuADAsMw&95N5OBhd*j#>Os-CqzqiMQ#0AF;B;zEj}%QyKe9hv&Aq zgQ#*BZ+%Q<8K^``ylQMK!WQS97bW(EFRj~8!)nnjmKM&lDkf<7B@}sS@dlcf29C9i zy;M7!C?ie+VbM6P%kp|!&cY-gDm(hvF|2&W#e+SB3Sw;{XL0#fqLCVD=2OZEb922G z2Tsmbl*vPsqT7XV?*})^!q?c7DdBLt9dYcw_Tk*KOD)YQ!W%a(u9b(K|JoRa;7E(> z1aGG`{>7T*Om=}Fet3AeK?O4SGni7q6J z`$2rLDy>zX$E-Bt!$Ss#X_JsG40&z zb4i47_M2D_!IxO;uV$Aok!W<8kX8{FE5pSp;3=XMJUIWldUwr8h_>O4&40&eH<@2} zOpy%UDIGX$2YH3!@d6@jPk-<3O8R4ILTCr7_asBWh6f|E92qf;yQ8i$IOh^?6Snr#kUx`Rue*oD0|(`-8fd4tLSkLJAd{3oqySjmMiRC)bx8Z00Mz zoHa3{^PQmVo4gsm3P)fLlC}a5_iXmtMr7ke6rQvo zpyVo4zDU$&oN-}9O@B4z-Ka#PiiGu=+u=UW&=&nzBW4=Z zv?r;MLodQ&uL-rI<8elTNKpR8IwGpVi6N*TU?tQbc-OoW4$j9a1IY7VK-Ic$@Q{d&ix+k0(8k8GJfDIhZM0$C+9k zFqfA2Y%I}BM9lP&(wazg`XVS%92_(RDB$B&K2r|RJ#R>qGBQ-MX`eunTFZeVdI0J2Z@lK z3hO$MkqdKL#P`44MFJHntltFQvPkXGT9&}0#@~S;Q_cy}rQ^?-XIkUh;+VvXsL{Sq z;qRLswl(FyD00)FRsX&7v&5}}b0Lyivrg}0lJwtcnu*06`QX28iy8@&+#NKndQ{Tz zLw3s}0Juj5@mEwXtE0c3Vo7m~rFA$&dST zgbAsOqJAKo=l2PJ1#)p%Z?p1KQZC!}oVd2OQR0+`M5c?)1IV0qrm0k@FAznQpAOLJ zKfdR0DSBV0AW4oVQjqvjP<-Zz+Jo!-N~S$g=SM6I3Z%nVoLyXYDR?Hg-I1mR9bAs- z31S`#HWNnGHs#;a=4}Vcw_I>+B*h%ba#VWxwMhb z1K~L>H%It$B;B4g5zWg@Tq|1A1E|lEf{3=%WX#B$Rr7Q@nhgI(zSzID=neu$9i{B zM%==|tV)4^kq<0C!1DvZIu|Bbhtygb|8*KCEY*x{Pz1{{VPQlF4~b8Jq9FIFgM%=q zM8;DwTrPd5^uE2DDEH6I)6v=3gWJ(Tfq_UNhWS(ySrLz7fp|@0OC(=Flj4%jBcF<2 znSZE?G3dl%Q86)LcnJn2w)WZ*QP2U-Gr{(ohGejAj|$)llGefJWs2?op|RnsNX~5m zq!j2f1hP|>`Ym=NbASNz_Zz{_S`Qd+lad>Hj3H5F0GG%ykC~O+&@9V@LVr~S3%7bN z&6pK>-CEIAxVbnoJbbzXxqkTKWSK>^d5k2qdl zBm5@E)^IWDm6a7}^MI&wVQ_$3{xu|HiG@D{qajFl{Fs}&vH-O+&=M0*PO%xa4)2j8 zDY$ycn+WnA@o0!u(T)Gp)Rf#)He`gY5ViJ?iAjK7&P+oN-oAzZDUmgDO!?^Xa7@BE z4XXD&G0QF(Z<9f@KrvHLZ6cQ`&#a%4{b|6aJOG~n$x8cv(W3^@H$L_~|KC8zBrh`) znBGuusw#1r+B@U5{7y{5yzrElUQ0>6hXxu0HK)DLrgjW@ z(UoOq9d~bOmL2O^6*p3kkBiHQEo4mt_hlv=N~N_?>2x}*CW|HwG?1(>&=)WijYA1( z>FM=R0sga=3)(Rco0F1}Ldwmh&vj`YQ;IS&GFv(q>P;%4R^sVSQc8$xAh<(tF&@-& z{PUpT)+-eA+LOp35hf&r-7qVq!TvzU+0ikT1JVO~D`|2blbX?MS7uJ52}6|MMFmj` zST>yQj*mYENl(bnAaMGz>5(z0)ohEgFsOqP!55&@f7+2Dul@^6zGh?N>N*Q#5Tt;+ z^3T=0c@sFY&v#);>B>TX^%541b2@ZO!{^SG4vm$_c;z@gn?do zu72&+)zyuS-*n||z;x=`nm_F6P;Fhm-Wj^Ah^FUCNfEw?&23@v_EtEHlXrDK2Bp&k z89UopaECy{X{>L0q_#HWL(7*q(*Hh zjcgRXA-DyDL@7+38d2*vQ+M@t$AgO#7!sR;J^*f0=(EB7o{S~AjF;2|aKA%<1!ThO zZ$L}{8LE7WHR^8ZeAd1Fo68Ic`~;BaGr!~P3|Q+yGW(!Vi&z*}R#7|x@8v7^d)cSb zK48BMj6wSt$dDki5;*Ms6yXG!;Ksg}GuC0C9$>lL2_6ND*W->{wYC`a!svnq+V44h z)Z2wvE?9_>am;enWq)GB2*m)LILHs|+OsfY98mm0`~q}#BB~?i?!n(N zgqbu3S%92JH^|w#x?Y>Y#r~wgYW(C5)txVO&HWci?l=2ylAJ2i0VH`RTPS3hBAK%c zyH3`J1q*nqs_H!e(@WcsJk|$o*Ph$Arh4|kD&aAy*ka&-;RGvML~`|^Qyx4x3c zSnm)@8u{T(8WGPJ{(X8|8H0x?*pdA~SZc-)Cw8bpPF_BH*@?OR+TUaB!&FZ;pn`8h z!zCt1j!`h2K$!xtea@cE{$8LcW2jcxf5rmLIKjXM>B@~|OBP(eaii3F7M5EefyK(*zT6+flEDY{FkTjxS9;Jft7ci_@3TG6c35Qx>W`?MJQsRz zQ^t5X^9?Vdx3fS^u6==56Y+IGj0)ZffGfaWX2c>a^`|@%$T0aK7#Jk7fNj~Ci%Eq4 zw6zG`dRqi+U0{9N#hj7kcC6$}pvhIYGH!3iklyxWaJ1_Xs0n^T#1b$~z!wCjK8y0T zb6|CFhq2@T+*&V9wI z;IJ6+*x&n$8;LOHHu18=dcsA)uQUlMW;AnnhK2F>$Rt7@$ORw|QqmwHjkI)w!~zwSR2rnayFp56>25*k?p)Lz zi~ru|obS8)-s|(|LRic-=Nn`E>h+PA701Q8i-m@UhAZ(xlX z4lj)MqN?`#R@TnuhDP>i;)a%nwz~F)2KV)x@4vCPx3+uA%4%({YiaLbVa}p&W#QP> zMuCQg&26HjYX9%=qg{gQyp35?*RUJsy5+u*|KqS}d+0!uHrs^5L7!KGJF_NyhHoGi zM_TA+3sGWVg87`T$FchY+GQahrB$x}wXVk@ccglL{;YIcxU$_+-#QW6|Jc`eoI3iK zrtGI6ZqHf2n_j)tcNp3F#wHez>DhfG!bYC7hu8%BgtT+(g|Da*e`4fHdZXAnvZ!f( z&k#E{6ZZkOLWX(9HZmQXQx+>k%B`}?g@iE-JIspBB(Hh;c;n$l1Z%SIuyvHdeMH&8 zbDY^1YU&c%4+k*xI>leN|D6={eE8`+({Rd+|CMtyyB4it*z)1f`rQ@h7wdZ!9bwFE zZa+nu5hgF|Luq|NB0F#fo_LsH#?vG`739N@jO`@SNGbSmYp3{*_Z3g38={Y@N1jx^ zvN5?C>+^~*(txymb*j}Z4=dSr{?X5J`S2@CtbNpW4zalYAM0AsTY5;izADq{V`-}= z_hzDpBtKzEHi*vRG{hpm+ z8()JL7s2&wh*=yAYb|=!rwWlgck%2}ZeNRiC8bd<7)s3hu>125myEBIPerA_L3`bdQY=XuaICI2*f zb#&s;WFk7NhpUM+=3Ko?H$pA$qw~k6JabhGLYK{bomKi5@l|l7k)4pcjm$OncScYb zF=>Uhx-{nxtSwrDx41F|f?2z2y+#Eke!qlElUixdh#kK5F;Vy1Z{0Aw=W(;5Z|SKS zJ?4$TXFV&j^9@|TvN!RtqP-RHagsEArGFQWFDMszkHqWup`|9Uc6DEg7{1dt6vr`2 zexoEJyPKx(D9+G6Hq4M+9!SV-8v*f`W^^C+3Rnl{N zzVp+beYSbqBKT8AEw&0D13$;$zL;rmbEae%LaPuZ8na&Z{gg|A9!aR7H(f_P=dx~q zk#s-N-o#Pq)`DN;Xr(eX2|G2f$;UB`QAD`L9J2zIb_*kw-?ObT3#r`)>3ZR`X$xxVH8rT+rNr{JQzFaQW^bOSGwx6woY%l7|iWnk#bRD z!re8@NltbOy^b7nrR>nG!D!9&!VC}M`lHWri8k8xrO$l7rN80bi11s#41LZ`7+XXl z8Ux8+*F~eDWeJJCGo}ffkx`o$OJnyVmKZd+eOc&LZw*8LIQ9bWhOgDqb)A&oK}@N8 zL^NB4a}HV#7D^s0g+i`3bHh)*KCfbMbaHCiLAsr!=oohtMbR1c9hbH-eEjIEtVpD{JKj(= zkoP7xBoHe)CfG=7D8?&(Tu)1v%a#1*__k9LT8UAtR%C0+~mTShKKNp)chuXqSd-i?!I77%!J!@_zz&y?>Ep-TI z_K`w@XIEIe_enY<<^YRw1hGYNXZbhNtn8qxa-4ZbSL0u)bX;=T^v8~ndR8m>C5%U$ zfIkw$L)0oXC05xeGqqtcBJKH>Kvue?Y_Cv+b1Z_mlcnon^nIZ|3V|kuo?;@6(-r27 zdb28gg$D0vS8dxG%)4{t1Du=c(}G7x)~vQEoC+}lGnqL&)<+1d$`Zk}?BzEM_YUF~ ze)6A65^fdbC3e2;usXHwc_SU$f8FG)?F*j%rHmVoEg8|J&P*OkRgnjnXopW&>aT>! zeJ1g}GO9<@8Q6H`H||07lTM>o-*?(Loe8q{UOM15H!gnl6TLbre&-gogoSM(J}vbmqHI*G7sxl`*? zWIX&`Qqx;@HO8jJQ{eMR-*2i|nzYT7d)Z+GE_sTLA(us-vrh&fU5a0GJIO4asro%A z&x|$9@Wu5~cYD4Pd->r$jfwTW-=+kFoD(%&i`u^9m!_=l2_#4AnrSo|#wC-dVB5%- z-d}vMc6w*e{W0sIQD_5NX8+#3F}(PdD~dxi98QERZcmNY803FrMuwG~9PiZfFRmOq zzinHfy(64#aH{R;x;Kf{yFpHzf!yuQv;|H8ZH9lpX}-VL?uu1?{c zw*{}W42gRXcDvD&1dnnYQkJiy@BLJ7k{gt<;jZQQ&4>wmp~m z_RaV01+GRdkJwcT2V}W|Q4zD!0S+l9YhF%5$blpOvgS_ApdE9upzVp05e>gNzs$NP zdQIKK#q(DbKgKF$WwEz1ElmTIO=rsvXLT3*X!7-cd}fLN(&tS zyfD%h-nDV&Jt~164Fy5>Dw345;QYr9)vtFgChu%p{oJgpn^HS8t1jO3Iy;T6JFD9s z=0Wo9{5|D;pTR``1K$z<06%_RU@3O~`qMB{n@!DC!41LR8ykXz;&d$$AKa&WUGlr9 zI`Ksl+hdR-QCq>JT?87v-L@=En4@M{$Pcx9EK^oKKP5`(Ws97HSIi|@RZrdaCU5$1 zkKq`NJ=)qy=M~i5B+rOZ56V91Exa2fQ@}Z7f6z-p!6N6REwa(`EqpN)nUPGO^L4?m z_6hRFDaio+_YM2Sn_&RI(IiBKl-`c5#$u`xOP#l{ekr;C;lAVRg!?1!-(fA5_Pn}G zKumb4D$Goe>Gplv1Z`1F3_{*#A~-iNn$YvT$%ebm<>noxPUBVa644iqo%gpQIe2+_ zIb3HCc&du4Jlrq$- zcp12Q@$#R3?LU3*f4kH>B6bdra?9UO^_%?-+r!EDU3UA^sonnySw&n5|Wbj3Rf=fb4tMDjL&R{nUk|r z@U5!4x_0$jh1c0Gd&>%i-rnAtD-ks*jkrhl8> z8yO#;QN=)mM}23tGv7(Y(bLnT3b*G+!kVX3H(85tZDV`<*zM%7uq4;=_jiY*Z9~R* zv(uu8&nY^8NeM$oJ*t+!05s zqa325qHVidTe>`OootQr^(l|@wdLik>})BldRsj`J=OPga&fzhy}~*=b$U&{voCS) zK29j@h!K%23Q$l`5dMtA#?Ed!S~ORv-*S1tiUk|swWhd-Lj!q(0% zdH+?uHUjRg&*gM~ZG3B{WjIHzSSj;mso8KGm&KSDK85OEr;W+ey+eMv~inME)5<%>T9xn^$`TYkQu+fIq+B;$%(LJ7mH3*x1+ruj8PckkA8O zUJbqc(W6JEj@@zmYPwENPAc8;9%sK?ewSHjh>MGt@ggH^Gsw%zZ0Fi^YTXjuV7((p zs-5j_GB8#fb>3C+DLJVg!nj!7)Wv#DShot|1wFdDjg2Mk?d=cUd_HB8W z<$+9{I`=tlF+F#ICmarbB zD2j`V?UdtTHeVutdS1<;=541`kaXE!t$g5>kwHH?m=2e%^0?owMv>>dHddM(Ku%6R zU4wW1x^764fcwb{3K*kbEZCM~B_^XqhB<6jlhuDsjUwCH+8lY_n3>t}Ztv|GlI5$H znp#^wDwZ%gI?8}O4+Y}I{B)Bavm=XoiFf-6a?cEYo1wqAS0RbQdp0maUR_4!3(tGz z#`-|s5O$pysf9c}*g%*tY%3p^@RR##V_7@*Mm z6-=|bJ$i#&Jb*k^d6s_Qxv;SC&?!7zu?+S6LNfV3+bOa;UQk0-wSY-rqS%c-r%3+p zty{EyNItj2Ky(hoM5P^_a%-$Fz1VU?*YlwM#g&!*7KspApYoF*?=dEb^Q@}d-Hf|p z{;I5vmj`6ST{JK&j`6J@Y)pkT7H~+MTxIZ?U8wrkXT1-hlVfCJQv6d=T8fK@7sqah z6+JSZrOae`#isyyV`ylInQvuzd3kZM;4y>3&%u`F=CmpND>%0|Lk7~NBiVNrx{X6h zO&&wZpqaESdMYI))t0G{++6LvV>*;0VKVkn%tu3X`|r#QhuwUKkmnV|(RM1_ZH_JS ziN#onZ0yq@nU{Z&dn?CBM-~$my@P{cojOK)QXT)^fA>kc;svb?4VyZzr5(zA-#j~Y z%|rX7YPp@?7&9<1kR}t|_nBIHWhhsF@8o!+ZkpzZ;?tm4*lco23U!hItn1(k;&bG0 zSey(kKYt26L#(c@W^76SE;Apc%pHaz_Vw#mb6s~F|o0ujF_01j&>8C zSMgnT7k_pHKVoBhAoCzBQ>%)rN>z+^ttSy9`VGxP!TdcmR6#|He7iM`>1zI3z^Glj z#wF~x$L`V2LT|FT;v<$A^O2LA;UNf-SmX?-Ieswjr1W>@j zJX#)Pa;L=|fH!1TzrgL=-cg4(1dZm<$9{bx@^byeM9gnX8KMZ|j@e^=QfN(km!7$g z*0>%N=r+I#Hq_M>y4%QKRk{$96Wz;G@$DZk5O z%%+=euV*VaZoi-ElHRmat+0Mjs|97?Bjr?yNpW9ak?IJcT2XQQ)ytQu>F6Q`GFZzI zE!T)JY31VFuum?-0AIXU$D=d!_I|}&Z}KqFx#VQN$Hg5iW59lG%|!Z>^UIF0x(Df; z&oqBw()ALFJN`;Q|6$oq(SM2(H!(30_GJXC4ol-xxp;vZ=*KX*sJWW6hovJE&1Kvj zcPfGF39w)Bfy_(nVgioC-B1{${`=Ca6O|zp^%5jm&=8@`!)`#1q)L%sWBY}M z5=l}#wa;)^8KS;bqMNT>^Mvk+^R_{{Y^=1jv}72ga;fPc42gnKXB1~9xnt>@!_B{; zv^=j(pr4JghS3Qn#(c&l?HdC)qli4*n(6B5QmQK}bM(A|o55yIlG8C(YGz?>o^c5v zPlfyGcW*cO9T=93d8pbZ>DEy6n#>YvQ4Ftu+#3Usp zlf}LyDX-cS%;|i$&vZN5-YtXz6GAJqy}LV6WOi*K?DbR9RjE z`x~%cmj_RF*p$AxdH0b$wZD(~Ac!&y%0BihF=geju{3}#OUl_QKCLpZU*Dfo)W4jk zEs^uy7KYs`?k@X_DDf2T>RZ7ooEC`0b=<+|YADxH7bcyelLYD5E6L{<0a&(RSn z%D%q7fErq8;s5pPEjFB@ ztCBt9;Zw!Na%n=EcW8ADUWL+f-wcYrPDm^7UgNTNc|bhj^Gr*C)7n_rcFPx1IvK=e zF0YH>lz#RDebm@BCEYk8Wt4n-!pZ-cf(k_twzj`QvRI)>eKfa~5f9X-1zJ1~X&D)Y zsqXFoc8yX~nwP=?172(OU0q-2LX3OFv9YlUupcZ0W(Y8;5#>I}Mw%a$~uK(0-h~u8E@+p?rDX;M!K5EM*yv^)}@>m&NcbD6; z!_vjr81cfXBJ&ZBqk{CSSFfhk;u{-9+R6(H30_ff(Rf=C=P+_`aD;En&52TsmzvQf zBO6;apth};l(Fog#=L4;gE8Ph0|3{R3BM)d@H0`dfRF@ z#fC1bhCuGG@orsp-Cs>SDYF>Q%FMKwtd1mp-S*t*^_w>@C`>G1f|r`!UBaLjWMJ^o zA~PGz8r+_1PnV0Y)o;P;vbsk`7J0Ban66Q7x!XHB8YvjymGdFnv?oCbP_=%QMx|}4 z|8hfY&Pyew)zRXGBExocboB3zYmCft(ulj9rXtsiSR^$xG}6=3o+F?%6Wz_s!g4EMb7^z$wuACvyH!m1j2nY;G0tpvyydIr!A*OOi< zC?r14rhEEy40^-hvriE$T9T2wR!e=UnFX=2v3`Eox!VT^#&b^V6KcgqGHsbExp#+g zjEI$#zue_iRZbByxBT+r&ZWId=bd?|9qpkE4SU|^X;2^0IW?=__QG-$fWCi-L>BFc z5fBhiM$e9+$dNq7gX!sD`ZI~+J-NEWmVo%@9;Q;W3PBe&Eebgs0Bsp2#Yb~r508L? zqC4I=Bs|>lZ#|~TUJRe}%P}fD=;-l*f%1W3w6wIruW9J$+EvdwA~|xzp+Xxu70-y? zf|8GQK73xFtN-D{^P?SYhI^ksemp|rrPm439R9eNOB!HY7n@Ds=y0q3XeX1ys3Z2V z$@grt{9hsI0HDt&DzUe%%~6H>QU*SXr=%}8h{sWAdtE)yg|_k!dwEYm1wH)#{x!5C zcyQE*;eVh&ekFh^bukW?1$W7)pb^7wCkSBDu(R8~$GJ^P+Wyktlu7LBGt~BfheQ#> zCo7&)r;E@qFWS{J1nL7(7li))4tal5|1vzufBgE{gUs&cFF`Xc$H&Lr_1pT9JkHw# zP{9BDu5!Ezrob3cL^OLm?kAe^ z@{6rOgyGC;VS(0a6`OJVEskqXW6WaNZ(a1*e|>7aPP)LW{K=KyRdq>8Ntq_jOiZK> z4h}LhoenFMm|Sce*(0@xbWOAH!rT9I^iL@FD(x0bij8thN*$gH4;RNYHfEa)qd~!GVF*zB$3^CVClSA_j}PLNUcS_G{fJs%N3oYLUzVRu76F(Dgl}&7+AmZorjbLiXjUks%kpo>eIYG3 zGg}Efke@#}YHxjhcIN8!;;(G%cLpXVo$9wCGRlsQ>-09;+i5bqCOb4zDupL0DUXqh z8x;2iS|a;O%+}HG5J&TJdn2fSE6B?yaJ_ZGd&JIOYrlktnw@SdeSmOR@yTZeKy(oo z5o!JP_o7%yrXV}u89(ZupM_YAJ&BA8uR|QO83JVRVs~2go{Ok<;}MpUY9AVU-$WsE=exLz4c(TnWT0+LM^-s)uxz!6U7&-^<&dDQYPDh&nW)Ed($$im*_^kf+cYa} zG1OW^8Hx{Ss+^ptNOT1nyH?C6Dq=O-yKQW2Qh{F#GsFhlMlZjTm#=WyqX^QY48tK` zO;1W{%L@uRcw@HG5nXP-I>KPsewTvp?Ol>;C^RSJEIPH!cEBTy2< zWA}-ViqCDOFEzWgq$FRfO72Ye_3IZ)1qCl&hL4OKLemUNla3d7<(5_Swkt;so58|V zy;h?r_eQ=^4dGop)d^ zHvax?@B*xijtPyXEA3tAKfwBCz5q{|%|7hB&?jz(I1!4arh9_!uPwD*+r#-akG_&= zRb;kJ^Ej>Zk#U*llsY7{Xq^>1t{G`*)lAkL`;ic4e)O%ZI!L`-I=k2_B1ug*_5Cdy z8Fx7btUvy0_tPj!oxJiL`4d;8P^_fkdHiSo1 zoZ<&>H5yuz1cHA4==iwK?dWCr?WLI+#bELSO4QDNhS)y1z1aLEdT))_n?F@vSvmJr zzWZAQ16snjOcV+SxMIjGO(WGeqy10wkrN0H4IPh*!-(RtP^kG{SyQ9``Zax3=oR2D zM5KE@-ri4arbXhoDjnCZ%iKX31mIu8#vew=@P;&qEOn)dG9yC(uRM-^B1&hMgPI!@tPe5KP8ih14;7k8h z7Z%bVKhcl9vnyf}?w=N|gIFHQ&CkivOnjcYyK7Fc zr&dCr;;_OsHum(&mCsb-vah54Z?kDDDk_SKmby6Dk&wJ1 zjYuww_07LCM8w3#-P$-Xl`tJ>bux%N9go*WDhe_({46YL)0*+H7wAJY#iub@Wf6Gf zd@@b*of?u$ek4|mOxYb#rJE;5D=EAfSCIwvz`LMs^PtKFbmJ4QJzbLYR`q-LVh)!> z;^N4NO8WZk-qj#@+hREAj%+;t*E6RHe9_Y4KMa^OnW(tqgY6ns?B|zliw8S?tjrZxpWO-euF{ixB=S;+p6}ucM}xYAD5vTB-5ztso98c7JJY z$C~esmy6_eT2HZ;l=LkxcLJ**Y_%t`0noB49?2lkFfUxv`PEfEhh?R#mf_)uxgEd4 z$6+|vuS2hh6hI)0jl12C>Dy6lS3dr^T5yO}p(3w=r~%)J@l9Gw?uhkGqdqb#q^IKFH=z^L&2foN1mGU zi_!)KXTQo%bK9T(b$+rS2&5V?()7?vSrGkHqbTouD#51^kO#!l*JtbGM8Ya&k`;Jn zt%wAPEtFi)oiBB&&O@ih#esq%9&8eN28Pq>S6XcsgLDDT(VUgyS69tJGw^jQEG&f8 zKy-w{i=0GWu#M?oR)A&%S~3h0GMqzg5cI>k@aS5X#hwRaZZKrb=VzzKyEeT^qLfXl zQI4H`P;ZsY=i0(nsWACKU^H#$Nfefmmd09{yM6)4Ju#Ot-f3pzpIWB}3Jd1*IHW?f?`>1!}&UEYil4m00b6iGy3@f zGxQD_S?tc?(fPqtEwDkNFRCI2b*uXN`jw?8_we!YB?aGZzUz~V<4Z&?k(|IBi1_*_ zu^V;VR#sMa4EsnKpO?43JeY0V8Kn$}7lgx8|K3m(JA~dMA=U2t<%`^lijLneS&rEe z$Z7^fqf>P8prO_ekI7*GPO|WWA|oY&jKIhOqo(}p*RHzrGbw@$@FPND2XbRRM0Wnp z)!@cbk_u+>Jne@$?{mvK=Qr=Vqz!9Jw70l$nT9mFV)lOOf<(<6oYn$DnR zSQcfy?SeS~v8k`bMA6CVKzj74i~d|adY+Y1^ca}W+f6T&q?io6L^?G92~H~GaD zcosJZbtb*Jd5-yEuD;&a)p4gJ508ztar^>hKa%{-J+fG#TH5ymdHL!%Q&s7{ntm#HAbDZ>e=b9Tv`KlC+4{=4f@rg z&SH47D?KE>5zj-N8`QULvNX~w3T_%y4}dCqZ`v2dmoM)|RO*YHLwWZ1_a|Y&!NZ@D z7R391A!;?=kkbO1hcF*0@F{UhxDb8N&}O9&d78gUip`{w5;8OI+`aq2?WbQjKn2_N zGwgXLS^M2f#KeP_Fg{E2k&2iY8X9sPeXeOmOg!;ef2wr6A6vo0ujC`L7c}(3l4g zC6miGIa6^#etLP(^2biS2MZ;`gx4OG#zAnt;nRRTr?!FV zEL&wcoW~!x0_;|t)^f5sGbII7Fd9wJD=j*{u{mc|!p3^2UUH~K1(LH1*shMg%u^$Q2Eniv8l|er+u|uSAzPv9;HNyi|Co-5- zqwETbe2debAy-&$k$j3zjmF>GIyj)R<&+t$g^4(teTKR^BK z`i2G=kI;apJ2i=`7%w-qHY=_Fe#pwof|{kOswyUS#iZv0CU(?glMm-w+i3!`j|Bvh z@$Pv`$<`9zDDXZjmix9j6+F}8alS!8PzX%-xXQ`HBi7>oi-IWC3GY;Dh>8w2r%AZD zl=&|Uw|kt;$Wp8f7MqUtbqx&o_X&G_4TT~9VvMaubnGmwb)m)oiUrIEv_3MH><+JE zP9u8#as%-V3G9ts;{zrxu5gzU=N+RhWf=T9@~6xbBtedn6Y|xn+ATWGWpkcgv2|01 z4IU!8Kk>b+J(^xgFfmv6>ull%Fu6K)qf(pI7NSuV<{sWKbZETdge)iiv z1DPUJ&}`^=n^kX8X{m#L*{|(6Gh!m5krG390m04z?AVG?RftoDK~h*V=>6~Q{_4QYp!OOCFlkpLEOWqivAijhP1=kKY#A${(w-! zBE5XRNdQD9{!C7-1M0J1l+PP^k8w4FA6R0@kj~a6q9;Rrj*Nxm@~X=XEI3Uq>5a|J zQf?!!^`-|wC@QeG-G1nZ{3scGdv50M$NF|4{Y&RYFJ63G{X%5PH~AM6ZGg_|t+TU2 z1&vMO8*z_-!^Ag#e!NfNot&K1C^H9&ay@r$zzdzxqNyW6t7^mP!$7`HdlJXC}`qiVNvcR>lC6Kh^ock zRpr6KH*>%E`kMa!UfNn=gYo?OOJ7)w3ZDQ8-E>m8ar5R)5$*3R=wv!bn<)_SIn9Ow zlLP5!XlY-bfo}m)bp;(S$}_34l~VU;x+?!iRcbu5(dF5LtnLl1&-fI>m39YrIOY#l zxK(wg65Nik%B=*OqsK3y)d?XctDS`(_)gzQWk6T(PAceB;Rp0v-O}0l1#z;wM0hH_ z;AQA9h5N{(t_lE_}-w{nm3Gb^5anFJZI2;5CKAkp)8_2kr_ zUu_Jmi3+zMKgoedxVT>+qT@Rp7`~54qx11T{ESb|m#`@ab!5K~9L%z^ve4GHwxknq z;0sTn$oTn_a^EMKk+`*VWAi}Oo1~hOipp-%xRrxjczEGMIzAZmYpU3*N{7$hP3H+nh371f^rkwleOFQ8ffv?d&n48X#q-!^DVGK2-k*X0>`PV`h;(p0}I#&&gK(!XY+tbyoa+CoJFnW(NM*xPdsI>HOrLb6JZ>H`@Bs3FqX6B83Er|i!&~&8>5ON%1%KIl}h?G9}fpskxbsTC>*m;11jxsQec+6ce1ih%HZ85sVBB zLHNC60Ffi?e}Z90e6|qp5gHcemx;Uqi+omnZhE>tw(v$kMU~@PQrRajFOOrJ!q3qI z^;3_SnEYlFguU=6d6V)0dK7UmO}T421g8n)xPcq|W(1y-akA{gGtLmvUZE7hmFZKQr@nr^V$|efbX(7O_sdUYRZAC?;kJ6cL zrV2prBXP5Ne$!UoJXxBHb)>6HR!+|9?Bob=S!(=z-}ASk&!X1t*kKFGyu5`ERz2A=mB7N(6J`& zuw$($b-?I;aB1=-wj&p27c#g}>wXHBd=Eq}`lmFc_E99rTukORT2izHWeX*A>g#LTkS`Sy(pK-uEdlw?4226PZgQ}XAh ziR5(^y2+u}=ncY8k9^Ei2VW(95N;?vpDlv{{ZKt@C#Kv56o$}|vJZBk4TDc<{fa{> zjIqgb7|89?$gf{M{EKQ3PuQAnI>BwIuctrHuREKzg^lEfhWWMhhiuczrMj00F3Sno ztApKp1aeq&jBpnj1PdO z$RAXdeaPp2@-5aW(LzG}kki}z5X53|r~B$|t{g$QhamUbAX-^#-_Hc08 zdgdLLRU!W5w{2kod4a|HQtGEjG-Zd`);kwEqkPHc!GV*V9kk2H_;{U2c0&-!ceiH5 zaj@y9mxcX4H62JCfagF%bGk9VL&mGOGLUI(U{GzXYyI|6WxpN^Trgo_s_nR3jf0}$ zbg&iP%(dZ?@qU-by?#A{#&U6aS!j~OVr=4XLkj~Vqb=(-JDVlI#3E+G!o%DaV;@`_ zBFYb}CF7qu1QAnBWocG2cA?CeOQK()Y(sq?XspD<%4q`P0kpQP=u$E@*=cD4Hq(#)CA91)`T5 zYSKa+g~*5Ho|x)m!sMNN1p)*cy3u&X_7HE6+@> zSelq`!=V8+xBK^t)Vw@dS0c-sKIo@W23DC91-hP%>|lBqKuh{FVd_4$&>7ug z$xa7KC8S@ewd1CokmayLG}DK2)TnGoMC&#HlKBP~6cr`u0Z%XkX)4i84ck`dd!q%m z;XSah)v{D_wew=GOY!nL85qBz&gvd3jb5tz0riYNHZ(MRXTG9onlz3#LTt*z)m1!* z?03y^$3L8CRUf9)G7rD1OO&>8@*xFzEy!8GhP(m10(S0fY4JiB1Z3ZVVb7uPjz7Q6 z>&Wa>bqu?EcW>`1?%mMXSQ(qBvbng)_N}8GV@1V&u`hQ4rh#hV-snvL#j-vZ3lA?X z>kxmGaN$=79Z|99NH9twR=cN zds1GuHFMtPTz1U0FXlwBH(GOiEF}xIhJ?I!aA@ekLS~pJwdKfvkdm49 zAsffX&~pGntA@II(JtiNGEM>?2>UurQBhL983xc@H1NYJpm71+yId`)_QiyXTi9a@ z#y?NM*ZQ8LO3=mMHrm=c($KKd{KdSC@xgHti@pdTZ(==%?TIF|_0&!smrtH8)YpZT(gjGVGpJ&DXi;;CGlatqeYQrbxy4C#; z9fQf3*A9BuEI{;a2qkJ z6rp~WvO$D)1)sblHy4_0u6ikq2~AcvkU*HvCOL62v7tOI!03Jdf8Li-ob#=OYiIA1 zf#K>%A;idm=mGzF0*JF*TwOG%3PN+c{Zj)2q0BM{<4gVNA@)Ut`k42wX2_k*KWX_F z|C;?5|9Uab#dCCvw^VpMcx%(_#weWc5l@%ZO7Wl>Dz;xTeY*bOfv#rPMCDX>eVhQ| z`aipf+iJ3hm2Um?dJIzjZM2|=fT+usj7q+CXU&V?Q9_Ho01@u<;utdSLV6r|C{Ccb;OEpB@OB2_kz0VL}^hcY9Sd?y@MWi6R0r1AkXnJG3Q#)U^u`^ z!9kkgzqVh=`6Uy*-KYBH?7*`efna zdy+t9ZGcKb=fpe+C+Y0FrGNKdrpuD0@tWHaRO*iRZH6-_Hcw8*ReezTVe=088e&5C zolr!942uIAXIO>f$>A2I)5F*&HXlU1&daRfI0M!>vy9*z*hQ2NPdH$&iE$RFF;f!) zhb8KOa^EyR^aAG`B#yL_=;-k*icKp@s)g6a*jT9>5Z^VRyJ^KhvTGvH9mG z__mO%=YsU~;eJg4G1Xtjuh!#S;M|`;@Wj~AFzD-x>LelbM1WqtD)a~xeOdF4wqgG8cIv3WPX&xj zl1Y=GHP;7O0neffBG&)zl(uW@5!WxfVP!56Amt0r7Qqc2>5?5F0=% zRt56Z8jHNa@49cW@ZdJ|uo~;X=uKL_ou5B{ru;bxo)$2ulY6YJthcsd!P`JG5ImeV zf>BIm(aFG=7#RGSz`(#5@uIGyeSOJ2=z35j!47|60%dY*Qx52oSN%8yw_hqM0!rxA z`jYgNMnHzn17X#ZaEX`X<{7jO@@u=XcS8aLpM8;*lS?m!(l_1pN)xH=y-d|(bT$u$ z%5Z-_fZS1_LL(wp>*$(5AQ!0&utM|8@6g;2!L{=El`&!`proWUvUI5)GMcVGUjIDq zT4!9aJKWTLUklDzw2VcX2Pvm1_15Q#={~1s=$0m|)J!KGfSjy3Ob$(umh!rm(_Bk< zzv8W+oAPLGcJ}pOd_%K&^iwbj8npTyxA(*@&8d-n$smCFS(S*39YYsj==+VF!@K=12}>)N=Ggw$_7$ zX5h9}@z}sk_&EXC@7k)bFZ+ffiO67^SQ1m9-WGu*iUH`=x@HsnkLial9rYO1#{N%H z$APOq@&7wwDW@P3NB3PXm=)5Jo+e#rsG)>&G3lzPr2oZLP>D)t2mj7YqSA@*-*@*i z@zZ$PIZ$EGG#(7JSy_a&T@{}vL@@u%JEGqG|Bia5@gzf7RNjB^Dxh>U8a2d^{0A&7 zUA?`%?d|PXTS4&Vs`)9G0D)QakKq22U3(Tp&A~yqj4_M19VZCKAzEp`l!QuH+0fqZ zS9^+whgW?o1dP;X(KK4X9USm9OWtQrym|3_LRq;i3wt$5pkh>+w&E04G$GD zeD6ZBlaHson#Kc@_D>?7YVT*~+C>YzFmB#D|^e}WEPRmo)V5v8@Uqd$ux~+gRk+YSv#m-w)BOx`5tUw)- z(*?B$=0GMIByOAGF34m_8iE~UXks#2s4vc94B9>TQ@z8(2b-I34>uEk$kM3PFTmL< z2(hzhlrgXUuCM>FlJM5GIe;QRD@(ElQgv=qwTM&;Ce6yXG)i@0VPPD=)YOE004FDBW=d{uZUNGooT?sR+MC??`1l{ReFNgvX66mJ zq+H$<%v+w6xjHwmswEhi=wQ?$Tc4uwoz)FJFS9x_GP1E0 z{vkTacm`o``tS%wWnVrMxHVAA6FMN9SEN_sOKAup05P%85NUw)%j~a^*qE3Rp6l)v zFI7}5M+zQXywO!A4YxCyl#&%AVBN{e@$*XEO}Ps>E0*XoiH-DZX_a z7f;-ziZJTxh;K^w zpFH`-4meOs&~G?TOUlH|%*_2GHWt>+>kUv`=cgZI>c5Yb%=u_VXKn%W6&xI_n)b{U zLb;1GU>>JfM4Qb~hHZ9-?5&Oh5O9|RMO5mi>uhUKy#>VY5=tQS0B7mGsbFOX0G@Hj znJv(CfI{gHNxmC7eiM_KUm}HbjuwM(N=7KtjDj|k(l1$ zIOH)8zvAbN&PyCeQUt0FyJ1_w6?y+^kMr7Rt|HH?4$CT4Sk~nrw`%mz;FX`qfH?T& z`Pcf!xa{Vo+W?HG`r9Ggn=x5UmZ{te8u5L9e3QD@@WBn&fFc{6-MH%>4GoPc&RPAx zZ&N}>#?U4T`S@vXOAt4rVY^5J_Y z=KuROO|AuO+GID7rq;#Qr!oX44&menx;~2y4)!)@AdDpX^;^!}U_x&~sfWrliz{u% z616NW9rGlJD^YMAbS~79(^t6PkdRY^bI0)leNzZ5QS-bjr;f&?;5r0i%KG9mFMwH* zBMl4sMIybDyz6$B01T>pJlIcia@_!@KrvQTQ)3&v@dh6|1bFCJxmA3lgz*S`ot*UHrof2OG`l|W&Ce9p9u?lZi8~IrKve`4Lbv$tTa*(b?izv z6Ti+3lz)@cV6M-YM|WEVR4@<7mr4Fr=rFj;N!0e70j|R-l+h9uF)+!%Zx|T^^G-KuV=@8d)28jD(Wt#ElWsJ{{Ld^z2mX|+c)5rkjkb|mmM-nl95ej_Q*;4MYXT0C<^E{99IF2(U zt0u%tQlXkR0_K5-CE<_~mri*v34dn?m06$2RUZl?!kmUu(T&CSiLtTXPGw3L)DHwQaAT$KcV1plx7 z-ro{qJWn}pN4mV+VJ^D+!+-4dII@!&x8#Q|QLH|p{qul)#0|28?u1>nUU-0OA(CbNGyM3$=fzM<0f~?_p_mgS2 ze}V@@&kw?oQQkc9!u=+6PikU`XQ&7+8yTVmPXApyeQGW9o(g#VAdU{?hwOz$UwpVCJ?8+KyRq5)N^;8sXwbC zm+4s)xT631@>`OOD~QAC@mOfw^4;RmAV zK>9b+?A=J_rJU@pVDE>0^rimDfYwR`a+W$sq?7@0@rQ5Huh+fk+>0=W@Bf=i)VWkf zcwjs$gj3B;HtmjFfPt-UZn9gZVt$mfjk%rIzbxw6S?gYdze%jk*yZYX{JL=G8CK@) znQa9*NVGIQ=%lJ{7lt6oY;W3N2G+2_Oku1y!N<5oe z`@Xz64{IVt4Nq{&&!Vh8W_F zCDTW8&^)DHek{=c0BDvnGd@=%q&^Obk4bD8q)^O^jIU-4DxQr)g0Y`)oqvBTe%NV6 z`&*HTgoXyWnp%3vg1`23V)Zr9zUAcSYv!o#E(waWnl1kHvb4+vpy#%w`olWIUM^+S znviPC_SW)kSIh~9bZ+3`2sk*OzRv%6I{Rw~N6xbv*J)hB58b7u+lTzW(xq`FB+zUU zII}agjdJF|p)#B=8J}8ctA;*pMywhsjHT-N99uehw4%3G0V32zsZm@i>2 zGvI7F-}$2+&)X>7sUbPJb9~=3uu3ev-i2V(6m3S<^t4cJbLK-@7tRzD+ZM{XzP@&C@UU z2f5w49ssmeD}8RatxYa8^g~*jME2PshU>Dot%ATU3!m0|%wmqs&VGdzIs3)i|xAcXBihdeRR+4fg3s&2LPY zoLj0Nt)1H=wCD?^(hiN*ux3NK-I!R72$@v+M;69VH~;$0X?ZvaGC|utJv|M2x}}lI z;?mMm=QwedWDo~~2B>uj7aqy-a5&F^##JUL31-_LNyTj>0?Q1V*pfLJ+ z0f#HMxiyEJ11Pdx8fZ548-T$Zw!Rv{roR(z!6O@e3-q{QWt}SUiK9 zQS_8_2+u2$ydNE3aJY_TaSUPe8$c93YzBG%7T^?_+lzw|Xr#3xBkK{jpA*)iC}rhG zxRedR?J3{gd4@ubq<-lPmpTQsjB8sgm(nRo3u)&(`n>PomzkNHD^8uSEvS`YK<{RJ(c!TEDO`P)4^n@&7h`3pPe#6h zR{&rlkRu+}c_f-ZR!|N{1JnYbvL5>Q7UQUjZ~T-Mu3C92AyC z0O7rRhhQ^Iyh;z~*h zLeDS~smY&f_eTOkb_tkQ2c(Uj{892;xiW|^qNc;-qLCaWzn7g9PJSyhBz3hVh(|X? zV|28p%E{^7mh$C8ZB&F%(Uzo?e_>dAjM7VpW`X6{6E2#l03b&V_Vhdhs1MSX)NrNz z&zz7{oahw&|6X{A$SnIC_SK($OhM%ec<|0VK(@y>rQC^kM3wxQNT! zvupft;L}NrR1V&NV_let`f&N6G^o`L31aSqVVsONyORvSkmpwwSnHq@IF3d{^jYQ^ zilhVRi_p?6*0qmk+DNZ4=#~`Hg}Lv}M~XhlaoU`ZgCy|YdxITXL0hek+#fca@_CZ? zHgh!chIR?6EzS!GRjbDBY2){ORd$|~ddo4AyN&8g08b~v#QQ_6&-!8Kr&|A+DEIZ{ zqHXp*PBu~`bGo4^3B7k!lK+nEvR(d-!|Uj*%#7z(2v>JD|mJ0?Culu zC?mSDFR7OYQqt3JUw_17@-|+J{OM8%CjA2S_s92d-@HkGGEy_3Q7AAkEK#2nA}-Z+ zeSPa?vY^JB9gdT`on56GjMf>q&z^N%JbN?1ZQo6eXz-FrUt!o4L89XX4I$95XRFPc z%-H<2A7lV3m+1-hoQ;==m4c3h*C0?`4xgGD8^4MLM1T$-WRGb>JM-xPOH@AqLadf5 z92IMNC;?dcbhA6Yjh>i zKSwLw+foI9ZnRB}ve;SNm3msn?wP6(LCLJ#-_a8MxLoq!t<+Z`Q<1y!X`%tK1)R2M z;?b?%KlVyVN!_K9dX$lG%2)C|4kI~j4JIDHS%7UXSnz>l><`4f{f%dUZ!4pe)B61r z_Xfcv3eGD)qAPCEfSQ1U^_~ud44bu11eT7Ti8YM1fDZNshgsxp1N5hw8lZ_OMv9s2 zWN9=y=|C~7v(YH6^cH&qtqs;9?a9z8+rCWBzhT9hF&$+W?F{Ry5FLfNC}hz&B)CfKjQ#*1f^1Y6>dP#kXC6s_B-PLt6j?;H)Am zV8Fj8CnbfWqM{fJ)r#VPtoQ5i3;b2jAgqj4Qe*Gycfx>50B1DaJ=YKbY9L0EU)MBt zvV!hU{F^t*aZmvFj;R4b;OSd?Xx>W)U;5Ja-k|QGhQ=mT(^9JzT@MP8Y+j0BWQ4PO zp27Bv%tg>jCERioMT%!24L;hP%KpJYYvzNu!T!%X1yq4>^mJJf zK9+wo^=vqsiq|=Ew)4<0R6~*Qq0tBMaKB0Cj5h)2AQZCf&%W#VRl0!K zLeD~a;^f|5nVSFZ4u~U|f z$WeRYdkAa(C+wZgjaY|3PqNP@G3!xgY`TqW7{6h{s!qVm*WzW?|<-<;j%99?4^x8&K#WTUbD9GJ+<*b4zc%MJN zzw=);%EXK~V_D#Hoh-%8x3}{a2dlT#M>MI30>b3qSw}}jvE;7|qclq`aiA3PyRfhn zs4aCN{YB?I@g;?|gY{wNKIzM0?eXPWk~%E5ToVmUwh1^FvjLQ(qTNr7s4xf^JGb`o zB0Q-R37aRI=H7$Z1@#~f7r0%00$~+!EZ*>1Qwc6K)S&LarH7XE$R4*E7b?ZZ4YNhQ zsQ-p+Yht4OW4R~PD-t+<=WVkLj^013k6W?Xz|+6{S=jIW&LJ=1mN0AXHz;I|O5aXs z;2W%_p|+uP$#VF-cyqB+yYjn4y`hnjq+#@_hxtE*St=A0W;;FUW?kQv zsGwk>JkDmiu7!hFN0nH1u%YA@1LDE3^{J4-;fn9?6XmB`#eHzq-0SGA|7@##{X;)0 z9^gid;zm%@55qA*{j49@F3(_} zab1Ycyn4T|X<3r%g#W2$G@7(f00*vgUpElc8u~3`MZOse9{BSO)`HH3 z@tISeW407mKZfUo1;1?d^v&hjjQGgrMX|n3Z(G3_T3m9Pt>>!6h4AO^o3^iiVC>Io z%>7&7Ai*8N|nPmD(~BVr|~PY4uPj&=JzjxM6@+OxQo<4STgoFxXtW zP+Ql@aOe;vlh~I_5)d^Kcg@1^L5wSOAF!JRIXO2C>xtId!mb=0E&sQ{H%2JngLR-I-8A@{mG~r_Obf3cgbT%;_n-CcjWiyvIEKQ zLp$py{@KH6FR?=^s!ZdYncbktw&+f~hf-;vQwVyGYu0!@OJ?qO5Bm(7U8nfeJ+;p1 zX^mYs_k(F}9E;PZg`S@#u4C%caa`D1yDB6A#Gl|xz1?GDT54(%?%}(`k=O^?0lCQ9 z8{-l&Fg{^&m$Of&Wl3t{nJl%L*J-v7LVZ-UYaq)gXteQ_0e7jtAPHF*!NVfuXPc?7 z*0+8QbQ|=|ZDX>!??`^Hb&iW%*t>95Sk85S(mh{Hsv?)mz(&qW^x;A(3cK&pMsmH| z!#T!Vfazgv730H-7h#u6%JOx?sf=k9w9noc(+FTE@t2?AqjYs^3@a@;2#k$7pvHkS zDrE&QP=ooGnJ-LfuTS%d~4urP%{%)5sF>A@;JLAFw=mqpk5d*L_J=iwK~B213F z3Uj{sxw$^Sa_6bC-ahYnJmi%H3RP5I5k(gQY33NE{tLq*UjZOTZjk*rKR&h=Lcm)j zR}}+95{hC3lAV-5Lw}RkaXurh7_+qS@zEC=_6LDo6Duo(o2-2R(!$S;j9lDo^~aLk zrr^|jWkdOy70_sJR6j1D&wm@~;QaFv`+HUb`B3DOk*9hLT!UgX2#f4(&%K+Sm;e4W zgVX%!)g{W`z-scTR0Vrjo zJo(-W!A`^~4e4RN76S0Z8{qxp3zvI`wD(;OxAt~+Zv22g`pxN^Pe=HuXygj%#H$MX zkmjNC{UeGmB{%-LtZXIOovm+pBcEJ~q2B`A0S@N#w#yW5f^N|NyIVl!W#b85+*4kk`aliD`ukc> zrM;PZwP=Lz;i3c@5sCxffd90QwXnF#W=C;pG1Z83UdV{3C>Qa1ywRtR;ko@#vplyHoy`rSbGB?umVe&48dF zdj|*1`uaL6Rf&0Tz4SwH=b>C6egmcd=*Xd3YMqL+z2MGLOM_d%q!fDA=G>?u0o?m< z>zVa5VYo>L$tyH8rl(J=ze0Ex+iRPfP4UB?Y=A-_zZU|;NSt}KwEkwGAcwLX5PP0I z(ZYZbF2-hnaPejVS{-i|)Vx97>w~OKS zd64MR(~ECehXBnYZ*tQ3@9%Jfz@z$^C9*5Im{g~TtG$=6WYWvB)D!NF@98${e zYih;dn{7;e3oMSt1nMe}_V(O`x3?^g*b9FAx$BzXCT!-CZ2xro;L~=Jn+-vJ3v6KR z3t$&%RQH`G_Y|5og|G)#6^%ja=&5TcfL8LMSqo0YSy@?XRRsk$@Fc)wL685AY$KwA0pU5Zb0twr2l^ zx6Z1opb%UV@&2rxzp(@y5vNX{&WQ%U2DMK%W3?a#FdPJ}=jymWDpD4x901wgS5%y) zjI}snmgNxJ^h6h+mBGcCnQPzF4-0^CF*-VG%%&mL&@v7*J6xbnLG3Rl0&2)2$+);o z>(|;bTyy6&lGRc}X+%5{;u`_g3QQ+#zDYs_J`@Lty|3z-*>vvNmnL0AJ-E3rnFQC= z$Vgnu!O^kx=vOT|o&>mi!$l_Ya{HKXO7MQV!=JkM0Ty#Z3WUDHXA! zSS>ni44JX1*@@q6%1$s7zaGTdpd=1box9j15vgh;S3-z0mSl>pB&5*1uC;7Vbu*O z$jkqk`SfhO9_)z}=HOIypDA%(GopV9^dP`)0|;-UcKu~+sz0( zf~!C3!-N$F9zz(Q&w*~Pu5FbH87V0*CIGO`+94F#|9tYCL^4g5E7DE;p>ZYog1LuA(|VH zM5TKD9ksiL+N4m=Kl-qE>B=@xZoUf51$vd?kq>>`Zdoh4?$ara1U0(h=ZinZ<{%i4 zyj*L0CA{cL81h0DMTr~@cyM(Q^6;R~oj=d0lpGZ`IX*6CGB}|(-5|Wb+5nV{8+YcG zmlcWAP6k$2R({kFOUMG<6Pta=q}-GwiarTkIl$&2zf$%SR0SOC>4bId@CZ4vJ+`l-m&WQ4R>a&TInu_ME*~Eszz?t7b?yN=X{w*H zDgLl=%+xS#)bYa{24)SYSXgV|@PG$mYEJJh3{JhT4z<7rA@GH8n@6(zvI!rKq-df%FMiV)Ygkld;AwNasX6#^LlOAS z^7HW())G||HVI9fUGQs0tt8Ue`N-GXMnqADX27$SibfAT_hRrW>1R|^<;^!qkh_qr{Oi> z+cRWw>Qniq?0kWO*w*$YoFd3iNVk?aSTqhF9eTY`?j<566*jEThRt{qIcUxxU-5EL z=H0t9yDN{so&ik&HL}xbksT$bjK-waaT(~x^VvFBSg_JC^<;JVm~_pv!&PLFv?q88 z<7tSY&K=!7I(V(*Ew${9{JGoL?~dem)#IH&v#mW7?7>Y9oNbuB#^VsxlWT_DUe_^^ z7x`Q^U*TX6W`*$kB1mvgKx|V_!24n&%GVchEng+;P$5Y*)Ei)-@9OFD`(Rqn!Gosc~}qy zY?)NOLFusKxu1vnR_dE?wR%&P1u%yFU{as8|K#`r&xnblGTkc5a%(P`=PQubamw;I_PKB=r$VL*&JU5Cx{D%br2nxRD^|fLu=zViw6c?`D3rt*)*04-9-Pu`0c8 za=X3Q$>38~R$ke2^sQTeu4@q%OU@;XkNU;s)WA51KJ4H zDJs^mFVG}_oB+Dava+&YLI>*-6kzZoMQN6?q+JSI44eD&`U1(jA6XbZ3ws3f-zwY+VFs)jVmh#k_CQ(u4}sIUJExTt@Q zaA(sqX8$Yp}+rUQ|4(G+x)1G1QI6~V+!`| z(8#Q;g`iliG4vhFacIcuN0h;O8cGXQ#ygMUqD1SI^Io}I!9{TTEGFj2FSf)*kMV4+Zw@!eYW4Lae$`+%3<8w(l7$vt!LeL!Z!~ z4SUX5V7zK*W+o*<%tS_R7BCsLy4{B}WuUOpxn3E};WLywTq>O4LZE5j4}ar5H*tkKR?7b*>FiiL%M^i zM_*2*-kTCbd5m567oNDc{>OL}X()OFhw)&sxSK`%V9Jjk9xTkKNb08gfmxKW3>A)c zu1H+z8r+O7U7%>wGx}uh_TJ0u@Vz#vq+Mhk;l-*lk6v~J`=2G-z>1}w(DrHP8 zOi-%q=Vcb}%re|0Ly{9UwXQJt=YxrRL=*AQQF2`T31Wc-@css23qTrCPu+P@UB{4U28pV}JV>z?#>ac} zw77(25nDZ-IiNEGRoREigy+xla+2~psBdC|gdyhXuN7oFy7Wjl$^`5{M=XGN&`lmP zb$rB8Rleq(=JVx|R&G*E&ot0ckd!L(UUF;C!QsUgTAFTPc)yIXg->BMO$ z?eS%8BC^=j^eZXz8N8_sOiGGZ<7GmWeo94$H;GrW!7F&-ktuO>67EM8ab5MmPRqkV zPu{fAYO`cZimaM`a4*tdno>aWu8XTm6+063`q{BWDTO;=mFdU<^D01yd-J(WUd5lob}Hh#_24O*=cgid?Aw zfI5Br2qaL_&1Hs$M@L>u@h;7-TMp^J;=5A7W+|%5?LvfCbTq&9{H!@3K4hbU98s@H zloAxm3UB0TDLv8Or%(0X|J==G*s)F?fyKJgTg&!z9IZ|+j^wA!lI|URYKxOL{+<;k zIPl2)=kNA6b5Z6tWB2~^Af6oxva;qZUafT8^NdbN=y=lrc8L0QhCgok*tIpj1$RwE z%NZ(WRZ}RLR8hfaZ*LFgd$}P>tMkL zMSe2JEGr933K^AX%s4<)C9;fKGjRIwWBYf96NvlQZ&5asPiGZ>YSa()I{D7vBjli$e^etqY7FJn8C>Z0nB4j82popWnaB+LqC7zg3JMrK5fl~%$dV9w>UlUU zt~G-*!@cEmM6v$nh#S92dCdi|NP_|cd>VH(k#Sa%)X+YEtQ6B~6=gnsG+O4A&w_P7 zI@pHHBR`_Afe*^fHl@|(OslclU%(G5DZv0649pQ5y?2g~B#8*w0V!c=vk>1&3T^SRhJKlu^%ecdiWuKWRZbw9HmmpqW}VO`~+ zyz4|kbNSIhw~eEb=+xIUNJ^@%3=#u?9!gHj97!H+0J>(h-A1YYv*}%7cmDJ~4SpezLI@1GR@j&z3ObPu zrw$@jr1Z*N7~i52PY%SYyVT;S%u(bKpmVRgV=ag_GoM-`iSP^IXW*!x9op-kj*4up zBdNqw$H!EnXC?~`4?=?9!qGE4sC}@p?va3v%#Ul9qh{Z- zJdLbIK0TK9FKLK3@ow2!L&3@~v3)FIzYzo1+|;-6)MRJJ8OVkYbjpUJi*%}fkD}L- zlJbX!Hak0l3-p8(SRsLIdEs~ALQ5`+*OSAT++Wy3@N>fKl)=T(EiwFZ2Gm5pV|Vu(w8ODmuGju2jf+JI9=@sLAu3*mK$qyB)P8% z48AJZ^k>sKCVOBl=h)Y#!ET1f$S2v$%L5d`6|u@{urr>rL$LVTkRH@>*Y0+>;d(Ig zzS3E4S)LLL*J*>2RBGbSpY~4nP~k;tV&Eb^+;Ws$w((bWDll9b)2(1}mtJpcuk>$u zxivo!@-opeO#$qxmUYCmmCWVP?1LT@b-VQ z&;ZqbmXBKIv#%fs;89)`>N2hP{a@K0J)cxN1{RM4p#hzV!CViqa8l7uS^kt%O{6L$OP_FyqjA4Pkh+Mpn91jjX!`Fe; z#e(*!P~_RX%o9euTeZ-Z8lYLZar?Fj%{Lh8bM4wSO3GMJC4S5k9*JG?Q4DYF^+#WJ z_!?}>tv{69%?U71#NO3w{16C#P;wQh-ZdRRzg#^$XZxoFRd?6?zGoHT!l@7dTns6ytC$>wrP-$*of0T->1vU9&&ocy!Yt4 zbG`|(ipR4HJ=Nf`HZ{$ZOAo`qt+MtO;FF%pCSd0rO(?J-j5&NfaSp)4iKGkEv8t{? z6rHsO{K;Saho%f(zrK1i|E$aLY4C;H44JEe$+2Dr&JpOw%gf5H-ZYX_RqX?gWyN_7 z$>a~RW4(qUU58A4TK^`TBSS+8E8LkPqpXKF)nS4JzdiFu&FoxwE80IJKB-dGgB5IB zZT`3FY(9BrES`4e2mPa8dxNAD@)-Fvsjs3lT`T0a8&Fy*1(N2j`X`QOo5y-0j!1eIVMRdgz8G6n8377aB%tea)*H;U$G9@jGvZI%qc^}s$Ut5}9p-AfM z>G@e`%Q}3X5Y@a+)9$?e<;#5$_Q!Mh3$Z=SAxU><8Pv1zuq}f$IPmJdPS@n5E+!l_ zit?~~c%a24q+9sI{_eV$mwn;5U8?z!1wo!9)+Lt`4c*au%ikLtUwvAv*)w~-qP+*} zuv%5~+ec0&#|!+AfR76Dd!?j@Q7AMGja66Tn6923FQYNh6kT(-CfVSi_LaLOYsoWp z1}&pb*N?P3a_SDdm=s#M_!KicI)d>}J#ba-5!Kag_YdP#)*H#4;mY5^ZqcrEEuX_L z{aIDY8ZG2ugzJTOGe+Ug%JlcvpB4P$zok*=o)j-(6#^zzrtjaU)wk@H>2kph*o>N* zpp5a89)>tq?F@R-DzrYW>DJ&TN8q2U_#wk!X$!h*#CUHLjT4byzkpp>_> z*Ca;&91hplPy9)*4a@!%?S!8&dZfJ;(}(15kmGG_S+iuNKOQbDJaUX{*OFANQozg& z+*j=tA^y!GNu2Zg7Co*18a092q9RoM0BPK;p#)@g2n&vAaXrKMH!GDR;trB(%Q)0B&TDx7H^aw@i(tuO60+;P$*6X{duJ6mrV zky9Zbm&NJ(FP7xmi|a*j@+1nzY%K(FiNiAnI_}R2Bb@i7$y~nu#OT#$)dB>t-%n!u zm3QWT`(?W%`}&-J%WuCArx971BGMc3`U8U(5G3goQcZkbdwk}&H+6FM^hxyZotvis zRzC^r+0S?R!5QaJyI%`WX z5L7k}bf^E^4{~d?`IBkh`+*C<6x?om$=S@v|J-IdwjXl7pf7b}J zA)ur5yPtB$PtdFXBKnP-ygVrh$vFao@xO2P_!bAG|2KA;ojZ%ngqsSaYx;Nw3v zAhDid3qVGEX}L_Utc2CbZ(h7FiXxYUcT9`tEeTor6%3ReI~3luo3F#dlo-`d!;Gxv z(acDCC;TL3Vgww0f~I}H>4jVgY#4w_k*}~qU=6_60TxG(WUf(@V0hubt-FZMOLC6;N^mY{M=ut8M&;m$n07rEn*Y%cfCjGfBu!mZ6?ml091EL%+uag>l;Od`ymzmk`pmC_JvomuC`o(i^hSQ`7a=*ZYSyNK?k3}G$ zHm0r=;NmJ6^VkbHVEp#z`J8WH;V_Rne-l{w|5WPx5QLF2HMKCJt*ojl`o25MFyn0Z zl9YxLeZ@uRmlRSuayNaIqeR!~?yg`9?6#MXdDSyVxvO-o`{LR7Ys zwMDuX>7-y(Ze!^5K}7_XFN@wjA3ks-5~%e{U(;_nzSuo zleRCVdZeoyQ?KI3u^H;ZEKm@F+zU?2$%zA{G`d0F{qF8d36EI1Cg3Ur1qHF9!3l@{ z_zo3}c-bF*dLSY32d2Nqx-bMc)$LAG2ZH-v(gc`lu^hkTj`ntj;Pg%dk6m9mmFCK~ zdHU~vfkP5Y%Qg1Dw<(4(Otaqx-nyE$03pR%h1Ki3XdrmX8<&$9V=oCDO~>SL11_oN z>fpeG)aym`lVm1ogiYmEgZ1y}5!bI@F>I9R2ZPY_(+s~jMt_zdHLT;iuPdW*E)TX4 z=TlU3V`BzrvCg9>X_Nvka%Wru&k-PLuoS_`6LGU(HY4awBMH(7_quZ22=};*eWg@G zzY@dKRl*NVV(|EpkZ9Q7cX#}K6^`hWXf{@6 zxfb!=Yx<3hrVSw3$EV8v4PexiG-@qJYw{QO?c346CDM^GP}sz`lyaFoyHE&y90=-`iot`1&L4 z_DUV}v+GZBhwUChvs*=ge-Uy3OA8Cz{D?7%#0UQWyL(-!YcZVBn*}RbJ&^C^M8BZz zOK<>rP;hzs*(^ix-=#;2{z=XXe&qNVR;Rm}*Xkj>4??Qksp`Z2{`d_I-T*$yS0W!O zyR@*K{_E>cwRLpb<{9y-?WO_+^j40;i}dYY|HSHB+ZJH24zA8yC0#)IftI>-00{9) zTE8dQ2{Uu~+0yi$IKe9-D=DUa-2GMs?^&{|SG!`wV6KyV)gyq;fd%(~)S*ft|Ls5_ zl-Lk8!uMdP*$v&8FCV^64W((ab8y7rrZocn#7?pAzDznHzx;P20N&!XC~oq>-lMrX z1u^gPO`|h+T*W`MFGeVv*0R(9nm95I4F}d+ZUtfce^_r4pTX_8T>O+9Kg7kC8Qx!) z-^7H`*N4#Dk0}g6&7}XmQ(2?-D%iR?%s<@z?wR`-I#>%_*RLZcBz-m%U9GLeF82u% z_lk7S0`p=ji7r+`qnH`pk^X%!9+d6|zeAU2gkF;w$eNHh}8In8^8!cbWTy zistV8{13mpeN~{-m3%pL_=5}xXvvs&k zw5Rpr1z^gxmH`^njNGunfSSTK!gD~ub z9?zYi{au(y7JaM#{`13DLl7~t{1kozlFu3Wp8RZ_weGdn&` z41sn6Xr;4*#n*yXhReJEs{^(M%r)TlfZJuGz(@_4z*d6`W|6b2YZcg!!E!7thkH6c z{9Xu`WTPVS6XZ*X!_Nft<^-NE&Q47^Lf56R@CJl^Ihb3_9MTF9z4nDOLM4?Z z?G%d~|K`Pj7^ETsfFN){inBsgW!nqj({0+F^sCTNf*9knxAg)1bc2HAO--4#R{L|* z)XCSr1(06D%VkM|8MR4CiV+YgI3YC>Q&2d+MFBU3JZq&8y!Hf>v~F-G(%y$G67u4RG0~uq-}MZ}MTmKQzMXA!vB3?~+2x;@o=gHF|pQrqicS^J5HYKt}UV zi^En64R52_CJ!iBB&^iKpX_HYT9Yv5j4nzzS6n$>-zi}eX<;v4Hb6^2UQQ0$=irhB zg$r1^wd_E#2EAdJ2?6uVz&lNK`l^s?MRhg!$tlJ2hH&4&Aimc4ws=pn&)&LK48xoY z31q-mrl`1B5Uh$p3zs9~;US!110h<#Y1zuyI3qQ+ zH(Q0F>}=fUOlTY!*QKT!0?!e;@-;O=nNXfpL*$M6*4}=dojo|U8$f)pP-2PT`#L-v z?`Cuz5>9Afs^cFZ)Hyc!fZ=kRtTL#>ASnV6cz1UuId5`NqBKkxZseV36@dKzY&<3Y z*;}x=p|J~l8=1Cv1S1EDZxTsCa|JuuN*c4XJ|%yOa?TZQzHw?ihy+5|E-TRY;0ho@ zKL$HQMjhmqa?@b;Gb}n7x_ORc42dEcZ3rn+d{%9brp$7H?K$avCNorS9`(ax@Sb$( zC(H=vgPsu3bciy(&#J|%#`q6I>QxEk+z!eNs#ytexwQOMb-Q~1@zbY=z0xRFf{}kt z1Z1H_&-#M_w%lP5fD1^K$L1}}Omrsh4a}I1jsK_cK`P#W0xX!~IKgl)$YJ$24U;v9 z`DITa7bt*SAk=>^-ll{#>LkPYs@ir8QzCz`AMYP@Bjw_3gJ*qEbq51*z>vZcIet`e zFor9eH}Bkut?2ldmjgGQ>xVpHXd!`NgL5T6uojM~JU|vA&&Rd^OY)4Er4JlSe`zkr z*#kvr|GU*^(1AJTL?H#Iie7X~3>fOS@AI%8|2pzV)Nzkt2rz+^-Uk@MXyV^WGt4qg z$--g|PKZmGaDX6gJo#Jph07rfDEn9!n1nH!t8pC+n4tRx!&>2l(Vp5?XSY9leB!DK zVpKN#hb!Cff?36)9AOj8fA9DDhZFYq$y)jf1JO2eH)0+_NME6{&xMNtE1HESw5?gL%a_;CI>W{b*&DdTmdH$C% zmMZ~)00Pnq_&+eS`azGBIS09s9LQ15To2IG*ME{W1gYuU9gpg|x+6P0?|E@x4~r(- zNshcMP>>)xBNlEsJ8V;@AqSD$H~;b1;M9nJP>6n61cj(W(a`9T8a&5{}Q`uIZ;tjI9u``*60v?`@koNJU9sC^l9A?)Iglk z6r*NgZf-SHlJhj|H;@92WuHIit?;J~fl-5;nXm#uDeK6cp)si8W0gHRr&*GCyqw;` za^kdymh0khdD!~vy+PRSfPjF(;kR$!SbzQaQEu4a2TYIr*|qXM9R3IT^dh%p;@6z#l&%TK586R$J^a+GH2z_El|G^~k|6&phw>NYVOafN{Fo~TP?uhl! zthu5HSm>x#J%V_uk)N4)8+`2qyxw8J5vT3mhw!k}PN=Ds5(T2&&o*VLSC)c1(_&{A*S#%95y5gdJOGgKXmUWP<7H>R0RGQpvxhjqdEH3k@ zV(kl8i1$5y5*WZYLLmI!k#xsIm{IIVR6!UEEU_MrA-3+HxmixcJ zM4vYTObn^gUn%$tOeFvR1||mi6NQSWswO@D15AX)7Jd+)-RQhCrtA(NBw6y!$7heO zO`Ei~s*LpYseX#5pJlKv?%~68R6d0U8$8d&pEr%jpzj7#{^qD3P85GesjgR_X9d*X zKu=F$4jlN1KNgZy2Zqab_<=jo6LWL-!`&Hf8z216h@Fe+g@X1EA6_-2u|5P2i+Z3y z*MMFP{nI=ZVEH1*;XsdnKvzBFr-~+X!J3UuMfcYSVSp%m#4ob&IgX#iaU6Um+;{F| zA<4EJYvgWzt6G-ar5+);Y%iAQVeyms1c+lDJW$)<~w3xuqpE==PsaMz2!5 zrxjFTCj7#&^9TzN1xupd4p7Nwv%oTlAeAs+)%#+#gJ$Q}38Z+RfvOcaW5CqUJA-9p zVp7plQc{99azS>Oo#&$Xm8bw=9?k#Y6UDTEPf!oCJN<8b!ik*t^_vTrWQ8749H0%b ziC|x?+z9-1E9>36BDb6~8p-IbxV~RA&lZ5wR1~v?N~f&E+aNsjjTMLd(cuB&wJEK{9R?O+2r^MQ`WKmK zJwq%YbrByQ#9xBWt0~3Bx9k)8%GRbPCmX9iKg$rG{gy6GXc+_m1rPJYFEUG+cb(#Y zX#2(DW*hQlE>ls-r6^Sv(+Z)17vC`r?>vUy*iZ_&DL(3ViivHPyp<&sF~nnrWG-f$ z92_Q&BtEc9q-6i8NTbD3&ndcSQX?XI!Jy)&{T(RiE#Sms8X6qzW!4pHa|!zN=`N5$ zCKK$Z{&o^$#)cOgKZg?QwTnr_({r~Ojf*>MiP}0S zGa--Z2t!T`tvw{QP1sf3ax zB3pJMH=^wOe%trGvX{u7vXn?DOGGNh+E@xD*(rOHUDj+_#*%exW0~jtpuXSd_Z-LX zpZhpu?lJS3&s^7ez0cSCec~ZK#ZBwsH(r&gwtdEaR2OO>fBcSjm^qx{N?1~gTBChH zb9tso^WitFiBQ(R9Xy9`BF06sXLGeOELb930^EA-yqjMC>s-J-sVM0EsT!_!SBIbm{TxQ+n?{ zwc}ZTn?f{McQ^Gtmut5y_r)i)VD?VPzs2y_NW|P7BElv)Uz-DxmL|T z!}mny77rH}myRmc*|Wx>y298*;=LCgd)6;qSb%1X#HE{Me@n;_pSz4i(I zgT9C|bX%HD+S||~TkzmmB1roEac1vf+0wdDtmufHJln?4!z1Tfov9-WZU#9SnasP3 zSnQqUafIoBq85cu%TQ+>+Fd6jBqZ!6vGS*t@|rvAgE`PA$Os4mJC5TPc4rqZC`dzt zVXsKsqx*@nBc-tGb>GgRe05t2p};dV#D3Z92_7K)MA=WJsCIE%*&B)cfbPG=JX9`& zG7_Z*wI5biM%xF=orb!=@~4W1{whJBT1w=V9fVMVn+cN^INHCO22@b!6t~}^#&C zSKqz+?&o*!ES*TQ&d*}Ugt27g+1mn&u-W!|R{}XrNDNxm6->EV^xRtzjieVXE|mb! znLJ*Syh`npPA3UX@XCscarJ_nu&J(iidSyN`v*JYF{4!H)0xZf;QfkBh2$Bb%vFs9 z&>ue{DDUBM0Q&D;I|5ue31Aj1tel+!rT@ic(I{xSyU(VlrTrea!Mpd9nNI?%^7QPe z{nccA!*`Dq2^}3h4h>@GA8%dDyhIXAvMyBakaauR+Ez|9Oz^e>#O1;B_MOFWbMr=1 zcg-?=-*mJ8{GjR}N8e`=+y2kq=WWO)t}Ow~d)LPk;`u#q=hKRPWSS~Xzi@(#N%_^u zb9B9cmgR5WRO2r8yWYl(;?SVeIV)JZ-tsd>utCADXTvh88gMrThJj}}cCUPj1buxa zAZ&}5&+NCF319nBM|B&o61mZ}#F&~#tCt0Ds6E#%oYM_bIi5D@C*p_Wtgrtr?&YB( zUT$JTVY`+gCk#0Wn-@jG>VVIm>+95D6AF={0*GHlwvp6(y~Vunl8JdC+%B1lqTY8> zc9fSm6RVU6;1HXoX;I~0k)N+EcIs;$_=U_4zcRdqO-XwPc~QW-xePF>bAI>O@W)ND ztD!qP_i=xghBl!6FBa@O55#`pSG{w!838+5ratc9FQbfqqj9dRRP6Uq0pc-0r%Bk} zS;f(b{%mU_zq}F=P2-EbVwPlmd6cTeW->j`Qe4h1zm8H)9;B&Uf#HQvltKR%73vGvlZCeeK% ze3PJXHyKNBAa_aT)B%CkBJ5_TZp_kUyIJ$is7K86hVsgXx!K2q!>2OlE#)gH7p_*^ zHHCCLl_6SXCt1?-mqJ}@Lu6)hiJfbzS)g5XGpS$h@J29B?$_o{)25sqA)#+$ ze}(`aC1_FRA1iWV*sWFY&mJ-$F_SKP~S4Zp?pYr7r{I&5l0K_`aT^5QUQ+KF3Hg-=nV2^$Aq+3jMaJ0*y2^Qu+|p>xd6Plo=XQG2`O#&A2FT4JhB*rux0V`jl+?UO>UQhO@GIe)+rPba-1VRE^7T)z7y;PtvO{uf_rJd>n%~QCu8&!2zbRZk{$mUlpN`N8 zufTLp~2ZXGh9Ve#ZO^(`Y$I()2&sE9}TgL?QG1P z>nH?~7JgW2!?T7Z6tBIgAiAAew|>e6}3E21wfRDkjOh`XLtn3l-~15%eZ}2Eg2r zP#n^MK=a+9p&?#B7<~fAb(m2^#cgJ>3Eq{tg@wE>j9zHSz^3xR>+s_k>BN?e09CDV z&D&L`V(M==qc|f^fmH4Qe+4Dl6gzc87omt^kHl8QZljm{wHoFT}j||S1t7DVJp81F@MeJ&lC#|-rmsK3dO?>$bSap8@K}tLqqC5 zCzw%WYrFa@Qu>1g45xsfJaQMt$Dz?*f95sRYcSj8D+%;+APlXB_h(HFD@ zUSO{kt!9%N33fEF$6O(Su)3{2d(?>(vIJRSJvL6x21v%7&8xDThM_L5US9r-BZmjf zVcbK--BmC*FU}9Gtq;4`!31O>Xz4*5pk?w~ zFNaQ(AU0((A}+Knpds%8v96ul*IMEr8j#*cOI6z-k7Np#siGU**?@BJEtm z#DUBPFE}!S0?8@lP{o2x$sXbp=qrg?j!Im}t&e|7F%7!QM_MK({*OZX*8YKvVd{C* zx<1(H!4gS^SOAKkcigCXW4dh+yf;seC8GUlg)FR4+Jz@G#Kk_HB-z4yH#B{h$NZY( z4V8*yv^O(J&~q0P>mM3o3|`m#7C?x)A`rzhN^Q_+eMDN5@$vS>3CYF$9gfebkw>QI7Zs??=C)P3s=`vM-iRSwGEl2$Mb>vo{ z$4PKW_JE6@MWnyM=B4XWhgPiIlg8yvB5nCO=XeS6XKlNBAu*>wC*IC0WBBLlp|Y@l zfG}cti1eByp!GdBC0&j5h#_E%Qup>z7{tEh{%9hDvGawRUE^xy8E&@-%)*X--A4`+&kW% zoaX2oDBPSVYIOBq*Lh#Ms!j^cm?qpT5jAe&YA4&6=eoh;K%e2W(kG4A=a;uPAW`zbj3!CO2Kuq z2r?bL{5?er8kdUTM9~TbtKi@n<_^FB9EAh~bR6t6>$h!A^p${_tI%Q+LLbbD63f&H zLxZ`AIKz{+QE~BeXU_u4_J|#lO0~h5nLL#f&<(ma!4J!4}Pwj!`D#eqQ7(iQ@<7k{x06cvbj z!_LLJc-;r2KrLyIPgET`as==Y{KBQ_kXgRBYgbu`1`O{K)`=>0iq3D6++!y&JO4mC zg@((TjU3KWC~pi5fsl&^ZP5)6&ko%AT*Qm0n+xq}A!TLvyu8*R;^_jM=K)&@bQI=ysWcAvDIKak1F<&4W&Ax(gDQ+a;eG@``Nbp% z9<^q*@`98wL(=)yEsZ!>KXnnh$j;ijCQka>Twdb_;nAag{rzrQ3D3i&*g)`tJ0$P~ z-BWN1pFZ*4U{_e3=6D}S1rf|Wy#n_l=#h|`4~!edQP{v`r+Hx__&hbAX)Isy zN-8Po(ebPxCi}~gTzFU->)JyuJWoopgb6`V+rP&G+7+b^*(3C>PlEU%BlM(69b;Xo z|4wO6&TN%BjYgYGP2< zerPU0?>7BpT!OK=d9&m{R?Y#zwa!K`T`2e3aR{c)_~D?< zWu0B2oZTZ%2o?RXZA%z;^(j~@>EsI;4p$No5CCF@ucNUlE-k&`;E+Gj{kj%q23G|c zFFN6pBe#hJ$~c?z5aFT>bIl!f-vBNFc{OkgRdU3M_6)}7YR7-K+EVbLUx3VXrCpxG%>lUYmw`CB5Dq}Y?g|R8lE_|Ld8)6>fWIU*06Tg`sZ;~uwK z7?9>*Vr~-2FbOL%Q4;A|1Mv7k#n;!jB;lJP>S%lC;Gozv#zB1F1E-E%nWYq7DEJ$4 zaAe(ac3<$|3|JVsDg=(1&34WO!$*;k=-k|h4BH$F?i_A*3152Q{``~&iHY50ud3{J z?|^k;S}C{tPhAKwDN>;&q^O{vnZOIi)qVaDOsNl`{NVF#y6mX|0+wos*e#LrKeXJ zQ2jDgsR4ebKAFyHzw{^1dA8yrh996rV7Z2_NJ)Vt2{^@J-bGPms{|61aW<%U184Nji<*pvLoZ8Ft0ov2R+D%&qZ#ZEgr zL!MdnhsSVMzT|4I%h470syI73-P)D=Td>wcYAc`z%n-5w7hv@Esw zFxXS1%+7Nhmq`SqhyL8C7m+S8797|o%Q|YRnpsn_(^{K~kB-|uefkP!NqqB&8AN|d zI6n4+T-Zpu1*2tS%Qt>; ziq^`2dF(OvBL#+%>QYocoj^4|^N9Rd_J_!?gevjRHoNbV7fiellICSu)R})x{Bx0I z1mZ_nVu(h_4EmF^Cx77;I;tsTk>eHt9}#1^Yyh)ekxNqUM=Ulc1Ew=}Qk@yg%0UL@4T zVWsw~&2DhQXPJQPAPaBu8ScZ%3bkln&CTGpkb(m2sE>sOLtqlS)%WWu-~^u zNIZg*4{x*#(=NuqK~phKv@?j}7u{LRN?v8GxVM~is1{{_D`HB7EC4WihHXgI6q&a) zA@v6nkuCvN6jB=@r*P?4!?*7yirBvAA71Vj>go1G(JU=uQZq8@WMmtEesaF0))#^5 zeShtj?s9}%YAdLELemgzy$f{<) z1malKY{oVrH8_aJ1FC1?iz)f9Dp{pt@J6-9V)7S%oGaI3Jk zhCUMtKZWMF28!K$l_!?Lld()w)oBfVhK7?i_ah=c6%{FuR&*}6GDxdzvq@=CIYjJE z;lud8$Mxj~P5fOH_Dx~>zXYeY6cfhzx#jE!B2nXyndDJb#k$kVkF(rDi~gY$ouHu) zSjCxUL{2N#nXr?!K=zcK7OWAtWUP6KOMF&p;_?f=NOm_284oPwQs{)gErO z*PT3|@3@tjaO+!w9D#Bh&8q70Ek>nnW!|lD&=|o(y>;-QX!WMuGu`~w)iu>};4M4& z3(1kD$z*-_^_AgJe@LHO8a{j&9MS)Ik_r6)i9Kj)}czc#J_{(XQn3{GnLrHlV6dmwo`v?`VpUHdw z##DHg`@l0;ymE9Or-G}M2~8lMd-51`VT>>(eBu=#mo8 zj`nshw-0#H-^Z7l*5||5u^!z&a$W4~d?#kE#l7&pP}9($XJpjS@u536w);#KN08^8 zzn4GTUF6R(8++qJ^HG`}Rg;(XB{7 zyx-;OcyxeeDmFO0+M6w}{Pn%Zx6wv<&MeQX?)rUi%yis$(?8AxH~pL19+zCot3E!S ztzu>3yu6U*0N4JoAC=0Vk1PAA9~^m^fb9)9L+d9YY4K-6h7n{X*pU%gUjON3SuvU4 zgN0!^zgz9&fiCWa8ct=xWoQU2@LsOdw>gA@FWgzy7c@}Z_SmjH7043?p5x=leI3T~ zC$KF0u@tCKATpszLqkJ}{k!d#$4^t^?KaJ&aJQ!+2(7cL>$Q+QMIAWGlRrQU3;Kt! zEkB4zOgzId2s^li{%b{U*h|wicm^sf_(;T`84>I!q#^(vR>u$vp)1>|is3+F^$oC|O!s=3N<8;R5MZ9v>l` z@qgK|Gluuo(&rkg7Vf;PUmc2J_%&7tG~eZwLO;f0&T46m;V790AODhtQ=z z+f`O0gh1@4`W*pV;~^Z^N!;ytpT~FLq|sZ)NRa$;GAS%oYi3@U&-7AfTifFD3?nsl zbxLHKwORi-V++&(zuM65Q){4>W~o5xT8wwS!0qYIhQw2bpq*DfNzhFA{d<7OU>D>1 z2_kpcA@^cGa_9Sv$^`GX_F9*-gZx4LCVviAMDQ<@|M}u|Z~0C`Vir?uQcTQ0z1_)h zn@#O4-E?>~Ebz55R6fhtF(_xoo=bzO`>lp7_723(Ip2Y$7&!)P!BvM^{rv*na8JYV)&%spFpB-9-$*t=brWOWJ zhmge=0Y&dieP|EC2gRqQS@TJZ8l+*;K3i?#2KW;Ox3#sa$Jb{XBazxwqzJfr z@DL_iH~`YFUEEuW5F_!Q)!L+5(EjgA4iG5XS(zAK_TI1mE<^{bZkFdhJKSmYUr?+q z7EHrWAb*Kr34o!n(1*zXOcV%6aelMOm>_6n<{)kL#fL&SQ2*X=o#0*|U?4Ntk|hRP zEGB7TH~|cr;cK#i&IM@wIop+ciIK>Y0P-6wHE7FtodJ4}Vzm&dR^-^J#88X?5D5PT z6a_yv;gaLCP~Pvbi9QNuak_n4x!iOtNQ#`CoC;kvo_~hNSvLu}TtGQbWorQp4=`NW zxV)RYdzuDVN4jRRBZJPK8BD_K#_@wtXvF>C@F8&BfbYS=0zXtcEZak10R80Q=fW!v!sD7(S zi9Ne=3Z!6NG;+B{cta1mS?lbAf8w?bGs?WH&wPn2!m@GzK;tBrT6a3g3qO0%7EFFntwF`+b z4=b(ro$~Mwh`Il-cNw|1Uuu3Mmu=rSgZ%gZ^288j366|?-}@eF?}d37GO+(Me3$;X zo^L3u#43X$L!0F$LaiS#&8NLck&pOFJrXreBz_Fxo1sXszedPBcXkh6hd&5!7I_JX zO&j@ykoS(<8UOc3M5Yx~AVke&UFxq*eP z-D`6;L(A9p-5rz{E?|$DscPE(_y1qG2={SJ_^qXFIl)ilwqJO6Tg8N7U$>XXIKVj0 zXnf2*Ja}NopoEbmw%ofdjY(N?()Z-|-$e0%H1l@5>Sh+A(X@vwN1K~EbvEg{)%Q91 z7Fd>d18Vrc8?l)*woMoutNEu-b5q>o7#^Qo@zw1?(JLcYg+4G?F)0>K2e6EUF=4Bj z?>Z}a1qF3C4_j6D=8WI`g6}Q+n5nS7S~a5beif=oVZ2_|UnkooUdD!pK=jPqsot6J z4cYhETd1CWy?|75W;s?fo(zXUab&lzerMmQo+qpK+2`GanH`;ld!2TKJ*sKx4{9va z7W2sptmy(d_3npR;VH<*44{+~+6Nzo1v;qjuwV=|_er*`2|YEBY7Efo>fyr2@g2Fl z(r|!W-FYOL>2Jq0E&n3Hg0;k*`A-#7P)BUjEu~ZzoPN;^|HT#hJEYf=m9B)OV)A}a zV|anBtCijtdnsa$k;&wRSmU4JVwKubW6ExXJEKkEpBmZcLe8$y*@Ziavdq5BH08&#TmgkC2tg;Vn) z=QROgf{TSR1)cJ$_y{Y~c#`;frn@Gez3lupPu~>$NPIZ6p6ery(QtZN-uy(UH6#?f z^Cv~o-Bp}-BB(W;-JhG|*B|iZBrJ3C;8=`4)ZrFs40|eADc&3Ks_zF=5RoJX^QfA* z8_PEijZa-qT}%;S@9saGzJFmP(<9R`DsHZi@p0VyUZ=9s?|;Rg6%TBiW92D>^5vX%=cBe#l3a3?ARFNtnc(R`^C5NRi3UyryW#i6)%y4W z5-CXTvTxWc%5f16LNzJ_{bJ2ip~l zc6&cH{`CG?8$aFOSB$DfHN#B2I^&)3VmMVxZ|F4pg3P{JaLN$HuPi81{d_POZyJux zG~Ma4!%F87&Ooht%`+yNT5bP^k5iPGbC-!&K+3}#sOH1X6?#d|2?wG{%z{0e-Asw_ znTjBb{x3m~v2=Sf9mU_E0-hORyRRE^-C5YyrDyXh;?>1r$x~^sQc}|`G-Z=vwBkxh5xNFQZgC8=<5n$O)G&n*47&@!}i~{ZT{TW&sv6Y z*05E@$nHFIy58X6W&gFah9DFtS4u|46-$=cG=du6ML@#8q{Fv)QbUDSqex*E3uBYS zXgI3qs?6$jB9Y2D-T(_B$K`Lv?-rR&!#|d2vn*TX^A<&Y`4}>-+_Gds>383b2N(a- zG@-O4@*U>)TYj(BWoWe&YdFGXRJF7+KG2<-_$S~$Cx7Jp@X#$_Qv-*|gNr$b+_HnJ zf-}r4L;5p)(}mgR-sRg3AMD>1wytMHF**CJ?2pP;7liU+3u_FdAeQsh_dgbCF$L>9 z=qf$KD{s3KpYF$y!erBtPctDI&cnt*bz<{JG4Fb!-DplxP&BuA@vBvjy2gmV)9;nO zon$?(-Dl4qweXXD5Z#<&uQk~ygqyAU%2mb6o3BrBj=gV7G2Yu;hIgen@zLM+9IME! z+q>por0<_`*P3Mm_Y$s8D`PD|Gac4FbVl~+*X@aG!^iOV*pzZU)YmjVS# ziMUqcVNymzfgH6tnTv!JS5Pg9inMRvzMb9tu@w8nZL}uyQ7Qh3yD)+g`Q{FRfQsq$ ztyFnsqDwky_XtF$-cp2nd|boh8#T=LAHHU5{yT7hIkrWg_>+{;#SQPUT~SI)9Hmd& zhZ4tMRWom%G)*;Ko}ZLt9opV% zX;LiY1Z+s~ZRx~>MaER!EFAIuKv-fwd7lQ;yz`uJNtEu4R=;#e^2J=l;8evm~UxE#u{TINcCNh zxzB**0-;9>H-+Z5Qtr@iXQ59oD?+p^T{vr1x#I|#&3tHiW4=|^H=6O*AbC1@oCtDv zRqTeEP)itrlB85WyNx+Cv*{+3asLPm(`m{kHh=B7;eAu3uagPWKJ%f-&E(G=(%mX} zwoS4uiMuPs? z>m1n1M{%V%&&6*4{Zl8rG;uH{v|tkv^hq${x&x~c)w&J;XO`d*Q@Kt*Hum~R4v~qL z#|+$Rzf$G2U9}YwgK5S1v=crh5I4$MVp&cx$qUV`-iq%0F?&DC?o(XKBfP&k`gO&! zR*m-e3dW)fe;1uH#|AmHF{UxKE#1Kku6*h}^!d9E-h(M(Y8uxyC;J(7d$SZna%v@eRwYwbx{PO)Z3D%tHj@CxsnC~M1!Wp=_7H6v`yEh4o8;^B*D4Ik%hxoe|u z7kQBz&`Owo^UdDudaK?zo%jN$rQV)sHNF1Y;eTxJ8Ji*<3ZDIyla0{N1hU6k3REH^3cvkjgC+@* zg>O8sp0~R(+PlD&;Fwt@Pd?F?=n+<=O=b7J%zDl-%QZezcaE$6Ah-->yW2Dln9@iuV=4Lm#jID#PqPh2IAa zlN$E78+~PwjOmwY$0%kJeg(egKOOzc7p9eMrq@4da^V8*1zR6 zcNv*R@y&~`+utI5V6TegqxPE`eM?N2?boMSgp`yFPAf)k5Gof_@uDo&=;BCfe!Vq1 z9kX;_On6R|@n>>GSEmI1k9Sp1jY&_p!`V$SEGpXNgAm_$_+nV8{@19y@Z)0OS1N7} z_*D#nfM31n>ETyXB>LB06#R;%AP>L(yYSy<{$2R*Gyg6;|IEJ&|9u87?3-Jks#zV* zkH2rwm>^(-OU}Q!HTQUTTlDPMX0ba_Tucm^_w23Aoe)aVx>a`p_fw(qa=G`N(d=@s zrs`a^KQk~fVG9@-7zlNupM&;SILIa=)^?w0|&(y`CndirfKTy>j&+= zVmEsuDe!u{wEZLNgah`@%8;DatMO7Z72$NLU@^t1YCETbYw%byA@Z@DSJOE8`1Go6 zm*MMZXlUZO%{<7NnRBz0l9}@D=30USiP_U!&hOcax{Psyf0r^FI~h;Hd1Ww1Gfu?S z*=#xSfdjlc{HTz;dF^xK_TA6ZU*F2bvg_8~=j0SKo~d({RD_q8i)K5Su&l4DuGZ4h zYV@OK;OE!8<+!)@Y@+;iiAj%c%EODe=+#qD<&~A$eUIb8qY%nQ zBCDP*n2&wAD%W>FGNQs)Y}&Ijlsh#!*?Wp?4#?N3QZXx>sdeJAo|o3vo(Q_l^^xV7 z^<<^h#!Nl2H$21NKRu$+OlsJH+lxIjRW>F@rziU}u17l!9K}UN+0SeCqL?)#eoj3*TU#E&mh^`m|?g0Z82G?oV2mD4yJyD&^5- z6BCnSfn!PB6#}{IgiJe!e@x~_a-L$A4CQM0jwm~}hts9q%sd_)7KaFw4lp=9K5V3P zKRwJ6(nE#$eVeal(y82pYrQYey9wK^L}nZ9uTRBD#*!%L6zMm--Cw^W?5r9oajRfn z+Fz&2+KjJQWQD#!J%3!!{lspu`_7i|4!rlyz922FgsQi(;k`5$jQwO+M?Mhjl=wHL&ya}_xAQqw-*9yIWYdrJ;6h#*FB$Romu-eDl(aX4hk@`{MfN7mhK(lNQt2ckeD_P>Q%P$_9`OrqB?$76cie9PN%P zOlHbO=bxq0(SM8^DKZf6a&~lF+9<29uRjnwfyan(-Cc>Q^sRT^T@kSP<=1iyd$01H zdH{vWP~^s{$;8=R9Z_0y45OC(^*x?JWRh{AHI?E#f^R@NBAy@aEDvPLU(v*R7`D8& zX8uG&P@tE#-`Ln#Oj%2w#W*vZiC%GO!{08BVO_N1^@O^6SaLF@af$JFrc1pLKJjsJ z)R>eKsI;zFE;&6i&u1mZ{%@zg8jAYI*^wa$;M1IXFd50p)am??;CrpQZWw~UYk>Egv>B_^$TSy@?boesap>83(X zHSCp6QT~Yjv^x*%rFk|cDwK?vgv0mNrylUDp~ki;->lBJR{eWLjK?A592^{vMAzr% zxgl1I4O;_DB3}-DrgQz9ZGrspf0cr=Ld0$EkzW-b7|dzA=EDb9HfX-dTG8u1q$H zDb2bogp98M*5creXX8Rg)ap$A*=My}o#)S+(>2rFJP(WWeWA35Mz+RsnRG<6vkOmN zN&KekSDJBYX)ALv=Eg4x2?^DFEkfqT8K@RqJ^l5aEHcuaj%91__e6F!VJEuRrV6X1VjDfbavG7qZ0RnpO{;Wod4-n|DV3||JbXJH|mv@m7xYFk$#_Vj|i)C z+@kIwM}L^Vp$hgrTRDBP`}v!njlnezddO<`vqI5RM<`WaQpJ56dxhN1u26>GZ^IOz zhX=*r7P6Q`I0iSqJK$ji@1fI zwn;gSjpPvsXuom%r?&-dy;QjK5Vt>&aCn$-D8wFAQ^?E~UA<0paCrE<){%o^Rmko5 z0CsbKZOrCy`$gD5wcYB`?rO529n*VKDQMgXvR@rhZLwU$sB8m{s~829)(hB5M&le- z1v*uAfAvBrgyRnAiN5o@9Bfu-5E2qDtggljzqL2}(4Q%{I6Hf@A|LgV5dAcx_v=pu z=Ni4WNfnM;DU}E=Zc2ROLEw?`ns>YFRNLMo7}PG*{R&BL30Iml>fxltL*ua1-M51kih?)UFp<)&G)mG%gRKj@o69zL_U zHJS^H46%rN{d$vmAQ5XvGG#OFw0K_C+=O z$;DuTc>EWaE?r_$&-245eLca;$*I!nZAw9{KUnK_;+%QGp~2(o5s$uJ(T88ZehFC5 zFHKZzl)W06CnLlOEWQY(oV(bdwwC@SAIGPhr&-(R7oiE+2{DEuN$A$IHu0!D)m=0o$Dj($xS!oQq^GBEL#bp;O-+SS zJg{f!-{f9tFt4zfB4XEN`Jk>$;w&}Z+ubiA*20{Kx<#10A z-l1twN4~Kq&s~#m?=EtgbbGxDt9LoHKB*bt;60DM5K06Wy`m?5H`KCW(@*lT)Z60X z;v9jJQc_aT8i`{MB7G8W(#fvDs_(6hNl#2n(6}G%EKAdP4fzv9$={Iu$l^bSL&m#= zg~us=sf4;7`gCK5%I&S#3tt|Sejc{^4G9yfS8o1{5Rp6h?oI8B&W~-B97wNle>L^2 zfBV1sK<)27N?G~Cfv^=RcX9WW*~LqGTd09Jo>vmx-`-!&G)cMQ^yinP+u7+!*t1-9 z)(QcADTJ?=S4>#*`H{MYRm=P_crX}@A0yDE|ZYLLQ80&L(kdd0m{6f-K4r; zhKcFx=ZAIvh|_+4mAuyTJsfe4JErV)hRpe~nnD6}m=xZZ!btcm5*$NF%`}~0`D47Z z02;F=DJdq42=}KY!OoA4jro&40qi=~hMECPn))VD&<+Z-x1_GFZkkZq8*Odv`CF`7 zsxN&)$v-pc)>dX?s}s$1u0$$xa5Oqx83t4mxrb%_doU+L76-DWq@toV&)ZwF-t9y} z^$rP1c8P2dP6|3yhWPDSZg8px1QFnTAQvEd&Z=af#bq`5u-0*BNjdTDpqLpI71j2J zDHI}Sz|xt{fVt9ko<2v-q^73M^tVMYC^hac_9TyJqVWOp1DkFwqgy$u;`vQ6M60`z zkp8zKsFZD#KRn`3PNH{L`S4xwdngs;52nq;OlQ3ontXdqx+Uae?vD-F)aJhW3k63h zZfA9Qz{KenKz?+&W#D!3#8i+!=Kygry(lyrqNnHP0EUt3ZwA*40Cz(F0nMlAKlxu% zfNGCMTmPx~Ay=+mRTz2~931=+nH{_sh5jtyM8p5}+qxwJq1T zn{<(EY;L|m?=bqW7D&Ar8DYuyJNnhm-v~Z$3YYxP*E#>ZdJ^s(L1CL;9u1z4zsHp^ za_^)$|9m}xYcckPy+x3R=)CxwA;Ui@xEyYO#l2H~`}XaH@9~8$hXJ=ajoKpb4fJO| zV#=NG(MyquFy>SBMQ8FUEMDsf`Pp$g^1`Q)R4$wv5dFJ z2i_#iBbq_~9!h4MXR9|gX~uOQkfYo}Y*G>;w92UcWro8B?juy~s}YXKJnfOgz2C&t zk5$&fXiREsm({WqJ>kJqle!b%`nfo9gh|Qh%`5}VyTfT@D}j1_o;I=DfGNqy;sM0` zN$5juSs=ZtM2~x|r>cMZ;w9&3m9=Eb?L#_uM&+hFWx1=5BQNBBYMt@;1BLI-{tPk8 z)0R59=p+?I#{-27PtSdmu9&{@@lP6s7x(sX+t^hyVzMQ4?LRHG!eGzngSbh06Fu(=G*j?1^xNSfR(VFfLuuLOUb{7MO6#6Nj zNw`a^#?k$k^h0 z`bnNu>o{BQhMDSU{n`DD!slXyAU{K!Jod!G~N6K=-Agk`)fHs7n^aTIEPvTAiU zC$}Xyp40{R)$Yo7P1oT(NorA+H74V)wJy7qBVwfSAJ>i3N9WtQnpxK3*`5oQrW&@c z`{lFiR7#%b-R+APFG7n7GX??S(&fvLkh6{)93EN+c&R2QN5R{_zB~N+_0-7u?U_fH zLcD#aoNlcngUzolMaA9F5WmXcOEiy9Sy-bMZI^m+mgSWPTX4+@dw?BqPc3h zYOn_op5l&%EeCgPel|vh&W;u%7U(8QtvpG+lOzWN?`vr>^_UHH5H53>P>12-)%zb2 zOzGAg`zmrI%0eAW7WtY}nTmr$^Dvq7#op#mLz{&!V8A}NKa+uG`Cu8RKg!Pac2p%}t_u4DicFR9w~@70@s_Yy;`18&{hn{po= zi_)pFk5{cT8&L0ms&OPxVIfR;U%%2*e1VA7?FN>np;>I1xUa=gvn|sj4u}12=@dFl z+ysf)<3qB=ZpkeTc_=tCO&~6${v@G{@Ciy5b?+{bMlkfob2K&m3%e^r%&d*;6BX?4fUOyl9}(l@KM+)3oviY8eCC^z^X%{5 zbN)+LsA#=o9RWu=Y)lVnlF%K}7{>7*#_$Ur8@Gl`<*Mf^=fymqs_u4kyN+_Tg!~Uj z%9E3jI38^N)XcYD=pYmo6-|L#<%ale=G0H0m3N{W-qqlBsA8 zKzMf5q#;x=c{f`TB@AEC+D!&<>_@|WBeAa-8;WxD(~waC3bCAI%QlMz@i7_6{8rpOxxhI-myowb8E@Q$B6S3&f&!i0gfVg6iV4i^&X+ zeiIN>K;1=7=~S5)VL?re)pz~xeca`Pa-9C~J~7Tx6upL+sXe^W@M>>O0KZ!?j$1t4 zUs#wS1K2$`cVl+}Et5od9FKMpTYm&Y&&`3nXMt#pF^js($!XmjKnUWbcG=4zkRJ!H z`+9pP@>@}(n=B2t6}i02x=v)~3-v8V9(i*7A`JiAT)zUTs6#*2&Agth%n>Sxia!|4 zVFs-Dgr@_b(`|t)B|Y!>)nU6|g)z|Z5g#-Pb$8dN$WHq9XWT*W1Mb=aL=O`aGdE8q z`$;OG&{oZo7Ni$_h^Ift$H2tLJHQIBx1EImX4%JVa}|#)zgGMMXsrny=&Fl$DpGX~+A^di7eK^meiU zm`M(i^FEaB$9-*WrhRFW{VMafSTvtxq^ce4p8VaHp0oVb6$^xQH;^hAyU&W|1Z1BK z5ZU~9Y8*CzL=9J1&VaZ=N=9ar2iyaVGG)r>-2lHIZZD+%oT_mE(k0f^rt`(`6r_PVtFU0>;z3CT&}zRi z!`6_7qXVON7QzrgKY#udI)U%%$_)%vHJt?@HkhwH(%!xdBpQEuFz0Dll|hrwQuL+M zo_g0T#l#e;R1<<->Y$GwJ8Xo6ghJg8HmUkS5fwl2vp73iWluy3M%^Ie?HU|Zo$U4T zAxMD-bDTx_SJ^Dqz4>{m$CZ?0YbY1begpR!&R510d+ER2ZpV?uh79x`oKd8Qtie!U zWoqa#;2pg8$}MM3!FhP5sfm^hdkp{_grYO)Mu20f-Rf}Bue@g^D5mYKf*l)>-+Z~L z*Fx?*_|+NRGdWqSnxlel&>(MwczRyG31#7XEY~8aD8vu~rKWw5CEKVh0z^+j)dh{f zgL_3#X;V^uXvWGfVm9=v=BiK0Mtw#_`$UnN-3N9jC19;NReLC}>sh#Adx(WVW5_KH zc%W^N@@diJYymV>w|z<=_yUfbDXP;$Lu$?dSr!Mflwif7^?k0X`TLPo8|Vi;k9i^ySS4onTyvypa4O#poAnS&PzYc5sllj^k!DJ5pl3d1J z8zYvc2?|1Qe)vs)#cT& zNlCdQ0cd`qJ>7pufu+Sf<^kVB_pt8kX_+GqZSF*QNMxpri5+W%3Qg2Dw7+C3aUbvx zWY7hchm$kB#WM{}3+E`WpdhSQMhcSwkHp44gS|)NR}zI> zihMOIM%w3VRRvV&4HY~W1qMVekcTow9npiDWD6Azw(CRbzup_*5~lmbi030T+k9XZ z{VO8{!i_3&op~T%Nt7|BoaL9GpNxa&^*9qi;cT5FPO`sg?yus|ARvSRj$vPfkJA zm^4JA-2@kWWIGB#Q<^)zsN77ibWMWQ%ZmqVHm#1P>`2L5mz8hKM~N>X2iEB#BoQ|;Yrb9DC7-FXC9OB zCEYy$b(uh12;hyyudb`;0OX)*??cVjOe_za5R^A+{`tkqV>+9i{g}&yZEdvp?Nl|+ z!W>T17hc{fC}Ya`TCCZs?I;!KNrm;M#QV_c>rPi(j}PwkYkm4;eEv;QE?2g)aXy3f zbJf2ydZQ1`ozH+mK|eVL3BJ}&K0M0*?7F=Y6)mAS?Q+b)ukR*mpH+P=+>dfLGGw@H zNX_5iA>fikQXpf*tq zZ$bOhV;msX_&>9i&or#(+mboRNDlr+G4EGczyiqtGXKb~w>Yngw+u*dNt2h+lsT?*AJqa zT5odu_5ThhfP>#5CvRr5S;V+|flx`m{m+7#!7P=yl-$PWwc&gRZ|tb?Qmcs~gXplZ zz9IudZeEqlt+SJ^WkwD7AfLaC;kQa_PzW6~L0S>>(bBr?uj6}eO!7NzTN}-bhe<8n z^N@@5%9`5@!QD06TPwW$?&vT3z_j#k%b%|U=&1FCvhN)GNg;l^-d(Tb#TD@ zJYahcjL&|4Fjs>eY$uSmdpE%k2^~m({K4(y2xQWRp&>$^$ts)H9|52cdrO#fCoC^4 zcz=TgKSUz#2-@D~_efS3&eDt>6`h}(t z;90;X1`27MMd<#5c7I8Vi-vd1ds64D}LHtUsS{9S9X)GRlgP7bWDzNU1L{xk%bsHtdE<&Q0QDvCg2?Swyq9pvHR z5h>3yro0Iz1(@l3%L7?55%l-BJg#2f(SS~~dYK2>Hyas_kzV!_s`-tXvt12ps3;#_ za=|~Q$gR&SwN8Hk@yi{B5rX1o;{qC6sOk%31KbTirqM%7{ust4Bq~5Xm8gB-e(FMp z0H+f#aB^~z=%f|A#87ttgojK_^cWyXfTl{k3zD6cP>2Cqa14+3f1jWKy3XZLq8jb} zx$&5`!Xi8j26gw0&pGJRlE!lPh~8F%C#GM?a~&O9UazI$j*bp!z+Ke%8b?W*Okiog zH8h+9Id!!nIO7>Gf07n7WnEUdkqWlb(edFQaB+9{_dmE5_Oc`UGGrp|*Fe{C7 z)iC9d=G>1~^pZ@=vzUYW^c}=lPs`~_hmE9en@($dnZWE@tBoPsq_*lV0AeBdw?_1Z z>reK`st3W(A=L?Rp06+Jhnub_ouv?!ljj!i#Q+1_?&)xBY=1Am&=cmVqXV(-Vc-o z(VTK7<{fbVTrl{Qr&R{QQ3mEhNJz+6=UwN`9~XNVVJ&1JEbd#i1l@L67b2a@ZrLX6 zN$~e_h2B;e!>XL78pSj;^q5`b&5w+o?G-=231j2iQXeQDpOg0RmkN1SHw+J@@mA7F zJ2h@#j|WIrS&w~dh`IZg10(WisTtthjJqCwzSuB8klzQb-~|9BFzZY6K8T7G`Mba24x=807veNKNm`ER)o%}J*3HK8 z=(&F$sdb8Pk1+8!12K{#M3)6aPpjUIVgC2pS|dX_5M#p&vXJoc_qQVNJw+AzKOD|` z29P*k?-V>Ms5Xrr2NO9@8O-$O=;S_K)!FYo$*$>#Le)OgB~BQg=!i!-?e45q`*zIukxNcSJwHPeTn2yscM` zh=`rdf{%TH1lZ}v;G!MAMav!}Fr-w@O&X3ntJaV9e7eAyr}_f`1WA;r5AZoN6C74L z*~s3U$7aWK?u0&kNgReg=$=?yQi8Dj{e*NH^w|fD9Q*ikRG ze9oC|Y5zg%O~EFzz?y;CpRY5224^zrxSL-CW%&0}^W%^N0RDX)QDo<05eXI!j`t?- z>+y^TP!k;u4Gql_Fs>~P_xD>vAggqHV&cIPGU$GOr#aT$%?7>!M#YOa$A)m%1$uST zY0W2qAQLqVU_8N)gFs9r$lr3R`fB_4Bw_8O<;6wJXQao!dx0AhTwD!u-GQ->`3-2! z-{bjU?g`vvjj=SBW5cNb-t59jh51?#@lqAmye78W9)M%-Hj0i?HRXEPEP z07QXyMS;reS=>JWABOmtg5C2tYl|mQvQ1>yqiO6Z1*~ZcFQ5BQ8PW((``_d3j|uah zqW-k9p`L0TXaf*~$Xm7)dvU%> zuCA`<3sni8Z2to(w6%8rY7GEA*VfjMf}x0n#6;-I0s#!# zN7k41T_^4p0e_b_v-bUXZE3wXlZ9qf3{;MZBpU9j`gJ6^X0pi+d+DhUe8sO@MAX zYn8Is4d3=hg~S-m0v@fYuAaRS@L*^g!O#y=8u^e?Fr5Gwf?GvCm!ni3z3@Tw)Ncn+ zkVG-e2!l1arr;1N{5epxd4)R}Ntag3%{GB^{L)7}yC5 z)w@L{Y}AII7;*}f0H3UX38(KGJl%l)#LjEq5E7mylyqQOBrDYh6o)tg} z>1eQKxw*OT-bK%sVBVX3Bte~|Ax8Px2pP5x10F)W{buoX{*qZAM2MH6XMX0>Y(^bv zYmC!mep)Hb2Z7PAIz^s_CLNl_>P(`#XwtUlWgM)g*E4l@!YH@3D=hN+8~GD#GwJ<# z<&%U2AgrKi@j8xZWq^DB-WIL>`RF5scH8&9)Y`2QiKyxCLB48Uf50}BU`mQso4?Z& z-Tl%Y%f&D(8JR+Tf#doXSiX;p0{*&T)Cfs1^dtB@fV$Akw605LG#XfI)7z3F$IMxsvif>g1?gotDF?|@1(#k%`$mNzP zZGiDI+@=6FMbQoJw`nN4Q(Rb0Ad!0qNi4R?21s^PtUF z)co~p$f?XEtvXh(JCL(G`};FxuQY(jNp2L*@VX*^s$YNg=&iKj#vqvvjGGmYh&6@# zpJz>E+{<1RweDk`Ov71{4_T-F*{V6=rd+cEVd;a7=X)aanuOal^a*KKRv&65OGH5L zBj7t?yIHOV=m-db|He&N@Y47Eyu9)9*UU+tQ}yodFk&9|tk%)0E1=aRgKYzhFkD>R zw&K!KauJux1MJt}${jIN2v}!8yFwzc==E`xn?Oztymjvq8QREj$z%}Lq5K!oa+8CFM*KTy3)Isw$bsN@lAV`_ef@(a{w(lL&T$fhM#HX}{CIN%++{$3nNl-dEN;oSnKZw~AqCNa$F@JQ)bVvI2m0 zzQO?MP4KjCo#gcAlJ(ZY2-%5?=j#X$THB7LDsJ9`zVyeS1qKZb@9s-y7VSM=tlTrLMx%YLGI}sbJyZhO}xcc9{--ek6fO&2iLr>pkP(R;V4*Dc+vzwvIpj&Sa3dC!-+15NEd0MmEU>4xqEc~ZL|4&o|0HzFa^JXJL z3c+AAyBWoL?qDM2h3r-a=WTvWOEg{gqaSYgFSfeY4G&4m^ODw$w&RuGzfmizG?*r; zfj|KhdI5Sd3_O|$5(OOP!LB#cJ)q36qJ^J6rZ{qsSU zb9QpFg98X)K|xP|nakL={jDu4TU%}}E@tg=^bDt@F(3vI0ciTcwz9RhzPSvB`%vDq zfx$ua_&ab9>OY`Z!C0TfkL$a#d}(mvMZ~P1HcZ5JDYUqF3-GiPT^|bIAAb0eLY@Th z>)@aum}@TvqZT5&>681}3E#H+;R3O3AcUuf>*`<*4K`FIm>kv4=)2u8DGj!6dq>A- z;GHnaIu7(48h_X!JTcJ4As7dT^9JA~RumUM0t1TAN*;uayD#5)a@4#WV$zl2=5TM8 zz>*oDU++!zl-8?tR1TtHW_5*=5FpHy7`3M%(S{pL1GhFb`~>RT9{`v?8(Z)(3vO$m zRV@A$8UhLmHp0%xdl7|&?1i-dn1dN&A5KAJ04wr4Ai2ZWe|ma~pAYA4An?K1snv!Y zU)#VFJ>HyeN6f>Bo&nM7$0Iz6Q7BH2enHkYYdvuUjRU}27qkDr{oK+3hxQ#W6cW8F zg+K@o`Hqy?tH9G2mIMiEFWlc-o!~EZ3&>rOw-DgyY1ZYV+dZNgwFdU;`)B;|8aMy( zhkF00q)`ulm_c~YzYC}V%AZ8&5wtaEE~#5+YxQ9fZd%uES1=bh{19-PN zuUz%=hm$~;=Ni9cQ^5{{G;{N3+1Ibamli-^u7A6an+voG^RSIv)U9?DJzNds6zs(Y zcntvfUZI1Q$V@$s1{5KaYSEW3ve9gbnVFf63D^`sEGfn<4Gey+uD$|hYGUGh48U~0 zBkDRG*!43|9SvsD2LhN>v0{5)f+LV&k_tR!VSe6AwuliVT}|RxEWhG>0Bkfqa1`Pf zypYrFOc4Z3UR)YE1C#N9nI2A=<+Y<=bN?P6a(Rpcm2M{%b~`4KmAZ6s3%qfOU%q&h zKa@|LPmlj7k4dNQN69c7Ubs!ntS(O{@o(YGkz``ww_)e~i*KO6Qkb4T$UlOK zo(*(N(9AQ6M!UN$P<{l|^hAY^)D91Tm7tjhqSe#q5eTzDcAyWt!WpWZ3-EC?LrVD3 zquA-Ge+SJ+NdM6z#MwT|&(qFB9|%jhy+Ym&tQmp<^`P9v#RZ%|B10MY1A4fW{~p}o z|1i)gvr8Yc<&WM45JRVbEaCo__sw3Jhb#j0C|T(6s)zi5fWQ|$ zx`B;7dpq+#L!$g)9zQ@;ffBHPHSL~ib}!%%M?v%eDViH9X51xNA>6nKY4HXyY&MkP ze|!;<05Fo2eAO5h<7t+nq?nM-ciR;?K8r~bGmahhQ~F%)RwT7o1{EUxsgyhnbg9A6 zf|)+~90F{oqX0sVc2tD*35B+CkmzFiI68eyv z7wtV9Qf?Bt*(m7BXpe~mP4t=J()KA7`0R<2(wrAACJ@V9z$Y&`r>Fc?1ak;&+A@$1 zZ~6hx-&%nIx{#|(^+@XTk_MkYADjI@kKM|6|D)SzM*NRqKgEMDJO4qy-G8X|IafV@ zxvC~K-4-c^;mGiEd6%_O4(O5vFi@gEF$fd+>@pFmd78!I*r`B{?x^6R)fs^`ShZPx zeJ@&k^az|0(lo|%2z?54s~ctlxMNBB?#qtkYFOT+qGkQLz8-RR0t$i^`F*k3L=XW{ zjVP#Ul4i%+b$7io=sY|`$~|5&+6ubAwfa%UIU3PY{ux9(nJ8Bf@YC?ASejHA8@tI zM5?B?b~+tIZm6I7u@f|Kc^pih|7B@!3+k{yS4^gT8_5`}c6Qe}1Pz-WH3rZz)iF=^x0OxxPSg?r4}9n6ndR($L2q zK!=9Y6#N^rie<;Pxd}8;*XhS}yF^b9X!-%)6EwpF-1{+LOthi?R@Qyvy}eKD**HIZc%dJNh02=8 zsF;wG*YuNi6!jEX3r>;g1Lc~rXyhRc9q;lo5cqate?>}HwthGyraGfQh*+(7w#?7? zJ0-*)N}YH1^$u=M&hc8OlG7=(-IBYa8NKiBPXgj2IHalv!pOuL)RdVvNZaQFVVMO} z5t~06FgCQ96KQtOcN=1{F$>$OmE@H{Yi8UWu}e^j&o!Abpwv?5l)8D*HL5_TONFl8t61_5 zB2W_Mr;s*K{hy2}MByy|=lSdWn@gk_J&SHwMcprMDM=~uYR)55Y((6+fnNGkjLz2KpS; zI*zPsFAz5zdtI2#Y%qt&g45P)c2~B$bx)vcY0PnNT7ZEbKiRU=1*4woJm8(T~eT=12eoG(--yv%nnGw*PlBFS?B zgIvFjg?J@&UGM?P&70KSU!W#{#g`Y5V7XkxCn>X>af2gU_n!coFDh{Kk*pOc1RL;y{o0e2TJU~-B;H@T8ftHA zdrPmgT|+|iUL7VJ+k94PO5o!8>sk)DG?x$Wg8`fmnfZvF`rXoKae96I8H6ADtm%=} zNqPG{u*65N8nkN0R;uS~jS`jma)!9We&guO8JDpi`gzpd9pjkGfsv{IG%ZfHeXpbQ&E%oyl8OvadKAo!K}w&+SiEV zjC3s!1eQrT#50q!N4di+T5<|UUIBbf3Gh>G1ECCBHRvz>7FC$@2vZY|_K!pm7LucHPF{8+S4+xv~F zO&I)qSx47M9QK-tot|}9>q8jd{{qo7c(dB&i=kqSq{mqUcX2AmxZ<;~Xl%1{$Cy#I zXC3zW5H|7`OuMlwhJhJk|F346ib2pERx8E+SWtEp+xIyEVpA7Lukxkz%wc$W@jiht zVQ+-ny7(4m|1l`;GIT+`*5UN-?}v^!&^e$wzn$YaHw}`VzcUm;(x{t#zA>Ejy=HtR zlnhY(V2p@}y?(7**L7Im18flAr_yd%xER3fE~YO6z#Ms2t-4ieDN5e*w|LUV!>#)n+CH>;6e;E|JRilXe;tqp!olfzo0xntLk$Q4(l3V^&TeTC@?>Iusgb{o=! z>y&i6X>WG+r@YvTXJWozd3|P&qC1HC?%xvLSGjbnzH&E`ia%><4vF#LoX)cR;!CrW z!Mwk66Hfw;F1TKz7**ryO47=2qMI3krs>7dAy;9^cm|6?@g0Y7C(n`mAuX*N46f^%I_Z+E4)R#o-rwACCCO%s`@_oCdDFqGOQ3$r%FU2%l(;vX3hGI=6iff|Zy4f+LIjAol%oO$U|$t3T9k@6Mka9ZxS(#g=f#UWMbZlJ8~y9;Z0PF=ks&m#gz$TF@Rpni^pN3%|J4J zTKd&`;cmNn)Ig;p#qpC`-J8!g49!A^voq7BhHrQ{nAy=eo-ZOBy1df)^HLP`+|bjo z-a@mxmW@>GN*5eqg!V+v>s|N8tH-uSuxqX1Ug;Jjh9y@0kv1%Kh~-aU&+7faOmICc zud_tD^i3vR&r*M%-V%j*C5B!6FeJ}(vmoxT07mJY&;+{K#h1RyRLhSGvYz{~$QM{! zp)aCS45@Q+7gPR}zmR$3QC9i`EIO#_J>9&-`vH42`AmS6iarl3Q`l?YeEj&aHaA}! zgVt2blpwcAx?#y_%@R=q&60$h0$4f`(^aKD^>xX)b%lspWUwEg|CjD~ro87E1i!4R zW*i>s2gL(kj{Oa0Mn(WgoR%uZ$hm(e>~B3ivA#A=__MWf&2%u-H%~2zM{^w1((a4> zG$tLA&eyonLN{;9&6HTqTz8X$N)n*?#pp3v)%YH{?11B}k|rPo+jgsZwjg+WO42O3 zuM7QkSuoH=ZnA`6`x=i^%{>!=$`roczCNXl^!Stf)n`vHRX);7lc4l-DQ)zAf_n1c z=Ik1GG2=qop=?vAFM{IKo32?S_pt9~erAH@_P61ZK1lbnSm;Q8FU9^hV)xIdZlm2l zD_mPWnnmu0X~nIB+2>db2Zmy>&*E_L3aZ*an-k z#`}iX@O_8I!k&bjV*Z^(w|G$tZm1=JrP}N!ivwAJAS0xs$WH@S1z=}^l@TCZ^@h-f zsO!q#d%kz(I6e5>6*7R17zAz(pt+BRB}ySE5Vs9M=?+mG?Xf~KA>>=FPv?8=z*w&6 zggblDFxU;-V1myc`s7+uyt&dxoi6{U(dJ36AW|!dX|r{IRmQ}k93ZplR-29aLP`Yz zirBX;MrLQyHUiOTP5llJQW^d5@(tPwIFM0%eLDV@NM?A&si8vFWC zKq}|W6hU3;qJs?|!4Ma-nOLr+c;D>()=BD|W3Dr6KeupMQ<%R;*DT1v3R7lR@gTR` za4E8%EiCnpmd`2b)#}6ZsN$6jiy(6Jwzid-aBs>(B${;Zw;x`Gh3!XHo%MdH7l*{< zZ!cS;)n%VUe|OArf+0;v^X*69I$je=Zd^t;_IooH)@&l`J>&m1Z5@+}T*mjw z&SYm&9X}ap##VjDC0-CS%L|BSpn>S#TBKlTwPLl`uk&)3`F^~+vQRKE!ZdU_Q#R)5 z^rEg0g1O-S2<=CT_|R|J9VbEzxK0->_`c8gQ=wWWUd(RwrRz2~V;(hntPM!3ko)wA zTLpahC4u5+YwqrN>w3xtA4+>kq&(YjTeg~v9g)uhK5!EkwIZt`H`m-Nqx4DEU+VOC;ITwaIz)Y;LI0B#3b1jOWI!V)p z$cLESY(?_|KrQhu{J;z9Z8oqos{kp3R-%e8hh7W7)Cfahxyyj@;)!Euzt^r1_~y;f zz<}y|36se}uqOat4r(Ms5!6!kS&)9Qz1139@g(!tA$}qpj6Q}21{QW}xQ181sH{h- zo)!YyHjrlbyOL<7`Squ7Y>iRETXY`$D3p076^}E&5P05fLPPNBqJ)h3DL{+E+`*Ib z()%jVAAwk~vV`hu3<|KEUd$@4tU+C2W7D`aL{mh3P(3S_SA4-U1%P5`_&ldtqCy^L z>1u~r+WiOKU4HAEZcSnQo$9~+&R4p2A1`+4o_;l(V&9V!L>DaHww^4l%m}Ptpv3Ht z-yDO+~Ah{lH=dmwTBYtf-h3;_zbM)&I-$_=V_zf$cG>s zPS@Z!5!_(6qOmx_+LY<+ zNc~`Gu$qN7?dy`byn7y+I5J?Z1aiHkaRt>HT~dU>ynMknk(~=n=mA%`4M7D51VzHRHj#1NPd3gcY;Q zHEGRC--y+WY*_>^A(-MI#8;xh5gzCoCP2*d>f~KuVHwU)L|~25+5~F%UtU{>S@-EI z@`@dRYly)6%r_l!j2Y?8MBYL6m{X2PMpM{D%G`XtG-qU>8@Xviz7FUw0;U~*SL(zv zB#566-K>)~CDpxe!9YI$a*60vTH;{og=GTT0Z=Y?jEtB*1m767-Qx9qAApy$ zQz0pg;d+1s6)7~H(%*pGfDz2IXTOS1u>fC49R?z-dZ3ot3im(Y=?5c7CQzp1wIH}n zWi0<_j?~`T67M|2tUho}e?fPI9mEAzMpa=aziWo`t`Wh{{7L^AgQIr;LEitj6(;6 z!^01Y46R?WQ>_c}4C4-|(mNQj8#lVi&OEx~=_&pEO;^>^=h|#Oe`RN$Sr@*2-EZ9+sg*IvQio_*^Lui2M`$v8aiT^>Gd%~_vX#&+!5mZHEzhvp4@=d?nf9l(BsZ1| z2=)5wz*_WTe|Ib2lHUSWEZ#W$z{ZWB?6qUZ`(o>?jf478EZz^Pr(92b`pebcu=Q1j z8{z7>Vm9iq2@A|mKoI7_VlYi?V+Uoi{KtGPs$FI-wGU z=IOj8l%`Hj`+%>D%NVlU#_z-ejQH(lJY2VhKL6^kHIr>|MUd|nB#;?O>=pN3)+(es zn$@b`_A&G>V`=b;PnQijd_&WHq^V9lpL_UdppM~>wvQRIV4Uzqf$+Lv z{Ocp<*V{+W>>xL9{j|14&Z=hkcC8FU=0AO3z9?<3k(iaFFI1YX?>f88u+)3u`+8F|oC`XMAJ-}9xv??xDEa50;W=C#mkH&Nn+2@~0bpO7mZ)5iB(ZHY zgwSi8WZ7Tv)Bb2Y(ABjLE(0-;WNxOjT29h3wOtrA!XRJ8LdnT({Xo;s@0aQ@=y#Vm zd_h(%q0eVlV>}5kx^XN6t4NK+#Y(57^7iB_@@Kuzp0~pODF^&OiKE72$q*FDztow7IR)CZT+;&NX9aI5 z+1HE9yF=DN1*35bQ%v{G34w?NUNvO@7%5q7TwIda6S7P5!xcr|w1Gct(Vop>U`{pN zS?LVFqfw~IVQd7adYF8Qo3kcGXV45iK^jNPr9q-f`;m#Ei0EvaV`N?^tQNoI-{tPD7`JZS-{}) zLnvKDqG15uKC2BKi2LdPGORS?dMZa(pu1%S1x`sm)32fWy<@ZOkHH&rd2^K?4G>g) zZ|_al?Pa*ZyJv33?f?Tm7xO@9xsV1oavgUdDqI3r3()DVg0iw(XQTGz4e$(q2|zs3 zHE&Uk$IO9w8>V4!v!!;JS|>(HS#1Gi%rbinGY?!suTIlyo_iAc6Wq}f_Me&F-P$^H zj&JnJSzi^zM*AgH1_0YPa184jBp~0Ur;mAeMV^gBc9lQ*LdY5g$+4Gn#KBgz^eOcf zCH*75#fb^X*EpG(S&ny1tCK$!wZARizh;l~WF74rE3!;Z_Q75*yd4>#VBNl*Tx*`D zHjSqUICshLVr{xu(%mxJ_VWVVDy|b+uB(;+@TgIJtFH%Fmd#E~l^r9t1cviMKV~9` z`U+A!iw?J#1rZc@3hss!h*RT^1Yk@jW$vF!+u{4G_{a~mGtelbFWSxsS+Kp zu3)38ajh#CJUG@r>HC!j^?NBFn(V75C*KrN4d(`Upld00XP z?U#pVdnt+37at#$^1JkdH6b|!@0r#-$&`W?e9e4h-O<5`l*4i5zs=@7@ocB%QpWgS z5a7Dmr}R8ecs;yD0Ta8p7!0Nf7RTn84mmGO=|9KR1(D;(PdY-$TJ8vY*8dz+?J4G0 z4LzC4%tAdcTF7hGJ5wwR5+T>a7KiV20c1TeAYVHdx3VJO*SkBUS|H4qf8hUFC~PHP z;_}A>+k)Mv*;}_j@rYh?!w7(K_$2i1b>$saG2f`)e@Wt_GY7xn8#}S zv`oZ#wy_aRtuvHc{iP`exh_Ak6hCf(edtp`m;Yy_iK0hy+v5L7I4gw>a4!#6fM3hNS%`CE!N zJi22N07IV1X}?rUnRqgm`8c29S^cD{^3a8XwfLPzdw-(pLN$>^mBkEk3Oj}UN9e<$ zri6HM&sZ%Hg3ewM75a97kBbroX2g`QqnAWwh?pzxNRY-6_5lS7XF;oAoAo#jH5Li? zd3_=TzBxHH)d21&)kHp(#Nk-r$O^AX(=Z+cqlj?+|B)*ED|R??7yx5(BwCn?ja7Fb ze&vy1BWhJoh4}LSql_^6M;W2YA|UM8>-jRAGwT@XbCsm|NL&^O(x62TKBPbLCaC3d zsLhc+P}#gVQuRkY>fcB4~HL>`iFf0bqH_(lE#(~|IKm}{SE{` z`%o+Ka|l|Zup;|Df|EaY2z&GnGn^qvQCNmbGrbV9m8KBHCq>%CN^E1pZaMZvj|D}t z=+d+zxgQ(+eZ9d-?ozPk+nZ^3WI07-ZR{e(C~-qdRyChw?M!O6vXBd9cZZ6MrYPJ` zJzXU%HXht@=@?#K-q{V9xpec3eQ-#KZXa-@`dia!nabVX-ej-e@a~=S&TzaHN7t52 zkgoOhp?Y1%>Rqn(J2|rI>TR#Un3$Q>@l>5X<)syG^{G;fW%`}F?^icAcDBDAbDu!x zzln@!^jKM*0tv4HreX_mL-GzOI~f;-IocDXBarl{-8V2WN2BL{*FoQ<%;^$>GpuM) zF#OWRO9(`&dNq4-l4up{voFUx8;3_+!g#<$H2f&z;wvS z229U{kd|gv?n2Sbb_)jC^h4Uw`Kg~6=r!{JG5TDz@y74wteXVL z@bd5Krv6@ANT(Y>Pwp#hdDwj^Q2(W;`S1SmGSKw8?m`mkV`r62p zI-*LJ{;(QH?RZYLxEVNKpJ|4~V2Dv=T8z53BW^D0kQ?-@m(~y)5o# z`?pslMFLF#&67qtE)4u0#Dp{04IVzs@H)fy%%|dqdUnxgQ?0%mHXLPn*z6APYfY!0 zSS-_qTab2^724atzvj^=u?mplCsl-Ap)HC$le>l^5bR_zsbxAsc1KaGHuKu2L)U;Z= zMof5fPJU^B`ope2Nq_?cCaS2gbZ`2ER?f8Qoo#54ZB?681`H0p_wRih<~}%%t=^;e z{haJzvD#x$u`|xj_=r{5teDVst}k3M!s;*5wGTttODp>`3E9OfnCkCxjGuSrgt>&+ z$=E%v&OKmWri8G{41Ytv(R6-P;Q4Z!RPhBRboiNhF`-h z1+g$O&G-C4Xd(S+NTcv;ef@@29*(N2XV|l_DOlL9Jl*7JJp5OGov399jTZ8aesqN( z=PhL?O8WNpj*cbsTan+f%4AXf2Kd5j@S(60=!BC^NdEo&(LQ2nNdNP1RDY&&8>122 zB;q$#3FrTMgwdb85-tqe6OYL;ue8(y)CP}x#64FppS$s&w{M-Gr=@LZY|M*UYV2{3Azl-3#mx)N}C_NS(e5 z{<}l9nB?S-S$eO{&6wlj;&yg+K5L9lV=E^kP*fCRpc=Grf+hp91=_G}*lW`5MO7*ARZi}x5_d2~X=_I@P2lmKNEH+u1R0lW zLbU!?8Fk!~?Ef4Sn|NP;1hv6~3nS_(sG+0=WGa^AwgZZ_^-&2OJ^d{aku?S4qlI`o z;0#^vqd+21dCXQ1g+dLuyquhTm~3*7IWn)b5=%nz6=P_KgFZX-<3qrNnLD}J+1cZU zu>jDkEX!CUVauw&zm?`-KTf}2K_0K=oHkL}PiAm=dNfP^_nr`Ej24n4s{axk+i~`3 zCL`jlAYq?wxkSPxMEr9PbxcVGbxZ>ejCg3`7i=8d4V}xwi;IPC?e=NHTV-eA8#**e zqGBysz7|~|VJGv9KAwVQnIK8dB)P4J60@YdqYOJBA%T67z}`vV43A#JrX*i45>5tV XDr~d1rc2=m*+>*+)$V_kHh=j)8zaHv diff --git a/contracts/docs/plantuml/oethProcesses-rewards.png b/contracts/docs/plantuml/oethProcesses-rewards.png index d73b2b73ea53617a85eda0a34accdb23bbed071d..a3d1a86f32cc4a5f5962c36de84132786f622350 100644 GIT binary patch literal 128561 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

%Q*6FnQ^HGAx=PdORfE-%|**M*s z6Myhy}$72U#)ee8h!CisIi4?Zc+gok0y@qv#J}8u_1uy+Lbs_}+ zI$ZEW9_GbsBTW31GnDcPg9jX_CEWzzan?q(p;o!viQst-EVSkti^Dhgv!-IfTNWL9 z-Ngm3ntuz#X-qbcL2T!F{|N-d&fW?-2Wn;mAI5~2_ip6ztP!7iA&*WPB@2WL+Hx@i zShFPzqcSoy_DJu={9CXLu-QDuqSu=_`oGVN93r?;pc*Hpv-Rfb=VWX#30wryy7T}6 zGDg=()#WkXUCEc8IRI_}5K;~+tTcDlhhIsT4LV?vfrBnw;cgpd_z!Q1wYkB;#P>3z zkX5v5Q=WAiVueGq+2o+VyF&13C-~R?RvgGxROn%E2!i)Zu#44_v7uVf@}z8pJJ+P@ zC0XFlT;mGZqam@%m>&KUfaF$zkwKAS|I-K-H4f-+T!-=A_FOWi^>Wgo^(t-Mc_%yy znCs=1i&>K91$hUpCd9S3&jt7P=!t-&j6={?U0@j}d8QV`I1ra3ip|Dnkcn*2eMc zOuZ0i3o6>T`UOcrK`H=)>drD303gx~d3l0~@8SZa9#BGxaE6iIZ!$WOYnrEptuN%o zLyz1c@aj$iY>PBak_~_~^hQG?W0}#_sqDPdumwSs7GNObYOg;1AXpli>@vgaOcCvP zcuk`UN~r+$oY*>$o?lpiki)DExK1}fediftQwfcXjUh7nb1*Gx_!G%22gF4vu4RGC zD?A*cq!I&DD|?2G}HbBz#QeICK?3n1{*$+&iz6#B}J!a`=L z9v}8~Xz2tjAK6de^%9GShQVN{EtLVUyj0p3AD* z@W7T&V816mu7ixMj<>XBv}G;}Nxio+B<$tNM#<}`uE*$gzrCL9d9h6P?%j+I-8n+- zz~1xEsCi{L@>+4Pglz&#vl*Uq(L*-WNqf}2I3qbUkkRVjQN#quy7(Q{Uo`=!-5t

vTjxn^EVlzExndhFDN=aCRP0y%tKCYAa_07Jvkwu3SOF#rk1?Mit) zsbIT}ygmKZa~psyGoybGS-9M&ple4k7@4jxO97^Ahe~(XsBVqpXlgUGY&_Yz4Otlg zO3tTeWIuhIZSmt}IMi5?JY}WV&;og-Xbf6^BZ&5x=!NU=MqocZ@6Wi@vzE(8M$Iz- z>VEZxzEK7y1r*Y2^#&}WmoTolBy6#etNglX?(@jVln4HgYE1z}Dz3ri!@Lk{5#P#w zj%+QL3oK!YZF0$@JP@E~;hOzY*BUTm2*em(TMzui!40K+jW#F^kDAC8$!P+p(}b3v z=KatRSg$@yR9b8;_qts+Lq9YD?j7jG0p5<})C0ATwIV~4ka$l6$|uV(1bc3Y{r~~8 zkS)cbxYw+$*1YC=MZeveff zY!^(Jo#f%^sk8R#M6}cbGQW z^U%0{cT1^fO9Ap>BvbCNlhc9FI{V7H)>{b$62rm;AI0paGsXW;f;N7ci2o zaVBd%A#vJ^w!X-I~fbWJ?v?(o}vW!ZiqU%aj-iCEU75N zQ3j&+bBQ$8;-jJ{VQD&fl1Z2nPO;%qfUx%4p@c#X5ch?aoUGXgr1( zjCzePn4*n_G#6pkWkCRtOh?Mf(UUBS)929;78}RG4g(-{tK}RU+uaWj_nn{-wtme~ z*V3Y{_BQ4{ES70wpMRBAEP4_VAWQ`8H}T@0Ewu2gq@d-)JHrREn&7O-y_hBqy~W|g z6C8zvNZijux$?(}IdMpH+PrK}SI@pKte0yf>iRn+;5Fb?En%|5rckoc-^$Yg=m0pz z;!-QBq6?LO@T+NdAna@eYt0Xnu+iCA$QSu}q&TEUli#ML?|OL_Nj7GNW@kG_fWXd5 zdCUY;bG2ddHH}b6hhNqB-ya7vJ=p3CLQ|!nVJK^DKAA$THo;)3e(&`*n=&&q)76VC z5lc;g?8a}fmF}&mpzkKqB3kfn_52j$>s=5%wx`PjbguBa#1rvG#tI zz_Y~BGsfGy8kGj49;|DZFslxa;Wd@-;jQ;;-(cH)a1Z|-<>?tS-_&;!&b|%rYhZd^ zMSFZlxp$y`^^5%OLt*Ii>OqSEln-A&Ih=>0zQPt5HP*Y1!>W|0_EG2Cr3lSPTD0)2 z6$^MwR9yCK5yB5Y_$3dqP|_{Cd)6rO#l>k@*oPJt7pFI=;LJt`kT_7qt>9+805{|* zDUHEczt>#lFdp)(0YVEAY=^+SW3rg28VDDegV!@5ZYqU9YVNh%2O~Yi)I4th9I)^q zL+=fcVbam_i#fHQLu|ghLR%3_F*6^6kbT0P*MU5gCHf267>g=#yAAxgaqgM6s~+Af zx0Nb!pOw@Ot10$W;)m7Kyvyh5%k;g>)wYie6_5D@indH^Khwrt^i;9c)m3zuMD7$^S^Tm5& zp2eygbrj_-3B3r&7D?h$vz?*6GWu6C`j^nn5l9`IeK!fQlOby+&=-BqyA=*j$2w3! zkK!r`1`2M#R$;29+#!A|p;0~=`}pv3hty~krHD0P zN}!`MIIfqqHwKg6o0u@X?~lufNY_fA7w)Hq=Jl+?!rj;wY^ALoN>(_x@nJ4kzip>uPRlO)mcbZP);%Wv& zHv98^l{`k6xn9tQ0n$y6+t`FchvD&+s~7R96nzA%-h`BGRbB`QhWoS8m@H=AAV4 z7S}DYCRvy{Kq%bcDQehrA_T!dESgyF4aLw2WLT{JHsAJmE^2>!o6FcBPx*CT4#dqdfTi*I z_YxZ_r|1cnf}6P!EF=-7FP8XQ1iHAdzcsk3u~3znoqDNtVI;CHPxo5{K5Qw4dw5(7 z_`M45>tcp{Du+gjFDpZri&NuWkxcA))lx|=cEX!CNAFw;T)SW$-8@2bRCE0K^Pctg zuF(e!q`Sx2brrpYHby{$C2Np}>5+Xm({oDv?9!p5ZKl=6%ugyAMdw!mcmDO^(B2C|k_04rYFeMsWQ}5ruF`9qtvqdgO zWIkngk=>gjE1$xO327B9YrA{^MBDhx{3=o3iUtGWs54%5qJqsPRoR4+Ba+H#3zuN= zwG|gvp{pE^_N)NA-L^e0h%%$z$m*H)vL`NsV za&@IYAT$(A`%4Q8s}sqg3_)m>k>zfM2FzzYQ~L9E^vHPV!;Pb|=4+#>PK)YRbU~U@ z>zjR6?kfpoe83^okPlRwPq#_WC5VN`JMvnE_Gp_(M#bQRUlAUogp5e=v z3o4vh1+2P0w6<#Woxe-Pd3jE3q!UI4vx-GfCa352X8+MLordzr3+8~rh|l!@T{e;7 zc?pwvHXt~7`D+^Be&jHQH%z=Uwf;F_!)Bdo!JhYqhDiWxuE|+%&d%n!#@3=Vg|3d* z>&_k9#V=HQDu2A$M|em_ugOeD#M?{{7K(68O--WXWcajjo$^rYt?lqg=rN?}DsyEz zlG{}G+w0@QWMnpsdBEV!#7)@c=5qP?=qv?o@_FS31-bh z`Jg@RXQ$Qr4jb@iHZ9Q;y?FBE$u1=$cOEU{O9V7xw=1_M1z(JBRjXTVsb3OrnDsBv+WS0*PsK60Jq#C&JN@c|kU>Ow*fd$5q^0`1 z7qt!4S@x^wRa@*7AAa$~1CR0(+QF;H4Gj%BZX7^fI%gZIX@(It^S8s3;sp8^ApV(> zL!10MZgJ6lEY<=*7icJXfJz0&@3aNNlE7*JPy%*%wi~Ft>+kOXu^h#rEpxKwl2ySd{$&B@STd%xO>tE_F)F|e#!YaWtw_iHUt?LcGU6Zkeu z0f0bN#RRA}jy02cWOLr(OL7h%yVU-l5MQjVtqo+nwLf;b`}5b=g1$GdQuE(Y&E0_| zTRXdH7}(U2A{24LMFjReL^Bl?Qg{+>kWowRTsd4tobH>y=m{3&5cI2~Dth-am-ki* zgfaOG(f(i|f)9o0_jW1Y5U2pG0>C`vCgBEQ*ZIRT?EE>xZ2Sm=W55n=v#UjL{y)b4ISpn!--D=FQffb>B+BqXH|(tU_S9pb#}24T9?g8wF?-ZxLiVI8~dH`ZE?ecsq2 zjv}=}PXWcX3qm23AAXR9KKupiCyrs*!d`T_+Zg+bDFX|&x@GvXo0yW#`QnkhZa_sr z%qlfh!$2noY(R5cTZA(Vew5CSW*UYC!&}bbKa}t73-zr3k60`B$zX{iu>c-+l9mtJ zU}5)Zxp&UMRcFQx1{H8Of3ADK`$#rNPLt9`Zd)2}MUASh?cCZJ#cdO)T+msDNB5rl zn)V~}cRqH=7n@VTJlr;FIXBzZNh%WY%@Q>mC?Zatxm{4EFRsYRNvf!5&$Z5!irvTw z2>ze7pz8Cw|Gor#_I+|5LMrcE3W*kCjsE zk)eZ!i?oL1KJ}~5j)iV^W>S9%T%Q!3z}a4s<2josPh~KB>>jATrgMf@_mO_B;??UZZXZ$Sr(kogXna zJ3Bg|VLey$h9$hbN?zK!DcrN6aBz?&sl~iy&Y~u8(`)gM_}}*rvcrF^5#pls8}Huj z1fpwd+hoSIB#M!ld(f$~wbiQGt($cCz6tOTezWOdDyfgxyTZgE|nwp*I%Y-4>@WST2nrC$Yk1V z*Bo@5((j^4`BNhwZKA+Yj4+KH}6yo zDk>}vy~vlowsERBzB3;izk3EgpxxOgi@g)lz$)k#ff91euZBp80pJRfC)$Q&PB$t! z;-YP-Z;Pm8YEOZAD?AFz`wzswL1vRU40(iq);C@=QMD;RTEChTwT0|3m+IpR$-Ops zWJuac()q1n^*MAD&OV9WE}tQTy5w0jdJu2h?@5XUrtix;th^38G{KntWg`OwnADb( zQ$V?xNmgj6XTO5i+Jr?wOJMssk&=x>sF~$$Ak2#&-jbMWDJl0j(3~0QmT1xFtN9k) z^`~fVLv|O)S(%%g+aL9GynhWq@6Y@|0IFRHh6ead|5;I5!}BbvlfL{C)A44snR4r5 zCxslI#>r4xhgPb2FUv>7>TwmO94Ag+s@+zZpMMfNcri_n)dHoVk*?j71bF}peWvcC z8%l+)cV3p2(1+e9g}L6CtC)Z1qcJb{5zER-Q|C1fcwfh$OruZWPseksATd0AW~jVn zEE#)IvMeNP?2}@g9L!)FI1w=6^Mp1TR~=o(pmMyCO-JJAcLD8&t>s-YNKbI~)ZvjEYptVmPZY+HoQ?#Jb=Y{QieRYv0D z3z% zHE~m(i$p8JPq3zXdf19L)S^D&D+A3A-d+Q#p*8O>4vng+a!-kCeS`WuLkM9ju z#ZEJQRj2#+S6br;FRbV8S&wPvrKUK(1;SUVr8{DTxtBtP8H!Iq?PUXt33q*IxMH({ z(glR}P?qWW`%`TU0K|DeIczEvm6iEjmXYntH8EN!6xqiQ52De1HL;2znY~G9h@&*b zx;PzS@3qCnR)99+S(zgEmcn$|dQuvrFy{2>iyM`a#UjE|a zvn*+wsM*^h`_(%B^gkgwUlNt?OWoeHHXss>HaNgXz=2=EyN2JaYN_YWoVgDrRwytg zCt($(FcX{(tR~CDF5gFS@0(y4GJZnK6M?IL10lG>()$LWgJB*fet|$yy1ucIhY#;3 zi#f4-Wh3~a9he-HXMao&P_fp}Y|7piNN2ufl{z|u;%eC#R;Sr^BCOD9~b{Y;zv z{~TMAN2Pd@@3l}<0kax#@wauR!&~a$N#Jbnhj9qdBbm?eP5uYf}pBL%SaE;E{2=t2MlMt{^K%odo`5-83oh~G=d~Rtvx+$uUOdFibO`_ z3iK{%>(NS(@kFA6h`z4wx(Kd7y zE2en$%&ZWoA=$27JN)>szgHb9vCoZKqL!iwu8LQ>9UYjQDt^Tr=5p9S$_TB4i@cNl z`UctyUd374VRx6hZddL@Y1j7q@flsuk4B!cS%_nx9#yMB30WA9C4nH~qQZgOCS{ zc(ZI*z7uZ!Sm5-^rQNc-pzis1NO%E0d^59uEeO+UeylIvQ(nzf_Y~cBks@(J+dUXO zK-TIJ-{g}d=lJlpIC)hzgKdRI^iz&SxZ4AwA_AW7{2DdA4C}T0Jpg*z_5#ebs4%QB z$s;p-RP=>h02?gzwJ&~lCG>JIgcw!0t^%04YulY`Qdi}DZ+TW3uwI5{C;yG?2HcbZ zlvk+9l>3I%Y!Xm}Y#Bm{exma%EfJT^#hbP#f$cIabJbDXN>f`NO%K(ZPa@H95lGT5 zY-^KnJiNZ4Hak!pcyf_dl;&2p=Pu=!85YW6H0R%l5K=pC2bh-w9osGLUJB!$ zV2u>np+O$5vjmuo4F*GhmBTk zjG*D}x+?HiB`IIJx>>I~*g#?GGJs7AT46!u=2VTWL_y#rwSdCuq`K2rm*?J5sL3lD zY44KDd|%Li*~f3!GkeZ!8ws_L1hLev zX?=Kgac=*fIWSqAFoTd-F7t)PKuN?iN|?=THa;XL)8M@2s&57n7zo^WHty@mcyL88 z6}1@f``w;9V1~zW0m@Z9X~(#%b?lg@PBA%+h#)JPLEmX;=xuAmrR>0Lzhw;xfYXp?0-Z2Kl-f89yP!*E(q9Vnev5q>pQub4lqvleDZ*@s)SvK-v7(Vd1P2!0(dAf1ZV()T~%Nc#6yBOSw;}LwmA8DWQ+{RuCG3^YBXbcc)X=Tb-c@0 zmv&&4s~>q@NNa&hE_OCY)Io))`JtKj09PL)QF2U+NWpK1N)r8^Myrb$0!H{dd@; zj5SKeOYdEYw(qJ6Gh=z?$eSF?ggGEEn(pS)8F)qH;-GrFm;XDzvbvmt)1gZvoA^1g z*2FIfyYKarqtz878oRwXHM)qw===$KsW1MiPW*FCjX+cde6i4A*@lr=ofM9bUmbOy}x-0+p8@rkrTN86Xn*R z(S%IbA?6-D@PU5qV6!MZ4KMltHGsCUWoHLi*jBy=M-UbZ2Y~(s-cn)B^%P*)%cV@2Fu8jsDc&{ zHp;#y*I`^)BTh!km!41D1ne7eX6u$|r_jYbU^{2ZiZ*6i#&FR2D&3befP2D}6#M4X z?fL$^n;4w%$mH(;_VM=XEz!>ss!`Bk-yR(9?qLqY6JMsqHaI4dKQ&ev{qXW?4%*Vc+ED9DeE7^K1I8x zNG+|X+>*`vr;l2XvbVDbSjuBA}K2DXlw4q2-ebSL9OD6qf;VH2^FIu2kx4K&DD1k_{*}K{jxh$uXC* z(6nMe&(AyEjAo8CoKq?Glj^-?B50}khs^~5YSxkL1jU^cEvPh1y(kpt68<1SlG}Vm zhJ3o?1eib)^m~rM^})F&0FLfLwQE$culMs>K&%7PD>_X!N{?5yf0a%AGt&=^wa zT1nWrn}FnIMr>K~c+O7YWQpj-tE#We1{07W}9rjdrb`zqr!H$=R8wtRBDXxTItd+m*s@NU-8Q{uF$ z_s!6n*F;x=SvC1%m{eS;Z8A|)gv0WR&V+Fp4}K8JCQuzw7A`C*$&$nQC6d}Ue&O~4 zB3AnficId&t|wREuGhbHc}@!da!YrREa z%j{>s6t}MT`&sbS`866O=98i5R5Q+xxx5WULgI`2k00`b$=m-WhPZ>tP{9BwT<>0F z?@HE&)f%;kT^>34UtFDZG*Tel-9J%>*>n<++~IuQ^G;kA`1z_Ik(hjSwxe|>Or}>GgB=;5`bF1y<3JSB6N0u&* z5!G9Ag;JEMag7U!eE3_rh+7?xl47u1=7CK}dbj__yBz%h9d28i6=si>A0~R9e;vi& zIts{}N z88ylGlWBT8eM$zE71Pqqf_8_>dcHS4e}Wb*Q?V0&^e8w~*Xiy_4V}l?^mL zhuY#ce?8)jKVuSCuE5>JRMXI!$^D;e;2Ihh$I=_m;dJS;wu+F|48NW^;l-OV#ozMS;w&L|uS&8``-Zs>cnI9~*=uAZ` zYZd0*9|IFGF^Ly}#bL!|G`!ss!A(%7dcQH_#tud803H^e+~&8wKJkC(y700Fr`7K* zd+C(56Z5r;34{p}T(Ntdth-x9^dU3>Bb}b7UQDIlif}Oko+W|XkrAjn@46TnzkTWs z6JDfAH(XWE?5&p(#}fvYi*RP^de{Id4RllM924bozs?K{ zRcL6HWESSuBPUBdFe@yxR8ciCK+@Sgd-mYl^Y1dzHy(Sfw%fbQ^GRalbGe{V zKm8JPv<;XLg_|e{Oy1^rvv;Q<)r(}bY_e*78tglGs`{C9n1+Xh0=HC~C$!R{uKF`j z{g&{3jWEe#yemRiez-yAYjd4br?K~1EVJMzJLU~w34shB{$?}{s-!yEZMlvc;#hGZpS*RX#6Ts24Ky>Ke&skDhdN(%F* zqnzh^^sBY2$9Z$+?83~^=R6Ta0Qgr-V+`{Jr#q*3~3fe?4}i1Pl0t$2AaGTY0pcXnTm_rdot-X;Yx*Zi-T&Uooc zC@(|TLh{kXBe(%Fk&+jg2r>6xB+<6?8#jxGHz6(nTg<3%IV>VT$`d(=`*-dz((w$@ z7pY0^gE0kJ;DI9l)+Qb^YuyJV_OfsdT{#22{q+c^mA2EqTh@dYsEreNg)7i9#XJ3P zKFw%roy)3}_syLvpN>N*xIAGW2qRTsXzNErj=TT5n*o+j|GT!h+cOWn!EI{cZqQPC zGz*LPUa0K;{;RM0107jJvqo6t zdR*a=QfLUnm{rREC4u-EAz<5^YjQ6%Y@RNB6aYv_CU$sU5n0d!KU5S^TZ^^u6QuY5 z-CIx3mLu8RyS@KAJKLLz@Xde40stR=22bPpn<Y0zUrRs1(-abR_S#ytP% z#Cz@9J(7{(Vfv_$5HK|fhv)P2O+3${YOpaBZgq;DGwY#CO2CN|iZxnWOI+7JhLW3?0eDuG5?l(aNh)1Nv8 zqwoUHF-vM;Y-fFI#mii`M~fUk$$K5V!ti6^;O?R5O2UFEGj+5t%iWPTa5&EkQ`D2| z1Xl5ybv=z%D|q$?=I)&>hOTo}5-4_L>IR?V>di53F?#aE(a8xqz8Z`ZVdba&a|{bW z^|c-WvppnRpywClSOEo~SUpL>A~g)Mz!IA=8H0&wJ)L3!FqltOO$jIg(}e;1K}X}d zk5^;;09Zf zBMs8op{5n;04g_n8VZU8nZR)JLavWrRU8{HqY7#7Gus5-05{kvU0-x~JC)y?`aq_i zYETgi^u)5Mm+kd$tp4gmRD~8GGSS1B2aQiV{DCQ}PAk*kXOyJ)Tf_{8Y)>x$=rWyN zg;rIo{(`GntCOww+9=r`T=9lZX9anAof3zyRrmh-E2uMtjEMNcv!Ndco8EvBfZiG~ zFJp6OSrH$!M+b$<1YNg=*e@SjRQxfg15A11l^qQLwX_kP`knIqYvR-zqI(79fv#C1 zI-G{l9r=cB9v*91Dn>6_XTknWBQ|yQ`tZXVxso1oWdTYYe z@8d0FsS@;;0t)it;^JJMgW6L&$KT$+#B^s8Y}gxOV9>P@rvgx*iOz@Zj~&?4+tVhY z`9Ug4H;g6&WA0*?jc;79NKT(tn~)F}PdVp!FFBIxD~>QRF?qwiscswc z;ZB-od%zrcv4@GBZ3n$5f@cIS#I6TiX8>76%0`!R2lUE-4Mb}@yuFP6ojWhT+WP9~ zR6=ZnMxF%CtHBT96v(72#l4j|ca#8Khd7_M54*b~FAa7F9+m0af8wcbuu4bd+s~DT z+0W*hxw_8Bz#s-wos=rL>NysnHUf;Wim(4hoGA3<(22j3(!YQI*UN*4>0?9A!4W<> zKmR`(#=bE0L>&a8&XQAH)u7EC&-nN=loN!ws*W*lK{El3=W?R9Fv-X$PQqYf+{|^saiCs{KTH(gW@sS#V6)r#o_v;@cFVy3X!-``anwIz z9cGsYxDLc0xd2KVfM}&JS4v?tF4aNvvnzdae)btGM1PAkKcFeI(TBTl_@SaN5+4Am zA}EXiIdI-UMT65UUZ4fL6bj-6H{E*cqRoUsIjD}>ao z^hTKVaxy;QMKbn(7Bvn_^a1XX1wB&h2Qxuh)L1=0+c(us*qRU} zD|6Xca>kZYLQvn;qAb%-JAz*TJk&9QLl2bx{})7AQsdF0RFPGbx(;{oNqS|jj$LaI z)YKph-nj7$Knz4rkW)L(@|L*~TtSjDN^%f2(L#0u|6`%Ga~Ci7y+)@c4JDfN7c9cg z$W=k~GCWk2l%de84t*Oi=#M@iB*e&7-p0qP7}T>;LjR)+ZLvbpa_LtUSdRz^2~Brp z6r(m@1Vj9w0PWo9s48p>I7um03Xy{Kl4u$hThLxw>Fk}-~6;Q zZv1pLIB2UkxUr!DoagfjT;W~^XqbW%W?&Gf17m>>OCtadh%zE2RaLk8ca|O|{UJB` z9263JK~)E;p|O#XYZNL|%EpmPU{S($@IN4QbEK+US*mpnrjh4c^u2)Dd8euP&NZn` zflgi%00M~Mt1MvvVnY2a(n58SS&$?8D_qiPOuyhV4nV^d0uRJn*GHLF$l)1ovK20l zrD^Di0nMT3X{r~0Dvokt!L46v7`CqaYh*f45A+T}AWmC4d>H&;=U6vb)zcqj=?ZVl zyyG!rVNL{W#m0#Op*6;JGvjH#(Y!OvuBIOZNC!wFl?&Q2-q2U3s-;D_;!Pm>t^C$Y7`G{UuJP)9=zgOWBFOn0w>xv3xo0t0vJvgJ!))zu zKuJkCr{M-}2fy{)O2P3WtTAjQYr7?v2VWAC$mHzqr0ZE#?d|R2 zDWKhlu2~*(O=5+po;gK#8@XGgT-F!+qn4AaADNj-Hd~%v{q`o5s;7qi0-c$MeI(`$p>nd7+Q% zI|_y$f*t?awKYQQW}N~dk2UGY;8G3n_n?*1dt&OeUQgCnSF12-qg;w-z;KgY$5fG@?$%C?{A z&UHWoqnCvovd7Qb!OjQy8Wgyl2s_)*84r_kV5fWE@mYblZ13yST9zw?>j>OORBks) zdDbO}5A(iBJ8c-kp<_B+b{v2OeW$Fnw7NB%PnJnk%5}U%i(*`!84GdF?vImsNxwD69W=r4Q}K2c^bG<(BQ%* zQQiQ^X&Qw?hKrH8?Q9r_WR8>m-zZX7Dd7Q^7iCs(9Xu4bjj>SeNY;%`chl1#yXxW; zGe?e0L(Fp5J2%262Kp#lrGpMZFlA>TRIa8b?buw4(W{5(p2lv*W?W+a0P{Zq8N4)} zQ|E@Lf7+2xW735F*uSNw9J|e?!uD)n5VJhqwEFAcnLAP>(0qknHa>xfes`03NzAf` zIQyGMf7lZ}cUaAhN*)xQMB193=anK&$F26KGLoxr8Z~}`4!KrRUZfcmx4VVsM1;GV0>yI7{K|2RMgBM1YuL+xdk`ui?%$ij~ z=MN)IAcHe?9XYYb1p%5F_<$Q2Qm%uPvZ%P2l!|W_b`iwYGSJQi%z|SEoNqpM_Bk;8 zAT$l`^n(-6&6~>F1UTw~ShSXZ-_3JMEh==enU$#4(fYk7~M z8+^Axj;1JV*T+McQt)~z^_eqQ)LsDr6ncxLsA`-qLkFf zLu1)pdUfpPAU~#uVR=%L7zU0|5@O;KHv+o2c=I;4B(5;;nYFd!+JHUM@pbr)%u7&7 z?{<}~5tfOOs|b(>VA`(Z$ejgU9pjzw#AIxNHt1l;jYhkz_89kS6gsV>y1Q4xLF)YD zae|x&kG39>@PmvLOgob3$YTmi?1Duy2E=2=C2o7fW zTv<^8cxtqA1DtUnEXtYdav#;p2i;IfjUX+P~ z--1R#<+g+cSOef4{*?9j=mQMcfHbBAKb;19322b^AOV>7S6>3tE}Ptr!(6tlyx+Rq zNfdnE@*Fw?`Bu>-1aP6Tai;rULeP1>00A~A# zdSU`@Wl@@%!v}^EcQN(h2g#so)fIk=@HT)`950Z<1=bGTonR3Xbs)qSaP+&X>gusi zpRv}PuLz$Xum6BEvFmAPd7!V`#vi1`8#+6=o zOPxFRg2r(7@Af@$k`m5mU>gSDNe373gFz7^BO?r`4TOH|EikXeMeg0=ks+EM=-Qf^ zRHpe}zdk#ltO*9|2T(}}KTeHGN&s5g6k~5?WffTq-C;v+d#$Gk$4hHIvL>_9sg~BY z1`k18T%3W4Y2p((>e%UY)ZPc#Gv#|!7--yxxEp1&cJJDs?Q`S1Zvf(6_&@tDd`SKV zy744d_?K<)*O7q_kuC9Hvkvi=`L`hq^5bsDkGuGE&&388iAeMQLtrA^w6MJYF^Gx7 z?l#X(l%cWRU$21$nW&}jWf2#I*&~$DMjc`LR!(>(v+r5fLXDK#CyPn;O!DxHLfkO% z^J))_FEIhQxY1((c2Y~#Ho#tmf?u`QRk`DM1CwH|cv_IQa)J5=Of|+cj&zA=@&bEp z0eUXDQwRQHJ^2z%Ab+D1?mM0hEiWP>BKm1SN(A~9x^#}0p+TY?r@{w^8z!5~;V7L~ zXY1WiqIT0kus!-4>FMcj2?)RpvBR~84nVzP57|Qf$#=Rq`Pm1CBgc+GHU+i_Fog7I zLI%JH5cU?bFGSB2Gm5h?PDk{){+ftZ)vD5&r;F#O9|URvZkXj`7yfbMAs7L;1*+vb zOu~XYe0zI4_*P>gdkaONg)9unS2nfO4v=I4U}a&6 z`0PvnZm1#VR_b4_oZi9j&ckuNtK2^@;2X?#NC!T7QnafRr1#*bcL_xR z&lLJ_mqv`!47Cl)H+uVU#%aEFt9zVW!?_0dzKn)=I#=Z0z<$S1Y( zEr%PRsV|g8x&d@QprStsjd=Jd15ramLn&dP#$E6@6N66m&(#%Lppym%iZ!NG3gv?S zZruEUGhz&egEoMG>)Y4V0?enyz@lyo=%95f;ytZh_)(kk7kqK^s+GRz*uo|cbtoaO|7pftnYN3Q@WQ=B+& z9}P@}b`g+m!+1dD;K$b`)N-Ew$)3|*n9Mu=w1NkD=a3b(`!q6ov3>i>8nI2_m9+zO zi@lL4Di*;4JUlpXU?QUxbuCd{-<&rK)S6D@mSAUBN+o!Y1f$c+YV$n6%xuRXG7uht_93jy2$Fc4$6EddKbyNw{^)KHRfad82SYc?z#__Lg~)YH?; zi|_n`P7@f0MSvn$u(?eGkYB_hY@dO1V0q^pWYr(q?7%Ilk)R!;Igs?GR zvPd5VjN$C;?4z5;G}eoE1<(QHgAbigFMKII0zNdp1lK0ZQg%)k%v^YFC3Y;@;=M~W z!O04I`3egPpvWek6i|T-;EZAj*S3c`jKI85pn+(eu=hF&+G9GpxQNm+bUdMqBRxQm zxHYa31;`&M1>tbm+!J{A8ej!FbutBd(I&xraZxmaY(JZ7dV@3()8KTh7l!UCNkmpb z?Q4=L>psb>E^jkoCdl(@rEe1J&m~^YWA~I)nWhcMQl;75}*@cVR?CZbv48qx3qMU zlyu^;(7xl@OSF3el?#N!&Oir$2S88z;Ay4;k<-ZHN%-DgDA`9zWy9)6WHqKtXF8#5 z52bTGB}7&uggSQWF}#53()%+PE<6B64iYKwUB4%cGR9e)_%91qu(Jc#H_ZI}*cb(r zCb3uy)ZaWjj?6{!UqnTa{jx7Qx2qul#k9LP*q|O-`K7aIeLK!i<ft>K2(d&t ze)$G|S51Vl&>wyP|M(AF+yy4^D<50H4kq*a-->XGCnHjO>h2As!w<3Z+)JQy51}N7 zUbfaUzuGnO+sl9uSzc0n+Aae7TUdR1W)oNm7!tWMLikADbHi)$_TD$$G2%fzh?CkO+V?M%+j1m;r zhdDfHQMj{lCwB8h=RvRu1f#|Bw<{>f?UydAsD*R98t5k-`&4Ro5AGm45T*W zFsz6H_?8lxoUXYuo>B>MO_8LNoR?e?15EvAgL)YZxVP(scbWW8PFc?Ji2Ay&v!? z)Vf)EMuUJYy}SUyX<}0Ur}&wGs3@ko`b|V@X7=tBHtk(V(sVMaN^4-fwRj-|^U8EF@o7pRpj zT#QqbldrrzpTfq;NtqQC)7#q%uX|pLQJIsC&D`AF&=Y*k0D#1pSwYy%RDKc^5b#$$ zKQFIEr>ls$&K%Fo-jL|= z_G1Sz!Ghw*dmTB5xw=5>G3EYpf43Zh_r206l1PgD60(KhZ`=?3aFaTlNO}m??G<+5 z5az2L#kHe*FO`&9(WMrw$h=T`d-yiZWpDpOdoQS>_NUw*d0$x4`#yU=?Wk^_fZ5Q7 z9fIBDU&nq@ve<2vr=72@kznq)evUnXP5hn7NR8tl8b!5EvTzjM?BKH@(MI$;MLqM` zqOu(<88MN{3+HQskO_R@J0rBewc)wJBD$9g_D$w&^=%W;tpl1rgo%#N-usk)|L;SX zDGY}2)O=3ZVefnIKA`ePI__A*vH`+3wIif1o>z8%_!4{LLi*2z(!Brq5$obMS2=&3 z^uq44?7s1i=xTe5nsG~HPG`hy7T^S{t`yeZf8c z{8mVZ)E!-{=5C08>liPj66vq%cB56$J$irF%3DV(V5)qju76?9eI6}TkzOYFZo1Zq}L0hlqOrr^_^j#oKaEP zlBID{ic6PD>vHq*T+wP7Z0mzN`8_qhD=Vg zcuAQ0|eCOlY z|3Jv_;%Dh|skukq@vvIZ(JOqFa_GOIb@_us$kX`{_Hb6$cU4nQ&te#&80_6Yupc;J zN+KeVrD1Yig;Ce5d)I!@@g?Lf zEiaeQE2I76x*aO;xi;WwohsA??!4yi>V12f_4v=^I~hH_nj&lc1>8?AVldaqKfG&> zeN1+qT#;Nv`7v(NzauU;*9-GOO-1DtG45Kx&dU75#ao9DC4M7!+e%qVsWmkh6!$!0 z>qFV%?|&z=r+BSdI^wvu3fpGcT|-hy{g5g}e?EJOT>-3F>kCno5a}0UJDQ#>g z6ymr@F5dKF3{#Vdz^Rv#cYm1_mYCdHWO8O!5Nz$~neSd4;CWW$@kr!m^Vkxzh&A1b zpzW^V@wGv#l^<)(XTE15*LCvkkxi(9y!OZi+y&InF==IK=@SCj{=&f9`7trCrh#F; zahuu~>tQb;Ayjdc?nLId0{Tca|B2gP$s$|VKQx%@T`BkQ^jyZeX@9Z7jo-JhU}rg_ zv!&K4h! zJDyjWNnS@b=o?%4ZAs3=u^ipRr{JKs@*uu8e z;t`uBnQ&yms4%;ma(}%B^R298e?B&}w2XVA80(w5i~i;$pc|1 z!1~TL{52ulaXIxwC*Z^86JEbQWD~_}cHZ7nUjFp<00}8+?dEmuXvLrtfW<3S~*sKaqQZ&iZTm<&gpUH+mkKka9Hr>VgY+eUZw zw%gTET}T~@UzFZ|%bh0VAKb6tVmzm+N@Khtrty4Tsh7jV#J{|jY=r(9lZ)tchs|6Q zk#pT!8?Guz_>W03F(Sp%{rZQV$a$=v`&oG6ZtpY0bku}`KbQT@^DT9s#1<1F9adO@ zGk@@)O0Az;Sc7aR(KBB!IVUsBi3)ekZ&lI7d1Y3FF7-df&`hWBCBlk*H_*Jo-Zvg9 zzTtn$3>p)`n)znLD{Q1UcGifmJUTP8xi?R?a5JbF)5msr>6T1d#^$Gpc0c-Te1Xo{ z;q@JH-IMkP>lxj78Ks*XH1%CtY~&{C)UyJ6t(h*#SeQE_oanrQ6k$91xpk8!f!==8=aYvAG&UQ z=!v37-MM^P41&|yrt?{$yl$=;QUa8cC@RLk8>vfpL8EB<~tsZ zL%6}~4%`Mx(cV6(A~v^lQ~$)7>c#D+5_D=thKy%ZJ|@APs^$5M4lV0LFQgwF6SMOh zbB+}7 zrye>0J2qCKo`l0@g*v8h@T1Hv*flbVN279L;^LYbs(u|&9+l%cfBroE2dtRF;9#aI zCf^FnAA4_7j5X~K-RYB|Z{&pnIG2>2R#lk-3`ok$PhEHTzIsQ$+gCm*B66F-D7pI;~q+)oas$Jd)j7KLcdprFP+Tt$9WU`w%JXpCt}>H1*jwiefyhoJ5uoi zn5~%M+GrNS8WRhrSI4s%xlA2S!+thPe#?*?Pu1@jP2TIfk2PN2+L=a^^P243#l-hH znteg*@%ht{SN!U2GvTZ%4w1W<9mMo;2;Cw>fb9bz_iApLSAYWLf{AzYCj|Hoi6UT@ z$Q{AOFEtS~mm-K(1WEx*OF>DA{Kkz7$ZywPN5FKlk8xRQD$CWYuXZSE*OEL84Gh{f zUHrVfe#~A!ist8wG_4#qdXhgcV0vLer+SfEO9M$6;(OPl{QaSI?YNDUwDjFe#oXxp zjl~ySR+-*?6j!x#?D~pS^y2F2^%OnubDMg@~&`p#s$ztBy( z9l`wbjCEjAD4$+#ox$9RS#LukB1n9Y*HzZv8L`YK&!eKE$_bx8viQiJ;s*@;yCN^| zD}s8?&UOS$ybR3vwze4IlfEM}lzqTT-avxP&}E`IMd=Z1&xpn7^9qVPQjy>&M6PJvVujPgtU z*^iI@{swUQb`bTw$4Zx0Xi5cCR}WNQJ6p46g=UY@;1}QV?6kf5)yAQUWwBAaC}Lt{ zBrzl7$rE0e)>tsj;%K}Es*;!DJC_LAGQ{~TM@)O zLKUtcP4&frUi)`he`W$ljh`F796M2sZIEpwW^k-JZVRa4VUP34lcKR6J_Ln~h*wIR zJZ-QS$sg9Qxu#M2sc7nvabIf^&~Imj{J^rGjVU_q_sNdVPQPdeQZHf`4SAQ^z0@eB zZNOejOY7C0M}~$T#aNaSheUulC<8`D@tjHz`?$&MbfKK;YHk{u<}!lytA^I_dwF?z z$@jGb6eh^-pFf{~T35Op3<(nb@NH}8XhQq?UObzXvUW-##X*7gHfgR?4O3`=N-T!qt*6{Xi)<3j76y^4djoG(nq>Bj( zH=k(Hp?{KJ$WsjByry7+l5Tv@GXW>??6+D=lrKxl7~HAinUjxx*msuO?_VV>HEvKT zgA%Tb2&SXs+>xw+^_{!Z3iz7zWT9q~6a7;Qak)B6StvK>O(LR{^pwYy>tbzaw1}itE#N2;-N* znhv@YZkS)d3=B+ZqZI7qySl%AFfzK=^V-HFNy@!Ll!j06R`-Jk#}&qBs%ZfMCc)e{11I0T9)@(M41&*#-w0ozSB8GxRq-b0p}Y^5i|h0=eP!Gj z>qgn2@MbiDt)ru(z=2sYp3=lWJCkZK*#{Y9Mm7wu;u2H!S zMSN~#e>j-43#TbNjhX#GMt*$$OcJdq@5IU^L(SXr)lk;Pb|^x^4Bp0N^}M}foaNO+ z6O%m45ez||bA=deAj%il7Z)tw*m@t@SZS}}kAQl@H2h@tBK`5<&Cv*zvsw<0`As@7 zK@Q`M_l7I&qi4-*4B#wzB@ODPY@PyGb6WNfDxffzi)b8#0t%1QfT^M|_@j8FBBN<-Fwhl!)G*Zgi9@W<%)%7tTf5A9{-n^c-~c&@5(t zrZ~!e6rIYwd$<6)0f+l1ncSyOlVPY|ZED6<3)@@;1qEUZMURrRq!oHi*dsT$t-Je% z_AGLiBe)p?BlXQphlVC}5kPD;&J@y;H)xQh2|hvp9T{x77SKw7RNw0d)tI0tl=*_@FdLZD{k_{KS~E$n;EdAC4t!ji29?jfg# zkUynFnwy^D1P`E>5HsH|fz(mRAB;~qfgh;22LJEx*ZJ?OJd9yG(a(46K*_Z3`Zed@ zpJNv!ymbITLYJ}Bl$1%(DE>h~E81Gk1Wvp^571c2^q2UOJfgtMGC`Uy83OkmoNnjH^Jw0#IJbLu#wG>PtnVWku`UwPnpl@e_nLZ&wkYSw%c7*_A82tu3 zX-aU$3Zwob0WEn!p+|<_N?xpp|QDYXhSr3H6aR;DAfo+f~HH8DShee?5$h zvX~D(@8=a37AEpW{#gl-T(9RqB8^AEO_SLP4LP(-EG&>on+^27)hd`;fiCEQ88uWv zkuP8R;j{jOn;&}0tGE0zCgzy;amgS`KC&}s;MyxEwd_YofdD$B|4{ku4BTj=`hb7{ zoD~pm)Auw~RneaNa4v*j1wB27Ls;6 z9k!gC#dkfxr6(U$>-8KYop&T8K7IMZNI*_~Y%M7{8Mr(`Nsxso^Vb8fkwrYgJDgkr zg8@k>n`}zJSc|}TWYpBM!Zb0|e6}C$vY|14cP!Zegats@(N!C+%7iq(_bV!Lb#W2Y z|M=kp60Y!LrR@PMkO+1VbcU@2H06La zoH}uW$ViP2twp5HUplY>SDi#@8+Q|)(%Vu9f*T#0o^}FD1(TPjr?HWdB#iWSJZmxA zk?EFx(7PA(2UYek9tF5Ax}S+{?&f0(b)fSb_Z2Nr`*!B_hldXzcF=yY^DG;hAAjhU zE;%=#bn`D#1V6A0**?FNuYhi}iCR-I-h4Y~aA>Gg8vKNdFJfZu>*%}z;3yhA$_N@l zA>ABG7a{`#s-yfAMZJineYQKjMpLH#@`*XpPZV?-nr`S@1H<( z`qZg$5gn(o7=4vPApIryjuPWI^z13#L`-5q0R^?D2N4xTGD3a)KB*>cQ5X<6UXh2A zXLxkfKvx&c6C7YCI9vbm#Q_Zp40yrnt3kC%`~!8{&|(@4mhWxHO`=-iaPz?Hyo+uF z`0EzTvJl#s&bD^2wdHaiB6tTnh>eYnW@+G9d*YVBmnl`Y0v3QMCvZ!2=!l58&$THr z5nvR)fuP?Pf0rYH?dY%*0%{W+Xraw+P>wx`^BhE7oY$}G>Fbk{klfn>_sQbYlAoU+ zYP#clno$S<49d#N@Io%0b{MUV23c%8A1W}m0%R^AUtBEGd8}jp}|s8 z(Lxj7fU>l#uBv*I?Y)2y!nWUY$uRFv8v{Z;oz5T5%)|tH$}KPW*4t8;Aj-tZz|g3K zQ~o+VT~kGcvFS=xWu>>~U1{leLLwrQr!Z4fQxo!UK79)A8lJa<(s6ZekN4^4D<(&_ z*n>A`;EAJ%esfT_>?=o`6Ap<>yH(Ge}6)HvEaiNdDr82 zX+k0%`jGJla&q6Pu2xNeMxBoHj(Y*{T>dZ1l{7W4&VS@eQgWk%tu!+UxWMrTK7yc! zAA9u(!e%FpjS~AyyL0}crVyelyle&T8tAyi#Vc+FLC@|*!Gv{vb+cF5?#Tt@IE0Q_ zVrh*PxI`M7Vt7zA1os5u8^&C`_6mUCyZo&K!MAG#QTcI6y&WAMWYm2F+T>VhkO>H@gMaHEiVe3x^3>UM2|0Pg!fi+H&I zDOQ4T@9Pz_XW0Em57%7<_aouHJ%WKe!)j1p+NTkBzvD(9VmwlgbW?EA2(sc@gPI(! zOtQ(UGygH%(Q(O0EF-t$&>j2J*%?x~PHQEMeIN4kO#oH5+rI-y^=!mA;P{6_bjzvh z^Tyj)DH?P8LwM~{lseajqxekEAx z-(miD1##3Z`4l>|H-CrWn5Movt~m16B0ThWZKgo1e}5(()&7k~iYT}5VTUnQ9lUn` z5ShVQgO0k*$pA0N;Z&|pjHP6c$sEchDZ56=#KAY{D*P#wboURWUfjK)uDf&2!xDax zT6l^$bdq;`Kj3e~yJ{#h)OLM)tRZIbf?X{AMe`f>wv^70)f+f`YQWkeH<-yA3(H+B zrE*o%Vf2!kpH}z6*Mpe&k3Pdad)N=)SfZtbyZ z&#O5sLF%b1cXU-BHRtw$(8Ly@3VrQ~fZg~Vgrx3`um4eDbTmu{33 z_0qjl&i~4N?|occYhpZQZ~zvFL6GLpt*o@Rw&q#$V5?i3i7(ncGBS#Z!Q+Vuk-$q& ze`ou{gTv7B*Mg6H#SC9+zotJjRZI*Z2 z=cXIHZw_Q0A_WiG+IYi7!W+C6R(DkIJ8b5yQ_y)DzB|0?Myq=gY2>!EiC|2&`lkz^!K+bdxG=5DN473FQXxvL$qvj%UQJN zf>=En7c#@F`1KBqA$M{v)aTBw{`r$8B!c1XE4%u<#pXkxyMPUM0Yo_Rc1o!4u_ZKtAS z1?S3UV7PnZ%`*9p-T^%}6PV?tn7FL&b+|;pS$Q0*LUY^zEQE;TPa5 zzJhkHJpC~#I{UmY!hH=64Gi!*uV=f9014rKvE@TX#tJMzOIsE76}GhmYDsM`i+nnF z)R5e>U{Mtn!dAvC}aBc*vD3zf{k`UZy|X!s zq)znq^em34w<@A{Uh8yR18-Mz-g@k0%*RY!%DP(5EXrpkX5t(~6Ys)8qD4N7)I&M) z1=~{PgEg(n^6==_s~0qmcF1!`dpfDx_n_45dRF%Us9|3V=jz?Ap9O4wymg-k6Fd{r zvyt{{d<>q1adSu17i*)NFIUo}{P_RHgQfNS#e-?N?D1fjLMT%O1S-CM3#5y0P1Sl! z#@#|(pEqZxe@DS&ULz#&U3m_6aDV$@VO;n^^H^r&ELz@G^|$l~>Yuo0SkdwcVXt#5 z)5-O-9fWlLXLRaw%R0N&+gl9$@(Gpf9P?iY@1aECKFQ5GCnE@(DYJ@HF)CyoBnBX% z=r9h2-J3m#A(OO0k(emUdySi~`!ogjQ6k1*jB?@16>q|-G%aJCLxMI5 z$;tE6*|QiIm9AHe4c_7i>p9{+?#qLN%lbO7WAL<3sVNZu!nzZj?1O|Td4@s}HwJ{u zI!EY*rBk5i*EDLrFr5uZS9SP;4DP@Nz~`Y`%ti2Vl?)Qf>Dd_5jBgFbR&zML-~M!9 zw;<`ypX}#DIDKD#>~v902GB-YJGFpM8_EiW4J>a3us=M))Pq)7shR0&b7_WvQYUq~ zq9XoYfz>VkmDe|QHrAAF&eJ*3g-BZiTvQI*s_&-Rdx?P0$%I@!%`L~> z=vk=Ntmrb27+H0B4lvhDYeNOKTj`{@?H$DZNHL&2a|3yC(o_CwqxPt#eRLsE4!Q6> zh6xd{J;NT*LMqOqZr}GGVBz_J-A`1ELI5PBhJ-HtpI_Vicv>Slk8pLbDIAA ztOTUB2Wi(vXnWY@(9+WO?_H+#^>~??Y)$@}qP}|F9hq05!O^DNg8=qQd5x>(Khig* zcCLa#Og}{Kjn&xEr~Q9w{Jnc~=eU30voEe`@m!CMm6S-mardfUDgXWA7C=U`=TI>A zI*yIiFJUd8!$bMsLKl8&7Bpxmmo3X5r-~pO!g`?MAby}oN;o+JkRcEG-2u1-I-g|9 zR}7vPsmtPEJXWA|{in*`UD9XnXgV?GJCF4Mqxo%;3iNTw2zdNk)3u5>^<-nOs7yJE z=6D{@KC;%-B!6J<+2Nv@iTBG~Ty*L1XE^8Ag||SWrgRw7DWj}~8ROfb;?GT|YpwQ! zPj|ve<>yT(W7GY2tH`r7>bK@J8b1hk@y$h6q&}*ysk!wHR-66aY9p8{WS-a9ewk1A zN>*s*tM+&QtG9&9^JshDgnT}MiJ!Lq?E2vRjib#k@4fX9|7eRsnVXv89N*nEEV@FYx^Cvy(LE(OhqiAlCv z_C>4Jt9<){B#RbR4P&CFU|`RPe83s>J;9kzXK>Mp3d+Q*I#qA+^%;RD&3 zaq%mwQ@zsTeNqdFL$`kQk=!urvNrCE}DG9e*S&A$3Lio`eTbyYe+xQeFvw zvwQK5(2HvZ{sOn2fbdW0q#h*Dox;aA7&(1jd2Y>3pZg1wBj{h$+J&|i*IINrx#Hdm zAL=Rh8@s3Try6~`hE$_{)3EF>Nh^l_n%M4Xz$YBxa587(519xKc|2f5XK28R=Jw-t zVC8}2o;(`t=Kc1EL%W*^yzZ%Z`%4jf-zoljRcN@Mbkju8frI)wa$R23<#Ku7F8WC{ zR(gwH7n7)nV`x#|wLmGT$AfVs9UHwPTf?&}T#&AXU(P4%|Kpme)zoVru* zL_q~a{A$j+vNHE8B_H}_iDtfS^7JXITe&F~N4`UKDvG?YuqUndEj=6Dh4Twd=C?rH zskY|U61OO>-EnQ(n{X5%_s$k0<=A_WcVWJ&T`g5OhvwJ;#&j^8G`ymdwvmd`B`jC^ zLdusf=Gt?;DH6lxx6YxZt<02`kM;Pt;ZybrK90e+VRJ=eT9O5ajUFZK%*oNmk;W59 z_JUN>`YqHsb?gt*Kl0L|mkZ11+!KYxaz*{qalwAKwdJhFx}c}J{eu)2W06grtgMO1 zm61)t{}61G_#|l8f{nsDqAx5&;&5kvqWQwyS=|Lmp%=w?L$;#F%r(L(_wMm0je@WnFx-WeH4?WdK2qT70L_Rg#cuz* zx2N4?fxTh-!hBrXJ*L|I_+8sk80$={igRSYF_lggSv6C-u<+&P z=mgIXc-`ajL1eUO7(9@F9X5cV-HL8jGrRB&Qqh&dI&U0k^cP`*4S{f5o(gzwb4)U^ zQABN7nYSj(6{+rg)(D9>(Ao|hm-X^DwOSsM4UdQ@eYAR)yl54gOm<)KSEp*4xqrhq zzt6pGoVnh%Hp`Lfofm_^G6Md!n0WK<-85I%!dhKPU{VQ>ty%*xzF$T$)rI!z?{kA@ zXg`U^_`RA;2SNo>nO|o9QWmf9-(%s_- zn^Pns@~*>9mzA}`zf|-v-$=do6Mw*;^GL%6se+&)a3mkhAC7O#)7Yr{!cf8~gh}}z zWzX+(1u4nwn9OdtCaumVN`+MK6N2>}!$Ap3ESuXEN9K$5tlLwjt8!tNBdkyuSO%l7 zGt_4VW#VkPXI`yZe`e}Vqf~i$9*$j7vVT}7Bs@36SCMV}2C@Pr#eNXFz@D_(4nv+`5&r zeF7B@@kzb^?+OU9Bmic&iwq*4;{aaCwDA51Mm{DuBIrf;zs^6hzX`)7++#ecuCfcn znQDN;!TB|UAniH~;5+|Ys`P_{Ad2WVfMxr|E0kYwW21=v6eKrUkY5iY#{g|7^NPQ7 zL^nAj16N^?C19@tT;V#gcXL~u=LC3pW44eFB^1Vlh7L_kbk-RX|8-T& zk6t5S+f(f0Ht?{6MWwb{oZ8PZ`OTZ}U}ym+PPzN-;1`4W4?iF`z>6k1hE3PO)bv#L z)2E#S15>=sv2m1N`^p0}XNK*xXFg}@Y8acCO(sk(Y;nSy2M+@0Q@FkKF3s#@2SFe_h zfXex?scC|k_cq-4V~fexAjQ=9+2j(WFKulBQ3OdLstO9FoVOp#)3UNQK)goJR}09A zgPH8s5`~NxE*#+AUvFPD_5fcU4R5H3%~#GtMQlD#<rm#Z{=grj$jyN`kD7pkcr6`55{LEQ-Yi6lC1UBp3Be( z`Wed0%a4~$Pn#aV{i{;NuHW2$A*b#`f&6PKk|q7E(Rnn-bs>vE_hV>8ynO=XIh)kw z6%~HLD4^tms01M2?0YOsIj^4tk;(Ms2;@7?2YZ2*(@o!%^MQ?J**h@2d_t7rzp!IM?W0QXj-Zm#DK`i zKn}p-JZ+`HYJEiZf5@$C3tSu=d=`TuqM}E1zC=VQBTDtTH7DZ>jEr9VK9xX6Nrl6c zv_5$Ao=iPI6)O$RO^Sb*tvbBqW=J|Xa_6{{_}_1`ivI5|f*);#!)n23@^T(Y%Muw_ z#BD1pyKw1}x8uSc7Z zx_b7~6elOA`_eGHssppLn)mNl#{v`0;{;iRH@LWz0qvQ>LKbh*e08=(vO#y~hn!7#O12ATTK>(jq4* z=~Fov4f5@hl9C@k#0U+)r4uk>fokeZU7j$$^);uzzn{ly)Y|Gp*Z;|XwHdr;h%&x0)zr-3wYQ{24g}uIjE5LQpPytt8zN=euP^PVZtxjXWhLtiA zXwgH=v=Wl@8f<&LSMbAud{a~BJ?tK;UY$S^F5dE<9z{vdE62NIngcXG!j9|Ctm~#&?yQha=iYg5&n4^4GnP%#uqOmBTq6z z?Uk3$C$OE<*n0IU9!cIlZO}0dl_8WhU0wIv+6=M{?vBpwS&*_pD5tC2hlrRmJv@&1 zToCCJd15;}p5J0uy4H|%r{C=1!-Vv77mys;h+BQ$DQ=TN6Aa$bduB8S2;rYDHJKX? z2AGg2S*;>W+vBOpqS`9{h(##OA+YYW1>-?xLYCjy{Q@;l(_2GX2x=4nslWeOUD*Wb z@PUEvIFbGvtk+%AKYWOA_^Nw zXl}H^MwMgV1!PT;y$K!cMC;OL*Rkm|y;k6U3gSmne0Cabrt|HvzO(8Acai^bNFnA? zeEp+&&(l*U1fHIGNM7L+Kb{a1E4wo0;^KWNet?f5;%aEbmH8qkhWKgQ zINzIZ?$!eu`nz)HCfh+r3&~%COWi#jcF}#odw}rKKW0R`26t_`g)wHm zC}(D73d$B96y@E#^qAbO1*kl|C3AC3@!Y<~GoT~n*g{;~zytbH&v~EG==bj{{67C= zFu`~n4nA|?8Q;Lho6_#YyT6X(Ogf_T2_ePz9ef8qZ6-413kKZ6G} zXo8t|{=Ebmbiw0(<~>&;1F-BDZ+DEps49Lfq#=C=dNoQ1hrnp=#?bBeG4&YHxw84K zaowC%(n~=vv-%y4jZ;2+7zN1ZP-z=>JWn|iWd{rif+v06d5PlTVZ{`~MN{x~(6dzwI zNT_`Xi#E1vGl%lw-GKhG^plPg*j7M44MvuIKZ$hr`+*Jfm7?kP3|8k8WLINZ3R3!Z z4KLJj(lZYVm1zR8;7DO~+FVo45pja>zb4R0*1Dq}3tol~tylZfq(j4=2_&a)e>+il z`GLelXv>EtQiR=%OoCUzF5{5%>C$6ZyL2|5SZHt)r9DjAPbS}movZ2n!NGy!jPU6< zv2N!Yh(21aOq{KQ)S;JR?Qf!|ah&i^oM-|uNNX$UF&xM;cozfVVh{;AF3<+K;2ppE z%X^hGG-vwzZz9?kB+n}V3sJX_%s02R1k<{!YHIkL*FSrCdBMXErWNj>ivT&92Rto9 zODhWtoe_uvfS^BwU{$|&4~*p>-oMv3FyOLZ(8I$(^Z{fhf^xKcXx`GwsxuGdJBw|D zE|Mppu-HR(i&1dTw~E?2tgAaa17{kqvkzw01>*S8i*0T(hwlkmYdd$_-y&L@jlcj9 z4?p0miKt^R98l^7j?&S7Yb!qr9Gd!6(nLnjdbgqVjT#SCzkIbeME1CkdKHV1^^X}} z0_qG2*a$uXE7$7oe&wNHSp2iYxSzr~%F4i5;~#`bUr(v3ohCP5eo~G1EtmGji7P-; z4Dg9E5M1A>g_yw~*$v-ZH#Cy%?C6e%a1jo!OfN02f6_>6IjLd($>Ta@OqEPA>a8Y} z{gA(+ucsFl9uA~;S4RiIHqi}YRRtZ0-~k5^otgDRsB$6M1|s|imO3(Z^@sRcn-f;| zWo>O>%je#Je;zh{^hg2^5(pTcC*IZ{!Q@AGR+D{m(H0uGkj9tZ32_y2!;0CEKMUD% z2*8#|2y@#&BsDfRhD6k|(*T4N(2+fhdPh2SWeO22A zhwO~g*PmO0vy2K-5nQrp8|I)o3gg?OJhUS5^A4Q`kQKcTUZX`sZKWI`f> z8QBTrOer(%Mk_-`3k!f3n!d)AV$W)BVDRB{IY-$b#G5s@wmv4rKscltk3gZl0O^3; zuBh%8l_y9LDfwbh9K`v}q})9CkmUiTMa$QS2r{-W{>0;=ATi!0PZbuCcZPdrrIoc!DJ0h`1s`tTFh_B|co70Ab2f_H? z9BR#O%}@N57~PDqr>2hY@7ER*5@HHYghF-0D1|Iv_qXEhDDk0NzsyD4O=oWf^$o0njD&=?7leuI?{e?nWm`|k zD=R#B&{Hs?Jtk9p`Y)V9@3_K6C+IN0B_|u%*l>oQKX-1`2^|`$03Cv|G8rvQVHHl6 zFJocLw0E?SmnRw!xBgJvKM+6Awm5vP%k zVjpmHaQFsH3maR0;a&d6X4@;8nkFVw@QE#M+sSL#$RhidnVo$e)NATI^oA%t+v%T8#(i}V!AV3y zQZ`ozEB@;7B>LwzC=_Zr>1+yWH>QHNQVfh^(y_(Mz-G`w6vCdE0O+*VA1KdkL{t_Y z4V(otGqZkvCS&WpH|go=xw*MHm}F}yDEv3K7pzg+oA%2I(u7JXDktNK&Yz!xQkY*; zlsGp%_ZG6H36dYfNvoy;5NI=>d^fOSPn&ryykcecLsHVE+)XhZ4_xuwyO8K|c2O0c z%=MauD}g1Tvf1uM0v|xD)kOB$Vra6XBgHm`I?EtRzV({WhJ*w|o77$1)bxTBW{;~|?~z7QLBADRJ5(c5WJOI zfK(pPgmt&tS#)X#;}Jwv1knASNM8Pk?F}}zfnRH|Yr$4W>QW8tPyX>;$YnQNf#!&k zlM{db&{d~=jU1uNdkE1!TNfrjoriT2)Ec(kTSR+ma`?l+50fDnfQc#P)2C1Q&hoqT zTRzU8oQqw2YF<(futS2OyA`n8S8j zbvf2_{k$IqQy>V6T^aYOf%MnUZbQc;uXzbHpQ;d`a+3yx*!{oOe*E}>E!q(zIyMk` z$Vo*Kp}Y_nCyZ3;YxfMC%Agvb{=nDq*EJ(}-DSG4Yp2h$>jejsv1%5W_3|=(8cDhI z?&HG9Ef(aKBM*8Pu9OeU$7Z0{Q(&pX%jmTLeJq^wHBqFbPo;1Fwto8+>p~Jhq1j z!d*d@~3SQa~?*yw=g;B)tSFR(JJcj@f$;t@IlirpgS%(>};_PV~nLJYA6a2f+{-7|Rp3^AS>e%xc2^ z_nv*^m@ka(-{Y_C?em%j_%v+pVfm>Ve*O$TrdgkDX=%wXAaF2}Ai;VyJ?f9nbIKHf z(M-1d&$<9@E=z_95>&2mMxmG5)B(YQmwq80%1v!!V~FO>c+S5M01DqjeP03VqH{>3 z{JqsisF)RF4eGLmNXjb6VR|TC5U1Rb2*7C~NCjHeE6JyY(+`G{9k#umJJb z>@u`ZsM+<7-Qur240{H$T5xPmI_=DEa6qyaJNqC)>fmIo#>PaE+@+oq+WFQ&7$D@- za)yj73|eYRD0HaKol{hdt;d5vi5GYi>$IbFoQnPb2X@q6zKwvE54-6ki2VSZ4Geielab$S4?XghBSc693<0v+S=NW zA3H-{o^t%Z?G@6Tw6wI&>x*yB86z_U6s;hB6CWQRZsnmx&>^Sa8jz_1zamM;KJZ+~ zf=Gxz)6W$y*2-lCz8hFsLAU0AsR#ZyY=q0oYmhHGAfOWnFSWJOpuwb!zhI-p2dAmc z9vbtO0nVZZKFG}t42N3u^2C-^!;6e$ z>Qz==VrG5^X$>ahr=1Fpc?>&)7cDI9X@mjs@Shs8z~YEq68?D$~m>f0Ri{1j)6FY2~D> z9)qJDx5=YLcCOL5qF`xGa}lrci6vM^JHW0gTKy+eXZRe+tRnaAkjOGwlnrJ18>T#X z?LS$9SU5jl;a7u))Y<1xviBl(j7&`SGIpX%QS*d8+hoZJKlI~m5LnFRzp&Vn#9EK5 zcIv~yd{g4JK&R)cRA!WjDm~Y6&tlfEo6d_1+w@Wg+dT zbGf~P0A)=8lO!RXq`F* zR=mPc&tgOIxZLPBG;2N?2W-k_TuX1iAIPD=JZQy&8WM-wk;koe$) zmx66lYASI)wwGMG9xD9~(juQjACkWAkOgz&r0=?v`lJJ)L8E^xGI+7)E59LR5k74D zSVircg(`mP0y=4sW{a6Rc(6;V5K@FF(38-1f=1we846&HZ+9MY=~vs0l&`@43ibwo z`~5<#A3mfDV1}}qle4v|%I9KXdb-RxbbEU{aU`*milXA29sgTf3n!2Xea_4zJca|o zvnF6ctFC6cbcvv7L{>1PVBy3c2GUU-$(#VRcB6(B*V1eLc!<-sHdO=YG0@jGECu%f zw}BiF(O;HF=qiC{hBy+pmeG+DEiL40#B1bNy?-wm!%# z(aH)7Z-HlZ%ePy1)QHzZLTPW)`Psx9+*waD5k@c_Ts znXDlpF%jzMX7{Z8X~cOWN&FZR@0)%)tjtmp5xq@I6L4C6LKqJbw(U3b(#6EY zfHx^W-w{&xtfKf(=|JGMYwVFNIg+m&92~44(=^dsh8Z?mT17AerkkDNFDeWXZ6$53 z%2YBFMix~{512_8k>=-$IvK9K^6>=kUR$~b)6DF~>r9&&#W-UMe6|R)wu``aNLzMndPxlfQlYCQ41T2K7qilVf;zuQ&|x z`iY*0;r%gQ=8z+1ZW-=X@N!$E3&b=QJfNlLxV&SXlAll9t#kP_2D_y!tL;4FFi=O$ zQ1~Y}eBOBu)q|%_jf{KH|zsUV&7EpE|Q+Uc(fJq5)wj zyssLT3kq?z8=!ljAH0J+zok_jKf~i~6Ft7wLlnD^+R;kFwc6;=s~YvX%ivDv#l?^+ zO!LhDF}h4T?EA8#9=+%l&CSVqkhf6u75c8~%7uV&0e(~` zR~@6haeDwFGCZ+OVr9`~Kh*jCHe~T3vuE03)%t{nCE!yOAwmon%(}P z#0*EciV&TTB>BAidp9UNM>1?4~zUEO18%HQa6kB+4a@KV}fe3fLnVO|>-DjX< z`b#ZAdJaRq)d^xFsapf$VA&_Sz+?vWM^|&fBxkm#0IXVP7j7Qsbd zSg3LM@YWzP-H4D}m+nM2wLIV9DYI3y!;&#fK>>oDnK>0U&`(n4=2(c9U0q+F93KZ~ zp=Wi^gklvQjK!H57V=L|pKyawv6;Bh@wJ_dAVOMXm$@up73R-pZFRoT zpl*;0_vYd2|4Dg~ntrde+E*XkMIANmfB7=HySv+bQyhZ)OIBsP=I7^mcz6K3fEkeb z;o!1`eF>(~xDUaYmG9g1&A~(n;(5sQ-7^VGWI!Ja&eA^+WpFxi z(hJp|zjXsdvLq9kXf)N&muF<1eJ_djV+GZ=FV21fLPS&<@21k$KwHlBqtXifzr;8oOQvj0F1pv z$WH&Jhw4;)aXQb?qA97?4#0wO`yIRIsC?Z9qD}6cXD($RbWA z;;a7Fwy!}a!d?AWv^YI=1R+*9J8AnnHo zYuMnD4$KM|8|YTiJQuI92y8!a4g@tXM}xn97}U9vX>!^~7@@(VZ>FzJd^YgUB{{vx zw0|bDJ)!99`#QS#bHQLob@(%g9rLZY*&`d@1Hw&6a2ixqP9UF`_?qsTry;H3Prb8< zAmf4@;P*3Lc%?s{ZcU86T7$)O_T#$%Hzk6b1!)IieL)t zv+YpG%tAlE=Eg=f7*6bkg?F+9g(;VXc!E8KK2inI-`JK7Mnka&9fdo&FTvd`OE6P8 zq%!^$u@jm{XvR+DJn^2~^VC^u;Jm{_R|+Hr%OZ*9;|?_byodSm!~dA7(|j$|#pva( zEQn)bxO!wjb!{Ph^a#;q>H^^rutg2ZF_A>_UrdYo1lAUOA!E(4dm5n(=xTm;-y|8o z>Harg^sjIe`nZ3?I}sxscE^X#JMwFiXZ2s%KFKF%>m8bAi-;wn!@RM(H)=ue&coXY z%7bzV@D?F27^lI1Ay6lhrtMqh1l3-?LCWnS> zfmeKbaI3HLY`uq6B5@suv~*D9u^3QxzyqE5@TV)1w=HIS$!pRc0l&|Fh}cN$mA~X2Z+|;b^WN2uk&20dbf6g~ zCv!O{H_PS~p@o4K@^Ne4u$H_$-2(-%?)Ozf&IdpkYOL_2+rYsd7aLprrwVw6J!8~9 zv;iOxaPPgnarLcZP(=n%PCYW<3S;3l$N!xYR5ukxJ+#s251$FLU#)X)I>V>Tw&C83 zA>0Di*G_vcFbH0dljQXVoM4qqICJF+4x`nwoI43izE@r6SRx+0h0vYufY5(ut>HEl zg?^C>A`T&B$ET3YEylYG7nBWZyoSG{*vZLpp?v`mZ~4_A)G%A^cKNq|1@xr};Prw#n)Bt$C>|ITRMI!G zbf-(u5Cs_TaK$n;xsD7)4O9uPT#bq;1lE%FdLeP^#Qc$*f zn7!!Z2&YJP=k2`mC!Yov4Xw*6z1Agj1dJXg1m9yx)FRe>7=j0?`L|HX^#&q>2 zHz;RsxP_Yc%~8#5mJXp&MVN-Q)w~tU+5EB1`i)_gpuJHeQ4hyRJ9m zT3Jz_KFRUf&;P~|la+N%v0B}myq6m$Tm2Zadt_c?RYZz~LP?z&TXx55X$joXc>kgI z4Yn`AFEU1OYs<$>gL^a7ucAy!f5?wjmM786WhD{gVvXK@Y2IMJ!)rNPK^|zg8Cp=^ ziNb`DTWg)|U1Fk=w$x~fVtW@WtN+dSxrRm=?{SIz1^&&s!=MEf$e-nVMDQV<$atp} z^#MjsoMXB46n`)A4^ZG$z)%R@b><+qBa0f@w6`Hf|G=U~^Td*KgHX;gcC@~(vdaGJ_LFdfnqSLR zg^(j{v{p-aZN0B?avEwswW~1UXe&gVs%pW#qe$;66O-jDkb=KdM|g2zRtF@+mf-B(<99HmAylIGJr+{am2*veMG(Fun1!QS+&zrQe|dqU5~}Lk)t12|}w9j%NB(@HE-K)swz^SE(B^+KoHy zf^r_MWI;g)$w44jq=bnAFgPN19SsmNbie1#3)uMiH`BiK$&V>3Dng~t6E9)Ydd;TQ z@R|*0zpyWQN)DsO{UXNJ3w?viS*?jQ@4l(&q8t8pj@8O9q0hW`<>nOxL(5YyaY$~g zUv)S~PL6`PgWWT>OLiY1gV#IJx8L_*%?}`SF)+{BwsW`)S`di%(uYu-!SA5vnw7_t zC%86xIt8GTv5@1@Q0V_4iQYM~2BtzV!&sL)>v5>Q%udt6PMB&D!M=#aXtDRW?rd3V zbaI1`_P&o&fN4ng3tTF@*P-{hwU%M#9T5S~Ldi*1=;#!#Xienfq?lvSpm+u!PH(2J zSC4Lzm1qw`X|t@5b3n=Wk`O^R5BkG`3CP24k#C-QhZWk?X)3Uf?rL0-p_1ydk1pg1 z85Val)O46&u-8h{D$<-89UH5eg)kf5bNuv81&eYxDWW;S>0nepN5Z?cdEF^W4VpNH`KdRFq13z0>TV7!3y>u89g?_Dt(udmX*&`b@RM=M5kjQ{<7WMDN@W%KaJ-MYF$%N@d7p#RJ)=xFj`~QszG2Z9cyoI4>AInG3BVJ7cjSf_v z&L`C?Si}c7?*Bx!ZlGauv8_FDyAZBLBUOmPYOYa+yam|<#Q4F!}6jN`^`BR=SWiN#uTKhEWJCPo&`_pV1VSk?dLgu2Pz>3>IVPr~~{wc@0u#08Q zt8L&!MT~9Ul%w@$HV&&7QbOyEg|lvk+fzjt`#~R3SUsa*6IG#D`R>6%x;D}x7v)@P zSAJ&N?@Z@Ui+A}aYKv|Sq>#Hdchz)kF2BNVFRH&|dtgRe*22e>T|wNf5i-oWE~xwC z6yZ2DvMb$WYC*ofQZh1qFl!x#WQlav8DvwKMm~m(xoI4>rMDX|VD*nfK2Y4$2Iw^L zHO20F6{6SE#b(s6L}X>LU;adbPEViR%4HZ+$|x{}32K|3=goq9A#Tb+>*Tw}ORj0~ zE?v1oqM)+wGFp2!PYEjO$ab&{B2(L{A82aAXz=ML-05=MQQsyxqQ0G*qZP$0C1DTr zreTZHO}Aush8Q*F^66%?rnX=ItjBFIyw65p2!_>ED`BXet9mb7o1oAKb6lQApq*Dshof5_B?bQ5W{*9NX zrxe#^Rb}OfCe-Ed9->MQkv0&l&Oz6o**%X@Nn=*sn?vc8h!t9s z^z2F(XyJV@;IUAolHa|PZ1c5bz|$DJw55fY8+dTFHTO{Gw*EkM;G*-GkPv-t$j&eQ zqr&E#7sPDd?hIvc*~Qkb51RXymYiZ%xoXX7CC>O3yPbrs=7T7y@D?UOjbUPFqdixS ze1IuTxknVa=hl)VUQqB@mTheIwG8&6Fg9D%hZ*bY>e3TQ$jAbzh59)C`=yzfn1-Fr zGF7dYT*-IO;KQpDn6cVuogBQ)>0bsp&mmj5r6aQ{v0>WW#j#<$QPS;bbSsSw>(Z9K zS&i2AbGBB=#iPW&rO(5hfN+)yn?w5zZSm!@ibF z7-z*5AyTuk zcD*7e=pj&nR@Z%!p)eAQAeaTxEU# z{?wVL>SlQpV^fjmPZbUg>5kYveAx4X!Iiezk8CSV&x*2T`@2`pP=%{dUw>}*`gE5D zQ-*2g=fD%kjvs$@O=sF;$8=HEV1-yfGsGQzc=g5Imt0l(y?X4xsW`wmZkTFwe7fFl zcY_otZc#GsqJ+09(P^&$8a(q@*My#uGSRC8r+TncaPtu24wc&6mVTUZ9@h zdurz6>nndA;K3<&j&+xSPfsqufGdTQi*X`vS2R$cW;b%?U=aBE0I`w5i=jp^z}3gc z2P8>yh1i43lDGEmV&aE!zT?igIF|@|dX00$#Kjw8dBBa+WWz(VzvCxF#Jt5`Sfu=k zx=ZuoHE*v*es}jXn3X;5*gwSwrPk$jncJA}71wN*nC?xX#YIJPrp&}KHrsm_e4srE zE6bm0E&QDclki@eoP zz16>XDh>a2sq6{(R4{~loR5a#fRp_GNp#S8%<%Xl=L3S5cNgo%fe-2O3X7D%M00F+ zG)6)Pi`MH~lokuePF9zMw7@j61RSSRC&d>e=e3*-2PEL5C6bNv9m4%AxQ_SdZz9Vo zn24MLPaKqB6%{=P4wW$;`RC|gQ#+LQ8Qp6pd*@ErDHz!8PIz!I^f_`T@-h2&0`K5u z20X8KuV2$Z^(>&LiPrFWW2-&MgbCeF#oo~n#c>{X3hC zT+8dFgTMQ$4V=A4`4fdaN`{ty-8qeP>E?)M#)F~fvcrMA3md-U3Cz?0^#zUdG_IKqjh;~T%ae@=?;`bi9reF8p`@Uz7&Fr&cva)Zt zSZ%%utWeLbw+Lb~kzeQr@tJ$p#q!*jyN%OJv~PrOcYx1lfx98M;aFc z6WP*bj4R)BrKj(C)uykf_iVdOLc%-cv+PwIrorK$0CI@`_3l@$w7mTJUBH{|UsOA^ zaR6h2k;(V|+_@itEhgY)T~A)i0WU@d_NIW!FO;u+4ZhtTQYnD0&|`pH9k{Ov7-GPz zRo}9+-$ed};uTN=zgW&+vQr?@+q-*D@Y8r*b7OAM6>hulB|LSU#s5VhORUcY*h$mA z4C;pPNt^jhSphtfbLCQCDWst4@L3R&WVWt&58M`}s;a8&-WTGX8Xgv=v=x$xGwhst z!8z{Pm%qThpP!$f?+5N@-k!KI;$FpLUT{$byq5W_`wDPUxbEc$yy5%Jn>_J&bE)1( z4#2gkz|{Be(Yyc0frW!??REJxwM%|F@Gnezr3Lg@^@3%~(i+r(&0Q{T?o{W}@0-qU z`~3~rbqld?$yt4`VeVrO>|EiXK z?iX+n@c{$uUpny6RRiE%<*FZnWv_(I0$_-Puj1Q%jr-M`p6`pNrUNrG^g`;=h41J3 zwAvIraBy;JieK{^Sb){Ovfg|jSPc4qZj^I63wHDO26O+|yTE=uusOQr&KVtjFuckF9^fG*Ah1t}vqW!NrwZ=80f;@I{d|GKUyC1hD89%{L2dkVNI zAgnoV;nz&N3(hNmCta>^kBynIO%YC!k z%o*6V2VO)8X2CxlmPFydn zw=P)b!kkeH%881s(0~J$RUiPo{1QZ=@*IBDdrv&CkQ*D^2a@!3^>bP0l+XkKLgH7* literal 123915 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 S)q4c~lao=t_F2m4$^QpP<{o_j diff --git a/contracts/docs/plantuml/oethProcesses.png b/contracts/docs/plantuml/oethProcesses.png index 4bb4928a1503dc7736b9cab2abb9116971fdaff6..52e28b30a7bcaa65ca658d95dca6ba17edce270c 100644 GIT binary patch literal 455005 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ðMbC^s+;^dTW${xc!v*re>iv4eq>PZ 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∾dw@xIcp(isNUBF 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%0D9BovbTw~m!@r+5>qz_e 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

?0{mlKsFS43qcNhM~#U7n_+Y8CsY6 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 actor "Admin\n(5/8 Safe)" as admin <> actor "Strategist\n(2/9 Safe)" as strategist <> @@ -36,10 +37,10 @@ nativeStrat -> ssv : approve(\nSSV Network,\namount) activate ssv note right : Native Staking Strategy approves\nSSV Network to spend\nSSV tokens return -' nativeStrat -> ssvNet : setFeeRecipientAddress(\nrecipient) -' activate ssvNet -' note right : NodeDelegator set as the fee recipient -' return +nativeStrat -> ssvNet : setFeeRecipientAddress(\nFeeAccumulator) +activate ssvNet +note right : set FeeAccumulator\nto receive MEV rewards +return return gov -> ssv : transfer(\nfrom\nto\namount) @@ -49,11 +50,26 @@ return end group -group Governor sets staked ETH threshold +group Governor setup of the Native Staking Strategy + +gov -> nativeStrat : setHarvesterAddress(\nharvester) +activate nativeStrat +return -gov -> nativeStrat : setStakeETHThreshold() +gov -> nativeStrat : setFuseInterval(\nstart, end) +activate nativeStrat +return + +gov -> nativeStrat : setRegistrator(\nregistrator) +activate nativeStrat +return + +gov -> nativeStrat : setStakingMonitor(\ngovernor) +activate nativeStrat +return + +gov -> nativeStrat : setStakeETHThreshold(\nmax) activate nativeStrat -note right: set ETH that can be staked\nbefore the staking monitor has to reset return end group @@ -200,7 +216,6 @@ group Consensus Rewards note over val attesting to blocks -proposing blocks participating in sync committees end note val -> val : ETH @@ -279,10 +294,13 @@ end group group Execution Rewards -sender -> feeAccum : ETH -note right : tx fees and MEV rewards +mev -> feeAccum : ETH +note right : MEV rewards -note over nativeStrat : Native Staking Strategy's\nWETH balance does not change +sender -> nativeStrat : ETH +note right : tx priority fees + +note over nativeStrat : Native Staking Strategy's WETH balance\ndoes not change from either end group @@ -318,7 +336,6 @@ return end group - group Strategist pauses Native Staking Strategy strategist -> nativeStrat : pause() From 7195fd7be3a0bdf40f1b51c8fddc2389880b1e2e Mon Sep 17 00:00:00 2001 From: Nicholas Addison Date: Fri, 9 Aug 2024 11:40:14 +1000 Subject: [PATCH 3/7] Added deploy script to upgrade Native Staking Strategies Added fork tests to set MEV fee recipient Removed old native staking fork test file that is no longer being used --- contracts/contracts/mocks/MockSSVNetwork.sol | 2 + .../mainnet/104_upgrade_staking_strategies.js | 124 ++++++++++++++++++ .../NativeStakingSSVStrategyProxy.json | 4 +- contracts/test/behaviour/ssvStrategy.js | 19 +++ .../strategies/nativeSsvStaking.fork-test.js | 35 ----- contracts/utils/addresses.js | 2 +- 6 files changed, 148 insertions(+), 38 deletions(-) create mode 100644 contracts/deploy/mainnet/104_upgrade_staking_strategies.js delete mode 100644 contracts/test/strategies/nativeSsvStaking.fork-test.js diff --git a/contracts/contracts/mocks/MockSSVNetwork.sol b/contracts/contracts/mocks/MockSSVNetwork.sol index 4eb096aca3..69c4d385d4 100644 --- a/contracts/contracts/mocks/MockSSVNetwork.sol +++ b/contracts/contracts/mocks/MockSSVNetwork.sol @@ -37,4 +37,6 @@ contract MockSSVNetwork { uint256 amount, Cluster memory cluster ) external {} + + function setFeeRecipientAddress(address recipient) external {} } diff --git a/contracts/deploy/mainnet/104_upgrade_staking_strategies.js b/contracts/deploy/mainnet/104_upgrade_staking_strategies.js new file mode 100644 index 0000000000..b71819e9eb --- /dev/null +++ b/contracts/deploy/mainnet/104_upgrade_staking_strategies.js @@ -0,0 +1,124 @@ +const { deploymentWithGovernanceProposal } = require("../../utils/deploy.js"); +const addresses = require("../../utils/addresses.js"); + +module.exports = deploymentWithGovernanceProposal( + { + deployName: "104_upgrade_staking_strategies", + forceDeploy: false, + //forceSkip: true, + reduceQueueTime: true, + deployerIsProposer: false, + // proposalId: "", + }, + async ({ deployWithConfirmation, ethers }) => { + // Current contracts + const cVaultProxy = await ethers.getContract("OETHVaultProxy"); + + // Deployer Actions + // ---------------- + + // 1. Fetch the first strategy proxy deployed by Defender Relayer + const cNativeStakingStrategyProxy = await ethers.getContract( + "NativeStakingSSVStrategyProxy" + ); + const cNativeStakingStrategy = await ethers.getContractAt( + "NativeStakingSSVStrategy", + cNativeStakingStrategyProxy.address + ); + console.log( + `cNativeStakingStrategyProxy ${cNativeStakingStrategyProxy.address}` + ); + + // 2. Fetch the first Fee Accumulator proxy + const cFeeAccumulatorProxy = await ethers.getContract( + "NativeStakingFeeAccumulatorProxy" + ); + console.log(`cFeeAccumulatorProxy ${cFeeAccumulatorProxy.address}`); + + // 3. Deploy new implementation for the first Native Staking Strategy + console.log( + `About to deploy the first NativeStakingSSVStrategy implementation` + ); + const dNativeStakingStrategyImpl = await deployWithConfirmation( + "NativeStakingSSVStrategy", + [ + [addresses.zero, cVaultProxy.address], //_baseConfig + addresses.mainnet.WETH, // wethAddress + addresses.mainnet.SSV, // ssvToken + addresses.mainnet.SSVNetwork, // ssvNetwork + 500, // maxValidators + cFeeAccumulatorProxy.address, // feeAccumulator + addresses.mainnet.beaconChainDepositContract, // beacon chain deposit contract + ] + ); + + // 4. Fetch the second strategy proxy deployed by Defender Relayer + const cNativeStakingStrategy2Proxy = await ethers.getContract( + "NativeStakingSSVStrategy2Proxy" + ); + const cNativeStakingStrategy2 = await ethers.getContractAt( + "NativeStakingSSVStrategy", + cNativeStakingStrategy2Proxy.address + ); + console.log( + `Native Staking Strategy 2 Proxy: ${cNativeStakingStrategy2Proxy.address}` + ); + + // 5. Fetch the second Fee Accumulator proxy + const cFeeAccumulator2Proxy = await ethers.getContract( + "NativeStakingFeeAccumulator2Proxy" + ); + console.log(`cFeeAccumulator2Proxy ${cFeeAccumulator2Proxy.address}`); + + // 3. Deploy new implementation for the second Native Staking Strategy + console.log( + `About to deploy the second NativeStakingSSVStrategy implementation` + ); + const dNativeStakingStrategy2Impl = await deployWithConfirmation( + "NativeStakingSSVStrategy", + [ + [addresses.zero, cVaultProxy.address], //_baseConfig + addresses.mainnet.WETH, // wethAddress + addresses.mainnet.SSV, // ssvToken + addresses.mainnet.SSVNetwork, // ssvNetwork + 500, // maxValidators + cFeeAccumulator2Proxy.address, // feeAccumulator + addresses.mainnet.beaconChainDepositContract, // beacon chain deposit contract + ] + ); + + // Governance Actions + // ---------------- + return { + name: `Upgrade both OETH Native Staking Strategy. + +Set the FeeAccumulator's to receive MEV rewards`, + actions: [ + // 1. Upgrade the first Native Staking Strategy + { + contract: cNativeStakingStrategyProxy, + signature: "upgradeTo(address)", + args: [dNativeStakingStrategyImpl.address], + }, + // 2. Set the first FeeAccumulator to receive MEV rewards + { + contract: cNativeStakingStrategy, + signature: "setFeeRecipient()", + args: [], + }, + // 3. Upgrade the second Native Staking Strategy + { + contract: cNativeStakingStrategy2Proxy, + signature: "upgradeTo(address)", + args: [dNativeStakingStrategy2Impl.address], + }, + // 4. Set the second FeeAccumulator to receive MEV rewards + { + contract: cNativeStakingStrategy2, + signature: "setFeeRecipient()", + args: [], + }, + ], + }; + } +); diff --git a/contracts/deployments/mainnet/NativeStakingSSVStrategyProxy.json b/contracts/deployments/mainnet/NativeStakingSSVStrategyProxy.json index 26255d1aa5..24980977a0 100644 --- a/contracts/deployments/mainnet/NativeStakingSSVStrategyProxy.json +++ b/contracts/deployments/mainnet/NativeStakingSSVStrategyProxy.json @@ -1,5 +1,5 @@ { - "address": "0x34edb2ee25751ee67f68a45813b22811687c0238", + "address": "0x34eDb2ee25751eE67F68A45813B22811687C0238", "abi": [ { "anonymous": false, @@ -256,4 +256,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/test/behaviour/ssvStrategy.js b/contracts/test/behaviour/ssvStrategy.js index 34901ad158..fd952bba56 100644 --- a/contracts/test/behaviour/ssvStrategy.js +++ b/contracts/test/behaviour/ssvStrategy.js @@ -92,6 +92,25 @@ const shouldBehaveLikeAnSsvStrategy = (context) => { ); expect(await nativeStakingSSVStrategy.MAX_VALIDATORS()).to.equal(500); }); + it("Anyone should be able to set the MEV fee recipent", async () => { + const { nativeStakingSSVStrategy, nativeStakingFeeAccumulator, matt } = + await context(); + + const tx = await nativeStakingSSVStrategy.connect(matt).setFeeRecipient(); + + const ssvNetworkAddress = await nativeStakingSSVStrategy.SSV_NETWORK(); + const ssvNetwork = await ethers.getContractAt( + "ISSVNetwork", + ssvNetworkAddress + ); + + await expect(tx) + .to.emit(ssvNetwork, "FeeRecipientAddressUpdated") + .withArgs( + nativeStakingSSVStrategy.address, + nativeStakingFeeAccumulator.address + ); + }); }); describe("Deposit/Allocation", function () { diff --git a/contracts/test/strategies/nativeSsvStaking.fork-test.js b/contracts/test/strategies/nativeSsvStaking.fork-test.js deleted file mode 100644 index dbaf6f7c81..0000000000 --- a/contracts/test/strategies/nativeSsvStaking.fork-test.js +++ /dev/null @@ -1,35 +0,0 @@ -const { - createFixtureLoader, - nativeStakingSSVStrategyFixture, -} = require("./../_fixture"); - -const addresses = require("../../utils/addresses"); -const loadFixture = createFixtureLoader(nativeStakingSSVStrategyFixture); -const { shouldBehaveLikeAnSsvStrategy } = require("../behaviour/ssvStrategy"); - -describe("ForkTest: Native SSV Staking Strategy", function () { - this.timeout(0); - - let fixture; - beforeEach(async () => { - fixture = await loadFixture(); - }); - - shouldBehaveLikeAnSsvStrategy(async () => { - return { - ...fixture, - addresses: addresses.mainnet, - testValidator: { - publicKey: - "0xaba6acd335d524a89fb89b9977584afdb23f34a6742547fa9ec1c656fbd2bfc0e7a234460328c2731828c9a43be06e25", - operatorIds: [348, 352, 361, 377], - sharesData: - "0x859f01c8f609cb5cb91f0c98e9b39b077775f10302d0db0edc4ea65e692c97920d5169f6281845a956404c0ba90b88060b74aa3755347441a5729b90bf30a449fa568e21915d11733c7135602b2a3d1a4dce41218ecb0fdb1788ee7e48a9ebd4b4b34f62deea20e9212ce78040dcad2e6382c2f4d4c8b3515a840e1693574068e26c0d58f17dc47d30efe4393f2660dc988aba6166b67732e8df7d9a69d316f330779b2fa4d14712d3bb60436d912bab4464c7c31ae8d2a966d7829063821fc899cc3ec4a8c7098b042323eb9d9cc4d5e945c6d5e6d4eb1b2484163d4b8cd83eea4cc195a68320f023b4d2405cda5110a2eea2c12b70abd9b6bfb567a7850a95fe073a0485c787744efc8658789b0faaff0d942b3c7b89540f594d007936f23c3e7c79fabfe1e2c49199a3f374198e231ca391909ca05ee3c89a7292207131653f6f2f5f5d638d4789a8029001b93827f6f45ef062c9a9d1360a3aedae00fbb8c34495056bacc98c6cecfc1171c84a1e47f3bc328539dbbcd6c79c2aebf7833c684bd807cc8c4dfd6b660e64aece6adf659a969851cf976dead050e9d14aa9c358326c0c0f0cb747041830e124ec872fcf6f82e7f05024da9e6bad10319ca085a0d1519b04c60738043babc1f5a144655e6a28922c2734701c5c93b845996589b8fd246e1bcd97570951cdbed032eeb9c2ac49ac8aeb2e988b6a5513ddcef9ca9bd592c0bce7d38041b52e69e85cda5fd0b84f905c7212b299cf265ee603add20d6459e0841dd05524e96574eebb46473151ec10a08873f7075e15342852f9f16aeb8305211706632475c39ccd8da33969390d035f8a68324e7adced66a726f80532b425cc82dd52a2edc10989db0167317b472a0016215dae35b4c26b28c0ebcf56e115eb32231449812e9ce866a8c0b3128878d3878f5be0670051a8bf94807123c54e6ea2f51607e32c2fe1b132c905c81965dd6d2a7474aa40b65f18d34084a74ba9a21fbdfba3bfaf6b11175d85f03181d655fda086d8dbe2f03dfa2e1b7140b1d9dc68fc9e22f184ed278599d29f6660af128e4c548de6926912d920e35575db90338a1a840f8d8842685f5b459fda573eaf5c5180e3369fc50faa681941dbe7dec83ee9649f30c1a0eac1f8a42fb3083d9274f4c622e2aa1e74b70fa6c027b4f23e1f80bfc4f69248b4d0b3e0eee9372869f97eb89d8d155e469191c48834ad58dd831f1b73409d71fccb958b6582a4ac3f98bcffff2abd393cbe64d7397ada699ecc75301e3be9e9b4ee92a990202c6a5e5112de5ea9cd666f41cdac4611575c8efe2137d6132cd4d4eea0de159eab44588a88f887e4263f673fb365415df537c77a4aaaee12dceff022eafcb8e6973eec7e18eb65cfeefa845b79754ec52a9270f0a7e570b1dd2171e629d498f34e6371726fa8cfe6863f9263c5222a953a44612944183789ad1020de8da527bf850429558dda7896059476e497284512c946d7a57acda3c3ee722d280c0d0daf758d6be88db48e96e14124832c38aa6d0dd38baeb4f246b01d7b0beb55c3983fb182cbf630b778384cc13ab6216611bc1eab94ffe17bb1e829700c99ec28fae1a87eaefd9c8edc4cdf3b6f2b07d85e0d8090ddfb2df4280dacd13a1f30cf946f5606940dc3f75622159b1c6f84bfdbd4ba9fa0f1d522f52bc2049da53f0d06931d650ef1274eb0247844c36349617095f9734e89be683fd7bd5001b416d800c53ec8e8eb533c418a83e803daf6fdfd552ca745bb2b24d8abe899ea89572524343386a035b675e9d5eeae81aefb3a24397f36fe501c66b27d1c0e453fcc975c888d9d6d5a4ca0a4b32b41deebed70", - signature: - "0x90157a1c1b26384f0b4d41bec867d1a000f75e7b634ac7c4c6d8dfc0b0eaeb73bcc99586333d42df98c6b0a8c5ef0d8d071c68991afcd8fbbaa8b423e3632ee4fe0782bc03178a30a8bc6261f64f84a6c833fb96a0f29de1c34ede42c4a859b0", - depositDataRoot: - "0xf7d704e25a2b5bea06fafa2dfe5c6fa906816e5c1622400339b2088a11d5f446", - }, - }; - }); -}); diff --git a/contracts/utils/addresses.js b/contracts/utils/addresses.js index 40a5ca16be..d14f4939c7 100644 --- a/contracts/utils/addresses.js +++ b/contracts/utils/addresses.js @@ -264,7 +264,7 @@ addresses.mainnet.beaconChainDepositContract = // Native Staking Strategy addresses.mainnet.NativeStakingSSVStrategyProxy = - "0x34edb2ee25751ee67f68a45813b22811687c0238"; + "0x34eDb2ee25751eE67F68A45813B22811687C0238"; // Defender relayer addresses.mainnet.validatorRegistrator = From 11949a18359ea3c75a504a1d3ab363adc2c0134e Mon Sep 17 00:00:00 2001 From: Nicholas Addison Date: Fri, 9 Aug 2024 12:08:55 +1000 Subject: [PATCH 4/7] Deployed new Native Staking Strategy to Holesky --- .../deploy/holesky/018_upgrade_strategy.js | 17 + .../deployments/holesky/.migrations.json | 5 +- .../holesky/NativeStakingSSVStrategy.json | 118 +-- .../972c1090c9c8a791ed54b54f1c189f16.json | 707 ++++++++++++++++++ contracts/test/behaviour/ssvStrategy.js | 2 +- 5 files changed, 792 insertions(+), 57 deletions(-) create mode 100644 contracts/deploy/holesky/018_upgrade_strategy.js create mode 100644 contracts/deployments/holesky/solcInputs/972c1090c9c8a791ed54b54f1c189f16.json diff --git a/contracts/deploy/holesky/018_upgrade_strategy.js b/contracts/deploy/holesky/018_upgrade_strategy.js new file mode 100644 index 0000000000..eeff797527 --- /dev/null +++ b/contracts/deploy/holesky/018_upgrade_strategy.js @@ -0,0 +1,17 @@ +const { upgradeNativeStakingSSVStrategy } = require("../deployActions"); + +const mainExport = async () => { + console.log("Running 018 deployment on Holesky..."); + + await upgradeNativeStakingSSVStrategy(); + + console.log("Running 018 deployment done"); + return true; +}; + +mainExport.id = "018_upgrade_strategy"; +mainExport.tags = []; +mainExport.dependencies = []; +mainExport.skip = () => false; + +module.exports = mainExport; diff --git a/contracts/deployments/holesky/.migrations.json b/contracts/deployments/holesky/.migrations.json index cc982585e8..ad6a7b6adb 100644 --- a/contracts/deployments/holesky/.migrations.json +++ b/contracts/deployments/holesky/.migrations.json @@ -15,5 +15,6 @@ "014_upgrade_strategy": 1717806940, "015_oeth_withdrawal_queue": 1720063996, "016_upgrade_strategy": 1721109545, - "017_upgrade_vault": 1722405783 -} \ No newline at end of file + "017_upgrade_vault": 1722405783, + "018_upgrade_strategy": 1723168891 +} diff --git a/contracts/deployments/holesky/NativeStakingSSVStrategy.json b/contracts/deployments/holesky/NativeStakingSSVStrategy.json index 268f66b121..8df7fe4ff8 100644 --- a/contracts/deployments/holesky/NativeStakingSSVStrategy.json +++ b/contracts/deployments/holesky/NativeStakingSSVStrategy.json @@ -1,5 +1,5 @@ { - "address": "0xd380EC8F8a588096d72de1E40924adfA338A52CB", + "address": "0x94f150C1aA2aC65b59628a261C1Dd592785b7218", "abi": [ { "inputs": [ @@ -1155,6 +1155,13 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "setFeeRecipient", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1455,34 +1462,34 @@ "type": "receive" } ], - "transactionHash": "0x39826dd2a43b113193e6f9d43628310d58056bc4936f15b1a30cf99f0e087ea5", + "transactionHash": "0xff4ecd8c20101e787cdfa81c2221e0e524b5222c5ce161ab23440f2975b60e9b", "receipt": { "to": null, "from": "0x1b94CA50D3Ad9f8368851F8526132272d1a5028C", - "contractAddress": "0xd380EC8F8a588096d72de1E40924adfA338A52CB", - "transactionIndex": 25, - "gasUsed": "4533632", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000000004000000000000002000000000008000000040000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000010000000000010000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x52be413defbd6e0eb81e115563bb2bc13db9e89c0e3c35a7e573956520cbf3f6", - "transactionHash": "0x39826dd2a43b113193e6f9d43628310d58056bc4936f15b1a30cf99f0e087ea5", + "contractAddress": "0x94f150C1aA2aC65b59628a261C1Dd592785b7218", + "transactionIndex": 26, + "gasUsed": "4645027", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000020000000000000000000000000000004000000000000002000000000000000000040000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000000020000000000000000000000000000000080000000000000000000000000000000000", + "blockHash": "0x780512a61813326e79f2d682a8e1a014d384534b285d442a21a02550eb41df59", + "transactionHash": "0xff4ecd8c20101e787cdfa81c2221e0e524b5222c5ce161ab23440f2975b60e9b", "logs": [ { - "transactionIndex": 25, - "blockNumber": 1937403, - "transactionHash": "0x39826dd2a43b113193e6f9d43628310d58056bc4936f15b1a30cf99f0e087ea5", - "address": "0xd380EC8F8a588096d72de1E40924adfA338A52CB", + "transactionIndex": 26, + "blockNumber": 2095878, + "transactionHash": "0xff4ecd8c20101e787cdfa81c2221e0e524b5222c5ce161ab23440f2975b60e9b", + "address": "0x94f150C1aA2aC65b59628a261C1Dd592785b7218", "topics": [ "0xc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000001b94ca50d3ad9f8368851f8526132272d1a5028c" ], "data": "0x", - "logIndex": 40, - "blockHash": "0x52be413defbd6e0eb81e115563bb2bc13db9e89c0e3c35a7e573956520cbf3f6" + "logIndex": 39, + "blockHash": "0x780512a61813326e79f2d682a8e1a014d384534b285d442a21a02550eb41df59" } ], - "blockNumber": 1937403, - "cumulativeGasUsed": "6948974", + "blockNumber": 2095878, + "cumulativeGasUsed": "8115069", "status": 1, "byzantium": true }, @@ -1498,11 +1505,11 @@ "0x65a289f4BF934c964C942eFF6E6F83b6481BE550", "0x4242424242424242424242424242424242424242" ], - "numDeployments": 10, - "solcInputHash": "514e26cc68134bb5d1fd6d042300c1f1", - "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"platformAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vaultAddress\",\"type\":\"address\"}],\"internalType\":\"struct InitializableAbstractStrategy.BaseStrategyConfig\",\"name\":\"_baseConfig\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_wethAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ssvToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ssvNetwork\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_maxValidators\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_feeAccumulator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_beaconChainDepositContract\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AccountingConsensusRewards\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"noOfValidators\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingValidators\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wethSentToVault\",\"type\":\"uint256\"}],\"name\":\"AccountingFullyWithdrawnValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"validatorsDelta\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"consensusRewardsDelta\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wethToVault\",\"type\":\"uint256\"}],\"name\":\"AccountingManuallyFixed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingValidators\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wethSentToVault\",\"type\":\"uint256\"}],\"name\":\"AccountingValidatorSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ETHStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"}],\"name\":\"FuseIntervalUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousGovernor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"GovernorshipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_oldHarvesterAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_newHarvesterAddress\",\"type\":\"address\"}],\"name\":\"HarvesterAddressesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"}],\"name\":\"PTokenAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"}],\"name\":\"PTokenRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousGovernor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"PendingGovernorshipTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"RegistratorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_oldAddresses\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_newAddresses\",\"type\":\"address[]\"}],\"name\":\"RewardTokenAddressesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RewardTokenCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"SSVValidatorExitCompleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"SSVValidatorExitInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"SSVValidatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"StakeETHTallyReset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"StakeETHThresholdChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"StakingMonitorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BEACON_CHAIN_DEPOSIT_CONTRACT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FEE_ACCUMULATOR_ADDRESS\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FULL_STAKE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_VALIDATORS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_FIX_ACCOUNTING_CADENCE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SSV_NETWORK\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SSV_TOKEN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeDepositedValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"assetToPToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"checkBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collectRewardTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"consensusRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"uint256\",\"name\":\"ssvAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"depositSSV\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositedWethAccountedFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"doAccounting\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"accountingValid\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"exitSsvValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fuseIntervalEnd\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fuseIntervalStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardTokenAddresses\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"harvesterAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_rewardTokenAddresses\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_assets\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_pTokens\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFixAccountingBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"_validatorsDelta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"_consensusRewardsDelta\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"_ethToVaultAmount\",\"type\":\"uint256\"}],\"name\":\"manuallyFixAccounting\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"platformAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"publicKeys\",\"type\":\"bytes[]\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"bytes[]\",\"name\":\"sharesData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"ssvAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"registerSsvValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_assetIndex\",\"type\":\"uint256\"}],\"name\":\"removePToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"removeSsvValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resetStakeETHTally\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"rewardTokenAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"safeApproveAllTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fuseIntervalStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_fuseIntervalEnd\",\"type\":\"uint256\"}],\"name\":\"setFuseInterval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_harvesterAddress\",\"type\":\"address\"}],\"name\":\"setHarvesterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"}],\"name\":\"setPTokenAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setRegistrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_rewardTokenAddresses\",\"type\":\"address[]\"}],\"name\":\"setRewardTokenAddresses\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"setStakeETHThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setStakingMonitor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeETHTally\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeETHThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"depositDataRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct ValidatorStakeData[]\",\"name\":\"validators\",\"type\":\"tuple[]\"}],\"name\":\"stakeEth\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakingMonitor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"supportsAsset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newGovernor\",\"type\":\"address\"}],\"name\":\"transferGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorRegistrator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"validatorsStates\",\"outputs\":[{\"internalType\":\"enum ValidatorRegistrator.VALIDATOR_STATE\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaultAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Origin Protocol Inc\",\"details\":\"This contract handles WETH and ETH and in some operations interchanges between the two. Any WETH that is on the contract across multiple blocks (and not just transitory within a transaction) is considered an asset. Meaning deposits increase the balance of the asset and withdrawal decrease it. As opposed to all our other strategies the WETH doesn't immediately get deposited into an underlying strategy and can be present across multiple blocks waiting to be unwrapped to ETH and staked to validators. This separation of WETH and ETH is required since the rewards (reward token) is also in ETH. To simplify the accounting of WETH there is another difference in behavior compared to the other strategies. To withdraw WETH asset - exit message is posted to validators and the ETH hits this contract with multiple days delay. In order to simplify the WETH accounting upon detection of such an event the ValidatorAccountant immediately wraps ETH to WETH and sends it to the Vault. On the other hand any ETH on the contract (across multiple blocks) is there either: - as a result of already accounted for consensus rewards - as a result of not yet accounted for consensus rewards - as a results of not yet accounted for full validator withdrawals (or validator slashes) Even though the strategy assets and rewards are a very similar asset the consensus layer rewards and the execution layer rewards are considered rewards and those are dripped to the Vault over a configurable time interval and not immediately.\",\"kind\":\"dev\",\"methods\":{\"checkBalance(address)\":{\"params\":{\"_asset\":\"Address of weth asset\"},\"returns\":{\"balance\":\" Total value of (W)ETH\"}},\"constructor\":{\"params\":{\"_baseConfig\":\"Base strategy config with platformAddress (ERC-4626 Vault contract), eg sfrxETH or sDAI, and vaultAddress (OToken Vault contract), eg VaultProxy or OETHVaultProxy\",\"_beaconChainDepositContract\":\"Address of the beacon chain deposit contract\",\"_feeAccumulator\":\"Address of the fee accumulator receiving execution layer validator rewards\",\"_maxValidators\":\"Maximum number of validators that can be registered in the strategy\",\"_ssvNetwork\":\"Address of the SSV Network contract\",\"_ssvToken\":\"Address of the Erc20 SSV Token contract\",\"_wethAddress\":\"Address of the Erc20 WETH Token contract\"}},\"deposit(address,uint256)\":{\"params\":{\"_amount\":\"Amount of assets that were transferred to the strategy by the vault.\",\"_asset\":\"Address of asset to deposit. Has to be WETH.\"}},\"depositSSV(uint64[],uint256,(uint32,uint64,uint64,bool,uint256))\":{\"details\":\"A SSV cluster is defined by the SSVOwnerAddress and the set of operatorIds. uses \\\"onlyStrategist\\\" modifier so continuous front-running can't DOS our maintenance service that tries to top up SSV tokens.\",\"params\":{\"cluster\":\"The SSV cluster details including the validator count and SSV balance\",\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"ssvAmount\":\"The amount of SSV tokens to be deposited to the SSV cluster\"}},\"doAccounting()\":{\"details\":\"This function could in theory be permission-less but lets allow only the Registrator (Defender Action) to call it for now.\",\"returns\":{\"accountingValid\":\"true if accounting was successful, false if fuse is blown\"}},\"exitSsvValidator(bytes,uint64[])\":{\"params\":{\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"publicKey\":\"The public key of the validator\"}},\"getRewardTokenAddresses()\":{\"returns\":{\"_0\":\"address[] the reward token addresses.\"}},\"initialize(address[],address[],address[])\":{\"params\":{\"_assets\":\"Addresses of initial supported assets\",\"_pTokens\":\"Platform Token corresponding addresses\",\"_rewardTokenAddresses\":\"Address of reward token for platform\"}},\"manuallyFixAccounting(int256,int256,uint256)\":{\"details\":\"There is a case when a validator(s) gets slashed so much that the eth swept from the beacon chain enters the fuse area and there are no consensus rewards on the contract to \\\"dip into\\\"/use. To increase the amount of unaccounted ETH over the fuse end interval we need to reduce the amount of active deposited validators and immediately send WETH to the vault, so it doesn't interfere with further accounting.\",\"params\":{\"_consensusRewardsDelta\":\"adjust the accounted for consensus rewards up or down\",\"_ethToVaultAmount\":\"the amount of ETH that gets wrapped into WETH and sent to the Vault\",\"_validatorsDelta\":\"adjust the active validators by up to plus three or minus three\"}},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"registerSsvValidators(bytes[],uint64[],bytes[],uint256,(uint32,uint64,uint64,bool,uint256))\":{\"params\":{\"cluster\":\"The SSV cluster details including the validator count and SSV balance\",\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"publicKeys\":\"The public keys of the validators\",\"sharesData\":\"The shares data for each validator\",\"ssvAmount\":\"The amount of SSV tokens to be deposited to the SSV cluster\"}},\"removePToken(uint256)\":{\"params\":{\"_assetIndex\":\"Index of the asset to be removed\"}},\"removeSsvValidator(bytes,uint64[],(uint32,uint64,uint64,bool,uint256))\":{\"params\":{\"cluster\":\"The SSV cluster details including the validator count and SSV balance\",\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"publicKey\":\"The public key of the validator\"}},\"setHarvesterAddress(address)\":{\"params\":{\"_harvesterAddress\":\"Address of the harvester contract.\"}},\"setPTokenAddress(address,address)\":{\"params\":{\"_asset\":\"Address for the asset\",\"_pToken\":\"Address for the corresponding platform token\"}},\"setRewardTokenAddresses(address[])\":{\"params\":{\"_rewardTokenAddresses\":\"Array of reward token addresses\"}},\"stakeEth((bytes,bytes,bytes32)[])\":{\"params\":{\"validators\":\"A list of validator data needed to stake. The `ValidatorStakeData` struct contains the pubkey, signature and depositDataRoot. Only the registrator can call this function.\"}},\"supportsAsset(address)\":{\"params\":{\"_asset\":\"The address of the asset token.\"}},\"transferGovernance(address)\":{\"params\":{\"_newGovernor\":\"Address of the new Governor\"}},\"transferToken(address,uint256)\":{\"params\":{\"_amount\":\"Amount of the asset to transfer\",\"_asset\":\"Address for the asset\"}},\"withdraw(address,address,uint256)\":{\"params\":{\"_amount\":\"Amount of WETH to withdraw\",\"_asset\":\"WETH to withdraw\",\"_recipient\":\"Address to receive withdrawn assets\"}}},\"stateVariables\":{\"FEE_ACCUMULATOR_ADDRESS\":{\"details\":\"this address will receive Execution layer rewards - These are rewards earned for executing transactions on the Ethereum network as part of block proposals. They include priority fees (fees paid by users for their transactions to be included) and MEV rewards (rewards for arranging transactions in a way that benefits the validator).\"},\"depositedWethAccountedFor\":{\"details\":\"This contract receives WETH as the deposit asset, but unlike other strategies doesn't immediately deposit it to an underlying platform. Rather a special privilege account stakes it to the validators. For that reason calling WETH.balanceOf(this) in a deposit function can contain WETH that has just been deposited and also WETH that has previously been deposited. To keep a correct count we need to keep track of WETH that has already been accounted for. This value represents the amount of WETH balance of this contract that has already been accounted for by the deposit events. It is important to note that this variable is not concerned with WETH that is a result of full/partial withdrawal of the validators. It is strictly concerned with WETH that has been deposited and is waiting to be staked.\"}},\"title\":\"Native Staking SSV Strategy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"BEACON_CHAIN_DEPOSIT_CONTRACT()\":{\"notice\":\"The address of the beacon chain deposit contract\"},\"FEE_ACCUMULATOR_ADDRESS()\":{\"notice\":\"Fee collector address\"},\"FULL_STAKE()\":{\"notice\":\"The maximum amount of ETH that can be staked by a validator\"},\"MAX_VALIDATORS()\":{\"notice\":\"Maximum number of validators that can be registered in this strategy\"},\"MIN_FIX_ACCOUNTING_CADENCE()\":{\"notice\":\"The minimum amount of blocks that need to pass between two calls to manuallyFixAccounting\"},\"SSV_NETWORK()\":{\"notice\":\"The address of the SSV Network contract used to interface with\"},\"SSV_TOKEN()\":{\"notice\":\"SSV ERC20 token that serves as a payment for operating SSV validators\"},\"VAULT_ADDRESS()\":{\"notice\":\"Address of the OETH Vault proxy contract\"},\"WETH()\":{\"notice\":\"The address of the Wrapped ETH (WETH) token contract\"},\"activeDepositedValidators()\":{\"notice\":\"The number of validators that have 32 (!) ETH actively deposited. When a new deposit to a validator happens this number increases, when a validator exit is detected this number decreases.\"},\"assetToPToken(address)\":{\"notice\":\"asset => pToken (Platform Specific Token Address)\"},\"checkBalance(address)\":{\"notice\":\"Returns the total value of (W)ETH that is staked to the validators and WETH deposits that are still to be staked. This does not include ETH from consensus rewards sitting in this strategy or ETH from MEV rewards in the FeeAccumulator. These rewards are harvested and sent to the Dripper so will eventually be sent to the Vault as WETH.\"},\"claimGovernance()\":{\"notice\":\"Claim Governance of the contract to a new account (`newGovernor`). Can only be called by the new Governor.\"},\"collectRewardTokens()\":{\"notice\":\"Collect accumulated reward token and send to Vault.\"},\"consensusRewards()\":{\"notice\":\"Keeps track of the total consensus rewards swept from the beacon chain\"},\"deposit(address,uint256)\":{\"notice\":\"Unlike other strategies, this does not deposit assets into the underlying platform. It just checks the asset is WETH and emits the Deposit event. To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used. Will NOT revert if the strategy is paused from an accounting failure.\"},\"depositAll()\":{\"notice\":\"Unlike other strategies, this does not deposit assets into the underlying platform. It just emits the Deposit event. To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used. Will NOT revert if the strategy is paused from an accounting failure.\"},\"depositSSV(uint64[],uint256,(uint32,uint64,uint64,bool,uint256))\":{\"notice\":\"Deposits more SSV Tokens to the SSV Network contract which is used to pay the SSV Operators.\"},\"doAccounting()\":{\"notice\":\"This notion page offers a good explanation of how the accounting functions https://www.notion.so/originprotocol/Limited-simplified-native-staking-accounting-67a217c8420d40678eb943b9da0ee77d In short, after dividing by 32, if the ETH remaining on the contract falls between 0 and fuseIntervalStart, the accounting function will treat that ETH as Beacon chain consensus rewards. On the contrary, if after dividing by 32, the ETH remaining on the contract falls between fuseIntervalEnd and 32, the accounting function will treat that as a validator slashing.Perform the accounting attributing beacon chain ETH to either full or partial withdrawals. Returns true when accounting is valid and fuse isn't \\\"blown\\\". Returns false when fuse is blown.\"},\"exitSsvValidator(bytes,uint64[])\":{\"notice\":\"Exit a validator from the Beacon chain. The staked ETH will eventually swept to this native staking strategy. Only the registrator can call this function.\"},\"fuseIntervalEnd()\":{\"notice\":\"end of fuse interval\"},\"fuseIntervalStart()\":{\"notice\":\"start of fuse interval\"},\"getRewardTokenAddresses()\":{\"notice\":\"Get the reward token addresses.\"},\"governor()\":{\"notice\":\"Returns the address of the current Governor.\"},\"harvesterAddress()\":{\"notice\":\"Address of the Harvester contract allowed to collect reward tokens\"},\"initialize(address[],address[],address[])\":{\"notice\":\"initialize function, to set up initial internal state\"},\"isGovernor()\":{\"notice\":\"Returns true if the caller is the current Governor.\"},\"lastFixAccountingBlockNumber()\":{\"notice\":\"last block number manuallyFixAccounting has been called\"},\"manuallyFixAccounting(int256,int256,uint256)\":{\"notice\":\"Allow the Strategist to fix the accounting of this strategy and unpause.\"},\"platformAddress()\":{\"notice\":\"Address of the underlying platform\"},\"registerSsvValidators(bytes[],uint64[],bytes[],uint256,(uint32,uint64,uint64,bool,uint256))\":{\"notice\":\"Registers a new validator in the SSV Cluster. Only the registrator can call this function.\"},\"removePToken(uint256)\":{\"notice\":\"Remove a supported asset by passing its index. This method can only be called by the system Governor\"},\"removeSsvValidator(bytes,uint64[],(uint32,uint64,uint64,bool,uint256))\":{\"notice\":\"Remove a validator from the SSV Cluster. Make sure `exitSsvValidator` is called before and the validate has exited the Beacon chain. If removed before the validator has exited the beacon chain will result in the validator being slashed. Only the registrator can call this function.\"},\"resetStakeETHTally()\":{\"notice\":\"Reset the stakeETHTally\"},\"rewardTokenAddresses(uint256)\":{\"notice\":\"Address of the reward tokens. eg CRV, BAL, CVX, AURA\"},\"safeApproveAllTokens()\":{\"notice\":\"Approves the SSV Network contract to transfer SSV tokens for deposits\"},\"setFuseInterval(uint256,uint256)\":{\"notice\":\"set fuse interval values\"},\"setHarvesterAddress(address)\":{\"notice\":\"Set the Harvester contract that can collect rewards.\"},\"setPTokenAddress(address,address)\":{\"notice\":\"Provide support for asset by passing its pToken address. This method can only be called by the system Governor\"},\"setRegistrator(address)\":{\"notice\":\"Set the address of the registrator which can register, exit and remove validators\"},\"setRewardTokenAddresses(address[])\":{\"notice\":\"Set the reward token addresses. Any old addresses will be overwritten.\"},\"setStakeETHThreshold(uint256)\":{\"notice\":\"Set the amount of ETH that can be staked before staking monitor\"},\"setStakingMonitor(address)\":{\"notice\":\"Set the address of the staking monitor that is allowed to reset stakeETHTally\"},\"stakeETHTally()\":{\"notice\":\"Amount of ETH that has been staked since the `stakingMonitor` last called `resetStakeETHTally`. This can not go above `stakeETHThreshold`.\"},\"stakeETHThreshold()\":{\"notice\":\"Amount of ETH that can be staked before staking on the contract is suspended and the `stakingMonitor` needs to approve further staking by calling `resetStakeETHTally`\"},\"stakeEth((bytes,bytes,bytes32)[])\":{\"notice\":\"Stakes WETH to the node validators\"},\"stakingMonitor()\":{\"notice\":\"The account that is allowed to modify stakeETHThreshold and reset stakeETHTally\"},\"supportsAsset(address)\":{\"notice\":\"Returns bool indicating whether asset is supported by strategy.\"},\"transferGovernance(address)\":{\"notice\":\"Transfers Governance of the contract to a new account (`newGovernor`). Can only be called by the current Governor. Must be claimed for this to complete\"},\"transferToken(address,uint256)\":{\"notice\":\"Transfer token to governor. Intended for recovering tokens stuck in strategy contracts, i.e. mistaken sends.\"},\"validatorRegistrator()\":{\"notice\":\"Address of the registrator - allowed to register, exit and remove validators\"},\"validatorsStates(bytes32)\":{\"notice\":\"State of the validators keccak256(pubKey) => state\"},\"vaultAddress()\":{\"notice\":\"Address of the OToken vault\"},\"withdraw(address,address,uint256)\":{\"notice\":\"Withdraw WETH from this contract. Used only if some WETH for is lingering on the contract. That can happen when: - after mints if the strategy is the default - time between depositToStrategy and stakeEth - the deposit was not a multiple of 32 WETH - someone sent WETH directly to this contract Will NOT revert if the strategy is paused from an accounting failure.\"},\"withdrawAll()\":{\"notice\":\"transfer all WETH deposits back to the vault. This does not withdraw from the validators. That has to be done separately with the `exitSsvValidator` and `removeSsvValidator` operations. This does not withdraw any execution rewards from the FeeAccumulator or consensus rewards in this strategy. Any ETH in this strategy that was swept from a full validator withdrawal will not be withdrawn. ETH from full validator withdrawals is sent to the Vault using `doAccounting`. Will NOT revert if the strategy is paused from an accounting failure.\"}},\"notice\":\"Strategy to deploy funds into DVT validators powered by the SSV Network\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol\":\"NativeStakingSSVStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n /**\\n * @dev Emitted when the pause is triggered by `account`.\\n */\\n event Paused(address account);\\n\\n /**\\n * @dev Emitted when the pause is lifted by `account`.\\n */\\n event Unpaused(address account);\\n\\n bool private _paused;\\n\\n /**\\n * @dev Initializes the contract in unpaused state.\\n */\\n constructor() {\\n _paused = false;\\n }\\n\\n /**\\n * @dev Returns true if the contract is paused, and false otherwise.\\n */\\n function paused() public view virtual returns (bool) {\\n return _paused;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is not paused.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n modifier whenNotPaused() {\\n require(!paused(), \\\"Pausable: paused\\\");\\n _;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is paused.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n modifier whenPaused() {\\n require(paused(), \\\"Pausable: not paused\\\");\\n _;\\n }\\n\\n /**\\n * @dev Triggers stopped state.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n function _pause() internal virtual whenNotPaused {\\n _paused = true;\\n emit Paused(_msgSender());\\n }\\n\\n /**\\n * @dev Returns to normal state.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n function _unpause() internal virtual whenPaused {\\n _paused = false;\\n emit Unpaused(_msgSender());\\n }\\n}\\n\",\"keccak256\":\"0xe68ed7fb8766ed1e888291f881e36b616037f852b37d96877045319ad298ba87\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address sender,\\n address recipient,\\n uint256 amount\\n ) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x61437cb513a887a1bbad006e7b1c8b414478427d33de47c5600af3c748f108da\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n using Address for address;\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n }\\n\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n }\\n\\n /**\\n * @dev Deprecated. This function has issues similar to the ones found in\\n * {IERC20-approve}, and its usage is discouraged.\\n *\\n * Whenever possible, use {safeIncreaseAllowance} and\\n * {safeDecreaseAllowance} instead.\\n */\\n function safeApprove(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n // safeApprove should only be called when setting an initial allowance,\\n // or when resetting it to zero. To increase and decrease it, use\\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n require(\\n (value == 0) || (token.allowance(address(this), spender) == 0),\\n \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n );\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n }\\n\\n function safeIncreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n uint256 newAllowance = token.allowance(address(this), spender) + value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n function safeDecreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n unchecked {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n uint256 newAllowance = oldAllowance - value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n // the target address contains contract code and also asserts for success in the low-level call.\\n\\n bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n if (returndata.length > 0) {\\n // Return data is optional\\n require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xc3d946432c0ddbb1f846a0d3985be71299df331b91d06732152117f62f0be2b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n assembly {\\n size := extcodesize(account)\\n }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x51b758a8815ecc9596c66c37d56b1d33883a444631a3f916b9fe65cb863ef7c4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a >= b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a / b + (a % b == 0 ? 0 : 1);\\n }\\n}\\n\",\"keccak256\":\"0xfaad496c1c944b6259b7dc70b4865eb1775d6402bc0c81b38a0b24d9f525ae37\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n// CAUTION\\n// This version of SafeMath should only be used with Solidity 0.8 or later,\\n// because it relies on the compiler's built in overflow checks.\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations.\\n *\\n * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler\\n * now has built in overflow checking.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a + b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a * b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator.\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa2f576be637946f767aa56601c26d717f48a0aff44f82e46f13807eea1009a21\",\"license\":\"MIT\"},\"contracts/governance/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Base for contracts that are managed by the Origin Protocol's Governor.\\n * @dev Copy of the openzeppelin Ownable.sol contract with nomenclature change\\n * from owner to governor and renounce methods removed. Does not use\\n * Context.sol like Ownable.sol does for simplification.\\n * @author Origin Protocol Inc\\n */\\ncontract Governable {\\n // Storage position of the owner and pendingOwner of the contract\\n // keccak256(\\\"OUSD.governor\\\");\\n bytes32 private constant governorPosition =\\n 0x7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a;\\n\\n // keccak256(\\\"OUSD.pending.governor\\\");\\n bytes32 private constant pendingGovernorPosition =\\n 0x44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db;\\n\\n // keccak256(\\\"OUSD.reentry.status\\\");\\n bytes32 private constant reentryStatusPosition =\\n 0x53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac4535;\\n\\n // See OpenZeppelin ReentrancyGuard implementation\\n uint256 constant _NOT_ENTERED = 1;\\n uint256 constant _ENTERED = 2;\\n\\n event PendingGovernorshipTransfer(\\n address indexed previousGovernor,\\n address indexed newGovernor\\n );\\n\\n event GovernorshipTransferred(\\n address indexed previousGovernor,\\n address indexed newGovernor\\n );\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial Governor.\\n */\\n constructor() {\\n _setGovernor(msg.sender);\\n emit GovernorshipTransferred(address(0), _governor());\\n }\\n\\n /**\\n * @notice Returns the address of the current Governor.\\n */\\n function governor() public view returns (address) {\\n return _governor();\\n }\\n\\n /**\\n * @dev Returns the address of the current Governor.\\n */\\n function _governor() internal view returns (address governorOut) {\\n bytes32 position = governorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n governorOut := sload(position)\\n }\\n }\\n\\n /**\\n * @dev Returns the address of the pending Governor.\\n */\\n function _pendingGovernor()\\n internal\\n view\\n returns (address pendingGovernor)\\n {\\n bytes32 position = pendingGovernorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n pendingGovernor := sload(position)\\n }\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the Governor.\\n */\\n modifier onlyGovernor() {\\n require(isGovernor(), \\\"Caller is not the Governor\\\");\\n _;\\n }\\n\\n /**\\n * @notice Returns true if the caller is the current Governor.\\n */\\n function isGovernor() public view returns (bool) {\\n return msg.sender == _governor();\\n }\\n\\n function _setGovernor(address newGovernor) internal {\\n bytes32 position = governorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newGovernor)\\n }\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and make it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n bytes32 position = reentryStatusPosition;\\n uint256 _reentry_status;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n _reentry_status := sload(position)\\n }\\n\\n // On the first call to nonReentrant, _notEntered will be true\\n require(_reentry_status != _ENTERED, \\\"Reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, _ENTERED)\\n }\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, _NOT_ENTERED)\\n }\\n }\\n\\n function _setPendingGovernor(address newGovernor) internal {\\n bytes32 position = pendingGovernorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newGovernor)\\n }\\n }\\n\\n /**\\n * @notice Transfers Governance of the contract to a new account (`newGovernor`).\\n * Can only be called by the current Governor. Must be claimed for this to complete\\n * @param _newGovernor Address of the new Governor\\n */\\n function transferGovernance(address _newGovernor) external onlyGovernor {\\n _setPendingGovernor(_newGovernor);\\n emit PendingGovernorshipTransfer(_governor(), _newGovernor);\\n }\\n\\n /**\\n * @notice Claim Governance of the contract to a new account (`newGovernor`).\\n * Can only be called by the new Governor.\\n */\\n function claimGovernance() external {\\n require(\\n msg.sender == _pendingGovernor(),\\n \\\"Only the pending Governor can complete the claim\\\"\\n );\\n _changeGovernor(msg.sender);\\n }\\n\\n /**\\n * @dev Change Governance of the contract to a new account (`newGovernor`).\\n * @param _newGovernor Address of the new Governor\\n */\\n function _changeGovernor(address _newGovernor) internal {\\n require(_newGovernor != address(0), \\\"New Governor is address(0)\\\");\\n emit GovernorshipTransferred(_governor(), _newGovernor);\\n _setGovernor(_newGovernor);\\n }\\n}\\n\",\"keccak256\":\"0xb7133d6ce7a9e673ff79fcedb3fd41ae6e58e251f94915bb65731abe524270b4\",\"license\":\"MIT\"},\"contracts/interfaces/IBasicToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IBasicToken {\\n function symbol() external view returns (string memory);\\n\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0xa562062698aa12572123b36dfd2072f1a39e44fed2031cc19c2c9fd522f96ec2\",\"license\":\"MIT\"},\"contracts/interfaces/IDepositContract.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IDepositContract {\\n /// @notice A processed deposit event.\\n event DepositEvent(\\n bytes pubkey,\\n bytes withdrawal_credentials,\\n bytes amount,\\n bytes signature,\\n bytes index\\n );\\n\\n /// @notice Submit a Phase 0 DepositData object.\\n /// @param pubkey A BLS12-381 public key.\\n /// @param withdrawal_credentials Commitment to a public key for withdrawals.\\n /// @param signature A BLS12-381 signature.\\n /// @param deposit_data_root The SHA-256 hash of the SSZ-encoded DepositData object.\\n /// Used as a protection against malformed input.\\n function deposit(\\n bytes calldata pubkey,\\n bytes calldata withdrawal_credentials,\\n bytes calldata signature,\\n bytes32 deposit_data_root\\n ) external payable;\\n\\n /// @notice Query the current deposit root hash.\\n /// @return The deposit root hash.\\n function get_deposit_root() external view returns (bytes32);\\n\\n /// @notice Query the current deposit count.\\n /// @return The deposit count encoded as a little endian 64-bit number.\\n function get_deposit_count() external view returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x598f90bdbc854250bbd5991426bfb43367207e64e33109c41aa8b54323fd8d8e\",\"license\":\"MIT\"},\"contracts/interfaces/ISSVNetwork.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nstruct Cluster {\\n uint32 validatorCount;\\n uint64 networkFeeIndex;\\n uint64 index;\\n bool active;\\n uint256 balance;\\n}\\n\\ninterface ISSVNetwork {\\n /**********/\\n /* Errors */\\n /**********/\\n\\n error CallerNotOwner(); // 0x5cd83192\\n error CallerNotWhitelisted(); // 0x8c6e5d71\\n error FeeTooLow(); // 0x732f9413\\n error FeeExceedsIncreaseLimit(); // 0x958065d9\\n error NoFeeDeclared(); // 0x1d226c30\\n error ApprovalNotWithinTimeframe(); // 0x97e4b518\\n error OperatorDoesNotExist(); // 0x961e3e8c\\n error InsufficientBalance(); // 0xf4d678b8\\n error ValidatorDoesNotExist(); // 0xe51315d2\\n error ClusterNotLiquidatable(); // 0x60300a8d\\n error InvalidPublicKeyLength(); // 0x637297a4\\n error InvalidOperatorIdsLength(); // 0x38186224\\n error ClusterAlreadyEnabled(); // 0x3babafd2\\n error ClusterIsLiquidated(); // 0x95a0cf33\\n error ClusterDoesNotExists(); // 0x185e2b16\\n error IncorrectClusterState(); // 0x12e04c87\\n error UnsortedOperatorsList(); // 0xdd020e25\\n error NewBlockPeriodIsBelowMinimum(); // 0x6e6c9cac\\n error ExceedValidatorLimit(); // 0x6df5ab76\\n error TokenTransferFailed(); // 0x045c4b02\\n error SameFeeChangeNotAllowed(); // 0xc81272f8\\n error FeeIncreaseNotAllowed(); // 0x410a2b6c\\n error NotAuthorized(); // 0xea8e4eb5\\n error OperatorsListNotUnique(); // 0xa5a1ff5d\\n error OperatorAlreadyExists(); // 0x289c9494\\n error TargetModuleDoesNotExist(); // 0x8f9195fb\\n error MaxValueExceeded(); // 0x91aa3017\\n error FeeTooHigh(); // 0xcd4e6167\\n error PublicKeysSharesLengthMismatch(); // 0x9ad467b8\\n error IncorrectValidatorStateWithData(bytes publicKey); // 0x89307938\\n error ValidatorAlreadyExistsWithData(bytes publicKey); // 0x388e7999\\n error EmptyPublicKeysList(); // df83e679\\n\\n // legacy errors\\n error ValidatorAlreadyExists(); // 0x8d09a73e\\n error IncorrectValidatorState(); // 0x2feda3c1\\n\\n event AdminChanged(address previousAdmin, address newAdmin);\\n event BeaconUpgraded(address indexed beacon);\\n event ClusterDeposited(\\n address indexed owner,\\n uint64[] operatorIds,\\n uint256 value,\\n Cluster cluster\\n );\\n event ClusterLiquidated(\\n address indexed owner,\\n uint64[] operatorIds,\\n Cluster cluster\\n );\\n event ClusterReactivated(\\n address indexed owner,\\n uint64[] operatorIds,\\n Cluster cluster\\n );\\n event ClusterWithdrawn(\\n address indexed owner,\\n uint64[] operatorIds,\\n uint256 value,\\n Cluster cluster\\n );\\n event DeclareOperatorFeePeriodUpdated(uint64 value);\\n event ExecuteOperatorFeePeriodUpdated(uint64 value);\\n event FeeRecipientAddressUpdated(\\n address indexed owner,\\n address recipientAddress\\n );\\n event Initialized(uint8 version);\\n event LiquidationThresholdPeriodUpdated(uint64 value);\\n event MinimumLiquidationCollateralUpdated(uint256 value);\\n event NetworkEarningsWithdrawn(uint256 value, address recipient);\\n event NetworkFeeUpdated(uint256 oldFee, uint256 newFee);\\n event OperatorAdded(\\n uint64 indexed operatorId,\\n address indexed owner,\\n bytes publicKey,\\n uint256 fee\\n );\\n event OperatorFeeDeclarationCancelled(\\n address indexed owner,\\n uint64 indexed operatorId\\n );\\n event OperatorFeeDeclared(\\n address indexed owner,\\n uint64 indexed operatorId,\\n uint256 blockNumber,\\n uint256 fee\\n );\\n event OperatorFeeExecuted(\\n address indexed owner,\\n uint64 indexed operatorId,\\n uint256 blockNumber,\\n uint256 fee\\n );\\n event OperatorFeeIncreaseLimitUpdated(uint64 value);\\n event OperatorMaximumFeeUpdated(uint64 maxFee);\\n event OperatorRemoved(uint64 indexed operatorId);\\n event OperatorWhitelistUpdated(\\n uint64 indexed operatorId,\\n address whitelisted\\n );\\n event OperatorWithdrawn(\\n address indexed owner,\\n uint64 indexed operatorId,\\n uint256 value\\n );\\n event OwnershipTransferStarted(\\n address indexed previousOwner,\\n address indexed newOwner\\n );\\n event OwnershipTransferred(\\n address indexed previousOwner,\\n address indexed newOwner\\n );\\n event Upgraded(address indexed implementation);\\n event ValidatorAdded(\\n address indexed owner,\\n uint64[] operatorIds,\\n bytes publicKey,\\n bytes shares,\\n Cluster cluster\\n );\\n event ValidatorExited(\\n address indexed owner,\\n uint64[] operatorIds,\\n bytes publicKey\\n );\\n event ValidatorRemoved(\\n address indexed owner,\\n uint64[] operatorIds,\\n bytes publicKey,\\n Cluster cluster\\n );\\n\\n fallback() external;\\n\\n function acceptOwnership() external;\\n\\n function cancelDeclaredOperatorFee(uint64 operatorId) external;\\n\\n function declareOperatorFee(uint64 operatorId, uint256 fee) external;\\n\\n function deposit(\\n address clusterOwner,\\n uint64[] memory operatorIds,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function executeOperatorFee(uint64 operatorId) external;\\n\\n function exitValidator(bytes memory publicKey, uint64[] memory operatorIds)\\n external;\\n\\n function bulkExitValidator(\\n bytes[] calldata publicKeys,\\n uint64[] calldata operatorIds\\n ) external;\\n\\n function getVersion() external pure returns (string memory version);\\n\\n function initialize(\\n address token_,\\n address ssvOperators_,\\n address ssvClusters_,\\n address ssvDAO_,\\n address ssvViews_,\\n uint64 minimumBlocksBeforeLiquidation_,\\n uint256 minimumLiquidationCollateral_,\\n uint32 validatorsPerOperatorLimit_,\\n uint64 declareOperatorFeePeriod_,\\n uint64 executeOperatorFeePeriod_,\\n uint64 operatorMaxFeeIncrease_\\n ) external;\\n\\n function liquidate(\\n address clusterOwner,\\n uint64[] memory operatorIds,\\n Cluster memory cluster\\n ) external;\\n\\n function owner() external view returns (address);\\n\\n function pendingOwner() external view returns (address);\\n\\n function proxiableUUID() external view returns (bytes32);\\n\\n function reactivate(\\n uint64[] memory operatorIds,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function reduceOperatorFee(uint64 operatorId, uint256 fee) external;\\n\\n function registerOperator(bytes memory publicKey, uint256 fee)\\n external\\n returns (uint64 id);\\n\\n function registerValidator(\\n bytes memory publicKey,\\n uint64[] memory operatorIds,\\n bytes memory sharesData,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function bulkRegisterValidator(\\n bytes[] calldata publicKeys,\\n uint64[] calldata operatorIds,\\n bytes[] calldata sharesData,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function removeOperator(uint64 operatorId) external;\\n\\n function removeValidator(\\n bytes memory publicKey,\\n uint64[] memory operatorIds,\\n Cluster memory cluster\\n ) external;\\n\\n function bulkRemoveValidator(\\n bytes[] calldata publicKeys,\\n uint64[] calldata operatorIds,\\n Cluster memory cluster\\n ) external;\\n\\n function renounceOwnership() external;\\n\\n function setFeeRecipientAddress(address recipientAddress) external;\\n\\n function setOperatorWhitelist(uint64 operatorId, address whitelisted)\\n external;\\n\\n function transferOwnership(address newOwner) external;\\n\\n function updateDeclareOperatorFeePeriod(uint64 timeInSeconds) external;\\n\\n function updateExecuteOperatorFeePeriod(uint64 timeInSeconds) external;\\n\\n function updateLiquidationThresholdPeriod(uint64 blocks) external;\\n\\n function updateMaximumOperatorFee(uint64 maxFee) external;\\n\\n function updateMinimumLiquidationCollateral(uint256 amount) external;\\n\\n function updateModule(uint8 moduleId, address moduleAddress) external;\\n\\n function updateNetworkFee(uint256 fee) external;\\n\\n function updateOperatorFeeIncreaseLimit(uint64 percentage) external;\\n\\n function upgradeTo(address newImplementation) external;\\n\\n function upgradeToAndCall(address newImplementation, bytes memory data)\\n external\\n payable;\\n\\n function withdraw(\\n uint64[] memory operatorIds,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function withdrawAllOperatorEarnings(uint64 operatorId) external;\\n\\n function withdrawNetworkEarnings(uint256 amount) external;\\n\\n function withdrawOperatorEarnings(uint64 operatorId, uint256 amount)\\n external;\\n}\\n\",\"keccak256\":\"0xbd86cb74702aebc5b53c8fc738a2e3ad1b410583460617be84b22ce922af12a7\",\"license\":\"MIT\"},\"contracts/interfaces/IStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Platform interface to integrate with lending platform like Compound, AAVE etc.\\n */\\ninterface IStrategy {\\n /**\\n * @dev Deposit the given asset to platform\\n * @param _asset asset address\\n * @param _amount Amount to deposit\\n */\\n function deposit(address _asset, uint256 _amount) external;\\n\\n /**\\n * @dev Deposit the entire balance of all supported assets in the Strategy\\n * to the platform\\n */\\n function depositAll() external;\\n\\n /**\\n * @dev Withdraw given asset from Lending platform\\n */\\n function withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) external;\\n\\n /**\\n * @dev Liquidate all assets in strategy and return them to Vault.\\n */\\n function withdrawAll() external;\\n\\n /**\\n * @dev Returns the current balance of the given asset.\\n */\\n function checkBalance(address _asset)\\n external\\n view\\n returns (uint256 balance);\\n\\n /**\\n * @dev Returns bool indicating whether strategy supports asset.\\n */\\n function supportsAsset(address _asset) external view returns (bool);\\n\\n /**\\n * @dev Collect reward tokens from the Strategy.\\n */\\n function collectRewardTokens() external;\\n\\n /**\\n * @dev The address array of the reward tokens for the Strategy.\\n */\\n function getRewardTokenAddresses() external view returns (address[] memory);\\n}\\n\",\"keccak256\":\"0xb291e409a9b95527f9ed19cd6bff8eeb9921a21c1f5194a48c0bb9ce6613959a\",\"license\":\"MIT\"},\"contracts/interfaces/IVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { VaultStorage } from \\\"../vault/VaultStorage.sol\\\";\\n\\ninterface IVault {\\n event AssetSupported(address _asset);\\n event AssetDefaultStrategyUpdated(address _asset, address _strategy);\\n event AssetAllocated(address _asset, address _strategy, uint256 _amount);\\n event StrategyApproved(address _addr);\\n event StrategyRemoved(address _addr);\\n event Mint(address _addr, uint256 _value);\\n event Redeem(address _addr, uint256 _value);\\n event CapitalPaused();\\n event CapitalUnpaused();\\n event RebasePaused();\\n event RebaseUnpaused();\\n event VaultBufferUpdated(uint256 _vaultBuffer);\\n event RedeemFeeUpdated(uint256 _redeemFeeBps);\\n event PriceProviderUpdated(address _priceProvider);\\n event AllocateThresholdUpdated(uint256 _threshold);\\n event RebaseThresholdUpdated(uint256 _threshold);\\n event StrategistUpdated(address _address);\\n event MaxSupplyDiffChanged(uint256 maxSupplyDiff);\\n event YieldDistribution(address _to, uint256 _yield, uint256 _fee);\\n event TrusteeFeeBpsChanged(uint256 _basis);\\n event TrusteeAddressChanged(address _address);\\n event SwapperChanged(address _address);\\n event SwapAllowedUndervalueChanged(uint256 _basis);\\n event SwapSlippageChanged(address _asset, uint256 _basis);\\n event Swapped(\\n address indexed _fromAsset,\\n address indexed _toAsset,\\n uint256 _fromAssetAmount,\\n uint256 _toAssetAmount\\n );\\n\\n // Governable.sol\\n function transferGovernance(address _newGovernor) external;\\n\\n function claimGovernance() external;\\n\\n function governor() external view returns (address);\\n\\n // VaultAdmin.sol\\n function setPriceProvider(address _priceProvider) external;\\n\\n function priceProvider() external view returns (address);\\n\\n function setRedeemFeeBps(uint256 _redeemFeeBps) external;\\n\\n function redeemFeeBps() external view returns (uint256);\\n\\n function setVaultBuffer(uint256 _vaultBuffer) external;\\n\\n function vaultBuffer() external view returns (uint256);\\n\\n function setAutoAllocateThreshold(uint256 _threshold) external;\\n\\n function autoAllocateThreshold() external view returns (uint256);\\n\\n function setRebaseThreshold(uint256 _threshold) external;\\n\\n function rebaseThreshold() external view returns (uint256);\\n\\n function setStrategistAddr(address _address) external;\\n\\n function strategistAddr() external view returns (address);\\n\\n function setMaxSupplyDiff(uint256 _maxSupplyDiff) external;\\n\\n function maxSupplyDiff() external view returns (uint256);\\n\\n function setTrusteeAddress(address _address) external;\\n\\n function trusteeAddress() external view returns (address);\\n\\n function setTrusteeFeeBps(uint256 _basis) external;\\n\\n function trusteeFeeBps() external view returns (uint256);\\n\\n function ousdMetaStrategy() external view returns (address);\\n\\n function setSwapper(address _swapperAddr) external;\\n\\n function setSwapAllowedUndervalue(uint16 _percentageBps) external;\\n\\n function setOracleSlippage(address _asset, uint16 _allowedOracleSlippageBps)\\n external;\\n\\n function supportAsset(address _asset, uint8 _supportsAsset) external;\\n\\n function approveStrategy(address _addr) external;\\n\\n function removeStrategy(address _addr) external;\\n\\n function setAssetDefaultStrategy(address _asset, address _strategy)\\n external;\\n\\n function assetDefaultStrategies(address _asset)\\n external\\n view\\n returns (address);\\n\\n function pauseRebase() external;\\n\\n function unpauseRebase() external;\\n\\n function rebasePaused() external view returns (bool);\\n\\n function pauseCapital() external;\\n\\n function unpauseCapital() external;\\n\\n function capitalPaused() external view returns (bool);\\n\\n function transferToken(address _asset, uint256 _amount) external;\\n\\n function priceUnitMint(address asset) external view returns (uint256);\\n\\n function priceUnitRedeem(address asset) external view returns (uint256);\\n\\n function withdrawAllFromStrategy(address _strategyAddr) external;\\n\\n function withdrawAllFromStrategies() external;\\n\\n function withdrawFromStrategy(\\n address _strategyFromAddress,\\n address[] calldata _assets,\\n uint256[] calldata _amounts\\n ) external;\\n\\n function depositToStrategy(\\n address _strategyToAddress,\\n address[] calldata _assets,\\n uint256[] calldata _amounts\\n ) external;\\n\\n // VaultCore.sol\\n function mint(\\n address _asset,\\n uint256 _amount,\\n uint256 _minimumOusdAmount\\n ) external;\\n\\n function mintForStrategy(uint256 _amount) external;\\n\\n function redeem(uint256 _amount, uint256 _minimumUnitAmount) external;\\n\\n function burnForStrategy(uint256 _amount) external;\\n\\n function redeemAll(uint256 _minimumUnitAmount) external;\\n\\n function allocate() external;\\n\\n function rebase() external;\\n\\n function swapCollateral(\\n address fromAsset,\\n address toAsset,\\n uint256 fromAssetAmount,\\n uint256 minToAssetAmount,\\n bytes calldata data\\n ) external returns (uint256 toAssetAmount);\\n\\n function totalValue() external view returns (uint256 value);\\n\\n function checkBalance(address _asset) external view returns (uint256);\\n\\n function calculateRedeemOutputs(uint256 _amount)\\n external\\n view\\n returns (uint256[] memory);\\n\\n function getAssetCount() external view returns (uint256);\\n\\n function getAssetConfig(address _asset)\\n external\\n view\\n returns (VaultStorage.Asset memory config);\\n\\n function getAllAssets() external view returns (address[] memory);\\n\\n function getStrategyCount() external view returns (uint256);\\n\\n function swapper() external view returns (address);\\n\\n function allowedSwapUndervalue() external view returns (uint256);\\n\\n function getAllStrategies() external view returns (address[] memory);\\n\\n function isSupportedAsset(address _asset) external view returns (bool);\\n\\n function netOusdMintForStrategyThreshold() external view returns (uint256);\\n\\n function setOusdMetaStrategy(address _ousdMetaStrategy) external;\\n\\n function setNetOusdMintForStrategyThreshold(uint256 _threshold) external;\\n\\n function netOusdMintedForStrategy() external view returns (int256);\\n\\n function weth() external view returns (address);\\n\\n function cacheWETHAssetIndex() external;\\n\\n function wethAssetIndex() external view returns (uint256);\\n\\n function initialize(address, address) external;\\n\\n function setAdminImpl(address) external;\\n\\n function removeAsset(address _asset) external;\\n}\\n\",\"keccak256\":\"0xa03ba17b6224bec26290794760fc807e017260406037b4f812970701888e72c8\",\"license\":\"MIT\"},\"contracts/interfaces/IWETH9.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IWETH9 {\\n event Approval(address indexed src, address indexed guy, uint256 wad);\\n event Deposit(address indexed dst, uint256 wad);\\n event Transfer(address indexed src, address indexed dst, uint256 wad);\\n event Withdrawal(address indexed src, uint256 wad);\\n\\n function allowance(address, address) external view returns (uint256);\\n\\n function approve(address guy, uint256 wad) external returns (bool);\\n\\n function balanceOf(address) external view returns (uint256);\\n\\n function decimals() external view returns (uint8);\\n\\n function deposit() external payable;\\n\\n function name() external view returns (string memory);\\n\\n function symbol() external view returns (string memory);\\n\\n function totalSupply() external view returns (uint256);\\n\\n function transfer(address dst, uint256 wad) external returns (bool);\\n\\n function transferFrom(\\n address src,\\n address dst,\\n uint256 wad\\n ) external returns (bool);\\n\\n function withdraw(uint256 wad) external;\\n}\\n\",\"keccak256\":\"0x05b7dce6c24d3cd4e48b5c6346d86e5e40ecc3291bcdf3f3ef091c98fc826519\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/FeeAccumulator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/**\\n * @title Fee Accumulator for Native Staking SSV Strategy\\n * @notice Receives execution rewards which includes tx fees and\\n * MEV rewards like tx priority and tx ordering.\\n * It does NOT include swept ETH from beacon chain consensus rewards or full validator withdrawals.\\n * @author Origin Protocol Inc\\n */\\ncontract FeeAccumulator {\\n /// @notice The address of the Native Staking Strategy\\n address public immutable STRATEGY;\\n\\n event ExecutionRewardsCollected(address indexed strategy, uint256 amount);\\n\\n /**\\n * @param _strategy Address of the Native Staking Strategy\\n */\\n constructor(address _strategy) {\\n STRATEGY = _strategy;\\n }\\n\\n /**\\n * @notice sends all ETH in this FeeAccumulator contract to the Native Staking Strategy.\\n * @return eth The amount of execution rewards that were sent to the Native Staking Strategy\\n */\\n function collect() external returns (uint256 eth) {\\n require(msg.sender == STRATEGY, \\\"Caller is not the Strategy\\\");\\n\\n eth = address(this).balance;\\n if (eth > 0) {\\n // Send the ETH to the Native Staking Strategy\\n Address.sendValue(payable(STRATEGY), eth);\\n\\n emit ExecutionRewardsCollected(STRATEGY, eth);\\n }\\n }\\n\\n /**\\n * @dev Accept ETH\\n */\\n receive() external payable {}\\n}\\n\",\"keccak256\":\"0x55ac966612d9e9d48678162b4ddc7aef53807644697206470def52887782d7f4\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { SafeERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\n\\nimport { InitializableAbstractStrategy } from \\\"../../utils/InitializableAbstractStrategy.sol\\\";\\nimport { IWETH9 } from \\\"../../interfaces/IWETH9.sol\\\";\\nimport { FeeAccumulator } from \\\"./FeeAccumulator.sol\\\";\\nimport { ValidatorAccountant } from \\\"./ValidatorAccountant.sol\\\";\\n\\nstruct ValidatorStakeData {\\n bytes pubkey;\\n bytes signature;\\n bytes32 depositDataRoot;\\n}\\n\\n/// @title Native Staking SSV Strategy\\n/// @notice Strategy to deploy funds into DVT validators powered by the SSV Network\\n/// @author Origin Protocol Inc\\n/// @dev This contract handles WETH and ETH and in some operations interchanges between the two. Any WETH that\\n/// is on the contract across multiple blocks (and not just transitory within a transaction) is considered an\\n/// asset. Meaning deposits increase the balance of the asset and withdrawal decrease it. As opposed to all\\n/// our other strategies the WETH doesn't immediately get deposited into an underlying strategy and can be present\\n/// across multiple blocks waiting to be unwrapped to ETH and staked to validators. This separation of WETH and ETH is\\n/// required since the rewards (reward token) is also in ETH.\\n///\\n/// To simplify the accounting of WETH there is another difference in behavior compared to the other strategies.\\n/// To withdraw WETH asset - exit message is posted to validators and the ETH hits this contract with multiple days\\n/// delay. In order to simplify the WETH accounting upon detection of such an event the ValidatorAccountant\\n/// immediately wraps ETH to WETH and sends it to the Vault.\\n///\\n/// On the other hand any ETH on the contract (across multiple blocks) is there either:\\n/// - as a result of already accounted for consensus rewards\\n/// - as a result of not yet accounted for consensus rewards\\n/// - as a results of not yet accounted for full validator withdrawals (or validator slashes)\\n///\\n/// Even though the strategy assets and rewards are a very similar asset the consensus layer rewards and the\\n/// execution layer rewards are considered rewards and those are dripped to the Vault over a configurable time\\n/// interval and not immediately.\\ncontract NativeStakingSSVStrategy is\\n ValidatorAccountant,\\n InitializableAbstractStrategy\\n{\\n using SafeERC20 for IERC20;\\n\\n /// @notice SSV ERC20 token that serves as a payment for operating SSV validators\\n address public immutable SSV_TOKEN;\\n /// @notice Fee collector address\\n /// @dev this address will receive Execution layer rewards - These are rewards earned for\\n /// executing transactions on the Ethereum network as part of block proposals. They include\\n /// priority fees (fees paid by users for their transactions to be included) and MEV rewards\\n /// (rewards for arranging transactions in a way that benefits the validator).\\n address payable public immutable FEE_ACCUMULATOR_ADDRESS;\\n\\n /// @dev This contract receives WETH as the deposit asset, but unlike other strategies doesn't immediately\\n /// deposit it to an underlying platform. Rather a special privilege account stakes it to the validators.\\n /// For that reason calling WETH.balanceOf(this) in a deposit function can contain WETH that has just been\\n /// deposited and also WETH that has previously been deposited. To keep a correct count we need to keep track\\n /// of WETH that has already been accounted for.\\n /// This value represents the amount of WETH balance of this contract that has already been accounted for by the\\n /// deposit events.\\n /// It is important to note that this variable is not concerned with WETH that is a result of full/partial\\n /// withdrawal of the validators. It is strictly concerned with WETH that has been deposited and is waiting to\\n /// be staked.\\n uint256 public depositedWethAccountedFor;\\n\\n // For future use\\n uint256[49] private __gap;\\n\\n /// @param _baseConfig Base strategy config with platformAddress (ERC-4626 Vault contract), eg sfrxETH or sDAI,\\n /// and vaultAddress (OToken Vault contract), eg VaultProxy or OETHVaultProxy\\n /// @param _wethAddress Address of the Erc20 WETH Token contract\\n /// @param _ssvToken Address of the Erc20 SSV Token contract\\n /// @param _ssvNetwork Address of the SSV Network contract\\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\\n /// @param _feeAccumulator Address of the fee accumulator receiving execution layer validator rewards\\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\\n constructor(\\n BaseStrategyConfig memory _baseConfig,\\n address _wethAddress,\\n address _ssvToken,\\n address _ssvNetwork,\\n uint256 _maxValidators,\\n address _feeAccumulator,\\n address _beaconChainDepositContract\\n )\\n InitializableAbstractStrategy(_baseConfig)\\n ValidatorAccountant(\\n _wethAddress,\\n _baseConfig.vaultAddress,\\n _beaconChainDepositContract,\\n _ssvNetwork,\\n _maxValidators\\n )\\n {\\n SSV_TOKEN = _ssvToken;\\n FEE_ACCUMULATOR_ADDRESS = payable(_feeAccumulator);\\n }\\n\\n /// @notice initialize function, to set up initial internal state\\n /// @param _rewardTokenAddresses Address of reward token for platform\\n /// @param _assets Addresses of initial supported assets\\n /// @param _pTokens Platform Token corresponding addresses\\n function initialize(\\n address[] memory _rewardTokenAddresses,\\n address[] memory _assets,\\n address[] memory _pTokens\\n ) external onlyGovernor initializer {\\n InitializableAbstractStrategy._initialize(\\n _rewardTokenAddresses,\\n _assets,\\n _pTokens\\n );\\n }\\n\\n /// @notice Unlike other strategies, this does not deposit assets into the underlying platform.\\n /// It just checks the asset is WETH and emits the Deposit event.\\n /// To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used.\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n /// @param _asset Address of asset to deposit. Has to be WETH.\\n /// @param _amount Amount of assets that were transferred to the strategy by the vault.\\n function deposit(address _asset, uint256 _amount)\\n external\\n override\\n onlyVault\\n nonReentrant\\n {\\n require(_asset == WETH, \\\"Unsupported asset\\\");\\n depositedWethAccountedFor += _amount;\\n _deposit(_asset, _amount);\\n }\\n\\n /// @dev Deposit WETH to this strategy so it can later be staked into a validator.\\n /// @param _asset Address of WETH\\n /// @param _amount Amount of WETH to deposit\\n function _deposit(address _asset, uint256 _amount) internal {\\n require(_amount > 0, \\\"Must deposit something\\\");\\n /*\\n * We could do a check here that would revert when \\\"_amount % 32 ether != 0\\\". With the idea of\\n * not allowing deposits that will result in WETH sitting on the strategy after all the possible batches\\n * of 32ETH have been staked.\\n * But someone could mess with our strategy by sending some WETH to it. And we might want to deposit just\\n * enough WETH to add it up to 32 so it can be staked. For that reason the check is left out.\\n *\\n * WETH sitting on the strategy won't interfere with the accounting since accounting only operates on ETH.\\n */\\n emit Deposit(_asset, address(0), _amount);\\n }\\n\\n /// @notice Unlike other strategies, this does not deposit assets into the underlying platform.\\n /// It just emits the Deposit event.\\n /// To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used.\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n function depositAll() external override onlyVault nonReentrant {\\n uint256 wethBalance = IERC20(WETH).balanceOf(address(this));\\n uint256 newWeth = wethBalance - depositedWethAccountedFor;\\n\\n if (newWeth > 0) {\\n depositedWethAccountedFor = wethBalance;\\n\\n _deposit(WETH, newWeth);\\n }\\n }\\n\\n /// @notice Withdraw WETH from this contract. Used only if some WETH for is lingering on the contract.\\n /// That can happen when:\\n /// - after mints if the strategy is the default\\n /// - time between depositToStrategy and stakeEth\\n /// - the deposit was not a multiple of 32 WETH\\n /// - someone sent WETH directly to this contract\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n /// @param _recipient Address to receive withdrawn assets\\n /// @param _asset WETH to withdraw\\n /// @param _amount Amount of WETH to withdraw\\n function withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) external override onlyVault nonReentrant {\\n require(_asset == WETH, \\\"Unsupported asset\\\");\\n _withdraw(_recipient, _asset, _amount);\\n }\\n\\n function _withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) internal {\\n require(_amount > 0, \\\"Must withdraw something\\\");\\n require(_recipient != address(0), \\\"Must specify recipient\\\");\\n\\n _wethWithdrawn(_amount);\\n\\n IERC20(_asset).safeTransfer(_recipient, _amount);\\n emit Withdrawal(_asset, address(0), _amount);\\n }\\n\\n /// @notice transfer all WETH deposits back to the vault.\\n /// This does not withdraw from the validators. That has to be done separately with the\\n /// `exitSsvValidator` and `removeSsvValidator` operations.\\n /// This does not withdraw any execution rewards from the FeeAccumulator or\\n /// consensus rewards in this strategy.\\n /// Any ETH in this strategy that was swept from a full validator withdrawal will not be withdrawn.\\n /// ETH from full validator withdrawals is sent to the Vault using `doAccounting`.\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n function withdrawAll() external override onlyVaultOrGovernor nonReentrant {\\n uint256 wethBalance = IERC20(WETH).balanceOf(address(this));\\n if (wethBalance > 0) {\\n _withdraw(vaultAddress, WETH, wethBalance);\\n }\\n }\\n\\n /// @notice Returns the total value of (W)ETH that is staked to the validators\\n /// and WETH deposits that are still to be staked.\\n /// This does not include ETH from consensus rewards sitting in this strategy\\n /// or ETH from MEV rewards in the FeeAccumulator. These rewards are harvested\\n /// and sent to the Dripper so will eventually be sent to the Vault as WETH.\\n /// @param _asset Address of weth asset\\n /// @return balance Total value of (W)ETH\\n function checkBalance(address _asset)\\n external\\n view\\n override\\n returns (uint256 balance)\\n {\\n require(_asset == WETH, \\\"Unsupported asset\\\");\\n\\n balance =\\n // add the ETH that has been staked in validators\\n activeDepositedValidators *\\n FULL_STAKE +\\n // add the WETH in the strategy from deposits that are still to be staked\\n IERC20(WETH).balanceOf(address(this));\\n }\\n\\n function pause() external onlyStrategist {\\n _pause();\\n }\\n\\n /// @notice Returns bool indicating whether asset is supported by strategy.\\n /// @param _asset The address of the asset token.\\n function supportsAsset(address _asset) public view override returns (bool) {\\n return _asset == WETH;\\n }\\n\\n /// @notice Approves the SSV Network contract to transfer SSV tokens for deposits\\n function safeApproveAllTokens() external override {\\n /// @dev Approves the SSV Network contract to transfer SSV tokens for deposits\\n IERC20(SSV_TOKEN).approve(SSV_NETWORK, type(uint256).max);\\n }\\n\\n /**\\n * @notice Only accept ETH from the FeeAccumulator and the WETH contract - required when\\n * unwrapping WETH just before staking it to the validator\\n * @dev don't want to receive donations from anyone else as this will\\n * mess with the accounting of the consensus rewards and validator full withdrawals\\n */\\n receive() external payable {\\n require(\\n msg.sender == FEE_ACCUMULATOR_ADDRESS || msg.sender == WETH,\\n \\\"Eth not from allowed contracts\\\"\\n );\\n }\\n\\n /***************************************\\n Internal functions\\n ****************************************/\\n\\n function _abstractSetPToken(address _asset, address) internal override {}\\n\\n /// @dev Convert accumulated ETH to WETH and send to the Harvester.\\n /// Will revert if the strategy is paused for accounting.\\n function _collectRewardTokens() internal override whenNotPaused {\\n // collect ETH from execution rewards from the fee accumulator\\n uint256 executionRewards = FeeAccumulator(FEE_ACCUMULATOR_ADDRESS)\\n .collect();\\n\\n // total ETH rewards to be harvested = execution rewards + consensus rewards\\n uint256 ethRewards = executionRewards + consensusRewards;\\n\\n require(\\n address(this).balance >= ethRewards,\\n \\\"Insufficient eth balance\\\"\\n );\\n\\n if (ethRewards > 0) {\\n // reset the counter keeping track of beacon chain consensus rewards\\n consensusRewards = 0;\\n\\n // Convert ETH rewards to WETH\\n IWETH9(WETH).deposit{ value: ethRewards }();\\n\\n IERC20(WETH).safeTransfer(harvesterAddress, ethRewards);\\n emit RewardTokenCollected(harvesterAddress, WETH, ethRewards);\\n }\\n }\\n\\n /// @dev emits Withdrawal event from NativeStakingSSVStrategy\\n function _wethWithdrawnToVault(uint256 _amount) internal override {\\n emit Withdrawal(WETH, address(0), _amount);\\n }\\n\\n /// @dev Called when WETH is withdrawn from the strategy or staked to a validator so\\n /// the strategy knows how much WETH it has on deposit.\\n /// This is so it can emit the correct amount in the Deposit event in depositAll().\\n function _wethWithdrawn(uint256 _amount) internal override {\\n /* In an ideal world we wouldn't need to reduce the deduction amount when the\\n * depositedWethAccountedFor is smaller than the _amount.\\n *\\n * The reason this is required is that a malicious actor could sent WETH directly\\n * to this contract and that would circumvent the increase of depositedWethAccountedFor\\n * property. When the ETH would be staked the depositedWethAccountedFor amount could\\n * be deducted so much that it would be negative.\\n */\\n uint256 deductAmount = Math.min(_amount, depositedWethAccountedFor);\\n depositedWethAccountedFor -= deductAmount;\\n }\\n}\\n\",\"keccak256\":\"0xd8c9e9fcf4f44909a7f9a04ec58ca6134ac0a3fe0ac4f59c970116c028bcc2d3\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/ValidatorAccountant.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { ValidatorRegistrator } from \\\"./ValidatorRegistrator.sol\\\";\\nimport { IWETH9 } from \\\"../../interfaces/IWETH9.sol\\\";\\n\\n/// @title Validator Accountant\\n/// @notice Attributes the ETH swept from beacon chain validators to this strategy contract\\n/// as either full or partial withdrawals. Partial withdrawals being consensus rewards.\\n/// Full withdrawals are from exited validators.\\n/// @author Origin Protocol Inc\\nabstract contract ValidatorAccountant is ValidatorRegistrator {\\n /// @notice The minimum amount of blocks that need to pass between two calls to manuallyFixAccounting\\n uint256 public constant MIN_FIX_ACCOUNTING_CADENCE = 7200; // 1 day\\n\\n /// @notice Keeps track of the total consensus rewards swept from the beacon chain\\n uint256 public consensusRewards;\\n\\n /// @notice start of fuse interval\\n uint256 public fuseIntervalStart;\\n /// @notice end of fuse interval\\n uint256 public fuseIntervalEnd;\\n /// @notice last block number manuallyFixAccounting has been called\\n uint256 public lastFixAccountingBlockNumber;\\n\\n uint256[49] private __gap;\\n\\n event FuseIntervalUpdated(uint256 start, uint256 end);\\n event AccountingFullyWithdrawnValidator(\\n uint256 noOfValidators,\\n uint256 remainingValidators,\\n uint256 wethSentToVault\\n );\\n event AccountingValidatorSlashed(\\n uint256 remainingValidators,\\n uint256 wethSentToVault\\n );\\n event AccountingConsensusRewards(uint256 amount);\\n\\n event AccountingManuallyFixed(\\n int256 validatorsDelta,\\n int256 consensusRewardsDelta,\\n uint256 wethToVault\\n );\\n\\n /// @param _wethAddress Address of the Erc20 WETH Token contract\\n /// @param _vaultAddress Address of the Vault\\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\\n /// @param _ssvNetwork Address of the SSV Network contract\\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\\n constructor(\\n address _wethAddress,\\n address _vaultAddress,\\n address _beaconChainDepositContract,\\n address _ssvNetwork,\\n uint256 _maxValidators\\n )\\n ValidatorRegistrator(\\n _wethAddress,\\n _vaultAddress,\\n _beaconChainDepositContract,\\n _ssvNetwork,\\n _maxValidators\\n )\\n {}\\n\\n /// @notice set fuse interval values\\n function setFuseInterval(\\n uint256 _fuseIntervalStart,\\n uint256 _fuseIntervalEnd\\n ) external onlyGovernor {\\n require(\\n _fuseIntervalStart < _fuseIntervalEnd &&\\n _fuseIntervalEnd < 32 ether &&\\n _fuseIntervalEnd - _fuseIntervalStart >= 4 ether,\\n \\\"Incorrect fuse interval\\\"\\n );\\n\\n fuseIntervalStart = _fuseIntervalStart;\\n fuseIntervalEnd = _fuseIntervalEnd;\\n\\n emit FuseIntervalUpdated(_fuseIntervalStart, _fuseIntervalEnd);\\n }\\n\\n /* solhint-disable max-line-length */\\n /// This notion page offers a good explanation of how the accounting functions\\n /// https://www.notion.so/originprotocol/Limited-simplified-native-staking-accounting-67a217c8420d40678eb943b9da0ee77d\\n /// In short, after dividing by 32, if the ETH remaining on the contract falls between 0 and fuseIntervalStart,\\n /// the accounting function will treat that ETH as Beacon chain consensus rewards.\\n /// On the contrary, if after dividing by 32, the ETH remaining on the contract falls between fuseIntervalEnd and 32,\\n /// the accounting function will treat that as a validator slashing.\\n /// @notice Perform the accounting attributing beacon chain ETH to either full or partial withdrawals. Returns true when\\n /// accounting is valid and fuse isn't \\\"blown\\\". Returns false when fuse is blown.\\n /// @dev This function could in theory be permission-less but lets allow only the Registrator (Defender Action) to call it\\n /// for now.\\n /// @return accountingValid true if accounting was successful, false if fuse is blown\\n /* solhint-enable max-line-length */\\n function doAccounting()\\n external\\n onlyRegistrator\\n whenNotPaused\\n nonReentrant\\n returns (bool accountingValid)\\n {\\n // pause the accounting on failure\\n accountingValid = _doAccounting(true);\\n }\\n\\n // slither-disable-start reentrancy-eth\\n function _doAccounting(bool pauseOnFail)\\n internal\\n returns (bool accountingValid)\\n {\\n if (address(this).balance < consensusRewards) {\\n return _failAccounting(pauseOnFail);\\n }\\n\\n // Calculate all the new ETH that has been swept to the contract since the last accounting\\n uint256 newSweptETH = address(this).balance - consensusRewards;\\n accountingValid = true;\\n\\n // send the ETH that is from fully withdrawn validators to the Vault\\n if (newSweptETH >= FULL_STAKE) {\\n uint256 fullyWithdrawnValidators;\\n // explicitly cast to uint256 as we want to round to a whole number of validators\\n fullyWithdrawnValidators = uint256(newSweptETH / FULL_STAKE);\\n activeDepositedValidators -= fullyWithdrawnValidators;\\n\\n uint256 wethToVault = FULL_STAKE * fullyWithdrawnValidators;\\n IWETH9(WETH).deposit{ value: wethToVault }();\\n // slither-disable-next-line unchecked-transfer\\n IWETH9(WETH).transfer(VAULT_ADDRESS, wethToVault);\\n _wethWithdrawnToVault(wethToVault);\\n\\n emit AccountingFullyWithdrawnValidator(\\n fullyWithdrawnValidators,\\n activeDepositedValidators,\\n wethToVault\\n );\\n }\\n\\n uint256 ethRemaining = address(this).balance - consensusRewards;\\n // should be less than a whole validator stake\\n require(ethRemaining < FULL_STAKE, \\\"Unexpected accounting\\\");\\n\\n // If no Beacon chain consensus rewards swept\\n if (ethRemaining == 0) {\\n // do nothing\\n return accountingValid;\\n } else if (ethRemaining < fuseIntervalStart) {\\n // Beacon chain consensus rewards swept (partial validator withdrawals)\\n // solhint-disable-next-line reentrancy\\n consensusRewards += ethRemaining;\\n emit AccountingConsensusRewards(ethRemaining);\\n } else if (ethRemaining > fuseIntervalEnd) {\\n // Beacon chain consensus rewards swept but also a slashed validator fully exited\\n IWETH9(WETH).deposit{ value: ethRemaining }();\\n // slither-disable-next-line unchecked-transfer\\n IWETH9(WETH).transfer(VAULT_ADDRESS, ethRemaining);\\n activeDepositedValidators -= 1;\\n\\n _wethWithdrawnToVault(ethRemaining);\\n\\n emit AccountingValidatorSlashed(\\n activeDepositedValidators,\\n ethRemaining\\n );\\n }\\n // Oh no... Fuse is blown. The Strategist needs to adjust the accounting values.\\n else {\\n return _failAccounting(pauseOnFail);\\n }\\n }\\n\\n // slither-disable-end reentrancy-eth\\n\\n /// @dev pause any further accounting if required and return false\\n function _failAccounting(bool pauseOnFail)\\n internal\\n returns (bool accountingValid)\\n {\\n // pause if not already\\n if (pauseOnFail) {\\n _pause();\\n }\\n // fail the accounting\\n accountingValid = false;\\n }\\n\\n /// @notice Allow the Strategist to fix the accounting of this strategy and unpause.\\n /// @param _validatorsDelta adjust the active validators by up to plus three or minus three\\n /// @param _consensusRewardsDelta adjust the accounted for consensus rewards up or down\\n /// @param _ethToVaultAmount the amount of ETH that gets wrapped into WETH and sent to the Vault\\n /// @dev There is a case when a validator(s) gets slashed so much that the eth swept from\\n /// the beacon chain enters the fuse area and there are no consensus rewards on the contract\\n /// to \\\"dip into\\\"/use. To increase the amount of unaccounted ETH over the fuse end interval\\n /// we need to reduce the amount of active deposited validators and immediately send WETH\\n /// to the vault, so it doesn't interfere with further accounting.\\n function manuallyFixAccounting(\\n int256 _validatorsDelta,\\n int256 _consensusRewardsDelta,\\n uint256 _ethToVaultAmount\\n ) external onlyStrategist whenPaused nonReentrant {\\n require(\\n lastFixAccountingBlockNumber + MIN_FIX_ACCOUNTING_CADENCE <\\n block.number,\\n \\\"Fix accounting called too soon\\\"\\n );\\n require(\\n _validatorsDelta >= -3 &&\\n _validatorsDelta <= 3 &&\\n // new value must be positive\\n int256(activeDepositedValidators) + _validatorsDelta >= 0,\\n \\\"Invalid validatorsDelta\\\"\\n );\\n require(\\n _consensusRewardsDelta >= -332 ether &&\\n _consensusRewardsDelta <= 332 ether &&\\n // new value must be positive\\n int256(consensusRewards) + _consensusRewardsDelta >= 0,\\n \\\"Invalid consensusRewardsDelta\\\"\\n );\\n require(_ethToVaultAmount <= 32 ether * 3, \\\"Invalid wethToVaultAmount\\\");\\n\\n activeDepositedValidators = uint256(\\n int256(activeDepositedValidators) + _validatorsDelta\\n );\\n consensusRewards = uint256(\\n int256(consensusRewards) + _consensusRewardsDelta\\n );\\n lastFixAccountingBlockNumber = block.number;\\n if (_ethToVaultAmount > 0) {\\n IWETH9(WETH).deposit{ value: _ethToVaultAmount }();\\n // slither-disable-next-line unchecked-transfer\\n IWETH9(WETH).transfer(VAULT_ADDRESS, _ethToVaultAmount);\\n _wethWithdrawnToVault(_ethToVaultAmount);\\n }\\n\\n emit AccountingManuallyFixed(\\n _validatorsDelta,\\n _consensusRewardsDelta,\\n _ethToVaultAmount\\n );\\n\\n // rerun the accounting to see if it has now been fixed.\\n // Do not pause the accounting on failure as it is already paused\\n require(_doAccounting(false), \\\"Fuse still blown\\\");\\n\\n // unpause since doAccounting was successful\\n _unpause();\\n }\\n\\n /***************************************\\n Abstract\\n ****************************************/\\n\\n /// @dev allows for NativeStakingSSVStrategy contract to emit the Withdrawal event\\n function _wethWithdrawnToVault(uint256 _amount) internal virtual;\\n}\\n\",\"keccak256\":\"0xeeb0a7154b30156331f790d50ae82ce56be4c6589080a3bdd53fb6cf4815ec56\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/ValidatorRegistrator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Pausable } from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\nimport { Governable } from \\\"../../governance/Governable.sol\\\";\\nimport { IDepositContract } from \\\"../../interfaces/IDepositContract.sol\\\";\\nimport { IVault } from \\\"../../interfaces/IVault.sol\\\";\\nimport { IWETH9 } from \\\"../../interfaces/IWETH9.sol\\\";\\nimport { ISSVNetwork, Cluster } from \\\"../../interfaces/ISSVNetwork.sol\\\";\\n\\nstruct ValidatorStakeData {\\n bytes pubkey;\\n bytes signature;\\n bytes32 depositDataRoot;\\n}\\n\\n/**\\n * @title Registrator of the validators\\n * @notice This contract implements all the required functionality to register, exit and remove validators.\\n * @author Origin Protocol Inc\\n */\\nabstract contract ValidatorRegistrator is Governable, Pausable {\\n /// @notice The maximum amount of ETH that can be staked by a validator\\n /// @dev this can change in the future with EIP-7251, Increase the MAX_EFFECTIVE_BALANCE\\n uint256 public constant FULL_STAKE = 32 ether;\\n\\n /// @notice The address of the Wrapped ETH (WETH) token contract\\n address public immutable WETH;\\n /// @notice The address of the beacon chain deposit contract\\n address public immutable BEACON_CHAIN_DEPOSIT_CONTRACT;\\n /// @notice The address of the SSV Network contract used to interface with\\n address public immutable SSV_NETWORK;\\n /// @notice Address of the OETH Vault proxy contract\\n address public immutable VAULT_ADDRESS;\\n /// @notice Maximum number of validators that can be registered in this strategy\\n uint256 public immutable MAX_VALIDATORS;\\n\\n /// @notice Address of the registrator - allowed to register, exit and remove validators\\n address public validatorRegistrator;\\n /// @notice The number of validators that have 32 (!) ETH actively deposited. When a new deposit\\n /// to a validator happens this number increases, when a validator exit is detected this number\\n /// decreases.\\n uint256 public activeDepositedValidators;\\n /// @notice State of the validators keccak256(pubKey) => state\\n mapping(bytes32 => VALIDATOR_STATE) public validatorsStates;\\n /// @notice The account that is allowed to modify stakeETHThreshold and reset stakeETHTally\\n address public stakingMonitor;\\n /// @notice Amount of ETH that can be staked before staking on the contract is suspended\\n /// and the `stakingMonitor` needs to approve further staking by calling `resetStakeETHTally`\\n uint256 public stakeETHThreshold;\\n /// @notice Amount of ETH that has been staked since the `stakingMonitor` last called `resetStakeETHTally`.\\n /// This can not go above `stakeETHThreshold`.\\n uint256 public stakeETHTally;\\n // For future use\\n uint256[47] private __gap;\\n\\n enum VALIDATOR_STATE {\\n NON_REGISTERED, // validator is not registered on the SSV network\\n REGISTERED, // validator is registered on the SSV network\\n STAKED, // validator has funds staked\\n EXITING, // exit message has been posted and validator is in the process of exiting\\n EXIT_COMPLETE // validator has funds withdrawn to the EigenPod and is removed from the SSV\\n }\\n\\n event RegistratorChanged(address indexed newAddress);\\n event StakingMonitorChanged(address indexed newAddress);\\n event ETHStaked(bytes32 indexed pubKeyHash, bytes pubKey, uint256 amount);\\n event SSVValidatorRegistered(\\n bytes32 indexed pubKeyHash,\\n bytes pubKey,\\n uint64[] operatorIds\\n );\\n event SSVValidatorExitInitiated(\\n bytes32 indexed pubKeyHash,\\n bytes pubKey,\\n uint64[] operatorIds\\n );\\n event SSVValidatorExitCompleted(\\n bytes32 indexed pubKeyHash,\\n bytes pubKey,\\n uint64[] operatorIds\\n );\\n event StakeETHThresholdChanged(uint256 amount);\\n event StakeETHTallyReset();\\n\\n /// @dev Throws if called by any account other than the Registrator\\n modifier onlyRegistrator() {\\n require(\\n msg.sender == validatorRegistrator,\\n \\\"Caller is not the Registrator\\\"\\n );\\n _;\\n }\\n\\n /// @dev Throws if called by any account other than the Staking monitor\\n modifier onlyStakingMonitor() {\\n require(msg.sender == stakingMonitor, \\\"Caller is not the Monitor\\\");\\n _;\\n }\\n\\n /// @dev Throws if called by any account other than the Strategist\\n modifier onlyStrategist() {\\n require(\\n msg.sender == IVault(VAULT_ADDRESS).strategistAddr(),\\n \\\"Caller is not the Strategist\\\"\\n );\\n _;\\n }\\n\\n /// @param _wethAddress Address of the Erc20 WETH Token contract\\n /// @param _vaultAddress Address of the Vault\\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\\n /// @param _ssvNetwork Address of the SSV Network contract\\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\\n constructor(\\n address _wethAddress,\\n address _vaultAddress,\\n address _beaconChainDepositContract,\\n address _ssvNetwork,\\n uint256 _maxValidators\\n ) {\\n WETH = _wethAddress;\\n BEACON_CHAIN_DEPOSIT_CONTRACT = _beaconChainDepositContract;\\n SSV_NETWORK = _ssvNetwork;\\n VAULT_ADDRESS = _vaultAddress;\\n MAX_VALIDATORS = _maxValidators;\\n }\\n\\n /// @notice Set the address of the registrator which can register, exit and remove validators\\n function setRegistrator(address _address) external onlyGovernor {\\n validatorRegistrator = _address;\\n emit RegistratorChanged(_address);\\n }\\n\\n /// @notice Set the address of the staking monitor that is allowed to reset stakeETHTally\\n function setStakingMonitor(address _address) external onlyGovernor {\\n stakingMonitor = _address;\\n emit StakingMonitorChanged(_address);\\n }\\n\\n /// @notice Set the amount of ETH that can be staked before staking monitor\\n // needs to a approve further staking by resetting the stake ETH tally\\n function setStakeETHThreshold(uint256 _amount) external onlyGovernor {\\n stakeETHThreshold = _amount;\\n emit StakeETHThresholdChanged(_amount);\\n }\\n\\n /// @notice Reset the stakeETHTally\\n function resetStakeETHTally() external onlyStakingMonitor {\\n stakeETHTally = 0;\\n emit StakeETHTallyReset();\\n }\\n\\n /// @notice Stakes WETH to the node validators\\n /// @param validators A list of validator data needed to stake.\\n /// The `ValidatorStakeData` struct contains the pubkey, signature and depositDataRoot.\\n /// Only the registrator can call this function.\\n // slither-disable-start reentrancy-eth\\n function stakeEth(ValidatorStakeData[] calldata validators)\\n external\\n onlyRegistrator\\n whenNotPaused\\n nonReentrant\\n {\\n uint256 requiredETH = validators.length * FULL_STAKE;\\n\\n // Check there is enough WETH from the deposits sitting in this strategy contract\\n require(\\n requiredETH <= IWETH9(WETH).balanceOf(address(this)),\\n \\\"Insufficient WETH\\\"\\n );\\n require(\\n activeDepositedValidators + validators.length <= MAX_VALIDATORS,\\n \\\"Max validators reached\\\"\\n );\\n\\n require(\\n stakeETHTally + requiredETH <= stakeETHThreshold,\\n \\\"Staking ETH over threshold\\\"\\n );\\n stakeETHTally += requiredETH;\\n\\n // Convert required ETH from WETH\\n IWETH9(WETH).withdraw(requiredETH);\\n _wethWithdrawn(requiredETH);\\n\\n /* 0x01 to indicate that withdrawal credentials will contain an EOA address that the sweeping function\\n * can sweep funds to.\\n * bytes11(0) to fill up the required zeros\\n * remaining bytes20 are for the address\\n */\\n bytes memory withdrawalCredentials = abi.encodePacked(\\n bytes1(0x01),\\n bytes11(0),\\n address(this)\\n );\\n\\n // For each validator\\n for (uint256 i = 0; i < validators.length; ++i) {\\n bytes32 pubKeyHash = keccak256(validators[i].pubkey);\\n\\n require(\\n validatorsStates[pubKeyHash] == VALIDATOR_STATE.REGISTERED,\\n \\\"Validator not registered\\\"\\n );\\n\\n IDepositContract(BEACON_CHAIN_DEPOSIT_CONTRACT).deposit{\\n value: FULL_STAKE\\n }(\\n validators[i].pubkey,\\n withdrawalCredentials,\\n validators[i].signature,\\n validators[i].depositDataRoot\\n );\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.STAKED;\\n\\n emit ETHStaked(pubKeyHash, validators[i].pubkey, FULL_STAKE);\\n }\\n // save gas by changing this storage variable only once rather each time in the loop.\\n activeDepositedValidators += validators.length;\\n }\\n\\n // slither-disable-end reentrancy-eth\\n\\n /// @notice Registers a new validator in the SSV Cluster.\\n /// Only the registrator can call this function.\\n /// @param publicKeys The public keys of the validators\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n /// @param sharesData The shares data for each validator\\n /// @param ssvAmount The amount of SSV tokens to be deposited to the SSV cluster\\n /// @param cluster The SSV cluster details including the validator count and SSV balance\\n // slither-disable-start reentrancy-no-eth\\n function registerSsvValidators(\\n bytes[] calldata publicKeys,\\n uint64[] calldata operatorIds,\\n bytes[] calldata sharesData,\\n uint256 ssvAmount,\\n Cluster calldata cluster\\n ) external onlyRegistrator whenNotPaused {\\n require(\\n publicKeys.length == sharesData.length,\\n \\\"Pubkey sharesData mismatch\\\"\\n );\\n // Check each public key has not already been used\\n bytes32 pubKeyHash;\\n VALIDATOR_STATE currentState;\\n for (uint256 i = 0; i < publicKeys.length; ++i) {\\n pubKeyHash = keccak256(publicKeys[i]);\\n currentState = validatorsStates[pubKeyHash];\\n require(\\n currentState == VALIDATOR_STATE.NON_REGISTERED,\\n \\\"Validator already registered\\\"\\n );\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.REGISTERED;\\n\\n emit SSVValidatorRegistered(pubKeyHash, publicKeys[i], operatorIds);\\n }\\n\\n ISSVNetwork(SSV_NETWORK).bulkRegisterValidator(\\n publicKeys,\\n operatorIds,\\n sharesData,\\n ssvAmount,\\n cluster\\n );\\n }\\n\\n // slither-disable-end reentrancy-no-eth\\n\\n /// @notice Exit a validator from the Beacon chain.\\n /// The staked ETH will eventually swept to this native staking strategy.\\n /// Only the registrator can call this function.\\n /// @param publicKey The public key of the validator\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n // slither-disable-start reentrancy-no-eth\\n function exitSsvValidator(\\n bytes calldata publicKey,\\n uint64[] calldata operatorIds\\n ) external onlyRegistrator whenNotPaused {\\n bytes32 pubKeyHash = keccak256(publicKey);\\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\\n require(currentState == VALIDATOR_STATE.STAKED, \\\"Validator not staked\\\");\\n\\n ISSVNetwork(SSV_NETWORK).exitValidator(publicKey, operatorIds);\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXITING;\\n\\n emit SSVValidatorExitInitiated(pubKeyHash, publicKey, operatorIds);\\n }\\n\\n // slither-disable-end reentrancy-no-eth\\n\\n /// @notice Remove a validator from the SSV Cluster.\\n /// Make sure `exitSsvValidator` is called before and the validate has exited the Beacon chain.\\n /// If removed before the validator has exited the beacon chain will result in the validator being slashed.\\n /// Only the registrator can call this function.\\n /// @param publicKey The public key of the validator\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n /// @param cluster The SSV cluster details including the validator count and SSV balance\\n // slither-disable-start reentrancy-no-eth\\n function removeSsvValidator(\\n bytes calldata publicKey,\\n uint64[] calldata operatorIds,\\n Cluster calldata cluster\\n ) external onlyRegistrator whenNotPaused {\\n bytes32 pubKeyHash = keccak256(publicKey);\\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\\n // Can remove SSV validators that were incorrectly registered and can not be deposited to.\\n require(\\n currentState == VALIDATOR_STATE.EXITING ||\\n currentState == VALIDATOR_STATE.REGISTERED,\\n \\\"Validator not regd or exiting\\\"\\n );\\n\\n ISSVNetwork(SSV_NETWORK).removeValidator(\\n publicKey,\\n operatorIds,\\n cluster\\n );\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXIT_COMPLETE;\\n\\n emit SSVValidatorExitCompleted(pubKeyHash, publicKey, operatorIds);\\n }\\n\\n // slither-disable-end reentrancy-no-eth\\n\\n /// @notice Deposits more SSV Tokens to the SSV Network contract which is used to pay the SSV Operators.\\n /// @dev A SSV cluster is defined by the SSVOwnerAddress and the set of operatorIds.\\n /// uses \\\"onlyStrategist\\\" modifier so continuous front-running can't DOS our maintenance service\\n /// that tries to top up SSV tokens.\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n /// @param ssvAmount The amount of SSV tokens to be deposited to the SSV cluster\\n /// @param cluster The SSV cluster details including the validator count and SSV balance\\n function depositSSV(\\n uint64[] memory operatorIds,\\n uint256 ssvAmount,\\n Cluster memory cluster\\n ) external onlyStrategist {\\n ISSVNetwork(SSV_NETWORK).deposit(\\n address(this),\\n operatorIds,\\n ssvAmount,\\n cluster\\n );\\n }\\n\\n /***************************************\\n Abstract\\n ****************************************/\\n\\n /// @dev Called when WETH is withdrawn from the strategy or staked to a validator so\\n /// the strategy knows how much WETH it has on deposit.\\n /// This is so it can emit the correct amount in the Deposit event in depositAll().\\n function _wethWithdrawn(uint256 _amount) internal virtual;\\n}\\n\",\"keccak256\":\"0x7c095f0245ba63edfebdbb101d539a359c44337e1c6fb2315aa84578e976cdc3\",\"license\":\"MIT\"},\"contracts/token/OUSD.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title OUSD Token Contract\\n * @dev ERC20 compatible contract for OUSD\\n * @dev Implements an elastic supply\\n * @author Origin Protocol Inc\\n */\\nimport { SafeMath } from \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport { Initializable } from \\\"../utils/Initializable.sol\\\";\\nimport { InitializableERC20Detailed } from \\\"../utils/InitializableERC20Detailed.sol\\\";\\nimport { StableMath } from \\\"../utils/StableMath.sol\\\";\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\n\\n/**\\n * NOTE that this is an ERC20 token but the invariant that the sum of\\n * balanceOf(x) for all x is not >= totalSupply(). This is a consequence of the\\n * rebasing design. Any integrations with OUSD should be aware.\\n */\\n\\ncontract OUSD is Initializable, InitializableERC20Detailed, Governable {\\n using SafeMath for uint256;\\n using StableMath for uint256;\\n\\n event TotalSupplyUpdatedHighres(\\n uint256 totalSupply,\\n uint256 rebasingCredits,\\n uint256 rebasingCreditsPerToken\\n );\\n event AccountRebasingEnabled(address account);\\n event AccountRebasingDisabled(address account);\\n\\n enum RebaseOptions {\\n NotSet,\\n OptOut,\\n OptIn\\n }\\n\\n uint256 private constant MAX_SUPPLY = ~uint128(0); // (2^128) - 1\\n uint256 public _totalSupply;\\n mapping(address => mapping(address => uint256)) private _allowances;\\n address public vaultAddress = address(0);\\n mapping(address => uint256) private _creditBalances;\\n uint256 private _rebasingCredits;\\n uint256 private _rebasingCreditsPerToken;\\n // Frozen address/credits are non rebasing (value is held in contracts which\\n // do not receive yield unless they explicitly opt in)\\n uint256 public nonRebasingSupply;\\n mapping(address => uint256) public nonRebasingCreditsPerToken;\\n mapping(address => RebaseOptions) public rebaseState;\\n mapping(address => uint256) public isUpgraded;\\n\\n uint256 private constant RESOLUTION_INCREASE = 1e9;\\n\\n function initialize(\\n string calldata _nameArg,\\n string calldata _symbolArg,\\n address _vaultAddress,\\n uint256 _initialCreditsPerToken\\n ) external onlyGovernor initializer {\\n InitializableERC20Detailed._initialize(_nameArg, _symbolArg, 18);\\n _rebasingCreditsPerToken = _initialCreditsPerToken;\\n vaultAddress = _vaultAddress;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault contract\\n */\\n modifier onlyVault() {\\n require(vaultAddress == msg.sender, \\\"Caller is not the Vault\\\");\\n _;\\n }\\n\\n /**\\n * @return The total supply of OUSD.\\n */\\n function totalSupply() public view override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @return Low resolution rebasingCreditsPerToken\\n */\\n function rebasingCreditsPerToken() public view returns (uint256) {\\n return _rebasingCreditsPerToken / RESOLUTION_INCREASE;\\n }\\n\\n /**\\n * @return Low resolution total number of rebasing credits\\n */\\n function rebasingCredits() public view returns (uint256) {\\n return _rebasingCredits / RESOLUTION_INCREASE;\\n }\\n\\n /**\\n * @return High resolution rebasingCreditsPerToken\\n */\\n function rebasingCreditsPerTokenHighres() public view returns (uint256) {\\n return _rebasingCreditsPerToken;\\n }\\n\\n /**\\n * @return High resolution total number of rebasing credits\\n */\\n function rebasingCreditsHighres() public view returns (uint256) {\\n return _rebasingCredits;\\n }\\n\\n /**\\n * @dev Gets the balance of the specified address.\\n * @param _account Address to query the balance of.\\n * @return A uint256 representing the amount of base units owned by the\\n * specified address.\\n */\\n function balanceOf(address _account)\\n public\\n view\\n override\\n returns (uint256)\\n {\\n if (_creditBalances[_account] == 0) return 0;\\n return\\n _creditBalances[_account].divPrecisely(_creditsPerToken(_account));\\n }\\n\\n /**\\n * @dev Gets the credits balance of the specified address.\\n * @dev Backwards compatible with old low res credits per token.\\n * @param _account The address to query the balance of.\\n * @return (uint256, uint256) Credit balance and credits per token of the\\n * address\\n */\\n function creditsBalanceOf(address _account)\\n public\\n view\\n returns (uint256, uint256)\\n {\\n uint256 cpt = _creditsPerToken(_account);\\n if (cpt == 1e27) {\\n // For a period before the resolution upgrade, we created all new\\n // contract accounts at high resolution. Since they are not changing\\n // as a result of this upgrade, we will return their true values\\n return (_creditBalances[_account], cpt);\\n } else {\\n return (\\n _creditBalances[_account] / RESOLUTION_INCREASE,\\n cpt / RESOLUTION_INCREASE\\n );\\n }\\n }\\n\\n /**\\n * @dev Gets the credits balance of the specified address.\\n * @param _account The address to query the balance of.\\n * @return (uint256, uint256, bool) Credit balance, credits per token of the\\n * address, and isUpgraded\\n */\\n function creditsBalanceOfHighres(address _account)\\n public\\n view\\n returns (\\n uint256,\\n uint256,\\n bool\\n )\\n {\\n return (\\n _creditBalances[_account],\\n _creditsPerToken(_account),\\n isUpgraded[_account] == 1\\n );\\n }\\n\\n /**\\n * @dev Transfer tokens to a specified address.\\n * @param _to the address to transfer to.\\n * @param _value the amount to be transferred.\\n * @return true on success.\\n */\\n function transfer(address _to, uint256 _value)\\n public\\n override\\n returns (bool)\\n {\\n require(_to != address(0), \\\"Transfer to zero address\\\");\\n require(\\n _value <= balanceOf(msg.sender),\\n \\\"Transfer greater than balance\\\"\\n );\\n\\n _executeTransfer(msg.sender, _to, _value);\\n\\n emit Transfer(msg.sender, _to, _value);\\n\\n return true;\\n }\\n\\n /**\\n * @dev Transfer tokens from one address to another.\\n * @param _from The address you want to send tokens from.\\n * @param _to The address you want to transfer to.\\n * @param _value The amount of tokens to be transferred.\\n */\\n function transferFrom(\\n address _from,\\n address _to,\\n uint256 _value\\n ) public override returns (bool) {\\n require(_to != address(0), \\\"Transfer to zero address\\\");\\n require(_value <= balanceOf(_from), \\\"Transfer greater than balance\\\");\\n\\n _allowances[_from][msg.sender] = _allowances[_from][msg.sender].sub(\\n _value\\n );\\n\\n _executeTransfer(_from, _to, _value);\\n\\n emit Transfer(_from, _to, _value);\\n\\n return true;\\n }\\n\\n /**\\n * @dev Update the count of non rebasing credits in response to a transfer\\n * @param _from The address you want to send tokens from.\\n * @param _to The address you want to transfer to.\\n * @param _value Amount of OUSD to transfer\\n */\\n function _executeTransfer(\\n address _from,\\n address _to,\\n uint256 _value\\n ) internal {\\n bool isNonRebasingTo = _isNonRebasingAccount(_to);\\n bool isNonRebasingFrom = _isNonRebasingAccount(_from);\\n\\n // Credits deducted and credited might be different due to the\\n // differing creditsPerToken used by each account\\n uint256 creditsCredited = _value.mulTruncate(_creditsPerToken(_to));\\n uint256 creditsDeducted = _value.mulTruncate(_creditsPerToken(_from));\\n\\n _creditBalances[_from] = _creditBalances[_from].sub(\\n creditsDeducted,\\n \\\"Transfer amount exceeds balance\\\"\\n );\\n _creditBalances[_to] = _creditBalances[_to].add(creditsCredited);\\n\\n if (isNonRebasingTo && !isNonRebasingFrom) {\\n // Transfer to non-rebasing account from rebasing account, credits\\n // are removed from the non rebasing tally\\n nonRebasingSupply = nonRebasingSupply.add(_value);\\n // Update rebasingCredits by subtracting the deducted amount\\n _rebasingCredits = _rebasingCredits.sub(creditsDeducted);\\n } else if (!isNonRebasingTo && isNonRebasingFrom) {\\n // Transfer to rebasing account from non-rebasing account\\n // Decreasing non-rebasing credits by the amount that was sent\\n nonRebasingSupply = nonRebasingSupply.sub(_value);\\n // Update rebasingCredits by adding the credited amount\\n _rebasingCredits = _rebasingCredits.add(creditsCredited);\\n }\\n }\\n\\n /**\\n * @dev Function to check the amount of tokens that _owner has allowed to\\n * `_spender`.\\n * @param _owner The address which owns the funds.\\n * @param _spender The address which will spend the funds.\\n * @return The number of tokens still available for the _spender.\\n */\\n function allowance(address _owner, address _spender)\\n public\\n view\\n override\\n returns (uint256)\\n {\\n return _allowances[_owner][_spender];\\n }\\n\\n /**\\n * @dev Approve the passed address to spend the specified amount of tokens\\n * on behalf of msg.sender. This method is included for ERC20\\n * compatibility. `increaseAllowance` and `decreaseAllowance` should be\\n * used instead.\\n *\\n * Changing an allowance with this method brings the risk that someone\\n * may transfer both the old and the new allowance - if they are both\\n * greater than zero - if a transfer transaction is mined before the\\n * later approve() call is mined.\\n * @param _spender The address which will spend the funds.\\n * @param _value The amount of tokens to be spent.\\n */\\n function approve(address _spender, uint256 _value)\\n public\\n override\\n returns (bool)\\n {\\n _allowances[msg.sender][_spender] = _value;\\n emit Approval(msg.sender, _spender, _value);\\n return true;\\n }\\n\\n /**\\n * @dev Increase the amount of tokens that an owner has allowed to\\n * `_spender`.\\n * This method should be used instead of approve() to avoid the double\\n * approval vulnerability described above.\\n * @param _spender The address which will spend the funds.\\n * @param _addedValue The amount of tokens to increase the allowance by.\\n */\\n function increaseAllowance(address _spender, uint256 _addedValue)\\n public\\n returns (bool)\\n {\\n _allowances[msg.sender][_spender] = _allowances[msg.sender][_spender]\\n .add(_addedValue);\\n emit Approval(msg.sender, _spender, _allowances[msg.sender][_spender]);\\n return true;\\n }\\n\\n /**\\n * @dev Decrease the amount of tokens that an owner has allowed to\\n `_spender`.\\n * @param _spender The address which will spend the funds.\\n * @param _subtractedValue The amount of tokens to decrease the allowance\\n * by.\\n */\\n function decreaseAllowance(address _spender, uint256 _subtractedValue)\\n public\\n returns (bool)\\n {\\n uint256 oldValue = _allowances[msg.sender][_spender];\\n if (_subtractedValue >= oldValue) {\\n _allowances[msg.sender][_spender] = 0;\\n } else {\\n _allowances[msg.sender][_spender] = oldValue.sub(_subtractedValue);\\n }\\n emit Approval(msg.sender, _spender, _allowances[msg.sender][_spender]);\\n return true;\\n }\\n\\n /**\\n * @dev Mints new tokens, increasing totalSupply.\\n */\\n function mint(address _account, uint256 _amount) external onlyVault {\\n _mint(_account, _amount);\\n }\\n\\n /**\\n * @dev Creates `_amount` tokens and assigns them to `_account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements\\n *\\n * - `to` cannot be the zero address.\\n */\\n function _mint(address _account, uint256 _amount) internal nonReentrant {\\n require(_account != address(0), \\\"Mint to the zero address\\\");\\n\\n bool isNonRebasingAccount = _isNonRebasingAccount(_account);\\n\\n uint256 creditAmount = _amount.mulTruncate(_creditsPerToken(_account));\\n _creditBalances[_account] = _creditBalances[_account].add(creditAmount);\\n\\n // If the account is non rebasing and doesn't have a set creditsPerToken\\n // then set it i.e. this is a mint from a fresh contract\\n if (isNonRebasingAccount) {\\n nonRebasingSupply = nonRebasingSupply.add(_amount);\\n } else {\\n _rebasingCredits = _rebasingCredits.add(creditAmount);\\n }\\n\\n _totalSupply = _totalSupply.add(_amount);\\n\\n require(_totalSupply < MAX_SUPPLY, \\\"Max supply\\\");\\n\\n emit Transfer(address(0), _account, _amount);\\n }\\n\\n /**\\n * @dev Burns tokens, decreasing totalSupply.\\n */\\n function burn(address account, uint256 amount) external onlyVault {\\n _burn(account, amount);\\n }\\n\\n /**\\n * @dev Destroys `_amount` tokens from `_account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements\\n *\\n * - `_account` cannot be the zero address.\\n * - `_account` must have at least `_amount` tokens.\\n */\\n function _burn(address _account, uint256 _amount) internal nonReentrant {\\n require(_account != address(0), \\\"Burn from the zero address\\\");\\n if (_amount == 0) {\\n return;\\n }\\n\\n bool isNonRebasingAccount = _isNonRebasingAccount(_account);\\n uint256 creditAmount = _amount.mulTruncate(_creditsPerToken(_account));\\n uint256 currentCredits = _creditBalances[_account];\\n\\n // Remove the credits, burning rounding errors\\n if (\\n currentCredits == creditAmount || currentCredits - 1 == creditAmount\\n ) {\\n // Handle dust from rounding\\n _creditBalances[_account] = 0;\\n } else if (currentCredits > creditAmount) {\\n _creditBalances[_account] = _creditBalances[_account].sub(\\n creditAmount\\n );\\n } else {\\n revert(\\\"Remove exceeds balance\\\");\\n }\\n\\n // Remove from the credit tallies and non-rebasing supply\\n if (isNonRebasingAccount) {\\n nonRebasingSupply = nonRebasingSupply.sub(_amount);\\n } else {\\n _rebasingCredits = _rebasingCredits.sub(creditAmount);\\n }\\n\\n _totalSupply = _totalSupply.sub(_amount);\\n\\n emit Transfer(_account, address(0), _amount);\\n }\\n\\n /**\\n * @dev Get the credits per token for an account. Returns a fixed amount\\n * if the account is non-rebasing.\\n * @param _account Address of the account.\\n */\\n function _creditsPerToken(address _account)\\n internal\\n view\\n returns (uint256)\\n {\\n if (nonRebasingCreditsPerToken[_account] != 0) {\\n return nonRebasingCreditsPerToken[_account];\\n } else {\\n return _rebasingCreditsPerToken;\\n }\\n }\\n\\n /**\\n * @dev Is an account using rebasing accounting or non-rebasing accounting?\\n * Also, ensure contracts are non-rebasing if they have not opted in.\\n * @param _account Address of the account.\\n */\\n function _isNonRebasingAccount(address _account) internal returns (bool) {\\n bool isContract = Address.isContract(_account);\\n if (isContract && rebaseState[_account] == RebaseOptions.NotSet) {\\n _ensureRebasingMigration(_account);\\n }\\n return nonRebasingCreditsPerToken[_account] > 0;\\n }\\n\\n /**\\n * @dev Ensures internal account for rebasing and non-rebasing credits and\\n * supply is updated following deployment of frozen yield change.\\n */\\n function _ensureRebasingMigration(address _account) internal {\\n if (nonRebasingCreditsPerToken[_account] == 0) {\\n emit AccountRebasingDisabled(_account);\\n if (_creditBalances[_account] == 0) {\\n // Since there is no existing balance, we can directly set to\\n // high resolution, and do not have to do any other bookkeeping\\n nonRebasingCreditsPerToken[_account] = 1e27;\\n } else {\\n // Migrate an existing account:\\n\\n // Set fixed credits per token for this account\\n nonRebasingCreditsPerToken[_account] = _rebasingCreditsPerToken;\\n // Update non rebasing supply\\n nonRebasingSupply = nonRebasingSupply.add(balanceOf(_account));\\n // Update credit tallies\\n _rebasingCredits = _rebasingCredits.sub(\\n _creditBalances[_account]\\n );\\n }\\n }\\n }\\n\\n /**\\n * @notice Enable rebasing for an account.\\n * @dev Add a contract address to the non-rebasing exception list. The\\n * address's balance will be part of rebases and the account will be exposed\\n * to upside and downside.\\n * @param _account Address of the account.\\n */\\n function governanceRebaseOptIn(address _account)\\n public\\n nonReentrant\\n onlyGovernor\\n {\\n _rebaseOptIn(_account);\\n }\\n\\n /**\\n * @dev Add a contract address to the non-rebasing exception list. The\\n * address's balance will be part of rebases and the account will be exposed\\n * to upside and downside.\\n */\\n function rebaseOptIn() public nonReentrant {\\n _rebaseOptIn(msg.sender);\\n }\\n\\n function _rebaseOptIn(address _account) internal {\\n require(_isNonRebasingAccount(_account), \\\"Account has not opted out\\\");\\n\\n // Convert balance into the same amount at the current exchange rate\\n uint256 newCreditBalance = _creditBalances[_account]\\n .mul(_rebasingCreditsPerToken)\\n .div(_creditsPerToken(_account));\\n\\n // Decreasing non rebasing supply\\n nonRebasingSupply = nonRebasingSupply.sub(balanceOf(_account));\\n\\n _creditBalances[_account] = newCreditBalance;\\n\\n // Increase rebasing credits, totalSupply remains unchanged so no\\n // adjustment necessary\\n _rebasingCredits = _rebasingCredits.add(_creditBalances[_account]);\\n\\n rebaseState[_account] = RebaseOptions.OptIn;\\n\\n // Delete any fixed credits per token\\n delete nonRebasingCreditsPerToken[_account];\\n emit AccountRebasingEnabled(_account);\\n }\\n\\n /**\\n * @dev Explicitly mark that an address is non-rebasing.\\n */\\n function rebaseOptOut() public nonReentrant {\\n require(!_isNonRebasingAccount(msg.sender), \\\"Account has not opted in\\\");\\n\\n // Increase non rebasing supply\\n nonRebasingSupply = nonRebasingSupply.add(balanceOf(msg.sender));\\n // Set fixed credits per token\\n nonRebasingCreditsPerToken[msg.sender] = _rebasingCreditsPerToken;\\n\\n // Decrease rebasing credits, total supply remains unchanged so no\\n // adjustment necessary\\n _rebasingCredits = _rebasingCredits.sub(_creditBalances[msg.sender]);\\n\\n // Mark explicitly opted out of rebasing\\n rebaseState[msg.sender] = RebaseOptions.OptOut;\\n emit AccountRebasingDisabled(msg.sender);\\n }\\n\\n /**\\n * @dev Modify the supply without minting new tokens. This uses a change in\\n * the exchange rate between \\\"credits\\\" and OUSD tokens to change balances.\\n * @param _newTotalSupply New total supply of OUSD.\\n */\\n function changeSupply(uint256 _newTotalSupply)\\n external\\n onlyVault\\n nonReentrant\\n {\\n require(_totalSupply > 0, \\\"Cannot increase 0 supply\\\");\\n\\n if (_totalSupply == _newTotalSupply) {\\n emit TotalSupplyUpdatedHighres(\\n _totalSupply,\\n _rebasingCredits,\\n _rebasingCreditsPerToken\\n );\\n return;\\n }\\n\\n _totalSupply = _newTotalSupply > MAX_SUPPLY\\n ? MAX_SUPPLY\\n : _newTotalSupply;\\n\\n _rebasingCreditsPerToken = _rebasingCredits.divPrecisely(\\n _totalSupply.sub(nonRebasingSupply)\\n );\\n\\n require(_rebasingCreditsPerToken > 0, \\\"Invalid change in supply\\\");\\n\\n _totalSupply = _rebasingCredits\\n .divPrecisely(_rebasingCreditsPerToken)\\n .add(nonRebasingSupply);\\n\\n emit TotalSupplyUpdatedHighres(\\n _totalSupply,\\n _rebasingCredits,\\n _rebasingCreditsPerToken\\n );\\n }\\n}\\n\",\"keccak256\":\"0x2dc66b1ba02716d64eb47dd9117fda62650d8b57669e6c351437e0ad29ad5f19\",\"license\":\"MIT\"},\"contracts/utils/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { IBasicToken } from \\\"../interfaces/IBasicToken.sol\\\";\\n\\nlibrary Helpers {\\n /**\\n * @notice Fetch the `symbol()` from an ERC20 token\\n * @dev Grabs the `symbol()` from a contract\\n * @param _token Address of the ERC20 token\\n * @return string Symbol of the ERC20 token\\n */\\n function getSymbol(address _token) internal view returns (string memory) {\\n string memory symbol = IBasicToken(_token).symbol();\\n return symbol;\\n }\\n\\n /**\\n * @notice Fetch the `decimals()` from an ERC20 token\\n * @dev Grabs the `decimals()` from a contract and fails if\\n * the decimal value does not live within a certain range\\n * @param _token Address of the ERC20 token\\n * @return uint256 Decimals of the ERC20 token\\n */\\n function getDecimals(address _token) internal view returns (uint256) {\\n uint256 decimals = IBasicToken(_token).decimals();\\n require(\\n decimals >= 4 && decimals <= 18,\\n \\\"Token must have sufficient decimal places\\\"\\n );\\n\\n return decimals;\\n }\\n}\\n\",\"keccak256\":\"0x108b7a69e0140da0072ca18f90a03a3340574400f81aa6076cd2cccdf13699c2\",\"license\":\"MIT\"},\"contracts/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Base contract any contracts that need to initialize state after deployment.\\n * @author Origin Protocol Inc\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(\\n initializing || !initialized,\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n\\n bool isTopLevelCall = !initializing;\\n if (isTopLevelCall) {\\n initializing = true;\\n initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n initializing = false;\\n }\\n }\\n\\n uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0xaadbcc138114afed4af4f353c2ced2916e6ee14be91434789187f192caf0d786\",\"license\":\"MIT\"},\"contracts/utils/InitializableAbstractStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Base contract for vault strategies.\\n * @author Origin Protocol Inc\\n */\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { SafeERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport { Initializable } from \\\"../utils/Initializable.sol\\\";\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\nimport { IVault } from \\\"../interfaces/IVault.sol\\\";\\n\\nabstract contract InitializableAbstractStrategy is Initializable, Governable {\\n using SafeERC20 for IERC20;\\n\\n event PTokenAdded(address indexed _asset, address _pToken);\\n event PTokenRemoved(address indexed _asset, address _pToken);\\n event Deposit(address indexed _asset, address _pToken, uint256 _amount);\\n event Withdrawal(address indexed _asset, address _pToken, uint256 _amount);\\n event RewardTokenCollected(\\n address recipient,\\n address rewardToken,\\n uint256 amount\\n );\\n event RewardTokenAddressesUpdated(\\n address[] _oldAddresses,\\n address[] _newAddresses\\n );\\n event HarvesterAddressesUpdated(\\n address _oldHarvesterAddress,\\n address _newHarvesterAddress\\n );\\n\\n /// @notice Address of the underlying platform\\n address public immutable platformAddress;\\n /// @notice Address of the OToken vault\\n address public immutable vaultAddress;\\n\\n /// @dev Replaced with an immutable variable\\n // slither-disable-next-line constable-states\\n address private _deprecated_platformAddress;\\n\\n /// @dev Replaced with an immutable\\n // slither-disable-next-line constable-states\\n address private _deprecated_vaultAddress;\\n\\n /// @notice asset => pToken (Platform Specific Token Address)\\n mapping(address => address) public assetToPToken;\\n\\n /// @notice Full list of all assets supported by the strategy\\n address[] internal assetsMapped;\\n\\n // Deprecated: Reward token address\\n // slither-disable-next-line constable-states\\n address private _deprecated_rewardTokenAddress;\\n\\n // Deprecated: now resides in Harvester's rewardTokenConfigs\\n // slither-disable-next-line constable-states\\n uint256 private _deprecated_rewardLiquidationThreshold;\\n\\n /// @notice Address of the Harvester contract allowed to collect reward tokens\\n address public harvesterAddress;\\n\\n /// @notice Address of the reward tokens. eg CRV, BAL, CVX, AURA\\n address[] public rewardTokenAddresses;\\n\\n /* Reserved for future expansion. Used to be 100 storage slots\\n * and has decreased to accommodate:\\n * - harvesterAddress\\n * - rewardTokenAddresses\\n */\\n int256[98] private _reserved;\\n\\n struct BaseStrategyConfig {\\n address platformAddress; // Address of the underlying platform\\n address vaultAddress; // Address of the OToken's Vault\\n }\\n\\n /**\\n * @param _config The platform and OToken vault addresses\\n */\\n constructor(BaseStrategyConfig memory _config) {\\n platformAddress = _config.platformAddress;\\n vaultAddress = _config.vaultAddress;\\n }\\n\\n /**\\n * @dev Internal initialize function, to set up initial internal state\\n * @param _rewardTokenAddresses Address of reward token for platform\\n * @param _assets Addresses of initial supported assets\\n * @param _pTokens Platform Token corresponding addresses\\n */\\n function _initialize(\\n address[] memory _rewardTokenAddresses,\\n address[] memory _assets,\\n address[] memory _pTokens\\n ) internal {\\n rewardTokenAddresses = _rewardTokenAddresses;\\n\\n uint256 assetCount = _assets.length;\\n require(assetCount == _pTokens.length, \\\"Invalid input arrays\\\");\\n for (uint256 i = 0; i < assetCount; ++i) {\\n _setPTokenAddress(_assets[i], _pTokens[i]);\\n }\\n }\\n\\n /**\\n * @notice Collect accumulated reward token and send to Vault.\\n */\\n function collectRewardTokens() external virtual onlyHarvester nonReentrant {\\n _collectRewardTokens();\\n }\\n\\n /**\\n * @dev Default implementation that transfers reward tokens to the Harvester\\n * Implementing strategies need to add custom logic to collect the rewards.\\n */\\n function _collectRewardTokens() internal virtual {\\n uint256 rewardTokenCount = rewardTokenAddresses.length;\\n for (uint256 i = 0; i < rewardTokenCount; ++i) {\\n IERC20 rewardToken = IERC20(rewardTokenAddresses[i]);\\n uint256 balance = rewardToken.balanceOf(address(this));\\n if (balance > 0) {\\n emit RewardTokenCollected(\\n harvesterAddress,\\n address(rewardToken),\\n balance\\n );\\n rewardToken.safeTransfer(harvesterAddress, balance);\\n }\\n }\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault.\\n */\\n modifier onlyVault() {\\n require(msg.sender == vaultAddress, \\\"Caller is not the Vault\\\");\\n _;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Harvester.\\n */\\n modifier onlyHarvester() {\\n require(msg.sender == harvesterAddress, \\\"Caller is not the Harvester\\\");\\n _;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault or Governor.\\n */\\n modifier onlyVaultOrGovernor() {\\n require(\\n msg.sender == vaultAddress || msg.sender == governor(),\\n \\\"Caller is not the Vault or Governor\\\"\\n );\\n _;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault, Governor, or Strategist.\\n */\\n modifier onlyVaultOrGovernorOrStrategist() {\\n require(\\n msg.sender == vaultAddress ||\\n msg.sender == governor() ||\\n msg.sender == IVault(vaultAddress).strategistAddr(),\\n \\\"Caller is not the Vault, Governor, or Strategist\\\"\\n );\\n _;\\n }\\n\\n /**\\n * @notice Set the reward token addresses. Any old addresses will be overwritten.\\n * @param _rewardTokenAddresses Array of reward token addresses\\n */\\n function setRewardTokenAddresses(address[] calldata _rewardTokenAddresses)\\n external\\n onlyGovernor\\n {\\n uint256 rewardTokenCount = _rewardTokenAddresses.length;\\n for (uint256 i = 0; i < rewardTokenCount; ++i) {\\n require(\\n _rewardTokenAddresses[i] != address(0),\\n \\\"Can not set an empty address as a reward token\\\"\\n );\\n }\\n\\n emit RewardTokenAddressesUpdated(\\n rewardTokenAddresses,\\n _rewardTokenAddresses\\n );\\n rewardTokenAddresses = _rewardTokenAddresses;\\n }\\n\\n /**\\n * @notice Get the reward token addresses.\\n * @return address[] the reward token addresses.\\n */\\n function getRewardTokenAddresses()\\n external\\n view\\n returns (address[] memory)\\n {\\n return rewardTokenAddresses;\\n }\\n\\n /**\\n * @notice Provide support for asset by passing its pToken address.\\n * This method can only be called by the system Governor\\n * @param _asset Address for the asset\\n * @param _pToken Address for the corresponding platform token\\n */\\n function setPTokenAddress(address _asset, address _pToken)\\n external\\n virtual\\n onlyGovernor\\n {\\n _setPTokenAddress(_asset, _pToken);\\n }\\n\\n /**\\n * @notice Remove a supported asset by passing its index.\\n * This method can only be called by the system Governor\\n * @param _assetIndex Index of the asset to be removed\\n */\\n function removePToken(uint256 _assetIndex) external virtual onlyGovernor {\\n require(_assetIndex < assetsMapped.length, \\\"Invalid index\\\");\\n address asset = assetsMapped[_assetIndex];\\n address pToken = assetToPToken[asset];\\n\\n if (_assetIndex < assetsMapped.length - 1) {\\n assetsMapped[_assetIndex] = assetsMapped[assetsMapped.length - 1];\\n }\\n assetsMapped.pop();\\n assetToPToken[asset] = address(0);\\n\\n emit PTokenRemoved(asset, pToken);\\n }\\n\\n /**\\n * @notice Provide support for asset by passing its pToken address.\\n * Add to internal mappings and execute the platform specific,\\n * abstract method `_abstractSetPToken`\\n * @param _asset Address for the asset\\n * @param _pToken Address for the corresponding platform token\\n */\\n function _setPTokenAddress(address _asset, address _pToken) internal {\\n require(assetToPToken[_asset] == address(0), \\\"pToken already set\\\");\\n require(\\n _asset != address(0) && _pToken != address(0),\\n \\\"Invalid addresses\\\"\\n );\\n\\n assetToPToken[_asset] = _pToken;\\n assetsMapped.push(_asset);\\n\\n emit PTokenAdded(_asset, _pToken);\\n\\n _abstractSetPToken(_asset, _pToken);\\n }\\n\\n /**\\n * @notice Transfer token to governor. Intended for recovering tokens stuck in\\n * strategy contracts, i.e. mistaken sends.\\n * @param _asset Address for the asset\\n * @param _amount Amount of the asset to transfer\\n */\\n function transferToken(address _asset, uint256 _amount)\\n public\\n onlyGovernor\\n {\\n require(!supportsAsset(_asset), \\\"Cannot transfer supported asset\\\");\\n IERC20(_asset).safeTransfer(governor(), _amount);\\n }\\n\\n /**\\n * @notice Set the Harvester contract that can collect rewards.\\n * @param _harvesterAddress Address of the harvester contract.\\n */\\n function setHarvesterAddress(address _harvesterAddress)\\n external\\n onlyGovernor\\n {\\n emit HarvesterAddressesUpdated(harvesterAddress, _harvesterAddress);\\n harvesterAddress = _harvesterAddress;\\n }\\n\\n /***************************************\\n Abstract\\n ****************************************/\\n\\n function _abstractSetPToken(address _asset, address _pToken)\\n internal\\n virtual;\\n\\n function safeApproveAllTokens() external virtual;\\n\\n /**\\n * @notice Deposit an amount of assets into the platform\\n * @param _asset Address for the asset\\n * @param _amount Units of asset to deposit\\n */\\n function deposit(address _asset, uint256 _amount) external virtual;\\n\\n /**\\n * @notice Deposit all supported assets in this strategy contract to the platform\\n */\\n function depositAll() external virtual;\\n\\n /**\\n * @notice Withdraw an `amount` of assets from the platform and\\n * send to the `_recipient`.\\n * @param _recipient Address to which the asset should be sent\\n * @param _asset Address of the asset\\n * @param _amount Units of asset to withdraw\\n */\\n function withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) external virtual;\\n\\n /**\\n * @notice Withdraw all supported assets from platform and\\n * sends to the OToken's Vault.\\n */\\n function withdrawAll() external virtual;\\n\\n /**\\n * @notice Get the total asset value held in the platform.\\n * This includes any interest that was generated since depositing.\\n * @param _asset Address of the asset\\n * @return balance Total value of the asset in the platform\\n */\\n function checkBalance(address _asset)\\n external\\n view\\n virtual\\n returns (uint256 balance);\\n\\n /**\\n * @notice Check if an asset is supported.\\n * @param _asset Address of the asset\\n * @return bool Whether asset is supported\\n */\\n function supportsAsset(address _asset) public view virtual returns (bool);\\n}\\n\",\"keccak256\":\"0x5e17bb3db9f9e1014b7c5c836547f8fa81e02af7568c0bb8f2a2e0e7c2192db4\",\"license\":\"MIT\"},\"contracts/utils/InitializableERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/**\\n * @dev Optional functions from the ERC20 standard.\\n * Converted from openzeppelin/contracts/token/ERC20/ERC20Detailed.sol\\n * @author Origin Protocol Inc\\n */\\nabstract contract InitializableERC20Detailed is IERC20 {\\n // Storage gap to skip storage from prior to OUSD reset\\n uint256[100] private _____gap;\\n\\n string private _name;\\n string private _symbol;\\n uint8 private _decimals;\\n\\n /**\\n * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of\\n * these values are immutable: they can only be set once during\\n * construction.\\n * @notice To avoid variable shadowing appended `Arg` after arguments name.\\n */\\n function _initialize(\\n string memory nameArg,\\n string memory symbolArg,\\n uint8 decimalsArg\\n ) internal {\\n _name = nameArg;\\n _symbol = symbolArg;\\n _decimals = decimalsArg;\\n }\\n\\n /**\\n * @notice Returns the name of the token.\\n */\\n function name() public view returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @notice Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @notice Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5,05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei.\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view returns (uint8) {\\n return _decimals;\\n }\\n}\\n\",\"keccak256\":\"0xe35ac2d813a30d845a3b52bba72588d7e936c2b3f3373d15568c14db46aeed60\",\"license\":\"MIT\"},\"contracts/utils/StableMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { SafeMath } from \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\n\\n// Based on StableMath from Stability Labs Pty. Ltd.\\n// https://github.com/mstable/mStable-contracts/blob/master/contracts/shared/StableMath.sol\\n\\nlibrary StableMath {\\n using SafeMath for uint256;\\n\\n /**\\n * @dev Scaling unit for use in specific calculations,\\n * where 1 * 10**18, or 1e18 represents a unit '1'\\n */\\n uint256 private constant FULL_SCALE = 1e18;\\n\\n /***************************************\\n Helpers\\n ****************************************/\\n\\n /**\\n * @dev Adjust the scale of an integer\\n * @param to Decimals to scale to\\n * @param from Decimals to scale from\\n */\\n function scaleBy(\\n uint256 x,\\n uint256 to,\\n uint256 from\\n ) internal pure returns (uint256) {\\n if (to > from) {\\n x = x.mul(10**(to - from));\\n } else if (to < from) {\\n // slither-disable-next-line divide-before-multiply\\n x = x.div(10**(from - to));\\n }\\n return x;\\n }\\n\\n /***************************************\\n Precise Arithmetic\\n ****************************************/\\n\\n /**\\n * @dev Multiplies two precise units, and then truncates by the full scale\\n * @param x Left hand input to multiplication\\n * @param y Right hand input to multiplication\\n * @return Result after multiplying the two inputs and then dividing by the shared\\n * scale unit\\n */\\n function mulTruncate(uint256 x, uint256 y) internal pure returns (uint256) {\\n return mulTruncateScale(x, y, FULL_SCALE);\\n }\\n\\n /**\\n * @dev Multiplies two precise units, and then truncates by the given scale. For example,\\n * when calculating 90% of 10e18, (10e18 * 9e17) / 1e18 = (9e36) / 1e18 = 9e18\\n * @param x Left hand input to multiplication\\n * @param y Right hand input to multiplication\\n * @param scale Scale unit\\n * @return Result after multiplying the two inputs and then dividing by the shared\\n * scale unit\\n */\\n function mulTruncateScale(\\n uint256 x,\\n uint256 y,\\n uint256 scale\\n ) internal pure returns (uint256) {\\n // e.g. assume scale = fullScale\\n // z = 10e18 * 9e17 = 9e36\\n uint256 z = x.mul(y);\\n // return 9e36 / 1e18 = 9e18\\n return z.div(scale);\\n }\\n\\n /**\\n * @dev Multiplies two precise units, and then truncates by the full scale, rounding up the result\\n * @param x Left hand input to multiplication\\n * @param y Right hand input to multiplication\\n * @return Result after multiplying the two inputs and then dividing by the shared\\n * scale unit, rounded up to the closest base unit.\\n */\\n function mulTruncateCeil(uint256 x, uint256 y)\\n internal\\n pure\\n returns (uint256)\\n {\\n // e.g. 8e17 * 17268172638 = 138145381104e17\\n uint256 scaled = x.mul(y);\\n // e.g. 138145381104e17 + 9.99...e17 = 138145381113.99...e17\\n uint256 ceil = scaled.add(FULL_SCALE.sub(1));\\n // e.g. 13814538111.399...e18 / 1e18 = 13814538111\\n return ceil.div(FULL_SCALE);\\n }\\n\\n /**\\n * @dev Precisely divides two units, by first scaling the left hand operand. Useful\\n * for finding percentage weightings, i.e. 8e18/10e18 = 80% (or 8e17)\\n * @param x Left hand input to division\\n * @param y Right hand input to division\\n * @return Result after multiplying the left operand by the scale, and\\n * executing the division on the right hand input.\\n */\\n function divPrecisely(uint256 x, uint256 y)\\n internal\\n pure\\n returns (uint256)\\n {\\n // e.g. 8e18 * 1e18 = 8e36\\n uint256 z = x.mul(FULL_SCALE);\\n // e.g. 8e36 / 10e18 = 8e17\\n return z.div(y);\\n }\\n}\\n\",\"keccak256\":\"0x1eb49f6f79045d9e0a8e1dced8e01d9e559e5fac554dcbb53e43140b601b04e7\",\"license\":\"MIT\"},\"contracts/vault/VaultStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title OToken VaultStorage contract\\n * @notice The VaultStorage contract defines the storage for the Vault contracts\\n * @author Origin Protocol Inc\\n */\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { SafeERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport { IStrategy } from \\\"../interfaces/IStrategy.sol\\\";\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\nimport { OUSD } from \\\"../token/OUSD.sol\\\";\\nimport { Initializable } from \\\"../utils/Initializable.sol\\\";\\nimport \\\"../utils/Helpers.sol\\\";\\n\\ncontract VaultStorage is Initializable, Governable {\\n using SafeERC20 for IERC20;\\n\\n event AssetSupported(address _asset);\\n event AssetRemoved(address _asset);\\n event AssetDefaultStrategyUpdated(address _asset, address _strategy);\\n event AssetAllocated(address _asset, address _strategy, uint256 _amount);\\n event StrategyApproved(address _addr);\\n event StrategyRemoved(address _addr);\\n event Mint(address _addr, uint256 _value);\\n event Redeem(address _addr, uint256 _value);\\n event CapitalPaused();\\n event CapitalUnpaused();\\n event RebasePaused();\\n event RebaseUnpaused();\\n event VaultBufferUpdated(uint256 _vaultBuffer);\\n event OusdMetaStrategyUpdated(address _ousdMetaStrategy);\\n event RedeemFeeUpdated(uint256 _redeemFeeBps);\\n event PriceProviderUpdated(address _priceProvider);\\n event AllocateThresholdUpdated(uint256 _threshold);\\n event RebaseThresholdUpdated(uint256 _threshold);\\n event StrategistUpdated(address _address);\\n event MaxSupplyDiffChanged(uint256 maxSupplyDiff);\\n event YieldDistribution(address _to, uint256 _yield, uint256 _fee);\\n event TrusteeFeeBpsChanged(uint256 _basis);\\n event TrusteeAddressChanged(address _address);\\n event NetOusdMintForStrategyThresholdChanged(uint256 _threshold);\\n event SwapperChanged(address _address);\\n event SwapAllowedUndervalueChanged(uint256 _basis);\\n event SwapSlippageChanged(address _asset, uint256 _basis);\\n event Swapped(\\n address indexed _fromAsset,\\n address indexed _toAsset,\\n uint256 _fromAssetAmount,\\n uint256 _toAssetAmount\\n );\\n\\n // Assets supported by the Vault, i.e. Stablecoins\\n enum UnitConversion {\\n DECIMALS,\\n GETEXCHANGERATE\\n }\\n // Changed to fit into a single storage slot so the decimals needs to be recached\\n struct Asset {\\n // Note: OETHVaultCore doesn't use `isSupported` when minting,\\n // redeeming or checking balance of assets.\\n bool isSupported;\\n UnitConversion unitConversion;\\n uint8 decimals;\\n // Max allowed slippage from the Oracle price when swapping collateral assets in basis points.\\n // For example 40 == 0.4% slippage\\n uint16 allowedOracleSlippageBps;\\n }\\n\\n /// @dev mapping of supported vault assets to their configuration\\n // slither-disable-next-line uninitialized-state\\n mapping(address => Asset) internal assets;\\n /// @dev list of all assets supported by the vault.\\n // slither-disable-next-line uninitialized-state\\n address[] internal allAssets;\\n\\n // Strategies approved for use by the Vault\\n struct Strategy {\\n bool isSupported;\\n uint256 _deprecated; // Deprecated storage slot\\n }\\n /// @dev mapping of strategy contracts to their configiration\\n mapping(address => Strategy) internal strategies;\\n /// @dev list of all vault strategies\\n address[] internal allStrategies;\\n\\n /// @notice Address of the Oracle price provider contract\\n // slither-disable-next-line uninitialized-state\\n address public priceProvider;\\n /// @notice pause rebasing if true\\n bool public rebasePaused = false;\\n /// @notice pause operations that change the OToken supply.\\n /// eg mint, redeem, allocate, mint/burn for strategy\\n bool public capitalPaused = true;\\n /// @notice Redemption fee in basis points. eg 50 = 0.5%\\n uint256 public redeemFeeBps;\\n /// @notice Percentage of assets to keep in Vault to handle (most) withdrawals. 100% = 1e18.\\n uint256 public vaultBuffer;\\n /// @notice OToken mints over this amount automatically allocate funds. 18 decimals.\\n uint256 public autoAllocateThreshold;\\n /// @notice OToken mints over this amount automatically rebase. 18 decimals.\\n uint256 public rebaseThreshold;\\n\\n /// @dev Address of the OToken token. eg OUSD or OETH.\\n // slither-disable-next-line uninitialized-state\\n OUSD internal oUSD;\\n\\n //keccak256(\\\"OUSD.vault.governor.admin.impl\\\");\\n bytes32 constant adminImplPosition =\\n 0xa2bd3d3cf188a41358c8b401076eb59066b09dec5775650c0de4c55187d17bd9;\\n\\n // Address of the contract responsible for post rebase syncs with AMMs\\n address private _deprecated_rebaseHooksAddr = address(0);\\n\\n // Deprecated: Address of Uniswap\\n // slither-disable-next-line constable-states\\n address private _deprecated_uniswapAddr = address(0);\\n\\n /// @notice Address of the Strategist\\n address public strategistAddr = address(0);\\n\\n /// @notice Mapping of asset address to the Strategy that they should automatically\\n // be allocated to\\n // slither-disable-next-line uninitialized-state\\n mapping(address => address) public assetDefaultStrategies;\\n\\n /// @notice Max difference between total supply and total value of assets. 18 decimals.\\n // slither-disable-next-line uninitialized-state\\n uint256 public maxSupplyDiff;\\n\\n /// @notice Trustee contract that can collect a percentage of yield\\n address public trusteeAddress;\\n\\n /// @notice Amount of yield collected in basis points. eg 2000 = 20%\\n uint256 public trusteeFeeBps;\\n\\n /// @dev Deprecated: Tokens that should be swapped for stablecoins\\n address[] private _deprecated_swapTokens;\\n\\n uint256 constant MINT_MINIMUM_UNIT_PRICE = 0.998e18;\\n\\n /// @notice Metapool strategy that is allowed to mint/burn OTokens without changing collateral\\n address public ousdMetaStrategy = address(0);\\n\\n /// @notice How much OTokens are currently minted by the strategy\\n int256 public netOusdMintedForStrategy = 0;\\n\\n /// @notice How much net total OTokens are allowed to be minted by all strategies\\n uint256 public netOusdMintForStrategyThreshold = 0;\\n\\n uint256 constant MIN_UNIT_PRICE_DRIFT = 0.7e18;\\n uint256 constant MAX_UNIT_PRICE_DRIFT = 1.3e18;\\n\\n /// @notice Collateral swap configuration.\\n /// @dev is packed into a single storage slot to save gas.\\n struct SwapConfig {\\n // Contract that swaps the vault's collateral assets\\n address swapper;\\n // Max allowed percentage the total value can drop below the total supply in basis points.\\n // For example 100 == 1%\\n uint16 allowedUndervalueBps;\\n }\\n SwapConfig internal swapConfig = SwapConfig(address(0), 0);\\n\\n // For future use\\n uint256[50] private __gap;\\n\\n /**\\n * @notice set the implementation for the admin, this needs to be in a base class else we cannot set it\\n * @param newImpl address of the implementation\\n */\\n function setAdminImpl(address newImpl) external onlyGovernor {\\n require(\\n Address.isContract(newImpl),\\n \\\"new implementation is not a contract\\\"\\n );\\n bytes32 position = adminImplPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newImpl)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xcbdb87104749e20c8411bc2acbfa0b7d48e876e3f4e1c46c9a7b00fcdb9722d9\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x6101a06040523480156200001257600080fd5b506040516200549a3803806200549a833981016040819052620000359162000144565b86868860200151838787848484848462000055336200011460201b60201c565b6000805160206200547a833981519152546040516001600160a01b03909116906000907fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a908290a36033805460ff191690556001600160601b0319606095861b811660805292851b831660a05290841b821660c05291831b811660e052610100919091528751821b811661012052602090970151811b8716610140529a8b1b86166101605250505050509190941b1661018052506200022b9350505050565b6000805160206200547a83398151915255565b80516001600160a01b03811681146200013f57600080fd5b919050565b60008060008060008060008789036101008112156200016257600080fd5b60408112156200017157600080fd5b50604080519081016001600160401b0381118282101715620001a357634e487b7160e01b600052604160045260246000fd5b604052620001b18962000127565b8152620001c160208a0162000127565b60208201529650620001d66040890162000127565b9550620001e66060890162000127565b9450620001f66080890162000127565b935060a088015192506200020d60c0890162000127565b91506200021d60e0890162000127565b905092959891949750929550565b60805160601c60a05160601c60c05160601c60e05160601c610100516101205160601c6101405160601c6101605160601c6101805160601c615092620003e86000396000818161039501528181610b67015261348b0152600081816104850152612a8c01526000818161057301528181610f4701528181611e960152818161200f01528181612c780152612f1301526000610b33015260008181610737015261176401526000818161086601528181610d0f01528181611dc40152818161205f0152818161240a01528181613a7b0152613cd50152600081816108ba01528181610de50152818161129801528181611cc701528181612a5c0152612e3a015260008181610a8801526119d90152600081816103c70152818161098b01528181610a0201528181610c7601528181610fbc01528181611462015281816114c60152818161169a0152818161186201528181611f8001528181612030015281816123840152818161243901528181612ced01528181612f9e0152818161304601528181613590015281816136110152818161365301528181613923015281816139f501528181613aaa01528181613c4f0152613d0401526150926000f3fe6080604052600436106103855760003560e01c8063853828b6116101d1578063b16b7d0b11610102578063d9f00ec7116100a0578063de5f62681161006f578063de5f626814610b9f578063e752923914610bb4578063ee7afe2d14610bca578063f6ca71b014610bdf57600080fd5b8063d9f00ec714610b01578063dbe55e5614610b21578063dd505df614610b55578063de34d71314610b8957600080fd5b8063cceab750116100dc578063cceab75014610a76578063d059f6ef14610aaa578063d38bfff414610ac1578063d9caed1214610ae157600080fd5b8063b16b7d0b14610a24578063c2e1e3f414610a41578063c7af335214610a6157600080fd5b80639da0e4621161016f578063aa388af611610149578063aa388af61461096e578063ab12edf5146109bb578063ad1728cb146109db578063ad5c4648146109f057600080fd5b80639da0e462146108fc578063a3b81e7314610939578063a4f98af41461095957600080fd5b80639092c31c116101ab5780639092c31c146108545780639136616a1461088857806391649751146108a857806396d538bb146108dc57600080fd5b8063853828b6146107fa57806387bae8671461080f5780638d7c0e461461083457600080fd5b80635c975abb116102b65780636ef38795116102545780637b2d9b2c116102235780637b2d9b2c146107995780637b8962f7146107b9578063842f5c46146107cf5780638456cb59146107e557600080fd5b80636ef3879514610705578063714897df1461072557806371a735f3146107595780637260f8261461077957600080fd5b80636309238311610290578063630923831461069957806366e3667e146106af57806367c7066c146106c55780636e811d38146106e557600080fd5b80635c975abb146106405780635d36b190146106645780635f5152261461067957600080fd5b8063430bf08a11610323578063484be812116102fd578063484be812146105d55780635205c380146105eb57806359b80c0a1461060b5780635a063f631461062b57600080fd5b8063430bf08a14610561578063435356d11461059557806347e7ef24146105b557600080fd5b80630fc3b4c41161035f5780630fc3b4c4146104c75780631072cbea146104fd57806322495dc81461051d5780633c8649591461053d57600080fd5b80630c340a24146104415780630df1ecfd146104735780630ed57b3a146104a757600080fd5b3661043c57336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806103e95750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61043a5760405162461bcd60e51b815260206004820152601e60248201527f457468206e6f742066726f6d20616c6c6f77656420636f6e747261637473000060448201526064015b60405180910390fd5b005b600080fd5b34801561044d57600080fd5b50610456610c01565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561047f57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b357600080fd5b5061043a6104c2366004614360565b610c1e565b3480156104d357600080fd5b506104566104e2366004614326565b609f602052600090815260409020546001600160a01b031681565b34801561050957600080fd5b5061043a6105183660046143da565b610c50565b34801561052957600080fd5b5061043a610538366004614582565b610d0d565b34801561054957600080fd5b5061055360695481565b60405190815260200161046a565b34801561056d57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a157600080fd5b5061043a6105b0366004614447565b610e57565b3480156105c157600080fd5b5061043a6105d03660046143da565b610f3c565b3480156105e157600080fd5b50610553606a5481565b3480156105f757600080fd5b5061043a610606366004614658565b611037565b34801561061757600080fd5b5061043a6106263660046144ce565b611096565b34801561063757600080fd5b5061043a611319565b34801561064c57600080fd5b5060335460ff165b604051901515815260200161046a565b34801561067057600080fd5b5061043a6113b8565b34801561068557600080fd5b50610553610694366004614326565b61145e565b3480156106a557600080fd5b50610553611c2081565b3480156106bb57600080fd5b5061055360345481565b3480156106d157600080fd5b5060a354610456906001600160a01b031681565b3480156106f157600080fd5b5061043a610700366004614326565b61156f565b34801561071157600080fd5b5061043a610720366004614406565b6115e5565b34801561073157600080fd5b506105537f000000000000000000000000000000000000000000000000000000000000000081565b34801561076557600080fd5b5061043a6107743660046146dc565b611baf565b34801561078557600080fd5b50603654610456906001600160a01b031681565b3480156107a557600080fd5b506104566107b4366004614658565b611d98565b3480156107c557600080fd5b5061055360375481565b3480156107db57600080fd5b5061055360685481565b3480156107f157600080fd5b5061043a611dc2565b34801561080657600080fd5b5061043a611e8b565b34801561081b57600080fd5b506033546104569061010090046001600160a01b031681565b34801561084057600080fd5b5061043a61084f36600461475d565b61205d565b34801561086057600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b34801561089457600080fd5b5061043a6108a3366004614658565b61255f565b3480156108b457600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156108e857600080fd5b5061043a6108f7366004614406565b61272b565b34801561090857600080fd5b5061092c610917366004614658565b60356020526000908152604090205460ff1681565b60405161046a9190614c50565b34801561094557600080fd5b5061043a610954366004614326565b61284b565b34801561096557600080fd5b506106546128b9565b34801561097a57600080fd5b50610654610989366004614326565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156109c757600080fd5b5061043a6109d63660046147a2565b612959565b3480156109e757600080fd5b5061043a612a45565b3480156109fc57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610a3057600080fd5b506105536801bc16d674ec80000081565b348015610a4d57600080fd5b5061043a610a5c366004614326565b612b0b565b348015610a6d57600080fd5b50610654612b98565b348015610a8257600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610ab657600080fd5b506105536101075481565b348015610acd57600080fd5b5061043a610adc366004614326565b612bc9565b348015610aed57600080fd5b5061043a610afc366004614399565b612c6d565b348015610b0d57600080fd5b5061043a610b1c366004614671565b612d47565b348015610b2d57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b6157600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b9557600080fd5b5061055360385481565b348015610bab57600080fd5b5061043a612f08565b348015610bc057600080fd5b50610553606b5481565b348015610bd657600080fd5b5061043a613075565b348015610beb57600080fd5b50610bf46130ff565b60405161046a9190614a2e565b6000610c1960008051602061503d8339815191525490565b905090565b610c26612b98565b610c425760405162461bcd60e51b815260040161043190614cc2565b610c4c8282613161565b5050565b610c58612b98565b610c745760405162461bcd60e51b815260040161043190614cc2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169083161415610cf15760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74207472616e7366657220737570706f72746564206173736574006044820152606401610431565b610c4c610cfc610c01565b6001600160a01b03841690836132c0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6657600080fd5b505afa158015610d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9e9190614343565b6001600160a01b0316336001600160a01b031614610dce5760405162461bcd60e51b815260040161043190614dad565b60405163bc26e7e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bc26e7e590610e2090309087908790879060040161497e565b600060405180830381600087803b158015610e3a57600080fd5b505af1158015610e4e573d6000803e3d6000fd5b50505050505050565b610e5f612b98565b610e7b5760405162461bcd60e51b815260040161043190614cc2565b600054610100900460ff1680610e94575060005460ff16155b610ef75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610431565b600054610100900460ff16158015610f19576000805461ffff19166101011790555b610f24848484613317565b8015610f36576000805461ff00191690555b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f845760405162461bcd60e51b815260040161043190614c8b565b60008051602061501d83398151915280546002811415610fb65760405162461bcd60e51b815260040161043190614d85565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161461100b5760405162461bcd60e51b815260040161043190614cf9565b82610107600082825461101e9190614ed4565b9091555061102e905084846133d2565b50600190555050565b61103f612b98565b61105b5760405162461bcd60e51b815260040161043190614cc2565b60378190556040518181527fe26b067424903962f951f568e52ec9a3bbe1589526ea54a4e69ca6eaae1a4c779060200160405180910390a150565b60335461010090046001600160a01b031633146110c55760405162461bcd60e51b815260040161043190614d4e565b60335460ff16156110e85760405162461bcd60e51b815260040161043190614d24565b8683146111375760405162461bcd60e51b815260206004820152601a60248201527f5075626b65792073686172657344617461206d69736d617463680000000000006044820152606401610431565b60008060005b89811015611280578a8a8281811061115757611157614fcd565b90506020028101906111699190614de4565b604051611177929190614952565b6040805191829003909120600081815260356020529182205490945060ff1692508260048111156111aa576111aa614fa1565b146111f75760405162461bcd60e51b815260206004820152601c60248201527f56616c696461746f7220616c72656164792072656769737465726564000000006044820152606401610431565b6000838152603560205260409020805460ff19166001179055827facd38e900350661e325d592c959664c0000a306efb2004e7dc283f44e0ea04238c8c8481811061124457611244614fcd565b90506020028101906112569190614de4565b8c8c6040516112689493929190614b75565b60405180910390a261127981614f70565b905061113d565b506040516322f18bf560e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906322f18bf5906112db908d908d908d908d908d908d908d908d90600401614b13565b600060405180830381600087803b1580156112f557600080fd5b505af1158015611309573d6000803e3d6000fd5b5050505050505050505050505050565b60a3546001600160a01b031633146113735760405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74207468652048617276657374657200000000006044820152606401610431565b60008051602061501d833981519152805460028114156113a55760405162461bcd60e51b815260040161043190614d85565b600282556113b1613464565b5060019055565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b0316146114535760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b6064820152608401610431565b61145c336136a9565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146114b15760405162461bcd60e51b815260040161043190614cf9565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561151057600080fd5b505afa158015611524573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115489190614789565b6801bc16d674ec80000060345461155f9190614f0e565b6115699190614ed4565b92915050565b611577612b98565b6115935760405162461bcd60e51b815260040161043190614cc2565b60338054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f83f29c79feb71f8fba9d0fbc4ba5f0982a28b6b1e868b3fc50e6400d100bca0f90600090a250565b60335461010090046001600160a01b031633146116145760405162461bcd60e51b815260040161043190614d4e565b60335460ff16156116375760405162461bcd60e51b815260040161043190614d24565b60008051602061501d833981519152805460028114156116695760405162461bcd60e51b815260040161043190614d85565b6002825560006116826801bc16d674ec80000085614f0e565b6040516370a0823160e01b81523060048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156116e457600080fd5b505afa1580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171c9190614789565b81111561175f5760405162461bcd60e51b8152602060048201526011602482015270092dce6eaccccd2c6d2cadce840ae8aa89607b1b6044820152606401610431565b6034547f00000000000000000000000000000000000000000000000000000000000000009061178f908690614ed4565b11156117d65760405162461bcd60e51b815260206004820152601660248201527513585e081d985b1a59185d1bdc9cc81c995858da195960521b6044820152606401610431565b603754816038546117e79190614ed4565b11156118355760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e6720455448206f766572207468726573686f6c640000000000006044820152606401610431565b80603860008282546118479190614ed4565b9091555050604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156118ae57600080fd5b505af11580156118c2573d6000803e3d6000fd5b505050506118cf8161376a565b60408051600160f81b60208201526000602182018190526bffffffffffffffffffffffff193060601b16602c8301529101604051602081830303815290604052905060005b85811015611b8857600087878381811061193057611930614fcd565b90506020028101906119429190614e2a565b61194c9080614de4565b60405161195a929190614952565b6040519081900390209050600160008281526035602052604090205460ff16600481111561198a5761198a614fa1565b146119d75760405162461bcd60e51b815260206004820152601860248201527f56616c696461746f72206e6f74207265676973746572656400000000000000006044820152606401610431565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008a8a86818110611a2257611a22614fcd565b9050602002810190611a349190614e2a565b611a3e9080614de4565b878d8d89818110611a5157611a51614fcd565b9050602002810190611a639190614e2a565b611a71906020810190614de4565b8f8f8b818110611a8357611a83614fcd565b9050602002810190611a959190614e2a565b604001356040518863ffffffff1660e01b8152600401611aba96959493929190614bdd565b6000604051808303818588803b158015611ad357600080fd5b505af1158015611ae7573d6000803e3d6000fd5b5050506000838152603560205260409020805460ff19166002179055508190507f958934bb53d6b4dc911b6173e586864efbc8076684a31f752c53d5778340b37f898985818110611b3a57611b3a614fcd565b9050602002810190611b4c9190614e2a565b611b569080614de4565b6801bc16d674ec800000604051611b6f93929190614c2c565b60405180910390a250611b8181614f70565b9050611914565b508585905060346000828254611b9e9190614ed4565b909155505060019093555050505050565b60335461010090046001600160a01b03163314611bde5760405162461bcd60e51b815260040161043190614d4e565b60335460ff1615611c015760405162461bcd60e51b815260040161043190614d24565b60008585604051611c13929190614952565b604080519182900390912060008181526035602052919091205490915060ff166003816004811115611c4757611c47614fa1565b1480611c6457506001816004811115611c6257611c62614fa1565b145b611cb05760405162461bcd60e51b815260206004820152601d60248201527f56616c696461746f72206e6f742072656764206f722065786974696e670000006044820152606401610431565b6040516312b3fc1960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906312b3fc1990611d04908a908a908a908a908a90600401614b9c565b600060405180830381600087803b158015611d1e57600080fd5b505af1158015611d32573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166004179055518391507f6aecca20726a17c1b81989b2fd09dfdf636bae9e564d4066ca18df62dc1f3dc290611d87908a908a908a908a90614b75565b60405180910390a250505050505050565b60a48181548110611da857600080fd5b6000918252602090912001546001600160a01b0316905081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e1b57600080fd5b505afa158015611e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e539190614343565b6001600160a01b0316336001600160a01b031614611e835760405162461bcd60e51b815260040161043190614dad565b61145c613797565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611eda5750611ec5610c01565b6001600160a01b0316336001600160a01b0316145b611f325760405162461bcd60e51b815260206004820152602360248201527f43616c6c6572206973206e6f7420746865205661756c74206f7220476f7665726044820152623737b960e91b6064820152608401610431565b60008051602061501d83398151915280546002811415611f645760405162461bcd60e51b815260040161043190614d85565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015611fca57600080fd5b505afa158015611fde573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120029190614789565b90508015612055576120557f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008361380c565b505060019055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156120b657600080fd5b505afa1580156120ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ee9190614343565b6001600160a01b0316336001600160a01b03161461211e5760405162461bcd60e51b815260040161043190614dad565b60335460ff166121675760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610431565b60008051602061501d833981519152805460028114156121995760405162461bcd60e51b815260040161043190614d85565b6002825543611c20606b546121ae9190614ed4565b106121fb5760405162461bcd60e51b815260206004820152601e60248201527f466978206163636f756e74696e672063616c6c656420746f6f20736f6f6e00006044820152606401610431565b600219851215801561220e575060038513155b801561222857506000856034546122259190614e93565b12155b6122745760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642076616c696461746f727344656c74610000000000000000006044820152606401610431565b6811ff6cf0fd15afffff19841215801561229757506811ff6cf0fd15b000008413155b80156122b157506000846068546122ae9190614e93565b12155b6122fd5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420636f6e73656e7375735265776172647344656c74610000006044820152606401610431565b68053444835ec58000008311156123565760405162461bcd60e51b815260206004820152601960248201527f496e76616c69642077657468546f5661756c74416d6f756e74000000000000006044820152606401610431565b846034546123649190614e93565b603455606854612375908590614e93565b60685543606b5582156124c3577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123dd57600080fd5b505af11580156123f1573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018890527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b15801561248157600080fd5b505af1158015612495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b9919061463b565b506124c38361390a565b60408051868152602081018690529081018490527f80d022717ea022455c5886b8dd8a29c037570aae58aeb4d7b136d7a10ec2e4319060600160405180910390a161250e6000613972565b61254d5760405162461bcd60e51b815260206004820152601060248201526f233ab9b29039ba34b63610313637bbb760811b6044820152606401610431565b612555613df8565b5060019055505050565b612567612b98565b6125835760405162461bcd60e51b815260040161043190614cc2565b60a05481106125c45760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b6044820152606401610431565b600060a082815481106125d9576125d9614fcd565b60009182526020808320909101546001600160a01b03908116808452609f90925260409092205460a0549193509091169061261690600190614f2d565b8310156126985760a0805461262d90600190614f2d565b8154811061263d5761263d614fcd565b60009182526020909120015460a080546001600160a01b03909216918590811061266957612669614fcd565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b60a08054806126a9576126a9614fb7565b60008281526020808220600019908401810180546001600160a01b031990811690915593019093556001600160a01b03858116808352609f855260409283902080549094169093559051908416815290917f16b7600acff27e39a8a96056b3d533045298de927507f5c1d97e4accde60488c91015b60405180910390a2505050565b612733612b98565b61274f5760405162461bcd60e51b815260040161043190614cc2565b8060005b8181101561280257600084848381811061276f5761276f614fcd565b90506020020160208101906127849190614326565b6001600160a01b031614156127f25760405162461bcd60e51b815260206004820152602e60248201527f43616e206e6f742073657420616e20656d70747920616464726573732061732060448201526d30903932bbb0b932103a37b5b2b760911b6064820152608401610431565b6127fb81614f70565b9050612753565b507f04c0b9649497d316554306e53678d5f5f5dbc3a06f97dec13ff4cfe98b986bbc60a4848460405161283793929190614a7b565b60405180910390a1610f3660a4848461407f565b612853612b98565b61286f5760405162461bcd60e51b815260040161043190614cc2565b603680546001600160a01b0319166001600160a01b0383169081179091556040517f3329861a0008b3348767567d2405492b997abd79a088d0f2cef6b1a09a8e7ff790600090a250565b60335460009061010090046001600160a01b031633146128eb5760405162461bcd60e51b815260040161043190614d4e565b60335460ff161561290e5760405162461bcd60e51b815260040161043190614d24565b60008051602061501d833981519152805460028114156129405760405162461bcd60e51b815260040161043190614d85565b6002825561294e6001613972565b925060018255505090565b612961612b98565b61297d5760405162461bcd60e51b815260040161043190614cc2565b808210801561299457506801bc16d674ec80000081105b80156129b15750673782dace9d9000006129ae8383614f2d565b10155b6129fd5760405162461bcd60e51b815260206004820152601760248201527f496e636f7272656374206675736520696e74657276616c0000000000000000006044820152606401610431565b6069829055606a81905560408051838152602081018390527fcb8d24e46eb3c402bf344ee60a6576cba9ef2f59ea1af3b311520704924e901a91015b60405180910390a15050565b60405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401602060405180830381600087803b158015612ad057600080fd5b505af1158015612ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b08919061463b565b50565b612b13612b98565b612b2f5760405162461bcd60e51b815260040161043190614cc2565b60a354604080516001600160a01b03928316815291831660208301527fe48386b84419f4d36e0f96c10cc3510b6fb1a33795620c5098b22472bbe90796910160405180910390a160a380546001600160a01b0319166001600160a01b0392909216919091179055565b6000612bb060008051602061503d8339815191525490565b6001600160a01b0316336001600160a01b031614905090565b612bd1612b98565b612bed5760405162461bcd60e51b815260040161043190614cc2565b612c15817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b0316612c3560008051602061503d8339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612cb55760405162461bcd60e51b815260040161043190614c8b565b60008051602061501d83398151915280546002811415612ce75760405162461bcd60e51b815260040161043190614d85565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614612d3c5760405162461bcd60e51b815260040161043190614cf9565b61255585858561380c565b60335461010090046001600160a01b03163314612d765760405162461bcd60e51b815260040161043190614d4e565b60335460ff1615612d995760405162461bcd60e51b815260040161043190614d24565b60008484604051612dab929190614952565b604080519182900390912060008181526035602052919091205490915060ff166002816004811115612ddf57612ddf614fa1565b14612e235760405162461bcd60e51b815260206004820152601460248201527315985b1a59185d1bdc881b9bdd081cdd185ad95960621b6044820152606401610431565b604051633877322b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633877322b90612e75908990899089908990600401614b75565b600060405180830381600087803b158015612e8f57600080fd5b505af1158015612ea3573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166003179055518391507f8c2e15303eb94e531acc988c2a01d1193bdaaa15eda7f16dda85316ed463578d90612ef8908990899089908990614b75565b60405180910390a2505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612f505760405162461bcd60e51b815260040161043190614c8b565b60008051602061501d83398151915280546002811415612f825760405162461bcd60e51b815260040161043190614d85565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015612fe857600080fd5b505afa158015612ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130209190614789565b9050600061010754826130339190614f2d565b9050801561306b5761010782905561306b7f0000000000000000000000000000000000000000000000000000000000000000826133d2565b5050600182555050565b6036546001600160a01b031633146130cf5760405162461bcd60e51b815260206004820152601960248201527f43616c6c6572206973206e6f7420746865204d6f6e69746f72000000000000006044820152606401610431565b600060388190556040517fe765a88a37047c5d793dce22b9ceb5a0f5039d276da139b4c7d29613f341f1109190a1565b606060a480548060200260200160405190810160405280929190818152602001828054801561315757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613139575b5050505050905090565b6001600160a01b038281166000908152609f602052604090205416156131be5760405162461bcd60e51b81526020600482015260126024820152711c151bdad95b88185b1c9958591e481cd95d60721b6044820152606401610431565b6001600160a01b038216158015906131de57506001600160a01b03811615155b61321e5760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642061646472657373657360781b6044820152606401610431565b6001600160a01b038281166000818152609f6020908152604080832080549587166001600160a01b0319968716811790915560a0805460018101825594527f78fdc8d422c49ced035a9edf18d00d3c6a8d81df210f3e5e448e045e77b41e8890930180549095168417909455925190815290917fef6485b84315f9b1483beffa32aae9a0596890395e3d7521f1c5fbb51790e765910160405180910390a25050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052613312908490613e72565b505050565b825161332a9060a49060208601906140e2565b508151815181146133745760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420696e7075742061727261797360601b6044820152606401610431565b60005b818110156133cb576133bb84828151811061339457613394614fcd565b60200260200101518483815181106133ae576133ae614fcd565b6020026020010151613161565b6133c481614f70565b9050613377565b5050505050565b6000811161341b5760405162461bcd60e51b81526020600482015260166024820152754d757374206465706f73697420736f6d657468696e6760501b6044820152606401610431565b6040805160008152602081018390526001600160a01b038416917f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62910160405180910390a25050565b60335460ff16156134875760405162461bcd60e51b815260040161043190614d24565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e52253816040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156134e457600080fd5b505af11580156134f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061351c9190614789565b905060006068548261352e9190614ed4565b9050804710156135805760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74206574682062616c616e636500000000000000006044820152606401610431565b8015610c4c5760006068819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156135e957600080fd5b505af11580156135fd573d6000803e3d6000fd5b505060a35461363d93506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169350169050836132c0565b60a354604080516001600160a01b0392831681527f0000000000000000000000000000000000000000000000000000000000000000909216602083015281018290527ff6c07a063ed4e63808eb8da7112d46dbcd38de2b40a73dbcc9353c5a94c7235390606001612a39565b6001600160a01b0381166136ff5760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f7220697320616464726573732830290000000000006044820152606401610431565b806001600160a01b031661371f60008051602061503d8339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a3612b088160008051602061503d83398151915255565b60006137798261010754613f44565b905080610107600082825461378e9190614f2d565b90915550505050565b60335460ff16156137ba5760405162461bcd60e51b815260040161043190614d24565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586137ef3390565b6040516001600160a01b03909116815260200160405180910390a1565b6000811161385c5760405162461bcd60e51b815260206004820152601760248201527f4d75737420776974686472617720736f6d657468696e670000000000000000006044820152606401610431565b6001600160a01b0383166138ab5760405162461bcd60e51b8152602060048201526016602482015275135d5cdd081cdc1958da599e481c9958da5c1a595b9d60521b6044820152606401610431565b6138b48161376a565b6138c86001600160a01b03831684836132c0565b6040805160008152602081018390526001600160a01b038416917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398910161271e565b6040805160008152602081018390526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398910160405180910390a250565b60006068544710156139875761156982613f5c565b6000606854476139979190614f2d565b9050600191506801bc16d674ec8000008110613b7b5760006139c26801bc16d674ec80000083614eec565b905080603460008282546139d69190614f2d565b90915550600090506139f1826801bc16d674ec800000614f0e565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613a4e57600080fd5b505af1158015613a62573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613af257600080fd5b505af1158015613b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2a919061463b565b50613b348161390a565b60345460408051848152602081019290925281018290527fbe7040030ff7b347853214bf49820c6d455fedf58f3815f85c7bc5216993682b9060600160405180910390a150505b600060685447613b8b9190614f2d565b90506801bc16d674ec8000008110613bdd5760405162461bcd60e51b8152602060048201526015602482015274556e6578706563746564206163636f756e74696e6760581b6044820152606401610431565b80613be9575050919050565b606954811015613c43578060686000828254613c059190614ed4565b90915550506040518181527f7a745a2c63a535068f52ceca27debd5297bbad5f7f37ec53d044a59d0362445d906020015b60405180910390a1613df1565b606a54811115613de0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613ca857600080fd5b505af1158015613cbc573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613d4c57600080fd5b505af1158015613d60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d84919061463b565b50600160346000828254613d989190614f2d565b90915550613da790508161390a565b60345460408051918252602082018390527f6aa7e30787b26429ced603a7aba8b19c4b5d5bcf29a3257da953c8d53bcaa3a69101613c36565b613de984613f5c565b949350505050565b5050919050565b60335460ff16613e415760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610431565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336137ef565b6000613ec7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613f749092919063ffffffff16565b8051909150156133125780806020019051810190613ee5919061463b565b6133125760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610431565b6000818310613f535781613f55565b825b9392505050565b60008115613f6c57613f6c613797565b506000919050565b6060613de9848460008585843b613fcd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610431565b600080866001600160a01b03168587604051613fe99190614962565b60006040518083038185875af1925050503d8060008114614026576040519150601f19603f3d011682016040523d82523d6000602084013e61402b565b606091505b509150915061403b828286614046565b979650505050505050565b60608315614055575081613f55565b8251156140655782518084602001fd5b8160405162461bcd60e51b81526004016104319190614c78565b8280548282559060005260206000209081019282156140d2579160200282015b828111156140d25781546001600160a01b0319166001600160a01b0384351617825560209092019160019091019061409f565b506140de929150614137565b5090565b8280548282559060005260206000209081019282156140d2579160200282015b828111156140d257825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614102565b5b808211156140de5760008155600101614138565b60008083601f84011261415e57600080fd5b5081356001600160401b0381111561417557600080fd5b6020830191508360208260051b850101111561419057600080fd5b9250929050565b600082601f8301126141a857600080fd5b813560206141bd6141b883614e70565b614e40565b80838252828201915082860187848660051b89010111156141dd57600080fd5b60005b858110156142055781356141f381614ff9565b845292840192908401906001016141e0565b5090979650505050505050565b60008083601f84011261422457600080fd5b5081356001600160401b0381111561423b57600080fd5b60208301915083602082850101111561419057600080fd5b600060a0828403121561426557600080fd5b50919050565b600060a0828403121561427d57600080fd5b60405160a081018181106001600160401b038211171561429f5761429f614fe3565b6040529050806142ae836142f6565b81526142bc6020840161430f565b60208201526142cd6040840161430f565b604082015260608301356142e08161500e565b6060820152608092830135920191909152919050565b803563ffffffff8116811461430a57600080fd5b919050565b80356001600160401b038116811461430a57600080fd5b60006020828403121561433857600080fd5b8135613f5581614ff9565b60006020828403121561435557600080fd5b8151613f5581614ff9565b6000806040838503121561437357600080fd5b823561437e81614ff9565b9150602083013561438e81614ff9565b809150509250929050565b6000806000606084860312156143ae57600080fd5b83356143b981614ff9565b925060208401356143c981614ff9565b929592945050506040919091013590565b600080604083850312156143ed57600080fd5b82356143f881614ff9565b946020939093013593505050565b6000806020838503121561441957600080fd5b82356001600160401b0381111561442f57600080fd5b61443b8582860161414c565b90969095509350505050565b60008060006060848603121561445c57600080fd5b83356001600160401b038082111561447357600080fd5b61447f87838801614197565b9450602086013591508082111561449557600080fd5b6144a187838801614197565b935060408601359150808211156144b757600080fd5b506144c486828701614197565b9150509250925092565b600080600080600080600080610120898b0312156144eb57600080fd5b88356001600160401b038082111561450257600080fd5b61450e8c838d0161414c565b909a50985060208b013591508082111561452757600080fd5b6145338c838d0161414c565b909850965060408b013591508082111561454c57600080fd5b506145598b828c0161414c565b909550935050606089013591506145738a60808b01614253565b90509295985092959890939650565b600080600060e0848603121561459757600080fd5b83356001600160401b038111156145ad57600080fd5b8401601f810186136145be57600080fd5b803560206145ce6141b883614e70565b8083825282820191508285018a848660051b88010111156145ee57600080fd5b600095505b84861015614618576146048161430f565b8352600195909501949183019183016145f3565b50965050860135935061463291508690506040860161426b565b90509250925092565b60006020828403121561464d57600080fd5b8151613f558161500e565b60006020828403121561466a57600080fd5b5035919050565b6000806000806040858703121561468757600080fd5b84356001600160401b038082111561469e57600080fd5b6146aa88838901614212565b909650945060208701359150808211156146c357600080fd5b506146d08782880161414c565b95989497509550505050565b600080600080600060e086880312156146f457600080fd5b85356001600160401b038082111561470b57600080fd5b61471789838a01614212565b9097509550602088013591508082111561473057600080fd5b5061473d8882890161414c565b909450925061475190508760408801614253565b90509295509295909350565b60008060006060848603121561477257600080fd5b505081359360208301359350604090920135919050565b60006020828403121561479b57600080fd5b5051919050565b600080604083850312156147b557600080fd5b50508035926020909101359150565b81835260006020808501808196508560051b810191508460005b878110156148475782840389528135601e198836030181126147ff57600080fd5b870180356001600160401b0381111561481757600080fd5b80360389131561482657600080fd5b614833868289850161489b565b9a87019a95505050908401906001016147de565b5091979650505050505050565b8183526000602080850194508260005b85811015614890576001600160401b0361487d8361430f565b1687529582019590820190600101614864565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526148dc816020860160208601614f44565b601f01601f19169290920160200192915050565b63ffffffff6148fe826142f6565b16825261490d6020820161430f565b6001600160401b0380821660208501528061492a6040850161430f565b166040850152505060608101356149408161500e565b15156060830152608090810135910152565b8183823760009101908152919050565b60008251614974818460208701614f44565b9190910192915050565b6001600160a01b03851681526101006020808301829052855191830182905260009161012084019187810191845b818110156149d15783516001600160401b0316855293820193928201926001016149ac565b505082935086604086015263ffffffff865116606086015280860151925050506001600160401b0380821660808501528060408601511660a085015250506060830151151560c0830152608083015160e083015295945050505050565b6020808252825182820181905260009190848201906040850190845b81811015614a6f5783516001600160a01b031683529284019291840191600101614a4a565b50909695505050505050565b6000604082016040835280865480835260608501915087600052602092508260002060005b82811015614ac55781546001600160a01b031684529284019260019182019101614aa0565b505050838103828501528481528590820160005b86811015614b07578235614aec81614ff9565b6001600160a01b031682529183019190830190600101614ad9565b50979650505050505050565b6000610120808352614b288184018b8d6147c4565b90508281036020840152614b3d81898b614854565b90508281036040840152614b528187896147c4565b915050836060830152614b6860808301846148f0565b9998505050505050505050565b604081526000614b8960408301868861489b565b828103602084015261403b818587614854565b60e081526000614bb060e08301878961489b565b8281036020840152614bc3818688614854565b915050614bd360408301846148f0565b9695505050505050565b608081526000614bf160808301888a61489b565b8281036020840152614c0381886148c4565b90508281036040840152614c1881868861489b565b915050826060830152979650505050505050565b604081526000614c4060408301858761489b565b9050826020830152949350505050565b6020810160058310614c7257634e487b7160e01b600052602160045260246000fd5b91905290565b602081526000613f5560208301846148c4565b60208082526017908201527f43616c6c6572206973206e6f7420746865205661756c74000000000000000000604082015260600190565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b602080825260119082015270155b9cdd5c1c1bdc9d195908185cdcd95d607a1b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601d908201527f43616c6c6572206973206e6f7420746865205265676973747261746f72000000604082015260600190565b6020808252600e908201526d1499595b9d1c985b9d0818d85b1b60921b604082015260600190565b6020808252601c908201527f43616c6c6572206973206e6f7420746865205374726174656769737400000000604082015260600190565b6000808335601e19843603018112614dfb57600080fd5b8301803591506001600160401b03821115614e1557600080fd5b60200191503681900382131561419057600080fd5b60008235605e1983360301811261497457600080fd5b604051601f8201601f191681016001600160401b0381118282101715614e6857614e68614fe3565b604052919050565b60006001600160401b03821115614e8957614e89614fe3565b5060051b60200190565b600080821280156001600160ff1b0384900385131615614eb557614eb5614f8b565b600160ff1b8390038412811615614ece57614ece614f8b565b50500190565b60008219821115614ee757614ee7614f8b565b500190565b600082614f0957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614f2857614f28614f8b565b500290565b600082821015614f3f57614f3f614f8b565b500390565b60005b83811015614f5f578181015183820152602001614f47565b83811115610f365750506000910152565b6000600019821415614f8457614f84614f8b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612b0857600080fd5b8015158114612b0857600080fdfe53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac45357bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4aa264697066735822122090185a734b1de8826eb108de1e4c3e6d39974867eef4808c4768d017495ca8a464736f6c634300080700337bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a", - "deployedBytecode": "0x6080604052600436106103855760003560e01c8063853828b6116101d1578063b16b7d0b11610102578063d9f00ec7116100a0578063de5f62681161006f578063de5f626814610b9f578063e752923914610bb4578063ee7afe2d14610bca578063f6ca71b014610bdf57600080fd5b8063d9f00ec714610b01578063dbe55e5614610b21578063dd505df614610b55578063de34d71314610b8957600080fd5b8063cceab750116100dc578063cceab75014610a76578063d059f6ef14610aaa578063d38bfff414610ac1578063d9caed1214610ae157600080fd5b8063b16b7d0b14610a24578063c2e1e3f414610a41578063c7af335214610a6157600080fd5b80639da0e4621161016f578063aa388af611610149578063aa388af61461096e578063ab12edf5146109bb578063ad1728cb146109db578063ad5c4648146109f057600080fd5b80639da0e462146108fc578063a3b81e7314610939578063a4f98af41461095957600080fd5b80639092c31c116101ab5780639092c31c146108545780639136616a1461088857806391649751146108a857806396d538bb146108dc57600080fd5b8063853828b6146107fa57806387bae8671461080f5780638d7c0e461461083457600080fd5b80635c975abb116102b65780636ef38795116102545780637b2d9b2c116102235780637b2d9b2c146107995780637b8962f7146107b9578063842f5c46146107cf5780638456cb59146107e557600080fd5b80636ef3879514610705578063714897df1461072557806371a735f3146107595780637260f8261461077957600080fd5b80636309238311610290578063630923831461069957806366e3667e146106af57806367c7066c146106c55780636e811d38146106e557600080fd5b80635c975abb146106405780635d36b190146106645780635f5152261461067957600080fd5b8063430bf08a11610323578063484be812116102fd578063484be812146105d55780635205c380146105eb57806359b80c0a1461060b5780635a063f631461062b57600080fd5b8063430bf08a14610561578063435356d11461059557806347e7ef24146105b557600080fd5b80630fc3b4c41161035f5780630fc3b4c4146104c75780631072cbea146104fd57806322495dc81461051d5780633c8649591461053d57600080fd5b80630c340a24146104415780630df1ecfd146104735780630ed57b3a146104a757600080fd5b3661043c57336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806103e95750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61043a5760405162461bcd60e51b815260206004820152601e60248201527f457468206e6f742066726f6d20616c6c6f77656420636f6e747261637473000060448201526064015b60405180910390fd5b005b600080fd5b34801561044d57600080fd5b50610456610c01565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561047f57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b357600080fd5b5061043a6104c2366004614360565b610c1e565b3480156104d357600080fd5b506104566104e2366004614326565b609f602052600090815260409020546001600160a01b031681565b34801561050957600080fd5b5061043a6105183660046143da565b610c50565b34801561052957600080fd5b5061043a610538366004614582565b610d0d565b34801561054957600080fd5b5061055360695481565b60405190815260200161046a565b34801561056d57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a157600080fd5b5061043a6105b0366004614447565b610e57565b3480156105c157600080fd5b5061043a6105d03660046143da565b610f3c565b3480156105e157600080fd5b50610553606a5481565b3480156105f757600080fd5b5061043a610606366004614658565b611037565b34801561061757600080fd5b5061043a6106263660046144ce565b611096565b34801561063757600080fd5b5061043a611319565b34801561064c57600080fd5b5060335460ff165b604051901515815260200161046a565b34801561067057600080fd5b5061043a6113b8565b34801561068557600080fd5b50610553610694366004614326565b61145e565b3480156106a557600080fd5b50610553611c2081565b3480156106bb57600080fd5b5061055360345481565b3480156106d157600080fd5b5060a354610456906001600160a01b031681565b3480156106f157600080fd5b5061043a610700366004614326565b61156f565b34801561071157600080fd5b5061043a610720366004614406565b6115e5565b34801561073157600080fd5b506105537f000000000000000000000000000000000000000000000000000000000000000081565b34801561076557600080fd5b5061043a6107743660046146dc565b611baf565b34801561078557600080fd5b50603654610456906001600160a01b031681565b3480156107a557600080fd5b506104566107b4366004614658565b611d98565b3480156107c557600080fd5b5061055360375481565b3480156107db57600080fd5b5061055360685481565b3480156107f157600080fd5b5061043a611dc2565b34801561080657600080fd5b5061043a611e8b565b34801561081b57600080fd5b506033546104569061010090046001600160a01b031681565b34801561084057600080fd5b5061043a61084f36600461475d565b61205d565b34801561086057600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b34801561089457600080fd5b5061043a6108a3366004614658565b61255f565b3480156108b457600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156108e857600080fd5b5061043a6108f7366004614406565b61272b565b34801561090857600080fd5b5061092c610917366004614658565b60356020526000908152604090205460ff1681565b60405161046a9190614c50565b34801561094557600080fd5b5061043a610954366004614326565b61284b565b34801561096557600080fd5b506106546128b9565b34801561097a57600080fd5b50610654610989366004614326565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156109c757600080fd5b5061043a6109d63660046147a2565b612959565b3480156109e757600080fd5b5061043a612a45565b3480156109fc57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610a3057600080fd5b506105536801bc16d674ec80000081565b348015610a4d57600080fd5b5061043a610a5c366004614326565b612b0b565b348015610a6d57600080fd5b50610654612b98565b348015610a8257600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610ab657600080fd5b506105536101075481565b348015610acd57600080fd5b5061043a610adc366004614326565b612bc9565b348015610aed57600080fd5b5061043a610afc366004614399565b612c6d565b348015610b0d57600080fd5b5061043a610b1c366004614671565b612d47565b348015610b2d57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b6157600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b9557600080fd5b5061055360385481565b348015610bab57600080fd5b5061043a612f08565b348015610bc057600080fd5b50610553606b5481565b348015610bd657600080fd5b5061043a613075565b348015610beb57600080fd5b50610bf46130ff565b60405161046a9190614a2e565b6000610c1960008051602061503d8339815191525490565b905090565b610c26612b98565b610c425760405162461bcd60e51b815260040161043190614cc2565b610c4c8282613161565b5050565b610c58612b98565b610c745760405162461bcd60e51b815260040161043190614cc2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169083161415610cf15760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74207472616e7366657220737570706f72746564206173736574006044820152606401610431565b610c4c610cfc610c01565b6001600160a01b03841690836132c0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6657600080fd5b505afa158015610d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9e9190614343565b6001600160a01b0316336001600160a01b031614610dce5760405162461bcd60e51b815260040161043190614dad565b60405163bc26e7e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bc26e7e590610e2090309087908790879060040161497e565b600060405180830381600087803b158015610e3a57600080fd5b505af1158015610e4e573d6000803e3d6000fd5b50505050505050565b610e5f612b98565b610e7b5760405162461bcd60e51b815260040161043190614cc2565b600054610100900460ff1680610e94575060005460ff16155b610ef75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610431565b600054610100900460ff16158015610f19576000805461ffff19166101011790555b610f24848484613317565b8015610f36576000805461ff00191690555b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f845760405162461bcd60e51b815260040161043190614c8b565b60008051602061501d83398151915280546002811415610fb65760405162461bcd60e51b815260040161043190614d85565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161461100b5760405162461bcd60e51b815260040161043190614cf9565b82610107600082825461101e9190614ed4565b9091555061102e905084846133d2565b50600190555050565b61103f612b98565b61105b5760405162461bcd60e51b815260040161043190614cc2565b60378190556040518181527fe26b067424903962f951f568e52ec9a3bbe1589526ea54a4e69ca6eaae1a4c779060200160405180910390a150565b60335461010090046001600160a01b031633146110c55760405162461bcd60e51b815260040161043190614d4e565b60335460ff16156110e85760405162461bcd60e51b815260040161043190614d24565b8683146111375760405162461bcd60e51b815260206004820152601a60248201527f5075626b65792073686172657344617461206d69736d617463680000000000006044820152606401610431565b60008060005b89811015611280578a8a8281811061115757611157614fcd565b90506020028101906111699190614de4565b604051611177929190614952565b6040805191829003909120600081815260356020529182205490945060ff1692508260048111156111aa576111aa614fa1565b146111f75760405162461bcd60e51b815260206004820152601c60248201527f56616c696461746f7220616c72656164792072656769737465726564000000006044820152606401610431565b6000838152603560205260409020805460ff19166001179055827facd38e900350661e325d592c959664c0000a306efb2004e7dc283f44e0ea04238c8c8481811061124457611244614fcd565b90506020028101906112569190614de4565b8c8c6040516112689493929190614b75565b60405180910390a261127981614f70565b905061113d565b506040516322f18bf560e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906322f18bf5906112db908d908d908d908d908d908d908d908d90600401614b13565b600060405180830381600087803b1580156112f557600080fd5b505af1158015611309573d6000803e3d6000fd5b5050505050505050505050505050565b60a3546001600160a01b031633146113735760405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74207468652048617276657374657200000000006044820152606401610431565b60008051602061501d833981519152805460028114156113a55760405162461bcd60e51b815260040161043190614d85565b600282556113b1613464565b5060019055565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b0316146114535760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b6064820152608401610431565b61145c336136a9565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146114b15760405162461bcd60e51b815260040161043190614cf9565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561151057600080fd5b505afa158015611524573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115489190614789565b6801bc16d674ec80000060345461155f9190614f0e565b6115699190614ed4565b92915050565b611577612b98565b6115935760405162461bcd60e51b815260040161043190614cc2565b60338054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f83f29c79feb71f8fba9d0fbc4ba5f0982a28b6b1e868b3fc50e6400d100bca0f90600090a250565b60335461010090046001600160a01b031633146116145760405162461bcd60e51b815260040161043190614d4e565b60335460ff16156116375760405162461bcd60e51b815260040161043190614d24565b60008051602061501d833981519152805460028114156116695760405162461bcd60e51b815260040161043190614d85565b6002825560006116826801bc16d674ec80000085614f0e565b6040516370a0823160e01b81523060048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156116e457600080fd5b505afa1580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171c9190614789565b81111561175f5760405162461bcd60e51b8152602060048201526011602482015270092dce6eaccccd2c6d2cadce840ae8aa89607b1b6044820152606401610431565b6034547f00000000000000000000000000000000000000000000000000000000000000009061178f908690614ed4565b11156117d65760405162461bcd60e51b815260206004820152601660248201527513585e081d985b1a59185d1bdc9cc81c995858da195960521b6044820152606401610431565b603754816038546117e79190614ed4565b11156118355760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e6720455448206f766572207468726573686f6c640000000000006044820152606401610431565b80603860008282546118479190614ed4565b9091555050604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156118ae57600080fd5b505af11580156118c2573d6000803e3d6000fd5b505050506118cf8161376a565b60408051600160f81b60208201526000602182018190526bffffffffffffffffffffffff193060601b16602c8301529101604051602081830303815290604052905060005b85811015611b8857600087878381811061193057611930614fcd565b90506020028101906119429190614e2a565b61194c9080614de4565b60405161195a929190614952565b6040519081900390209050600160008281526035602052604090205460ff16600481111561198a5761198a614fa1565b146119d75760405162461bcd60e51b815260206004820152601860248201527f56616c696461746f72206e6f74207265676973746572656400000000000000006044820152606401610431565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008a8a86818110611a2257611a22614fcd565b9050602002810190611a349190614e2a565b611a3e9080614de4565b878d8d89818110611a5157611a51614fcd565b9050602002810190611a639190614e2a565b611a71906020810190614de4565b8f8f8b818110611a8357611a83614fcd565b9050602002810190611a959190614e2a565b604001356040518863ffffffff1660e01b8152600401611aba96959493929190614bdd565b6000604051808303818588803b158015611ad357600080fd5b505af1158015611ae7573d6000803e3d6000fd5b5050506000838152603560205260409020805460ff19166002179055508190507f958934bb53d6b4dc911b6173e586864efbc8076684a31f752c53d5778340b37f898985818110611b3a57611b3a614fcd565b9050602002810190611b4c9190614e2a565b611b569080614de4565b6801bc16d674ec800000604051611b6f93929190614c2c565b60405180910390a250611b8181614f70565b9050611914565b508585905060346000828254611b9e9190614ed4565b909155505060019093555050505050565b60335461010090046001600160a01b03163314611bde5760405162461bcd60e51b815260040161043190614d4e565b60335460ff1615611c015760405162461bcd60e51b815260040161043190614d24565b60008585604051611c13929190614952565b604080519182900390912060008181526035602052919091205490915060ff166003816004811115611c4757611c47614fa1565b1480611c6457506001816004811115611c6257611c62614fa1565b145b611cb05760405162461bcd60e51b815260206004820152601d60248201527f56616c696461746f72206e6f742072656764206f722065786974696e670000006044820152606401610431565b6040516312b3fc1960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906312b3fc1990611d04908a908a908a908a908a90600401614b9c565b600060405180830381600087803b158015611d1e57600080fd5b505af1158015611d32573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166004179055518391507f6aecca20726a17c1b81989b2fd09dfdf636bae9e564d4066ca18df62dc1f3dc290611d87908a908a908a908a90614b75565b60405180910390a250505050505050565b60a48181548110611da857600080fd5b6000918252602090912001546001600160a01b0316905081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e1b57600080fd5b505afa158015611e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e539190614343565b6001600160a01b0316336001600160a01b031614611e835760405162461bcd60e51b815260040161043190614dad565b61145c613797565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611eda5750611ec5610c01565b6001600160a01b0316336001600160a01b0316145b611f325760405162461bcd60e51b815260206004820152602360248201527f43616c6c6572206973206e6f7420746865205661756c74206f7220476f7665726044820152623737b960e91b6064820152608401610431565b60008051602061501d83398151915280546002811415611f645760405162461bcd60e51b815260040161043190614d85565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015611fca57600080fd5b505afa158015611fde573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120029190614789565b90508015612055576120557f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008361380c565b505060019055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156120b657600080fd5b505afa1580156120ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ee9190614343565b6001600160a01b0316336001600160a01b03161461211e5760405162461bcd60e51b815260040161043190614dad565b60335460ff166121675760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610431565b60008051602061501d833981519152805460028114156121995760405162461bcd60e51b815260040161043190614d85565b6002825543611c20606b546121ae9190614ed4565b106121fb5760405162461bcd60e51b815260206004820152601e60248201527f466978206163636f756e74696e672063616c6c656420746f6f20736f6f6e00006044820152606401610431565b600219851215801561220e575060038513155b801561222857506000856034546122259190614e93565b12155b6122745760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642076616c696461746f727344656c74610000000000000000006044820152606401610431565b6811ff6cf0fd15afffff19841215801561229757506811ff6cf0fd15b000008413155b80156122b157506000846068546122ae9190614e93565b12155b6122fd5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420636f6e73656e7375735265776172647344656c74610000006044820152606401610431565b68053444835ec58000008311156123565760405162461bcd60e51b815260206004820152601960248201527f496e76616c69642077657468546f5661756c74416d6f756e74000000000000006044820152606401610431565b846034546123649190614e93565b603455606854612375908590614e93565b60685543606b5582156124c3577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123dd57600080fd5b505af11580156123f1573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018890527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b15801561248157600080fd5b505af1158015612495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b9919061463b565b506124c38361390a565b60408051868152602081018690529081018490527f80d022717ea022455c5886b8dd8a29c037570aae58aeb4d7b136d7a10ec2e4319060600160405180910390a161250e6000613972565b61254d5760405162461bcd60e51b815260206004820152601060248201526f233ab9b29039ba34b63610313637bbb760811b6044820152606401610431565b612555613df8565b5060019055505050565b612567612b98565b6125835760405162461bcd60e51b815260040161043190614cc2565b60a05481106125c45760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b6044820152606401610431565b600060a082815481106125d9576125d9614fcd565b60009182526020808320909101546001600160a01b03908116808452609f90925260409092205460a0549193509091169061261690600190614f2d565b8310156126985760a0805461262d90600190614f2d565b8154811061263d5761263d614fcd565b60009182526020909120015460a080546001600160a01b03909216918590811061266957612669614fcd565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b60a08054806126a9576126a9614fb7565b60008281526020808220600019908401810180546001600160a01b031990811690915593019093556001600160a01b03858116808352609f855260409283902080549094169093559051908416815290917f16b7600acff27e39a8a96056b3d533045298de927507f5c1d97e4accde60488c91015b60405180910390a2505050565b612733612b98565b61274f5760405162461bcd60e51b815260040161043190614cc2565b8060005b8181101561280257600084848381811061276f5761276f614fcd565b90506020020160208101906127849190614326565b6001600160a01b031614156127f25760405162461bcd60e51b815260206004820152602e60248201527f43616e206e6f742073657420616e20656d70747920616464726573732061732060448201526d30903932bbb0b932103a37b5b2b760911b6064820152608401610431565b6127fb81614f70565b9050612753565b507f04c0b9649497d316554306e53678d5f5f5dbc3a06f97dec13ff4cfe98b986bbc60a4848460405161283793929190614a7b565b60405180910390a1610f3660a4848461407f565b612853612b98565b61286f5760405162461bcd60e51b815260040161043190614cc2565b603680546001600160a01b0319166001600160a01b0383169081179091556040517f3329861a0008b3348767567d2405492b997abd79a088d0f2cef6b1a09a8e7ff790600090a250565b60335460009061010090046001600160a01b031633146128eb5760405162461bcd60e51b815260040161043190614d4e565b60335460ff161561290e5760405162461bcd60e51b815260040161043190614d24565b60008051602061501d833981519152805460028114156129405760405162461bcd60e51b815260040161043190614d85565b6002825561294e6001613972565b925060018255505090565b612961612b98565b61297d5760405162461bcd60e51b815260040161043190614cc2565b808210801561299457506801bc16d674ec80000081105b80156129b15750673782dace9d9000006129ae8383614f2d565b10155b6129fd5760405162461bcd60e51b815260206004820152601760248201527f496e636f7272656374206675736520696e74657276616c0000000000000000006044820152606401610431565b6069829055606a81905560408051838152602081018390527fcb8d24e46eb3c402bf344ee60a6576cba9ef2f59ea1af3b311520704924e901a91015b60405180910390a15050565b60405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401602060405180830381600087803b158015612ad057600080fd5b505af1158015612ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b08919061463b565b50565b612b13612b98565b612b2f5760405162461bcd60e51b815260040161043190614cc2565b60a354604080516001600160a01b03928316815291831660208301527fe48386b84419f4d36e0f96c10cc3510b6fb1a33795620c5098b22472bbe90796910160405180910390a160a380546001600160a01b0319166001600160a01b0392909216919091179055565b6000612bb060008051602061503d8339815191525490565b6001600160a01b0316336001600160a01b031614905090565b612bd1612b98565b612bed5760405162461bcd60e51b815260040161043190614cc2565b612c15817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b0316612c3560008051602061503d8339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612cb55760405162461bcd60e51b815260040161043190614c8b565b60008051602061501d83398151915280546002811415612ce75760405162461bcd60e51b815260040161043190614d85565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614612d3c5760405162461bcd60e51b815260040161043190614cf9565b61255585858561380c565b60335461010090046001600160a01b03163314612d765760405162461bcd60e51b815260040161043190614d4e565b60335460ff1615612d995760405162461bcd60e51b815260040161043190614d24565b60008484604051612dab929190614952565b604080519182900390912060008181526035602052919091205490915060ff166002816004811115612ddf57612ddf614fa1565b14612e235760405162461bcd60e51b815260206004820152601460248201527315985b1a59185d1bdc881b9bdd081cdd185ad95960621b6044820152606401610431565b604051633877322b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633877322b90612e75908990899089908990600401614b75565b600060405180830381600087803b158015612e8f57600080fd5b505af1158015612ea3573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166003179055518391507f8c2e15303eb94e531acc988c2a01d1193bdaaa15eda7f16dda85316ed463578d90612ef8908990899089908990614b75565b60405180910390a2505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612f505760405162461bcd60e51b815260040161043190614c8b565b60008051602061501d83398151915280546002811415612f825760405162461bcd60e51b815260040161043190614d85565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015612fe857600080fd5b505afa158015612ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130209190614789565b9050600061010754826130339190614f2d565b9050801561306b5761010782905561306b7f0000000000000000000000000000000000000000000000000000000000000000826133d2565b5050600182555050565b6036546001600160a01b031633146130cf5760405162461bcd60e51b815260206004820152601960248201527f43616c6c6572206973206e6f7420746865204d6f6e69746f72000000000000006044820152606401610431565b600060388190556040517fe765a88a37047c5d793dce22b9ceb5a0f5039d276da139b4c7d29613f341f1109190a1565b606060a480548060200260200160405190810160405280929190818152602001828054801561315757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613139575b5050505050905090565b6001600160a01b038281166000908152609f602052604090205416156131be5760405162461bcd60e51b81526020600482015260126024820152711c151bdad95b88185b1c9958591e481cd95d60721b6044820152606401610431565b6001600160a01b038216158015906131de57506001600160a01b03811615155b61321e5760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642061646472657373657360781b6044820152606401610431565b6001600160a01b038281166000818152609f6020908152604080832080549587166001600160a01b0319968716811790915560a0805460018101825594527f78fdc8d422c49ced035a9edf18d00d3c6a8d81df210f3e5e448e045e77b41e8890930180549095168417909455925190815290917fef6485b84315f9b1483beffa32aae9a0596890395e3d7521f1c5fbb51790e765910160405180910390a25050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052613312908490613e72565b505050565b825161332a9060a49060208601906140e2565b508151815181146133745760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420696e7075742061727261797360601b6044820152606401610431565b60005b818110156133cb576133bb84828151811061339457613394614fcd565b60200260200101518483815181106133ae576133ae614fcd565b6020026020010151613161565b6133c481614f70565b9050613377565b5050505050565b6000811161341b5760405162461bcd60e51b81526020600482015260166024820152754d757374206465706f73697420736f6d657468696e6760501b6044820152606401610431565b6040805160008152602081018390526001600160a01b038416917f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62910160405180910390a25050565b60335460ff16156134875760405162461bcd60e51b815260040161043190614d24565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e52253816040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156134e457600080fd5b505af11580156134f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061351c9190614789565b905060006068548261352e9190614ed4565b9050804710156135805760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74206574682062616c616e636500000000000000006044820152606401610431565b8015610c4c5760006068819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156135e957600080fd5b505af11580156135fd573d6000803e3d6000fd5b505060a35461363d93506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169350169050836132c0565b60a354604080516001600160a01b0392831681527f0000000000000000000000000000000000000000000000000000000000000000909216602083015281018290527ff6c07a063ed4e63808eb8da7112d46dbcd38de2b40a73dbcc9353c5a94c7235390606001612a39565b6001600160a01b0381166136ff5760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f7220697320616464726573732830290000000000006044820152606401610431565b806001600160a01b031661371f60008051602061503d8339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a3612b088160008051602061503d83398151915255565b60006137798261010754613f44565b905080610107600082825461378e9190614f2d565b90915550505050565b60335460ff16156137ba5760405162461bcd60e51b815260040161043190614d24565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586137ef3390565b6040516001600160a01b03909116815260200160405180910390a1565b6000811161385c5760405162461bcd60e51b815260206004820152601760248201527f4d75737420776974686472617720736f6d657468696e670000000000000000006044820152606401610431565b6001600160a01b0383166138ab5760405162461bcd60e51b8152602060048201526016602482015275135d5cdd081cdc1958da599e481c9958da5c1a595b9d60521b6044820152606401610431565b6138b48161376a565b6138c86001600160a01b03831684836132c0565b6040805160008152602081018390526001600160a01b038416917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398910161271e565b6040805160008152602081018390526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398910160405180910390a250565b60006068544710156139875761156982613f5c565b6000606854476139979190614f2d565b9050600191506801bc16d674ec8000008110613b7b5760006139c26801bc16d674ec80000083614eec565b905080603460008282546139d69190614f2d565b90915550600090506139f1826801bc16d674ec800000614f0e565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613a4e57600080fd5b505af1158015613a62573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613af257600080fd5b505af1158015613b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2a919061463b565b50613b348161390a565b60345460408051848152602081019290925281018290527fbe7040030ff7b347853214bf49820c6d455fedf58f3815f85c7bc5216993682b9060600160405180910390a150505b600060685447613b8b9190614f2d565b90506801bc16d674ec8000008110613bdd5760405162461bcd60e51b8152602060048201526015602482015274556e6578706563746564206163636f756e74696e6760581b6044820152606401610431565b80613be9575050919050565b606954811015613c43578060686000828254613c059190614ed4565b90915550506040518181527f7a745a2c63a535068f52ceca27debd5297bbad5f7f37ec53d044a59d0362445d906020015b60405180910390a1613df1565b606a54811115613de0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613ca857600080fd5b505af1158015613cbc573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613d4c57600080fd5b505af1158015613d60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d84919061463b565b50600160346000828254613d989190614f2d565b90915550613da790508161390a565b60345460408051918252602082018390527f6aa7e30787b26429ced603a7aba8b19c4b5d5bcf29a3257da953c8d53bcaa3a69101613c36565b613de984613f5c565b949350505050565b5050919050565b60335460ff16613e415760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610431565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336137ef565b6000613ec7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613f749092919063ffffffff16565b8051909150156133125780806020019051810190613ee5919061463b565b6133125760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610431565b6000818310613f535781613f55565b825b9392505050565b60008115613f6c57613f6c613797565b506000919050565b6060613de9848460008585843b613fcd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610431565b600080866001600160a01b03168587604051613fe99190614962565b60006040518083038185875af1925050503d8060008114614026576040519150601f19603f3d011682016040523d82523d6000602084013e61402b565b606091505b509150915061403b828286614046565b979650505050505050565b60608315614055575081613f55565b8251156140655782518084602001fd5b8160405162461bcd60e51b81526004016104319190614c78565b8280548282559060005260206000209081019282156140d2579160200282015b828111156140d25781546001600160a01b0319166001600160a01b0384351617825560209092019160019091019061409f565b506140de929150614137565b5090565b8280548282559060005260206000209081019282156140d2579160200282015b828111156140d257825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614102565b5b808211156140de5760008155600101614138565b60008083601f84011261415e57600080fd5b5081356001600160401b0381111561417557600080fd5b6020830191508360208260051b850101111561419057600080fd5b9250929050565b600082601f8301126141a857600080fd5b813560206141bd6141b883614e70565b614e40565b80838252828201915082860187848660051b89010111156141dd57600080fd5b60005b858110156142055781356141f381614ff9565b845292840192908401906001016141e0565b5090979650505050505050565b60008083601f84011261422457600080fd5b5081356001600160401b0381111561423b57600080fd5b60208301915083602082850101111561419057600080fd5b600060a0828403121561426557600080fd5b50919050565b600060a0828403121561427d57600080fd5b60405160a081018181106001600160401b038211171561429f5761429f614fe3565b6040529050806142ae836142f6565b81526142bc6020840161430f565b60208201526142cd6040840161430f565b604082015260608301356142e08161500e565b6060820152608092830135920191909152919050565b803563ffffffff8116811461430a57600080fd5b919050565b80356001600160401b038116811461430a57600080fd5b60006020828403121561433857600080fd5b8135613f5581614ff9565b60006020828403121561435557600080fd5b8151613f5581614ff9565b6000806040838503121561437357600080fd5b823561437e81614ff9565b9150602083013561438e81614ff9565b809150509250929050565b6000806000606084860312156143ae57600080fd5b83356143b981614ff9565b925060208401356143c981614ff9565b929592945050506040919091013590565b600080604083850312156143ed57600080fd5b82356143f881614ff9565b946020939093013593505050565b6000806020838503121561441957600080fd5b82356001600160401b0381111561442f57600080fd5b61443b8582860161414c565b90969095509350505050565b60008060006060848603121561445c57600080fd5b83356001600160401b038082111561447357600080fd5b61447f87838801614197565b9450602086013591508082111561449557600080fd5b6144a187838801614197565b935060408601359150808211156144b757600080fd5b506144c486828701614197565b9150509250925092565b600080600080600080600080610120898b0312156144eb57600080fd5b88356001600160401b038082111561450257600080fd5b61450e8c838d0161414c565b909a50985060208b013591508082111561452757600080fd5b6145338c838d0161414c565b909850965060408b013591508082111561454c57600080fd5b506145598b828c0161414c565b909550935050606089013591506145738a60808b01614253565b90509295985092959890939650565b600080600060e0848603121561459757600080fd5b83356001600160401b038111156145ad57600080fd5b8401601f810186136145be57600080fd5b803560206145ce6141b883614e70565b8083825282820191508285018a848660051b88010111156145ee57600080fd5b600095505b84861015614618576146048161430f565b8352600195909501949183019183016145f3565b50965050860135935061463291508690506040860161426b565b90509250925092565b60006020828403121561464d57600080fd5b8151613f558161500e565b60006020828403121561466a57600080fd5b5035919050565b6000806000806040858703121561468757600080fd5b84356001600160401b038082111561469e57600080fd5b6146aa88838901614212565b909650945060208701359150808211156146c357600080fd5b506146d08782880161414c565b95989497509550505050565b600080600080600060e086880312156146f457600080fd5b85356001600160401b038082111561470b57600080fd5b61471789838a01614212565b9097509550602088013591508082111561473057600080fd5b5061473d8882890161414c565b909450925061475190508760408801614253565b90509295509295909350565b60008060006060848603121561477257600080fd5b505081359360208301359350604090920135919050565b60006020828403121561479b57600080fd5b5051919050565b600080604083850312156147b557600080fd5b50508035926020909101359150565b81835260006020808501808196508560051b810191508460005b878110156148475782840389528135601e198836030181126147ff57600080fd5b870180356001600160401b0381111561481757600080fd5b80360389131561482657600080fd5b614833868289850161489b565b9a87019a95505050908401906001016147de565b5091979650505050505050565b8183526000602080850194508260005b85811015614890576001600160401b0361487d8361430f565b1687529582019590820190600101614864565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526148dc816020860160208601614f44565b601f01601f19169290920160200192915050565b63ffffffff6148fe826142f6565b16825261490d6020820161430f565b6001600160401b0380821660208501528061492a6040850161430f565b166040850152505060608101356149408161500e565b15156060830152608090810135910152565b8183823760009101908152919050565b60008251614974818460208701614f44565b9190910192915050565b6001600160a01b03851681526101006020808301829052855191830182905260009161012084019187810191845b818110156149d15783516001600160401b0316855293820193928201926001016149ac565b505082935086604086015263ffffffff865116606086015280860151925050506001600160401b0380821660808501528060408601511660a085015250506060830151151560c0830152608083015160e083015295945050505050565b6020808252825182820181905260009190848201906040850190845b81811015614a6f5783516001600160a01b031683529284019291840191600101614a4a565b50909695505050505050565b6000604082016040835280865480835260608501915087600052602092508260002060005b82811015614ac55781546001600160a01b031684529284019260019182019101614aa0565b505050838103828501528481528590820160005b86811015614b07578235614aec81614ff9565b6001600160a01b031682529183019190830190600101614ad9565b50979650505050505050565b6000610120808352614b288184018b8d6147c4565b90508281036020840152614b3d81898b614854565b90508281036040840152614b528187896147c4565b915050836060830152614b6860808301846148f0565b9998505050505050505050565b604081526000614b8960408301868861489b565b828103602084015261403b818587614854565b60e081526000614bb060e08301878961489b565b8281036020840152614bc3818688614854565b915050614bd360408301846148f0565b9695505050505050565b608081526000614bf160808301888a61489b565b8281036020840152614c0381886148c4565b90508281036040840152614c1881868861489b565b915050826060830152979650505050505050565b604081526000614c4060408301858761489b565b9050826020830152949350505050565b6020810160058310614c7257634e487b7160e01b600052602160045260246000fd5b91905290565b602081526000613f5560208301846148c4565b60208082526017908201527f43616c6c6572206973206e6f7420746865205661756c74000000000000000000604082015260600190565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b602080825260119082015270155b9cdd5c1c1bdc9d195908185cdcd95d607a1b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601d908201527f43616c6c6572206973206e6f7420746865205265676973747261746f72000000604082015260600190565b6020808252600e908201526d1499595b9d1c985b9d0818d85b1b60921b604082015260600190565b6020808252601c908201527f43616c6c6572206973206e6f7420746865205374726174656769737400000000604082015260600190565b6000808335601e19843603018112614dfb57600080fd5b8301803591506001600160401b03821115614e1557600080fd5b60200191503681900382131561419057600080fd5b60008235605e1983360301811261497457600080fd5b604051601f8201601f191681016001600160401b0381118282101715614e6857614e68614fe3565b604052919050565b60006001600160401b03821115614e8957614e89614fe3565b5060051b60200190565b600080821280156001600160ff1b0384900385131615614eb557614eb5614f8b565b600160ff1b8390038412811615614ece57614ece614f8b565b50500190565b60008219821115614ee757614ee7614f8b565b500190565b600082614f0957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614f2857614f28614f8b565b500290565b600082821015614f3f57614f3f614f8b565b500390565b60005b83811015614f5f578181015183820152602001614f47565b83811115610f365750506000910152565b6000600019821415614f8457614f84614f8b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612b0857600080fd5b8015158114612b0857600080fdfe53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac45357bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4aa264697066735822122090185a734b1de8826eb108de1e4c3e6d39974867eef4808c4768d017495ca8a464736f6c63430008070033", + "numDeployments": 11, + "solcInputHash": "972c1090c9c8a791ed54b54f1c189f16", + "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"platformAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vaultAddress\",\"type\":\"address\"}],\"internalType\":\"struct InitializableAbstractStrategy.BaseStrategyConfig\",\"name\":\"_baseConfig\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_wethAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ssvToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ssvNetwork\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_maxValidators\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_feeAccumulator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_beaconChainDepositContract\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AccountingConsensusRewards\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"noOfValidators\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingValidators\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wethSentToVault\",\"type\":\"uint256\"}],\"name\":\"AccountingFullyWithdrawnValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"validatorsDelta\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"consensusRewardsDelta\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wethToVault\",\"type\":\"uint256\"}],\"name\":\"AccountingManuallyFixed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingValidators\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wethSentToVault\",\"type\":\"uint256\"}],\"name\":\"AccountingValidatorSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ETHStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"}],\"name\":\"FuseIntervalUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousGovernor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"GovernorshipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_oldHarvesterAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_newHarvesterAddress\",\"type\":\"address\"}],\"name\":\"HarvesterAddressesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"}],\"name\":\"PTokenAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"}],\"name\":\"PTokenRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousGovernor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"PendingGovernorshipTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"RegistratorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_oldAddresses\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_newAddresses\",\"type\":\"address[]\"}],\"name\":\"RewardTokenAddressesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RewardTokenCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"SSVValidatorExitCompleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"SSVValidatorExitInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"SSVValidatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"StakeETHTallyReset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"StakeETHThresholdChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"StakingMonitorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BEACON_CHAIN_DEPOSIT_CONTRACT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FEE_ACCUMULATOR_ADDRESS\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FULL_STAKE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_VALIDATORS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_FIX_ACCOUNTING_CADENCE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SSV_NETWORK\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SSV_TOKEN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeDepositedValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"assetToPToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"checkBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collectRewardTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"consensusRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"uint256\",\"name\":\"ssvAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"depositSSV\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositedWethAccountedFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"doAccounting\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"accountingValid\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"exitSsvValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fuseIntervalEnd\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fuseIntervalStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardTokenAddresses\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"harvesterAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_rewardTokenAddresses\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_assets\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_pTokens\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFixAccountingBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"_validatorsDelta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"_consensusRewardsDelta\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"_ethToVaultAmount\",\"type\":\"uint256\"}],\"name\":\"manuallyFixAccounting\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"platformAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"publicKeys\",\"type\":\"bytes[]\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"bytes[]\",\"name\":\"sharesData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"ssvAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"registerSsvValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_assetIndex\",\"type\":\"uint256\"}],\"name\":\"removePToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"removeSsvValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resetStakeETHTally\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"rewardTokenAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"safeApproveAllTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setFeeRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fuseIntervalStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_fuseIntervalEnd\",\"type\":\"uint256\"}],\"name\":\"setFuseInterval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_harvesterAddress\",\"type\":\"address\"}],\"name\":\"setHarvesterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"}],\"name\":\"setPTokenAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setRegistrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_rewardTokenAddresses\",\"type\":\"address[]\"}],\"name\":\"setRewardTokenAddresses\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"setStakeETHThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setStakingMonitor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeETHTally\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeETHThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"depositDataRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct ValidatorStakeData[]\",\"name\":\"validators\",\"type\":\"tuple[]\"}],\"name\":\"stakeEth\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakingMonitor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"supportsAsset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newGovernor\",\"type\":\"address\"}],\"name\":\"transferGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorRegistrator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"validatorsStates\",\"outputs\":[{\"internalType\":\"enum ValidatorRegistrator.VALIDATOR_STATE\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaultAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Origin Protocol Inc\",\"details\":\"This contract handles WETH and ETH and in some operations interchanges between the two. Any WETH that is on the contract across multiple blocks (and not just transitory within a transaction) is considered an asset. Meaning deposits increase the balance of the asset and withdrawal decrease it. As opposed to all our other strategies the WETH doesn't immediately get deposited into an underlying strategy and can be present across multiple blocks waiting to be unwrapped to ETH and staked to validators. This separation of WETH and ETH is required since the rewards (reward token) is also in ETH. To simplify the accounting of WETH there is another difference in behavior compared to the other strategies. To withdraw WETH asset - exit message is posted to validators and the ETH hits this contract with multiple days delay. In order to simplify the WETH accounting upon detection of such an event the ValidatorAccountant immediately wraps ETH to WETH and sends it to the Vault. On the other hand any ETH on the contract (across multiple blocks) is there either: - as a result of already accounted for consensus rewards - as a result of not yet accounted for consensus rewards - as a results of not yet accounted for full validator withdrawals (or validator slashes) Even though the strategy assets and rewards are a very similar asset the consensus layer rewards and the execution layer rewards are considered rewards and those are dripped to the Vault over a configurable time interval and not immediately.\",\"kind\":\"dev\",\"methods\":{\"checkBalance(address)\":{\"params\":{\"_asset\":\"Address of weth asset\"},\"returns\":{\"balance\":\" Total value of (W)ETH\"}},\"constructor\":{\"params\":{\"_baseConfig\":\"Base strategy config with platformAddress (ERC-4626 Vault contract), eg sfrxETH or sDAI, and vaultAddress (OToken Vault contract), eg VaultProxy or OETHVaultProxy\",\"_beaconChainDepositContract\":\"Address of the beacon chain deposit contract\",\"_feeAccumulator\":\"Address of the fee accumulator receiving execution layer validator rewards\",\"_maxValidators\":\"Maximum number of validators that can be registered in the strategy\",\"_ssvNetwork\":\"Address of the SSV Network contract\",\"_ssvToken\":\"Address of the Erc20 SSV Token contract\",\"_wethAddress\":\"Address of the Erc20 WETH Token contract\"}},\"deposit(address,uint256)\":{\"params\":{\"_amount\":\"Amount of assets that were transferred to the strategy by the vault.\",\"_asset\":\"Address of asset to deposit. Has to be WETH.\"}},\"depositSSV(uint64[],uint256,(uint32,uint64,uint64,bool,uint256))\":{\"details\":\"A SSV cluster is defined by the SSVOwnerAddress and the set of operatorIds. uses \\\"onlyStrategist\\\" modifier so continuous front-running can't DOS our maintenance service that tries to top up SSV tokens.\",\"params\":{\"cluster\":\"The SSV cluster details including the validator count and SSV balance\",\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"ssvAmount\":\"The amount of SSV tokens to be deposited to the SSV cluster\"}},\"doAccounting()\":{\"details\":\"This function could in theory be permission-less but lets allow only the Registrator (Defender Action) to call it for now.\",\"returns\":{\"accountingValid\":\"true if accounting was successful, false if fuse is blown\"}},\"exitSsvValidator(bytes,uint64[])\":{\"params\":{\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"publicKey\":\"The public key of the validator\"}},\"getRewardTokenAddresses()\":{\"returns\":{\"_0\":\"address[] the reward token addresses.\"}},\"initialize(address[],address[],address[])\":{\"params\":{\"_assets\":\"Addresses of initial supported assets\",\"_pTokens\":\"Platform Token corresponding addresses\",\"_rewardTokenAddresses\":\"Address of reward token for platform\"}},\"manuallyFixAccounting(int256,int256,uint256)\":{\"details\":\"There is a case when a validator(s) gets slashed so much that the eth swept from the beacon chain enters the fuse area and there are no consensus rewards on the contract to \\\"dip into\\\"/use. To increase the amount of unaccounted ETH over the fuse end interval we need to reduce the amount of active deposited validators and immediately send WETH to the vault, so it doesn't interfere with further accounting.\",\"params\":{\"_consensusRewardsDelta\":\"adjust the accounted for consensus rewards up or down\",\"_ethToVaultAmount\":\"the amount of ETH that gets wrapped into WETH and sent to the Vault\",\"_validatorsDelta\":\"adjust the active validators by up to plus three or minus three\"}},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"registerSsvValidators(bytes[],uint64[],bytes[],uint256,(uint32,uint64,uint64,bool,uint256))\":{\"params\":{\"cluster\":\"The SSV cluster details including the validator count and SSV balance\",\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"publicKeys\":\"The public keys of the validators\",\"sharesData\":\"The shares data for each validator\",\"ssvAmount\":\"The amount of SSV tokens to be deposited to the SSV cluster\"}},\"removePToken(uint256)\":{\"params\":{\"_assetIndex\":\"Index of the asset to be removed\"}},\"removeSsvValidator(bytes,uint64[],(uint32,uint64,uint64,bool,uint256))\":{\"params\":{\"cluster\":\"The SSV cluster details including the validator count and SSV balance\",\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"publicKey\":\"The public key of the validator\"}},\"setHarvesterAddress(address)\":{\"params\":{\"_harvesterAddress\":\"Address of the harvester contract.\"}},\"setPTokenAddress(address,address)\":{\"params\":{\"_asset\":\"Address for the asset\",\"_pToken\":\"Address for the corresponding platform token\"}},\"setRewardTokenAddresses(address[])\":{\"params\":{\"_rewardTokenAddresses\":\"Array of reward token addresses\"}},\"stakeEth((bytes,bytes,bytes32)[])\":{\"params\":{\"validators\":\"A list of validator data needed to stake. The `ValidatorStakeData` struct contains the pubkey, signature and depositDataRoot. Only the registrator can call this function.\"}},\"supportsAsset(address)\":{\"params\":{\"_asset\":\"The address of the asset token.\"}},\"transferGovernance(address)\":{\"params\":{\"_newGovernor\":\"Address of the new Governor\"}},\"transferToken(address,uint256)\":{\"params\":{\"_amount\":\"Amount of the asset to transfer\",\"_asset\":\"Address for the asset\"}},\"withdraw(address,address,uint256)\":{\"params\":{\"_amount\":\"Amount of WETH to withdraw\",\"_asset\":\"WETH to withdraw\",\"_recipient\":\"Address to receive withdrawn assets\"}}},\"stateVariables\":{\"FEE_ACCUMULATOR_ADDRESS\":{\"details\":\"this address will receive maximal extractable value (MEV) rewards. These are rewards for arranging transactions in a way that benefits the validator.\"},\"depositedWethAccountedFor\":{\"details\":\"This contract receives WETH as the deposit asset, but unlike other strategies doesn't immediately deposit it to an underlying platform. Rather a special privilege account stakes it to the validators. For that reason calling WETH.balanceOf(this) in a deposit function can contain WETH that has just been deposited and also WETH that has previously been deposited. To keep a correct count we need to keep track of WETH that has already been accounted for. This value represents the amount of WETH balance of this contract that has already been accounted for by the deposit events. It is important to note that this variable is not concerned with WETH that is a result of full/partial withdrawal of the validators. It is strictly concerned with WETH that has been deposited and is waiting to be staked.\"}},\"title\":\"Native Staking SSV Strategy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"BEACON_CHAIN_DEPOSIT_CONTRACT()\":{\"notice\":\"The address of the beacon chain deposit contract\"},\"FEE_ACCUMULATOR_ADDRESS()\":{\"notice\":\"Fee collector address\"},\"FULL_STAKE()\":{\"notice\":\"The maximum amount of ETH that can be staked by a validator\"},\"MAX_VALIDATORS()\":{\"notice\":\"Maximum number of validators that can be registered in this strategy\"},\"MIN_FIX_ACCOUNTING_CADENCE()\":{\"notice\":\"The minimum amount of blocks that need to pass between two calls to manuallyFixAccounting\"},\"SSV_NETWORK()\":{\"notice\":\"The address of the SSV Network contract used to interface with\"},\"SSV_TOKEN()\":{\"notice\":\"SSV ERC20 token that serves as a payment for operating SSV validators\"},\"VAULT_ADDRESS()\":{\"notice\":\"Address of the OETH Vault proxy contract\"},\"WETH()\":{\"notice\":\"The address of the Wrapped ETH (WETH) token contract\"},\"activeDepositedValidators()\":{\"notice\":\"The number of validators that have 32 (!) ETH actively deposited. When a new deposit to a validator happens this number increases, when a validator exit is detected this number decreases.\"},\"assetToPToken(address)\":{\"notice\":\"asset => pToken (Platform Specific Token Address)\"},\"checkBalance(address)\":{\"notice\":\"Returns the total value of (W)ETH that is staked to the validators and WETH deposits that are still to be staked. This does not include ETH from consensus rewards sitting in this strategy or ETH from MEV rewards in the FeeAccumulator. These rewards are harvested and sent to the Dripper so will eventually be sent to the Vault as WETH.\"},\"claimGovernance()\":{\"notice\":\"Claim Governance of the contract to a new account (`newGovernor`). Can only be called by the new Governor.\"},\"collectRewardTokens()\":{\"notice\":\"Collect accumulated reward token and send to Vault.\"},\"consensusRewards()\":{\"notice\":\"Keeps track of the total consensus rewards swept from the beacon chain\"},\"deposit(address,uint256)\":{\"notice\":\"Unlike other strategies, this does not deposit assets into the underlying platform. It just checks the asset is WETH and emits the Deposit event. To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used. Will NOT revert if the strategy is paused from an accounting failure.\"},\"depositAll()\":{\"notice\":\"Unlike other strategies, this does not deposit assets into the underlying platform. It just emits the Deposit event. To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used. Will NOT revert if the strategy is paused from an accounting failure.\"},\"depositSSV(uint64[],uint256,(uint32,uint64,uint64,bool,uint256))\":{\"notice\":\"Deposits more SSV Tokens to the SSV Network contract which is used to pay the SSV Operators.\"},\"doAccounting()\":{\"notice\":\"This notion page offers a good explanation of how the accounting functions https://www.notion.so/originprotocol/Limited-simplified-native-staking-accounting-67a217c8420d40678eb943b9da0ee77d In short, after dividing by 32, if the ETH remaining on the contract falls between 0 and fuseIntervalStart, the accounting function will treat that ETH as Beacon chain consensus rewards. On the contrary, if after dividing by 32, the ETH remaining on the contract falls between fuseIntervalEnd and 32, the accounting function will treat that as a validator slashing.Perform the accounting attributing beacon chain ETH to either full or partial withdrawals. Returns true when accounting is valid and fuse isn't \\\"blown\\\". Returns false when fuse is blown.\"},\"exitSsvValidator(bytes,uint64[])\":{\"notice\":\"Exit a validator from the Beacon chain. The staked ETH will eventually swept to this native staking strategy. Only the registrator can call this function.\"},\"fuseIntervalEnd()\":{\"notice\":\"end of fuse interval\"},\"fuseIntervalStart()\":{\"notice\":\"start of fuse interval\"},\"getRewardTokenAddresses()\":{\"notice\":\"Get the reward token addresses.\"},\"governor()\":{\"notice\":\"Returns the address of the current Governor.\"},\"harvesterAddress()\":{\"notice\":\"Address of the Harvester contract allowed to collect reward tokens\"},\"initialize(address[],address[],address[])\":{\"notice\":\"Set up initial internal state including 1. approving the SSVNetwork to transfer SSV tokens from this strategy contract 2. setting the recipient of SSV validator MEV rewards to the FeeAccumulator contract.\"},\"isGovernor()\":{\"notice\":\"Returns true if the caller is the current Governor.\"},\"lastFixAccountingBlockNumber()\":{\"notice\":\"last block number manuallyFixAccounting has been called\"},\"manuallyFixAccounting(int256,int256,uint256)\":{\"notice\":\"Allow the Strategist to fix the accounting of this strategy and unpause.\"},\"platformAddress()\":{\"notice\":\"Address of the underlying platform\"},\"registerSsvValidators(bytes[],uint64[],bytes[],uint256,(uint32,uint64,uint64,bool,uint256))\":{\"notice\":\"Registers a new validator in the SSV Cluster. Only the registrator can call this function.\"},\"removePToken(uint256)\":{\"notice\":\"Remove a supported asset by passing its index. This method can only be called by the system Governor\"},\"removeSsvValidator(bytes,uint64[],(uint32,uint64,uint64,bool,uint256))\":{\"notice\":\"Remove a validator from the SSV Cluster. Make sure `exitSsvValidator` is called before and the validate has exited the Beacon chain. If removed before the validator has exited the beacon chain will result in the validator being slashed. Only the registrator can call this function.\"},\"resetStakeETHTally()\":{\"notice\":\"Reset the stakeETHTally\"},\"rewardTokenAddresses(uint256)\":{\"notice\":\"Address of the reward tokens. eg CRV, BAL, CVX, AURA\"},\"safeApproveAllTokens()\":{\"notice\":\"Approves the SSV Network contract to transfer SSV tokens for deposits\"},\"setFeeRecipient()\":{\"notice\":\"Set the FeeAccumulator as the address for SSV validators to send MEV rewards to\"},\"setFuseInterval(uint256,uint256)\":{\"notice\":\"set fuse interval values\"},\"setHarvesterAddress(address)\":{\"notice\":\"Set the Harvester contract that can collect rewards.\"},\"setPTokenAddress(address,address)\":{\"notice\":\"Provide support for asset by passing its pToken address. This method can only be called by the system Governor\"},\"setRegistrator(address)\":{\"notice\":\"Set the address of the registrator which can register, exit and remove validators\"},\"setRewardTokenAddresses(address[])\":{\"notice\":\"Set the reward token addresses. Any old addresses will be overwritten.\"},\"setStakeETHThreshold(uint256)\":{\"notice\":\"Set the amount of ETH that can be staked before staking monitor\"},\"setStakingMonitor(address)\":{\"notice\":\"Set the address of the staking monitor that is allowed to reset stakeETHTally\"},\"stakeETHTally()\":{\"notice\":\"Amount of ETH that has been staked since the `stakingMonitor` last called `resetStakeETHTally`. This can not go above `stakeETHThreshold`.\"},\"stakeETHThreshold()\":{\"notice\":\"Amount of ETH that can be staked before staking on the contract is suspended and the `stakingMonitor` needs to approve further staking by calling `resetStakeETHTally`\"},\"stakeEth((bytes,bytes,bytes32)[])\":{\"notice\":\"Stakes WETH to the node validators\"},\"stakingMonitor()\":{\"notice\":\"The account that is allowed to modify stakeETHThreshold and reset stakeETHTally\"},\"supportsAsset(address)\":{\"notice\":\"Returns bool indicating whether asset is supported by strategy.\"},\"transferGovernance(address)\":{\"notice\":\"Transfers Governance of the contract to a new account (`newGovernor`). Can only be called by the current Governor. Must be claimed for this to complete\"},\"transferToken(address,uint256)\":{\"notice\":\"Transfer token to governor. Intended for recovering tokens stuck in strategy contracts, i.e. mistaken sends.\"},\"validatorRegistrator()\":{\"notice\":\"Address of the registrator - allowed to register, exit and remove validators\"},\"validatorsStates(bytes32)\":{\"notice\":\"State of the validators keccak256(pubKey) => state\"},\"vaultAddress()\":{\"notice\":\"Address of the OToken vault\"},\"withdraw(address,address,uint256)\":{\"notice\":\"Withdraw WETH from this contract. Used only if some WETH for is lingering on the contract. That can happen when: - after mints if the strategy is the default - time between depositToStrategy and stakeEth - the deposit was not a multiple of 32 WETH - someone sent WETH directly to this contract Will NOT revert if the strategy is paused from an accounting failure.\"},\"withdrawAll()\":{\"notice\":\"transfer all WETH deposits back to the vault. This does not withdraw from the validators. That has to be done separately with the `exitSsvValidator` and `removeSsvValidator` operations. This does not withdraw any execution rewards from the FeeAccumulator or consensus rewards in this strategy. Any ETH in this strategy that was swept from a full validator withdrawal will not be withdrawn. ETH from full validator withdrawals is sent to the Vault using `doAccounting`. Will NOT revert if the strategy is paused from an accounting failure.\"}},\"notice\":\"Strategy to deploy funds into DVT validators powered by the SSV Network\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol\":\"NativeStakingSSVStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n /**\\n * @dev Emitted when the pause is triggered by `account`.\\n */\\n event Paused(address account);\\n\\n /**\\n * @dev Emitted when the pause is lifted by `account`.\\n */\\n event Unpaused(address account);\\n\\n bool private _paused;\\n\\n /**\\n * @dev Initializes the contract in unpaused state.\\n */\\n constructor() {\\n _paused = false;\\n }\\n\\n /**\\n * @dev Returns true if the contract is paused, and false otherwise.\\n */\\n function paused() public view virtual returns (bool) {\\n return _paused;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is not paused.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n modifier whenNotPaused() {\\n require(!paused(), \\\"Pausable: paused\\\");\\n _;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is paused.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n modifier whenPaused() {\\n require(paused(), \\\"Pausable: not paused\\\");\\n _;\\n }\\n\\n /**\\n * @dev Triggers stopped state.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n function _pause() internal virtual whenNotPaused {\\n _paused = true;\\n emit Paused(_msgSender());\\n }\\n\\n /**\\n * @dev Returns to normal state.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n function _unpause() internal virtual whenPaused {\\n _paused = false;\\n emit Unpaused(_msgSender());\\n }\\n}\\n\",\"keccak256\":\"0xe68ed7fb8766ed1e888291f881e36b616037f852b37d96877045319ad298ba87\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address sender,\\n address recipient,\\n uint256 amount\\n ) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x61437cb513a887a1bbad006e7b1c8b414478427d33de47c5600af3c748f108da\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n using Address for address;\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n }\\n\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n }\\n\\n /**\\n * @dev Deprecated. This function has issues similar to the ones found in\\n * {IERC20-approve}, and its usage is discouraged.\\n *\\n * Whenever possible, use {safeIncreaseAllowance} and\\n * {safeDecreaseAllowance} instead.\\n */\\n function safeApprove(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n // safeApprove should only be called when setting an initial allowance,\\n // or when resetting it to zero. To increase and decrease it, use\\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n require(\\n (value == 0) || (token.allowance(address(this), spender) == 0),\\n \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n );\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n }\\n\\n function safeIncreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n uint256 newAllowance = token.allowance(address(this), spender) + value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n function safeDecreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n unchecked {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n uint256 newAllowance = oldAllowance - value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n // the target address contains contract code and also asserts for success in the low-level call.\\n\\n bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n if (returndata.length > 0) {\\n // Return data is optional\\n require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xc3d946432c0ddbb1f846a0d3985be71299df331b91d06732152117f62f0be2b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n assembly {\\n size := extcodesize(account)\\n }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x51b758a8815ecc9596c66c37d56b1d33883a444631a3f916b9fe65cb863ef7c4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a >= b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a / b + (a % b == 0 ? 0 : 1);\\n }\\n}\\n\",\"keccak256\":\"0xfaad496c1c944b6259b7dc70b4865eb1775d6402bc0c81b38a0b24d9f525ae37\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n// CAUTION\\n// This version of SafeMath should only be used with Solidity 0.8 or later,\\n// because it relies on the compiler's built in overflow checks.\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations.\\n *\\n * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler\\n * now has built in overflow checking.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a + b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a * b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator.\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa2f576be637946f767aa56601c26d717f48a0aff44f82e46f13807eea1009a21\",\"license\":\"MIT\"},\"contracts/governance/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Base for contracts that are managed by the Origin Protocol's Governor.\\n * @dev Copy of the openzeppelin Ownable.sol contract with nomenclature change\\n * from owner to governor and renounce methods removed. Does not use\\n * Context.sol like Ownable.sol does for simplification.\\n * @author Origin Protocol Inc\\n */\\ncontract Governable {\\n // Storage position of the owner and pendingOwner of the contract\\n // keccak256(\\\"OUSD.governor\\\");\\n bytes32 private constant governorPosition =\\n 0x7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a;\\n\\n // keccak256(\\\"OUSD.pending.governor\\\");\\n bytes32 private constant pendingGovernorPosition =\\n 0x44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db;\\n\\n // keccak256(\\\"OUSD.reentry.status\\\");\\n bytes32 private constant reentryStatusPosition =\\n 0x53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac4535;\\n\\n // See OpenZeppelin ReentrancyGuard implementation\\n uint256 constant _NOT_ENTERED = 1;\\n uint256 constant _ENTERED = 2;\\n\\n event PendingGovernorshipTransfer(\\n address indexed previousGovernor,\\n address indexed newGovernor\\n );\\n\\n event GovernorshipTransferred(\\n address indexed previousGovernor,\\n address indexed newGovernor\\n );\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial Governor.\\n */\\n constructor() {\\n _setGovernor(msg.sender);\\n emit GovernorshipTransferred(address(0), _governor());\\n }\\n\\n /**\\n * @notice Returns the address of the current Governor.\\n */\\n function governor() public view returns (address) {\\n return _governor();\\n }\\n\\n /**\\n * @dev Returns the address of the current Governor.\\n */\\n function _governor() internal view returns (address governorOut) {\\n bytes32 position = governorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n governorOut := sload(position)\\n }\\n }\\n\\n /**\\n * @dev Returns the address of the pending Governor.\\n */\\n function _pendingGovernor()\\n internal\\n view\\n returns (address pendingGovernor)\\n {\\n bytes32 position = pendingGovernorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n pendingGovernor := sload(position)\\n }\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the Governor.\\n */\\n modifier onlyGovernor() {\\n require(isGovernor(), \\\"Caller is not the Governor\\\");\\n _;\\n }\\n\\n /**\\n * @notice Returns true if the caller is the current Governor.\\n */\\n function isGovernor() public view returns (bool) {\\n return msg.sender == _governor();\\n }\\n\\n function _setGovernor(address newGovernor) internal {\\n bytes32 position = governorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newGovernor)\\n }\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and make it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n bytes32 position = reentryStatusPosition;\\n uint256 _reentry_status;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n _reentry_status := sload(position)\\n }\\n\\n // On the first call to nonReentrant, _notEntered will be true\\n require(_reentry_status != _ENTERED, \\\"Reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, _ENTERED)\\n }\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, _NOT_ENTERED)\\n }\\n }\\n\\n function _setPendingGovernor(address newGovernor) internal {\\n bytes32 position = pendingGovernorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newGovernor)\\n }\\n }\\n\\n /**\\n * @notice Transfers Governance of the contract to a new account (`newGovernor`).\\n * Can only be called by the current Governor. Must be claimed for this to complete\\n * @param _newGovernor Address of the new Governor\\n */\\n function transferGovernance(address _newGovernor) external onlyGovernor {\\n _setPendingGovernor(_newGovernor);\\n emit PendingGovernorshipTransfer(_governor(), _newGovernor);\\n }\\n\\n /**\\n * @notice Claim Governance of the contract to a new account (`newGovernor`).\\n * Can only be called by the new Governor.\\n */\\n function claimGovernance() external {\\n require(\\n msg.sender == _pendingGovernor(),\\n \\\"Only the pending Governor can complete the claim\\\"\\n );\\n _changeGovernor(msg.sender);\\n }\\n\\n /**\\n * @dev Change Governance of the contract to a new account (`newGovernor`).\\n * @param _newGovernor Address of the new Governor\\n */\\n function _changeGovernor(address _newGovernor) internal {\\n require(_newGovernor != address(0), \\\"New Governor is address(0)\\\");\\n emit GovernorshipTransferred(_governor(), _newGovernor);\\n _setGovernor(_newGovernor);\\n }\\n}\\n\",\"keccak256\":\"0xb7133d6ce7a9e673ff79fcedb3fd41ae6e58e251f94915bb65731abe524270b4\",\"license\":\"MIT\"},\"contracts/interfaces/IBasicToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IBasicToken {\\n function symbol() external view returns (string memory);\\n\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0xa562062698aa12572123b36dfd2072f1a39e44fed2031cc19c2c9fd522f96ec2\",\"license\":\"MIT\"},\"contracts/interfaces/IDepositContract.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IDepositContract {\\n /// @notice A processed deposit event.\\n event DepositEvent(\\n bytes pubkey,\\n bytes withdrawal_credentials,\\n bytes amount,\\n bytes signature,\\n bytes index\\n );\\n\\n /// @notice Submit a Phase 0 DepositData object.\\n /// @param pubkey A BLS12-381 public key.\\n /// @param withdrawal_credentials Commitment to a public key for withdrawals.\\n /// @param signature A BLS12-381 signature.\\n /// @param deposit_data_root The SHA-256 hash of the SSZ-encoded DepositData object.\\n /// Used as a protection against malformed input.\\n function deposit(\\n bytes calldata pubkey,\\n bytes calldata withdrawal_credentials,\\n bytes calldata signature,\\n bytes32 deposit_data_root\\n ) external payable;\\n\\n /// @notice Query the current deposit root hash.\\n /// @return The deposit root hash.\\n function get_deposit_root() external view returns (bytes32);\\n\\n /// @notice Query the current deposit count.\\n /// @return The deposit count encoded as a little endian 64-bit number.\\n function get_deposit_count() external view returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x598f90bdbc854250bbd5991426bfb43367207e64e33109c41aa8b54323fd8d8e\",\"license\":\"MIT\"},\"contracts/interfaces/ISSVNetwork.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nstruct Cluster {\\n uint32 validatorCount;\\n uint64 networkFeeIndex;\\n uint64 index;\\n bool active;\\n uint256 balance;\\n}\\n\\ninterface ISSVNetwork {\\n /**********/\\n /* Errors */\\n /**********/\\n\\n error CallerNotOwner(); // 0x5cd83192\\n error CallerNotWhitelisted(); // 0x8c6e5d71\\n error FeeTooLow(); // 0x732f9413\\n error FeeExceedsIncreaseLimit(); // 0x958065d9\\n error NoFeeDeclared(); // 0x1d226c30\\n error ApprovalNotWithinTimeframe(); // 0x97e4b518\\n error OperatorDoesNotExist(); // 0x961e3e8c\\n error InsufficientBalance(); // 0xf4d678b8\\n error ValidatorDoesNotExist(); // 0xe51315d2\\n error ClusterNotLiquidatable(); // 0x60300a8d\\n error InvalidPublicKeyLength(); // 0x637297a4\\n error InvalidOperatorIdsLength(); // 0x38186224\\n error ClusterAlreadyEnabled(); // 0x3babafd2\\n error ClusterIsLiquidated(); // 0x95a0cf33\\n error ClusterDoesNotExists(); // 0x185e2b16\\n error IncorrectClusterState(); // 0x12e04c87\\n error UnsortedOperatorsList(); // 0xdd020e25\\n error NewBlockPeriodIsBelowMinimum(); // 0x6e6c9cac\\n error ExceedValidatorLimit(); // 0x6df5ab76\\n error TokenTransferFailed(); // 0x045c4b02\\n error SameFeeChangeNotAllowed(); // 0xc81272f8\\n error FeeIncreaseNotAllowed(); // 0x410a2b6c\\n error NotAuthorized(); // 0xea8e4eb5\\n error OperatorsListNotUnique(); // 0xa5a1ff5d\\n error OperatorAlreadyExists(); // 0x289c9494\\n error TargetModuleDoesNotExist(); // 0x8f9195fb\\n error MaxValueExceeded(); // 0x91aa3017\\n error FeeTooHigh(); // 0xcd4e6167\\n error PublicKeysSharesLengthMismatch(); // 0x9ad467b8\\n error IncorrectValidatorStateWithData(bytes publicKey); // 0x89307938\\n error ValidatorAlreadyExistsWithData(bytes publicKey); // 0x388e7999\\n error EmptyPublicKeysList(); // df83e679\\n\\n // legacy errors\\n error ValidatorAlreadyExists(); // 0x8d09a73e\\n error IncorrectValidatorState(); // 0x2feda3c1\\n\\n event AdminChanged(address previousAdmin, address newAdmin);\\n event BeaconUpgraded(address indexed beacon);\\n event ClusterDeposited(\\n address indexed owner,\\n uint64[] operatorIds,\\n uint256 value,\\n Cluster cluster\\n );\\n event ClusterLiquidated(\\n address indexed owner,\\n uint64[] operatorIds,\\n Cluster cluster\\n );\\n event ClusterReactivated(\\n address indexed owner,\\n uint64[] operatorIds,\\n Cluster cluster\\n );\\n event ClusterWithdrawn(\\n address indexed owner,\\n uint64[] operatorIds,\\n uint256 value,\\n Cluster cluster\\n );\\n event DeclareOperatorFeePeriodUpdated(uint64 value);\\n event ExecuteOperatorFeePeriodUpdated(uint64 value);\\n event FeeRecipientAddressUpdated(\\n address indexed owner,\\n address recipientAddress\\n );\\n event Initialized(uint8 version);\\n event LiquidationThresholdPeriodUpdated(uint64 value);\\n event MinimumLiquidationCollateralUpdated(uint256 value);\\n event NetworkEarningsWithdrawn(uint256 value, address recipient);\\n event NetworkFeeUpdated(uint256 oldFee, uint256 newFee);\\n event OperatorAdded(\\n uint64 indexed operatorId,\\n address indexed owner,\\n bytes publicKey,\\n uint256 fee\\n );\\n event OperatorFeeDeclarationCancelled(\\n address indexed owner,\\n uint64 indexed operatorId\\n );\\n event OperatorFeeDeclared(\\n address indexed owner,\\n uint64 indexed operatorId,\\n uint256 blockNumber,\\n uint256 fee\\n );\\n event OperatorFeeExecuted(\\n address indexed owner,\\n uint64 indexed operatorId,\\n uint256 blockNumber,\\n uint256 fee\\n );\\n event OperatorFeeIncreaseLimitUpdated(uint64 value);\\n event OperatorMaximumFeeUpdated(uint64 maxFee);\\n event OperatorRemoved(uint64 indexed operatorId);\\n event OperatorWhitelistUpdated(\\n uint64 indexed operatorId,\\n address whitelisted\\n );\\n event OperatorWithdrawn(\\n address indexed owner,\\n uint64 indexed operatorId,\\n uint256 value\\n );\\n event OwnershipTransferStarted(\\n address indexed previousOwner,\\n address indexed newOwner\\n );\\n event OwnershipTransferred(\\n address indexed previousOwner,\\n address indexed newOwner\\n );\\n event Upgraded(address indexed implementation);\\n event ValidatorAdded(\\n address indexed owner,\\n uint64[] operatorIds,\\n bytes publicKey,\\n bytes shares,\\n Cluster cluster\\n );\\n event ValidatorExited(\\n address indexed owner,\\n uint64[] operatorIds,\\n bytes publicKey\\n );\\n event ValidatorRemoved(\\n address indexed owner,\\n uint64[] operatorIds,\\n bytes publicKey,\\n Cluster cluster\\n );\\n\\n fallback() external;\\n\\n function acceptOwnership() external;\\n\\n function cancelDeclaredOperatorFee(uint64 operatorId) external;\\n\\n function declareOperatorFee(uint64 operatorId, uint256 fee) external;\\n\\n function deposit(\\n address clusterOwner,\\n uint64[] memory operatorIds,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function executeOperatorFee(uint64 operatorId) external;\\n\\n function exitValidator(bytes memory publicKey, uint64[] memory operatorIds)\\n external;\\n\\n function bulkExitValidator(\\n bytes[] calldata publicKeys,\\n uint64[] calldata operatorIds\\n ) external;\\n\\n function getVersion() external pure returns (string memory version);\\n\\n function initialize(\\n address token_,\\n address ssvOperators_,\\n address ssvClusters_,\\n address ssvDAO_,\\n address ssvViews_,\\n uint64 minimumBlocksBeforeLiquidation_,\\n uint256 minimumLiquidationCollateral_,\\n uint32 validatorsPerOperatorLimit_,\\n uint64 declareOperatorFeePeriod_,\\n uint64 executeOperatorFeePeriod_,\\n uint64 operatorMaxFeeIncrease_\\n ) external;\\n\\n function liquidate(\\n address clusterOwner,\\n uint64[] memory operatorIds,\\n Cluster memory cluster\\n ) external;\\n\\n function owner() external view returns (address);\\n\\n function pendingOwner() external view returns (address);\\n\\n function proxiableUUID() external view returns (bytes32);\\n\\n function reactivate(\\n uint64[] memory operatorIds,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function reduceOperatorFee(uint64 operatorId, uint256 fee) external;\\n\\n function registerOperator(bytes memory publicKey, uint256 fee)\\n external\\n returns (uint64 id);\\n\\n function registerValidator(\\n bytes memory publicKey,\\n uint64[] memory operatorIds,\\n bytes memory sharesData,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function bulkRegisterValidator(\\n bytes[] calldata publicKeys,\\n uint64[] calldata operatorIds,\\n bytes[] calldata sharesData,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function removeOperator(uint64 operatorId) external;\\n\\n function removeValidator(\\n bytes memory publicKey,\\n uint64[] memory operatorIds,\\n Cluster memory cluster\\n ) external;\\n\\n function bulkRemoveValidator(\\n bytes[] calldata publicKeys,\\n uint64[] calldata operatorIds,\\n Cluster memory cluster\\n ) external;\\n\\n function renounceOwnership() external;\\n\\n function setFeeRecipientAddress(address recipientAddress) external;\\n\\n function setOperatorWhitelist(uint64 operatorId, address whitelisted)\\n external;\\n\\n function transferOwnership(address newOwner) external;\\n\\n function updateDeclareOperatorFeePeriod(uint64 timeInSeconds) external;\\n\\n function updateExecuteOperatorFeePeriod(uint64 timeInSeconds) external;\\n\\n function updateLiquidationThresholdPeriod(uint64 blocks) external;\\n\\n function updateMaximumOperatorFee(uint64 maxFee) external;\\n\\n function updateMinimumLiquidationCollateral(uint256 amount) external;\\n\\n function updateModule(uint8 moduleId, address moduleAddress) external;\\n\\n function updateNetworkFee(uint256 fee) external;\\n\\n function updateOperatorFeeIncreaseLimit(uint64 percentage) external;\\n\\n function upgradeTo(address newImplementation) external;\\n\\n function upgradeToAndCall(address newImplementation, bytes memory data)\\n external\\n payable;\\n\\n function withdraw(\\n uint64[] memory operatorIds,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function withdrawAllOperatorEarnings(uint64 operatorId) external;\\n\\n function withdrawNetworkEarnings(uint256 amount) external;\\n\\n function withdrawOperatorEarnings(uint64 operatorId, uint256 amount)\\n external;\\n}\\n\",\"keccak256\":\"0xbd86cb74702aebc5b53c8fc738a2e3ad1b410583460617be84b22ce922af12a7\",\"license\":\"MIT\"},\"contracts/interfaces/IStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Platform interface to integrate with lending platform like Compound, AAVE etc.\\n */\\ninterface IStrategy {\\n /**\\n * @dev Deposit the given asset to platform\\n * @param _asset asset address\\n * @param _amount Amount to deposit\\n */\\n function deposit(address _asset, uint256 _amount) external;\\n\\n /**\\n * @dev Deposit the entire balance of all supported assets in the Strategy\\n * to the platform\\n */\\n function depositAll() external;\\n\\n /**\\n * @dev Withdraw given asset from Lending platform\\n */\\n function withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) external;\\n\\n /**\\n * @dev Liquidate all assets in strategy and return them to Vault.\\n */\\n function withdrawAll() external;\\n\\n /**\\n * @dev Returns the current balance of the given asset.\\n */\\n function checkBalance(address _asset)\\n external\\n view\\n returns (uint256 balance);\\n\\n /**\\n * @dev Returns bool indicating whether strategy supports asset.\\n */\\n function supportsAsset(address _asset) external view returns (bool);\\n\\n /**\\n * @dev Collect reward tokens from the Strategy.\\n */\\n function collectRewardTokens() external;\\n\\n /**\\n * @dev The address array of the reward tokens for the Strategy.\\n */\\n function getRewardTokenAddresses() external view returns (address[] memory);\\n}\\n\",\"keccak256\":\"0xb291e409a9b95527f9ed19cd6bff8eeb9921a21c1f5194a48c0bb9ce6613959a\",\"license\":\"MIT\"},\"contracts/interfaces/IVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { VaultStorage } from \\\"../vault/VaultStorage.sol\\\";\\n\\ninterface IVault {\\n event AssetSupported(address _asset);\\n event AssetDefaultStrategyUpdated(address _asset, address _strategy);\\n event AssetAllocated(address _asset, address _strategy, uint256 _amount);\\n event StrategyApproved(address _addr);\\n event StrategyRemoved(address _addr);\\n event Mint(address _addr, uint256 _value);\\n event Redeem(address _addr, uint256 _value);\\n event CapitalPaused();\\n event CapitalUnpaused();\\n event RebasePaused();\\n event RebaseUnpaused();\\n event VaultBufferUpdated(uint256 _vaultBuffer);\\n event RedeemFeeUpdated(uint256 _redeemFeeBps);\\n event PriceProviderUpdated(address _priceProvider);\\n event AllocateThresholdUpdated(uint256 _threshold);\\n event RebaseThresholdUpdated(uint256 _threshold);\\n event StrategistUpdated(address _address);\\n event MaxSupplyDiffChanged(uint256 maxSupplyDiff);\\n event YieldDistribution(address _to, uint256 _yield, uint256 _fee);\\n event TrusteeFeeBpsChanged(uint256 _basis);\\n event TrusteeAddressChanged(address _address);\\n event SwapperChanged(address _address);\\n event SwapAllowedUndervalueChanged(uint256 _basis);\\n event SwapSlippageChanged(address _asset, uint256 _basis);\\n event Swapped(\\n address indexed _fromAsset,\\n address indexed _toAsset,\\n uint256 _fromAssetAmount,\\n uint256 _toAssetAmount\\n );\\n event StrategyAddedToMintWhitelist(address indexed strategy);\\n event StrategyRemovedFromMintWhitelist(address indexed strategy);\\n event DripperChanged(address indexed _dripper);\\n event WithdrawalRequested(\\n address indexed _withdrawer,\\n uint256 indexed _requestId,\\n uint256 _amount,\\n uint256 _queued\\n );\\n event WithdrawalClaimed(\\n address indexed _withdrawer,\\n uint256 indexed _requestId,\\n uint256 _amount\\n );\\n event WithdrawalClaimable(uint256 _claimable, uint256 _newClaimable);\\n\\n // Governable.sol\\n function transferGovernance(address _newGovernor) external;\\n\\n function claimGovernance() external;\\n\\n function governor() external view returns (address);\\n\\n // VaultAdmin.sol\\n function setPriceProvider(address _priceProvider) external;\\n\\n function priceProvider() external view returns (address);\\n\\n function setRedeemFeeBps(uint256 _redeemFeeBps) external;\\n\\n function redeemFeeBps() external view returns (uint256);\\n\\n function setVaultBuffer(uint256 _vaultBuffer) external;\\n\\n function vaultBuffer() external view returns (uint256);\\n\\n function setAutoAllocateThreshold(uint256 _threshold) external;\\n\\n function autoAllocateThreshold() external view returns (uint256);\\n\\n function setRebaseThreshold(uint256 _threshold) external;\\n\\n function rebaseThreshold() external view returns (uint256);\\n\\n function setStrategistAddr(address _address) external;\\n\\n function strategistAddr() external view returns (address);\\n\\n function setMaxSupplyDiff(uint256 _maxSupplyDiff) external;\\n\\n function maxSupplyDiff() external view returns (uint256);\\n\\n function setTrusteeAddress(address _address) external;\\n\\n function trusteeAddress() external view returns (address);\\n\\n function setTrusteeFeeBps(uint256 _basis) external;\\n\\n function trusteeFeeBps() external view returns (uint256);\\n\\n function ousdMetaStrategy() external view returns (address);\\n\\n function setSwapper(address _swapperAddr) external;\\n\\n function setSwapAllowedUndervalue(uint16 _percentageBps) external;\\n\\n function setOracleSlippage(address _asset, uint16 _allowedOracleSlippageBps)\\n external;\\n\\n function supportAsset(address _asset, uint8 _supportsAsset) external;\\n\\n function approveStrategy(address _addr) external;\\n\\n function removeStrategy(address _addr) external;\\n\\n function setAssetDefaultStrategy(address _asset, address _strategy)\\n external;\\n\\n function assetDefaultStrategies(address _asset)\\n external\\n view\\n returns (address);\\n\\n function pauseRebase() external;\\n\\n function unpauseRebase() external;\\n\\n function rebasePaused() external view returns (bool);\\n\\n function pauseCapital() external;\\n\\n function unpauseCapital() external;\\n\\n function capitalPaused() external view returns (bool);\\n\\n function transferToken(address _asset, uint256 _amount) external;\\n\\n function priceUnitMint(address asset) external view returns (uint256);\\n\\n function priceUnitRedeem(address asset) external view returns (uint256);\\n\\n function withdrawAllFromStrategy(address _strategyAddr) external;\\n\\n function withdrawAllFromStrategies() external;\\n\\n function withdrawFromStrategy(\\n address _strategyFromAddress,\\n address[] calldata _assets,\\n uint256[] calldata _amounts\\n ) external;\\n\\n function depositToStrategy(\\n address _strategyToAddress,\\n address[] calldata _assets,\\n uint256[] calldata _amounts\\n ) external;\\n\\n // VaultCore.sol\\n function mint(\\n address _asset,\\n uint256 _amount,\\n uint256 _minimumOusdAmount\\n ) external;\\n\\n function mintForStrategy(uint256 _amount) external;\\n\\n function mintToForStrategy(address receiver, uint256 _amount) external;\\n\\n function redeem(uint256 _amount, uint256 _minimumUnitAmount) external;\\n\\n function burnForStrategy(uint256 _amount) external;\\n\\n function burnFromForStrategy(address user, uint256 _amount) external;\\n\\n function redeemAll(uint256 _minimumUnitAmount) external;\\n\\n function allocate() external;\\n\\n function rebase() external;\\n\\n function swapCollateral(\\n address fromAsset,\\n address toAsset,\\n uint256 fromAssetAmount,\\n uint256 minToAssetAmount,\\n bytes calldata data\\n ) external returns (uint256 toAssetAmount);\\n\\n function totalValue() external view returns (uint256 value);\\n\\n function checkBalance(address _asset) external view returns (uint256);\\n\\n function calculateRedeemOutputs(uint256 _amount)\\n external\\n view\\n returns (uint256[] memory);\\n\\n function getAssetCount() external view returns (uint256);\\n\\n function getAssetConfig(address _asset)\\n external\\n view\\n returns (VaultStorage.Asset memory config);\\n\\n function getAllAssets() external view returns (address[] memory);\\n\\n function getStrategyCount() external view returns (uint256);\\n\\n function swapper() external view returns (address);\\n\\n function allowedSwapUndervalue() external view returns (uint256);\\n\\n function getAllStrategies() external view returns (address[] memory);\\n\\n function isSupportedAsset(address _asset) external view returns (bool);\\n\\n function netOusdMintForStrategyThreshold() external view returns (uint256);\\n\\n function setOusdMetaStrategy(address _ousdMetaStrategy) external;\\n\\n function setNetOusdMintForStrategyThreshold(uint256 _threshold) external;\\n\\n function netOusdMintedForStrategy() external view returns (int256);\\n\\n function setDripper(address _dripper) external;\\n\\n function weth() external view returns (address);\\n\\n function cacheWETHAssetIndex() external;\\n\\n function wethAssetIndex() external view returns (uint256);\\n\\n function initialize(address, address) external;\\n\\n function setAdminImpl(address) external;\\n\\n function removeAsset(address _asset) external;\\n\\n function addStrategyToMintWhitelist(address strategyAddr) external;\\n\\n function removeStrategyFromMintWhitelist(address strategyAddr) external;\\n\\n function isMintWhitelistedStrategy(address strategyAddr)\\n external\\n view\\n returns (bool);\\n\\n // These are OETH specific functions\\n function addWithdrawalQueueLiquidity() external;\\n\\n function requestWithdrawal(uint256 _amount)\\n external\\n returns (uint256 requestId, uint256 queued);\\n\\n function claimWithdrawal(uint256 requestId)\\n external\\n returns (uint256 amount);\\n\\n function claimWithdrawals(uint256[] memory requestIds)\\n external\\n returns (uint256[] memory amounts, uint256 totalAmount);\\n\\n function withdrawalQueueMetadata()\\n external\\n view\\n returns (VaultStorage.WithdrawalQueueMetadata memory);\\n\\n function withdrawalRequests(uint256 requestId)\\n external\\n view\\n returns (VaultStorage.WithdrawalRequest memory);\\n}\\n\",\"keccak256\":\"0xc0824c024eaa3ec7c9b0508848d2dd60e13250b812a39c5ee2a795fdb1817b65\",\"license\":\"MIT\"},\"contracts/interfaces/IWETH9.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IWETH9 {\\n event Approval(address indexed src, address indexed guy, uint256 wad);\\n event Deposit(address indexed dst, uint256 wad);\\n event Transfer(address indexed src, address indexed dst, uint256 wad);\\n event Withdrawal(address indexed src, uint256 wad);\\n\\n function allowance(address, address) external view returns (uint256);\\n\\n function approve(address guy, uint256 wad) external returns (bool);\\n\\n function balanceOf(address) external view returns (uint256);\\n\\n function decimals() external view returns (uint8);\\n\\n function deposit() external payable;\\n\\n function name() external view returns (string memory);\\n\\n function symbol() external view returns (string memory);\\n\\n function totalSupply() external view returns (uint256);\\n\\n function transfer(address dst, uint256 wad) external returns (bool);\\n\\n function transferFrom(\\n address src,\\n address dst,\\n uint256 wad\\n ) external returns (bool);\\n\\n function withdraw(uint256 wad) external;\\n}\\n\",\"keccak256\":\"0x05b7dce6c24d3cd4e48b5c6346d86e5e40ecc3291bcdf3f3ef091c98fc826519\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/FeeAccumulator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/**\\n * @title Fee Accumulator for Native Staking SSV Strategy\\n * @notice Receives execution rewards which includes tx fees and\\n * MEV rewards like tx priority and tx ordering.\\n * It does NOT include swept ETH from beacon chain consensus rewards or full validator withdrawals.\\n * @author Origin Protocol Inc\\n */\\ncontract FeeAccumulator {\\n /// @notice The address of the Native Staking Strategy\\n address public immutable STRATEGY;\\n\\n event ExecutionRewardsCollected(address indexed strategy, uint256 amount);\\n\\n /**\\n * @param _strategy Address of the Native Staking Strategy\\n */\\n constructor(address _strategy) {\\n STRATEGY = _strategy;\\n }\\n\\n /**\\n * @notice sends all ETH in this FeeAccumulator contract to the Native Staking Strategy.\\n * @return eth The amount of execution rewards that were sent to the Native Staking Strategy\\n */\\n function collect() external returns (uint256 eth) {\\n require(msg.sender == STRATEGY, \\\"Caller is not the Strategy\\\");\\n\\n eth = address(this).balance;\\n if (eth > 0) {\\n // Send the ETH to the Native Staking Strategy\\n Address.sendValue(payable(STRATEGY), eth);\\n\\n emit ExecutionRewardsCollected(STRATEGY, eth);\\n }\\n }\\n\\n /**\\n * @dev Accept ETH\\n */\\n receive() external payable {}\\n}\\n\",\"keccak256\":\"0x55ac966612d9e9d48678162b4ddc7aef53807644697206470def52887782d7f4\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { SafeERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\n\\nimport { InitializableAbstractStrategy } from \\\"../../utils/InitializableAbstractStrategy.sol\\\";\\nimport { IWETH9 } from \\\"../../interfaces/IWETH9.sol\\\";\\nimport { FeeAccumulator } from \\\"./FeeAccumulator.sol\\\";\\nimport { ValidatorAccountant } from \\\"./ValidatorAccountant.sol\\\";\\nimport { ISSVNetwork } from \\\"../../interfaces/ISSVNetwork.sol\\\";\\n\\nstruct ValidatorStakeData {\\n bytes pubkey;\\n bytes signature;\\n bytes32 depositDataRoot;\\n}\\n\\n/// @title Native Staking SSV Strategy\\n/// @notice Strategy to deploy funds into DVT validators powered by the SSV Network\\n/// @author Origin Protocol Inc\\n/// @dev This contract handles WETH and ETH and in some operations interchanges between the two. Any WETH that\\n/// is on the contract across multiple blocks (and not just transitory within a transaction) is considered an\\n/// asset. Meaning deposits increase the balance of the asset and withdrawal decrease it. As opposed to all\\n/// our other strategies the WETH doesn't immediately get deposited into an underlying strategy and can be present\\n/// across multiple blocks waiting to be unwrapped to ETH and staked to validators. This separation of WETH and ETH is\\n/// required since the rewards (reward token) is also in ETH.\\n///\\n/// To simplify the accounting of WETH there is another difference in behavior compared to the other strategies.\\n/// To withdraw WETH asset - exit message is posted to validators and the ETH hits this contract with multiple days\\n/// delay. In order to simplify the WETH accounting upon detection of such an event the ValidatorAccountant\\n/// immediately wraps ETH to WETH and sends it to the Vault.\\n///\\n/// On the other hand any ETH on the contract (across multiple blocks) is there either:\\n/// - as a result of already accounted for consensus rewards\\n/// - as a result of not yet accounted for consensus rewards\\n/// - as a results of not yet accounted for full validator withdrawals (or validator slashes)\\n///\\n/// Even though the strategy assets and rewards are a very similar asset the consensus layer rewards and the\\n/// execution layer rewards are considered rewards and those are dripped to the Vault over a configurable time\\n/// interval and not immediately.\\ncontract NativeStakingSSVStrategy is\\n ValidatorAccountant,\\n InitializableAbstractStrategy\\n{\\n using SafeERC20 for IERC20;\\n\\n /// @notice SSV ERC20 token that serves as a payment for operating SSV validators\\n address public immutable SSV_TOKEN;\\n /// @notice Fee collector address\\n /// @dev this address will receive maximal extractable value (MEV) rewards. These are\\n /// rewards for arranging transactions in a way that benefits the validator.\\n address payable public immutable FEE_ACCUMULATOR_ADDRESS;\\n\\n /// @dev This contract receives WETH as the deposit asset, but unlike other strategies doesn't immediately\\n /// deposit it to an underlying platform. Rather a special privilege account stakes it to the validators.\\n /// For that reason calling WETH.balanceOf(this) in a deposit function can contain WETH that has just been\\n /// deposited and also WETH that has previously been deposited. To keep a correct count we need to keep track\\n /// of WETH that has already been accounted for.\\n /// This value represents the amount of WETH balance of this contract that has already been accounted for by the\\n /// deposit events.\\n /// It is important to note that this variable is not concerned with WETH that is a result of full/partial\\n /// withdrawal of the validators. It is strictly concerned with WETH that has been deposited and is waiting to\\n /// be staked.\\n uint256 public depositedWethAccountedFor;\\n\\n // For future use\\n uint256[49] private __gap;\\n\\n /// @param _baseConfig Base strategy config with platformAddress (ERC-4626 Vault contract), eg sfrxETH or sDAI,\\n /// and vaultAddress (OToken Vault contract), eg VaultProxy or OETHVaultProxy\\n /// @param _wethAddress Address of the Erc20 WETH Token contract\\n /// @param _ssvToken Address of the Erc20 SSV Token contract\\n /// @param _ssvNetwork Address of the SSV Network contract\\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\\n /// @param _feeAccumulator Address of the fee accumulator receiving execution layer validator rewards\\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\\n constructor(\\n BaseStrategyConfig memory _baseConfig,\\n address _wethAddress,\\n address _ssvToken,\\n address _ssvNetwork,\\n uint256 _maxValidators,\\n address _feeAccumulator,\\n address _beaconChainDepositContract\\n )\\n InitializableAbstractStrategy(_baseConfig)\\n ValidatorAccountant(\\n _wethAddress,\\n _baseConfig.vaultAddress,\\n _beaconChainDepositContract,\\n _ssvNetwork,\\n _maxValidators\\n )\\n {\\n SSV_TOKEN = _ssvToken;\\n FEE_ACCUMULATOR_ADDRESS = payable(_feeAccumulator);\\n }\\n\\n /// @notice Set up initial internal state including\\n /// 1. approving the SSVNetwork to transfer SSV tokens from this strategy contract\\n /// 2. setting the recipient of SSV validator MEV rewards to the FeeAccumulator contract.\\n /// @param _rewardTokenAddresses Address of reward token for platform\\n /// @param _assets Addresses of initial supported assets\\n /// @param _pTokens Platform Token corresponding addresses\\n function initialize(\\n address[] memory _rewardTokenAddresses,\\n address[] memory _assets,\\n address[] memory _pTokens\\n ) external onlyGovernor initializer {\\n InitializableAbstractStrategy._initialize(\\n _rewardTokenAddresses,\\n _assets,\\n _pTokens\\n );\\n\\n // Approves the SSV Network contract to transfer SSV tokens for deposits\\n IERC20(SSV_TOKEN).approve(SSV_NETWORK, type(uint256).max);\\n\\n // Set the FeeAccumulator as the address for SSV validators to send MEV rewards to\\n ISSVNetwork(SSV_NETWORK).setFeeRecipientAddress(\\n FEE_ACCUMULATOR_ADDRESS\\n );\\n }\\n\\n /// @notice Unlike other strategies, this does not deposit assets into the underlying platform.\\n /// It just checks the asset is WETH and emits the Deposit event.\\n /// To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used.\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n /// @param _asset Address of asset to deposit. Has to be WETH.\\n /// @param _amount Amount of assets that were transferred to the strategy by the vault.\\n function deposit(address _asset, uint256 _amount)\\n external\\n override\\n onlyVault\\n nonReentrant\\n {\\n require(_asset == WETH, \\\"Unsupported asset\\\");\\n depositedWethAccountedFor += _amount;\\n _deposit(_asset, _amount);\\n }\\n\\n /// @dev Deposit WETH to this strategy so it can later be staked into a validator.\\n /// @param _asset Address of WETH\\n /// @param _amount Amount of WETH to deposit\\n function _deposit(address _asset, uint256 _amount) internal {\\n require(_amount > 0, \\\"Must deposit something\\\");\\n /*\\n * We could do a check here that would revert when \\\"_amount % 32 ether != 0\\\". With the idea of\\n * not allowing deposits that will result in WETH sitting on the strategy after all the possible batches\\n * of 32ETH have been staked.\\n * But someone could mess with our strategy by sending some WETH to it. And we might want to deposit just\\n * enough WETH to add it up to 32 so it can be staked. For that reason the check is left out.\\n *\\n * WETH sitting on the strategy won't interfere with the accounting since accounting only operates on ETH.\\n */\\n emit Deposit(_asset, address(0), _amount);\\n }\\n\\n /// @notice Unlike other strategies, this does not deposit assets into the underlying platform.\\n /// It just emits the Deposit event.\\n /// To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used.\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n function depositAll() external override onlyVault nonReentrant {\\n uint256 wethBalance = IERC20(WETH).balanceOf(address(this));\\n uint256 newWeth = wethBalance - depositedWethAccountedFor;\\n\\n if (newWeth > 0) {\\n depositedWethAccountedFor = wethBalance;\\n\\n _deposit(WETH, newWeth);\\n }\\n }\\n\\n /// @notice Withdraw WETH from this contract. Used only if some WETH for is lingering on the contract.\\n /// That can happen when:\\n /// - after mints if the strategy is the default\\n /// - time between depositToStrategy and stakeEth\\n /// - the deposit was not a multiple of 32 WETH\\n /// - someone sent WETH directly to this contract\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n /// @param _recipient Address to receive withdrawn assets\\n /// @param _asset WETH to withdraw\\n /// @param _amount Amount of WETH to withdraw\\n function withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) external override onlyVault nonReentrant {\\n require(_asset == WETH, \\\"Unsupported asset\\\");\\n _withdraw(_recipient, _asset, _amount);\\n }\\n\\n function _withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) internal {\\n require(_amount > 0, \\\"Must withdraw something\\\");\\n require(_recipient != address(0), \\\"Must specify recipient\\\");\\n\\n _wethWithdrawn(_amount);\\n\\n IERC20(_asset).safeTransfer(_recipient, _amount);\\n emit Withdrawal(_asset, address(0), _amount);\\n }\\n\\n /// @notice transfer all WETH deposits back to the vault.\\n /// This does not withdraw from the validators. That has to be done separately with the\\n /// `exitSsvValidator` and `removeSsvValidator` operations.\\n /// This does not withdraw any execution rewards from the FeeAccumulator or\\n /// consensus rewards in this strategy.\\n /// Any ETH in this strategy that was swept from a full validator withdrawal will not be withdrawn.\\n /// ETH from full validator withdrawals is sent to the Vault using `doAccounting`.\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n function withdrawAll() external override onlyVaultOrGovernor nonReentrant {\\n uint256 wethBalance = IERC20(WETH).balanceOf(address(this));\\n if (wethBalance > 0) {\\n _withdraw(vaultAddress, WETH, wethBalance);\\n }\\n }\\n\\n /// @notice Returns the total value of (W)ETH that is staked to the validators\\n /// and WETH deposits that are still to be staked.\\n /// This does not include ETH from consensus rewards sitting in this strategy\\n /// or ETH from MEV rewards in the FeeAccumulator. These rewards are harvested\\n /// and sent to the Dripper so will eventually be sent to the Vault as WETH.\\n /// @param _asset Address of weth asset\\n /// @return balance Total value of (W)ETH\\n function checkBalance(address _asset)\\n external\\n view\\n override\\n returns (uint256 balance)\\n {\\n require(_asset == WETH, \\\"Unsupported asset\\\");\\n\\n balance =\\n // add the ETH that has been staked in validators\\n activeDepositedValidators *\\n FULL_STAKE +\\n // add the WETH in the strategy from deposits that are still to be staked\\n IERC20(WETH).balanceOf(address(this));\\n }\\n\\n function pause() external onlyStrategist {\\n _pause();\\n }\\n\\n /// @notice Returns bool indicating whether asset is supported by strategy.\\n /// @param _asset The address of the asset token.\\n function supportsAsset(address _asset) public view override returns (bool) {\\n return _asset == WETH;\\n }\\n\\n /// @notice Approves the SSV Network contract to transfer SSV tokens for deposits\\n function safeApproveAllTokens() external override {\\n // Approves the SSV Network contract to transfer SSV tokens for deposits\\n IERC20(SSV_TOKEN).approve(SSV_NETWORK, type(uint256).max);\\n }\\n\\n /// @notice Set the FeeAccumulator as the address for SSV validators to send MEV rewards to\\n function setFeeRecipient() external {\\n ISSVNetwork(SSV_NETWORK).setFeeRecipientAddress(\\n FEE_ACCUMULATOR_ADDRESS\\n );\\n }\\n\\n /**\\n * @notice Only accept ETH from the FeeAccumulator and the WETH contract - required when\\n * unwrapping WETH just before staking it to the validator.\\n * The strategy will also receive ETH from the priority fees of transactions when producing blocks\\n * as defined in EIP-1559.\\n * The tx fees come from the Beacon chain so do not need any EVM level permissions to receive ETH.\\n * The tx fees are paid with each block produced. They are not included in the consensus rewards\\n * which are periodically swept from the validators to this strategy.\\n * For accounting purposes, the priority fees of transactions will be considered consensus rewards\\n * and will be included in the AccountingConsensusRewards event.\\n * @dev don't want to receive donations from anyone else as donations over the fuse limits will\\n * mess with the accounting of the consensus rewards and validator full withdrawals.\\n */\\n receive() external payable {\\n require(\\n msg.sender == FEE_ACCUMULATOR_ADDRESS || msg.sender == WETH,\\n \\\"Eth not from allowed contracts\\\"\\n );\\n }\\n\\n /***************************************\\n Internal functions\\n ****************************************/\\n\\n function _abstractSetPToken(address _asset, address) internal override {}\\n\\n /// @dev Convert accumulated ETH to WETH and send to the Harvester.\\n /// Will revert if the strategy is paused for accounting.\\n function _collectRewardTokens() internal override whenNotPaused {\\n // collect ETH from execution rewards from the fee accumulator\\n uint256 executionRewards = FeeAccumulator(FEE_ACCUMULATOR_ADDRESS)\\n .collect();\\n\\n // total ETH rewards to be harvested = execution rewards + consensus rewards\\n uint256 ethRewards = executionRewards + consensusRewards;\\n\\n require(\\n address(this).balance >= ethRewards,\\n \\\"Insufficient eth balance\\\"\\n );\\n\\n if (ethRewards > 0) {\\n // reset the counter keeping track of beacon chain consensus rewards\\n consensusRewards = 0;\\n\\n // Convert ETH rewards to WETH\\n IWETH9(WETH).deposit{ value: ethRewards }();\\n\\n IERC20(WETH).safeTransfer(harvesterAddress, ethRewards);\\n emit RewardTokenCollected(harvesterAddress, WETH, ethRewards);\\n }\\n }\\n\\n /// @dev emits Withdrawal event from NativeStakingSSVStrategy\\n function _wethWithdrawnToVault(uint256 _amount) internal override {\\n emit Withdrawal(WETH, address(0), _amount);\\n }\\n\\n /// @dev Called when WETH is withdrawn from the strategy or staked to a validator so\\n /// the strategy knows how much WETH it has on deposit.\\n /// This is so it can emit the correct amount in the Deposit event in depositAll().\\n function _wethWithdrawn(uint256 _amount) internal override {\\n /* In an ideal world we wouldn't need to reduce the deduction amount when the\\n * depositedWethAccountedFor is smaller than the _amount.\\n *\\n * The reason this is required is that a malicious actor could sent WETH directly\\n * to this contract and that would circumvent the increase of depositedWethAccountedFor\\n * property. When the ETH would be staked the depositedWethAccountedFor amount could\\n * be deducted so much that it would be negative.\\n */\\n uint256 deductAmount = Math.min(_amount, depositedWethAccountedFor);\\n depositedWethAccountedFor -= deductAmount;\\n }\\n}\\n\",\"keccak256\":\"0xbac51188363f5207cdc0eafa4097d892dadc569a949d4097016c2cc01834a644\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/ValidatorAccountant.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { ValidatorRegistrator } from \\\"./ValidatorRegistrator.sol\\\";\\nimport { IWETH9 } from \\\"../../interfaces/IWETH9.sol\\\";\\n\\n/// @title Validator Accountant\\n/// @notice Attributes the ETH swept from beacon chain validators to this strategy contract\\n/// as either full or partial withdrawals. Partial withdrawals being consensus rewards.\\n/// Full withdrawals are from exited validators.\\n/// @author Origin Protocol Inc\\nabstract contract ValidatorAccountant is ValidatorRegistrator {\\n /// @notice The minimum amount of blocks that need to pass between two calls to manuallyFixAccounting\\n uint256 public constant MIN_FIX_ACCOUNTING_CADENCE = 7200; // 1 day\\n\\n /// @notice Keeps track of the total consensus rewards swept from the beacon chain\\n uint256 public consensusRewards;\\n\\n /// @notice start of fuse interval\\n uint256 public fuseIntervalStart;\\n /// @notice end of fuse interval\\n uint256 public fuseIntervalEnd;\\n /// @notice last block number manuallyFixAccounting has been called\\n uint256 public lastFixAccountingBlockNumber;\\n\\n uint256[49] private __gap;\\n\\n event FuseIntervalUpdated(uint256 start, uint256 end);\\n event AccountingFullyWithdrawnValidator(\\n uint256 noOfValidators,\\n uint256 remainingValidators,\\n uint256 wethSentToVault\\n );\\n event AccountingValidatorSlashed(\\n uint256 remainingValidators,\\n uint256 wethSentToVault\\n );\\n event AccountingConsensusRewards(uint256 amount);\\n\\n event AccountingManuallyFixed(\\n int256 validatorsDelta,\\n int256 consensusRewardsDelta,\\n uint256 wethToVault\\n );\\n\\n /// @param _wethAddress Address of the Erc20 WETH Token contract\\n /// @param _vaultAddress Address of the Vault\\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\\n /// @param _ssvNetwork Address of the SSV Network contract\\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\\n constructor(\\n address _wethAddress,\\n address _vaultAddress,\\n address _beaconChainDepositContract,\\n address _ssvNetwork,\\n uint256 _maxValidators\\n )\\n ValidatorRegistrator(\\n _wethAddress,\\n _vaultAddress,\\n _beaconChainDepositContract,\\n _ssvNetwork,\\n _maxValidators\\n )\\n {}\\n\\n /// @notice set fuse interval values\\n function setFuseInterval(\\n uint256 _fuseIntervalStart,\\n uint256 _fuseIntervalEnd\\n ) external onlyGovernor {\\n require(\\n _fuseIntervalStart < _fuseIntervalEnd &&\\n _fuseIntervalEnd < 32 ether &&\\n _fuseIntervalEnd - _fuseIntervalStart >= 4 ether,\\n \\\"Incorrect fuse interval\\\"\\n );\\n\\n fuseIntervalStart = _fuseIntervalStart;\\n fuseIntervalEnd = _fuseIntervalEnd;\\n\\n emit FuseIntervalUpdated(_fuseIntervalStart, _fuseIntervalEnd);\\n }\\n\\n /* solhint-disable max-line-length */\\n /// This notion page offers a good explanation of how the accounting functions\\n /// https://www.notion.so/originprotocol/Limited-simplified-native-staking-accounting-67a217c8420d40678eb943b9da0ee77d\\n /// In short, after dividing by 32, if the ETH remaining on the contract falls between 0 and fuseIntervalStart,\\n /// the accounting function will treat that ETH as Beacon chain consensus rewards.\\n /// On the contrary, if after dividing by 32, the ETH remaining on the contract falls between fuseIntervalEnd and 32,\\n /// the accounting function will treat that as a validator slashing.\\n /// @notice Perform the accounting attributing beacon chain ETH to either full or partial withdrawals. Returns true when\\n /// accounting is valid and fuse isn't \\\"blown\\\". Returns false when fuse is blown.\\n /// @dev This function could in theory be permission-less but lets allow only the Registrator (Defender Action) to call it\\n /// for now.\\n /// @return accountingValid true if accounting was successful, false if fuse is blown\\n /* solhint-enable max-line-length */\\n function doAccounting()\\n external\\n onlyRegistrator\\n whenNotPaused\\n nonReentrant\\n returns (bool accountingValid)\\n {\\n // pause the accounting on failure\\n accountingValid = _doAccounting(true);\\n }\\n\\n // slither-disable-start reentrancy-eth\\n function _doAccounting(bool pauseOnFail)\\n internal\\n returns (bool accountingValid)\\n {\\n if (address(this).balance < consensusRewards) {\\n return _failAccounting(pauseOnFail);\\n }\\n\\n // Calculate all the new ETH that has been swept to the contract since the last accounting\\n uint256 newSweptETH = address(this).balance - consensusRewards;\\n accountingValid = true;\\n\\n // send the ETH that is from fully withdrawn validators to the Vault\\n if (newSweptETH >= FULL_STAKE) {\\n uint256 fullyWithdrawnValidators;\\n // explicitly cast to uint256 as we want to round to a whole number of validators\\n fullyWithdrawnValidators = uint256(newSweptETH / FULL_STAKE);\\n activeDepositedValidators -= fullyWithdrawnValidators;\\n\\n uint256 wethToVault = FULL_STAKE * fullyWithdrawnValidators;\\n IWETH9(WETH).deposit{ value: wethToVault }();\\n // slither-disable-next-line unchecked-transfer\\n IWETH9(WETH).transfer(VAULT_ADDRESS, wethToVault);\\n _wethWithdrawnToVault(wethToVault);\\n\\n emit AccountingFullyWithdrawnValidator(\\n fullyWithdrawnValidators,\\n activeDepositedValidators,\\n wethToVault\\n );\\n }\\n\\n uint256 ethRemaining = address(this).balance - consensusRewards;\\n // should be less than a whole validator stake\\n require(ethRemaining < FULL_STAKE, \\\"Unexpected accounting\\\");\\n\\n // If no Beacon chain consensus rewards swept\\n if (ethRemaining == 0) {\\n // do nothing\\n return accountingValid;\\n } else if (ethRemaining < fuseIntervalStart) {\\n // Beacon chain consensus rewards swept (partial validator withdrawals)\\n // solhint-disable-next-line reentrancy\\n consensusRewards += ethRemaining;\\n emit AccountingConsensusRewards(ethRemaining);\\n } else if (ethRemaining > fuseIntervalEnd) {\\n // Beacon chain consensus rewards swept but also a slashed validator fully exited\\n IWETH9(WETH).deposit{ value: ethRemaining }();\\n // slither-disable-next-line unchecked-transfer\\n IWETH9(WETH).transfer(VAULT_ADDRESS, ethRemaining);\\n activeDepositedValidators -= 1;\\n\\n _wethWithdrawnToVault(ethRemaining);\\n\\n emit AccountingValidatorSlashed(\\n activeDepositedValidators,\\n ethRemaining\\n );\\n }\\n // Oh no... Fuse is blown. The Strategist needs to adjust the accounting values.\\n else {\\n return _failAccounting(pauseOnFail);\\n }\\n }\\n\\n // slither-disable-end reentrancy-eth\\n\\n /// @dev pause any further accounting if required and return false\\n function _failAccounting(bool pauseOnFail)\\n internal\\n returns (bool accountingValid)\\n {\\n // pause if not already\\n if (pauseOnFail) {\\n _pause();\\n }\\n // fail the accounting\\n accountingValid = false;\\n }\\n\\n /// @notice Allow the Strategist to fix the accounting of this strategy and unpause.\\n /// @param _validatorsDelta adjust the active validators by up to plus three or minus three\\n /// @param _consensusRewardsDelta adjust the accounted for consensus rewards up or down\\n /// @param _ethToVaultAmount the amount of ETH that gets wrapped into WETH and sent to the Vault\\n /// @dev There is a case when a validator(s) gets slashed so much that the eth swept from\\n /// the beacon chain enters the fuse area and there are no consensus rewards on the contract\\n /// to \\\"dip into\\\"/use. To increase the amount of unaccounted ETH over the fuse end interval\\n /// we need to reduce the amount of active deposited validators and immediately send WETH\\n /// to the vault, so it doesn't interfere with further accounting.\\n function manuallyFixAccounting(\\n int256 _validatorsDelta,\\n int256 _consensusRewardsDelta,\\n uint256 _ethToVaultAmount\\n ) external onlyStrategist whenPaused nonReentrant {\\n require(\\n lastFixAccountingBlockNumber + MIN_FIX_ACCOUNTING_CADENCE <\\n block.number,\\n \\\"Fix accounting called too soon\\\"\\n );\\n require(\\n _validatorsDelta >= -3 &&\\n _validatorsDelta <= 3 &&\\n // new value must be positive\\n int256(activeDepositedValidators) + _validatorsDelta >= 0,\\n \\\"Invalid validatorsDelta\\\"\\n );\\n require(\\n _consensusRewardsDelta >= -332 ether &&\\n _consensusRewardsDelta <= 332 ether &&\\n // new value must be positive\\n int256(consensusRewards) + _consensusRewardsDelta >= 0,\\n \\\"Invalid consensusRewardsDelta\\\"\\n );\\n require(_ethToVaultAmount <= 32 ether * 3, \\\"Invalid wethToVaultAmount\\\");\\n\\n activeDepositedValidators = uint256(\\n int256(activeDepositedValidators) + _validatorsDelta\\n );\\n consensusRewards = uint256(\\n int256(consensusRewards) + _consensusRewardsDelta\\n );\\n lastFixAccountingBlockNumber = block.number;\\n if (_ethToVaultAmount > 0) {\\n IWETH9(WETH).deposit{ value: _ethToVaultAmount }();\\n // slither-disable-next-line unchecked-transfer\\n IWETH9(WETH).transfer(VAULT_ADDRESS, _ethToVaultAmount);\\n _wethWithdrawnToVault(_ethToVaultAmount);\\n }\\n\\n emit AccountingManuallyFixed(\\n _validatorsDelta,\\n _consensusRewardsDelta,\\n _ethToVaultAmount\\n );\\n\\n // rerun the accounting to see if it has now been fixed.\\n // Do not pause the accounting on failure as it is already paused\\n require(_doAccounting(false), \\\"Fuse still blown\\\");\\n\\n // unpause since doAccounting was successful\\n _unpause();\\n }\\n\\n /***************************************\\n Abstract\\n ****************************************/\\n\\n /// @dev allows for NativeStakingSSVStrategy contract to emit the Withdrawal event\\n function _wethWithdrawnToVault(uint256 _amount) internal virtual;\\n}\\n\",\"keccak256\":\"0xeeb0a7154b30156331f790d50ae82ce56be4c6589080a3bdd53fb6cf4815ec56\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/ValidatorRegistrator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Pausable } from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\nimport { Governable } from \\\"../../governance/Governable.sol\\\";\\nimport { IDepositContract } from \\\"../../interfaces/IDepositContract.sol\\\";\\nimport { IVault } from \\\"../../interfaces/IVault.sol\\\";\\nimport { IWETH9 } from \\\"../../interfaces/IWETH9.sol\\\";\\nimport { ISSVNetwork, Cluster } from \\\"../../interfaces/ISSVNetwork.sol\\\";\\n\\nstruct ValidatorStakeData {\\n bytes pubkey;\\n bytes signature;\\n bytes32 depositDataRoot;\\n}\\n\\n/**\\n * @title Registrator of the validators\\n * @notice This contract implements all the required functionality to register, exit and remove validators.\\n * @author Origin Protocol Inc\\n */\\nabstract contract ValidatorRegistrator is Governable, Pausable {\\n /// @notice The maximum amount of ETH that can be staked by a validator\\n /// @dev this can change in the future with EIP-7251, Increase the MAX_EFFECTIVE_BALANCE\\n uint256 public constant FULL_STAKE = 32 ether;\\n\\n /// @notice The address of the Wrapped ETH (WETH) token contract\\n address public immutable WETH;\\n /// @notice The address of the beacon chain deposit contract\\n address public immutable BEACON_CHAIN_DEPOSIT_CONTRACT;\\n /// @notice The address of the SSV Network contract used to interface with\\n address public immutable SSV_NETWORK;\\n /// @notice Address of the OETH Vault proxy contract\\n address public immutable VAULT_ADDRESS;\\n /// @notice Maximum number of validators that can be registered in this strategy\\n uint256 public immutable MAX_VALIDATORS;\\n\\n /// @notice Address of the registrator - allowed to register, exit and remove validators\\n address public validatorRegistrator;\\n /// @notice The number of validators that have 32 (!) ETH actively deposited. When a new deposit\\n /// to a validator happens this number increases, when a validator exit is detected this number\\n /// decreases.\\n uint256 public activeDepositedValidators;\\n /// @notice State of the validators keccak256(pubKey) => state\\n mapping(bytes32 => VALIDATOR_STATE) public validatorsStates;\\n /// @notice The account that is allowed to modify stakeETHThreshold and reset stakeETHTally\\n address public stakingMonitor;\\n /// @notice Amount of ETH that can be staked before staking on the contract is suspended\\n /// and the `stakingMonitor` needs to approve further staking by calling `resetStakeETHTally`\\n uint256 public stakeETHThreshold;\\n /// @notice Amount of ETH that has been staked since the `stakingMonitor` last called `resetStakeETHTally`.\\n /// This can not go above `stakeETHThreshold`.\\n uint256 public stakeETHTally;\\n // For future use\\n uint256[47] private __gap;\\n\\n enum VALIDATOR_STATE {\\n NON_REGISTERED, // validator is not registered on the SSV network\\n REGISTERED, // validator is registered on the SSV network\\n STAKED, // validator has funds staked\\n EXITING, // exit message has been posted and validator is in the process of exiting\\n EXIT_COMPLETE // validator has funds withdrawn to the EigenPod and is removed from the SSV\\n }\\n\\n event RegistratorChanged(address indexed newAddress);\\n event StakingMonitorChanged(address indexed newAddress);\\n event ETHStaked(bytes32 indexed pubKeyHash, bytes pubKey, uint256 amount);\\n event SSVValidatorRegistered(\\n bytes32 indexed pubKeyHash,\\n bytes pubKey,\\n uint64[] operatorIds\\n );\\n event SSVValidatorExitInitiated(\\n bytes32 indexed pubKeyHash,\\n bytes pubKey,\\n uint64[] operatorIds\\n );\\n event SSVValidatorExitCompleted(\\n bytes32 indexed pubKeyHash,\\n bytes pubKey,\\n uint64[] operatorIds\\n );\\n event StakeETHThresholdChanged(uint256 amount);\\n event StakeETHTallyReset();\\n\\n /// @dev Throws if called by any account other than the Registrator\\n modifier onlyRegistrator() {\\n require(\\n msg.sender == validatorRegistrator,\\n \\\"Caller is not the Registrator\\\"\\n );\\n _;\\n }\\n\\n /// @dev Throws if called by any account other than the Staking monitor\\n modifier onlyStakingMonitor() {\\n require(msg.sender == stakingMonitor, \\\"Caller is not the Monitor\\\");\\n _;\\n }\\n\\n /// @dev Throws if called by any account other than the Strategist\\n modifier onlyStrategist() {\\n require(\\n msg.sender == IVault(VAULT_ADDRESS).strategistAddr(),\\n \\\"Caller is not the Strategist\\\"\\n );\\n _;\\n }\\n\\n /// @param _wethAddress Address of the Erc20 WETH Token contract\\n /// @param _vaultAddress Address of the Vault\\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\\n /// @param _ssvNetwork Address of the SSV Network contract\\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\\n constructor(\\n address _wethAddress,\\n address _vaultAddress,\\n address _beaconChainDepositContract,\\n address _ssvNetwork,\\n uint256 _maxValidators\\n ) {\\n WETH = _wethAddress;\\n BEACON_CHAIN_DEPOSIT_CONTRACT = _beaconChainDepositContract;\\n SSV_NETWORK = _ssvNetwork;\\n VAULT_ADDRESS = _vaultAddress;\\n MAX_VALIDATORS = _maxValidators;\\n }\\n\\n /// @notice Set the address of the registrator which can register, exit and remove validators\\n function setRegistrator(address _address) external onlyGovernor {\\n validatorRegistrator = _address;\\n emit RegistratorChanged(_address);\\n }\\n\\n /// @notice Set the address of the staking monitor that is allowed to reset stakeETHTally\\n function setStakingMonitor(address _address) external onlyGovernor {\\n stakingMonitor = _address;\\n emit StakingMonitorChanged(_address);\\n }\\n\\n /// @notice Set the amount of ETH that can be staked before staking monitor\\n // needs to a approve further staking by resetting the stake ETH tally\\n function setStakeETHThreshold(uint256 _amount) external onlyGovernor {\\n stakeETHThreshold = _amount;\\n emit StakeETHThresholdChanged(_amount);\\n }\\n\\n /// @notice Reset the stakeETHTally\\n function resetStakeETHTally() external onlyStakingMonitor {\\n stakeETHTally = 0;\\n emit StakeETHTallyReset();\\n }\\n\\n /// @notice Stakes WETH to the node validators\\n /// @param validators A list of validator data needed to stake.\\n /// The `ValidatorStakeData` struct contains the pubkey, signature and depositDataRoot.\\n /// Only the registrator can call this function.\\n // slither-disable-start reentrancy-eth\\n function stakeEth(ValidatorStakeData[] calldata validators)\\n external\\n onlyRegistrator\\n whenNotPaused\\n nonReentrant\\n {\\n uint256 requiredETH = validators.length * FULL_STAKE;\\n\\n // Check there is enough WETH from the deposits sitting in this strategy contract\\n require(\\n requiredETH <= IWETH9(WETH).balanceOf(address(this)),\\n \\\"Insufficient WETH\\\"\\n );\\n require(\\n activeDepositedValidators + validators.length <= MAX_VALIDATORS,\\n \\\"Max validators reached\\\"\\n );\\n\\n require(\\n stakeETHTally + requiredETH <= stakeETHThreshold,\\n \\\"Staking ETH over threshold\\\"\\n );\\n stakeETHTally += requiredETH;\\n\\n // Convert required ETH from WETH\\n IWETH9(WETH).withdraw(requiredETH);\\n _wethWithdrawn(requiredETH);\\n\\n /* 0x01 to indicate that withdrawal credentials will contain an EOA address that the sweeping function\\n * can sweep funds to.\\n * bytes11(0) to fill up the required zeros\\n * remaining bytes20 are for the address\\n */\\n bytes memory withdrawalCredentials = abi.encodePacked(\\n bytes1(0x01),\\n bytes11(0),\\n address(this)\\n );\\n\\n // For each validator\\n for (uint256 i = 0; i < validators.length; ++i) {\\n bytes32 pubKeyHash = keccak256(validators[i].pubkey);\\n\\n require(\\n validatorsStates[pubKeyHash] == VALIDATOR_STATE.REGISTERED,\\n \\\"Validator not registered\\\"\\n );\\n\\n IDepositContract(BEACON_CHAIN_DEPOSIT_CONTRACT).deposit{\\n value: FULL_STAKE\\n }(\\n validators[i].pubkey,\\n withdrawalCredentials,\\n validators[i].signature,\\n validators[i].depositDataRoot\\n );\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.STAKED;\\n\\n emit ETHStaked(pubKeyHash, validators[i].pubkey, FULL_STAKE);\\n }\\n // save gas by changing this storage variable only once rather each time in the loop.\\n activeDepositedValidators += validators.length;\\n }\\n\\n // slither-disable-end reentrancy-eth\\n\\n /// @notice Registers a new validator in the SSV Cluster.\\n /// Only the registrator can call this function.\\n /// @param publicKeys The public keys of the validators\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n /// @param sharesData The shares data for each validator\\n /// @param ssvAmount The amount of SSV tokens to be deposited to the SSV cluster\\n /// @param cluster The SSV cluster details including the validator count and SSV balance\\n // slither-disable-start reentrancy-no-eth\\n function registerSsvValidators(\\n bytes[] calldata publicKeys,\\n uint64[] calldata operatorIds,\\n bytes[] calldata sharesData,\\n uint256 ssvAmount,\\n Cluster calldata cluster\\n ) external onlyRegistrator whenNotPaused {\\n require(\\n publicKeys.length == sharesData.length,\\n \\\"Pubkey sharesData mismatch\\\"\\n );\\n // Check each public key has not already been used\\n bytes32 pubKeyHash;\\n VALIDATOR_STATE currentState;\\n for (uint256 i = 0; i < publicKeys.length; ++i) {\\n pubKeyHash = keccak256(publicKeys[i]);\\n currentState = validatorsStates[pubKeyHash];\\n require(\\n currentState == VALIDATOR_STATE.NON_REGISTERED,\\n \\\"Validator already registered\\\"\\n );\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.REGISTERED;\\n\\n emit SSVValidatorRegistered(pubKeyHash, publicKeys[i], operatorIds);\\n }\\n\\n ISSVNetwork(SSV_NETWORK).bulkRegisterValidator(\\n publicKeys,\\n operatorIds,\\n sharesData,\\n ssvAmount,\\n cluster\\n );\\n }\\n\\n // slither-disable-end reentrancy-no-eth\\n\\n /// @notice Exit a validator from the Beacon chain.\\n /// The staked ETH will eventually swept to this native staking strategy.\\n /// Only the registrator can call this function.\\n /// @param publicKey The public key of the validator\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n // slither-disable-start reentrancy-no-eth\\n function exitSsvValidator(\\n bytes calldata publicKey,\\n uint64[] calldata operatorIds\\n ) external onlyRegistrator whenNotPaused {\\n bytes32 pubKeyHash = keccak256(publicKey);\\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\\n require(currentState == VALIDATOR_STATE.STAKED, \\\"Validator not staked\\\");\\n\\n ISSVNetwork(SSV_NETWORK).exitValidator(publicKey, operatorIds);\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXITING;\\n\\n emit SSVValidatorExitInitiated(pubKeyHash, publicKey, operatorIds);\\n }\\n\\n // slither-disable-end reentrancy-no-eth\\n\\n /// @notice Remove a validator from the SSV Cluster.\\n /// Make sure `exitSsvValidator` is called before and the validate has exited the Beacon chain.\\n /// If removed before the validator has exited the beacon chain will result in the validator being slashed.\\n /// Only the registrator can call this function.\\n /// @param publicKey The public key of the validator\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n /// @param cluster The SSV cluster details including the validator count and SSV balance\\n // slither-disable-start reentrancy-no-eth\\n function removeSsvValidator(\\n bytes calldata publicKey,\\n uint64[] calldata operatorIds,\\n Cluster calldata cluster\\n ) external onlyRegistrator whenNotPaused {\\n bytes32 pubKeyHash = keccak256(publicKey);\\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\\n // Can remove SSV validators that were incorrectly registered and can not be deposited to.\\n require(\\n currentState == VALIDATOR_STATE.EXITING ||\\n currentState == VALIDATOR_STATE.REGISTERED,\\n \\\"Validator not regd or exiting\\\"\\n );\\n\\n ISSVNetwork(SSV_NETWORK).removeValidator(\\n publicKey,\\n operatorIds,\\n cluster\\n );\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXIT_COMPLETE;\\n\\n emit SSVValidatorExitCompleted(pubKeyHash, publicKey, operatorIds);\\n }\\n\\n // slither-disable-end reentrancy-no-eth\\n\\n /// @notice Deposits more SSV Tokens to the SSV Network contract which is used to pay the SSV Operators.\\n /// @dev A SSV cluster is defined by the SSVOwnerAddress and the set of operatorIds.\\n /// uses \\\"onlyStrategist\\\" modifier so continuous front-running can't DOS our maintenance service\\n /// that tries to top up SSV tokens.\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n /// @param ssvAmount The amount of SSV tokens to be deposited to the SSV cluster\\n /// @param cluster The SSV cluster details including the validator count and SSV balance\\n function depositSSV(\\n uint64[] memory operatorIds,\\n uint256 ssvAmount,\\n Cluster memory cluster\\n ) external onlyStrategist {\\n ISSVNetwork(SSV_NETWORK).deposit(\\n address(this),\\n operatorIds,\\n ssvAmount,\\n cluster\\n );\\n }\\n\\n /***************************************\\n Abstract\\n ****************************************/\\n\\n /// @dev Called when WETH is withdrawn from the strategy or staked to a validator so\\n /// the strategy knows how much WETH it has on deposit.\\n /// This is so it can emit the correct amount in the Deposit event in depositAll().\\n function _wethWithdrawn(uint256 _amount) internal virtual;\\n}\\n\",\"keccak256\":\"0x7c095f0245ba63edfebdbb101d539a359c44337e1c6fb2315aa84578e976cdc3\",\"license\":\"MIT\"},\"contracts/token/OUSD.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title OUSD Token Contract\\n * @dev ERC20 compatible contract for OUSD\\n * @dev Implements an elastic supply\\n * @author Origin Protocol Inc\\n */\\nimport { SafeMath } from \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport { Initializable } from \\\"../utils/Initializable.sol\\\";\\nimport { InitializableERC20Detailed } from \\\"../utils/InitializableERC20Detailed.sol\\\";\\nimport { StableMath } from \\\"../utils/StableMath.sol\\\";\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\n\\n/**\\n * NOTE that this is an ERC20 token but the invariant that the sum of\\n * balanceOf(x) for all x is not >= totalSupply(). This is a consequence of the\\n * rebasing design. Any integrations with OUSD should be aware.\\n */\\n\\ncontract OUSD is Initializable, InitializableERC20Detailed, Governable {\\n using SafeMath for uint256;\\n using StableMath for uint256;\\n\\n event TotalSupplyUpdatedHighres(\\n uint256 totalSupply,\\n uint256 rebasingCredits,\\n uint256 rebasingCreditsPerToken\\n );\\n event AccountRebasingEnabled(address account);\\n event AccountRebasingDisabled(address account);\\n\\n enum RebaseOptions {\\n NotSet,\\n OptOut,\\n OptIn\\n }\\n\\n uint256 private constant MAX_SUPPLY = ~uint128(0); // (2^128) - 1\\n uint256 public _totalSupply;\\n mapping(address => mapping(address => uint256)) private _allowances;\\n address public vaultAddress = address(0);\\n mapping(address => uint256) private _creditBalances;\\n uint256 private _rebasingCredits;\\n uint256 private _rebasingCreditsPerToken;\\n // Frozen address/credits are non rebasing (value is held in contracts which\\n // do not receive yield unless they explicitly opt in)\\n uint256 public nonRebasingSupply;\\n mapping(address => uint256) public nonRebasingCreditsPerToken;\\n mapping(address => RebaseOptions) public rebaseState;\\n mapping(address => uint256) public isUpgraded;\\n\\n uint256 private constant RESOLUTION_INCREASE = 1e9;\\n\\n function initialize(\\n string calldata _nameArg,\\n string calldata _symbolArg,\\n address _vaultAddress,\\n uint256 _initialCreditsPerToken\\n ) external onlyGovernor initializer {\\n InitializableERC20Detailed._initialize(_nameArg, _symbolArg, 18);\\n _rebasingCreditsPerToken = _initialCreditsPerToken;\\n vaultAddress = _vaultAddress;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault contract\\n */\\n modifier onlyVault() {\\n require(vaultAddress == msg.sender, \\\"Caller is not the Vault\\\");\\n _;\\n }\\n\\n /**\\n * @return The total supply of OUSD.\\n */\\n function totalSupply() public view override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @return Low resolution rebasingCreditsPerToken\\n */\\n function rebasingCreditsPerToken() public view returns (uint256) {\\n return _rebasingCreditsPerToken / RESOLUTION_INCREASE;\\n }\\n\\n /**\\n * @return Low resolution total number of rebasing credits\\n */\\n function rebasingCredits() public view returns (uint256) {\\n return _rebasingCredits / RESOLUTION_INCREASE;\\n }\\n\\n /**\\n * @return High resolution rebasingCreditsPerToken\\n */\\n function rebasingCreditsPerTokenHighres() public view returns (uint256) {\\n return _rebasingCreditsPerToken;\\n }\\n\\n /**\\n * @return High resolution total number of rebasing credits\\n */\\n function rebasingCreditsHighres() public view returns (uint256) {\\n return _rebasingCredits;\\n }\\n\\n /**\\n * @dev Gets the balance of the specified address.\\n * @param _account Address to query the balance of.\\n * @return A uint256 representing the amount of base units owned by the\\n * specified address.\\n */\\n function balanceOf(address _account)\\n public\\n view\\n override\\n returns (uint256)\\n {\\n if (_creditBalances[_account] == 0) return 0;\\n return\\n _creditBalances[_account].divPrecisely(_creditsPerToken(_account));\\n }\\n\\n /**\\n * @dev Gets the credits balance of the specified address.\\n * @dev Backwards compatible with old low res credits per token.\\n * @param _account The address to query the balance of.\\n * @return (uint256, uint256) Credit balance and credits per token of the\\n * address\\n */\\n function creditsBalanceOf(address _account)\\n public\\n view\\n returns (uint256, uint256)\\n {\\n uint256 cpt = _creditsPerToken(_account);\\n if (cpt == 1e27) {\\n // For a period before the resolution upgrade, we created all new\\n // contract accounts at high resolution. Since they are not changing\\n // as a result of this upgrade, we will return their true values\\n return (_creditBalances[_account], cpt);\\n } else {\\n return (\\n _creditBalances[_account] / RESOLUTION_INCREASE,\\n cpt / RESOLUTION_INCREASE\\n );\\n }\\n }\\n\\n /**\\n * @dev Gets the credits balance of the specified address.\\n * @param _account The address to query the balance of.\\n * @return (uint256, uint256, bool) Credit balance, credits per token of the\\n * address, and isUpgraded\\n */\\n function creditsBalanceOfHighres(address _account)\\n public\\n view\\n returns (\\n uint256,\\n uint256,\\n bool\\n )\\n {\\n return (\\n _creditBalances[_account],\\n _creditsPerToken(_account),\\n isUpgraded[_account] == 1\\n );\\n }\\n\\n /**\\n * @dev Transfer tokens to a specified address.\\n * @param _to the address to transfer to.\\n * @param _value the amount to be transferred.\\n * @return true on success.\\n */\\n function transfer(address _to, uint256 _value)\\n public\\n override\\n returns (bool)\\n {\\n require(_to != address(0), \\\"Transfer to zero address\\\");\\n require(\\n _value <= balanceOf(msg.sender),\\n \\\"Transfer greater than balance\\\"\\n );\\n\\n _executeTransfer(msg.sender, _to, _value);\\n\\n emit Transfer(msg.sender, _to, _value);\\n\\n return true;\\n }\\n\\n /**\\n * @dev Transfer tokens from one address to another.\\n * @param _from The address you want to send tokens from.\\n * @param _to The address you want to transfer to.\\n * @param _value The amount of tokens to be transferred.\\n */\\n function transferFrom(\\n address _from,\\n address _to,\\n uint256 _value\\n ) public override returns (bool) {\\n require(_to != address(0), \\\"Transfer to zero address\\\");\\n require(_value <= balanceOf(_from), \\\"Transfer greater than balance\\\");\\n\\n _allowances[_from][msg.sender] = _allowances[_from][msg.sender].sub(\\n _value\\n );\\n\\n _executeTransfer(_from, _to, _value);\\n\\n emit Transfer(_from, _to, _value);\\n\\n return true;\\n }\\n\\n /**\\n * @dev Update the count of non rebasing credits in response to a transfer\\n * @param _from The address you want to send tokens from.\\n * @param _to The address you want to transfer to.\\n * @param _value Amount of OUSD to transfer\\n */\\n function _executeTransfer(\\n address _from,\\n address _to,\\n uint256 _value\\n ) internal {\\n bool isNonRebasingTo = _isNonRebasingAccount(_to);\\n bool isNonRebasingFrom = _isNonRebasingAccount(_from);\\n\\n // Credits deducted and credited might be different due to the\\n // differing creditsPerToken used by each account\\n uint256 creditsCredited = _value.mulTruncate(_creditsPerToken(_to));\\n uint256 creditsDeducted = _value.mulTruncate(_creditsPerToken(_from));\\n\\n _creditBalances[_from] = _creditBalances[_from].sub(\\n creditsDeducted,\\n \\\"Transfer amount exceeds balance\\\"\\n );\\n _creditBalances[_to] = _creditBalances[_to].add(creditsCredited);\\n\\n if (isNonRebasingTo && !isNonRebasingFrom) {\\n // Transfer to non-rebasing account from rebasing account, credits\\n // are removed from the non rebasing tally\\n nonRebasingSupply = nonRebasingSupply.add(_value);\\n // Update rebasingCredits by subtracting the deducted amount\\n _rebasingCredits = _rebasingCredits.sub(creditsDeducted);\\n } else if (!isNonRebasingTo && isNonRebasingFrom) {\\n // Transfer to rebasing account from non-rebasing account\\n // Decreasing non-rebasing credits by the amount that was sent\\n nonRebasingSupply = nonRebasingSupply.sub(_value);\\n // Update rebasingCredits by adding the credited amount\\n _rebasingCredits = _rebasingCredits.add(creditsCredited);\\n }\\n }\\n\\n /**\\n * @dev Function to check the amount of tokens that _owner has allowed to\\n * `_spender`.\\n * @param _owner The address which owns the funds.\\n * @param _spender The address which will spend the funds.\\n * @return The number of tokens still available for the _spender.\\n */\\n function allowance(address _owner, address _spender)\\n public\\n view\\n override\\n returns (uint256)\\n {\\n return _allowances[_owner][_spender];\\n }\\n\\n /**\\n * @dev Approve the passed address to spend the specified amount of tokens\\n * on behalf of msg.sender. This method is included for ERC20\\n * compatibility. `increaseAllowance` and `decreaseAllowance` should be\\n * used instead.\\n *\\n * Changing an allowance with this method brings the risk that someone\\n * may transfer both the old and the new allowance - if they are both\\n * greater than zero - if a transfer transaction is mined before the\\n * later approve() call is mined.\\n * @param _spender The address which will spend the funds.\\n * @param _value The amount of tokens to be spent.\\n */\\n function approve(address _spender, uint256 _value)\\n public\\n override\\n returns (bool)\\n {\\n _allowances[msg.sender][_spender] = _value;\\n emit Approval(msg.sender, _spender, _value);\\n return true;\\n }\\n\\n /**\\n * @dev Increase the amount of tokens that an owner has allowed to\\n * `_spender`.\\n * This method should be used instead of approve() to avoid the double\\n * approval vulnerability described above.\\n * @param _spender The address which will spend the funds.\\n * @param _addedValue The amount of tokens to increase the allowance by.\\n */\\n function increaseAllowance(address _spender, uint256 _addedValue)\\n public\\n returns (bool)\\n {\\n _allowances[msg.sender][_spender] = _allowances[msg.sender][_spender]\\n .add(_addedValue);\\n emit Approval(msg.sender, _spender, _allowances[msg.sender][_spender]);\\n return true;\\n }\\n\\n /**\\n * @dev Decrease the amount of tokens that an owner has allowed to\\n `_spender`.\\n * @param _spender The address which will spend the funds.\\n * @param _subtractedValue The amount of tokens to decrease the allowance\\n * by.\\n */\\n function decreaseAllowance(address _spender, uint256 _subtractedValue)\\n public\\n returns (bool)\\n {\\n uint256 oldValue = _allowances[msg.sender][_spender];\\n if (_subtractedValue >= oldValue) {\\n _allowances[msg.sender][_spender] = 0;\\n } else {\\n _allowances[msg.sender][_spender] = oldValue.sub(_subtractedValue);\\n }\\n emit Approval(msg.sender, _spender, _allowances[msg.sender][_spender]);\\n return true;\\n }\\n\\n /**\\n * @dev Mints new tokens, increasing totalSupply.\\n */\\n function mint(address _account, uint256 _amount) external onlyVault {\\n _mint(_account, _amount);\\n }\\n\\n /**\\n * @dev Creates `_amount` tokens and assigns them to `_account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements\\n *\\n * - `to` cannot be the zero address.\\n */\\n function _mint(address _account, uint256 _amount) internal nonReentrant {\\n require(_account != address(0), \\\"Mint to the zero address\\\");\\n\\n bool isNonRebasingAccount = _isNonRebasingAccount(_account);\\n\\n uint256 creditAmount = _amount.mulTruncate(_creditsPerToken(_account));\\n _creditBalances[_account] = _creditBalances[_account].add(creditAmount);\\n\\n // If the account is non rebasing and doesn't have a set creditsPerToken\\n // then set it i.e. this is a mint from a fresh contract\\n if (isNonRebasingAccount) {\\n nonRebasingSupply = nonRebasingSupply.add(_amount);\\n } else {\\n _rebasingCredits = _rebasingCredits.add(creditAmount);\\n }\\n\\n _totalSupply = _totalSupply.add(_amount);\\n\\n require(_totalSupply < MAX_SUPPLY, \\\"Max supply\\\");\\n\\n emit Transfer(address(0), _account, _amount);\\n }\\n\\n /**\\n * @dev Burns tokens, decreasing totalSupply.\\n */\\n function burn(address account, uint256 amount) external onlyVault {\\n _burn(account, amount);\\n }\\n\\n /**\\n * @dev Destroys `_amount` tokens from `_account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements\\n *\\n * - `_account` cannot be the zero address.\\n * - `_account` must have at least `_amount` tokens.\\n */\\n function _burn(address _account, uint256 _amount) internal nonReentrant {\\n require(_account != address(0), \\\"Burn from the zero address\\\");\\n if (_amount == 0) {\\n return;\\n }\\n\\n bool isNonRebasingAccount = _isNonRebasingAccount(_account);\\n uint256 creditAmount = _amount.mulTruncate(_creditsPerToken(_account));\\n uint256 currentCredits = _creditBalances[_account];\\n\\n // Remove the credits, burning rounding errors\\n if (\\n currentCredits == creditAmount || currentCredits - 1 == creditAmount\\n ) {\\n // Handle dust from rounding\\n _creditBalances[_account] = 0;\\n } else if (currentCredits > creditAmount) {\\n _creditBalances[_account] = _creditBalances[_account].sub(\\n creditAmount\\n );\\n } else {\\n revert(\\\"Remove exceeds balance\\\");\\n }\\n\\n // Remove from the credit tallies and non-rebasing supply\\n if (isNonRebasingAccount) {\\n nonRebasingSupply = nonRebasingSupply.sub(_amount);\\n } else {\\n _rebasingCredits = _rebasingCredits.sub(creditAmount);\\n }\\n\\n _totalSupply = _totalSupply.sub(_amount);\\n\\n emit Transfer(_account, address(0), _amount);\\n }\\n\\n /**\\n * @dev Get the credits per token for an account. Returns a fixed amount\\n * if the account is non-rebasing.\\n * @param _account Address of the account.\\n */\\n function _creditsPerToken(address _account)\\n internal\\n view\\n returns (uint256)\\n {\\n if (nonRebasingCreditsPerToken[_account] != 0) {\\n return nonRebasingCreditsPerToken[_account];\\n } else {\\n return _rebasingCreditsPerToken;\\n }\\n }\\n\\n /**\\n * @dev Is an account using rebasing accounting or non-rebasing accounting?\\n * Also, ensure contracts are non-rebasing if they have not opted in.\\n * @param _account Address of the account.\\n */\\n function _isNonRebasingAccount(address _account) internal returns (bool) {\\n bool isContract = Address.isContract(_account);\\n if (isContract && rebaseState[_account] == RebaseOptions.NotSet) {\\n _ensureRebasingMigration(_account);\\n }\\n return nonRebasingCreditsPerToken[_account] > 0;\\n }\\n\\n /**\\n * @dev Ensures internal account for rebasing and non-rebasing credits and\\n * supply is updated following deployment of frozen yield change.\\n */\\n function _ensureRebasingMigration(address _account) internal {\\n if (nonRebasingCreditsPerToken[_account] == 0) {\\n emit AccountRebasingDisabled(_account);\\n if (_creditBalances[_account] == 0) {\\n // Since there is no existing balance, we can directly set to\\n // high resolution, and do not have to do any other bookkeeping\\n nonRebasingCreditsPerToken[_account] = 1e27;\\n } else {\\n // Migrate an existing account:\\n\\n // Set fixed credits per token for this account\\n nonRebasingCreditsPerToken[_account] = _rebasingCreditsPerToken;\\n // Update non rebasing supply\\n nonRebasingSupply = nonRebasingSupply.add(balanceOf(_account));\\n // Update credit tallies\\n _rebasingCredits = _rebasingCredits.sub(\\n _creditBalances[_account]\\n );\\n }\\n }\\n }\\n\\n /**\\n * @notice Enable rebasing for an account.\\n * @dev Add a contract address to the non-rebasing exception list. The\\n * address's balance will be part of rebases and the account will be exposed\\n * to upside and downside.\\n * @param _account Address of the account.\\n */\\n function governanceRebaseOptIn(address _account)\\n public\\n nonReentrant\\n onlyGovernor\\n {\\n _rebaseOptIn(_account);\\n }\\n\\n /**\\n * @dev Add a contract address to the non-rebasing exception list. The\\n * address's balance will be part of rebases and the account will be exposed\\n * to upside and downside.\\n */\\n function rebaseOptIn() public nonReentrant {\\n _rebaseOptIn(msg.sender);\\n }\\n\\n function _rebaseOptIn(address _account) internal {\\n require(_isNonRebasingAccount(_account), \\\"Account has not opted out\\\");\\n\\n // Convert balance into the same amount at the current exchange rate\\n uint256 newCreditBalance = _creditBalances[_account]\\n .mul(_rebasingCreditsPerToken)\\n .div(_creditsPerToken(_account));\\n\\n // Decreasing non rebasing supply\\n nonRebasingSupply = nonRebasingSupply.sub(balanceOf(_account));\\n\\n _creditBalances[_account] = newCreditBalance;\\n\\n // Increase rebasing credits, totalSupply remains unchanged so no\\n // adjustment necessary\\n _rebasingCredits = _rebasingCredits.add(_creditBalances[_account]);\\n\\n rebaseState[_account] = RebaseOptions.OptIn;\\n\\n // Delete any fixed credits per token\\n delete nonRebasingCreditsPerToken[_account];\\n emit AccountRebasingEnabled(_account);\\n }\\n\\n /**\\n * @dev Explicitly mark that an address is non-rebasing.\\n */\\n function rebaseOptOut() public nonReentrant {\\n require(!_isNonRebasingAccount(msg.sender), \\\"Account has not opted in\\\");\\n\\n // Increase non rebasing supply\\n nonRebasingSupply = nonRebasingSupply.add(balanceOf(msg.sender));\\n // Set fixed credits per token\\n nonRebasingCreditsPerToken[msg.sender] = _rebasingCreditsPerToken;\\n\\n // Decrease rebasing credits, total supply remains unchanged so no\\n // adjustment necessary\\n _rebasingCredits = _rebasingCredits.sub(_creditBalances[msg.sender]);\\n\\n // Mark explicitly opted out of rebasing\\n rebaseState[msg.sender] = RebaseOptions.OptOut;\\n emit AccountRebasingDisabled(msg.sender);\\n }\\n\\n /**\\n * @dev Modify the supply without minting new tokens. This uses a change in\\n * the exchange rate between \\\"credits\\\" and OUSD tokens to change balances.\\n * @param _newTotalSupply New total supply of OUSD.\\n */\\n function changeSupply(uint256 _newTotalSupply)\\n external\\n onlyVault\\n nonReentrant\\n {\\n require(_totalSupply > 0, \\\"Cannot increase 0 supply\\\");\\n\\n if (_totalSupply == _newTotalSupply) {\\n emit TotalSupplyUpdatedHighres(\\n _totalSupply,\\n _rebasingCredits,\\n _rebasingCreditsPerToken\\n );\\n return;\\n }\\n\\n _totalSupply = _newTotalSupply > MAX_SUPPLY\\n ? MAX_SUPPLY\\n : _newTotalSupply;\\n\\n _rebasingCreditsPerToken = _rebasingCredits.divPrecisely(\\n _totalSupply.sub(nonRebasingSupply)\\n );\\n\\n require(_rebasingCreditsPerToken > 0, \\\"Invalid change in supply\\\");\\n\\n _totalSupply = _rebasingCredits\\n .divPrecisely(_rebasingCreditsPerToken)\\n .add(nonRebasingSupply);\\n\\n emit TotalSupplyUpdatedHighres(\\n _totalSupply,\\n _rebasingCredits,\\n _rebasingCreditsPerToken\\n );\\n }\\n}\\n\",\"keccak256\":\"0x2dc66b1ba02716d64eb47dd9117fda62650d8b57669e6c351437e0ad29ad5f19\",\"license\":\"MIT\"},\"contracts/utils/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { IBasicToken } from \\\"../interfaces/IBasicToken.sol\\\";\\n\\nlibrary Helpers {\\n /**\\n * @notice Fetch the `symbol()` from an ERC20 token\\n * @dev Grabs the `symbol()` from a contract\\n * @param _token Address of the ERC20 token\\n * @return string Symbol of the ERC20 token\\n */\\n function getSymbol(address _token) internal view returns (string memory) {\\n string memory symbol = IBasicToken(_token).symbol();\\n return symbol;\\n }\\n\\n /**\\n * @notice Fetch the `decimals()` from an ERC20 token\\n * @dev Grabs the `decimals()` from a contract and fails if\\n * the decimal value does not live within a certain range\\n * @param _token Address of the ERC20 token\\n * @return uint256 Decimals of the ERC20 token\\n */\\n function getDecimals(address _token) internal view returns (uint256) {\\n uint256 decimals = IBasicToken(_token).decimals();\\n require(\\n decimals >= 4 && decimals <= 18,\\n \\\"Token must have sufficient decimal places\\\"\\n );\\n\\n return decimals;\\n }\\n}\\n\",\"keccak256\":\"0x108b7a69e0140da0072ca18f90a03a3340574400f81aa6076cd2cccdf13699c2\",\"license\":\"MIT\"},\"contracts/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Base contract any contracts that need to initialize state after deployment.\\n * @author Origin Protocol Inc\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(\\n initializing || !initialized,\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n\\n bool isTopLevelCall = !initializing;\\n if (isTopLevelCall) {\\n initializing = true;\\n initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n initializing = false;\\n }\\n }\\n\\n uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0xaadbcc138114afed4af4f353c2ced2916e6ee14be91434789187f192caf0d786\",\"license\":\"MIT\"},\"contracts/utils/InitializableAbstractStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Base contract for vault strategies.\\n * @author Origin Protocol Inc\\n */\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { SafeERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport { Initializable } from \\\"../utils/Initializable.sol\\\";\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\nimport { IVault } from \\\"../interfaces/IVault.sol\\\";\\n\\nabstract contract InitializableAbstractStrategy is Initializable, Governable {\\n using SafeERC20 for IERC20;\\n\\n event PTokenAdded(address indexed _asset, address _pToken);\\n event PTokenRemoved(address indexed _asset, address _pToken);\\n event Deposit(address indexed _asset, address _pToken, uint256 _amount);\\n event Withdrawal(address indexed _asset, address _pToken, uint256 _amount);\\n event RewardTokenCollected(\\n address recipient,\\n address rewardToken,\\n uint256 amount\\n );\\n event RewardTokenAddressesUpdated(\\n address[] _oldAddresses,\\n address[] _newAddresses\\n );\\n event HarvesterAddressesUpdated(\\n address _oldHarvesterAddress,\\n address _newHarvesterAddress\\n );\\n\\n /// @notice Address of the underlying platform\\n address public immutable platformAddress;\\n /// @notice Address of the OToken vault\\n address public immutable vaultAddress;\\n\\n /// @dev Replaced with an immutable variable\\n // slither-disable-next-line constable-states\\n address private _deprecated_platformAddress;\\n\\n /// @dev Replaced with an immutable\\n // slither-disable-next-line constable-states\\n address private _deprecated_vaultAddress;\\n\\n /// @notice asset => pToken (Platform Specific Token Address)\\n mapping(address => address) public assetToPToken;\\n\\n /// @notice Full list of all assets supported by the strategy\\n address[] internal assetsMapped;\\n\\n // Deprecated: Reward token address\\n // slither-disable-next-line constable-states\\n address private _deprecated_rewardTokenAddress;\\n\\n // Deprecated: now resides in Harvester's rewardTokenConfigs\\n // slither-disable-next-line constable-states\\n uint256 private _deprecated_rewardLiquidationThreshold;\\n\\n /// @notice Address of the Harvester contract allowed to collect reward tokens\\n address public harvesterAddress;\\n\\n /// @notice Address of the reward tokens. eg CRV, BAL, CVX, AURA\\n address[] public rewardTokenAddresses;\\n\\n /* Reserved for future expansion. Used to be 100 storage slots\\n * and has decreased to accommodate:\\n * - harvesterAddress\\n * - rewardTokenAddresses\\n */\\n int256[98] private _reserved;\\n\\n struct BaseStrategyConfig {\\n address platformAddress; // Address of the underlying platform\\n address vaultAddress; // Address of the OToken's Vault\\n }\\n\\n /**\\n * @param _config The platform and OToken vault addresses\\n */\\n constructor(BaseStrategyConfig memory _config) {\\n platformAddress = _config.platformAddress;\\n vaultAddress = _config.vaultAddress;\\n }\\n\\n /**\\n * @dev Internal initialize function, to set up initial internal state\\n * @param _rewardTokenAddresses Address of reward token for platform\\n * @param _assets Addresses of initial supported assets\\n * @param _pTokens Platform Token corresponding addresses\\n */\\n function _initialize(\\n address[] memory _rewardTokenAddresses,\\n address[] memory _assets,\\n address[] memory _pTokens\\n ) internal {\\n rewardTokenAddresses = _rewardTokenAddresses;\\n\\n uint256 assetCount = _assets.length;\\n require(assetCount == _pTokens.length, \\\"Invalid input arrays\\\");\\n for (uint256 i = 0; i < assetCount; ++i) {\\n _setPTokenAddress(_assets[i], _pTokens[i]);\\n }\\n }\\n\\n /**\\n * @notice Collect accumulated reward token and send to Vault.\\n */\\n function collectRewardTokens() external virtual onlyHarvester nonReentrant {\\n _collectRewardTokens();\\n }\\n\\n /**\\n * @dev Default implementation that transfers reward tokens to the Harvester\\n * Implementing strategies need to add custom logic to collect the rewards.\\n */\\n function _collectRewardTokens() internal virtual {\\n uint256 rewardTokenCount = rewardTokenAddresses.length;\\n for (uint256 i = 0; i < rewardTokenCount; ++i) {\\n IERC20 rewardToken = IERC20(rewardTokenAddresses[i]);\\n uint256 balance = rewardToken.balanceOf(address(this));\\n if (balance > 0) {\\n emit RewardTokenCollected(\\n harvesterAddress,\\n address(rewardToken),\\n balance\\n );\\n rewardToken.safeTransfer(harvesterAddress, balance);\\n }\\n }\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault.\\n */\\n modifier onlyVault() {\\n require(msg.sender == vaultAddress, \\\"Caller is not the Vault\\\");\\n _;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Harvester.\\n */\\n modifier onlyHarvester() {\\n require(msg.sender == harvesterAddress, \\\"Caller is not the Harvester\\\");\\n _;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault or Governor.\\n */\\n modifier onlyVaultOrGovernor() {\\n require(\\n msg.sender == vaultAddress || msg.sender == governor(),\\n \\\"Caller is not the Vault or Governor\\\"\\n );\\n _;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault, Governor, or Strategist.\\n */\\n modifier onlyVaultOrGovernorOrStrategist() {\\n require(\\n msg.sender == vaultAddress ||\\n msg.sender == governor() ||\\n msg.sender == IVault(vaultAddress).strategistAddr(),\\n \\\"Caller is not the Vault, Governor, or Strategist\\\"\\n );\\n _;\\n }\\n\\n /**\\n * @notice Set the reward token addresses. Any old addresses will be overwritten.\\n * @param _rewardTokenAddresses Array of reward token addresses\\n */\\n function setRewardTokenAddresses(address[] calldata _rewardTokenAddresses)\\n external\\n onlyGovernor\\n {\\n uint256 rewardTokenCount = _rewardTokenAddresses.length;\\n for (uint256 i = 0; i < rewardTokenCount; ++i) {\\n require(\\n _rewardTokenAddresses[i] != address(0),\\n \\\"Can not set an empty address as a reward token\\\"\\n );\\n }\\n\\n emit RewardTokenAddressesUpdated(\\n rewardTokenAddresses,\\n _rewardTokenAddresses\\n );\\n rewardTokenAddresses = _rewardTokenAddresses;\\n }\\n\\n /**\\n * @notice Get the reward token addresses.\\n * @return address[] the reward token addresses.\\n */\\n function getRewardTokenAddresses()\\n external\\n view\\n returns (address[] memory)\\n {\\n return rewardTokenAddresses;\\n }\\n\\n /**\\n * @notice Provide support for asset by passing its pToken address.\\n * This method can only be called by the system Governor\\n * @param _asset Address for the asset\\n * @param _pToken Address for the corresponding platform token\\n */\\n function setPTokenAddress(address _asset, address _pToken)\\n external\\n virtual\\n onlyGovernor\\n {\\n _setPTokenAddress(_asset, _pToken);\\n }\\n\\n /**\\n * @notice Remove a supported asset by passing its index.\\n * This method can only be called by the system Governor\\n * @param _assetIndex Index of the asset to be removed\\n */\\n function removePToken(uint256 _assetIndex) external virtual onlyGovernor {\\n require(_assetIndex < assetsMapped.length, \\\"Invalid index\\\");\\n address asset = assetsMapped[_assetIndex];\\n address pToken = assetToPToken[asset];\\n\\n if (_assetIndex < assetsMapped.length - 1) {\\n assetsMapped[_assetIndex] = assetsMapped[assetsMapped.length - 1];\\n }\\n assetsMapped.pop();\\n assetToPToken[asset] = address(0);\\n\\n emit PTokenRemoved(asset, pToken);\\n }\\n\\n /**\\n * @notice Provide support for asset by passing its pToken address.\\n * Add to internal mappings and execute the platform specific,\\n * abstract method `_abstractSetPToken`\\n * @param _asset Address for the asset\\n * @param _pToken Address for the corresponding platform token\\n */\\n function _setPTokenAddress(address _asset, address _pToken) internal {\\n require(assetToPToken[_asset] == address(0), \\\"pToken already set\\\");\\n require(\\n _asset != address(0) && _pToken != address(0),\\n \\\"Invalid addresses\\\"\\n );\\n\\n assetToPToken[_asset] = _pToken;\\n assetsMapped.push(_asset);\\n\\n emit PTokenAdded(_asset, _pToken);\\n\\n _abstractSetPToken(_asset, _pToken);\\n }\\n\\n /**\\n * @notice Transfer token to governor. Intended for recovering tokens stuck in\\n * strategy contracts, i.e. mistaken sends.\\n * @param _asset Address for the asset\\n * @param _amount Amount of the asset to transfer\\n */\\n function transferToken(address _asset, uint256 _amount)\\n public\\n onlyGovernor\\n {\\n require(!supportsAsset(_asset), \\\"Cannot transfer supported asset\\\");\\n IERC20(_asset).safeTransfer(governor(), _amount);\\n }\\n\\n /**\\n * @notice Set the Harvester contract that can collect rewards.\\n * @param _harvesterAddress Address of the harvester contract.\\n */\\n function setHarvesterAddress(address _harvesterAddress)\\n external\\n onlyGovernor\\n {\\n emit HarvesterAddressesUpdated(harvesterAddress, _harvesterAddress);\\n harvesterAddress = _harvesterAddress;\\n }\\n\\n /***************************************\\n Abstract\\n ****************************************/\\n\\n function _abstractSetPToken(address _asset, address _pToken)\\n internal\\n virtual;\\n\\n function safeApproveAllTokens() external virtual;\\n\\n /**\\n * @notice Deposit an amount of assets into the platform\\n * @param _asset Address for the asset\\n * @param _amount Units of asset to deposit\\n */\\n function deposit(address _asset, uint256 _amount) external virtual;\\n\\n /**\\n * @notice Deposit all supported assets in this strategy contract to the platform\\n */\\n function depositAll() external virtual;\\n\\n /**\\n * @notice Withdraw an `amount` of assets from the platform and\\n * send to the `_recipient`.\\n * @param _recipient Address to which the asset should be sent\\n * @param _asset Address of the asset\\n * @param _amount Units of asset to withdraw\\n */\\n function withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) external virtual;\\n\\n /**\\n * @notice Withdraw all supported assets from platform and\\n * sends to the OToken's Vault.\\n */\\n function withdrawAll() external virtual;\\n\\n /**\\n * @notice Get the total asset value held in the platform.\\n * This includes any interest that was generated since depositing.\\n * @param _asset Address of the asset\\n * @return balance Total value of the asset in the platform\\n */\\n function checkBalance(address _asset)\\n external\\n view\\n virtual\\n returns (uint256 balance);\\n\\n /**\\n * @notice Check if an asset is supported.\\n * @param _asset Address of the asset\\n * @return bool Whether asset is supported\\n */\\n function supportsAsset(address _asset) public view virtual returns (bool);\\n}\\n\",\"keccak256\":\"0x5e17bb3db9f9e1014b7c5c836547f8fa81e02af7568c0bb8f2a2e0e7c2192db4\",\"license\":\"MIT\"},\"contracts/utils/InitializableERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/**\\n * @dev Optional functions from the ERC20 standard.\\n * Converted from openzeppelin/contracts/token/ERC20/ERC20Detailed.sol\\n * @author Origin Protocol Inc\\n */\\nabstract contract InitializableERC20Detailed is IERC20 {\\n // Storage gap to skip storage from prior to OUSD reset\\n uint256[100] private _____gap;\\n\\n string private _name;\\n string private _symbol;\\n uint8 private _decimals;\\n\\n /**\\n * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of\\n * these values are immutable: they can only be set once during\\n * construction.\\n * @notice To avoid variable shadowing appended `Arg` after arguments name.\\n */\\n function _initialize(\\n string memory nameArg,\\n string memory symbolArg,\\n uint8 decimalsArg\\n ) internal {\\n _name = nameArg;\\n _symbol = symbolArg;\\n _decimals = decimalsArg;\\n }\\n\\n /**\\n * @notice Returns the name of the token.\\n */\\n function name() public view returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @notice Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @notice Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5,05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei.\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view returns (uint8) {\\n return _decimals;\\n }\\n}\\n\",\"keccak256\":\"0xe35ac2d813a30d845a3b52bba72588d7e936c2b3f3373d15568c14db46aeed60\",\"license\":\"MIT\"},\"contracts/utils/StableMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { SafeMath } from \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\n\\n// Based on StableMath from Stability Labs Pty. Ltd.\\n// https://github.com/mstable/mStable-contracts/blob/master/contracts/shared/StableMath.sol\\n\\nlibrary StableMath {\\n using SafeMath for uint256;\\n\\n /**\\n * @dev Scaling unit for use in specific calculations,\\n * where 1 * 10**18, or 1e18 represents a unit '1'\\n */\\n uint256 private constant FULL_SCALE = 1e18;\\n\\n /***************************************\\n Helpers\\n ****************************************/\\n\\n /**\\n * @dev Adjust the scale of an integer\\n * @param to Decimals to scale to\\n * @param from Decimals to scale from\\n */\\n function scaleBy(\\n uint256 x,\\n uint256 to,\\n uint256 from\\n ) internal pure returns (uint256) {\\n if (to > from) {\\n x = x.mul(10**(to - from));\\n } else if (to < from) {\\n // slither-disable-next-line divide-before-multiply\\n x = x.div(10**(from - to));\\n }\\n return x;\\n }\\n\\n /***************************************\\n Precise Arithmetic\\n ****************************************/\\n\\n /**\\n * @dev Multiplies two precise units, and then truncates by the full scale\\n * @param x Left hand input to multiplication\\n * @param y Right hand input to multiplication\\n * @return Result after multiplying the two inputs and then dividing by the shared\\n * scale unit\\n */\\n function mulTruncate(uint256 x, uint256 y) internal pure returns (uint256) {\\n return mulTruncateScale(x, y, FULL_SCALE);\\n }\\n\\n /**\\n * @dev Multiplies two precise units, and then truncates by the given scale. For example,\\n * when calculating 90% of 10e18, (10e18 * 9e17) / 1e18 = (9e36) / 1e18 = 9e18\\n * @param x Left hand input to multiplication\\n * @param y Right hand input to multiplication\\n * @param scale Scale unit\\n * @return Result after multiplying the two inputs and then dividing by the shared\\n * scale unit\\n */\\n function mulTruncateScale(\\n uint256 x,\\n uint256 y,\\n uint256 scale\\n ) internal pure returns (uint256) {\\n // e.g. assume scale = fullScale\\n // z = 10e18 * 9e17 = 9e36\\n uint256 z = x.mul(y);\\n // return 9e36 / 1e18 = 9e18\\n return z.div(scale);\\n }\\n\\n /**\\n * @dev Multiplies two precise units, and then truncates by the full scale, rounding up the result\\n * @param x Left hand input to multiplication\\n * @param y Right hand input to multiplication\\n * @return Result after multiplying the two inputs and then dividing by the shared\\n * scale unit, rounded up to the closest base unit.\\n */\\n function mulTruncateCeil(uint256 x, uint256 y)\\n internal\\n pure\\n returns (uint256)\\n {\\n // e.g. 8e17 * 17268172638 = 138145381104e17\\n uint256 scaled = x.mul(y);\\n // e.g. 138145381104e17 + 9.99...e17 = 138145381113.99...e17\\n uint256 ceil = scaled.add(FULL_SCALE.sub(1));\\n // e.g. 13814538111.399...e18 / 1e18 = 13814538111\\n return ceil.div(FULL_SCALE);\\n }\\n\\n /**\\n * @dev Precisely divides two units, by first scaling the left hand operand. Useful\\n * for finding percentage weightings, i.e. 8e18/10e18 = 80% (or 8e17)\\n * @param x Left hand input to division\\n * @param y Right hand input to division\\n * @return Result after multiplying the left operand by the scale, and\\n * executing the division on the right hand input.\\n */\\n function divPrecisely(uint256 x, uint256 y)\\n internal\\n pure\\n returns (uint256)\\n {\\n // e.g. 8e18 * 1e18 = 8e36\\n uint256 z = x.mul(FULL_SCALE);\\n // e.g. 8e36 / 10e18 = 8e17\\n return z.div(y);\\n }\\n}\\n\",\"keccak256\":\"0x1eb49f6f79045d9e0a8e1dced8e01d9e559e5fac554dcbb53e43140b601b04e7\",\"license\":\"MIT\"},\"contracts/vault/VaultStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title OToken VaultStorage contract\\n * @notice The VaultStorage contract defines the storage for the Vault contracts\\n * @author Origin Protocol Inc\\n */\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { SafeERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport { IStrategy } from \\\"../interfaces/IStrategy.sol\\\";\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\nimport { OUSD } from \\\"../token/OUSD.sol\\\";\\nimport { Initializable } from \\\"../utils/Initializable.sol\\\";\\nimport \\\"../utils/Helpers.sol\\\";\\n\\ncontract VaultStorage is Initializable, Governable {\\n using SafeERC20 for IERC20;\\n\\n event AssetSupported(address _asset);\\n event AssetRemoved(address _asset);\\n event AssetDefaultStrategyUpdated(address _asset, address _strategy);\\n event AssetAllocated(address _asset, address _strategy, uint256 _amount);\\n event StrategyApproved(address _addr);\\n event StrategyRemoved(address _addr);\\n event Mint(address _addr, uint256 _value);\\n event Redeem(address _addr, uint256 _value);\\n event CapitalPaused();\\n event CapitalUnpaused();\\n event RebasePaused();\\n event RebaseUnpaused();\\n event VaultBufferUpdated(uint256 _vaultBuffer);\\n event OusdMetaStrategyUpdated(address _ousdMetaStrategy);\\n event RedeemFeeUpdated(uint256 _redeemFeeBps);\\n event PriceProviderUpdated(address _priceProvider);\\n event AllocateThresholdUpdated(uint256 _threshold);\\n event RebaseThresholdUpdated(uint256 _threshold);\\n event StrategistUpdated(address _address);\\n event MaxSupplyDiffChanged(uint256 maxSupplyDiff);\\n event YieldDistribution(address _to, uint256 _yield, uint256 _fee);\\n event TrusteeFeeBpsChanged(uint256 _basis);\\n event TrusteeAddressChanged(address _address);\\n event NetOusdMintForStrategyThresholdChanged(uint256 _threshold);\\n event SwapperChanged(address _address);\\n event SwapAllowedUndervalueChanged(uint256 _basis);\\n event SwapSlippageChanged(address _asset, uint256 _basis);\\n event Swapped(\\n address indexed _fromAsset,\\n address indexed _toAsset,\\n uint256 _fromAssetAmount,\\n uint256 _toAssetAmount\\n );\\n event DripperChanged(address indexed _dripper);\\n event StrategyAddedToMintWhitelist(address indexed strategy);\\n event StrategyRemovedFromMintWhitelist(address indexed strategy);\\n event WithdrawalRequested(\\n address indexed _withdrawer,\\n uint256 indexed _requestId,\\n uint256 _amount,\\n uint256 _queued\\n );\\n event WithdrawalClaimed(\\n address indexed _withdrawer,\\n uint256 indexed _requestId,\\n uint256 _amount\\n );\\n event WithdrawalClaimable(uint256 _claimable, uint256 _newClaimable);\\n\\n // Assets supported by the Vault, i.e. Stablecoins\\n enum UnitConversion {\\n DECIMALS,\\n GETEXCHANGERATE\\n }\\n // Changed to fit into a single storage slot so the decimals needs to be recached\\n struct Asset {\\n // Note: OETHVaultCore doesn't use `isSupported` when minting,\\n // redeeming or checking balance of assets.\\n bool isSupported;\\n UnitConversion unitConversion;\\n uint8 decimals;\\n // Max allowed slippage from the Oracle price when swapping collateral assets in basis points.\\n // For example 40 == 0.4% slippage\\n uint16 allowedOracleSlippageBps;\\n }\\n\\n /// @dev mapping of supported vault assets to their configuration\\n // slither-disable-next-line uninitialized-state\\n mapping(address => Asset) internal assets;\\n /// @dev list of all assets supported by the vault.\\n // slither-disable-next-line uninitialized-state\\n address[] internal allAssets;\\n\\n // Strategies approved for use by the Vault\\n struct Strategy {\\n bool isSupported;\\n uint256 _deprecated; // Deprecated storage slot\\n }\\n /// @dev mapping of strategy contracts to their configuration\\n // slither-disable-next-line uninitialized-state\\n mapping(address => Strategy) internal strategies;\\n /// @dev list of all vault strategies\\n address[] internal allStrategies;\\n\\n /// @notice Address of the Oracle price provider contract\\n // slither-disable-next-line uninitialized-state\\n address public priceProvider;\\n /// @notice pause rebasing if true\\n bool public rebasePaused = false;\\n /// @notice pause operations that change the OToken supply.\\n /// eg mint, redeem, allocate, mint/burn for strategy\\n bool public capitalPaused = true;\\n /// @notice Redemption fee in basis points. eg 50 = 0.5%\\n uint256 public redeemFeeBps;\\n /// @notice Percentage of assets to keep in Vault to handle (most) withdrawals. 100% = 1e18.\\n uint256 public vaultBuffer;\\n /// @notice OToken mints over this amount automatically allocate funds. 18 decimals.\\n uint256 public autoAllocateThreshold;\\n /// @notice OToken mints over this amount automatically rebase. 18 decimals.\\n uint256 public rebaseThreshold;\\n\\n /// @dev Address of the OToken token. eg OUSD or OETH.\\n // slither-disable-next-line uninitialized-state\\n OUSD internal oUSD;\\n\\n //keccak256(\\\"OUSD.vault.governor.admin.impl\\\");\\n bytes32 constant adminImplPosition =\\n 0xa2bd3d3cf188a41358c8b401076eb59066b09dec5775650c0de4c55187d17bd9;\\n\\n // Address of the contract responsible for post rebase syncs with AMMs\\n address private _deprecated_rebaseHooksAddr = address(0);\\n\\n // Deprecated: Address of Uniswap\\n // slither-disable-next-line constable-states\\n address private _deprecated_uniswapAddr = address(0);\\n\\n /// @notice Address of the Strategist\\n address public strategistAddr = address(0);\\n\\n /// @notice Mapping of asset address to the Strategy that they should automatically\\n // be allocated to\\n // slither-disable-next-line uninitialized-state\\n mapping(address => address) public assetDefaultStrategies;\\n\\n /// @notice Max difference between total supply and total value of assets. 18 decimals.\\n // slither-disable-next-line uninitialized-state\\n uint256 public maxSupplyDiff;\\n\\n /// @notice Trustee contract that can collect a percentage of yield\\n address public trusteeAddress;\\n\\n /// @notice Amount of yield collected in basis points. eg 2000 = 20%\\n uint256 public trusteeFeeBps;\\n\\n /// @dev Deprecated: Tokens that should be swapped for stablecoins\\n address[] private _deprecated_swapTokens;\\n\\n uint256 constant MINT_MINIMUM_UNIT_PRICE = 0.998e18;\\n\\n /// @notice Metapool strategy that is allowed to mint/burn OTokens without changing collateral\\n\\n // slither-disable-start constable-states\\n // slither-disable-next-line uninitialized-state\\n address public ousdMetaStrategy;\\n\\n /// @notice How much OTokens are currently minted by the strategy\\n // slither-disable-next-line uninitialized-state\\n int256 public netOusdMintedForStrategy;\\n\\n /// @notice How much net total OTokens are allowed to be minted by all strategies\\n // slither-disable-next-line uninitialized-state\\n uint256 public netOusdMintForStrategyThreshold;\\n\\n // slither-disable-end constable-states\\n\\n uint256 constant MIN_UNIT_PRICE_DRIFT = 0.7e18;\\n uint256 constant MAX_UNIT_PRICE_DRIFT = 1.3e18;\\n\\n /// @notice Collateral swap configuration.\\n /// @dev is packed into a single storage slot to save gas.\\n struct SwapConfig {\\n // Contract that swaps the vault's collateral assets\\n address swapper;\\n // Max allowed percentage the total value can drop below the total supply in basis points.\\n // For example 100 == 1%\\n uint16 allowedUndervalueBps;\\n }\\n SwapConfig internal swapConfig = SwapConfig(address(0), 0);\\n\\n // List of strategies that can mint oTokens directly\\n // Used in OETHBaseVaultCore\\n // slither-disable-next-line uninitialized-state\\n mapping(address => bool) public isMintWhitelistedStrategy;\\n\\n /// @notice Address of the Dripper contract that streams harvested rewards to the Vault\\n /// @dev The vault is proxied so needs to be set with setDripper against the proxy contract.\\n // slither-disable-start constable-states\\n // slither-disable-next-line uninitialized-state\\n address public dripper;\\n // slither-disable-end constable-states\\n\\n /// Withdrawal Queue Storage /////\\n\\n struct WithdrawalQueueMetadata {\\n // cumulative total of all withdrawal requests included the ones that have already been claimed\\n uint128 queued;\\n // cumulative total of all the requests that can be claimed including the ones that have already been claimed\\n uint128 claimable;\\n // total of all the requests that have been claimed\\n uint128 claimed;\\n // index of the next withdrawal request starting at 0\\n uint128 nextWithdrawalIndex;\\n }\\n\\n /// @notice Global metadata for the withdrawal queue including:\\n /// queued - cumulative total of all withdrawal requests included the ones that have already been claimed\\n /// claimable - cumulative total of all the requests that can be claimed including the ones already claimed\\n /// claimed - total of all the requests that have been claimed\\n /// nextWithdrawalIndex - index of the next withdrawal request starting at 0\\n // slither-disable-next-line uninitialized-state\\n WithdrawalQueueMetadata public withdrawalQueueMetadata;\\n\\n struct WithdrawalRequest {\\n address withdrawer;\\n bool claimed;\\n uint40 timestamp; // timestamp of the withdrawal request\\n // Amount of oTokens to redeem. eg OETH\\n uint128 amount;\\n // cumulative total of all withdrawal requests including this one.\\n // this request can be claimed when this queued amount is less than or equal to the queue's claimable amount.\\n uint128 queued;\\n }\\n\\n /// @notice Mapping of withdrawal request indices to the user withdrawal request data\\n mapping(uint256 => WithdrawalRequest) public withdrawalRequests;\\n\\n // For future use\\n uint256[45] private __gap;\\n\\n /**\\n * @notice set the implementation for the admin, this needs to be in a base class else we cannot set it\\n * @param newImpl address of the implementation\\n */\\n function setAdminImpl(address newImpl) external onlyGovernor {\\n require(\\n Address.isContract(newImpl),\\n \\\"new implementation is not a contract\\\"\\n );\\n bytes32 position = adminImplPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newImpl)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x7f33ab25581ef4eabd8c2e3bc7dd88ff397acb95c59c7eaf1352173d8f651d6e\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6101a06040523480156200001257600080fd5b50604051620056cf380380620056cf833981016040819052620000359162000144565b86868860200151838787848484848462000055336200011460201b60201c565b600080516020620056af833981519152546040516001600160a01b03909116906000907fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a908290a36033805460ff191690556001600160601b0319606095861b811660805292851b831660a05290841b821660c05291831b811660e052610100919091528751821b811661012052602090970151811b8716610140529a8b1b86166101605250505050509190941b1661018052506200022b9350505050565b600080516020620056af83398151915255565b80516001600160a01b03811681146200013f57600080fd5b919050565b60008060008060008060008789036101008112156200016257600080fd5b60408112156200017157600080fd5b50604080519081016001600160401b0381118282101715620001a357634e487b7160e01b600052604160045260246000fd5b604052620001b18962000127565b8152620001c160208a0162000127565b60208201529650620001d66040890162000127565b9550620001e66060890162000127565b9450620001f66080890162000127565b935060a088015192506200020d60c0890162000127565b91506200021d60e0890162000127565b905092959891949750929550565b60805160601c60a05160601c60c05160601c60e05160601c610100516101205160601c6101405160601c6101605160601c6101805160601c61529d62000412600039600081816103a001528181610b8701528181610d44015281816110bc01526136a6015260008181610490015281816110280152612ca701526000818161059301528181611162015281816120b10152818161222a01528181612e93015261312e01526000610b53015260008181610757015261197f01526000818161088601528181610dcc01528181611fdf0152818161227a0152818161262501528181613c960152613ef00152600081816108da01528181610d6c01528181610ea201528181610ff8015281816110e4015281816114b301528181611ee201528181612c770152613055015260008181610aa80152611bf40152600081816103d2015281816109ab01528181610a2201528181610c96015281816111d70152818161167d015281816116e1015281816118b501528181611a7d0152818161219b0152818161224b0152818161259f0152818161265401528181612f08015281816131b901528181613261015281816137ab0152818161382c0152818161386e01528181613b3e01528181613c1001528181613cc501528181613e6a0152613f1f015261529d6000f3fe6080604052600436106103905760003560e01c80638456cb59116101dc578063b16b7d0b11610102578063d9f00ec7116100a0578063de5f62681161006f578063de5f626814610bbf578063e752923914610bd4578063ee7afe2d14610bea578063f6ca71b014610bff57600080fd5b8063d9f00ec714610b21578063dbe55e5614610b41578063dd505df614610b75578063de34d71314610ba957600080fd5b8063cceab750116100dc578063cceab75014610a96578063d059f6ef14610aca578063d38bfff414610ae1578063d9caed1214610b0157600080fd5b8063b16b7d0b14610a44578063c2e1e3f414610a61578063c7af335214610a8157600080fd5b806396d538bb1161017a578063aa388af611610149578063aa388af61461098e578063ab12edf5146109db578063ad1728cb146109fb578063ad5c464814610a1057600080fd5b806396d538bb146108fc5780639da0e4621461091c578063a3b81e7314610959578063a4f98af41461097957600080fd5b80638d7c0e46116101b65780638d7c0e46146108545780639092c31c146108745780639136616a146108a857806391649751146108c857600080fd5b80638456cb5914610805578063853828b61461081a57806387bae8671461082f57600080fd5b80635a063f63116102c15780636e811d381161025f5780637260f8261161022e5780637260f826146107995780637b2d9b2c146107b95780637b8962f7146107d9578063842f5c46146107ef57600080fd5b80636e811d38146107055780636ef3879514610725578063714897df1461074557806371a735f31461077957600080fd5b80635f5152261161029b5780635f5152261461069957806363092383146106b957806366e3667e146106cf57806367c7066c146106e557600080fd5b80635a063f631461064b5780635c975abb146106605780635d36b1901461068457600080fd5b80633c8649591161032e57806347e7ef241161030857806347e7ef24146105d5578063484be812146105f55780635205c3801461060b57806359b80c0a1461062b57600080fd5b80633c8649591461055d578063430bf08a14610581578063435356d1146105b557600080fd5b80630fc3b4c41161036a5780630fc3b4c4146104d25780631072cbea1461050857806313cf69dd1461052857806322495dc81461053d57600080fd5b80630c340a241461044c5780630df1ecfd1461047e5780630ed57b3a146104b257600080fd5b3661044757336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806103f45750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6104455760405162461bcd60e51b815260206004820152601e60248201527f457468206e6f742066726f6d20616c6c6f77656420636f6e747261637473000060448201526064015b60405180910390fd5b005b600080fd5b34801561045857600080fd5b50610461610c21565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561048a57600080fd5b506104617f000000000000000000000000000000000000000000000000000000000000000081565b3480156104be57600080fd5b506104456104cd36600461457b565b610c3e565b3480156104de57600080fd5b506104616104ed366004614541565b609f602052600090815260409020546001600160a01b031681565b34801561051457600080fd5b506104456105233660046145f5565b610c70565b34801561053457600080fd5b50610445610d2d565b34801561054957600080fd5b5061044561055836600461479d565b610dca565b34801561056957600080fd5b5061057360695481565b604051908152602001610475565b34801561058d57600080fd5b506104617f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c157600080fd5b506104456105d0366004614662565b610f14565b3480156105e157600080fd5b506104456105f03660046145f5565b611157565b34801561060157600080fd5b50610573606a5481565b34801561061757600080fd5b50610445610626366004614873565b611252565b34801561063757600080fd5b506104456106463660046146e9565b6112b1565b34801561065757600080fd5b50610445611534565b34801561066c57600080fd5b5060335460ff165b6040519015158152602001610475565b34801561069057600080fd5b506104456115d3565b3480156106a557600080fd5b506105736106b4366004614541565b611679565b3480156106c557600080fd5b50610573611c2081565b3480156106db57600080fd5b5061057360345481565b3480156106f157600080fd5b5060a354610461906001600160a01b031681565b34801561071157600080fd5b50610445610720366004614541565b61178a565b34801561073157600080fd5b50610445610740366004614621565b611800565b34801561075157600080fd5b506105737f000000000000000000000000000000000000000000000000000000000000000081565b34801561078557600080fd5b506104456107943660046148f7565b611dca565b3480156107a557600080fd5b50603654610461906001600160a01b031681565b3480156107c557600080fd5b506104616107d4366004614873565b611fb3565b3480156107e557600080fd5b5061057360375481565b3480156107fb57600080fd5b5061057360685481565b34801561081157600080fd5b50610445611fdd565b34801561082657600080fd5b506104456120a6565b34801561083b57600080fd5b506033546104619061010090046001600160a01b031681565b34801561086057600080fd5b5061044561086f366004614978565b612278565b34801561088057600080fd5b506104617f000000000000000000000000000000000000000000000000000000000000000081565b3480156108b457600080fd5b506104456108c3366004614873565b61277a565b3480156108d457600080fd5b506104617f000000000000000000000000000000000000000000000000000000000000000081565b34801561090857600080fd5b50610445610917366004614621565b612946565b34801561092857600080fd5b5061094c610937366004614873565b60356020526000908152604090205460ff1681565b6040516104759190614e5b565b34801561096557600080fd5b50610445610974366004614541565b612a66565b34801561098557600080fd5b50610674612ad4565b34801561099a57600080fd5b506106746109a9366004614541565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156109e757600080fd5b506104456109f63660046149bd565b612b74565b348015610a0757600080fd5b50610445612c60565b348015610a1c57600080fd5b506104617f000000000000000000000000000000000000000000000000000000000000000081565b348015610a5057600080fd5b506105736801bc16d674ec80000081565b348015610a6d57600080fd5b50610445610a7c366004614541565b612d26565b348015610a8d57600080fd5b50610674612db3565b348015610aa257600080fd5b506104617f000000000000000000000000000000000000000000000000000000000000000081565b348015610ad657600080fd5b506105736101075481565b348015610aed57600080fd5b50610445610afc366004614541565b612de4565b348015610b0d57600080fd5b50610445610b1c3660046145b4565b612e88565b348015610b2d57600080fd5b50610445610b3c36600461488c565b612f62565b348015610b4d57600080fd5b506104617f000000000000000000000000000000000000000000000000000000000000000081565b348015610b8157600080fd5b506104617f000000000000000000000000000000000000000000000000000000000000000081565b348015610bb557600080fd5b5061057360385481565b348015610bcb57600080fd5b50610445613123565b348015610be057600080fd5b50610573606b5481565b348015610bf657600080fd5b50610445613290565b348015610c0b57600080fd5b50610c1461331a565b6040516104759190614c39565b6000610c396000805160206152488339815191525490565b905090565b610c46612db3565b610c625760405162461bcd60e51b815260040161043c90614ecd565b610c6c828261337c565b5050565b610c78612db3565b610c945760405162461bcd60e51b815260040161043c90614ecd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169083161415610d115760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74207472616e7366657220737570706f7274656420617373657400604482015260640161043c565b610c6c610d1c610c21565b6001600160a01b03841690836134db565b6040516336f370b360e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063dbcdc2cc90602401600060405180830381600087803b158015610db057600080fd5b505af1158015610dc4573d6000803e3d6000fd5b50505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e2357600080fd5b505afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b919061455e565b6001600160a01b0316336001600160a01b031614610e8b5760405162461bcd60e51b815260040161043c90614fb8565b60405163bc26e7e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bc26e7e590610edd903090879087908790600401614b89565b600060405180830381600087803b158015610ef757600080fd5b505af1158015610f0b573d6000803e3d6000fd5b50505050505050565b610f1c612db3565b610f385760405162461bcd60e51b815260040161043c90614ecd565b600054610100900460ff1680610f51575060005460ff16155b610fb45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161043c565b600054610100900460ff16158015610fd6576000805461ffff19166101011790555b610fe1848484613532565b60405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401602060405180830381600087803b15801561106c57600080fd5b505af1158015611080573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a49190614856565b506040516336f370b360e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063dbcdc2cc90602401600060405180830381600087803b15801561112857600080fd5b505af115801561113c573d6000803e3d6000fd5b505050508015610dc4576000805461ff001916905550505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461119f5760405162461bcd60e51b815260040161043c90614e96565b600080516020615228833981519152805460028114156111d15760405162461bcd60e51b815260040161043c90614f90565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316146112265760405162461bcd60e51b815260040161043c90614f04565b82610107600082825461123991906150df565b90915550611249905084846135ed565b50600190555050565b61125a612db3565b6112765760405162461bcd60e51b815260040161043c90614ecd565b60378190556040518181527fe26b067424903962f951f568e52ec9a3bbe1589526ea54a4e69ca6eaae1a4c779060200160405180910390a150565b60335461010090046001600160a01b031633146112e05760405162461bcd60e51b815260040161043c90614f59565b60335460ff16156113035760405162461bcd60e51b815260040161043c90614f2f565b8683146113525760405162461bcd60e51b815260206004820152601a60248201527f5075626b65792073686172657344617461206d69736d61746368000000000000604482015260640161043c565b60008060005b8981101561149b578a8a82818110611372576113726151d8565b90506020028101906113849190614fef565b604051611392929190614b5d565b6040805191829003909120600081815260356020529182205490945060ff1692508260048111156113c5576113c56151ac565b146114125760405162461bcd60e51b815260206004820152601c60248201527f56616c696461746f7220616c7265616479207265676973746572656400000000604482015260640161043c565b6000838152603560205260409020805460ff19166001179055827facd38e900350661e325d592c959664c0000a306efb2004e7dc283f44e0ea04238c8c8481811061145f5761145f6151d8565b90506020028101906114719190614fef565b8c8c6040516114839493929190614d80565b60405180910390a26114948161517b565b9050611358565b506040516322f18bf560e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906322f18bf5906114f6908d908d908d908d908d908d908d908d90600401614d1e565b600060405180830381600087803b15801561151057600080fd5b505af1158015611524573d6000803e3d6000fd5b5050505050505050505050505050565b60a3546001600160a01b0316331461158e5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f7420746865204861727665737465720000000000604482015260640161043c565b600080516020615228833981519152805460028114156115c05760405162461bcd60e51b815260040161043c90614f90565b600282556115cc61367f565b5060019055565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b03161461166e5760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b606482015260840161043c565b611677336138c4565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146116cc5760405162461bcd60e51b815260040161043c90614f04565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561172b57600080fd5b505afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906149a4565b6801bc16d674ec80000060345461177a9190615119565b61178491906150df565b92915050565b611792612db3565b6117ae5760405162461bcd60e51b815260040161043c90614ecd565b60338054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f83f29c79feb71f8fba9d0fbc4ba5f0982a28b6b1e868b3fc50e6400d100bca0f90600090a250565b60335461010090046001600160a01b0316331461182f5760405162461bcd60e51b815260040161043c90614f59565b60335460ff16156118525760405162461bcd60e51b815260040161043c90614f2f565b600080516020615228833981519152805460028114156118845760405162461bcd60e51b815260040161043c90614f90565b60028255600061189d6801bc16d674ec80000085615119565b6040516370a0823160e01b81523060048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156118ff57600080fd5b505afa158015611913573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193791906149a4565b81111561197a5760405162461bcd60e51b8152602060048201526011602482015270092dce6eaccccd2c6d2cadce840ae8aa89607b1b604482015260640161043c565b6034547f0000000000000000000000000000000000000000000000000000000000000000906119aa9086906150df565b11156119f15760405162461bcd60e51b815260206004820152601660248201527513585e081d985b1a59185d1bdc9cc81c995858da195960521b604482015260640161043c565b60375481603854611a0291906150df565b1115611a505760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e6720455448206f766572207468726573686f6c64000000000000604482015260640161043c565b8060386000828254611a6291906150df565b9091555050604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015611ac957600080fd5b505af1158015611add573d6000803e3d6000fd5b50505050611aea81613985565b60408051600160f81b60208201526000602182018190526bffffffffffffffffffffffff193060601b16602c8301529101604051602081830303815290604052905060005b85811015611da3576000878783818110611b4b57611b4b6151d8565b9050602002810190611b5d9190615035565b611b679080614fef565b604051611b75929190614b5d565b6040519081900390209050600160008281526035602052604090205460ff166004811115611ba557611ba56151ac565b14611bf25760405162461bcd60e51b815260206004820152601860248201527f56616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640161043c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008a8a86818110611c3d57611c3d6151d8565b9050602002810190611c4f9190615035565b611c599080614fef565b878d8d89818110611c6c57611c6c6151d8565b9050602002810190611c7e9190615035565b611c8c906020810190614fef565b8f8f8b818110611c9e57611c9e6151d8565b9050602002810190611cb09190615035565b604001356040518863ffffffff1660e01b8152600401611cd596959493929190614de8565b6000604051808303818588803b158015611cee57600080fd5b505af1158015611d02573d6000803e3d6000fd5b5050506000838152603560205260409020805460ff19166002179055508190507f958934bb53d6b4dc911b6173e586864efbc8076684a31f752c53d5778340b37f898985818110611d5557611d556151d8565b9050602002810190611d679190615035565b611d719080614fef565b6801bc16d674ec800000604051611d8a93929190614e37565b60405180910390a250611d9c8161517b565b9050611b2f565b508585905060346000828254611db991906150df565b909155505060019093555050505050565b60335461010090046001600160a01b03163314611df95760405162461bcd60e51b815260040161043c90614f59565b60335460ff1615611e1c5760405162461bcd60e51b815260040161043c90614f2f565b60008585604051611e2e929190614b5d565b604080519182900390912060008181526035602052919091205490915060ff166003816004811115611e6257611e626151ac565b1480611e7f57506001816004811115611e7d57611e7d6151ac565b145b611ecb5760405162461bcd60e51b815260206004820152601d60248201527f56616c696461746f72206e6f742072656764206f722065786974696e67000000604482015260640161043c565b6040516312b3fc1960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906312b3fc1990611f1f908a908a908a908a908a90600401614da7565b600060405180830381600087803b158015611f3957600080fd5b505af1158015611f4d573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166004179055518391507f6aecca20726a17c1b81989b2fd09dfdf636bae9e564d4066ca18df62dc1f3dc290611fa2908a908a908a908a90614d80565b60405180910390a250505050505050565b60a48181548110611fc357600080fd5b6000918252602090912001546001600160a01b0316905081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206e919061455e565b6001600160a01b0316336001600160a01b03161461209e5760405162461bcd60e51b815260040161043c90614fb8565b6116776139b2565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806120f557506120e0610c21565b6001600160a01b0316336001600160a01b0316145b61214d5760405162461bcd60e51b815260206004820152602360248201527f43616c6c6572206973206e6f7420746865205661756c74206f7220476f7665726044820152623737b960e91b606482015260840161043c565b6000805160206152288339815191528054600281141561217f5760405162461bcd60e51b815260040161043c90614f90565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156121e557600080fd5b505afa1580156121f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221d91906149a4565b90508015612270576122707f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000083613a27565b505060019055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156122d157600080fd5b505afa1580156122e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612309919061455e565b6001600160a01b0316336001600160a01b0316146123395760405162461bcd60e51b815260040161043c90614fb8565b60335460ff166123825760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161043c565b600080516020615228833981519152805460028114156123b45760405162461bcd60e51b815260040161043c90614f90565b6002825543611c20606b546123c991906150df565b106124165760405162461bcd60e51b815260206004820152601e60248201527f466978206163636f756e74696e672063616c6c656420746f6f20736f6f6e0000604482015260640161043c565b6002198512158015612429575060038513155b80156124435750600085603454612440919061509e565b12155b61248f5760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642076616c696461746f727344656c7461000000000000000000604482015260640161043c565b6811ff6cf0fd15afffff1984121580156124b257506811ff6cf0fd15b000008413155b80156124cc57506000846068546124c9919061509e565b12155b6125185760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420636f6e73656e7375735265776172647344656c7461000000604482015260640161043c565b68053444835ec58000008311156125715760405162461bcd60e51b815260206004820152601960248201527f496e76616c69642077657468546f5661756c74416d6f756e7400000000000000604482015260640161043c565b8460345461257f919061509e565b60345560685461259090859061509e565b60685543606b5582156126de577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156125f857600080fd5b505af115801561260c573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018890527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b15801561269c57600080fd5b505af11580156126b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d49190614856565b506126de83613b25565b60408051868152602081018690529081018490527f80d022717ea022455c5886b8dd8a29c037570aae58aeb4d7b136d7a10ec2e4319060600160405180910390a16127296000613b8d565b6127685760405162461bcd60e51b815260206004820152601060248201526f233ab9b29039ba34b63610313637bbb760811b604482015260640161043c565b612770614013565b5060019055505050565b612782612db3565b61279e5760405162461bcd60e51b815260040161043c90614ecd565b60a05481106127df5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b604482015260640161043c565b600060a082815481106127f4576127f46151d8565b60009182526020808320909101546001600160a01b03908116808452609f90925260409092205460a0549193509091169061283190600190615138565b8310156128b35760a0805461284890600190615138565b81548110612858576128586151d8565b60009182526020909120015460a080546001600160a01b039092169185908110612884576128846151d8565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b60a08054806128c4576128c46151c2565b60008281526020808220600019908401810180546001600160a01b031990811690915593019093556001600160a01b03858116808352609f855260409283902080549094169093559051908416815290917f16b7600acff27e39a8a96056b3d533045298de927507f5c1d97e4accde60488c91015b60405180910390a2505050565b61294e612db3565b61296a5760405162461bcd60e51b815260040161043c90614ecd565b8060005b81811015612a1d57600084848381811061298a5761298a6151d8565b905060200201602081019061299f9190614541565b6001600160a01b03161415612a0d5760405162461bcd60e51b815260206004820152602e60248201527f43616e206e6f742073657420616e20656d70747920616464726573732061732060448201526d30903932bbb0b932103a37b5b2b760911b606482015260840161043c565b612a168161517b565b905061296e565b507f04c0b9649497d316554306e53678d5f5f5dbc3a06f97dec13ff4cfe98b986bbc60a48484604051612a5293929190614c86565b60405180910390a1610dc460a4848461429a565b612a6e612db3565b612a8a5760405162461bcd60e51b815260040161043c90614ecd565b603680546001600160a01b0319166001600160a01b0383169081179091556040517f3329861a0008b3348767567d2405492b997abd79a088d0f2cef6b1a09a8e7ff790600090a250565b60335460009061010090046001600160a01b03163314612b065760405162461bcd60e51b815260040161043c90614f59565b60335460ff1615612b295760405162461bcd60e51b815260040161043c90614f2f565b60008051602061522883398151915280546002811415612b5b5760405162461bcd60e51b815260040161043c90614f90565b60028255612b696001613b8d565b925060018255505090565b612b7c612db3565b612b985760405162461bcd60e51b815260040161043c90614ecd565b8082108015612baf57506801bc16d674ec80000081105b8015612bcc5750673782dace9d900000612bc98383615138565b10155b612c185760405162461bcd60e51b815260206004820152601760248201527f496e636f7272656374206675736520696e74657276616c000000000000000000604482015260640161043c565b6069829055606a81905560408051838152602081018390527fcb8d24e46eb3c402bf344ee60a6576cba9ef2f59ea1af3b311520704924e901a91015b60405180910390a15050565b60405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401602060405180830381600087803b158015612ceb57600080fd5b505af1158015612cff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d239190614856565b50565b612d2e612db3565b612d4a5760405162461bcd60e51b815260040161043c90614ecd565b60a354604080516001600160a01b03928316815291831660208301527fe48386b84419f4d36e0f96c10cc3510b6fb1a33795620c5098b22472bbe90796910160405180910390a160a380546001600160a01b0319166001600160a01b0392909216919091179055565b6000612dcb6000805160206152488339815191525490565b6001600160a01b0316336001600160a01b031614905090565b612dec612db3565b612e085760405162461bcd60e51b815260040161043c90614ecd565b612e30817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b0316612e506000805160206152488339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612ed05760405162461bcd60e51b815260040161043c90614e96565b60008051602061522883398151915280546002811415612f025760405162461bcd60e51b815260040161043c90614f90565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614612f575760405162461bcd60e51b815260040161043c90614f04565b612770858585613a27565b60335461010090046001600160a01b03163314612f915760405162461bcd60e51b815260040161043c90614f59565b60335460ff1615612fb45760405162461bcd60e51b815260040161043c90614f2f565b60008484604051612fc6929190614b5d565b604080519182900390912060008181526035602052919091205490915060ff166002816004811115612ffa57612ffa6151ac565b1461303e5760405162461bcd60e51b815260206004820152601460248201527315985b1a59185d1bdc881b9bdd081cdd185ad95960621b604482015260640161043c565b604051633877322b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633877322b90613090908990899089908990600401614d80565b600060405180830381600087803b1580156130aa57600080fd5b505af11580156130be573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166003179055518391507f8c2e15303eb94e531acc988c2a01d1193bdaaa15eda7f16dda85316ed463578d90613113908990899089908990614d80565b60405180910390a2505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461316b5760405162461bcd60e51b815260040161043c90614e96565b6000805160206152288339815191528054600281141561319d5760405162461bcd60e51b815260040161043c90614f90565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561320357600080fd5b505afa158015613217573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061323b91906149a4565b90506000610107548261324e9190615138565b90508015613286576101078290556132867f0000000000000000000000000000000000000000000000000000000000000000826135ed565b5050600182555050565b6036546001600160a01b031633146132ea5760405162461bcd60e51b815260206004820152601960248201527f43616c6c6572206973206e6f7420746865204d6f6e69746f7200000000000000604482015260640161043c565b600060388190556040517fe765a88a37047c5d793dce22b9ceb5a0f5039d276da139b4c7d29613f341f1109190a1565b606060a480548060200260200160405190810160405280929190818152602001828054801561337257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613354575b5050505050905090565b6001600160a01b038281166000908152609f602052604090205416156133d95760405162461bcd60e51b81526020600482015260126024820152711c151bdad95b88185b1c9958591e481cd95d60721b604482015260640161043c565b6001600160a01b038216158015906133f957506001600160a01b03811615155b6134395760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642061646472657373657360781b604482015260640161043c565b6001600160a01b038281166000818152609f6020908152604080832080549587166001600160a01b0319968716811790915560a0805460018101825594527f78fdc8d422c49ced035a9edf18d00d3c6a8d81df210f3e5e448e045e77b41e8890930180549095168417909455925190815290917fef6485b84315f9b1483beffa32aae9a0596890395e3d7521f1c5fbb51790e765910160405180910390a25050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261352d90849061408d565b505050565b82516135459060a49060208601906142fd565b5081518151811461358f5760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420696e7075742061727261797360601b604482015260640161043c565b60005b818110156135e6576135d68482815181106135af576135af6151d8565b60200260200101518483815181106135c9576135c96151d8565b602002602001015161337c565b6135df8161517b565b9050613592565b5050505050565b600081116136365760405162461bcd60e51b81526020600482015260166024820152754d757374206465706f73697420736f6d657468696e6760501b604482015260640161043c565b6040805160008152602081018390526001600160a01b038416917f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62910160405180910390a25050565b60335460ff16156136a25760405162461bcd60e51b815260040161043c90614f2f565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e52253816040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156136ff57600080fd5b505af1158015613713573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061373791906149a4565b905060006068548261374991906150df565b90508047101561379b5760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74206574682062616c616e63650000000000000000604482015260640161043c565b8015610c6c5760006068819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561380457600080fd5b505af1158015613818573d6000803e3d6000fd5b505060a35461385893506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169350169050836134db565b60a354604080516001600160a01b0392831681527f0000000000000000000000000000000000000000000000000000000000000000909216602083015281018290527ff6c07a063ed4e63808eb8da7112d46dbcd38de2b40a73dbcc9353c5a94c7235390606001612c54565b6001600160a01b03811661391a5760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f722069732061646472657373283029000000000000604482015260640161043c565b806001600160a01b031661393a6000805160206152488339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a3612d238160008051602061524883398151915255565b6000613994826101075461415f565b90508061010760008282546139a99190615138565b90915550505050565b60335460ff16156139d55760405162461bcd60e51b815260040161043c90614f2f565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613a0a3390565b6040516001600160a01b03909116815260200160405180910390a1565b60008111613a775760405162461bcd60e51b815260206004820152601760248201527f4d75737420776974686472617720736f6d657468696e67000000000000000000604482015260640161043c565b6001600160a01b038316613ac65760405162461bcd60e51b8152602060048201526016602482015275135d5cdd081cdc1958da599e481c9958da5c1a595b9d60521b604482015260640161043c565b613acf81613985565b613ae36001600160a01b03831684836134db565b6040805160008152602081018390526001600160a01b038416917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989101612939565b6040805160008152602081018390526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398910160405180910390a250565b6000606854471015613ba25761178482614177565b600060685447613bb29190615138565b9050600191506801bc16d674ec8000008110613d96576000613bdd6801bc16d674ec800000836150f7565b90508060346000828254613bf19190615138565b9091555060009050613c0c826801bc16d674ec800000615119565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613c6957600080fd5b505af1158015613c7d573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613d0d57600080fd5b505af1158015613d21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d459190614856565b50613d4f81613b25565b60345460408051848152602081019290925281018290527fbe7040030ff7b347853214bf49820c6d455fedf58f3815f85c7bc5216993682b9060600160405180910390a150505b600060685447613da69190615138565b90506801bc16d674ec8000008110613df85760405162461bcd60e51b8152602060048201526015602482015274556e6578706563746564206163636f756e74696e6760581b604482015260640161043c565b80613e04575050919050565b606954811015613e5e578060686000828254613e2091906150df565b90915550506040518181527f7a745a2c63a535068f52ceca27debd5297bbad5f7f37ec53d044a59d0362445d906020015b60405180910390a161400c565b606a54811115613ffb577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613ec357600080fd5b505af1158015613ed7573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613f6757600080fd5b505af1158015613f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f9f9190614856565b50600160346000828254613fb39190615138565b90915550613fc2905081613b25565b60345460408051918252602082018390527f6aa7e30787b26429ced603a7aba8b19c4b5d5bcf29a3257da953c8d53bcaa3a69101613e51565b61400484614177565b949350505050565b5050919050565b60335460ff1661405c5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161043c565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613a0a565b60006140e2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661418f9092919063ffffffff16565b80519091501561352d57808060200190518101906141009190614856565b61352d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161043c565b600081831061416e5781614170565b825b9392505050565b60008115614187576141876139b2565b506000919050565b6060614004848460008585843b6141e85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161043c565b600080866001600160a01b031685876040516142049190614b6d565b60006040518083038185875af1925050503d8060008114614241576040519150601f19603f3d011682016040523d82523d6000602084013e614246565b606091505b5091509150614256828286614261565b979650505050505050565b60608315614270575081614170565b8251156142805782518084602001fd5b8160405162461bcd60e51b815260040161043c9190614e83565b8280548282559060005260206000209081019282156142ed579160200282015b828111156142ed5781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906142ba565b506142f9929150614352565b5090565b8280548282559060005260206000209081019282156142ed579160200282015b828111156142ed57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061431d565b5b808211156142f95760008155600101614353565b60008083601f84011261437957600080fd5b5081356001600160401b0381111561439057600080fd5b6020830191508360208260051b85010111156143ab57600080fd5b9250929050565b600082601f8301126143c357600080fd5b813560206143d86143d38361507b565b61504b565b80838252828201915082860187848660051b89010111156143f857600080fd5b60005b8581101561442057813561440e81615204565b845292840192908401906001016143fb565b5090979650505050505050565b60008083601f84011261443f57600080fd5b5081356001600160401b0381111561445657600080fd5b6020830191508360208285010111156143ab57600080fd5b600060a0828403121561448057600080fd5b50919050565b600060a0828403121561449857600080fd5b60405160a081018181106001600160401b03821117156144ba576144ba6151ee565b6040529050806144c983614511565b81526144d76020840161452a565b60208201526144e86040840161452a565b604082015260608301356144fb81615219565b6060820152608092830135920191909152919050565b803563ffffffff8116811461452557600080fd5b919050565b80356001600160401b038116811461452557600080fd5b60006020828403121561455357600080fd5b813561417081615204565b60006020828403121561457057600080fd5b815161417081615204565b6000806040838503121561458e57600080fd5b823561459981615204565b915060208301356145a981615204565b809150509250929050565b6000806000606084860312156145c957600080fd5b83356145d481615204565b925060208401356145e481615204565b929592945050506040919091013590565b6000806040838503121561460857600080fd5b823561461381615204565b946020939093013593505050565b6000806020838503121561463457600080fd5b82356001600160401b0381111561464a57600080fd5b61465685828601614367565b90969095509350505050565b60008060006060848603121561467757600080fd5b83356001600160401b038082111561468e57600080fd5b61469a878388016143b2565b945060208601359150808211156146b057600080fd5b6146bc878388016143b2565b935060408601359150808211156146d257600080fd5b506146df868287016143b2565b9150509250925092565b600080600080600080600080610120898b03121561470657600080fd5b88356001600160401b038082111561471d57600080fd5b6147298c838d01614367565b909a50985060208b013591508082111561474257600080fd5b61474e8c838d01614367565b909850965060408b013591508082111561476757600080fd5b506147748b828c01614367565b9095509350506060890135915061478e8a60808b0161446e565b90509295985092959890939650565b600080600060e084860312156147b257600080fd5b83356001600160401b038111156147c857600080fd5b8401601f810186136147d957600080fd5b803560206147e96143d38361507b565b8083825282820191508285018a848660051b880101111561480957600080fd5b600095505b848610156148335761481f8161452a565b83526001959095019491830191830161480e565b50965050860135935061484d915086905060408601614486565b90509250925092565b60006020828403121561486857600080fd5b815161417081615219565b60006020828403121561488557600080fd5b5035919050565b600080600080604085870312156148a257600080fd5b84356001600160401b03808211156148b957600080fd5b6148c58883890161442d565b909650945060208701359150808211156148de57600080fd5b506148eb87828801614367565b95989497509550505050565b600080600080600060e0868803121561490f57600080fd5b85356001600160401b038082111561492657600080fd5b61493289838a0161442d565b9097509550602088013591508082111561494b57600080fd5b5061495888828901614367565b909450925061496c9050876040880161446e565b90509295509295909350565b60008060006060848603121561498d57600080fd5b505081359360208301359350604090920135919050565b6000602082840312156149b657600080fd5b5051919050565b600080604083850312156149d057600080fd5b50508035926020909101359150565b818352600060208085019450848460051b86018460005b878110156144205783830389528135601e19883603018112614a1757600080fd5b870180356001600160401b03811115614a2f57600080fd5b803603891315614a3e57600080fd5b614a4b8582898501614aa6565b9a87019a94505050908401906001016149f6565b8183526000602080850194508260005b85811015614a9b576001600160401b03614a888361452a565b1687529582019590820190600101614a6f565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008151808452614ae781602086016020860161514f565b601f01601f19169290920160200192915050565b63ffffffff614b0982614511565b168252614b186020820161452a565b6001600160401b03808216602085015280614b356040850161452a565b16604085015250506060810135614b4b81615219565b15156060830152608090810135910152565b8183823760009101908152919050565b60008251614b7f81846020870161514f565b9190910192915050565b6001600160a01b03851681526101006020808301829052855191830182905260009161012084019187810191845b81811015614bdc5783516001600160401b031685529382019392820192600101614bb7565b505082935086604086015263ffffffff865116606086015280860151925050506001600160401b0380821660808501528060408601511660a085015250506060830151151560c0830152608083015160e083015295945050505050565b6020808252825182820181905260009190848201906040850190845b81811015614c7a5783516001600160a01b031683529284019291840191600101614c55565b50909695505050505050565b6000604082016040835280865480835260608501915087600052602092508260002060005b82811015614cd05781546001600160a01b031684529284019260019182019101614cab565b505050838103828501528481528590820160005b86811015614d12578235614cf781615204565b6001600160a01b031682529183019190830190600101614ce4565b50979650505050505050565b6000610120808352614d338184018b8d6149df565b90508281036020840152614d4881898b614a5f565b90508281036040840152614d5d8187896149df565b915050836060830152614d736080830184614afb565b9998505050505050505050565b604081526000614d94604083018688614aa6565b8281036020840152614256818587614a5f565b60e081526000614dbb60e083018789614aa6565b8281036020840152614dce818688614a5f565b915050614dde6040830184614afb565b9695505050505050565b608081526000614dfc60808301888a614aa6565b8281036020840152614e0e8188614acf565b90508281036040840152614e23818688614aa6565b915050826060830152979650505050505050565b604081526000614e4b604083018587614aa6565b9050826020830152949350505050565b6020810160058310614e7d57634e487b7160e01b600052602160045260246000fd5b91905290565b6020815260006141706020830184614acf565b60208082526017908201527f43616c6c6572206973206e6f7420746865205661756c74000000000000000000604082015260600190565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b602080825260119082015270155b9cdd5c1c1bdc9d195908185cdcd95d607a1b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601d908201527f43616c6c6572206973206e6f7420746865205265676973747261746f72000000604082015260600190565b6020808252600e908201526d1499595b9d1c985b9d0818d85b1b60921b604082015260600190565b6020808252601c908201527f43616c6c6572206973206e6f7420746865205374726174656769737400000000604082015260600190565b6000808335601e1984360301811261500657600080fd5b8301803591506001600160401b0382111561502057600080fd5b6020019150368190038213156143ab57600080fd5b60008235605e19833603018112614b7f57600080fd5b604051601f8201601f191681016001600160401b0381118282101715615073576150736151ee565b604052919050565b60006001600160401b03821115615094576150946151ee565b5060051b60200190565b600080821280156001600160ff1b03849003851316156150c0576150c0615196565b600160ff1b83900384128116156150d9576150d9615196565b50500190565b600082198211156150f2576150f2615196565b500190565b60008261511457634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561513357615133615196565b500290565b60008282101561514a5761514a615196565b500390565b60005b8381101561516a578181015183820152602001615152565b83811115610dc45750506000910152565b600060001982141561518f5761518f615196565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612d2357600080fd5b8015158114612d2357600080fdfe53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac45357bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4aa264697066735822122058a9dcc12e3eefe5ceabe7ae25ab8de12f838a170fbf7f201c3d36ff8c4ae92964736f6c634300080700337bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a", + "deployedBytecode": "0x6080604052600436106103905760003560e01c80638456cb59116101dc578063b16b7d0b11610102578063d9f00ec7116100a0578063de5f62681161006f578063de5f626814610bbf578063e752923914610bd4578063ee7afe2d14610bea578063f6ca71b014610bff57600080fd5b8063d9f00ec714610b21578063dbe55e5614610b41578063dd505df614610b75578063de34d71314610ba957600080fd5b8063cceab750116100dc578063cceab75014610a96578063d059f6ef14610aca578063d38bfff414610ae1578063d9caed1214610b0157600080fd5b8063b16b7d0b14610a44578063c2e1e3f414610a61578063c7af335214610a8157600080fd5b806396d538bb1161017a578063aa388af611610149578063aa388af61461098e578063ab12edf5146109db578063ad1728cb146109fb578063ad5c464814610a1057600080fd5b806396d538bb146108fc5780639da0e4621461091c578063a3b81e7314610959578063a4f98af41461097957600080fd5b80638d7c0e46116101b65780638d7c0e46146108545780639092c31c146108745780639136616a146108a857806391649751146108c857600080fd5b80638456cb5914610805578063853828b61461081a57806387bae8671461082f57600080fd5b80635a063f63116102c15780636e811d381161025f5780637260f8261161022e5780637260f826146107995780637b2d9b2c146107b95780637b8962f7146107d9578063842f5c46146107ef57600080fd5b80636e811d38146107055780636ef3879514610725578063714897df1461074557806371a735f31461077957600080fd5b80635f5152261161029b5780635f5152261461069957806363092383146106b957806366e3667e146106cf57806367c7066c146106e557600080fd5b80635a063f631461064b5780635c975abb146106605780635d36b1901461068457600080fd5b80633c8649591161032e57806347e7ef241161030857806347e7ef24146105d5578063484be812146105f55780635205c3801461060b57806359b80c0a1461062b57600080fd5b80633c8649591461055d578063430bf08a14610581578063435356d1146105b557600080fd5b80630fc3b4c41161036a5780630fc3b4c4146104d25780631072cbea1461050857806313cf69dd1461052857806322495dc81461053d57600080fd5b80630c340a241461044c5780630df1ecfd1461047e5780630ed57b3a146104b257600080fd5b3661044757336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806103f45750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6104455760405162461bcd60e51b815260206004820152601e60248201527f457468206e6f742066726f6d20616c6c6f77656420636f6e747261637473000060448201526064015b60405180910390fd5b005b600080fd5b34801561045857600080fd5b50610461610c21565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561048a57600080fd5b506104617f000000000000000000000000000000000000000000000000000000000000000081565b3480156104be57600080fd5b506104456104cd36600461457b565b610c3e565b3480156104de57600080fd5b506104616104ed366004614541565b609f602052600090815260409020546001600160a01b031681565b34801561051457600080fd5b506104456105233660046145f5565b610c70565b34801561053457600080fd5b50610445610d2d565b34801561054957600080fd5b5061044561055836600461479d565b610dca565b34801561056957600080fd5b5061057360695481565b604051908152602001610475565b34801561058d57600080fd5b506104617f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c157600080fd5b506104456105d0366004614662565b610f14565b3480156105e157600080fd5b506104456105f03660046145f5565b611157565b34801561060157600080fd5b50610573606a5481565b34801561061757600080fd5b50610445610626366004614873565b611252565b34801561063757600080fd5b506104456106463660046146e9565b6112b1565b34801561065757600080fd5b50610445611534565b34801561066c57600080fd5b5060335460ff165b6040519015158152602001610475565b34801561069057600080fd5b506104456115d3565b3480156106a557600080fd5b506105736106b4366004614541565b611679565b3480156106c557600080fd5b50610573611c2081565b3480156106db57600080fd5b5061057360345481565b3480156106f157600080fd5b5060a354610461906001600160a01b031681565b34801561071157600080fd5b50610445610720366004614541565b61178a565b34801561073157600080fd5b50610445610740366004614621565b611800565b34801561075157600080fd5b506105737f000000000000000000000000000000000000000000000000000000000000000081565b34801561078557600080fd5b506104456107943660046148f7565b611dca565b3480156107a557600080fd5b50603654610461906001600160a01b031681565b3480156107c557600080fd5b506104616107d4366004614873565b611fb3565b3480156107e557600080fd5b5061057360375481565b3480156107fb57600080fd5b5061057360685481565b34801561081157600080fd5b50610445611fdd565b34801561082657600080fd5b506104456120a6565b34801561083b57600080fd5b506033546104619061010090046001600160a01b031681565b34801561086057600080fd5b5061044561086f366004614978565b612278565b34801561088057600080fd5b506104617f000000000000000000000000000000000000000000000000000000000000000081565b3480156108b457600080fd5b506104456108c3366004614873565b61277a565b3480156108d457600080fd5b506104617f000000000000000000000000000000000000000000000000000000000000000081565b34801561090857600080fd5b50610445610917366004614621565b612946565b34801561092857600080fd5b5061094c610937366004614873565b60356020526000908152604090205460ff1681565b6040516104759190614e5b565b34801561096557600080fd5b50610445610974366004614541565b612a66565b34801561098557600080fd5b50610674612ad4565b34801561099a57600080fd5b506106746109a9366004614541565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156109e757600080fd5b506104456109f63660046149bd565b612b74565b348015610a0757600080fd5b50610445612c60565b348015610a1c57600080fd5b506104617f000000000000000000000000000000000000000000000000000000000000000081565b348015610a5057600080fd5b506105736801bc16d674ec80000081565b348015610a6d57600080fd5b50610445610a7c366004614541565b612d26565b348015610a8d57600080fd5b50610674612db3565b348015610aa257600080fd5b506104617f000000000000000000000000000000000000000000000000000000000000000081565b348015610ad657600080fd5b506105736101075481565b348015610aed57600080fd5b50610445610afc366004614541565b612de4565b348015610b0d57600080fd5b50610445610b1c3660046145b4565b612e88565b348015610b2d57600080fd5b50610445610b3c36600461488c565b612f62565b348015610b4d57600080fd5b506104617f000000000000000000000000000000000000000000000000000000000000000081565b348015610b8157600080fd5b506104617f000000000000000000000000000000000000000000000000000000000000000081565b348015610bb557600080fd5b5061057360385481565b348015610bcb57600080fd5b50610445613123565b348015610be057600080fd5b50610573606b5481565b348015610bf657600080fd5b50610445613290565b348015610c0b57600080fd5b50610c1461331a565b6040516104759190614c39565b6000610c396000805160206152488339815191525490565b905090565b610c46612db3565b610c625760405162461bcd60e51b815260040161043c90614ecd565b610c6c828261337c565b5050565b610c78612db3565b610c945760405162461bcd60e51b815260040161043c90614ecd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169083161415610d115760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74207472616e7366657220737570706f7274656420617373657400604482015260640161043c565b610c6c610d1c610c21565b6001600160a01b03841690836134db565b6040516336f370b360e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063dbcdc2cc90602401600060405180830381600087803b158015610db057600080fd5b505af1158015610dc4573d6000803e3d6000fd5b50505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e2357600080fd5b505afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b919061455e565b6001600160a01b0316336001600160a01b031614610e8b5760405162461bcd60e51b815260040161043c90614fb8565b60405163bc26e7e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bc26e7e590610edd903090879087908790600401614b89565b600060405180830381600087803b158015610ef757600080fd5b505af1158015610f0b573d6000803e3d6000fd5b50505050505050565b610f1c612db3565b610f385760405162461bcd60e51b815260040161043c90614ecd565b600054610100900460ff1680610f51575060005460ff16155b610fb45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161043c565b600054610100900460ff16158015610fd6576000805461ffff19166101011790555b610fe1848484613532565b60405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401602060405180830381600087803b15801561106c57600080fd5b505af1158015611080573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a49190614856565b506040516336f370b360e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063dbcdc2cc90602401600060405180830381600087803b15801561112857600080fd5b505af115801561113c573d6000803e3d6000fd5b505050508015610dc4576000805461ff001916905550505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461119f5760405162461bcd60e51b815260040161043c90614e96565b600080516020615228833981519152805460028114156111d15760405162461bcd60e51b815260040161043c90614f90565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316146112265760405162461bcd60e51b815260040161043c90614f04565b82610107600082825461123991906150df565b90915550611249905084846135ed565b50600190555050565b61125a612db3565b6112765760405162461bcd60e51b815260040161043c90614ecd565b60378190556040518181527fe26b067424903962f951f568e52ec9a3bbe1589526ea54a4e69ca6eaae1a4c779060200160405180910390a150565b60335461010090046001600160a01b031633146112e05760405162461bcd60e51b815260040161043c90614f59565b60335460ff16156113035760405162461bcd60e51b815260040161043c90614f2f565b8683146113525760405162461bcd60e51b815260206004820152601a60248201527f5075626b65792073686172657344617461206d69736d61746368000000000000604482015260640161043c565b60008060005b8981101561149b578a8a82818110611372576113726151d8565b90506020028101906113849190614fef565b604051611392929190614b5d565b6040805191829003909120600081815260356020529182205490945060ff1692508260048111156113c5576113c56151ac565b146114125760405162461bcd60e51b815260206004820152601c60248201527f56616c696461746f7220616c7265616479207265676973746572656400000000604482015260640161043c565b6000838152603560205260409020805460ff19166001179055827facd38e900350661e325d592c959664c0000a306efb2004e7dc283f44e0ea04238c8c8481811061145f5761145f6151d8565b90506020028101906114719190614fef565b8c8c6040516114839493929190614d80565b60405180910390a26114948161517b565b9050611358565b506040516322f18bf560e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906322f18bf5906114f6908d908d908d908d908d908d908d908d90600401614d1e565b600060405180830381600087803b15801561151057600080fd5b505af1158015611524573d6000803e3d6000fd5b5050505050505050505050505050565b60a3546001600160a01b0316331461158e5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f7420746865204861727665737465720000000000604482015260640161043c565b600080516020615228833981519152805460028114156115c05760405162461bcd60e51b815260040161043c90614f90565b600282556115cc61367f565b5060019055565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b03161461166e5760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b606482015260840161043c565b611677336138c4565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146116cc5760405162461bcd60e51b815260040161043c90614f04565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561172b57600080fd5b505afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906149a4565b6801bc16d674ec80000060345461177a9190615119565b61178491906150df565b92915050565b611792612db3565b6117ae5760405162461bcd60e51b815260040161043c90614ecd565b60338054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f83f29c79feb71f8fba9d0fbc4ba5f0982a28b6b1e868b3fc50e6400d100bca0f90600090a250565b60335461010090046001600160a01b0316331461182f5760405162461bcd60e51b815260040161043c90614f59565b60335460ff16156118525760405162461bcd60e51b815260040161043c90614f2f565b600080516020615228833981519152805460028114156118845760405162461bcd60e51b815260040161043c90614f90565b60028255600061189d6801bc16d674ec80000085615119565b6040516370a0823160e01b81523060048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156118ff57600080fd5b505afa158015611913573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193791906149a4565b81111561197a5760405162461bcd60e51b8152602060048201526011602482015270092dce6eaccccd2c6d2cadce840ae8aa89607b1b604482015260640161043c565b6034547f0000000000000000000000000000000000000000000000000000000000000000906119aa9086906150df565b11156119f15760405162461bcd60e51b815260206004820152601660248201527513585e081d985b1a59185d1bdc9cc81c995858da195960521b604482015260640161043c565b60375481603854611a0291906150df565b1115611a505760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e6720455448206f766572207468726573686f6c64000000000000604482015260640161043c565b8060386000828254611a6291906150df565b9091555050604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015611ac957600080fd5b505af1158015611add573d6000803e3d6000fd5b50505050611aea81613985565b60408051600160f81b60208201526000602182018190526bffffffffffffffffffffffff193060601b16602c8301529101604051602081830303815290604052905060005b85811015611da3576000878783818110611b4b57611b4b6151d8565b9050602002810190611b5d9190615035565b611b679080614fef565b604051611b75929190614b5d565b6040519081900390209050600160008281526035602052604090205460ff166004811115611ba557611ba56151ac565b14611bf25760405162461bcd60e51b815260206004820152601860248201527f56616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640161043c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008a8a86818110611c3d57611c3d6151d8565b9050602002810190611c4f9190615035565b611c599080614fef565b878d8d89818110611c6c57611c6c6151d8565b9050602002810190611c7e9190615035565b611c8c906020810190614fef565b8f8f8b818110611c9e57611c9e6151d8565b9050602002810190611cb09190615035565b604001356040518863ffffffff1660e01b8152600401611cd596959493929190614de8565b6000604051808303818588803b158015611cee57600080fd5b505af1158015611d02573d6000803e3d6000fd5b5050506000838152603560205260409020805460ff19166002179055508190507f958934bb53d6b4dc911b6173e586864efbc8076684a31f752c53d5778340b37f898985818110611d5557611d556151d8565b9050602002810190611d679190615035565b611d719080614fef565b6801bc16d674ec800000604051611d8a93929190614e37565b60405180910390a250611d9c8161517b565b9050611b2f565b508585905060346000828254611db991906150df565b909155505060019093555050505050565b60335461010090046001600160a01b03163314611df95760405162461bcd60e51b815260040161043c90614f59565b60335460ff1615611e1c5760405162461bcd60e51b815260040161043c90614f2f565b60008585604051611e2e929190614b5d565b604080519182900390912060008181526035602052919091205490915060ff166003816004811115611e6257611e626151ac565b1480611e7f57506001816004811115611e7d57611e7d6151ac565b145b611ecb5760405162461bcd60e51b815260206004820152601d60248201527f56616c696461746f72206e6f742072656764206f722065786974696e67000000604482015260640161043c565b6040516312b3fc1960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906312b3fc1990611f1f908a908a908a908a908a90600401614da7565b600060405180830381600087803b158015611f3957600080fd5b505af1158015611f4d573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166004179055518391507f6aecca20726a17c1b81989b2fd09dfdf636bae9e564d4066ca18df62dc1f3dc290611fa2908a908a908a908a90614d80565b60405180910390a250505050505050565b60a48181548110611fc357600080fd5b6000918252602090912001546001600160a01b0316905081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206e919061455e565b6001600160a01b0316336001600160a01b03161461209e5760405162461bcd60e51b815260040161043c90614fb8565b6116776139b2565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806120f557506120e0610c21565b6001600160a01b0316336001600160a01b0316145b61214d5760405162461bcd60e51b815260206004820152602360248201527f43616c6c6572206973206e6f7420746865205661756c74206f7220476f7665726044820152623737b960e91b606482015260840161043c565b6000805160206152288339815191528054600281141561217f5760405162461bcd60e51b815260040161043c90614f90565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156121e557600080fd5b505afa1580156121f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221d91906149a4565b90508015612270576122707f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000083613a27565b505060019055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156122d157600080fd5b505afa1580156122e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612309919061455e565b6001600160a01b0316336001600160a01b0316146123395760405162461bcd60e51b815260040161043c90614fb8565b60335460ff166123825760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161043c565b600080516020615228833981519152805460028114156123b45760405162461bcd60e51b815260040161043c90614f90565b6002825543611c20606b546123c991906150df565b106124165760405162461bcd60e51b815260206004820152601e60248201527f466978206163636f756e74696e672063616c6c656420746f6f20736f6f6e0000604482015260640161043c565b6002198512158015612429575060038513155b80156124435750600085603454612440919061509e565b12155b61248f5760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642076616c696461746f727344656c7461000000000000000000604482015260640161043c565b6811ff6cf0fd15afffff1984121580156124b257506811ff6cf0fd15b000008413155b80156124cc57506000846068546124c9919061509e565b12155b6125185760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420636f6e73656e7375735265776172647344656c7461000000604482015260640161043c565b68053444835ec58000008311156125715760405162461bcd60e51b815260206004820152601960248201527f496e76616c69642077657468546f5661756c74416d6f756e7400000000000000604482015260640161043c565b8460345461257f919061509e565b60345560685461259090859061509e565b60685543606b5582156126de577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156125f857600080fd5b505af115801561260c573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018890527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b15801561269c57600080fd5b505af11580156126b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d49190614856565b506126de83613b25565b60408051868152602081018690529081018490527f80d022717ea022455c5886b8dd8a29c037570aae58aeb4d7b136d7a10ec2e4319060600160405180910390a16127296000613b8d565b6127685760405162461bcd60e51b815260206004820152601060248201526f233ab9b29039ba34b63610313637bbb760811b604482015260640161043c565b612770614013565b5060019055505050565b612782612db3565b61279e5760405162461bcd60e51b815260040161043c90614ecd565b60a05481106127df5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b604482015260640161043c565b600060a082815481106127f4576127f46151d8565b60009182526020808320909101546001600160a01b03908116808452609f90925260409092205460a0549193509091169061283190600190615138565b8310156128b35760a0805461284890600190615138565b81548110612858576128586151d8565b60009182526020909120015460a080546001600160a01b039092169185908110612884576128846151d8565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b60a08054806128c4576128c46151c2565b60008281526020808220600019908401810180546001600160a01b031990811690915593019093556001600160a01b03858116808352609f855260409283902080549094169093559051908416815290917f16b7600acff27e39a8a96056b3d533045298de927507f5c1d97e4accde60488c91015b60405180910390a2505050565b61294e612db3565b61296a5760405162461bcd60e51b815260040161043c90614ecd565b8060005b81811015612a1d57600084848381811061298a5761298a6151d8565b905060200201602081019061299f9190614541565b6001600160a01b03161415612a0d5760405162461bcd60e51b815260206004820152602e60248201527f43616e206e6f742073657420616e20656d70747920616464726573732061732060448201526d30903932bbb0b932103a37b5b2b760911b606482015260840161043c565b612a168161517b565b905061296e565b507f04c0b9649497d316554306e53678d5f5f5dbc3a06f97dec13ff4cfe98b986bbc60a48484604051612a5293929190614c86565b60405180910390a1610dc460a4848461429a565b612a6e612db3565b612a8a5760405162461bcd60e51b815260040161043c90614ecd565b603680546001600160a01b0319166001600160a01b0383169081179091556040517f3329861a0008b3348767567d2405492b997abd79a088d0f2cef6b1a09a8e7ff790600090a250565b60335460009061010090046001600160a01b03163314612b065760405162461bcd60e51b815260040161043c90614f59565b60335460ff1615612b295760405162461bcd60e51b815260040161043c90614f2f565b60008051602061522883398151915280546002811415612b5b5760405162461bcd60e51b815260040161043c90614f90565b60028255612b696001613b8d565b925060018255505090565b612b7c612db3565b612b985760405162461bcd60e51b815260040161043c90614ecd565b8082108015612baf57506801bc16d674ec80000081105b8015612bcc5750673782dace9d900000612bc98383615138565b10155b612c185760405162461bcd60e51b815260206004820152601760248201527f496e636f7272656374206675736520696e74657276616c000000000000000000604482015260640161043c565b6069829055606a81905560408051838152602081018390527fcb8d24e46eb3c402bf344ee60a6576cba9ef2f59ea1af3b311520704924e901a91015b60405180910390a15050565b60405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401602060405180830381600087803b158015612ceb57600080fd5b505af1158015612cff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d239190614856565b50565b612d2e612db3565b612d4a5760405162461bcd60e51b815260040161043c90614ecd565b60a354604080516001600160a01b03928316815291831660208301527fe48386b84419f4d36e0f96c10cc3510b6fb1a33795620c5098b22472bbe90796910160405180910390a160a380546001600160a01b0319166001600160a01b0392909216919091179055565b6000612dcb6000805160206152488339815191525490565b6001600160a01b0316336001600160a01b031614905090565b612dec612db3565b612e085760405162461bcd60e51b815260040161043c90614ecd565b612e30817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b0316612e506000805160206152488339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612ed05760405162461bcd60e51b815260040161043c90614e96565b60008051602061522883398151915280546002811415612f025760405162461bcd60e51b815260040161043c90614f90565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614612f575760405162461bcd60e51b815260040161043c90614f04565b612770858585613a27565b60335461010090046001600160a01b03163314612f915760405162461bcd60e51b815260040161043c90614f59565b60335460ff1615612fb45760405162461bcd60e51b815260040161043c90614f2f565b60008484604051612fc6929190614b5d565b604080519182900390912060008181526035602052919091205490915060ff166002816004811115612ffa57612ffa6151ac565b1461303e5760405162461bcd60e51b815260206004820152601460248201527315985b1a59185d1bdc881b9bdd081cdd185ad95960621b604482015260640161043c565b604051633877322b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633877322b90613090908990899089908990600401614d80565b600060405180830381600087803b1580156130aa57600080fd5b505af11580156130be573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166003179055518391507f8c2e15303eb94e531acc988c2a01d1193bdaaa15eda7f16dda85316ed463578d90613113908990899089908990614d80565b60405180910390a2505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461316b5760405162461bcd60e51b815260040161043c90614e96565b6000805160206152288339815191528054600281141561319d5760405162461bcd60e51b815260040161043c90614f90565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561320357600080fd5b505afa158015613217573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061323b91906149a4565b90506000610107548261324e9190615138565b90508015613286576101078290556132867f0000000000000000000000000000000000000000000000000000000000000000826135ed565b5050600182555050565b6036546001600160a01b031633146132ea5760405162461bcd60e51b815260206004820152601960248201527f43616c6c6572206973206e6f7420746865204d6f6e69746f7200000000000000604482015260640161043c565b600060388190556040517fe765a88a37047c5d793dce22b9ceb5a0f5039d276da139b4c7d29613f341f1109190a1565b606060a480548060200260200160405190810160405280929190818152602001828054801561337257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613354575b5050505050905090565b6001600160a01b038281166000908152609f602052604090205416156133d95760405162461bcd60e51b81526020600482015260126024820152711c151bdad95b88185b1c9958591e481cd95d60721b604482015260640161043c565b6001600160a01b038216158015906133f957506001600160a01b03811615155b6134395760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642061646472657373657360781b604482015260640161043c565b6001600160a01b038281166000818152609f6020908152604080832080549587166001600160a01b0319968716811790915560a0805460018101825594527f78fdc8d422c49ced035a9edf18d00d3c6a8d81df210f3e5e448e045e77b41e8890930180549095168417909455925190815290917fef6485b84315f9b1483beffa32aae9a0596890395e3d7521f1c5fbb51790e765910160405180910390a25050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261352d90849061408d565b505050565b82516135459060a49060208601906142fd565b5081518151811461358f5760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420696e7075742061727261797360601b604482015260640161043c565b60005b818110156135e6576135d68482815181106135af576135af6151d8565b60200260200101518483815181106135c9576135c96151d8565b602002602001015161337c565b6135df8161517b565b9050613592565b5050505050565b600081116136365760405162461bcd60e51b81526020600482015260166024820152754d757374206465706f73697420736f6d657468696e6760501b604482015260640161043c565b6040805160008152602081018390526001600160a01b038416917f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62910160405180910390a25050565b60335460ff16156136a25760405162461bcd60e51b815260040161043c90614f2f565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e52253816040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156136ff57600080fd5b505af1158015613713573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061373791906149a4565b905060006068548261374991906150df565b90508047101561379b5760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74206574682062616c616e63650000000000000000604482015260640161043c565b8015610c6c5760006068819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561380457600080fd5b505af1158015613818573d6000803e3d6000fd5b505060a35461385893506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169350169050836134db565b60a354604080516001600160a01b0392831681527f0000000000000000000000000000000000000000000000000000000000000000909216602083015281018290527ff6c07a063ed4e63808eb8da7112d46dbcd38de2b40a73dbcc9353c5a94c7235390606001612c54565b6001600160a01b03811661391a5760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f722069732061646472657373283029000000000000604482015260640161043c565b806001600160a01b031661393a6000805160206152488339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a3612d238160008051602061524883398151915255565b6000613994826101075461415f565b90508061010760008282546139a99190615138565b90915550505050565b60335460ff16156139d55760405162461bcd60e51b815260040161043c90614f2f565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613a0a3390565b6040516001600160a01b03909116815260200160405180910390a1565b60008111613a775760405162461bcd60e51b815260206004820152601760248201527f4d75737420776974686472617720736f6d657468696e67000000000000000000604482015260640161043c565b6001600160a01b038316613ac65760405162461bcd60e51b8152602060048201526016602482015275135d5cdd081cdc1958da599e481c9958da5c1a595b9d60521b604482015260640161043c565b613acf81613985565b613ae36001600160a01b03831684836134db565b6040805160008152602081018390526001600160a01b038416917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989101612939565b6040805160008152602081018390526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398910160405180910390a250565b6000606854471015613ba25761178482614177565b600060685447613bb29190615138565b9050600191506801bc16d674ec8000008110613d96576000613bdd6801bc16d674ec800000836150f7565b90508060346000828254613bf19190615138565b9091555060009050613c0c826801bc16d674ec800000615119565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613c6957600080fd5b505af1158015613c7d573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613d0d57600080fd5b505af1158015613d21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d459190614856565b50613d4f81613b25565b60345460408051848152602081019290925281018290527fbe7040030ff7b347853214bf49820c6d455fedf58f3815f85c7bc5216993682b9060600160405180910390a150505b600060685447613da69190615138565b90506801bc16d674ec8000008110613df85760405162461bcd60e51b8152602060048201526015602482015274556e6578706563746564206163636f756e74696e6760581b604482015260640161043c565b80613e04575050919050565b606954811015613e5e578060686000828254613e2091906150df565b90915550506040518181527f7a745a2c63a535068f52ceca27debd5297bbad5f7f37ec53d044a59d0362445d906020015b60405180910390a161400c565b606a54811115613ffb577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613ec357600080fd5b505af1158015613ed7573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613f6757600080fd5b505af1158015613f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f9f9190614856565b50600160346000828254613fb39190615138565b90915550613fc2905081613b25565b60345460408051918252602082018390527f6aa7e30787b26429ced603a7aba8b19c4b5d5bcf29a3257da953c8d53bcaa3a69101613e51565b61400484614177565b949350505050565b5050919050565b60335460ff1661405c5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161043c565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613a0a565b60006140e2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661418f9092919063ffffffff16565b80519091501561352d57808060200190518101906141009190614856565b61352d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161043c565b600081831061416e5781614170565b825b9392505050565b60008115614187576141876139b2565b506000919050565b6060614004848460008585843b6141e85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161043c565b600080866001600160a01b031685876040516142049190614b6d565b60006040518083038185875af1925050503d8060008114614241576040519150601f19603f3d011682016040523d82523d6000602084013e614246565b606091505b5091509150614256828286614261565b979650505050505050565b60608315614270575081614170565b8251156142805782518084602001fd5b8160405162461bcd60e51b815260040161043c9190614e83565b8280548282559060005260206000209081019282156142ed579160200282015b828111156142ed5781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906142ba565b506142f9929150614352565b5090565b8280548282559060005260206000209081019282156142ed579160200282015b828111156142ed57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061431d565b5b808211156142f95760008155600101614353565b60008083601f84011261437957600080fd5b5081356001600160401b0381111561439057600080fd5b6020830191508360208260051b85010111156143ab57600080fd5b9250929050565b600082601f8301126143c357600080fd5b813560206143d86143d38361507b565b61504b565b80838252828201915082860187848660051b89010111156143f857600080fd5b60005b8581101561442057813561440e81615204565b845292840192908401906001016143fb565b5090979650505050505050565b60008083601f84011261443f57600080fd5b5081356001600160401b0381111561445657600080fd5b6020830191508360208285010111156143ab57600080fd5b600060a0828403121561448057600080fd5b50919050565b600060a0828403121561449857600080fd5b60405160a081018181106001600160401b03821117156144ba576144ba6151ee565b6040529050806144c983614511565b81526144d76020840161452a565b60208201526144e86040840161452a565b604082015260608301356144fb81615219565b6060820152608092830135920191909152919050565b803563ffffffff8116811461452557600080fd5b919050565b80356001600160401b038116811461452557600080fd5b60006020828403121561455357600080fd5b813561417081615204565b60006020828403121561457057600080fd5b815161417081615204565b6000806040838503121561458e57600080fd5b823561459981615204565b915060208301356145a981615204565b809150509250929050565b6000806000606084860312156145c957600080fd5b83356145d481615204565b925060208401356145e481615204565b929592945050506040919091013590565b6000806040838503121561460857600080fd5b823561461381615204565b946020939093013593505050565b6000806020838503121561463457600080fd5b82356001600160401b0381111561464a57600080fd5b61465685828601614367565b90969095509350505050565b60008060006060848603121561467757600080fd5b83356001600160401b038082111561468e57600080fd5b61469a878388016143b2565b945060208601359150808211156146b057600080fd5b6146bc878388016143b2565b935060408601359150808211156146d257600080fd5b506146df868287016143b2565b9150509250925092565b600080600080600080600080610120898b03121561470657600080fd5b88356001600160401b038082111561471d57600080fd5b6147298c838d01614367565b909a50985060208b013591508082111561474257600080fd5b61474e8c838d01614367565b909850965060408b013591508082111561476757600080fd5b506147748b828c01614367565b9095509350506060890135915061478e8a60808b0161446e565b90509295985092959890939650565b600080600060e084860312156147b257600080fd5b83356001600160401b038111156147c857600080fd5b8401601f810186136147d957600080fd5b803560206147e96143d38361507b565b8083825282820191508285018a848660051b880101111561480957600080fd5b600095505b848610156148335761481f8161452a565b83526001959095019491830191830161480e565b50965050860135935061484d915086905060408601614486565b90509250925092565b60006020828403121561486857600080fd5b815161417081615219565b60006020828403121561488557600080fd5b5035919050565b600080600080604085870312156148a257600080fd5b84356001600160401b03808211156148b957600080fd5b6148c58883890161442d565b909650945060208701359150808211156148de57600080fd5b506148eb87828801614367565b95989497509550505050565b600080600080600060e0868803121561490f57600080fd5b85356001600160401b038082111561492657600080fd5b61493289838a0161442d565b9097509550602088013591508082111561494b57600080fd5b5061495888828901614367565b909450925061496c9050876040880161446e565b90509295509295909350565b60008060006060848603121561498d57600080fd5b505081359360208301359350604090920135919050565b6000602082840312156149b657600080fd5b5051919050565b600080604083850312156149d057600080fd5b50508035926020909101359150565b818352600060208085019450848460051b86018460005b878110156144205783830389528135601e19883603018112614a1757600080fd5b870180356001600160401b03811115614a2f57600080fd5b803603891315614a3e57600080fd5b614a4b8582898501614aa6565b9a87019a94505050908401906001016149f6565b8183526000602080850194508260005b85811015614a9b576001600160401b03614a888361452a565b1687529582019590820190600101614a6f565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008151808452614ae781602086016020860161514f565b601f01601f19169290920160200192915050565b63ffffffff614b0982614511565b168252614b186020820161452a565b6001600160401b03808216602085015280614b356040850161452a565b16604085015250506060810135614b4b81615219565b15156060830152608090810135910152565b8183823760009101908152919050565b60008251614b7f81846020870161514f565b9190910192915050565b6001600160a01b03851681526101006020808301829052855191830182905260009161012084019187810191845b81811015614bdc5783516001600160401b031685529382019392820192600101614bb7565b505082935086604086015263ffffffff865116606086015280860151925050506001600160401b0380821660808501528060408601511660a085015250506060830151151560c0830152608083015160e083015295945050505050565b6020808252825182820181905260009190848201906040850190845b81811015614c7a5783516001600160a01b031683529284019291840191600101614c55565b50909695505050505050565b6000604082016040835280865480835260608501915087600052602092508260002060005b82811015614cd05781546001600160a01b031684529284019260019182019101614cab565b505050838103828501528481528590820160005b86811015614d12578235614cf781615204565b6001600160a01b031682529183019190830190600101614ce4565b50979650505050505050565b6000610120808352614d338184018b8d6149df565b90508281036020840152614d4881898b614a5f565b90508281036040840152614d5d8187896149df565b915050836060830152614d736080830184614afb565b9998505050505050505050565b604081526000614d94604083018688614aa6565b8281036020840152614256818587614a5f565b60e081526000614dbb60e083018789614aa6565b8281036020840152614dce818688614a5f565b915050614dde6040830184614afb565b9695505050505050565b608081526000614dfc60808301888a614aa6565b8281036020840152614e0e8188614acf565b90508281036040840152614e23818688614aa6565b915050826060830152979650505050505050565b604081526000614e4b604083018587614aa6565b9050826020830152949350505050565b6020810160058310614e7d57634e487b7160e01b600052602160045260246000fd5b91905290565b6020815260006141706020830184614acf565b60208082526017908201527f43616c6c6572206973206e6f7420746865205661756c74000000000000000000604082015260600190565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b602080825260119082015270155b9cdd5c1c1bdc9d195908185cdcd95d607a1b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601d908201527f43616c6c6572206973206e6f7420746865205265676973747261746f72000000604082015260600190565b6020808252600e908201526d1499595b9d1c985b9d0818d85b1b60921b604082015260600190565b6020808252601c908201527f43616c6c6572206973206e6f7420746865205374726174656769737400000000604082015260600190565b6000808335601e1984360301811261500657600080fd5b8301803591506001600160401b0382111561502057600080fd5b6020019150368190038213156143ab57600080fd5b60008235605e19833603018112614b7f57600080fd5b604051601f8201601f191681016001600160401b0381118282101715615073576150736151ee565b604052919050565b60006001600160401b03821115615094576150946151ee565b5060051b60200190565b600080821280156001600160ff1b03849003851316156150c0576150c0615196565b600160ff1b83900384128116156150d9576150d9615196565b50500190565b600082198211156150f2576150f2615196565b500190565b60008261511457634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561513357615133615196565b500290565b60008282101561514a5761514a615196565b500390565b60005b8381101561516a578181015183820152602001615152565b83811115610dc45750506000910152565b600060001982141561518f5761518f615196565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612d2357600080fd5b8015158114612d2357600080fdfe53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac45357bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4aa264697066735822122058a9dcc12e3eefe5ceabe7ae25ab8de12f838a170fbf7f201c3d36ff8c4ae92964736f6c63430008070033", "libraries": {}, "devdoc": { "author": "Origin Protocol Inc", @@ -1645,7 +1652,7 @@ }, "stateVariables": { "FEE_ACCUMULATOR_ADDRESS": { - "details": "this address will receive Execution layer rewards - These are rewards earned for executing transactions on the Ethereum network as part of block proposals. They include priority fees (fees paid by users for their transactions to be included) and MEV rewards (rewards for arranging transactions in a way that benefits the validator)." + "details": "this address will receive maximal extractable value (MEV) rewards. These are rewards for arranging transactions in a way that benefits the validator." }, "depositedWethAccountedFor": { "details": "This contract receives WETH as the deposit asset, but unlike other strategies doesn't immediately deposit it to an underlying platform. Rather a special privilege account stakes it to the validators. For that reason calling WETH.balanceOf(this) in a deposit function can contain WETH that has just been deposited and also WETH that has previously been deposited. To keep a correct count we need to keep track of WETH that has already been accounted for. This value represents the amount of WETH balance of this contract that has already been accounted for by the deposit events. It is important to note that this variable is not concerned with WETH that is a result of full/partial withdrawal of the validators. It is strictly concerned with WETH that has been deposited and is waiting to be staked." @@ -1733,7 +1740,7 @@ "notice": "Address of the Harvester contract allowed to collect reward tokens" }, "initialize(address[],address[],address[])": { - "notice": "initialize function, to set up initial internal state" + "notice": "Set up initial internal state including 1. approving the SSVNetwork to transfer SSV tokens from this strategy contract 2. setting the recipient of SSV validator MEV rewards to the FeeAccumulator contract." }, "isGovernor()": { "notice": "Returns true if the caller is the current Governor." @@ -1765,6 +1772,9 @@ "safeApproveAllTokens()": { "notice": "Approves the SSV Network contract to transfer SSV tokens for deposits" }, + "setFeeRecipient()": { + "notice": "Set the FeeAccumulator as the address for SSV validators to send MEV rewards to" + }, "setFuseInterval(uint256,uint256)": { "notice": "set fuse interval values" }, @@ -1829,7 +1839,7 @@ "storageLayout": { "storage": [ { - "astId": 24120, + "astId": 43467, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "initialized", "offset": 0, @@ -1837,7 +1847,7 @@ "type": "t_bool" }, { - "astId": 24123, + "astId": 43470, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "initializing", "offset": 1, @@ -1845,7 +1855,7 @@ "type": "t_bool" }, { - "astId": 24163, + "astId": 43510, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "______gap", "offset": 0, @@ -1853,7 +1863,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 17, + "astId": 656, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "_paused", "offset": 0, @@ -1861,7 +1871,7 @@ "type": "t_bool" }, { - "astId": 18692, + "astId": 36364, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "validatorRegistrator", "offset": 1, @@ -1869,7 +1879,7 @@ "type": "t_address" }, { - "astId": 18695, + "astId": 36367, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "activeDepositedValidators", "offset": 0, @@ -1877,15 +1887,15 @@ "type": "t_uint256" }, { - "astId": 18701, + "astId": 36373, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "validatorsStates", "offset": 0, "slot": "53", - "type": "t_mapping(t_bytes32,t_enum(VALIDATOR_STATE)18720)" + "type": "t_mapping(t_bytes32,t_enum(VALIDATOR_STATE)36392)" }, { - "astId": 18704, + "astId": 36376, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "stakingMonitor", "offset": 0, @@ -1893,7 +1903,7 @@ "type": "t_address" }, { - "astId": 18707, + "astId": 36379, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "stakeETHThreshold", "offset": 0, @@ -1901,7 +1911,7 @@ "type": "t_uint256" }, { - "astId": 18710, + "astId": 36382, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "stakeETHTally", "offset": 0, @@ -1909,7 +1919,7 @@ "type": "t_uint256" }, { - "astId": 18714, + "astId": 36386, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "__gap", "offset": 0, @@ -1917,7 +1927,7 @@ "type": "t_array(t_uint256)47_storage" }, { - "astId": 18178, + "astId": 35850, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "consensusRewards", "offset": 0, @@ -1925,7 +1935,7 @@ "type": "t_uint256" }, { - "astId": 18181, + "astId": 35853, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "fuseIntervalStart", "offset": 0, @@ -1933,7 +1943,7 @@ "type": "t_uint256" }, { - "astId": 18184, + "astId": 35856, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "fuseIntervalEnd", "offset": 0, @@ -1941,7 +1951,7 @@ "type": "t_uint256" }, { - "astId": 18187, + "astId": 35859, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "lastFixAccountingBlockNumber", "offset": 0, @@ -1949,7 +1959,7 @@ "type": "t_uint256" }, { - "astId": 18191, + "astId": 35863, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "__gap", "offset": 0, @@ -1957,7 +1967,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 24243, + "astId": 43590, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "_deprecated_platformAddress", "offset": 0, @@ -1965,7 +1975,7 @@ "type": "t_address" }, { - "astId": 24246, + "astId": 43593, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "_deprecated_vaultAddress", "offset": 0, @@ -1973,7 +1983,7 @@ "type": "t_address" }, { - "astId": 24251, + "astId": 43598, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "assetToPToken", "offset": 0, @@ -1981,7 +1991,7 @@ "type": "t_mapping(t_address,t_address)" }, { - "astId": 24255, + "astId": 43602, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "assetsMapped", "offset": 0, @@ -1989,7 +1999,7 @@ "type": "t_array(t_address)dyn_storage" }, { - "astId": 24257, + "astId": 43604, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "_deprecated_rewardTokenAddress", "offset": 0, @@ -1997,7 +2007,7 @@ "type": "t_address" }, { - "astId": 24259, + "astId": 43606, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "_deprecated_rewardLiquidationThreshold", "offset": 0, @@ -2005,7 +2015,7 @@ "type": "t_uint256" }, { - "astId": 24262, + "astId": 43609, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "harvesterAddress", "offset": 0, @@ -2013,7 +2023,7 @@ "type": "t_address" }, { - "astId": 24266, + "astId": 43613, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "rewardTokenAddresses", "offset": 0, @@ -2021,7 +2031,7 @@ "type": "t_array(t_address)dyn_storage" }, { - "astId": 24270, + "astId": 43617, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "_reserved", "offset": 0, @@ -2029,7 +2039,7 @@ "type": "t_array(t_int256)98_storage" }, { - "astId": 17680, + "astId": 35321, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "depositedWethAccountedFor", "offset": 0, @@ -2037,7 +2047,7 @@ "type": "t_uint256" }, { - "astId": 17684, + "astId": 35325, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "__gap", "offset": 0, @@ -2091,7 +2101,7 @@ "label": "bytes32", "numberOfBytes": "32" }, - "t_enum(VALIDATOR_STATE)18720": { + "t_enum(VALIDATOR_STATE)36392": { "encoding": "inplace", "label": "enum ValidatorRegistrator.VALIDATOR_STATE", "numberOfBytes": "1" @@ -2108,12 +2118,12 @@ "numberOfBytes": "32", "value": "t_address" }, - "t_mapping(t_bytes32,t_enum(VALIDATOR_STATE)18720)": { + "t_mapping(t_bytes32,t_enum(VALIDATOR_STATE)36392)": { "encoding": "mapping", "key": "t_bytes32", "label": "mapping(bytes32 => enum ValidatorRegistrator.VALIDATOR_STATE)", "numberOfBytes": "32", - "value": "t_enum(VALIDATOR_STATE)18720" + "value": "t_enum(VALIDATOR_STATE)36392" }, "t_uint256": { "encoding": "inplace", diff --git a/contracts/deployments/holesky/solcInputs/972c1090c9c8a791ed54b54f1c189f16.json b/contracts/deployments/holesky/solcInputs/972c1090c9c8a791ed54b54f1c189f16.json new file mode 100644 index 0000000000..fd2673ab81 --- /dev/null +++ b/contracts/deployments/holesky/solcInputs/972c1090c9c8a791ed54b54f1c189f16.json @@ -0,0 +1,707 @@ +{ + "language": "Solidity", + "sources": { + "@chainlink/contracts-ccip/src/v0.8/ccip/interfaces/IRouterClient.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {Client} from \"../libraries/Client.sol\";\n\ninterface IRouterClient {\n error UnsupportedDestinationChain(uint64 destChainSelector);\n error InsufficientFeeTokenAmount();\n error InvalidMsgValue();\n\n /// @notice Checks if the given chain ID is supported for sending/receiving.\n /// @param chainSelector The chain to check.\n /// @return supported is true if it is supported, false if not.\n function isChainSupported(uint64 chainSelector) external view returns (bool supported);\n\n /// @notice Gets a list of all supported tokens which can be sent or received\n /// to/from a given chain id.\n /// @param chainSelector The chainSelector.\n /// @return tokens The addresses of all tokens that are supported.\n function getSupportedTokens(uint64 chainSelector) external view returns (address[] memory tokens);\n\n /// @param destinationChainSelector The destination chainSelector\n /// @param message The cross-chain CCIP message including data and/or tokens\n /// @return fee returns execution fee for the message\n /// delivery to destination chain, denominated in the feeToken specified in the message.\n /// @dev Reverts with appropriate reason upon invalid message.\n function getFee(\n uint64 destinationChainSelector,\n Client.EVM2AnyMessage memory message\n ) external view returns (uint256 fee);\n\n /// @notice Request a message to be sent to the destination chain\n /// @param destinationChainSelector The destination chain ID\n /// @param message The cross-chain CCIP message including data and/or tokens\n /// @return messageId The message ID\n /// @dev Note if msg.value is larger than the required fee (from getFee) we accept\n /// the overpayment with no refund.\n /// @dev Reverts with appropriate reason upon invalid message.\n function ccipSend(\n uint64 destinationChainSelector,\n Client.EVM2AnyMessage calldata message\n ) external payable returns (bytes32);\n}\n" + }, + "@chainlink/contracts-ccip/src/v0.8/ccip/libraries/Client.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// End consumer library.\nlibrary Client {\n /// @dev RMN depends on this struct, if changing, please notify the RMN maintainers.\n struct EVMTokenAmount {\n address token; // token address on the local chain.\n uint256 amount; // Amount of tokens.\n }\n\n struct Any2EVMMessage {\n bytes32 messageId; // MessageId corresponding to ccipSend on source.\n uint64 sourceChainSelector; // Source chain selector.\n bytes sender; // abi.decode(sender) if coming from an EVM chain.\n bytes data; // payload sent in original message.\n EVMTokenAmount[] destTokenAmounts; // Tokens and their amounts in their destination chain representation.\n }\n\n // If extraArgs is empty bytes, the default is 200k gas limit.\n struct EVM2AnyMessage {\n bytes receiver; // abi.encode(receiver address) for dest EVM chains\n bytes data; // Data payload\n EVMTokenAmount[] tokenAmounts; // Token transfers\n address feeToken; // Address of feeToken. address(0) means you will send msg.value.\n bytes extraArgs; // Populate this with _argsToBytes(EVMExtraArgsV1)\n }\n\n // bytes4(keccak256(\"CCIP EVMExtraArgsV1\"));\n bytes4 public constant EVM_EXTRA_ARGS_V1_TAG = 0x97a657c9;\n struct EVMExtraArgsV1 {\n uint256 gasLimit;\n }\n\n function _argsToBytes(EVMExtraArgsV1 memory extraArgs) internal pure returns (bytes memory bts) {\n return abi.encodeWithSelector(EVM_EXTRA_ARGS_V1_TAG, extraArgs);\n }\n}\n" + }, + "@openzeppelin/contracts/access/AccessControl.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/AccessControl.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IAccessControl.sol\";\nimport \"../utils/Context.sol\";\nimport \"../utils/Strings.sol\";\nimport \"../utils/introspection/ERC165.sol\";\n\n/**\n * @dev Contract module that allows children to implement role-based access\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\n * members except through off-chain means by accessing the contract event logs. Some\n * applications may benefit from on-chain enumerability, for those cases see\n * {AccessControlEnumerable}.\n *\n * Roles are referred to by their `bytes32` identifier. These should be exposed\n * in the external API and be unique. The best way to achieve this is by\n * using `public constant` hash digests:\n *\n * ```\n * bytes32 public constant MY_ROLE = keccak256(\"MY_ROLE\");\n * ```\n *\n * Roles can be used to represent a set of permissions. To restrict access to a\n * function call, use {hasRole}:\n *\n * ```\n * function foo() public {\n * require(hasRole(MY_ROLE, msg.sender));\n * ...\n * }\n * ```\n *\n * Roles can be granted and revoked dynamically via the {grantRole} and\n * {revokeRole} functions. Each role has an associated admin role, and only\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\n *\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\n * that only accounts with this role will be able to grant or revoke other\n * roles. More complex role relationships can be created by using\n * {_setRoleAdmin}.\n *\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\n * grant and revoke this role. Extra precautions should be taken to secure\n * accounts that have been granted it.\n */\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\n struct RoleData {\n mapping(address => bool) members;\n bytes32 adminRole;\n }\n\n mapping(bytes32 => RoleData) private _roles;\n\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\n\n /**\n * @dev Modifier that checks that an account has a specific role. Reverts\n * with a standardized message including the required role.\n *\n * The format of the revert reason is given by the following regular expression:\n *\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\n *\n * _Available since v4.1._\n */\n modifier onlyRole(bytes32 role) {\n _checkRole(role, _msgSender());\n _;\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted `role`.\n */\n function hasRole(bytes32 role, address account) public view override returns (bool) {\n return _roles[role].members[account];\n }\n\n /**\n * @dev Revert with a standard message if `account` is missing `role`.\n *\n * The format of the revert reason is given by the following regular expression:\n *\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\n */\n function _checkRole(bytes32 role, address account) internal view {\n if (!hasRole(role, account)) {\n revert(\n string(\n abi.encodePacked(\n \"AccessControl: account \",\n Strings.toHexString(uint160(account), 20),\n \" is missing role \",\n Strings.toHexString(uint256(role), 32)\n )\n )\n );\n }\n }\n\n /**\n * @dev Returns the admin role that controls `role`. See {grantRole} and\n * {revokeRole}.\n *\n * To change a role's admin, use {_setRoleAdmin}.\n */\n function getRoleAdmin(bytes32 role) public view override returns (bytes32) {\n return _roles[role].adminRole;\n }\n\n /**\n * @dev Grants `role` to `account`.\n *\n * If `account` had not been already granted `role`, emits a {RoleGranted}\n * event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n */\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\n _grantRole(role, account);\n }\n\n /**\n * @dev Revokes `role` from `account`.\n *\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n */\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\n _revokeRole(role, account);\n }\n\n /**\n * @dev Revokes `role` from the calling account.\n *\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\n * purpose is to provide a mechanism for accounts to lose their privileges\n * if they are compromised (such as when a trusted device is misplaced).\n *\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\n * event.\n *\n * Requirements:\n *\n * - the caller must be `account`.\n */\n function renounceRole(bytes32 role, address account) public virtual override {\n require(account == _msgSender(), \"AccessControl: can only renounce roles for self\");\n\n _revokeRole(role, account);\n }\n\n /**\n * @dev Grants `role` to `account`.\n *\n * If `account` had not been already granted `role`, emits a {RoleGranted}\n * event. Note that unlike {grantRole}, this function doesn't perform any\n * checks on the calling account.\n *\n * [WARNING]\n * ====\n * This function should only be called from the constructor when setting\n * up the initial roles for the system.\n *\n * Using this function in any other way is effectively circumventing the admin\n * system imposed by {AccessControl}.\n * ====\n *\n * NOTE: This function is deprecated in favor of {_grantRole}.\n */\n function _setupRole(bytes32 role, address account) internal virtual {\n _grantRole(role, account);\n }\n\n /**\n * @dev Sets `adminRole` as ``role``'s admin role.\n *\n * Emits a {RoleAdminChanged} event.\n */\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\n bytes32 previousAdminRole = getRoleAdmin(role);\n _roles[role].adminRole = adminRole;\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\n }\n\n /**\n * @dev Grants `role` to `account`.\n *\n * Internal function without access restriction.\n */\n function _grantRole(bytes32 role, address account) internal virtual {\n if (!hasRole(role, account)) {\n _roles[role].members[account] = true;\n emit RoleGranted(role, account, _msgSender());\n }\n }\n\n /**\n * @dev Revokes `role` from `account`.\n *\n * Internal function without access restriction.\n */\n function _revokeRole(bytes32 role, address account) internal virtual {\n if (hasRole(role, account)) {\n _roles[role].members[account] = false;\n emit RoleRevoked(role, account, _msgSender());\n }\n }\n}\n" + }, + "@openzeppelin/contracts/access/AccessControlEnumerable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/AccessControlEnumerable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IAccessControlEnumerable.sol\";\nimport \"./AccessControl.sol\";\nimport \"../utils/structs/EnumerableSet.sol\";\n\n/**\n * @dev Extension of {AccessControl} that allows enumerating the members of each role.\n */\nabstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {\n using EnumerableSet for EnumerableSet.AddressSet;\n\n mapping(bytes32 => EnumerableSet.AddressSet) private _roleMembers;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId);\n }\n\n /**\n * @dev Returns one of the accounts that have `role`. `index` must be a\n * value between 0 and {getRoleMemberCount}, non-inclusive.\n *\n * Role bearers are not sorted in any particular way, and their ordering may\n * change at any point.\n *\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\n * you perform all queries on the same block. See the following\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\n * for more information.\n */\n function getRoleMember(bytes32 role, uint256 index) public view override returns (address) {\n return _roleMembers[role].at(index);\n }\n\n /**\n * @dev Returns the number of accounts that have `role`. Can be used\n * together with {getRoleMember} to enumerate all bearers of a role.\n */\n function getRoleMemberCount(bytes32 role) public view override returns (uint256) {\n return _roleMembers[role].length();\n }\n\n /**\n * @dev Overload {_grantRole} to track enumerable memberships\n */\n function _grantRole(bytes32 role, address account) internal virtual override {\n super._grantRole(role, account);\n _roleMembers[role].add(account);\n }\n\n /**\n * @dev Overload {_revokeRole} to track enumerable memberships\n */\n function _revokeRole(bytes32 role, address account) internal virtual override {\n super._revokeRole(role, account);\n _roleMembers[role].remove(account);\n }\n}\n" + }, + "@openzeppelin/contracts/access/IAccessControl.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev External interface of AccessControl declared to support ERC165 detection.\n */\ninterface IAccessControl {\n /**\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\n *\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\n * {RoleAdminChanged} not being emitted signaling this.\n *\n * _Available since v3.1._\n */\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\n\n /**\n * @dev Emitted when `account` is granted `role`.\n *\n * `sender` is the account that originated the contract call, an admin role\n * bearer except when using {AccessControl-_setupRole}.\n */\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\n\n /**\n * @dev Emitted when `account` is revoked `role`.\n *\n * `sender` is the account that originated the contract call:\n * - if using `revokeRole`, it is the admin role bearer\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\n */\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\n\n /**\n * @dev Returns `true` if `account` has been granted `role`.\n */\n function hasRole(bytes32 role, address account) external view returns (bool);\n\n /**\n * @dev Returns the admin role that controls `role`. See {grantRole} and\n * {revokeRole}.\n *\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\n */\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\n\n /**\n * @dev Grants `role` to `account`.\n *\n * If `account` had not been already granted `role`, emits a {RoleGranted}\n * event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n */\n function grantRole(bytes32 role, address account) external;\n\n /**\n * @dev Revokes `role` from `account`.\n *\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n */\n function revokeRole(bytes32 role, address account) external;\n\n /**\n * @dev Revokes `role` from the calling account.\n *\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\n * purpose is to provide a mechanism for accounts to lose their privileges\n * if they are compromised (such as when a trusted device is misplaced).\n *\n * If the calling account had been granted `role`, emits a {RoleRevoked}\n * event.\n *\n * Requirements:\n *\n * - the caller must be `account`.\n */\n function renounceRole(bytes32 role, address account) external;\n}\n" + }, + "@openzeppelin/contracts/access/IAccessControlEnumerable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControlEnumerable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IAccessControl.sol\";\n\n/**\n * @dev External interface of AccessControlEnumerable declared to support ERC165 detection.\n */\ninterface IAccessControlEnumerable is IAccessControl {\n /**\n * @dev Returns one of the accounts that have `role`. `index` must be a\n * value between 0 and {getRoleMemberCount}, non-inclusive.\n *\n * Role bearers are not sorted in any particular way, and their ordering may\n * change at any point.\n *\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\n * you perform all queries on the same block. See the following\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\n * for more information.\n */\n function getRoleMember(bytes32 role, uint256 index) external view returns (address);\n\n /**\n * @dev Returns the number of accounts that have `role`. Can be used\n * together with {getRoleMember} to enumerate all bearers of a role.\n */\n function getRoleMemberCount(bytes32 role) external view returns (uint256);\n}\n" + }, + "@openzeppelin/contracts/security/Pausable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract Pausable is Context {\n /**\n * @dev Emitted when the pause is triggered by `account`.\n */\n event Paused(address account);\n\n /**\n * @dev Emitted when the pause is lifted by `account`.\n */\n event Unpaused(address account);\n\n bool private _paused;\n\n /**\n * @dev Initializes the contract in unpaused state.\n */\n constructor() {\n _paused = false;\n }\n\n /**\n * @dev Returns true if the contract is paused, and false otherwise.\n */\n function paused() public view virtual returns (bool) {\n return _paused;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is not paused.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n modifier whenNotPaused() {\n require(!paused(), \"Pausable: paused\");\n _;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is paused.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n modifier whenPaused() {\n require(paused(), \"Pausable: not paused\");\n _;\n }\n\n /**\n * @dev Triggers stopped state.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n function _pause() internal virtual whenNotPaused {\n _paused = true;\n emit Paused(_msgSender());\n }\n\n /**\n * @dev Returns to normal state.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n function _unpause() internal virtual whenPaused {\n _paused = false;\n emit Unpaused(_msgSender());\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/ERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC20.sol\";\nimport \"./extensions/IERC20Metadata.sol\";\nimport \"../../utils/Context.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC20\n * applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20 is Context, IERC20, IERC20Metadata {\n mapping(address => uint256) private _balances;\n\n mapping(address => mapping(address => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n\n /**\n * @dev Sets the values for {name} and {symbol}.\n *\n * The default value of {decimals} is 18. To select a different value for\n * {decimals} you should overload it.\n *\n * All two of these values are immutable: they can only be set once during\n * construction.\n */\n constructor(string memory name_, string memory symbol_) {\n _name = name_;\n _symbol = symbol_;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei. This is the value {ERC20} uses, unless this function is\n * overridden;\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view virtual override returns (uint8) {\n return 18;\n }\n\n /**\n * @dev See {IERC20-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @dev See {IERC20-balanceOf}.\n */\n function balanceOf(address account) public view virtual override returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `recipient` cannot be the zero address.\n * - the caller must have a balance of at least `amount`.\n */\n function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(_msgSender(), recipient, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-allowance}.\n */\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See {IERC20-approve}.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\n _approve(_msgSender(), spender, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-transferFrom}.\n *\n * Emits an {Approval} event indicating the updated allowance. This is not\n * required by the EIP. See the note at the beginning of {ERC20}.\n *\n * Requirements:\n *\n * - `sender` and `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n * - the caller must have allowance for ``sender``'s tokens of at least\n * `amount`.\n */\n function transferFrom(\n address sender,\n address recipient,\n uint256 amount\n ) public virtual override returns (bool) {\n _transfer(sender, recipient, amount);\n\n uint256 currentAllowance = _allowances[sender][_msgSender()];\n require(currentAllowance >= amount, \"ERC20: transfer amount exceeds allowance\");\n unchecked {\n _approve(sender, _msgSender(), currentAllowance - amount);\n }\n\n return true;\n }\n\n /**\n * @dev Atomically increases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\n return true;\n }\n\n /**\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `spender` must have allowance for the caller of at least\n * `subtractedValue`.\n */\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n uint256 currentAllowance = _allowances[_msgSender()][spender];\n require(currentAllowance >= subtractedValue, \"ERC20: decreased allowance below zero\");\n unchecked {\n _approve(_msgSender(), spender, currentAllowance - subtractedValue);\n }\n\n return true;\n }\n\n /**\n * @dev Moves `amount` of tokens from `sender` to `recipient`.\n *\n * This internal function is equivalent to {transfer}, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a {Transfer} event.\n *\n * Requirements:\n *\n * - `sender` cannot be the zero address.\n * - `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n */\n function _transfer(\n address sender,\n address recipient,\n uint256 amount\n ) internal virtual {\n require(sender != address(0), \"ERC20: transfer from the zero address\");\n require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n _beforeTokenTransfer(sender, recipient, amount);\n\n uint256 senderBalance = _balances[sender];\n require(senderBalance >= amount, \"ERC20: transfer amount exceeds balance\");\n unchecked {\n _balances[sender] = senderBalance - amount;\n }\n _balances[recipient] += amount;\n\n emit Transfer(sender, recipient, amount);\n\n _afterTokenTransfer(sender, recipient, amount);\n }\n\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n * the total supply.\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function _mint(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: mint to the zero address\");\n\n _beforeTokenTransfer(address(0), account, amount);\n\n _totalSupply += amount;\n _balances[account] += amount;\n emit Transfer(address(0), account, amount);\n\n _afterTokenTransfer(address(0), account, amount);\n }\n\n /**\n * @dev Destroys `amount` tokens from `account`, reducing the\n * total supply.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens.\n */\n function _burn(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: burn from the zero address\");\n\n _beforeTokenTransfer(account, address(0), amount);\n\n uint256 accountBalance = _balances[account];\n require(accountBalance >= amount, \"ERC20: burn amount exceeds balance\");\n unchecked {\n _balances[account] = accountBalance - amount;\n }\n _totalSupply -= amount;\n\n emit Transfer(account, address(0), amount);\n\n _afterTokenTransfer(account, address(0), amount);\n }\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n *\n * This internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n */\n function _approve(\n address owner,\n address spender,\n uint256 amount\n ) internal virtual {\n require(owner != address(0), \"ERC20: approve from the zero address\");\n require(spender != address(0), \"ERC20: approve to the zero address\");\n\n _allowances[owner][spender] = amount;\n emit Approval(owner, spender, amount);\n }\n\n /**\n * @dev Hook that is called before any transfer of tokens. This includes\n * minting and burning.\n *\n * Calling conditions:\n *\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * will be transferred to `to`.\n * - when `from` is zero, `amount` tokens will be minted for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address from,\n address to,\n uint256 amount\n ) internal virtual {}\n\n /**\n * @dev Hook that is called after any transfer of tokens. This includes\n * minting and burning.\n *\n * Calling conditions:\n *\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * has been transferred to `to`.\n * - when `from` is zero, `amount` tokens have been minted for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _afterTokenTransfer(\n address from,\n address to,\n uint256 amount\n ) internal virtual {}\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n *\n * _Available since v4.1._\n */\ninterface IERC20Metadata is IERC20 {\n /**\n * @dev Returns the name of the token.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n */\n function decimals() external view returns (uint8);\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(\n address sender,\n address recipient,\n uint256 amount\n ) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../IERC20.sol\";\nimport \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n using Address for address;\n\n function safeTransfer(\n IERC20 token,\n address to,\n uint256 value\n ) internal {\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\n }\n\n function safeTransferFrom(\n IERC20 token,\n address from,\n address to,\n uint256 value\n ) internal {\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\n }\n\n /**\n * @dev Deprecated. This function has issues similar to the ones found in\n * {IERC20-approve}, and its usage is discouraged.\n *\n * Whenever possible, use {safeIncreaseAllowance} and\n * {safeDecreaseAllowance} instead.\n */\n function safeApprove(\n IERC20 token,\n address spender,\n uint256 value\n ) internal {\n // safeApprove should only be called when setting an initial allowance,\n // or when resetting it to zero. To increase and decrease it, use\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\n require(\n (value == 0) || (token.allowance(address(this), spender) == 0),\n \"SafeERC20: approve from non-zero to non-zero allowance\"\n );\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\n }\n\n function safeIncreaseAllowance(\n IERC20 token,\n address spender,\n uint256 value\n ) internal {\n uint256 newAllowance = token.allowance(address(this), spender) + value;\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n }\n\n function safeDecreaseAllowance(\n IERC20 token,\n address spender,\n uint256 value\n ) internal {\n unchecked {\n uint256 oldAllowance = token.allowance(address(this), spender);\n require(oldAllowance >= value, \"SafeERC20: decreased allowance below zero\");\n uint256 newAllowance = oldAllowance - value;\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\n // the target address contains contract code and also asserts for success in the low-level call.\n\n bytes memory returndata = address(token).functionCall(data, \"SafeERC20: low-level call failed\");\n if (returndata.length > 0) {\n // Return data is optional\n require(abi.decode(returndata, (bool)), \"SafeERC20: ERC20 operation did not succeed\");\n }\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721Receiver {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(\n address operator,\n address from,\n uint256 tokenId,\n bytes calldata data\n ) external returns (bytes4);\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n assembly {\n size := extcodesize(account)\n }\n return size > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "@openzeppelin/contracts/utils/math/Math.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a >= b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds up instead\n * of rounding down.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a / b + (a % b == 0 ? 0 : 1);\n }\n}\n" + }, + "@openzeppelin/contracts/utils/math/SafeCast.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n *\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\n * all math on `uint256` and `int256` and then downcasting.\n */\nlibrary SafeCast {\n /**\n * @dev Returns the downcasted uint224 from uint256, reverting on\n * overflow (when the input is greater than largest uint224).\n *\n * Counterpart to Solidity's `uint224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toUint224(uint256 value) internal pure returns (uint224) {\n require(value <= type(uint224).max, \"SafeCast: value doesn't fit in 224 bits\");\n return uint224(value);\n }\n\n /**\n * @dev Returns the downcasted uint128 from uint256, reverting on\n * overflow (when the input is greater than largest uint128).\n *\n * Counterpart to Solidity's `uint128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toUint128(uint256 value) internal pure returns (uint128) {\n require(value <= type(uint128).max, \"SafeCast: value doesn't fit in 128 bits\");\n return uint128(value);\n }\n\n /**\n * @dev Returns the downcasted uint96 from uint256, reverting on\n * overflow (when the input is greater than largest uint96).\n *\n * Counterpart to Solidity's `uint96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toUint96(uint256 value) internal pure returns (uint96) {\n require(value <= type(uint96).max, \"SafeCast: value doesn't fit in 96 bits\");\n return uint96(value);\n }\n\n /**\n * @dev Returns the downcasted uint64 from uint256, reverting on\n * overflow (when the input is greater than largest uint64).\n *\n * Counterpart to Solidity's `uint64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toUint64(uint256 value) internal pure returns (uint64) {\n require(value <= type(uint64).max, \"SafeCast: value doesn't fit in 64 bits\");\n return uint64(value);\n }\n\n /**\n * @dev Returns the downcasted uint32 from uint256, reverting on\n * overflow (when the input is greater than largest uint32).\n *\n * Counterpart to Solidity's `uint32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toUint32(uint256 value) internal pure returns (uint32) {\n require(value <= type(uint32).max, \"SafeCast: value doesn't fit in 32 bits\");\n return uint32(value);\n }\n\n /**\n * @dev Returns the downcasted uint16 from uint256, reverting on\n * overflow (when the input is greater than largest uint16).\n *\n * Counterpart to Solidity's `uint16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toUint16(uint256 value) internal pure returns (uint16) {\n require(value <= type(uint16).max, \"SafeCast: value doesn't fit in 16 bits\");\n return uint16(value);\n }\n\n /**\n * @dev Returns the downcasted uint8 from uint256, reverting on\n * overflow (when the input is greater than largest uint8).\n *\n * Counterpart to Solidity's `uint8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits.\n */\n function toUint8(uint256 value) internal pure returns (uint8) {\n require(value <= type(uint8).max, \"SafeCast: value doesn't fit in 8 bits\");\n return uint8(value);\n }\n\n /**\n * @dev Converts a signed int256 into an unsigned uint256.\n *\n * Requirements:\n *\n * - input must be greater than or equal to 0.\n */\n function toUint256(int256 value) internal pure returns (uint256) {\n require(value >= 0, \"SafeCast: value must be positive\");\n return uint256(value);\n }\n\n /**\n * @dev Returns the downcasted int128 from int256, reverting on\n * overflow (when the input is less than smallest int128 or\n * greater than largest int128).\n *\n * Counterpart to Solidity's `int128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n *\n * _Available since v3.1._\n */\n function toInt128(int256 value) internal pure returns (int128) {\n require(value >= type(int128).min && value <= type(int128).max, \"SafeCast: value doesn't fit in 128 bits\");\n return int128(value);\n }\n\n /**\n * @dev Returns the downcasted int64 from int256, reverting on\n * overflow (when the input is less than smallest int64 or\n * greater than largest int64).\n *\n * Counterpart to Solidity's `int64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n *\n * _Available since v3.1._\n */\n function toInt64(int256 value) internal pure returns (int64) {\n require(value >= type(int64).min && value <= type(int64).max, \"SafeCast: value doesn't fit in 64 bits\");\n return int64(value);\n }\n\n /**\n * @dev Returns the downcasted int32 from int256, reverting on\n * overflow (when the input is less than smallest int32 or\n * greater than largest int32).\n *\n * Counterpart to Solidity's `int32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n *\n * _Available since v3.1._\n */\n function toInt32(int256 value) internal pure returns (int32) {\n require(value >= type(int32).min && value <= type(int32).max, \"SafeCast: value doesn't fit in 32 bits\");\n return int32(value);\n }\n\n /**\n * @dev Returns the downcasted int16 from int256, reverting on\n * overflow (when the input is less than smallest int16 or\n * greater than largest int16).\n *\n * Counterpart to Solidity's `int16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n *\n * _Available since v3.1._\n */\n function toInt16(int256 value) internal pure returns (int16) {\n require(value >= type(int16).min && value <= type(int16).max, \"SafeCast: value doesn't fit in 16 bits\");\n return int16(value);\n }\n\n /**\n * @dev Returns the downcasted int8 from int256, reverting on\n * overflow (when the input is less than smallest int8 or\n * greater than largest int8).\n *\n * Counterpart to Solidity's `int8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits.\n *\n * _Available since v3.1._\n */\n function toInt8(int256 value) internal pure returns (int8) {\n require(value >= type(int8).min && value <= type(int8).max, \"SafeCast: value doesn't fit in 8 bits\");\n return int8(value);\n }\n\n /**\n * @dev Converts an unsigned uint256 into a signed int256.\n *\n * Requirements:\n *\n * - input must be less than or equal to maxInt256.\n */\n function toInt256(uint256 value) internal pure returns (int256) {\n // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\n require(value <= uint256(type(int256).max), \"SafeCast: value doesn't fit in an int256\");\n return int256(value);\n }\n}\n" + }, + "@openzeppelin/contracts/utils/math/SafeMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)\n\npragma solidity ^0.8.0;\n\n// CAUTION\n// This version of SafeMath should only be used with Solidity 0.8 or later,\n// because it relies on the compiler's built in overflow checks.\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations.\n *\n * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler\n * now has built in overflow checking.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n return a + b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n return a * b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator.\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n unchecked {\n require(b <= a, errorMessage);\n return a - b;\n }\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n unchecked {\n require(b > 0, errorMessage);\n return a / b;\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n unchecked {\n require(b > 0, errorMessage);\n return a % b;\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Strings.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant _HEX_SYMBOLS = \"0123456789abcdef\";\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n // Inspired by OraclizeAPI's implementation - MIT licence\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\n\n if (value == 0) {\n return \"0\";\n }\n uint256 temp = value;\n uint256 digits;\n while (temp != 0) {\n digits++;\n temp /= 10;\n }\n bytes memory buffer = new bytes(digits);\n while (value != 0) {\n digits -= 1;\n buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\n value /= 10;\n }\n return string(buffer);\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n if (value == 0) {\n return \"0x00\";\n }\n uint256 temp = value;\n uint256 length = 0;\n while (temp != 0) {\n length++;\n temp >>= 8;\n }\n return toHexString(value, length);\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = _HEX_SYMBOLS[value & 0xf];\n value >>= 4;\n }\n require(value == 0, \"Strings: hex length insufficient\");\n return string(buffer);\n }\n}\n" + }, + "@openzeppelin/contracts/utils/structs/EnumerableSet.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/structs/EnumerableSet.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for managing\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n * types.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableSet for EnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * EnumerableSet.AddressSet private mySet;\n * }\n * ```\n *\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\n * and `uint256` (`UintSet`) are supported.\n */\nlibrary EnumerableSet {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Set type with\n // bytes32 values.\n // The Set implementation uses private functions, and user-facing\n // implementations (such as AddressSet) are just wrappers around the\n // underlying Set.\n // This means that we can only create new EnumerableSets for types that fit\n // in bytes32.\n\n struct Set {\n // Storage of set values\n bytes32[] _values;\n // Position of the value in the `values` array, plus 1 because index 0\n // means a value is not in the set.\n mapping(bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function _add(Set storage set, bytes32 value) private returns (bool) {\n if (!_contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._indexes[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function _remove(Set storage set, bytes32 value) private returns (bool) {\n // We read and store the value's index to prevent multiple reads from the same storage slot\n uint256 valueIndex = set._indexes[value];\n\n if (valueIndex != 0) {\n // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = valueIndex - 1;\n uint256 lastIndex = set._values.length - 1;\n\n if (lastIndex != toDeleteIndex) {\n bytes32 lastvalue = set._values[lastIndex];\n\n // Move the last value to the index where the value to delete is\n set._values[toDeleteIndex] = lastvalue;\n // Update the index for the moved value\n set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\n }\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the index for the deleted slot\n delete set._indexes[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\n return set._indexes[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function _length(Set storage set) private view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\n return set._values[index];\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function _values(Set storage set) private view returns (bytes32[] memory) {\n return set._values;\n }\n\n // Bytes32Set\n\n struct Bytes32Set {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _add(set._inner, value);\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _remove(set._inner, value);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\n return _contains(set._inner, value);\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(Bytes32Set storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\n return _at(set._inner, index);\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\n return _values(set._inner);\n }\n\n // AddressSet\n\n struct AddressSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n return _add(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n return _remove(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return _contains(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(AddressSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n return address(uint160(uint256(_at(set._inner, index))));\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(AddressSet storage set) internal view returns (address[] memory) {\n bytes32[] memory store = _values(set._inner);\n address[] memory result;\n\n assembly {\n result := store\n }\n\n return result;\n }\n\n // UintSet\n\n struct UintSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(UintSet storage set, uint256 value) internal returns (bool) {\n return _add(set._inner, bytes32(value));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\n return _remove(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\n return _contains(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function length(UintSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\n return uint256(_at(set._inner, index));\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(UintSet storage set) internal view returns (uint256[] memory) {\n bytes32[] memory store = _values(set._inner);\n uint256[] memory result;\n\n assembly {\n result := store\n }\n\n return result;\n }\n}\n" + }, + "contracts/buyback/AbstractBuyback.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { Strategizable } from \"../governance/Strategizable.sol\";\nimport \"../interfaces/chainlink/AggregatorV3Interface.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { ICVXLocker } from \"../interfaces/ICVXLocker.sol\";\nimport { ISwapper } from \"../interfaces/ISwapper.sol\";\n\nimport { Initializable } from \"../utils/Initializable.sol\";\n\nabstract contract AbstractBuyback is Initializable, Strategizable {\n using SafeERC20 for IERC20;\n\n event SwapRouterUpdated(address indexed _address);\n\n event RewardsSourceUpdated(address indexed _address);\n event TreasuryManagerUpdated(address indexed _address);\n event CVXShareBpsUpdated(uint256 bps);\n\n // Emitted whenever OUSD/OETH is swapped for OGN/CVX or any other token\n event OTokenBuyback(\n address indexed oToken,\n address indexed swappedFor,\n uint256 swapAmountIn,\n uint256 amountOut\n );\n\n // Address of 1-inch Swap Router\n address public swapRouter;\n\n // slither-disable-next-line constable-states\n address private __deprecated_ousd;\n // slither-disable-next-line constable-states\n address private __deprecated_ogv;\n // slither-disable-next-line constable-states\n address private __deprecated_usdt;\n // slither-disable-next-line constable-states\n address private __deprecated_weth9;\n\n // Address that receives OGN after swaps\n address public rewardsSource;\n\n // Address that receives all other tokens after swaps\n address public treasuryManager;\n\n // slither-disable-next-line constable-states\n uint256 private __deprecated_treasuryBps;\n\n address public immutable oToken;\n address public immutable ogn;\n address public immutable cvx;\n address public immutable cvxLocker;\n\n // Amount of `oToken` balance to use for OGN buyback\n uint256 public balanceForOGN;\n\n // Amount of `oToken` balance to use for CVX buyback\n uint256 public balanceForCVX;\n\n // Percentage of `oToken` balance to be used for CVX\n uint256 public cvxShareBps; // 10000 = 100%\n\n constructor(\n address _oToken,\n address _ogn,\n address _cvx,\n address _cvxLocker\n ) {\n // Make sure nobody owns the implementation contract\n _setGovernor(address(0));\n\n oToken = _oToken;\n ogn = _ogn;\n cvx = _cvx;\n cvxLocker = _cvxLocker;\n }\n\n /**\n * @param _swapRouter Address of Uniswap V3 Router\n * @param _strategistAddr Address of Strategist multi-sig wallet\n * @param _treasuryManagerAddr Address that receives the treasury's share of OUSD\n * @param _rewardsSource Address of RewardsSource contract\n * @param _cvxShareBps Percentage of balance to use for CVX\n */\n function initialize(\n address _swapRouter,\n address _strategistAddr,\n address _treasuryManagerAddr,\n address _rewardsSource,\n uint256 _cvxShareBps\n ) external onlyGovernor initializer {\n _setStrategistAddr(_strategistAddr);\n\n _setSwapRouter(_swapRouter);\n _setRewardsSource(_rewardsSource);\n\n _setTreasuryManager(_treasuryManagerAddr);\n\n _setCVXShareBps(_cvxShareBps);\n }\n\n /**\n * @dev Set address of Uniswap Universal Router for performing liquidation\n * of platform fee tokens. Setting to 0x0 will pause swaps.\n *\n * @param _router Address of the Uniswap Universal router\n */\n function setSwapRouter(address _router) external onlyGovernor {\n _setSwapRouter(_router);\n }\n\n function _setSwapRouter(address _router) internal {\n address oldRouter = swapRouter;\n swapRouter = _router;\n\n if (oldRouter != address(0)) {\n // Remove allowance of old router, if any\n\n if (IERC20(ogn).allowance(address(this), oldRouter) != 0) {\n // slither-disable-next-line unused-return\n IERC20(ogn).safeApprove(oldRouter, 0);\n }\n\n if (IERC20(cvx).allowance(address(this), oldRouter) != 0) {\n // slither-disable-next-line unused-return\n IERC20(cvx).safeApprove(oldRouter, 0);\n }\n }\n\n emit SwapRouterUpdated(_router);\n }\n\n /**\n * @dev Sets the address that receives the OGN buyback rewards\n * @param _address Address\n */\n function setRewardsSource(address _address) external onlyGovernor {\n _setRewardsSource(_address);\n }\n\n function _setRewardsSource(address _address) internal {\n require(_address != address(0), \"Address not set\");\n rewardsSource = _address;\n emit RewardsSourceUpdated(_address);\n }\n\n /**\n * @dev Sets the address that can receive and manage the funds for Treasury\n * @param _address Address\n */\n function setTreasuryManager(address _address) external onlyGovernor {\n _setTreasuryManager(_address);\n }\n\n function _setTreasuryManager(address _address) internal {\n require(_address != address(0), \"Address not set\");\n treasuryManager = _address;\n emit TreasuryManagerUpdated(_address);\n }\n\n /**\n * @dev Sets the percentage of oToken to use for Flywheel tokens\n * @param _bps BPS, 10000 to 100%\n */\n function setCVXShareBps(uint256 _bps) external onlyGovernor {\n _setCVXShareBps(_bps);\n }\n\n function _setCVXShareBps(uint256 _bps) internal {\n require(_bps <= 10000, \"Invalid bps value\");\n cvxShareBps = _bps;\n emit CVXShareBpsUpdated(_bps);\n }\n\n /**\n * @dev Computes the split of oToken balance that can be\n * used for OGN and CVX buybacks.\n */\n function _updateBuybackSplits()\n internal\n returns (uint256 _balanceForOGN, uint256 _balanceForCVX)\n {\n _balanceForOGN = balanceForOGN;\n _balanceForCVX = balanceForCVX;\n\n uint256 totalBalance = IERC20(oToken).balanceOf(address(this));\n uint256 unsplitBalance = totalBalance - _balanceForOGN - _balanceForCVX;\n\n // Check if all balance is accounted for\n if (unsplitBalance != 0) {\n // If not, split unaccounted balance based on `cvxShareBps`\n uint256 addToCVX = (unsplitBalance * cvxShareBps) / 10000;\n _balanceForCVX = _balanceForCVX + addToCVX;\n _balanceForOGN = _balanceForOGN + unsplitBalance - addToCVX;\n\n // Update storage\n balanceForOGN = _balanceForOGN;\n balanceForCVX = _balanceForCVX;\n }\n }\n\n function updateBuybackSplits() external onlyGovernor {\n // slither-disable-next-line unused-return\n _updateBuybackSplits();\n }\n\n function _swapToken(\n address tokenOut,\n uint256 oTokenAmount,\n uint256 minAmountOut,\n bytes calldata swapData\n ) internal returns (uint256 amountOut) {\n require(oTokenAmount > 0, \"Invalid Swap Amount\");\n require(swapRouter != address(0), \"Swap Router not set\");\n require(minAmountOut > 0, \"Invalid minAmount\");\n\n // Transfer OToken to Swapper for swapping\n // slither-disable-next-line unchecked-transfer unused-return\n IERC20(oToken).transfer(swapRouter, oTokenAmount);\n\n // Swap\n amountOut = ISwapper(swapRouter).swap(\n oToken,\n tokenOut,\n oTokenAmount,\n minAmountOut,\n swapData\n );\n\n require(amountOut >= minAmountOut, \"Higher Slippage\");\n\n emit OTokenBuyback(oToken, tokenOut, oTokenAmount, amountOut);\n }\n\n /**\n * @dev Swaps `oTokenAmount` to OGN\n * @param oTokenAmount Amount of OUSD/OETH to swap\n * @param minOGN Minimum OGN to receive for oTokenAmount\n * @param swapData 1inch Swap Data\n */\n function swapForOGN(\n uint256 oTokenAmount,\n uint256 minOGN,\n bytes calldata swapData\n ) external onlyGovernorOrStrategist nonReentrant {\n (uint256 _amountForOGN, ) = _updateBuybackSplits();\n require(_amountForOGN >= oTokenAmount, \"Balance underflow\");\n require(rewardsSource != address(0), \"RewardsSource contract not set\");\n\n unchecked {\n // Subtract the amount to swap from net balance\n balanceForOGN = _amountForOGN - oTokenAmount;\n }\n\n uint256 ognReceived = _swapToken(ogn, oTokenAmount, minOGN, swapData);\n\n // Transfer OGN received to RewardsSource contract\n // slither-disable-next-line unchecked-transfer unused-return\n IERC20(ogn).transfer(rewardsSource, ognReceived);\n }\n\n /**\n * @dev Swaps `oTokenAmount` to CVX\n * @param oTokenAmount Amount of OUSD/OETH to swap\n * @param minCVX Minimum CVX to receive for oTokenAmount\n * @param swapData 1inch Swap Data\n */\n function swapForCVX(\n uint256 oTokenAmount,\n uint256 minCVX,\n bytes calldata swapData\n ) external onlyGovernorOrStrategist nonReentrant {\n (, uint256 _amountForCVX) = _updateBuybackSplits();\n require(_amountForCVX >= oTokenAmount, \"Balance underflow\");\n\n unchecked {\n // Subtract the amount to swap from net balance\n balanceForCVX = _amountForCVX - oTokenAmount;\n }\n\n uint256 cvxReceived = _swapToken(cvx, oTokenAmount, minCVX, swapData);\n\n // Lock all CVX\n _lockAllCVX(cvxReceived);\n }\n\n /**\n * @dev Locks all CVX held by the contract on behalf of the Treasury Manager\n */\n function lockAllCVX() external onlyGovernorOrStrategist {\n _lockAllCVX(IERC20(cvx).balanceOf(address(this)));\n }\n\n function _lockAllCVX(uint256 cvxAmount) internal {\n require(\n treasuryManager != address(0),\n \"Treasury manager address not set\"\n );\n\n // Lock all available CVX on behalf of `treasuryManager`\n ICVXLocker(cvxLocker).lock(treasuryManager, cvxAmount, 0);\n }\n\n /**\n * @dev Approve CVX Locker to move CVX held by this contract\n */\n function safeApproveAllTokens() external onlyGovernorOrStrategist {\n IERC20(cvx).safeApprove(cvxLocker, type(uint256).max);\n }\n\n /**\n * @notice Owner function to withdraw a specific amount of a token\n * @param token token to be transferered\n * @param amount amount of the token to be transferred\n */\n function transferToken(address token, uint256 amount)\n external\n onlyGovernor\n nonReentrant\n {\n IERC20(token).safeTransfer(_governor(), amount);\n }\n}\n" + }, + "contracts/buyback/OETHBuyback.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { AbstractBuyback } from \"./AbstractBuyback.sol\";\n\ncontract OETHBuyback is AbstractBuyback {\n constructor(\n address _oToken,\n address _ogn,\n address _cvx,\n address _cvxLocker\n ) AbstractBuyback(_oToken, _ogn, _cvx, _cvxLocker) {}\n}\n" + }, + "contracts/buyback/OUSDBuyback.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { AbstractBuyback } from \"./AbstractBuyback.sol\";\n\ncontract OUSDBuyback is AbstractBuyback {\n constructor(\n address _oToken,\n address _ogn,\n address _cvx,\n address _cvxLocker\n ) AbstractBuyback(_oToken, _ogn, _cvx, _cvxLocker) {}\n}\n" + }, + "contracts/compensation/CompensationClaims.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { SafeMath } from \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\n\nimport { Initializable } from \"../utils/Initializable.sol\";\nimport { Governable } from \"../governance/Governable.sol\";\n\n/**\n * @title Compensation Claims\n * @author Origin Protocol Inc\n * @dev Airdrop for ERC20 tokens.\n *\n * Provides a coin airdrop with a verification period in which everyone\n * can check that all claims are correct before any actual funds are moved\n * to the contract.\n *\n * - Users can claim funds during the claim period.\n *\n * - The adjuster can set the amount of each user's claim,\n * but only when unlocked, and not during the claim period.\n *\n * - The governor can unlock and lock the adjuster, outside the claim period.\n * - The governor can start the claim period, if it's not started.\n * - The governor can collect any remaining funds after the claim period is over.\n *\n * Intended use sequence:\n *\n * 1. Governor unlocks the adjuster\n * 2. Adjuster uploads claims\n * 3. Governor locks the adjuster\n * 4. Everyone verifies that the claim amounts and totals are correct\n * 5. Payout funds are moved to the contract\n * 6. The claim period starts\n * 7. Users claim funds\n * 8. The claim period ends\n * 9. Governor can collect any remaing funds\n *\n */\ncontract CompensationClaims is Governable {\n address public adjuster;\n address public token;\n uint256 public end;\n uint256 public totalClaims;\n mapping(address => uint256) claims;\n bool public isAdjusterLocked;\n\n using SafeMath for uint256;\n\n event Claim(address indexed recipient, uint256 amount);\n event ClaimSet(address indexed recipient, uint256 amount);\n event Start(uint256 end);\n event Lock();\n event Unlock();\n event Collect(address indexed coin, uint256 amount);\n\n constructor(address _token, address _adjuster) onlyGovernor {\n token = _token;\n adjuster = _adjuster;\n isAdjusterLocked = true;\n }\n\n function balanceOf(address _account) external view returns (uint256) {\n return claims[_account];\n }\n\n function decimals() external view returns (uint8) {\n return IERC20Decimals(token).decimals();\n }\n\n /* -- User -- */\n\n function claim(address _recipient) external onlyInClaimPeriod nonReentrant {\n uint256 amount = claims[_recipient];\n require(amount > 0, \"Amount must be greater than 0\");\n claims[_recipient] = 0;\n totalClaims = totalClaims.sub(amount);\n SafeERC20.safeTransfer(IERC20(token), _recipient, amount);\n emit Claim(_recipient, amount);\n }\n\n /* -- Adjustor -- */\n\n function setClaims(\n address[] calldata _addresses,\n uint256[] calldata _amounts\n ) external notInClaimPeriod onlyUnlockedAdjuster {\n require(\n _addresses.length == _amounts.length,\n \"Addresses and amounts must match\"\n );\n uint256 len = _addresses.length;\n for (uint256 i = 0; i < len; i++) {\n address recipient = _addresses[i];\n uint256 newAmount = _amounts[i];\n uint256 oldAmount = claims[recipient];\n claims[recipient] = newAmount;\n totalClaims = totalClaims.add(newAmount).sub(oldAmount);\n emit ClaimSet(recipient, newAmount);\n }\n }\n\n /* -- Governor -- */\n\n function lockAdjuster() external onlyGovernor notInClaimPeriod {\n _lockAdjuster();\n }\n\n function _lockAdjuster() internal {\n isAdjusterLocked = true;\n emit Lock();\n }\n\n function unlockAdjuster() external onlyGovernor notInClaimPeriod {\n isAdjusterLocked = false;\n emit Unlock();\n }\n\n function start(uint256 _seconds)\n external\n onlyGovernor\n notInClaimPeriod\n nonReentrant\n {\n require(totalClaims > 0, \"No claims\");\n uint256 funding = IERC20(token).balanceOf(address(this));\n require(funding >= totalClaims, \"Insufficient funds for all claims\");\n _lockAdjuster();\n end = block.timestamp.add(_seconds);\n require(end.sub(block.timestamp) < 31622400, \"Duration too long\"); // 31622400 = 366*24*60*60\n emit Start(end);\n }\n\n function collect(address _coin)\n external\n onlyGovernor\n notInClaimPeriod\n nonReentrant\n {\n uint256 amount = IERC20(_coin).balanceOf(address(this));\n SafeERC20.safeTransfer(IERC20(_coin), address(governor()), amount);\n emit Collect(_coin, amount);\n }\n\n /* -- modifiers -- */\n\n modifier onlyInClaimPeriod() {\n require(block.timestamp <= end, \"Should be in claim period\");\n _;\n }\n\n modifier notInClaimPeriod() {\n require(block.timestamp > end, \"Should not be in claim period\");\n _;\n }\n\n modifier onlyUnlockedAdjuster() {\n require(isAdjusterLocked == false, \"Adjuster must be unlocked\");\n require(msg.sender == adjuster, \"Must be adjuster\");\n _;\n }\n}\n\ninterface IERC20Decimals {\n function decimals() external view returns (uint8);\n}\n" + }, + "contracts/echidna/Debugger.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nlibrary Debugger {\n event Debug(string debugString);\n event Debug(string description, string data);\n event Debug(string prefix, string description, string data);\n event Debug(string description, bytes32 data);\n event Debug(string prefix, string description, bytes32 data);\n event Debug(string description, uint256 data);\n event Debug(string prefix, string description, uint256 data);\n event Debug(string description, int256 data);\n event Debug(string prefix, string description, int256 data);\n event Debug(string description, address data);\n event Debug(string prefix, string description, address data);\n event Debug(string description, bool data);\n event Debug(string prefix, string description, bool data);\n\n function log(string memory debugString) internal {\n emit Debug(debugString);\n }\n\n function log(string memory description, string memory data) internal {\n emit Debug(description, data);\n }\n\n function log(\n string memory prefix,\n string memory description,\n string memory data\n ) internal {\n emit Debug(prefix, description, data);\n }\n\n function log(string memory description, bytes32 data) internal {\n emit Debug(description, data);\n }\n\n function log(\n string memory prefix,\n string memory description,\n bytes32 data\n ) internal {\n emit Debug(prefix, description, data);\n }\n\n function log(string memory description, uint256 data) internal {\n emit Debug(description, data);\n }\n\n function log(\n string memory prefix,\n string memory description,\n uint256 data\n ) internal {\n emit Debug(prefix, description, data);\n }\n\n function log(string memory description, int256 data) internal {\n emit Debug(description, data);\n }\n\n function log(\n string memory prefix,\n string memory description,\n int256 data\n ) internal {\n emit Debug(prefix, description, data);\n }\n\n function log(string memory description, address data) internal {\n emit Debug(description, data);\n }\n\n function log(\n string memory prefix,\n string memory description,\n address data\n ) internal {\n emit Debug(prefix, description, data);\n }\n\n function log(string memory description, bool data) internal {\n emit Debug(description, data);\n }\n\n function log(\n string memory prefix,\n string memory description,\n bool data\n ) internal {\n emit Debug(prefix, description, data);\n }\n}\n" + }, + "contracts/echidna/Echidna.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EchidnaTestApproval.sol\";\n\n/**\n * @title Echidna test contract for OUSD\n * @notice Target contract to be tested, containing all mixins\n * @author Rappie\n */\ncontract Echidna is EchidnaTestApproval {\n\n}\n" + }, + "contracts/echidna/EchidnaConfig.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Top-level mixin for configuring the desired fuzzing setup\n * @author Rappie\n */\ncontract EchidnaConfig {\n address internal constant ADDRESS_VAULT = address(0x10000);\n address internal constant ADDRESS_OUTSIDER_USER = address(0x20000);\n\n address internal constant ADDRESS_USER0 = address(0x30000);\n address internal constant ADDRESS_USER1 = address(0x40000);\n\n // Will be set in EchidnaSetup constructor\n address internal ADDRESS_OUTSIDER_CONTRACT;\n address internal ADDRESS_CONTRACT0;\n address internal ADDRESS_CONTRACT1;\n\n // Toggle known issues\n //\n // This can be used to skip tests that are known to fail. This is useful\n // when debugging a specific issue, but should be disabled when running\n // the full test suite.\n //\n // True => skip tests that are known to fail\n // False => run all tests\n //\n bool internal constant TOGGLE_KNOWN_ISSUES = false;\n\n // Toggle known issues within limits\n //\n // Same as TOGGLE_KNOWN_ISSUES, but also skip tests that are known to fail\n // within limits set by the variables below.\n //\n bool internal constant TOGGLE_KNOWN_ISSUES_WITHIN_LIMITS = true;\n\n // Starting balance\n //\n // Gives OUSD a non-zero starting supply, which can be useful to ignore\n // certain edge cases.\n //\n // The starting balance is given to outsider accounts that are not used as\n // accounts while fuzzing.\n //\n bool internal constant TOGGLE_STARTING_BALANCE = true;\n uint256 internal constant STARTING_BALANCE = 1_000_000e18;\n\n // Change supply\n //\n // Set a limit to the amount of change per rebase, which can be useful to\n // ignore certain edge cases.\n //\n // True => limit the amount of change to a percentage of total supply\n // False => no limit\n //\n bool internal constant TOGGLE_CHANGESUPPLY_LIMIT = true;\n uint256 internal constant CHANGESUPPLY_DIVISOR = 10; // 10% of total supply\n\n // Mint limit\n //\n // Set a limit the the amount minted per mint, which can be useful to\n // ignore certain edge cases.\n //\n // True => limit the amount of minted tokens\n // False => no limit\n //\n bool internal constant TOGGLE_MINT_LIMIT = true;\n uint256 internal constant MINT_MODULO = 1_000_000_000_000e18;\n\n // Known rounding errors\n uint256 internal constant TRANSFER_ROUNDING_ERROR = 1e18 - 1;\n uint256 internal constant OPT_IN_ROUNDING_ERROR = 1e18 - 1;\n uint256 internal constant MINT_ROUNDING_ERROR = 1e18 - 1;\n\n /**\n * @notice Modifier to skip tests that are known to fail\n * @dev see TOGGLE_KNOWN_ISSUES for more information\n */\n modifier hasKnownIssue() {\n if (TOGGLE_KNOWN_ISSUES) return;\n _;\n }\n\n /**\n * @notice Modifier to skip tests that are known to fail within limits\n * @dev see TOGGLE_KNOWN_ISSUES_WITHIN_LIMITS for more information\n */\n modifier hasKnownIssueWithinLimits() {\n if (TOGGLE_KNOWN_ISSUES_WITHIN_LIMITS) return;\n _;\n }\n\n /**\n * @notice Translate an account ID to an address\n * @param accountId The ID of the account\n * @return account The address of the account\n */\n function getAccount(uint8 accountId)\n internal\n view\n returns (address account)\n {\n accountId = accountId / 64;\n if (accountId == 0) return account = ADDRESS_USER0;\n if (accountId == 1) return account = ADDRESS_USER1;\n if (accountId == 2) return account = ADDRESS_CONTRACT0;\n if (accountId == 3) return account = ADDRESS_CONTRACT1;\n require(false, \"Unknown account ID\");\n }\n}\n" + }, + "contracts/echidna/EchidnaDebug.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport \"./EchidnaHelper.sol\";\nimport \"./Debugger.sol\";\n\nimport \"../token/OUSD.sol\";\n\n/**\n * @title Room for random debugging functions\n * @author Rappie\n */\ncontract EchidnaDebug is EchidnaHelper {\n function debugOUSD() public pure {\n // assert(ousd.balanceOf(ADDRESS_USER0) == 1000);\n // assert(ousd.rebaseState(ADDRESS_USER0) != OUSD.RebaseOptions.OptIn);\n // assert(Address.isContract(ADDRESS_CONTRACT0));\n // Debugger.log(\"nonRebasingSupply\", ousd.nonRebasingSupply());\n // assert(false);\n }\n}\n" + }, + "contracts/echidna/EchidnaHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EchidnaSetup.sol\";\nimport \"./Debugger.sol\";\n\n/**\n * @title Mixin containing helper functions\n * @author Rappie\n */\ncontract EchidnaHelper is EchidnaSetup {\n /**\n * @notice Mint tokens to an account\n * @param toAcc Account to mint to\n * @param amount Amount to mint\n * @return Amount minted (in case of capped mint with modulo)\n */\n function mint(uint8 toAcc, uint256 amount) public returns (uint256) {\n address to = getAccount(toAcc);\n\n if (TOGGLE_MINT_LIMIT) {\n amount = amount % MINT_MODULO;\n }\n\n hevm.prank(ADDRESS_VAULT);\n ousd.mint(to, amount);\n\n return amount;\n }\n\n /**\n * @notice Burn tokens from an account\n * @param fromAcc Account to burn from\n * @param amount Amount to burn\n */\n function burn(uint8 fromAcc, uint256 amount) public {\n address from = getAccount(fromAcc);\n hevm.prank(ADDRESS_VAULT);\n ousd.burn(from, amount);\n }\n\n /**\n * @notice Change the total supply of OUSD (rebase)\n * @param amount New total supply\n */\n function changeSupply(uint256 amount) public {\n if (TOGGLE_CHANGESUPPLY_LIMIT) {\n amount =\n ousd.totalSupply() +\n (amount % (ousd.totalSupply() / CHANGESUPPLY_DIVISOR));\n }\n\n hevm.prank(ADDRESS_VAULT);\n ousd.changeSupply(amount);\n }\n\n /**\n * @notice Transfer tokens between accounts\n * @param fromAcc Account to transfer from\n * @param toAcc Account to transfer to\n * @param amount Amount to transfer\n */\n function transfer(\n uint8 fromAcc,\n uint8 toAcc,\n uint256 amount\n ) public {\n address from = getAccount(fromAcc);\n address to = getAccount(toAcc);\n hevm.prank(from);\n // slither-disable-next-line unchecked-transfer\n ousd.transfer(to, amount);\n }\n\n /**\n * @notice Transfer approved tokens between accounts\n * @param authorizedAcc Account that is authorized to transfer\n * @param fromAcc Account to transfer from\n * @param toAcc Account to transfer to\n * @param amount Amount to transfer\n */\n function transferFrom(\n uint8 authorizedAcc,\n uint8 fromAcc,\n uint8 toAcc,\n uint256 amount\n ) public {\n address authorized = getAccount(authorizedAcc);\n address from = getAccount(fromAcc);\n address to = getAccount(toAcc);\n hevm.prank(authorized);\n // slither-disable-next-line unchecked-transfer\n ousd.transferFrom(from, to, amount);\n }\n\n /**\n * @notice Opt in to rebasing\n * @param targetAcc Account to opt in\n */\n function optIn(uint8 targetAcc) public {\n address target = getAccount(targetAcc);\n hevm.prank(target);\n ousd.rebaseOptIn();\n }\n\n /**\n * @notice Opt out of rebasing\n * @param targetAcc Account to opt out\n */\n function optOut(uint8 targetAcc) public {\n address target = getAccount(targetAcc);\n hevm.prank(target);\n ousd.rebaseOptOut();\n }\n\n /**\n * @notice Approve an account to spend OUSD\n * @param ownerAcc Account that owns the OUSD\n * @param spenderAcc Account that is approved to spend the OUSD\n * @param amount Amount to approve\n */\n function approve(\n uint8 ownerAcc,\n uint8 spenderAcc,\n uint256 amount\n ) public {\n address owner = getAccount(ownerAcc);\n address spender = getAccount(spenderAcc);\n hevm.prank(owner);\n // slither-disable-next-line unused-return\n ousd.approve(spender, amount);\n }\n\n /**\n * @notice Increase the allowance of an account to spend OUSD\n * @param ownerAcc Account that owns the OUSD\n * @param spenderAcc Account that is approved to spend the OUSD\n * @param amount Amount to increase the allowance by\n */\n function increaseAllowance(\n uint8 ownerAcc,\n uint8 spenderAcc,\n uint256 amount\n ) public {\n address owner = getAccount(ownerAcc);\n address spender = getAccount(spenderAcc);\n hevm.prank(owner);\n // slither-disable-next-line unused-return\n ousd.increaseAllowance(spender, amount);\n }\n\n /**\n * @notice Decrease the allowance of an account to spend OUSD\n * @param ownerAcc Account that owns the OUSD\n * @param spenderAcc Account that is approved to spend the OUSD\n * @param amount Amount to decrease the allowance by\n */\n function decreaseAllowance(\n uint8 ownerAcc,\n uint8 spenderAcc,\n uint256 amount\n ) public {\n address owner = getAccount(ownerAcc);\n address spender = getAccount(spenderAcc);\n hevm.prank(owner);\n // slither-disable-next-line unused-return\n ousd.decreaseAllowance(spender, amount);\n }\n\n /**\n * @notice Get the sum of all OUSD balances\n * @return total Total balance\n */\n function getTotalBalance() public view returns (uint256 total) {\n total += ousd.balanceOf(ADDRESS_VAULT);\n total += ousd.balanceOf(ADDRESS_OUTSIDER_USER);\n total += ousd.balanceOf(ADDRESS_OUTSIDER_CONTRACT);\n total += ousd.balanceOf(ADDRESS_USER0);\n total += ousd.balanceOf(ADDRESS_USER1);\n total += ousd.balanceOf(ADDRESS_CONTRACT0);\n total += ousd.balanceOf(ADDRESS_CONTRACT1);\n }\n\n /**\n * @notice Get the sum of all non-rebasing OUSD balances\n * @return total Total balance\n */\n function getTotalNonRebasingBalance() public returns (uint256 total) {\n total += ousd._isNonRebasingAccountEchidna(ADDRESS_VAULT)\n ? ousd.balanceOf(ADDRESS_VAULT)\n : 0;\n total += ousd._isNonRebasingAccountEchidna(ADDRESS_OUTSIDER_USER)\n ? ousd.balanceOf(ADDRESS_OUTSIDER_USER)\n : 0;\n total += ousd._isNonRebasingAccountEchidna(ADDRESS_OUTSIDER_CONTRACT)\n ? ousd.balanceOf(ADDRESS_OUTSIDER_CONTRACT)\n : 0;\n total += ousd._isNonRebasingAccountEchidna(ADDRESS_USER0)\n ? ousd.balanceOf(ADDRESS_USER0)\n : 0;\n total += ousd._isNonRebasingAccountEchidna(ADDRESS_USER1)\n ? ousd.balanceOf(ADDRESS_USER1)\n : 0;\n total += ousd._isNonRebasingAccountEchidna(ADDRESS_CONTRACT0)\n ? ousd.balanceOf(ADDRESS_CONTRACT0)\n : 0;\n total += ousd._isNonRebasingAccountEchidna(ADDRESS_CONTRACT1)\n ? ousd.balanceOf(ADDRESS_CONTRACT1)\n : 0;\n }\n}\n" + }, + "contracts/echidna/EchidnaSetup.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./IHevm.sol\";\nimport \"./EchidnaConfig.sol\";\nimport \"./OUSDEchidna.sol\";\n\ncontract Dummy {}\n\n/**\n * @title Mixin for setup and deployment\n * @author Rappie\n */\ncontract EchidnaSetup is EchidnaConfig {\n IHevm hevm = IHevm(0x7109709ECfa91a80626fF3989D68f67F5b1DD12D);\n OUSDEchidna ousd = new OUSDEchidna();\n\n /**\n * @notice Deploy the OUSD contract and set up initial state\n */\n constructor() {\n ousd.initialize(\"Origin Dollar\", \"OUSD\", ADDRESS_VAULT, 1e18);\n\n // Deploy dummny contracts as users\n Dummy outsider = new Dummy();\n ADDRESS_OUTSIDER_CONTRACT = address(outsider);\n Dummy dummy0 = new Dummy();\n ADDRESS_CONTRACT0 = address(dummy0);\n Dummy dummy1 = new Dummy();\n ADDRESS_CONTRACT1 = address(dummy1);\n\n // Start out with a reasonable amount of OUSD\n if (TOGGLE_STARTING_BALANCE) {\n // Rebasing tokens\n hevm.prank(ADDRESS_VAULT);\n ousd.mint(ADDRESS_OUTSIDER_USER, STARTING_BALANCE / 2);\n\n // Non-rebasing tokens\n hevm.prank(ADDRESS_VAULT);\n ousd.mint(ADDRESS_OUTSIDER_CONTRACT, STARTING_BALANCE / 2);\n }\n }\n}\n" + }, + "contracts/echidna/EchidnaTestAccounting.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EchidnaDebug.sol\";\nimport \"./EchidnaTestSupply.sol\";\n\n/**\n * @title Mixin for testing accounting functions\n * @author Rappie\n */\ncontract EchidnaTestAccounting is EchidnaTestSupply {\n /**\n * @notice After opting in, balance should not increase. (Ok to lose rounding funds doing this)\n * @param targetAcc Account to opt in\n */\n function testOptInBalance(uint8 targetAcc) public {\n address target = getAccount(targetAcc);\n\n uint256 balanceBefore = ousd.balanceOf(target);\n optIn(targetAcc);\n uint256 balanceAfter = ousd.balanceOf(target);\n\n assert(balanceAfter <= balanceBefore);\n }\n\n /**\n * @notice After opting out, balance should remain the same\n * @param targetAcc Account to opt out\n */\n function testOptOutBalance(uint8 targetAcc) public {\n address target = getAccount(targetAcc);\n\n uint256 balanceBefore = ousd.balanceOf(target);\n optOut(targetAcc);\n uint256 balanceAfter = ousd.balanceOf(target);\n\n assert(balanceAfter == balanceBefore);\n }\n\n /**\n * @notice Account balance should remain the same after opting in minus rounding error\n * @param targetAcc Account to opt in\n */\n function testOptInBalanceRounding(uint8 targetAcc) public {\n address target = getAccount(targetAcc);\n\n uint256 balanceBefore = ousd.balanceOf(target);\n optIn(targetAcc);\n uint256 balanceAfter = ousd.balanceOf(target);\n\n int256 delta = int256(balanceAfter) - int256(balanceBefore);\n Debugger.log(\"delta\", delta);\n\n // slither-disable-next-line tautology\n assert(-1 * delta >= 0);\n assert(-1 * delta <= int256(OPT_IN_ROUNDING_ERROR));\n }\n\n /**\n * @notice After opting in, total supply should remain the same\n * @param targetAcc Account to opt in\n */\n function testOptInTotalSupply(uint8 targetAcc) public {\n uint256 totalSupplyBefore = ousd.totalSupply();\n optIn(targetAcc);\n uint256 totalSupplyAfter = ousd.totalSupply();\n\n assert(totalSupplyAfter == totalSupplyBefore);\n }\n\n /**\n * @notice After opting out, total supply should remain the same\n * @param targetAcc Account to opt out\n */\n function testOptOutTotalSupply(uint8 targetAcc) public {\n uint256 totalSupplyBefore = ousd.totalSupply();\n optOut(targetAcc);\n uint256 totalSupplyAfter = ousd.totalSupply();\n\n assert(totalSupplyAfter == totalSupplyBefore);\n }\n\n /**\n * @notice Account balance should remain the same when a smart contract auto converts\n * @param targetAcc Account to auto convert\n */\n function testAutoConvertBalance(uint8 targetAcc) public {\n address target = getAccount(targetAcc);\n\n uint256 balanceBefore = ousd.balanceOf(target);\n // slither-disable-next-line unused-return\n ousd._isNonRebasingAccountEchidna(target);\n uint256 balanceAfter = ousd.balanceOf(target);\n\n assert(balanceAfter == balanceBefore);\n }\n\n /**\n * @notice The `balanceOf` function should never revert\n * @param targetAcc Account to check balance of\n */\n function testBalanceOfShouldNotRevert(uint8 targetAcc) public {\n address target = getAccount(targetAcc);\n\n // slither-disable-next-line unused-return\n try ousd.balanceOf(target) {\n assert(true);\n } catch {\n assert(false);\n }\n }\n}\n" + }, + "contracts/echidna/EchidnaTestApproval.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EchidnaTestMintBurn.sol\";\nimport \"./Debugger.sol\";\n\n/**\n * @title Mixin for testing approval related functions\n * @author Rappie\n */\ncontract EchidnaTestApproval is EchidnaTestMintBurn {\n /**\n * @notice Performing `transferFrom` with an amount inside the allowance should not revert\n * @param authorizedAcc The account that is authorized to transfer\n * @param fromAcc The account that is transferring\n * @param toAcc The account that is receiving\n * @param amount The amount to transfer\n */\n function testTransferFromShouldNotRevert(\n uint8 authorizedAcc,\n uint8 fromAcc,\n uint8 toAcc,\n uint256 amount\n ) public {\n address authorized = getAccount(authorizedAcc);\n address from = getAccount(fromAcc);\n address to = getAccount(toAcc);\n\n require(amount <= ousd.balanceOf(from));\n require(amount <= ousd.allowance(from, authorized));\n\n hevm.prank(authorized);\n // slither-disable-next-line unchecked-transfer\n try ousd.transferFrom(from, to, amount) {\n // pass\n } catch {\n assert(false);\n }\n }\n\n /**\n * @notice Performing `transferFrom` with an amount outside the allowance should revert\n * @param authorizedAcc The account that is authorized to transfer\n * @param fromAcc The account that is transferring\n * @param toAcc The account that is receiving\n * @param amount The amount to transfer\n */\n function testTransferFromShouldRevert(\n uint8 authorizedAcc,\n uint8 fromAcc,\n uint8 toAcc,\n uint256 amount\n ) public {\n address authorized = getAccount(authorizedAcc);\n address from = getAccount(fromAcc);\n address to = getAccount(toAcc);\n\n require(amount > 0);\n require(\n !(amount <= ousd.balanceOf(from) &&\n amount <= ousd.allowance(from, authorized))\n );\n\n hevm.prank(authorized);\n // slither-disable-next-line unchecked-transfer\n try ousd.transferFrom(from, to, amount) {\n assert(false);\n } catch {\n // pass\n }\n }\n\n /**\n * @notice Approving an amount should update the allowance and overwrite any previous allowance\n * @param ownerAcc The account that is approving\n * @param spenderAcc The account that is being approved\n * @param amount The amount to approve\n */\n function testApprove(\n uint8 ownerAcc,\n uint8 spenderAcc,\n uint256 amount\n ) public {\n address owner = getAccount(ownerAcc);\n address spender = getAccount(spenderAcc);\n\n approve(ownerAcc, spenderAcc, amount);\n uint256 allowanceAfter1 = ousd.allowance(owner, spender);\n\n assert(allowanceAfter1 == amount);\n\n approve(ownerAcc, spenderAcc, amount / 2);\n uint256 allowanceAfter2 = ousd.allowance(owner, spender);\n\n assert(allowanceAfter2 == amount / 2);\n }\n\n /**\n * @notice Increasing the allowance should raise it by the amount provided\n * @param ownerAcc The account that is approving\n * @param spenderAcc The account that is being approved\n * @param amount The amount to approve\n */\n function testIncreaseAllowance(\n uint8 ownerAcc,\n uint8 spenderAcc,\n uint256 amount\n ) public {\n address owner = getAccount(ownerAcc);\n address spender = getAccount(spenderAcc);\n\n uint256 allowanceBefore = ousd.allowance(owner, spender);\n increaseAllowance(ownerAcc, spenderAcc, amount);\n uint256 allowanceAfter = ousd.allowance(owner, spender);\n\n assert(allowanceAfter == allowanceBefore + amount);\n }\n\n /**\n * @notice Decreasing the allowance should lower it by the amount provided\n * @param ownerAcc The account that is approving\n * @param spenderAcc The account that is being approved\n * @param amount The amount to approve\n */\n function testDecreaseAllowance(\n uint8 ownerAcc,\n uint8 spenderAcc,\n uint256 amount\n ) public {\n address owner = getAccount(ownerAcc);\n address spender = getAccount(spenderAcc);\n\n uint256 allowanceBefore = ousd.allowance(owner, spender);\n decreaseAllowance(ownerAcc, spenderAcc, amount);\n uint256 allowanceAfter = ousd.allowance(owner, spender);\n\n assert(allowanceAfter == allowanceBefore - amount);\n }\n}\n" + }, + "contracts/echidna/EchidnaTestMintBurn.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EchidnaDebug.sol\";\nimport \"./EchidnaTestAccounting.sol\";\n\n/**\n * @title Mixin for testing Mint and Burn functions\n * @author Rappie\n */\ncontract EchidnaTestMintBurn is EchidnaTestAccounting {\n /**\n * @notice Minting 0 tokens should not affect account balance\n * @param targetAcc Account to mint to\n */\n function testMintZeroBalance(uint8 targetAcc) public {\n address target = getAccount(targetAcc);\n\n uint256 balanceBefore = ousd.balanceOf(target);\n mint(targetAcc, 0);\n uint256 balanceAfter = ousd.balanceOf(target);\n\n assert(balanceAfter == balanceBefore);\n }\n\n /**\n * @notice Burning 0 tokens should not affect account balance\n * @param targetAcc Account to burn from\n */\n function testBurnZeroBalance(uint8 targetAcc) public {\n address target = getAccount(targetAcc);\n\n uint256 balanceBefore = ousd.balanceOf(target);\n burn(targetAcc, 0);\n uint256 balanceAfter = ousd.balanceOf(target);\n\n assert(balanceAfter == balanceBefore);\n }\n\n /**\n * @notice Minting tokens must increase the account balance by at least amount\n * @param targetAcc Account to mint to\n * @param amount Amount to mint\n * @custom:error testMintBalance(uint8,uint256): failed!💥\n * Call sequence:\n * changeSupply(1)\n * testMintBalance(0,1)\n * Event sequence:\n * Debug(«balanceBefore», 0)\n * Debug(«balanceAfter», 0)\n */\n function testMintBalance(uint8 targetAcc, uint256 amount)\n public\n hasKnownIssue\n hasKnownIssueWithinLimits\n {\n address target = getAccount(targetAcc);\n\n uint256 balanceBefore = ousd.balanceOf(target);\n uint256 amountMinted = mint(targetAcc, amount);\n uint256 balanceAfter = ousd.balanceOf(target);\n\n Debugger.log(\"amountMinted\", amountMinted);\n Debugger.log(\"balanceBefore\", balanceBefore);\n Debugger.log(\"balanceAfter\", balanceAfter);\n\n assert(balanceAfter >= balanceBefore + amountMinted);\n }\n\n /**\n * @notice Burning tokens must decrease the account balance by at least amount\n * @param targetAcc Account to burn from\n * @param amount Amount to burn\n * @custom:error testBurnBalance(uint8,uint256): failed!💥\n * Call sequence:\n * changeSupply(1)\n * mint(0,3)\n * testBurnBalance(0,1)\n * Event sequence:\n * Debug(«balanceBefore», 2)\n * Debug(«balanceAfter», 2)\n */\n function testBurnBalance(uint8 targetAcc, uint256 amount)\n public\n hasKnownIssue\n hasKnownIssueWithinLimits\n {\n address target = getAccount(targetAcc);\n\n uint256 balanceBefore = ousd.balanceOf(target);\n burn(targetAcc, amount);\n uint256 balanceAfter = ousd.balanceOf(target);\n\n Debugger.log(\"balanceBefore\", balanceBefore);\n Debugger.log(\"balanceAfter\", balanceAfter);\n\n assert(balanceAfter <= balanceBefore - amount);\n }\n\n /**\n * @notice Minting tokens should not increase the account balance by less than rounding error above amount\n * @param targetAcc Account to mint to\n * @param amount Amount to mint\n */\n function testMintBalanceRounding(uint8 targetAcc, uint256 amount) public {\n address target = getAccount(targetAcc);\n\n uint256 balanceBefore = ousd.balanceOf(target);\n uint256 amountMinted = mint(targetAcc, amount);\n uint256 balanceAfter = ousd.balanceOf(target);\n\n int256 delta = int256(balanceAfter) - int256(balanceBefore);\n\n // delta == amount, if no error\n // delta < amount, if too little is minted\n // delta > amount, if too much is minted\n int256 error = int256(amountMinted) - delta;\n\n assert(error >= 0);\n assert(error <= int256(MINT_ROUNDING_ERROR));\n }\n\n /**\n * @notice A burn of an account balance must result in a zero balance\n * @param targetAcc Account to burn from\n */\n function testBurnAllBalanceToZero(uint8 targetAcc) public hasKnownIssue {\n address target = getAccount(targetAcc);\n\n burn(targetAcc, ousd.balanceOf(target));\n assert(ousd.balanceOf(target) == 0);\n }\n\n /**\n * @notice You should always be able to burn an account's balance\n * @param targetAcc Account to burn from\n */\n function testBurnAllBalanceShouldNotRevert(uint8 targetAcc)\n public\n hasKnownIssue\n {\n address target = getAccount(targetAcc);\n uint256 balance = ousd.balanceOf(target);\n\n hevm.prank(ADDRESS_VAULT);\n try ousd.burn(target, balance) {\n assert(true);\n } catch {\n assert(false);\n }\n }\n}\n" + }, + "contracts/echidna/EchidnaTestSupply.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EchidnaDebug.sol\";\nimport \"./EchidnaTestTransfer.sol\";\n\nimport { StableMath } from \"../utils/StableMath.sol\";\n\n/**\n * @title Mixin for testing supply related functions\n * @author Rappie\n */\ncontract EchidnaTestSupply is EchidnaTestTransfer {\n using StableMath for uint256;\n\n uint256 prevRebasingCreditsPerToken = type(uint256).max;\n\n /**\n * @notice After a `changeSupply`, the total supply should exactly\n * match the target total supply. (This is needed to ensure successive\n * rebases are correct).\n * @param supply New total supply\n * @custom:error testChangeSupply(uint256): failed!💥\n * Call sequence:\n * testChangeSupply(1044505275072865171609)\n * Event sequence:\n * TotalSupplyUpdatedHighres(1044505275072865171610, 1000000000000000000000000, 957391048054055578595)\n */\n function testChangeSupply(uint256 supply)\n public\n hasKnownIssue\n hasKnownIssueWithinLimits\n {\n hevm.prank(ADDRESS_VAULT);\n ousd.changeSupply(supply);\n\n assert(ousd.totalSupply() == supply);\n }\n\n /**\n * @notice The total supply must not be less than the sum of account balances.\n * (The difference will go into future rebases)\n * @custom:error testTotalSupplyLessThanTotalBalance(): failed!💥\n * Call sequence:\n * mint(0,1)\n * changeSupply(1)\n * optOut(64)\n * transfer(0,64,1)\n * testTotalSupplyLessThanTotalBalance()\n * Event sequence:\n * Debug(«totalSupply», 1000000000000000001000001)\n * Debug(«totalBalance», 1000000000000000001000002)\n */\n function testTotalSupplyLessThanTotalBalance()\n public\n hasKnownIssue\n hasKnownIssueWithinLimits\n {\n uint256 totalSupply = ousd.totalSupply();\n uint256 totalBalance = getTotalBalance();\n\n Debugger.log(\"totalSupply\", totalSupply);\n Debugger.log(\"totalBalance\", totalBalance);\n\n assert(totalSupply >= totalBalance);\n }\n\n /**\n * @notice Non-rebasing supply should not be larger than total supply\n * @custom:error testNonRebasingSupplyVsTotalSupply(): failed!💥\n * Call sequence:\n * mint(0,2)\n * changeSupply(3)\n * burn(0,1)\n * optOut(0)\n * testNonRebasingSupplyVsTotalSupply()\n */\n function testNonRebasingSupplyVsTotalSupply() public hasKnownIssue {\n uint256 nonRebasingSupply = ousd.nonRebasingSupply();\n uint256 totalSupply = ousd.totalSupply();\n\n assert(nonRebasingSupply <= totalSupply);\n }\n\n /**\n * @notice Global `rebasingCreditsPerToken` should never increase\n * @custom:error testRebasingCreditsPerTokenNotIncreased(): failed!💥\n * Call sequence:\n * testRebasingCreditsPerTokenNotIncreased()\n * changeSupply(1)\n * testRebasingCreditsPerTokenNotIncreased()\n */\n function testRebasingCreditsPerTokenNotIncreased() public hasKnownIssue {\n uint256 curRebasingCreditsPerToken = ousd\n .rebasingCreditsPerTokenHighres();\n\n Debugger.log(\n \"prevRebasingCreditsPerToken\",\n prevRebasingCreditsPerToken\n );\n Debugger.log(\"curRebasingCreditsPerToken\", curRebasingCreditsPerToken);\n\n assert(curRebasingCreditsPerToken <= prevRebasingCreditsPerToken);\n\n prevRebasingCreditsPerToken = curRebasingCreditsPerToken;\n }\n\n /**\n * @notice The rebasing credits per token ratio must greater than zero\n */\n function testRebasingCreditsPerTokenAboveZero() public {\n assert(ousd.rebasingCreditsPerTokenHighres() > 0);\n }\n\n /**\n * @notice The sum of all non-rebasing balances should not be larger than\n * non-rebasing supply\n * @custom:error testTotalNonRebasingSupplyLessThanTotalBalance(): failed!💥\n * Call sequence\n * mint(0,2)\n * changeSupply(1)\n * optOut(0)\n * burn(0,1)\n * testTotalNonRebasingSupplyLessThanTotalBalance()\n * Event sequence:\n * Debug(«totalNonRebasingSupply», 500000000000000000000001)\n * Debug(«totalNonRebasingBalance», 500000000000000000000002)\n */\n function testTotalNonRebasingSupplyLessThanTotalBalance()\n public\n hasKnownIssue\n hasKnownIssueWithinLimits\n {\n uint256 totalNonRebasingSupply = ousd.nonRebasingSupply();\n uint256 totalNonRebasingBalance = getTotalNonRebasingBalance();\n\n Debugger.log(\"totalNonRebasingSupply\", totalNonRebasingSupply);\n Debugger.log(\"totalNonRebasingBalance\", totalNonRebasingBalance);\n\n assert(totalNonRebasingSupply >= totalNonRebasingBalance);\n }\n\n /**\n * @notice An accounts credits / credits per token should not be larger it's balance\n * @param targetAcc The account to check\n */\n function testCreditsPerTokenVsBalance(uint8 targetAcc) public {\n address target = getAccount(targetAcc);\n\n (uint256 credits, uint256 creditsPerToken, ) = ousd\n .creditsBalanceOfHighres(target);\n uint256 expectedBalance = credits.divPrecisely(creditsPerToken);\n\n uint256 balance = ousd.balanceOf(target);\n\n Debugger.log(\"credits\", credits);\n Debugger.log(\"creditsPerToken\", creditsPerToken);\n Debugger.log(\"expectedBalance\", expectedBalance);\n Debugger.log(\"balance\", balance);\n\n assert(expectedBalance == balance);\n }\n}\n" + }, + "contracts/echidna/EchidnaTestTransfer.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EchidnaDebug.sol\";\nimport \"./Debugger.sol\";\n\n/**\n * @title Mixin for testing transfer related functions\n * @author Rappie\n */\ncontract EchidnaTestTransfer is EchidnaDebug {\n /**\n * @notice The receiving account's balance after a transfer must not increase by\n * less than the amount transferred\n * @param fromAcc Account to transfer from\n * @param toAcc Account to transfer to\n * @param amount Amount to transfer\n * @custom:error testTransferBalanceReceivedLess(uint8,uint8,uint256): failed!💥\n * Call sequence:\n * changeSupply(1)\n * mint(64,2)\n * testTransferBalanceReceivedLess(64,0,1)\n * Event sequence:\n * Debug(«totalSupply», 1000000000000000000500002)\n * Debug(«toBalBefore», 0)\n * Debug(«toBalAfter», 0)\n */\n function testTransferBalanceReceivedLess(\n uint8 fromAcc,\n uint8 toAcc,\n uint256 amount\n ) public hasKnownIssue hasKnownIssueWithinLimits {\n address from = getAccount(fromAcc);\n address to = getAccount(toAcc);\n\n require(from != to);\n\n uint256 toBalBefore = ousd.balanceOf(to);\n transfer(fromAcc, toAcc, amount);\n uint256 toBalAfter = ousd.balanceOf(to);\n\n Debugger.log(\"totalSupply\", ousd.totalSupply());\n Debugger.log(\"toBalBefore\", toBalBefore);\n Debugger.log(\"toBalAfter\", toBalAfter);\n\n assert(toBalAfter >= toBalBefore + amount);\n }\n\n /**\n * @notice The receiving account's balance after a transfer must not\n * increase by more than the amount transferred\n * @param fromAcc Account to transfer from\n * @param toAcc Account to transfer to\n * @param amount Amount to transfer\n */\n function testTransferBalanceReceivedMore(\n uint8 fromAcc,\n uint8 toAcc,\n uint256 amount\n ) public {\n address from = getAccount(fromAcc);\n address to = getAccount(toAcc);\n\n require(from != to);\n\n uint256 toBalBefore = ousd.balanceOf(to);\n transfer(fromAcc, toAcc, amount);\n uint256 toBalAfter = ousd.balanceOf(to);\n\n Debugger.log(\"totalSupply\", ousd.totalSupply());\n Debugger.log(\"toBalBefore\", toBalBefore);\n Debugger.log(\"toBalAfter\", toBalAfter);\n\n assert(toBalAfter <= toBalBefore + amount);\n }\n\n /**\n * @notice The sending account's balance after a transfer must not\n * decrease by less than the amount transferred\n * @param fromAcc Account to transfer from\n * @param toAcc Account to transfer to\n * @param amount Amount to transfer\n * @custom:error testTransferBalanceSentLess(uint8,uint8,uint256): failed!💥\n * Call sequence:\n * mint(0,1)\n * changeSupply(1)\n * testTransferBalanceSentLess(0,64,1)\n * Event sequence:\n * Debug(«totalSupply», 1000000000000000000500001)\n * Debug(«fromBalBefore», 1)\n * Debug(«fromBalAfter», 1)\n */\n function testTransferBalanceSentLess(\n uint8 fromAcc,\n uint8 toAcc,\n uint256 amount\n ) public hasKnownIssue hasKnownIssueWithinLimits {\n address from = getAccount(fromAcc);\n address to = getAccount(toAcc);\n\n require(from != to);\n\n uint256 fromBalBefore = ousd.balanceOf(from);\n transfer(fromAcc, toAcc, amount);\n uint256 fromBalAfter = ousd.balanceOf(from);\n\n Debugger.log(\"totalSupply\", ousd.totalSupply());\n Debugger.log(\"fromBalBefore\", fromBalBefore);\n Debugger.log(\"fromBalAfter\", fromBalAfter);\n\n assert(fromBalAfter <= fromBalBefore - amount);\n }\n\n /**\n * @notice The sending account's balance after a transfer must not\n * decrease by more than the amount transferred\n * @param fromAcc Account to transfer from\n * @param toAcc Account to transfer to\n * @param amount Amount to transfer\n */\n function testTransferBalanceSentMore(\n uint8 fromAcc,\n uint8 toAcc,\n uint256 amount\n ) public {\n address from = getAccount(fromAcc);\n address to = getAccount(toAcc);\n\n require(from != to);\n\n uint256 fromBalBefore = ousd.balanceOf(from);\n transfer(fromAcc, toAcc, amount);\n uint256 fromBalAfter = ousd.balanceOf(from);\n\n Debugger.log(\"totalSupply\", ousd.totalSupply());\n Debugger.log(\"fromBalBefore\", fromBalBefore);\n Debugger.log(\"fromBalAfter\", fromBalAfter);\n\n assert(fromBalAfter >= fromBalBefore - amount);\n }\n\n /**\n * @notice The receiving account's balance after a transfer must not\n * increase by less than the amount transferred (minus rounding error)\n * @param fromAcc Account to transfer from\n * @param toAcc Account to transfer to\n * @param amount Amount to transfer\n */\n function testTransferBalanceReceivedLessRounding(\n uint8 fromAcc,\n uint8 toAcc,\n uint256 amount\n ) public {\n address from = getAccount(fromAcc);\n address to = getAccount(toAcc);\n\n require(from != to);\n\n uint256 toBalBefore = ousd.balanceOf(to);\n transfer(fromAcc, toAcc, amount);\n uint256 toBalAfter = ousd.balanceOf(to);\n\n int256 toDelta = int256(toBalAfter) - int256(toBalBefore);\n\n // delta == amount, if no error\n // delta < amount, if too little is sent\n // delta > amount, if too much is sent\n int256 error = int256(amount) - toDelta;\n\n Debugger.log(\"totalSupply\", ousd.totalSupply());\n Debugger.log(\"toBalBefore\", toBalBefore);\n Debugger.log(\"toBalAfter\", toBalAfter);\n Debugger.log(\"toDelta\", toDelta);\n Debugger.log(\"error\", error);\n\n assert(error >= 0);\n assert(error <= int256(TRANSFER_ROUNDING_ERROR));\n }\n\n /**\n * @notice The sending account's balance after a transfer must\n * not decrease by less than the amount transferred (minus rounding error)\n * @param fromAcc Account to transfer from\n * @param toAcc Account to transfer to\n * @param amount Amount to transfer\n */\n function testTransferBalanceSentLessRounding(\n uint8 fromAcc,\n uint8 toAcc,\n uint256 amount\n ) public {\n address from = getAccount(fromAcc);\n address to = getAccount(toAcc);\n\n require(from != to);\n\n uint256 fromBalBefore = ousd.balanceOf(from);\n transfer(fromAcc, toAcc, amount);\n uint256 fromBalAfter = ousd.balanceOf(from);\n\n int256 fromDelta = int256(fromBalAfter) - int256(fromBalBefore);\n\n // delta == -amount, if no error\n // delta < -amount, if too much is sent\n // delta > -amount, if too little is sent\n int256 error = int256(amount) + fromDelta;\n\n Debugger.log(\"totalSupply\", ousd.totalSupply());\n Debugger.log(\"fromBalBefore\", fromBalBefore);\n Debugger.log(\"fromBalAfter\", fromBalAfter);\n Debugger.log(\"fromDelta\", fromDelta);\n Debugger.log(\"error\", error);\n\n assert(error >= 0);\n assert(error <= int256(TRANSFER_ROUNDING_ERROR));\n }\n\n /**\n * @notice An account should always be able to successfully transfer\n * an amount within its balance.\n * @param fromAcc Account to transfer from\n * @param toAcc Account to transfer to\n * @param amount Amount to transfer\n * @custom:error testTransferWithinBalanceDoesNotRevert(uint8,uint8,uint8): failed!💥\n * Call sequence:\n * mint(0,1)\n * changeSupply(3)\n * optOut(0)\n * testTransferWithinBalanceDoesNotRevert(0,128,2)\n * optIn(0)\n * testTransferWithinBalanceDoesNotRevert(128,0,1)\n * Event sequence:\n * error Revert Panic(17): SafeMath over-/under-flows\n */\n function testTransferWithinBalanceDoesNotRevert(\n uint8 fromAcc,\n uint8 toAcc,\n uint256 amount\n ) public hasKnownIssue {\n address from = getAccount(fromAcc);\n address to = getAccount(toAcc);\n\n require(amount > 0);\n amount = amount % ousd.balanceOf(from);\n\n Debugger.log(\"Total supply\", ousd.totalSupply());\n\n hevm.prank(from);\n // slither-disable-next-line unchecked-transfer\n try ousd.transfer(to, amount) {\n assert(true);\n } catch {\n assert(false);\n }\n }\n\n /**\n * @notice An account should never be able to successfully transfer\n * an amount greater than their balance.\n * @param fromAcc Account to transfer from\n * @param toAcc Account to transfer to\n * @param amount Amount to transfer\n */\n function testTransferExceedingBalanceReverts(\n uint8 fromAcc,\n uint8 toAcc,\n uint256 amount\n ) public {\n address from = getAccount(fromAcc);\n address to = getAccount(toAcc);\n\n amount = ousd.balanceOf(from) + 1 + amount;\n\n hevm.prank(from);\n // slither-disable-next-line unchecked-transfer\n try ousd.transfer(to, amount) {\n assert(false);\n } catch {\n assert(true);\n }\n }\n\n /**\n * @notice A transfer to the same account should not change that account's balance\n * @param targetAcc Account to transfer to\n * @param amount Amount to transfer\n */\n function testTransferSelf(uint8 targetAcc, uint256 amount) public {\n address target = getAccount(targetAcc);\n\n uint256 balanceBefore = ousd.balanceOf(target);\n transfer(targetAcc, targetAcc, amount);\n uint256 balanceAfter = ousd.balanceOf(target);\n\n assert(balanceBefore == balanceAfter);\n }\n\n /**\n * @notice Transfers to the zero account revert\n * @param fromAcc Account to transfer from\n * @param amount Amount to transfer\n */\n function testTransferToZeroAddress(uint8 fromAcc, uint256 amount) public {\n address from = getAccount(fromAcc);\n\n hevm.prank(from);\n // slither-disable-next-line unchecked-transfer\n try ousd.transfer(address(0), amount) {\n assert(false);\n } catch {\n assert(true);\n }\n }\n}\n" + }, + "contracts/echidna/IHevm.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// https://github.com/ethereum/hevm/blob/main/doc/src/controlling-the-unit-testing-environment.md#cheat-codes\n\ninterface IHevm {\n function warp(uint256 x) external;\n\n function roll(uint256 x) external;\n\n function store(\n address c,\n bytes32 loc,\n bytes32 val\n ) external;\n\n function load(address c, bytes32 loc) external returns (bytes32 val);\n\n function sign(uint256 sk, bytes32 digest)\n external\n returns (\n uint8 v,\n bytes32 r,\n bytes32 s\n );\n\n function addr(uint256 sk) external returns (address addr);\n\n function ffi(string[] calldata) external returns (bytes memory);\n\n function prank(address sender) external;\n}\n" + }, + "contracts/echidna/OUSDEchidna.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"../token/OUSD.sol\";\n\ncontract OUSDEchidna is OUSD {\n constructor() OUSD() {}\n\n function _isNonRebasingAccountEchidna(address _account)\n public\n returns (bool)\n {\n return _isNonRebasingAccount(_account);\n }\n}\n" + }, + "contracts/flipper/Flipper.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"../governance/Governable.sol\";\nimport \"../token/OUSD.sol\";\nimport \"../interfaces/Tether.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\n// Contract to exchange usdt, usdc, dai from and to ousd.\n// - 1 to 1. No slippage\n// - Optimized for low gas usage\n// - No guarantee of availability\n\ncontract Flipper is Governable {\n using SafeERC20 for IERC20;\n\n uint256 constant MAXIMUM_PER_TRADE = (25000 * 1e18);\n\n // Settable coin addresses allow easy testing and use of mock currencies.\n IERC20 immutable dai;\n OUSD immutable ousd;\n IERC20 immutable usdc;\n Tether immutable usdt;\n\n // ---------------------\n // Dev constructor\n // ---------------------\n constructor(\n address _dai,\n address _ousd,\n address _usdc,\n address _usdt\n ) {\n require(address(_dai) != address(0));\n require(address(_ousd) != address(0));\n require(address(_usdc) != address(0));\n require(address(_usdt) != address(0));\n dai = IERC20(_dai);\n ousd = OUSD(_ousd);\n usdc = IERC20(_usdc);\n usdt = Tether(_usdt);\n }\n\n // -----------------\n // Trading functions\n // -----------------\n\n /// @notice Purchase OUSD with Dai\n /// @param amount Amount of OUSD to purchase, in 18 fixed decimals.\n function buyOusdWithDai(uint256 amount) external {\n require(amount <= MAXIMUM_PER_TRADE, \"Amount too large\");\n require(\n dai.transferFrom(msg.sender, address(this), amount),\n \"DAI transfer failed\"\n );\n require(ousd.transfer(msg.sender, amount), \"OUSD transfer failed\");\n }\n\n /// @notice Sell OUSD for Dai\n /// @param amount Amount of OUSD to sell, in 18 fixed decimals.\n function sellOusdForDai(uint256 amount) external {\n require(amount <= MAXIMUM_PER_TRADE, \"Amount too large\");\n require(dai.transfer(msg.sender, amount), \"DAI transfer failed\");\n require(\n ousd.transferFrom(msg.sender, address(this), amount),\n \"OUSD transfer failed\"\n );\n }\n\n /// @notice Purchase OUSD with USDC\n /// @param amount Amount of OUSD to purchase, in 18 fixed decimals.\n function buyOusdWithUsdc(uint256 amount) external {\n require(amount <= MAXIMUM_PER_TRADE, \"Amount too large\");\n // Potential rounding error is an intentional trade off\n require(\n usdc.transferFrom(msg.sender, address(this), amount / 1e12),\n \"USDC transfer failed\"\n );\n require(ousd.transfer(msg.sender, amount), \"OUSD transfer failed\");\n }\n\n /// @notice Sell OUSD for USDC\n /// @param amount Amount of OUSD to sell, in 18 fixed decimals.\n function sellOusdForUsdc(uint256 amount) external {\n require(amount <= MAXIMUM_PER_TRADE, \"Amount too large\");\n require(\n usdc.transfer(msg.sender, amount / 1e12),\n \"USDC transfer failed\"\n );\n require(\n ousd.transferFrom(msg.sender, address(this), amount),\n \"OUSD transfer failed\"\n );\n }\n\n /// @notice Purchase OUSD with USDT\n /// @param amount Amount of OUSD to purchase, in 18 fixed decimals.\n function buyOusdWithUsdt(uint256 amount) external {\n require(amount <= MAXIMUM_PER_TRADE, \"Amount too large\");\n // Potential rounding error is an intentional trade off\n // USDT does not return a boolean and reverts,\n // so no need for a require.\n usdt.transferFrom(msg.sender, address(this), amount / 1e12);\n require(ousd.transfer(msg.sender, amount), \"OUSD transfer failed\");\n }\n\n /// @notice Sell OUSD for USDT\n /// @param amount Amount of OUSD to sell, in 18 fixed decimals.\n function sellOusdForUsdt(uint256 amount) external {\n require(amount <= MAXIMUM_PER_TRADE, \"Amount too large\");\n // USDT does not return a boolean and reverts,\n // so no need for a require.\n usdt.transfer(msg.sender, amount / 1e12);\n require(\n ousd.transferFrom(msg.sender, address(this), amount),\n \"OUSD transfer failed\"\n );\n }\n\n // --------------------\n // Governance functions\n // --------------------\n\n /// @dev Opting into yield reduces the gas cost per transfer by about 4K, since\n /// ousd needs to do less accounting and one less storage write.\n function rebaseOptIn() external onlyGovernor nonReentrant {\n ousd.rebaseOptIn();\n }\n\n /// @notice Owner function to withdraw a specific amount of a token\n function withdraw(address token, uint256 amount)\n external\n onlyGovernor\n nonReentrant\n {\n IERC20(token).safeTransfer(_governor(), amount);\n }\n\n /// @notice Owner function to withdraw all tradable tokens\n /// @dev Contract will not perform any swaps until liquidity is provided\n /// again by transferring assets to the contract.\n function withdrawAll() external onlyGovernor nonReentrant {\n IERC20(dai).safeTransfer(_governor(), dai.balanceOf(address(this)));\n IERC20(ousd).safeTransfer(_governor(), ousd.balanceOf(address(this)));\n IERC20(address(usdt)).safeTransfer(\n _governor(),\n usdt.balanceOf(address(this))\n );\n IERC20(usdc).safeTransfer(_governor(), usdc.balanceOf(address(this)));\n }\n}\n" + }, + "contracts/governance/Governable.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Base for contracts that are managed by the Origin Protocol's Governor.\n * @dev Copy of the openzeppelin Ownable.sol contract with nomenclature change\n * from owner to governor and renounce methods removed. Does not use\n * Context.sol like Ownable.sol does for simplification.\n * @author Origin Protocol Inc\n */\ncontract Governable {\n // Storage position of the owner and pendingOwner of the contract\n // keccak256(\"OUSD.governor\");\n bytes32 private constant governorPosition =\n 0x7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a;\n\n // keccak256(\"OUSD.pending.governor\");\n bytes32 private constant pendingGovernorPosition =\n 0x44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db;\n\n // keccak256(\"OUSD.reentry.status\");\n bytes32 private constant reentryStatusPosition =\n 0x53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac4535;\n\n // See OpenZeppelin ReentrancyGuard implementation\n uint256 constant _NOT_ENTERED = 1;\n uint256 constant _ENTERED = 2;\n\n event PendingGovernorshipTransfer(\n address indexed previousGovernor,\n address indexed newGovernor\n );\n\n event GovernorshipTransferred(\n address indexed previousGovernor,\n address indexed newGovernor\n );\n\n /**\n * @dev Initializes the contract setting the deployer as the initial Governor.\n */\n constructor() {\n _setGovernor(msg.sender);\n emit GovernorshipTransferred(address(0), _governor());\n }\n\n /**\n * @notice Returns the address of the current Governor.\n */\n function governor() public view returns (address) {\n return _governor();\n }\n\n /**\n * @dev Returns the address of the current Governor.\n */\n function _governor() internal view returns (address governorOut) {\n bytes32 position = governorPosition;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n governorOut := sload(position)\n }\n }\n\n /**\n * @dev Returns the address of the pending Governor.\n */\n function _pendingGovernor()\n internal\n view\n returns (address pendingGovernor)\n {\n bytes32 position = pendingGovernorPosition;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n pendingGovernor := sload(position)\n }\n }\n\n /**\n * @dev Throws if called by any account other than the Governor.\n */\n modifier onlyGovernor() {\n require(isGovernor(), \"Caller is not the Governor\");\n _;\n }\n\n /**\n * @notice Returns true if the caller is the current Governor.\n */\n function isGovernor() public view returns (bool) {\n return msg.sender == _governor();\n }\n\n function _setGovernor(address newGovernor) internal {\n bytes32 position = governorPosition;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(position, newGovernor)\n }\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and make it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n bytes32 position = reentryStatusPosition;\n uint256 _reentry_status;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n _reentry_status := sload(position)\n }\n\n // On the first call to nonReentrant, _notEntered will be true\n require(_reentry_status != _ENTERED, \"Reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(position, _ENTERED)\n }\n\n _;\n\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(position, _NOT_ENTERED)\n }\n }\n\n function _setPendingGovernor(address newGovernor) internal {\n bytes32 position = pendingGovernorPosition;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(position, newGovernor)\n }\n }\n\n /**\n * @notice Transfers Governance of the contract to a new account (`newGovernor`).\n * Can only be called by the current Governor. Must be claimed for this to complete\n * @param _newGovernor Address of the new Governor\n */\n function transferGovernance(address _newGovernor) external onlyGovernor {\n _setPendingGovernor(_newGovernor);\n emit PendingGovernorshipTransfer(_governor(), _newGovernor);\n }\n\n /**\n * @notice Claim Governance of the contract to a new account (`newGovernor`).\n * Can only be called by the new Governor.\n */\n function claimGovernance() external {\n require(\n msg.sender == _pendingGovernor(),\n \"Only the pending Governor can complete the claim\"\n );\n _changeGovernor(msg.sender);\n }\n\n /**\n * @dev Change Governance of the contract to a new account (`newGovernor`).\n * @param _newGovernor Address of the new Governor\n */\n function _changeGovernor(address _newGovernor) internal {\n require(_newGovernor != address(0), \"New Governor is address(0)\");\n emit GovernorshipTransferred(_governor(), _newGovernor);\n _setGovernor(_newGovernor);\n }\n}\n" + }, + "contracts/governance/Governor.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./../timelock/Timelock.sol\";\n\n// Modeled off of Compound's Governor Alpha\n// https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/GovernorAlpha.sol\ncontract Governor is Timelock {\n // @notice The total number of proposals\n uint256 public proposalCount;\n\n struct Proposal {\n // @notice Unique id for looking up a proposal\n uint256 id;\n // @notice Creator of the proposal\n address proposer;\n // @notice The timestamp that the proposal will be available for\n // execution, set once the vote succeeds\n uint256 eta;\n // @notice the ordered list of target addresses for calls to be made\n address[] targets;\n // @notice The ordered list of function signatures to be called\n string[] signatures;\n // @notice The ordered list of calldata to be passed to each call\n bytes[] calldatas;\n // @notice Flag marking whether the proposal has been executed\n bool executed;\n }\n\n // @notice The official record of all proposals ever proposed\n mapping(uint256 => Proposal) public proposals;\n\n // @notice An event emitted when a new proposal is created\n event ProposalCreated(\n uint256 id,\n address proposer,\n address[] targets,\n string[] signatures,\n bytes[] calldatas,\n string description\n );\n\n // @notice An event emitted when a proposal has been queued in the Timelock\n event ProposalQueued(uint256 id, uint256 eta);\n\n // @notice An event emitted when a proposal has been executed in the Timelock\n event ProposalExecuted(uint256 id);\n\n // @notice An event emitted when a proposal has been cancelled\n event ProposalCancelled(uint256 id);\n\n uint256 public constant MAX_OPERATIONS = 32;\n\n // @notice Possible states that a proposal may be in\n enum ProposalState {\n Pending,\n Queued,\n Expired,\n Executed\n }\n\n constructor(address admin_, uint256 delay_) Timelock(admin_, delay_) {}\n\n /**\n * @notice Propose Governance call(s)\n * @param targets Ordered list of targeted addresses\n * @param signatures Orderd list of function signatures to be called\n * @param calldatas Orderded list of calldata to be passed with each call\n * @param description Description of the governance\n * @return uint256 id of the proposal\n */\n function propose(\n address[] memory targets,\n string[] memory signatures,\n bytes[] memory calldatas,\n string memory description\n ) public returns (uint256) {\n // Allow anyone to propose for now, since only admin can queue the\n // transaction it should be harmless, you just need to pay the gas\n require(\n targets.length == signatures.length &&\n targets.length == calldatas.length,\n \"Governor::propose: proposal function information arity mismatch\"\n );\n require(targets.length != 0, \"Governor::propose: must provide actions\");\n require(\n targets.length <= MAX_OPERATIONS,\n \"Governor::propose: too many actions\"\n );\n\n proposalCount++;\n Proposal memory newProposal = Proposal({\n id: proposalCount,\n proposer: msg.sender,\n eta: 0,\n targets: targets,\n signatures: signatures,\n calldatas: calldatas,\n executed: false\n });\n\n proposals[newProposal.id] = newProposal;\n\n emit ProposalCreated(\n newProposal.id,\n msg.sender,\n targets,\n signatures,\n calldatas,\n description\n );\n return newProposal.id;\n }\n\n /**\n * @notice Queue a proposal for execution\n * @param proposalId id of the proposal to queue\n */\n function queue(uint256 proposalId) public onlyAdmin {\n require(\n state(proposalId) == ProposalState.Pending,\n \"Governor::queue: proposal can only be queued if it is pending\"\n );\n Proposal storage proposal = proposals[proposalId];\n proposal.eta = block.timestamp + delay;\n\n for (uint256 i = 0; i < proposal.targets.length; i++) {\n _queueOrRevert(\n proposal.targets[i],\n proposal.signatures[i],\n proposal.calldatas[i],\n proposal.eta\n );\n }\n\n emit ProposalQueued(proposal.id, proposal.eta);\n }\n\n /**\n * @notice Get the state of a proposal\n * @param proposalId id of the proposal\n * @return ProposalState\n */\n function state(uint256 proposalId) public view returns (ProposalState) {\n require(\n proposalCount >= proposalId && proposalId > 0,\n \"Governor::state: invalid proposal id\"\n );\n Proposal storage proposal = proposals[proposalId];\n if (proposal.executed) {\n return ProposalState.Executed;\n } else if (proposal.eta == 0) {\n return ProposalState.Pending;\n } else if (block.timestamp >= proposal.eta + GRACE_PERIOD) {\n return ProposalState.Expired;\n } else {\n return ProposalState.Queued;\n }\n }\n\n function _queueOrRevert(\n address target,\n string memory signature,\n bytes memory data,\n uint256 eta\n ) internal {\n require(\n !queuedTransactions[\n keccak256(abi.encode(target, signature, keccak256(data), eta))\n ],\n \"Governor::_queueOrRevert: proposal action already queued at eta\"\n );\n require(\n queuedTransactions[queueTransaction(target, signature, data, eta)],\n \"Governor::_queueOrRevert: failed to queue transaction\"\n );\n }\n\n /**\n * @notice Execute a proposal.\n * @param proposalId id of the proposal\n */\n function execute(uint256 proposalId) public {\n require(\n state(proposalId) == ProposalState.Queued,\n \"Governor::execute: proposal can only be executed if it is queued\"\n );\n Proposal storage proposal = proposals[proposalId];\n proposal.executed = true;\n for (uint256 i = 0; i < proposal.targets.length; i++) {\n executeTransaction(\n proposal.targets[i],\n proposal.signatures[i],\n proposal.calldatas[i],\n proposal.eta\n );\n }\n emit ProposalExecuted(proposalId);\n }\n\n /**\n * @notice Cancel a proposal.\n * @param proposalId id of the proposal\n */\n function cancel(uint256 proposalId) public onlyAdmin {\n ProposalState proposalState = state(proposalId);\n\n require(\n proposalState == ProposalState.Queued ||\n proposalState == ProposalState.Pending,\n \"Governor::execute: proposal can only be cancelled if it is queued or pending\"\n );\n Proposal storage proposal = proposals[proposalId];\n proposal.eta = 1; // To mark the proposal as `Expired`\n for (uint256 i = 0; i < proposal.targets.length; i++) {\n cancelTransaction(\n proposal.targets[i],\n proposal.signatures[i],\n proposal.calldatas[i],\n proposal.eta\n );\n }\n emit ProposalCancelled(proposalId);\n }\n\n /**\n * @notice Get the actions that a proposal will take.\n * @param proposalId id of the proposal\n */\n function getActions(uint256 proposalId)\n public\n view\n returns (\n address[] memory targets,\n string[] memory signatures,\n bytes[] memory calldatas\n )\n {\n Proposal storage p = proposals[proposalId];\n return (p.targets, p.signatures, p.calldatas);\n }\n}\n" + }, + "contracts/governance/InitializableGovernable.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title OUSD InitializableGovernable Contract\n * @author Origin Protocol Inc\n */\nimport { Initializable } from \"../utils/Initializable.sol\";\n\nimport { Governable } from \"./Governable.sol\";\n\ncontract InitializableGovernable is Governable, Initializable {\n function _initialize(address _newGovernor) internal {\n _changeGovernor(_newGovernor);\n }\n}\n" + }, + "contracts/governance/Strategizable.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { Governable } from \"./Governable.sol\";\n\ncontract Strategizable is Governable {\n event StrategistUpdated(address _address);\n\n // Address of strategist\n address public strategistAddr;\n\n // For future use\n uint256[50] private __gap;\n\n /**\n * @dev Verifies that the caller is either Governor or Strategist.\n */\n modifier onlyGovernorOrStrategist() {\n require(\n msg.sender == strategistAddr || isGovernor(),\n \"Caller is not the Strategist or Governor\"\n );\n _;\n }\n\n /**\n * @dev Set address of Strategist\n * @param _address Address of Strategist\n */\n function setStrategistAddr(address _address) external onlyGovernor {\n _setStrategistAddr(_address);\n }\n\n /**\n * @dev Set address of Strategist\n * @param _address Address of Strategist\n */\n function _setStrategistAddr(address _address) internal {\n strategistAddr = _address;\n emit StrategistUpdated(_address);\n }\n}\n" + }, + "contracts/harvest/AbstractHarvester.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { SafeMath } from \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/utils/math/Math.sol\";\n\nimport { StableMath } from \"../utils/StableMath.sol\";\nimport { Governable } from \"../governance/Governable.sol\";\nimport { IVault } from \"../interfaces/IVault.sol\";\nimport { IOracle } from \"../interfaces/IOracle.sol\";\nimport { IStrategy } from \"../interfaces/IStrategy.sol\";\nimport { IUniswapV2Router } from \"../interfaces/uniswap/IUniswapV2Router02.sol\";\nimport { IUniswapV3Router } from \"../interfaces/uniswap/IUniswapV3Router.sol\";\nimport { IBalancerVault } from \"../interfaces/balancer/IBalancerVault.sol\";\nimport { ICurvePool } from \"../strategies/ICurvePool.sol\";\nimport \"../utils/Helpers.sol\";\n\nabstract contract AbstractHarvester is Governable {\n using SafeERC20 for IERC20;\n using SafeMath for uint256;\n using StableMath for uint256;\n\n enum SwapPlatform {\n UniswapV2Compatible,\n UniswapV3,\n Balancer,\n Curve\n }\n\n event SupportedStrategyUpdate(address strategyAddress, bool isSupported);\n event RewardTokenConfigUpdated(\n address tokenAddress,\n uint16 allowedSlippageBps,\n uint16 harvestRewardBps,\n SwapPlatform swapPlatform,\n address swapPlatformAddr,\n bytes swapData,\n uint256 liquidationLimit,\n bool doSwapRewardToken\n );\n event RewardTokenSwapped(\n address indexed rewardToken,\n address indexed swappedInto,\n SwapPlatform swapPlatform,\n uint256 amountIn,\n uint256 amountOut\n );\n event RewardProceedsTransferred(\n address indexed token,\n address farmer,\n uint256 protcolYield,\n uint256 farmerFee\n );\n event RewardProceedsAddressChanged(address newProceedsAddress);\n\n error EmptyAddress();\n error InvalidSlippageBps();\n error InvalidHarvestRewardBps();\n\n error InvalidSwapPlatform(SwapPlatform swapPlatform);\n\n error InvalidUniswapV2PathLength();\n error InvalidTokenInSwapPath(address token);\n error EmptyBalancerPoolId();\n error InvalidCurvePoolAssetIndex(address token);\n\n error UnsupportedStrategy(address strategyAddress);\n\n error SlippageError(uint256 actualBalance, uint256 minExpected);\n error BalanceMismatchAfterSwap(uint256 actualBalance, uint256 minExpected);\n\n // Configuration properties for harvesting logic of reward tokens\n struct RewardTokenConfig {\n // Max allowed slippage when swapping reward token for a stablecoin denominated in basis points.\n uint16 allowedSlippageBps;\n // Reward when calling a harvest function denominated in basis points.\n uint16 harvestRewardBps;\n // Address of compatible exchange protocol (Uniswap V2/V3, SushiSwap, Balancer and Curve).\n address swapPlatformAddr;\n /* When true the reward token is being swapped. In a need of (temporarily) disabling the swapping of\n * a reward token this needs to be set to false.\n */\n bool doSwapRewardToken;\n // Platform to use for Swapping\n SwapPlatform swapPlatform;\n /* How much token can be sold per one harvest call. If the balance of rewards tokens\n * exceeds that limit multiple harvest calls are required to harvest all of the tokens.\n * Set it to MAX_INT to effectively disable the limit.\n */\n uint256 liquidationLimit;\n }\n\n mapping(address => RewardTokenConfig) public rewardTokenConfigs;\n mapping(address => bool) public supportedStrategies;\n\n address public immutable vaultAddress;\n\n /**\n * Address receiving rewards proceeds. Initially the Vault contract later will possibly\n * be replaced by another contract that eases out rewards distribution.\n **/\n address public rewardProceedsAddress;\n\n /**\n * All tokens are swapped to this token before it gets transferred\n * to the `rewardProceedsAddress`. USDT for OUSD and WETH for OETH.\n **/\n address public immutable baseTokenAddress;\n // Cached decimals for `baseTokenAddress`\n uint256 public immutable baseTokenDecimals;\n\n // Uniswap V2 path for reward tokens using Uniswap V2 Router\n mapping(address => address[]) public uniswapV2Path;\n // Uniswap V3 path for reward tokens using Uniswap V3 Router\n mapping(address => bytes) public uniswapV3Path;\n // Pool ID to use for reward tokens on Balancer\n mapping(address => bytes32) public balancerPoolId;\n\n struct CurvePoolIndices {\n // Casted into uint128 and stored in a struct to save gas\n uint128 rewardTokenIndex;\n uint128 baseTokenIndex;\n }\n // Packed indices of assets on the Curve pool\n mapping(address => CurvePoolIndices) public curvePoolIndices;\n\n constructor(address _vaultAddress, address _baseTokenAddress) {\n require(_vaultAddress != address(0));\n require(_baseTokenAddress != address(0));\n\n vaultAddress = _vaultAddress;\n baseTokenAddress = _baseTokenAddress;\n\n // Cache decimals as well\n baseTokenDecimals = Helpers.getDecimals(_baseTokenAddress);\n }\n\n /***************************************\n Configuration\n ****************************************/\n\n /**\n * Set the Address receiving rewards proceeds.\n * @param _rewardProceedsAddress Address of the reward token\n */\n function setRewardProceedsAddress(address _rewardProceedsAddress)\n external\n onlyGovernor\n {\n if (_rewardProceedsAddress == address(0)) {\n revert EmptyAddress();\n }\n\n rewardProceedsAddress = _rewardProceedsAddress;\n emit RewardProceedsAddressChanged(_rewardProceedsAddress);\n }\n\n /**\n * @dev Add/update a reward token configuration that holds harvesting config variables\n * @param _tokenAddress Address of the reward token\n * @param tokenConfig.allowedSlippageBps uint16 maximum allowed slippage denominated in basis points.\n * Example: 300 == 3% slippage\n * @param tokenConfig.harvestRewardBps uint16 amount of reward tokens the caller of the function is rewarded.\n * Example: 100 == 1%\n * @param tokenConfig.swapPlatformAddr Address Address of a UniswapV2 compatible contract to perform\n * the exchange from reward tokens to stablecoin (currently hard-coded to USDT)\n * @param tokenConfig.liquidationLimit uint256 Maximum amount of token to be sold per one swap function call.\n * When value is 0 there is no limit.\n * @param tokenConfig.doSwapRewardToken bool Disables swapping of the token when set to true,\n * does not cause it to revert though.\n * @param tokenConfig.swapPlatform SwapPlatform to use for Swapping\n * @param swapData Additional data required for swapping\n */\n function setRewardTokenConfig(\n address _tokenAddress,\n RewardTokenConfig calldata tokenConfig,\n bytes calldata swapData\n ) external onlyGovernor {\n if (tokenConfig.allowedSlippageBps > 1000) {\n revert InvalidSlippageBps();\n }\n\n if (tokenConfig.harvestRewardBps > 1000) {\n revert InvalidHarvestRewardBps();\n }\n\n address newRouterAddress = tokenConfig.swapPlatformAddr;\n if (newRouterAddress == address(0)) {\n // Swap router address should be non zero address\n revert EmptyAddress();\n }\n\n address oldRouterAddress = rewardTokenConfigs[_tokenAddress]\n .swapPlatformAddr;\n rewardTokenConfigs[_tokenAddress] = tokenConfig;\n\n // Revert if feed does not exist\n // slither-disable-next-line unused-return\n IOracle(IVault(vaultAddress).priceProvider()).price(_tokenAddress);\n\n IERC20 token = IERC20(_tokenAddress);\n // if changing token swap provider cancel existing allowance\n if (\n /* oldRouterAddress == address(0) when there is no pre-existing\n * configuration for said rewards token\n */\n oldRouterAddress != address(0) &&\n oldRouterAddress != newRouterAddress\n ) {\n token.safeApprove(oldRouterAddress, 0);\n }\n\n // Give SwapRouter infinite approval when needed\n if (oldRouterAddress != newRouterAddress) {\n token.safeApprove(newRouterAddress, 0);\n token.safeApprove(newRouterAddress, type(uint256).max);\n }\n\n SwapPlatform _platform = tokenConfig.swapPlatform;\n if (_platform == SwapPlatform.UniswapV2Compatible) {\n uniswapV2Path[_tokenAddress] = _decodeUniswapV2Path(\n swapData,\n _tokenAddress\n );\n } else if (_platform == SwapPlatform.UniswapV3) {\n uniswapV3Path[_tokenAddress] = _decodeUniswapV3Path(\n swapData,\n _tokenAddress\n );\n } else if (_platform == SwapPlatform.Balancer) {\n balancerPoolId[_tokenAddress] = _decodeBalancerPoolId(\n swapData,\n newRouterAddress,\n _tokenAddress\n );\n } else if (_platform == SwapPlatform.Curve) {\n curvePoolIndices[_tokenAddress] = _decodeCurvePoolIndices(\n swapData,\n newRouterAddress,\n _tokenAddress\n );\n } else {\n // Note: This code is unreachable since Solidity reverts when\n // the value is outside the range of defined values of the enum\n // (even if it's under the max length of the base type)\n revert InvalidSwapPlatform(_platform);\n }\n\n emit RewardTokenConfigUpdated(\n _tokenAddress,\n tokenConfig.allowedSlippageBps,\n tokenConfig.harvestRewardBps,\n _platform,\n newRouterAddress,\n swapData,\n tokenConfig.liquidationLimit,\n tokenConfig.doSwapRewardToken\n );\n }\n\n /**\n * @dev Decodes the data passed into Uniswap V2 path and validates\n * it to make sure the path is for `token` to `baseToken`\n *\n * @param data Ecnoded data passed to the `setRewardTokenConfig`\n * @param token The address of the reward token\n * @return path The validated Uniswap V2 path\n */\n function _decodeUniswapV2Path(bytes calldata data, address token)\n internal\n view\n returns (address[] memory path)\n {\n (path) = abi.decode(data, (address[]));\n uint256 len = path.length;\n\n if (len < 2) {\n // Path should have at least two tokens\n revert InvalidUniswapV2PathLength();\n }\n\n // Do some validation\n if (path[0] != token) {\n revert InvalidTokenInSwapPath(path[0]);\n }\n\n if (path[len - 1] != baseTokenAddress) {\n revert InvalidTokenInSwapPath(path[len - 1]);\n }\n }\n\n /**\n * @dev Decodes the data passed into Uniswap V3 path and validates\n * it to make sure the path is for `token` to `baseToken`\n *\n * @param data Ecnoded data passed to the `setRewardTokenConfig`\n * @param token The address of the reward token\n * @return path The validated Uniswap V3 path\n */\n function _decodeUniswapV3Path(bytes calldata data, address token)\n internal\n view\n returns (bytes calldata path)\n {\n path = data;\n\n address decodedAddress = address(uint160(bytes20(data[0:20])));\n\n if (decodedAddress != token) {\n // Invalid Reward Token in swap path\n revert InvalidTokenInSwapPath(decodedAddress);\n }\n\n decodedAddress = address(uint160(bytes20(data[path.length - 20:])));\n if (decodedAddress != baseTokenAddress) {\n // Invalid Base Token in swap path\n revert InvalidTokenInSwapPath(decodedAddress);\n }\n }\n\n /**\n * @dev Decodes the data passed to Balancer Pool ID\n *\n * @param data Ecnoded data passed to the `setRewardTokenConfig`\n * @return poolId The pool ID\n */\n function _decodeBalancerPoolId(\n bytes calldata data,\n address balancerVault,\n address token\n ) internal view returns (bytes32 poolId) {\n (poolId) = abi.decode(data, (bytes32));\n\n if (poolId == bytes32(0)) {\n revert EmptyBalancerPoolId();\n }\n\n IBalancerVault bVault = IBalancerVault(balancerVault);\n\n // Note: this reverts if token is not a pool asset\n // slither-disable-next-line unused-return\n bVault.getPoolTokenInfo(poolId, token);\n\n // slither-disable-next-line unused-return\n bVault.getPoolTokenInfo(poolId, baseTokenAddress);\n }\n\n /**\n * @dev Decodes the data passed to get the pool indices and\n * checks it against the Curve Pool to make sure it's\n * not misconfigured. The indices are packed into a single\n * uint256 for gas savings\n *\n * @param data Ecnoded data passed to the `setRewardTokenConfig`\n * @param poolAddress Curve pool address\n * @param token The address of the reward token\n * @return indices Packed pool asset indices\n */\n function _decodeCurvePoolIndices(\n bytes calldata data,\n address poolAddress,\n address token\n ) internal view returns (CurvePoolIndices memory indices) {\n indices = abi.decode(data, (CurvePoolIndices));\n\n ICurvePool pool = ICurvePool(poolAddress);\n if (token != pool.coins(indices.rewardTokenIndex)) {\n revert InvalidCurvePoolAssetIndex(token);\n }\n if (baseTokenAddress != pool.coins(indices.baseTokenIndex)) {\n revert InvalidCurvePoolAssetIndex(baseTokenAddress);\n }\n }\n\n /**\n * @dev Flags a strategy as supported or not supported one\n * @param _strategyAddress Address of the strategy\n * @param _isSupported Bool marking strategy as supported or not supported\n */\n function setSupportedStrategy(address _strategyAddress, bool _isSupported)\n external\n onlyGovernor\n {\n supportedStrategies[_strategyAddress] = _isSupported;\n emit SupportedStrategyUpdate(_strategyAddress, _isSupported);\n }\n\n /***************************************\n Rewards\n ****************************************/\n\n /**\n * @dev Transfer token to governor. Intended for recovering tokens stuck in\n * contract, i.e. mistaken sends.\n * @param _asset Address for the asset\n * @param _amount Amount of the asset to transfer\n */\n function transferToken(address _asset, uint256 _amount)\n external\n onlyGovernor\n {\n IERC20(_asset).safeTransfer(governor(), _amount);\n }\n\n /**\n * @dev Collect reward tokens from a specific strategy and swap them for\n * base token on the configured swap platform. Can be called by anyone.\n * Rewards incentivizing the caller are sent to the caller of this function.\n * @param _strategyAddr Address of the strategy to collect rewards from\n */\n function harvestAndSwap(address _strategyAddr) external nonReentrant {\n // Remember _harvest function checks for the validity of _strategyAddr\n _harvestAndSwap(_strategyAddr, msg.sender);\n }\n\n /**\n * @dev Collect reward tokens from a specific strategy and swap them for\n * base token on the configured swap platform. Can be called by anyone\n * @param _strategyAddr Address of the strategy to collect rewards from\n * @param _rewardTo Address where to send a share of harvest rewards to as an incentive\n * for executing this function\n */\n function harvestAndSwap(address _strategyAddr, address _rewardTo)\n external\n nonReentrant\n {\n // Remember _harvest function checks for the validity of _strategyAddr\n _harvestAndSwap(_strategyAddr, _rewardTo);\n }\n\n /**\n * @dev Collect reward tokens from a specific strategy and swap them for\n * base token on the configured swap platform\n * @param _strategyAddr Address of the strategy to collect rewards from\n * @param _rewardTo Address where to send a share of harvest rewards to as an incentive\n * for executing this function\n */\n function _harvestAndSwap(address _strategyAddr, address _rewardTo)\n internal\n {\n _harvest(_strategyAddr);\n IStrategy strategy = IStrategy(_strategyAddr);\n address[] memory rewardTokens = strategy.getRewardTokenAddresses();\n IOracle priceProvider = IOracle(IVault(vaultAddress).priceProvider());\n uint256 len = rewardTokens.length;\n for (uint256 i = 0; i < len; ++i) {\n _swap(rewardTokens[i], _rewardTo, priceProvider);\n }\n }\n\n /**\n * @dev Collect reward tokens from a specific strategy and swap them for\n * base token on the configured swap platform\n * @param _strategyAddr Address of the strategy to collect rewards from.\n */\n function _harvest(address _strategyAddr) internal virtual {\n if (!supportedStrategies[_strategyAddr]) {\n revert UnsupportedStrategy(_strategyAddr);\n }\n\n IStrategy strategy = IStrategy(_strategyAddr);\n strategy.collectRewardTokens();\n }\n\n /**\n * @dev Swap a reward token for the base token on the configured\n * swap platform. The token must have a registered price feed\n * with the price provider\n * @param _swapToken Address of the token to swap\n * @param _rewardTo Address where to send the share of harvest rewards to\n * @param _priceProvider Oracle to get prices of the swap token\n */\n function _swap(\n address _swapToken,\n address _rewardTo,\n IOracle _priceProvider\n ) internal virtual {\n uint256 balance = IERC20(_swapToken).balanceOf(address(this));\n\n // No need to swap if the reward token is the base token. eg USDT or WETH.\n // There is also no limit on the transfer. Everything in the harvester will be transferred\n // to the Dripper regardless of the liquidationLimit config.\n if (_swapToken == baseTokenAddress) {\n IERC20(_swapToken).safeTransfer(rewardProceedsAddress, balance);\n // currently not paying the farmer any rewards as there is no swap\n emit RewardProceedsTransferred(\n baseTokenAddress,\n address(0),\n balance,\n 0\n );\n return;\n }\n\n RewardTokenConfig memory tokenConfig = rewardTokenConfigs[_swapToken];\n\n /* This will trigger a return when reward token configuration has not yet been set\n * or we have temporarily disabled swapping of specific reward token via setting\n * doSwapRewardToken to false.\n */\n if (!tokenConfig.doSwapRewardToken) {\n return;\n }\n\n if (balance == 0) {\n return;\n }\n\n if (tokenConfig.liquidationLimit > 0) {\n balance = Math.min(balance, tokenConfig.liquidationLimit);\n }\n\n // This'll revert if there is no price feed\n uint256 oraclePrice = _priceProvider.price(_swapToken);\n\n // Oracle price is 1e18\n uint256 minExpected = (balance *\n (1e4 - tokenConfig.allowedSlippageBps) * // max allowed slippage\n oraclePrice).scaleBy(\n baseTokenDecimals,\n Helpers.getDecimals(_swapToken)\n ) /\n 1e4 / // fix the max slippage decimal position\n 1e18; // and oracle price decimals position\n\n // Do the swap\n uint256 amountReceived = _doSwap(\n tokenConfig.swapPlatform,\n tokenConfig.swapPlatformAddr,\n _swapToken,\n balance,\n minExpected\n );\n\n if (amountReceived < minExpected) {\n revert SlippageError(amountReceived, minExpected);\n }\n\n emit RewardTokenSwapped(\n _swapToken,\n baseTokenAddress,\n tokenConfig.swapPlatform,\n balance,\n amountReceived\n );\n\n IERC20 baseToken = IERC20(baseTokenAddress);\n uint256 baseTokenBalance = baseToken.balanceOf(address(this));\n if (baseTokenBalance < amountReceived) {\n // Note: It's possible to bypass this check by transferring `baseToken`\n // directly to Harvester before calling the `harvestAndSwap`. However,\n // there's no incentive for an attacker to do that. Doing a balance diff\n // will increase the gas cost significantly\n revert BalanceMismatchAfterSwap(baseTokenBalance, amountReceived);\n }\n\n // Farmer only gets fee from the base amount they helped farm,\n // They do not get anything from anything that already was there\n // on the Harvester\n uint256 farmerFee = amountReceived.mulTruncateScale(\n tokenConfig.harvestRewardBps,\n 1e4\n );\n uint256 protocolYield = baseTokenBalance - farmerFee;\n\n baseToken.safeTransfer(rewardProceedsAddress, protocolYield);\n baseToken.safeTransfer(_rewardTo, farmerFee);\n emit RewardProceedsTransferred(\n baseTokenAddress,\n _rewardTo,\n protocolYield,\n farmerFee\n );\n }\n\n function _doSwap(\n SwapPlatform swapPlatform,\n address routerAddress,\n address rewardTokenAddress,\n uint256 amountIn,\n uint256 minAmountOut\n ) internal returns (uint256 amountOut) {\n if (swapPlatform == SwapPlatform.UniswapV2Compatible) {\n return\n _swapWithUniswapV2(\n routerAddress,\n rewardTokenAddress,\n amountIn,\n minAmountOut\n );\n } else if (swapPlatform == SwapPlatform.UniswapV3) {\n return\n _swapWithUniswapV3(\n routerAddress,\n rewardTokenAddress,\n amountIn,\n minAmountOut\n );\n } else if (swapPlatform == SwapPlatform.Balancer) {\n return\n _swapWithBalancer(\n routerAddress,\n rewardTokenAddress,\n amountIn,\n minAmountOut\n );\n } else if (swapPlatform == SwapPlatform.Curve) {\n return\n _swapWithCurve(\n routerAddress,\n rewardTokenAddress,\n amountIn,\n minAmountOut\n );\n } else {\n // Should never be invoked since we catch invalid values\n // in the `setRewardTokenConfig` function before it's set\n revert InvalidSwapPlatform(swapPlatform);\n }\n }\n\n /**\n * @dev Swaps the token to `baseToken` with Uniswap V2\n *\n * @param routerAddress Uniswap V2 Router address\n * @param swapToken Address of the tokenIn\n * @param amountIn Amount of `swapToken` to swap\n * @param minAmountOut Minimum expected amount of `baseToken`\n *\n * @return amountOut Amount of `baseToken` received after the swap\n */\n function _swapWithUniswapV2(\n address routerAddress,\n address swapToken,\n uint256 amountIn,\n uint256 minAmountOut\n ) internal returns (uint256 amountOut) {\n address[] memory path = uniswapV2Path[swapToken];\n\n uint256[] memory amounts = IUniswapV2Router(routerAddress)\n .swapExactTokensForTokens(\n amountIn,\n minAmountOut,\n path,\n address(this),\n block.timestamp\n );\n\n amountOut = amounts[amounts.length - 1];\n }\n\n /**\n * @dev Swaps the token to `baseToken` with Uniswap V3\n *\n * @param routerAddress Uniswap V3 Router address\n * @param swapToken Address of the tokenIn\n * @param amountIn Amount of `swapToken` to swap\n * @param minAmountOut Minimum expected amount of `baseToken`\n *\n * @return amountOut Amount of `baseToken` received after the swap\n */\n function _swapWithUniswapV3(\n address routerAddress,\n address swapToken,\n uint256 amountIn,\n uint256 minAmountOut\n ) internal returns (uint256 amountOut) {\n bytes memory path = uniswapV3Path[swapToken];\n\n IUniswapV3Router.ExactInputParams memory params = IUniswapV3Router\n .ExactInputParams({\n path: path,\n recipient: address(this),\n deadline: block.timestamp,\n amountIn: amountIn,\n amountOutMinimum: minAmountOut\n });\n amountOut = IUniswapV3Router(routerAddress).exactInput(params);\n }\n\n /**\n * @dev Swaps the token to `baseToken` on Balancer\n *\n * @param balancerVaultAddress BalancerVaultAddress\n * @param swapToken Address of the tokenIn\n * @param amountIn Amount of `swapToken` to swap\n * @param minAmountOut Minimum expected amount of `baseToken`\n *\n * @return amountOut Amount of `baseToken` received after the swap\n */\n function _swapWithBalancer(\n address balancerVaultAddress,\n address swapToken,\n uint256 amountIn,\n uint256 minAmountOut\n ) internal returns (uint256 amountOut) {\n bytes32 poolId = balancerPoolId[swapToken];\n\n IBalancerVault.SingleSwap memory singleSwap = IBalancerVault\n .SingleSwap({\n poolId: poolId,\n kind: IBalancerVault.SwapKind.GIVEN_IN,\n assetIn: swapToken,\n assetOut: baseTokenAddress,\n amount: amountIn,\n userData: hex\"\"\n });\n\n IBalancerVault.FundManagement memory fundMgmt = IBalancerVault\n .FundManagement({\n sender: address(this),\n fromInternalBalance: false,\n recipient: payable(address(this)),\n toInternalBalance: false\n });\n\n amountOut = IBalancerVault(balancerVaultAddress).swap(\n singleSwap,\n fundMgmt,\n minAmountOut,\n block.timestamp\n );\n }\n\n /**\n * @dev Swaps the token to `baseToken` on Curve\n *\n * @param poolAddress Curve Pool Address\n * @param swapToken Address of the tokenIn\n * @param amountIn Amount of `swapToken` to swap\n * @param minAmountOut Minimum expected amount of `baseToken`\n *\n * @return amountOut Amount of `baseToken` received after the swap\n */\n function _swapWithCurve(\n address poolAddress,\n address swapToken,\n uint256 amountIn,\n uint256 minAmountOut\n ) internal returns (uint256 amountOut) {\n CurvePoolIndices memory indices = curvePoolIndices[swapToken];\n\n // Note: Not all CurvePools return the `amountOut`, make sure\n // to use only pool that do. Otherwise the swap would revert\n // always\n amountOut = ICurvePool(poolAddress).exchange(\n uint256(indices.rewardTokenIndex),\n uint256(indices.baseTokenIndex),\n amountIn,\n minAmountOut\n );\n }\n}\n" + }, + "contracts/harvest/Dripper.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { Governable } from \"../governance/Governable.sol\";\nimport { IVault } from \"../interfaces/IVault.sol\";\n\n/**\n * @title OUSD Dripper\n *\n * The dripper contract smooths out the yield from point-in-time yield events\n * and spreads the yield out over a configurable time period. This ensures a\n * continuous per block yield to makes users happy as their next rebase\n * amount is always moving up. Also, this makes historical day to day yields\n * smooth, rather than going from a near zero day, to a large APY day, then\n * back to a near zero day again.\n *\n *\n * Design notes\n * - USDT has a smaller resolution than the number of seconds\n * in a week, which can make per block payouts have a rounding error. However\n * the total effect is not large - cents per day, and this money is\n * not lost, just distributed in the future. While we could use a higher\n * decimal precision for the drip perBlock, we chose simpler code.\n * - By calculating the changing drip rates on collects only, harvests and yield\n * events don't have to call anything on this contract or pay any extra gas.\n * Collect() is already be paying for a single write, since it has to reset\n * the lastCollect time.\n * - By having a collectAndRebase method, and having our external systems call\n * that, the OUSD vault does not need any changes, not even to know the address\n * of the dripper.\n * - A rejected design was to retro-calculate the drip rate on each collect,\n * based on the balance at the time of the collect. While this would have\n * required less state, and would also have made the contract respond more quickly\n * to new income, it would break the predictability that is this contract's entire\n * purpose. If we did this, the amount of fundsAvailable() would make sharp increases\n * when funds were deposited.\n * - When the dripper recalculates the rate, it targets spending the balance over\n * the duration. This means that every time that collect is called, if no\n * new funds have been deposited the duration is being pushed back and the\n * rate decreases. This is expected, and ends up following a smoother but\n * longer curve the more collect() is called without incoming yield.\n *\n */\n\ncontract Dripper is Governable {\n using SafeERC20 for IERC20;\n\n struct Drip {\n uint64 lastCollect; // overflows 262 billion years after the sun dies\n uint192 perBlock; // drip rate per block\n }\n\n address immutable vault; // OUSD vault\n address immutable token; // token to drip out\n uint256 public dripDuration; // in seconds\n Drip public drip; // active drip parameters\n\n constructor(address _vault, address _token) {\n vault = _vault;\n token = _token;\n }\n\n /// @notice How much funds have dripped out already and are currently\n // available to be sent to the vault.\n /// @return The amount that would be sent if a collect was called\n function availableFunds() external view returns (uint256) {\n uint256 balance = IERC20(token).balanceOf(address(this));\n return _availableFunds(balance, drip);\n }\n\n /// @notice Collect all dripped funds and send to vault.\n /// Recalculate new drip rate.\n function collect() external {\n _collect();\n }\n\n /// @notice Collect all dripped funds, send to vault, recalculate new drip\n /// rate, and rebase OUSD.\n function collectAndRebase() external {\n _collect();\n IVault(vault).rebase();\n }\n\n /// @dev Change the drip duration. Governor only.\n /// @param _durationSeconds the number of seconds to drip out the entire\n /// balance over if no collects were called during that time.\n function setDripDuration(uint256 _durationSeconds) external onlyGovernor {\n require(_durationSeconds > 0, \"duration must be non-zero\");\n dripDuration = _durationSeconds;\n _collect(); // duration change take immediate effect\n }\n\n /// @dev Transfer out ERC20 tokens held by the contract. Governor only.\n /// @param _asset ERC20 token address\n /// @param _amount amount to transfer\n function transferToken(address _asset, uint256 _amount)\n external\n onlyGovernor\n {\n IERC20(_asset).safeTransfer(governor(), _amount);\n }\n\n /// @dev Calculate available funds by taking the lower of either the\n /// currently dripped out funds or the balance available.\n /// Uses passed in parameters to calculate with for gas savings.\n /// @param _balance current balance in contract\n /// @param _drip current drip parameters\n function _availableFunds(uint256 _balance, Drip memory _drip)\n internal\n view\n returns (uint256)\n {\n uint256 elapsed = block.timestamp - _drip.lastCollect;\n uint256 allowed = (elapsed * _drip.perBlock);\n return (allowed > _balance) ? _balance : allowed;\n }\n\n /// @dev Sends the currently dripped funds to be vault, and sets\n /// the new drip rate based on the new balance.\n function _collect() internal {\n // Calculate send\n uint256 balance = IERC20(token).balanceOf(address(this));\n uint256 amountToSend = _availableFunds(balance, drip);\n uint256 remaining = balance - amountToSend;\n // Calculate new drip perBlock\n // Gas savings by setting entire struct at one time\n drip = Drip({\n perBlock: uint192(remaining / dripDuration),\n lastCollect: uint64(block.timestamp)\n });\n // Send funds\n IERC20(token).safeTransfer(vault, amountToSend);\n }\n}\n" + }, + "contracts/harvest/Harvester.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { AbstractHarvester } from \"./AbstractHarvester.sol\";\n\ncontract Harvester is AbstractHarvester {\n constructor(address _vault, address _usdtAddress)\n AbstractHarvester(_vault, _usdtAddress)\n {}\n}\n" + }, + "contracts/harvest/OETHDripper.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { Dripper } from \"./Dripper.sol\";\n\n/**\n * @title OETH Dripper Contract\n * @author Origin Protocol Inc\n */\ncontract OETHDripper is Dripper {\n constructor(address _vault, address _token) Dripper(_vault, _token) {}\n}\n" + }, + "contracts/harvest/OETHHarvester.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { AbstractHarvester } from \"./AbstractHarvester.sol\";\n\ncontract OETHHarvester is AbstractHarvester {\n constructor(address _vault, address _wethAddress)\n AbstractHarvester(_vault, _wethAddress)\n {}\n}\n" + }, + "contracts/interfaces/balancer/IBalancerVault.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"../../utils/InitializableAbstractStrategy.sol\";\n\ninterface IBalancerVault {\n enum WeightedPoolJoinKind {\n INIT,\n EXACT_TOKENS_IN_FOR_BPT_OUT,\n TOKEN_IN_FOR_EXACT_BPT_OUT,\n ALL_TOKENS_IN_FOR_EXACT_BPT_OUT,\n ADD_TOKEN\n }\n\n enum WeightedPoolExitKind {\n EXACT_BPT_IN_FOR_ONE_TOKEN_OUT,\n EXACT_BPT_IN_FOR_TOKENS_OUT,\n BPT_IN_FOR_EXACT_TOKENS_OUT,\n REMOVE_TOKEN\n }\n\n /**\n * @dev Called by users to join a Pool, which transfers tokens from `sender` into the Pool's balance. This will\n * trigger custom Pool behavior, which will typically grant something in return to `recipient` - often tokenized\n * Pool shares.\n *\n * If the caller is not `sender`, it must be an authorized relayer for them.\n *\n * The `assets` and `maxAmountsIn` arrays must have the same length, and each entry indicates the maximum amount\n * to send for each asset. The amounts to send are decided by the Pool and not the Vault: it just enforces\n * these maximums.\n *\n * If joining a Pool that holds WETH, it is possible to send ETH directly: the Vault will do the wrapping. To enable\n * this mechanism, the IAsset sentinel value (the zero address) must be passed in the `assets` array instead of the\n * WETH address. Note that it is not possible to combine ETH and WETH in the same join. Any excess ETH will be sent\n * back to the caller (not the sender, which is important for relayers).\n *\n * `assets` must have the same length and order as the array returned by `getPoolTokens`. This prevents issues when\n * interacting with Pools that register and deregister tokens frequently. If sending ETH however, the array must be\n * sorted *before* replacing the WETH address with the ETH sentinel value (the zero address), which means the final\n * `assets` array might not be sorted. Pools with no registered tokens cannot be joined.\n *\n * If `fromInternalBalance` is true, the caller's Internal Balance will be preferred: ERC20 transfers will only\n * be made for the difference between the requested amount and Internal Balance (if any). Note that ETH cannot be\n * withdrawn from Internal Balance: attempting to do so will trigger a revert.\n *\n * This causes the Vault to call the `IBasePool.onJoinPool` hook on the Pool's contract, where Pools implement\n * their own custom logic. This typically requires additional information from the user (such as the expected number\n * of Pool shares). This can be encoded in the `userData` argument, which is ignored by the Vault and passed\n * directly to the Pool's contract, as is `recipient`.\n *\n * Emits a `PoolBalanceChanged` event.\n */\n function joinPool(\n bytes32 poolId,\n address sender,\n address recipient,\n JoinPoolRequest memory request\n ) external payable;\n\n struct JoinPoolRequest {\n address[] assets;\n uint256[] maxAmountsIn;\n bytes userData;\n bool fromInternalBalance;\n }\n\n /**\n * @dev Called by users to exit a Pool, which transfers tokens from the Pool's balance to `recipient`. This will\n * trigger custom Pool behavior, which will typically ask for something in return from `sender` - often tokenized\n * Pool shares. The amount of tokens that can be withdrawn is limited by the Pool's `cash` balance (see\n * `getPoolTokenInfo`).\n *\n * If the caller is not `sender`, it must be an authorized relayer for them.\n *\n * The `tokens` and `minAmountsOut` arrays must have the same length, and each entry in these indicates the minimum\n * token amount to receive for each token contract. The amounts to send are decided by the Pool and not the Vault:\n * it just enforces these minimums.\n *\n * If exiting a Pool that holds WETH, it is possible to receive ETH directly: the Vault will do the unwrapping. To\n * enable this mechanism, the IAsset sentinel value (the zero address) must be passed in the `assets` array instead\n * of the WETH address. Note that it is not possible to combine ETH and WETH in the same exit.\n *\n * `assets` must have the same length and order as the array returned by `getPoolTokens`. This prevents issues when\n * interacting with Pools that register and deregister tokens frequently. If receiving ETH however, the array must\n * be sorted *before* replacing the WETH address with the ETH sentinel value (the zero address), which means the\n * final `assets` array might not be sorted. Pools with no registered tokens cannot be exited.\n *\n * If `toInternalBalance` is true, the tokens will be deposited to `recipient`'s Internal Balance. Otherwise,\n * an ERC20 transfer will be performed. Note that ETH cannot be deposited to Internal Balance: attempting to\n * do so will trigger a revert.\n *\n * `minAmountsOut` is the minimum amount of tokens the user expects to get out of the Pool, for each token in the\n * `tokens` array. This array must match the Pool's registered tokens.\n *\n * This causes the Vault to call the `IBasePool.onExitPool` hook on the Pool's contract, where Pools implement\n * their own custom logic. This typically requires additional information from the user (such as the expected number\n * of Pool shares to return). This can be encoded in the `userData` argument, which is ignored by the Vault and\n * passed directly to the Pool's contract.\n *\n * Emits a `PoolBalanceChanged` event.\n */\n function exitPool(\n bytes32 poolId,\n address sender,\n address payable recipient,\n ExitPoolRequest memory request\n ) external;\n\n struct ExitPoolRequest {\n address[] assets;\n uint256[] minAmountsOut;\n bytes userData;\n bool toInternalBalance;\n }\n\n /**\n * @dev Returns a Pool's registered tokens, the total balance for each, and the latest block when *any* of\n * the tokens' `balances` changed.\n *\n * The order of the `tokens` array is the same order that will be used in `joinPool`, `exitPool`, as well as in all\n * Pool hooks (where applicable). Calls to `registerTokens` and `deregisterTokens` may change this order.\n *\n * If a Pool only registers tokens once, and these are sorted in ascending order, they will be stored in the same\n * order as passed to `registerTokens`.\n *\n * Total balances include both tokens held by the Vault and those withdrawn by the Pool's Asset Managers. These are\n * the amounts used by joins, exits and swaps. For a detailed breakdown of token balances, use `getPoolTokenInfo`\n * instead.\n */\n function getPoolTokens(bytes32 poolId)\n external\n view\n returns (\n IERC20[] memory tokens,\n uint256[] memory balances,\n uint256 lastChangeBlock\n );\n\n /**\n * @dev Performs a set of user balance operations, which involve Internal Balance (deposit, withdraw or transfer)\n * and plain ERC20 transfers using the Vault's allowance. This last feature is particularly useful for relayers, as\n * it lets integrators reuse a user's Vault allowance.\n *\n * For each operation, if the caller is not `sender`, it must be an authorized relayer for them.\n */\n function manageUserBalance(UserBalanceOp[] memory ops) external payable;\n\n struct UserBalanceOp {\n UserBalanceOpKind kind;\n address asset;\n uint256 amount;\n address sender;\n address payable recipient;\n }\n\n enum UserBalanceOpKind {\n DEPOSIT_INTERNAL,\n WITHDRAW_INTERNAL,\n TRANSFER_INTERNAL,\n TRANSFER_EXTERNAL\n }\n\n enum SwapKind {\n GIVEN_IN,\n GIVEN_OUT\n }\n\n struct SingleSwap {\n bytes32 poolId;\n SwapKind kind;\n address assetIn;\n address assetOut;\n uint256 amount;\n bytes userData;\n }\n\n struct FundManagement {\n address sender;\n bool fromInternalBalance;\n address payable recipient;\n bool toInternalBalance;\n }\n\n function swap(\n SingleSwap calldata singleSwap,\n FundManagement calldata funds,\n uint256 limit,\n uint256 deadline\n ) external returns (uint256 amountCalculated);\n\n function getPoolTokenInfo(bytes32 poolId, address token)\n external\n view\n returns (\n uint256 cash,\n uint256 managed,\n uint256 lastChangeBlock,\n address assetManager\n );\n}\n" + }, + "contracts/interfaces/balancer/IMetaStablePool.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IRateProvider } from \"./IRateProvider.sol\";\n\ninterface IMetaStablePool {\n function getRateProviders()\n external\n view\n returns (IRateProvider[] memory providers);\n}\n" + }, + "contracts/interfaces/balancer/IOracleWeightedPool.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// The three values that can be queried:\n//\n// - PAIR_PRICE: the price of the tokens in the Pool, expressed as the price of the second token in units of the\n// first token. For example, if token A is worth $2, and token B is worth $4, the pair price will be 2.0.\n// Note that the price is computed *including* the tokens decimals. This means that the pair price of a Pool with\n// DAI and USDC will be close to 1.0, despite DAI having 18 decimals and USDC 6.\n//\n// - BPT_PRICE: the price of the Pool share token (BPT), in units of the first token.\n// Note that the price is computed *including* the tokens decimals. This means that the BPT price of a Pool with\n// USDC in which BPT is worth $5 will be 5.0, despite the BPT having 18 decimals and USDC 6.\n//\n// - INVARIANT: the value of the Pool's invariant, which serves as a measure of its liquidity.\nenum Variable {\n PAIR_PRICE,\n BPT_PRICE,\n INVARIANT\n}\n\n/**\n * @dev Information for a Time Weighted Average query.\n *\n * Each query computes the average over a window of duration `secs` seconds that ended `ago` seconds ago. For\n * example, the average over the past 30 minutes is computed by settings secs to 1800 and ago to 0. If secs is 1800\n * and ago is 1800 as well, the average between 60 and 30 minutes ago is computed instead.\n */\nstruct OracleAverageQuery {\n Variable variable;\n uint256 secs;\n uint256 ago;\n}\n\ninterface IOracleWeightedPool {\n /**\n * @dev Returns the time average weighted price corresponding to each of `queries`. Prices are represented as 18\n * decimal fixed point values.\n */\n function getTimeWeightedAverage(OracleAverageQuery[] memory queries)\n external\n view\n returns (uint256[] memory results);\n}\n" + }, + "contracts/interfaces/balancer/IRateProvider.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.8.0;\n\ninterface IRateProvider {\n function getRate() external view returns (uint256);\n}\n" + }, + "contracts/interfaces/chainlink/AggregatorV3Interface.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface AggregatorV3Interface {\n function decimals() external view returns (uint8);\n\n function description() external view returns (string memory);\n\n function version() external view returns (uint256);\n\n // getRoundData and latestRoundData should both raise \"No data present\"\n // if they do not have data to report, instead of returning unset values\n // which could be misinterpreted as actual reported values.\n function getRoundData(uint80 _roundId)\n external\n view\n returns (\n uint80 roundId,\n int256 answer,\n uint256 startedAt,\n uint256 updatedAt,\n uint80 answeredInRound\n );\n\n function latestRoundData()\n external\n view\n returns (\n uint80 roundId,\n int256 answer,\n uint256 startedAt,\n uint256 updatedAt,\n uint80 answeredInRound\n );\n}\n" + }, + "contracts/interfaces/IBasicToken.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IBasicToken {\n function symbol() external view returns (string memory);\n\n function decimals() external view returns (uint8);\n}\n" + }, + "contracts/interfaces/IBuyback.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IBuyback {\n function swap() external;\n}\n" + }, + "contracts/interfaces/IComptroller.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IComptroller {\n // Claim all the COMP accrued by specific holders in specific markets for their supplies and/or borrows\n function claimComp(\n address[] memory holders,\n address[] memory cTokens,\n bool borrowers,\n bool suppliers\n ) external;\n\n function oracle() external view returns (address);\n}\n" + }, + "contracts/interfaces/ICVXLocker.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface ICVXLocker {\n function lock(\n address _account,\n uint256 _amount,\n uint256 _spendRatio\n ) external;\n\n function lockedBalanceOf(address _account) external view returns (uint256);\n}\n" + }, + "contracts/interfaces/IDepositContract.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IDepositContract {\n /// @notice A processed deposit event.\n event DepositEvent(\n bytes pubkey,\n bytes withdrawal_credentials,\n bytes amount,\n bytes signature,\n bytes index\n );\n\n /// @notice Submit a Phase 0 DepositData object.\n /// @param pubkey A BLS12-381 public key.\n /// @param withdrawal_credentials Commitment to a public key for withdrawals.\n /// @param signature A BLS12-381 signature.\n /// @param deposit_data_root The SHA-256 hash of the SSZ-encoded DepositData object.\n /// Used as a protection against malformed input.\n function deposit(\n bytes calldata pubkey,\n bytes calldata withdrawal_credentials,\n bytes calldata signature,\n bytes32 deposit_data_root\n ) external payable;\n\n /// @notice Query the current deposit root hash.\n /// @return The deposit root hash.\n function get_deposit_root() external view returns (bytes32);\n\n /// @notice Query the current deposit count.\n /// @return The deposit count encoded as a little endian 64-bit number.\n function get_deposit_count() external view returns (bytes memory);\n}\n" + }, + "contracts/interfaces/IDripper.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IDripper {\n /// @notice How much funds have dripped out already and are currently\n // available to be sent to the vault.\n /// @return The amount that would be sent if a collect was called\n function availableFunds() external view returns (uint256);\n\n /// @notice Collect all dripped funds and send to vault.\n /// Recalculate new drip rate.\n function collect() external;\n\n /// @notice Collect all dripped funds, send to vault, recalculate new drip\n /// rate, and rebase mToken.\n function collectAndRebase() external;\n\n /// @notice Change the drip duration. Governor only.\n /// @param _durationSeconds the number of seconds to drip out the entire\n /// balance over if no collects were called during that time.\n function setDripDuration(uint256 _durationSeconds) external;\n\n /// @dev Transfer out ERC20 tokens held by the contract. Governor only.\n /// @param _asset ERC20 token address\n /// @param _amount amount to transfer\n function transferToken(address _asset, uint256 _amount) external;\n}\n" + }, + "contracts/interfaces/IEthUsdOracle.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IEthUsdOracle {\n /**\n * @notice Returns ETH price in USD.\n * @return Price in USD with 6 decimal digits.\n */\n function ethUsdPrice() external view returns (uint256);\n\n /**\n * @notice Returns token price in USD.\n * @param symbol. Asset symbol. For ex. \"DAI\".\n * @return Price in USD with 6 decimal digits.\n */\n function tokUsdPrice(string calldata symbol)\n external\n view\n returns (uint256);\n\n /**\n * @notice Returns the asset price in ETH.\n * @param symbol. Asset symbol. For ex. \"DAI\".\n * @return Price in ETH with 8 decimal digits.\n */\n function tokEthPrice(string calldata symbol)\n external\n view\n returns (uint256);\n}\n\ninterface IViewEthUsdOracle {\n /**\n * @notice Returns ETH price in USD.\n * @return Price in USD with 6 decimal digits.\n */\n function ethUsdPrice() external view returns (uint256);\n\n /**\n * @notice Returns token price in USD.\n * @param symbol. Asset symbol. For ex. \"DAI\".\n * @return Price in USD with 6 decimal digits.\n */\n function tokUsdPrice(string calldata symbol)\n external\n view\n returns (uint256);\n\n /**\n * @notice Returns the asset price in ETH.\n * @param symbol. Asset symbol. For ex. \"DAI\".\n * @return Price in ETH with 8 decimal digits.\n */\n function tokEthPrice(string calldata symbol)\n external\n view\n returns (uint256);\n}\n" + }, + "contracts/interfaces/IFraxETHMinter.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IFraxETHMinter {\n function submitAndDeposit(address recipient)\n external\n payable\n returns (uint256 shares);\n}\n" + }, + "contracts/interfaces/IGetExchangeRateToken.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IGetExchangeRateToken {\n function getExchangeRate() external view returns (uint256 _exchangeRate);\n}\n" + }, + "contracts/interfaces/IMinMaxOracle.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IMinMaxOracle {\n //Assuming 8 decimals\n function priceMin(string calldata symbol) external view returns (uint256);\n\n function priceMax(string calldata symbol) external view returns (uint256);\n}\n" + }, + "contracts/interfaces/IOETHZapper.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IOETHZapper {\n function deposit() external payable returns (uint256);\n}\n" + }, + "contracts/interfaces/IOneInch.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// 1Inch swap data\nstruct SwapDescription {\n IERC20 srcToken; // contract address of a token to sell\n IERC20 dstToken; // contract address of a token to buy\n address payable srcReceiver;\n address payable dstReceiver; // Receiver of destination currency. default: fromAddress\n uint256 amount;\n uint256 minReturnAmount;\n uint256 flags;\n}\n\n/// @title Interface for making arbitrary calls during swap\ninterface IAggregationExecutor {\n /// @notice propagates information about original msg.sender and executes arbitrary data\n function execute(address msgSender) external payable; // 0x4b64e492\n}\n\ninterface IOneInchRouter {\n /// @notice Performs a swap, delegating all calls encoded in `data` to `executor`.\n function swap(\n IAggregationExecutor executor,\n SwapDescription calldata desc,\n bytes calldata permit,\n bytes calldata data\n ) external returns (uint256 returnAmount, uint256 spentAmount);\n\n /// @notice Performs swap using Uniswap exchange. Wraps and unwraps ETH if required.\n function unoswapTo(\n address payable recipient,\n IERC20 srcToken,\n uint256 amount,\n uint256 minReturn,\n uint256[] calldata pools\n ) external payable returns (uint256 returnAmount);\n\n /// @notice Performs swap using Uniswap V3 exchange. Wraps and unwraps ETH if required.\n function uniswapV3SwapTo(\n address payable recipient,\n uint256 amount,\n uint256 minReturn,\n uint256[] calldata pools\n ) external payable returns (uint256 returnAmount);\n}\n" + }, + "contracts/interfaces/IOracle.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IOracle {\n /**\n * @dev returns the asset price in USD, in 8 decimal digits.\n *\n * The version of priceProvider deployed for OETH has 18 decimal digits\n */\n function price(address asset) external view returns (uint256);\n}\n" + }, + "contracts/interfaces/IOUSD.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IOUSD {\n event Approval(\n address indexed owner,\n address indexed spender,\n uint256 value\n );\n event GovernorshipTransferred(\n address indexed previousGovernor,\n address indexed newGovernor\n );\n event PendingGovernorshipTransfer(\n address indexed previousGovernor,\n address indexed newGovernor\n );\n event TotalSupplyUpdatedHighres(\n uint256 totalSupply,\n uint256 rebasingCredits,\n uint256 rebasingCreditsPerToken\n );\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n function _totalSupply() external view returns (uint256);\n\n function allowance(address _owner, address _spender)\n external\n view\n returns (uint256);\n\n function approve(address _spender, uint256 _value) external returns (bool);\n\n function balanceOf(address _account) external view returns (uint256);\n\n function burn(address account, uint256 amount) external;\n\n function changeSupply(uint256 _newTotalSupply) external;\n\n function claimGovernance() external;\n\n function creditsBalanceOf(address _account)\n external\n view\n returns (uint256, uint256);\n\n function creditsBalanceOfHighres(address _account)\n external\n view\n returns (\n uint256,\n uint256,\n bool\n );\n\n function decimals() external view returns (uint8);\n\n function decreaseAllowance(address _spender, uint256 _subtractedValue)\n external\n returns (bool);\n\n function governor() external view returns (address);\n\n function increaseAllowance(address _spender, uint256 _addedValue)\n external\n returns (bool);\n\n function initialize(\n string memory _nameArg,\n string memory _symbolArg,\n address _vaultAddress\n ) external;\n\n function isGovernor() external view returns (bool);\n\n function isUpgraded(address) external view returns (uint256);\n\n function mint(address _account, uint256 _amount) external;\n\n function name() external view returns (string memory);\n\n function nonRebasingCreditsPerToken(address)\n external\n view\n returns (uint256);\n\n function nonRebasingSupply() external view returns (uint256);\n\n function rebaseOptIn() external;\n\n function rebaseOptOut() external;\n\n function rebaseState(address) external view returns (uint8);\n\n function rebasingCredits() external view returns (uint256);\n\n function rebasingCreditsHighres() external view returns (uint256);\n\n function rebasingCreditsPerToken() external view returns (uint256);\n\n function rebasingCreditsPerTokenHighres() external view returns (uint256);\n\n function symbol() external view returns (string memory);\n\n function totalSupply() external view returns (uint256);\n\n function transfer(address _to, uint256 _value) external returns (bool);\n\n function transferFrom(\n address _from,\n address _to,\n uint256 _value\n ) external returns (bool);\n\n function transferGovernance(address _newGovernor) external;\n\n function vaultAddress() external view returns (address);\n}\n" + }, + "contracts/interfaces/IPriceOracle.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IPriceOracle {\n /**\n * @dev returns the asset price in USD, 6 decimal digits.\n * Compatible with the Open Price Feed.\n */\n function price(string calldata symbol) external view returns (uint256);\n}\n" + }, + "contracts/interfaces/IRETH.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IRETH {\n function getEthValue(uint256 _rethAmount) external view returns (uint256);\n\n function getRethValue(uint256 _ethAmount) external view returns (uint256);\n\n function getExchangeRate() external view returns (uint256);\n\n function totalSupply() external view returns (uint256);\n\n function balanceOf(address account) external view returns (uint256);\n\n function transfer(address recipient, uint256 amount)\n external\n returns (bool);\n\n function allowance(address owner, address spender)\n external\n view\n returns (uint256);\n\n function approve(address spender, uint256 amount) external returns (bool);\n\n function transferFrom(\n address sender,\n address recipient,\n uint256 amount\n ) external returns (bool);\n\n function name() external view returns (string memory);\n\n function symbol() external view returns (string memory);\n\n function decimals() external view returns (uint8);\n}\n" + }, + "contracts/interfaces/ISfrxETH.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface ISfrxETH {\n event Approval(\n address indexed owner,\n address indexed spender,\n uint256 amount\n );\n event Deposit(\n address indexed caller,\n address indexed owner,\n uint256 assets,\n uint256 shares\n );\n event NewRewardsCycle(uint32 indexed cycleEnd, uint256 rewardAmount);\n event Transfer(address indexed from, address indexed to, uint256 amount);\n event Withdraw(\n address indexed caller,\n address indexed receiver,\n address indexed owner,\n uint256 assets,\n uint256 shares\n );\n\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n\n function allowance(address, address) external view returns (uint256);\n\n function approve(address spender, uint256 amount) external returns (bool);\n\n function asset() external view returns (address);\n\n function balanceOf(address) external view returns (uint256);\n\n function convertToAssets(uint256 shares) external view returns (uint256);\n\n function convertToShares(uint256 assets) external view returns (uint256);\n\n function decimals() external view returns (uint8);\n\n function deposit(uint256 assets, address receiver)\n external\n returns (uint256 shares);\n\n function depositWithSignature(\n uint256 assets,\n address receiver,\n uint256 deadline,\n bool approveMax,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) external returns (uint256 shares);\n\n function lastRewardAmount() external view returns (uint192);\n\n function lastSync() external view returns (uint32);\n\n function maxDeposit(address) external view returns (uint256);\n\n function maxMint(address) external view returns (uint256);\n\n function maxRedeem(address owner) external view returns (uint256);\n\n function maxWithdraw(address owner) external view returns (uint256);\n\n function mint(uint256 shares, address receiver)\n external\n returns (uint256 assets);\n\n function name() external view returns (string memory);\n\n function nonces(address) external view returns (uint256);\n\n function permit(\n address owner,\n address spender,\n uint256 value,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) external;\n\n function previewDeposit(uint256 assets) external view returns (uint256);\n\n function previewMint(uint256 shares) external view returns (uint256);\n\n function previewRedeem(uint256 shares) external view returns (uint256);\n\n function previewWithdraw(uint256 assets) external view returns (uint256);\n\n function pricePerShare() external view returns (uint256);\n\n function redeem(\n uint256 shares,\n address receiver,\n address owner\n ) external returns (uint256 assets);\n\n function rewardsCycleEnd() external view returns (uint32);\n\n function rewardsCycleLength() external view returns (uint32);\n\n function symbol() external view returns (string memory);\n\n function syncRewards() external;\n\n function totalAssets() external view returns (uint256);\n\n function totalSupply() external view returns (uint256);\n\n function transfer(address to, uint256 amount) external returns (bool);\n\n function transferFrom(\n address from,\n address to,\n uint256 amount\n ) external returns (bool);\n\n function withdraw(\n uint256 assets,\n address receiver,\n address owner\n ) external returns (uint256 shares);\n}\n" + }, + "contracts/interfaces/ISSVNetwork.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nstruct Cluster {\n uint32 validatorCount;\n uint64 networkFeeIndex;\n uint64 index;\n bool active;\n uint256 balance;\n}\n\ninterface ISSVNetwork {\n /**********/\n /* Errors */\n /**********/\n\n error CallerNotOwner(); // 0x5cd83192\n error CallerNotWhitelisted(); // 0x8c6e5d71\n error FeeTooLow(); // 0x732f9413\n error FeeExceedsIncreaseLimit(); // 0x958065d9\n error NoFeeDeclared(); // 0x1d226c30\n error ApprovalNotWithinTimeframe(); // 0x97e4b518\n error OperatorDoesNotExist(); // 0x961e3e8c\n error InsufficientBalance(); // 0xf4d678b8\n error ValidatorDoesNotExist(); // 0xe51315d2\n error ClusterNotLiquidatable(); // 0x60300a8d\n error InvalidPublicKeyLength(); // 0x637297a4\n error InvalidOperatorIdsLength(); // 0x38186224\n error ClusterAlreadyEnabled(); // 0x3babafd2\n error ClusterIsLiquidated(); // 0x95a0cf33\n error ClusterDoesNotExists(); // 0x185e2b16\n error IncorrectClusterState(); // 0x12e04c87\n error UnsortedOperatorsList(); // 0xdd020e25\n error NewBlockPeriodIsBelowMinimum(); // 0x6e6c9cac\n error ExceedValidatorLimit(); // 0x6df5ab76\n error TokenTransferFailed(); // 0x045c4b02\n error SameFeeChangeNotAllowed(); // 0xc81272f8\n error FeeIncreaseNotAllowed(); // 0x410a2b6c\n error NotAuthorized(); // 0xea8e4eb5\n error OperatorsListNotUnique(); // 0xa5a1ff5d\n error OperatorAlreadyExists(); // 0x289c9494\n error TargetModuleDoesNotExist(); // 0x8f9195fb\n error MaxValueExceeded(); // 0x91aa3017\n error FeeTooHigh(); // 0xcd4e6167\n error PublicKeysSharesLengthMismatch(); // 0x9ad467b8\n error IncorrectValidatorStateWithData(bytes publicKey); // 0x89307938\n error ValidatorAlreadyExistsWithData(bytes publicKey); // 0x388e7999\n error EmptyPublicKeysList(); // df83e679\n\n // legacy errors\n error ValidatorAlreadyExists(); // 0x8d09a73e\n error IncorrectValidatorState(); // 0x2feda3c1\n\n event AdminChanged(address previousAdmin, address newAdmin);\n event BeaconUpgraded(address indexed beacon);\n event ClusterDeposited(\n address indexed owner,\n uint64[] operatorIds,\n uint256 value,\n Cluster cluster\n );\n event ClusterLiquidated(\n address indexed owner,\n uint64[] operatorIds,\n Cluster cluster\n );\n event ClusterReactivated(\n address indexed owner,\n uint64[] operatorIds,\n Cluster cluster\n );\n event ClusterWithdrawn(\n address indexed owner,\n uint64[] operatorIds,\n uint256 value,\n Cluster cluster\n );\n event DeclareOperatorFeePeriodUpdated(uint64 value);\n event ExecuteOperatorFeePeriodUpdated(uint64 value);\n event FeeRecipientAddressUpdated(\n address indexed owner,\n address recipientAddress\n );\n event Initialized(uint8 version);\n event LiquidationThresholdPeriodUpdated(uint64 value);\n event MinimumLiquidationCollateralUpdated(uint256 value);\n event NetworkEarningsWithdrawn(uint256 value, address recipient);\n event NetworkFeeUpdated(uint256 oldFee, uint256 newFee);\n event OperatorAdded(\n uint64 indexed operatorId,\n address indexed owner,\n bytes publicKey,\n uint256 fee\n );\n event OperatorFeeDeclarationCancelled(\n address indexed owner,\n uint64 indexed operatorId\n );\n event OperatorFeeDeclared(\n address indexed owner,\n uint64 indexed operatorId,\n uint256 blockNumber,\n uint256 fee\n );\n event OperatorFeeExecuted(\n address indexed owner,\n uint64 indexed operatorId,\n uint256 blockNumber,\n uint256 fee\n );\n event OperatorFeeIncreaseLimitUpdated(uint64 value);\n event OperatorMaximumFeeUpdated(uint64 maxFee);\n event OperatorRemoved(uint64 indexed operatorId);\n event OperatorWhitelistUpdated(\n uint64 indexed operatorId,\n address whitelisted\n );\n event OperatorWithdrawn(\n address indexed owner,\n uint64 indexed operatorId,\n uint256 value\n );\n event OwnershipTransferStarted(\n address indexed previousOwner,\n address indexed newOwner\n );\n event OwnershipTransferred(\n address indexed previousOwner,\n address indexed newOwner\n );\n event Upgraded(address indexed implementation);\n event ValidatorAdded(\n address indexed owner,\n uint64[] operatorIds,\n bytes publicKey,\n bytes shares,\n Cluster cluster\n );\n event ValidatorExited(\n address indexed owner,\n uint64[] operatorIds,\n bytes publicKey\n );\n event ValidatorRemoved(\n address indexed owner,\n uint64[] operatorIds,\n bytes publicKey,\n Cluster cluster\n );\n\n fallback() external;\n\n function acceptOwnership() external;\n\n function cancelDeclaredOperatorFee(uint64 operatorId) external;\n\n function declareOperatorFee(uint64 operatorId, uint256 fee) external;\n\n function deposit(\n address clusterOwner,\n uint64[] memory operatorIds,\n uint256 amount,\n Cluster memory cluster\n ) external;\n\n function executeOperatorFee(uint64 operatorId) external;\n\n function exitValidator(bytes memory publicKey, uint64[] memory operatorIds)\n external;\n\n function bulkExitValidator(\n bytes[] calldata publicKeys,\n uint64[] calldata operatorIds\n ) external;\n\n function getVersion() external pure returns (string memory version);\n\n function initialize(\n address token_,\n address ssvOperators_,\n address ssvClusters_,\n address ssvDAO_,\n address ssvViews_,\n uint64 minimumBlocksBeforeLiquidation_,\n uint256 minimumLiquidationCollateral_,\n uint32 validatorsPerOperatorLimit_,\n uint64 declareOperatorFeePeriod_,\n uint64 executeOperatorFeePeriod_,\n uint64 operatorMaxFeeIncrease_\n ) external;\n\n function liquidate(\n address clusterOwner,\n uint64[] memory operatorIds,\n Cluster memory cluster\n ) external;\n\n function owner() external view returns (address);\n\n function pendingOwner() external view returns (address);\n\n function proxiableUUID() external view returns (bytes32);\n\n function reactivate(\n uint64[] memory operatorIds,\n uint256 amount,\n Cluster memory cluster\n ) external;\n\n function reduceOperatorFee(uint64 operatorId, uint256 fee) external;\n\n function registerOperator(bytes memory publicKey, uint256 fee)\n external\n returns (uint64 id);\n\n function registerValidator(\n bytes memory publicKey,\n uint64[] memory operatorIds,\n bytes memory sharesData,\n uint256 amount,\n Cluster memory cluster\n ) external;\n\n function bulkRegisterValidator(\n bytes[] calldata publicKeys,\n uint64[] calldata operatorIds,\n bytes[] calldata sharesData,\n uint256 amount,\n Cluster memory cluster\n ) external;\n\n function removeOperator(uint64 operatorId) external;\n\n function removeValidator(\n bytes memory publicKey,\n uint64[] memory operatorIds,\n Cluster memory cluster\n ) external;\n\n function bulkRemoveValidator(\n bytes[] calldata publicKeys,\n uint64[] calldata operatorIds,\n Cluster memory cluster\n ) external;\n\n function renounceOwnership() external;\n\n function setFeeRecipientAddress(address recipientAddress) external;\n\n function setOperatorWhitelist(uint64 operatorId, address whitelisted)\n external;\n\n function transferOwnership(address newOwner) external;\n\n function updateDeclareOperatorFeePeriod(uint64 timeInSeconds) external;\n\n function updateExecuteOperatorFeePeriod(uint64 timeInSeconds) external;\n\n function updateLiquidationThresholdPeriod(uint64 blocks) external;\n\n function updateMaximumOperatorFee(uint64 maxFee) external;\n\n function updateMinimumLiquidationCollateral(uint256 amount) external;\n\n function updateModule(uint8 moduleId, address moduleAddress) external;\n\n function updateNetworkFee(uint256 fee) external;\n\n function updateOperatorFeeIncreaseLimit(uint64 percentage) external;\n\n function upgradeTo(address newImplementation) external;\n\n function upgradeToAndCall(address newImplementation, bytes memory data)\n external\n payable;\n\n function withdraw(\n uint64[] memory operatorIds,\n uint256 amount,\n Cluster memory cluster\n ) external;\n\n function withdrawAllOperatorEarnings(uint64 operatorId) external;\n\n function withdrawNetworkEarnings(uint256 amount) external;\n\n function withdrawOperatorEarnings(uint64 operatorId, uint256 amount)\n external;\n}\n" + }, + "contracts/interfaces/IStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Platform interface to integrate with lending platform like Compound, AAVE etc.\n */\ninterface IStrategy {\n /**\n * @dev Deposit the given asset to platform\n * @param _asset asset address\n * @param _amount Amount to deposit\n */\n function deposit(address _asset, uint256 _amount) external;\n\n /**\n * @dev Deposit the entire balance of all supported assets in the Strategy\n * to the platform\n */\n function depositAll() external;\n\n /**\n * @dev Withdraw given asset from Lending platform\n */\n function withdraw(\n address _recipient,\n address _asset,\n uint256 _amount\n ) external;\n\n /**\n * @dev Liquidate all assets in strategy and return them to Vault.\n */\n function withdrawAll() external;\n\n /**\n * @dev Returns the current balance of the given asset.\n */\n function checkBalance(address _asset)\n external\n view\n returns (uint256 balance);\n\n /**\n * @dev Returns bool indicating whether strategy supports asset.\n */\n function supportsAsset(address _asset) external view returns (bool);\n\n /**\n * @dev Collect reward tokens from the Strategy.\n */\n function collectRewardTokens() external;\n\n /**\n * @dev The address array of the reward tokens for the Strategy.\n */\n function getRewardTokenAddresses() external view returns (address[] memory);\n}\n" + }, + "contracts/interfaces/ISwapper.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface ISwapper {\n /**\n * @param fromAsset The token address of the asset being sold.\n * @param toAsset The token address of the asset being purchased.\n * @param fromAssetAmount The amount of assets being sold.\n * @param minToAssetAmmount The minimum amount of assets to be purchased.\n * @param data tx.data returned from 1Inch's /v5.0/1/swap API\n */\n function swap(\n address fromAsset,\n address toAsset,\n uint256 fromAssetAmount,\n uint256 minToAssetAmmount,\n bytes calldata data\n ) external returns (uint256 toAssetAmount);\n}\n" + }, + "contracts/interfaces/ITimelock.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface ITimelock {\n function delay() external view returns (uint256);\n\n function GRACE_PERIOD() external view returns (uint256);\n\n function acceptAdmin() external;\n\n function queuedTransactions(bytes32 hash) external view returns (bool);\n\n function queueTransaction(\n address target,\n uint256 value,\n string calldata signature,\n bytes calldata data,\n uint256 eta\n ) external returns (bytes32);\n\n function cancelTransaction(\n address target,\n uint256 value,\n string calldata signature,\n bytes calldata data,\n uint256 eta\n ) external;\n\n function executeTransaction(\n address target,\n uint256 value,\n string calldata signature,\n bytes calldata data,\n uint256 eta\n ) external payable returns (bytes memory);\n}\n" + }, + "contracts/interfaces/ITimelockController.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface ITimelockController {\n function grantRole(bytes32 role, address account) external;\n\n function revokeRole(bytes32 role, address account) external;\n\n function renounceRole(bytes32 role, address account) external;\n\n function hasRole(bytes32 role, address account)\n external\n view\n returns (bool);\n\n function executeBatch(\n address[] calldata targets,\n uint256[] calldata values,\n bytes[] calldata payloads,\n bytes32 predecessor,\n bytes32 salt\n ) external payable;\n\n function scheduleBatch(\n address[] calldata targets,\n uint256[] calldata values,\n bytes[] calldata payloads,\n bytes32 predecessor,\n bytes32 salt,\n uint256 delay\n ) external;\n\n function hashOperationBatch(\n address[] calldata targets,\n uint256[] calldata values,\n bytes[] calldata payloads,\n bytes32 predecessor,\n bytes32 salt\n ) external view returns (bytes32);\n\n function isOperationDone(bytes32 opHash) external view returns (bool);\n\n function isOperationReady(bytes32 opHash) external view returns (bool);\n\n function isOperation(bytes32 opHash) external view returns (bool);\n\n function getMinDelay() external view returns (uint256);\n}\n" + }, + "contracts/interfaces/IVault.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { VaultStorage } from \"../vault/VaultStorage.sol\";\n\ninterface IVault {\n event AssetSupported(address _asset);\n event AssetDefaultStrategyUpdated(address _asset, address _strategy);\n event AssetAllocated(address _asset, address _strategy, uint256 _amount);\n event StrategyApproved(address _addr);\n event StrategyRemoved(address _addr);\n event Mint(address _addr, uint256 _value);\n event Redeem(address _addr, uint256 _value);\n event CapitalPaused();\n event CapitalUnpaused();\n event RebasePaused();\n event RebaseUnpaused();\n event VaultBufferUpdated(uint256 _vaultBuffer);\n event RedeemFeeUpdated(uint256 _redeemFeeBps);\n event PriceProviderUpdated(address _priceProvider);\n event AllocateThresholdUpdated(uint256 _threshold);\n event RebaseThresholdUpdated(uint256 _threshold);\n event StrategistUpdated(address _address);\n event MaxSupplyDiffChanged(uint256 maxSupplyDiff);\n event YieldDistribution(address _to, uint256 _yield, uint256 _fee);\n event TrusteeFeeBpsChanged(uint256 _basis);\n event TrusteeAddressChanged(address _address);\n event SwapperChanged(address _address);\n event SwapAllowedUndervalueChanged(uint256 _basis);\n event SwapSlippageChanged(address _asset, uint256 _basis);\n event Swapped(\n address indexed _fromAsset,\n address indexed _toAsset,\n uint256 _fromAssetAmount,\n uint256 _toAssetAmount\n );\n event StrategyAddedToMintWhitelist(address indexed strategy);\n event StrategyRemovedFromMintWhitelist(address indexed strategy);\n event DripperChanged(address indexed _dripper);\n event WithdrawalRequested(\n address indexed _withdrawer,\n uint256 indexed _requestId,\n uint256 _amount,\n uint256 _queued\n );\n event WithdrawalClaimed(\n address indexed _withdrawer,\n uint256 indexed _requestId,\n uint256 _amount\n );\n event WithdrawalClaimable(uint256 _claimable, uint256 _newClaimable);\n\n // Governable.sol\n function transferGovernance(address _newGovernor) external;\n\n function claimGovernance() external;\n\n function governor() external view returns (address);\n\n // VaultAdmin.sol\n function setPriceProvider(address _priceProvider) external;\n\n function priceProvider() external view returns (address);\n\n function setRedeemFeeBps(uint256 _redeemFeeBps) external;\n\n function redeemFeeBps() external view returns (uint256);\n\n function setVaultBuffer(uint256 _vaultBuffer) external;\n\n function vaultBuffer() external view returns (uint256);\n\n function setAutoAllocateThreshold(uint256 _threshold) external;\n\n function autoAllocateThreshold() external view returns (uint256);\n\n function setRebaseThreshold(uint256 _threshold) external;\n\n function rebaseThreshold() external view returns (uint256);\n\n function setStrategistAddr(address _address) external;\n\n function strategistAddr() external view returns (address);\n\n function setMaxSupplyDiff(uint256 _maxSupplyDiff) external;\n\n function maxSupplyDiff() external view returns (uint256);\n\n function setTrusteeAddress(address _address) external;\n\n function trusteeAddress() external view returns (address);\n\n function setTrusteeFeeBps(uint256 _basis) external;\n\n function trusteeFeeBps() external view returns (uint256);\n\n function ousdMetaStrategy() external view returns (address);\n\n function setSwapper(address _swapperAddr) external;\n\n function setSwapAllowedUndervalue(uint16 _percentageBps) external;\n\n function setOracleSlippage(address _asset, uint16 _allowedOracleSlippageBps)\n external;\n\n function supportAsset(address _asset, uint8 _supportsAsset) external;\n\n function approveStrategy(address _addr) external;\n\n function removeStrategy(address _addr) external;\n\n function setAssetDefaultStrategy(address _asset, address _strategy)\n external;\n\n function assetDefaultStrategies(address _asset)\n external\n view\n returns (address);\n\n function pauseRebase() external;\n\n function unpauseRebase() external;\n\n function rebasePaused() external view returns (bool);\n\n function pauseCapital() external;\n\n function unpauseCapital() external;\n\n function capitalPaused() external view returns (bool);\n\n function transferToken(address _asset, uint256 _amount) external;\n\n function priceUnitMint(address asset) external view returns (uint256);\n\n function priceUnitRedeem(address asset) external view returns (uint256);\n\n function withdrawAllFromStrategy(address _strategyAddr) external;\n\n function withdrawAllFromStrategies() external;\n\n function withdrawFromStrategy(\n address _strategyFromAddress,\n address[] calldata _assets,\n uint256[] calldata _amounts\n ) external;\n\n function depositToStrategy(\n address _strategyToAddress,\n address[] calldata _assets,\n uint256[] calldata _amounts\n ) external;\n\n // VaultCore.sol\n function mint(\n address _asset,\n uint256 _amount,\n uint256 _minimumOusdAmount\n ) external;\n\n function mintForStrategy(uint256 _amount) external;\n\n function mintToForStrategy(address receiver, uint256 _amount) external;\n\n function redeem(uint256 _amount, uint256 _minimumUnitAmount) external;\n\n function burnForStrategy(uint256 _amount) external;\n\n function burnFromForStrategy(address user, uint256 _amount) external;\n\n function redeemAll(uint256 _minimumUnitAmount) external;\n\n function allocate() external;\n\n function rebase() external;\n\n function swapCollateral(\n address fromAsset,\n address toAsset,\n uint256 fromAssetAmount,\n uint256 minToAssetAmount,\n bytes calldata data\n ) external returns (uint256 toAssetAmount);\n\n function totalValue() external view returns (uint256 value);\n\n function checkBalance(address _asset) external view returns (uint256);\n\n function calculateRedeemOutputs(uint256 _amount)\n external\n view\n returns (uint256[] memory);\n\n function getAssetCount() external view returns (uint256);\n\n function getAssetConfig(address _asset)\n external\n view\n returns (VaultStorage.Asset memory config);\n\n function getAllAssets() external view returns (address[] memory);\n\n function getStrategyCount() external view returns (uint256);\n\n function swapper() external view returns (address);\n\n function allowedSwapUndervalue() external view returns (uint256);\n\n function getAllStrategies() external view returns (address[] memory);\n\n function isSupportedAsset(address _asset) external view returns (bool);\n\n function netOusdMintForStrategyThreshold() external view returns (uint256);\n\n function setOusdMetaStrategy(address _ousdMetaStrategy) external;\n\n function setNetOusdMintForStrategyThreshold(uint256 _threshold) external;\n\n function netOusdMintedForStrategy() external view returns (int256);\n\n function setDripper(address _dripper) external;\n\n function weth() external view returns (address);\n\n function cacheWETHAssetIndex() external;\n\n function wethAssetIndex() external view returns (uint256);\n\n function initialize(address, address) external;\n\n function setAdminImpl(address) external;\n\n function removeAsset(address _asset) external;\n\n function addStrategyToMintWhitelist(address strategyAddr) external;\n\n function removeStrategyFromMintWhitelist(address strategyAddr) external;\n\n function isMintWhitelistedStrategy(address strategyAddr)\n external\n view\n returns (bool);\n\n // These are OETH specific functions\n function addWithdrawalQueueLiquidity() external;\n\n function requestWithdrawal(uint256 _amount)\n external\n returns (uint256 requestId, uint256 queued);\n\n function claimWithdrawal(uint256 requestId)\n external\n returns (uint256 amount);\n\n function claimWithdrawals(uint256[] memory requestIds)\n external\n returns (uint256[] memory amounts, uint256 totalAmount);\n\n function withdrawalQueueMetadata()\n external\n view\n returns (VaultStorage.WithdrawalQueueMetadata memory);\n\n function withdrawalRequests(uint256 requestId)\n external\n view\n returns (VaultStorage.WithdrawalRequest memory);\n}\n" + }, + "contracts/interfaces/IWETH9.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IWETH9 {\n event Approval(address indexed src, address indexed guy, uint256 wad);\n event Deposit(address indexed dst, uint256 wad);\n event Transfer(address indexed src, address indexed dst, uint256 wad);\n event Withdrawal(address indexed src, uint256 wad);\n\n function allowance(address, address) external view returns (uint256);\n\n function approve(address guy, uint256 wad) external returns (bool);\n\n function balanceOf(address) external view returns (uint256);\n\n function decimals() external view returns (uint8);\n\n function deposit() external payable;\n\n function name() external view returns (string memory);\n\n function symbol() external view returns (string memory);\n\n function totalSupply() external view returns (uint256);\n\n function transfer(address dst, uint256 wad) external returns (bool);\n\n function transferFrom(\n address src,\n address dst,\n uint256 wad\n ) external returns (bool);\n\n function withdraw(uint256 wad) external;\n}\n" + }, + "contracts/interfaces/IWstETH.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IWstETH {\n /**\n * @notice Get amount of wstETH for a given amount of stETH\n * @param _stETHAmount amount of stETH\n * @return Amount of wstETH for a given stETH amount\n */\n function getWstETHByStETH(uint256 _stETHAmount)\n external\n view\n returns (uint256);\n\n /**\n * @notice Get amount of stETH for a given amount of wstETH\n * @param _wstETHAmount amount of wstETH\n * @return Amount of stETH for a given wstETH amount\n */\n function getStETHByWstETH(uint256 _wstETHAmount)\n external\n view\n returns (uint256);\n\n /**\n * @notice Get amount of stETH for a one wstETH\n * @return Amount of stETH for 1 wstETH\n */\n function stEthPerToken() external view returns (uint256);\n\n /**\n * @notice Get amount of wstETH for a one stETH\n * @return Amount of wstETH for a 1 stETH\n */\n function tokensPerStEth() external view returns (uint256);\n\n /**\n * @notice Exchanges stETH to wstETH\n * @param _stETHAmount amount of stETH to wrap in exchange for wstETH\n * @dev Requirements:\n * - `_stETHAmount` must be non-zero\n * - msg.sender must approve at least `_stETHAmount` stETH to this\n * contract.\n * - msg.sender must have at least `_stETHAmount` of stETH.\n * User should first approve _stETHAmount to the WstETH contract\n * @return Amount of wstETH user receives after wrap\n */\n function wrap(uint256 _stETHAmount) external returns (uint256);\n\n /**\n * @notice Exchanges wstETH to stETH\n * @param _wstETHAmount amount of wstETH to uwrap in exchange for stETH\n * @dev Requirements:\n * - `_wstETHAmount` must be non-zero\n * - msg.sender must have at least `_wstETHAmount` wstETH.\n * @return Amount of stETH user receives after unwrap\n */\n function unwrap(uint256 _wstETHAmount) external returns (uint256);\n}\n" + }, + "contracts/interfaces/morpho/compound/ICompoundOracle.sol": { + "content": "// SPDX-License-Identifier: GNU AGPLv3\npragma solidity ^0.8.0;\n\ninterface ICompoundOracle {\n function getUnderlyingPrice(address) external view returns (uint256);\n}\n" + }, + "contracts/interfaces/morpho/ILens.sol": { + "content": "// SPDX-License-Identifier: GNU AGPLv3\npragma solidity ^0.8.0;\n\nimport \"./compound/ICompoundOracle.sol\";\nimport \"./IMorpho.sol\";\n\ninterface ILens {\n /// STORAGE ///\n\n function MAX_BASIS_POINTS() external view returns (uint256);\n\n function WAD() external view returns (uint256);\n\n function morpho() external view returns (IMorpho);\n\n function comptroller() external view returns (IComptroller);\n\n /// GENERAL ///\n\n function getTotalSupply()\n external\n view\n returns (\n uint256 p2pSupplyAmount,\n uint256 poolSupplyAmount,\n uint256 totalSupplyAmount\n );\n\n function getTotalBorrow()\n external\n view\n returns (\n uint256 p2pBorrowAmount,\n uint256 poolBorrowAmount,\n uint256 totalBorrowAmount\n );\n\n /// MARKETS ///\n\n function isMarketCreated(address _poolToken) external view returns (bool);\n\n function isMarketCreatedAndNotPaused(address _poolToken)\n external\n view\n returns (bool);\n\n function isMarketCreatedAndNotPausedNorPartiallyPaused(address _poolToken)\n external\n view\n returns (bool);\n\n function getAllMarkets()\n external\n view\n returns (address[] memory marketsCreated_);\n\n function getMainMarketData(address _poolToken)\n external\n view\n returns (\n uint256 avgSupplyRatePerBlock,\n uint256 avgBorrowRatePerBlock,\n uint256 p2pSupplyAmount,\n uint256 p2pBorrowAmount,\n uint256 poolSupplyAmount,\n uint256 poolBorrowAmount\n );\n\n function getAdvancedMarketData(address _poolToken)\n external\n view\n returns (\n uint256 p2pSupplyIndex,\n uint256 p2pBorrowIndex,\n uint256 poolSupplyIndex,\n uint256 poolBorrowIndex,\n uint32 lastUpdateBlockNumber,\n uint256 p2pSupplyDelta,\n uint256 p2pBorrowDelta\n );\n\n function getMarketConfiguration(address _poolToken)\n external\n view\n returns (\n address underlying,\n bool isCreated,\n bool p2pDisabled,\n bool isPaused,\n bool isPartiallyPaused,\n uint16 reserveFactor,\n uint16 p2pIndexCursor,\n uint256 collateralFactor\n );\n\n function getTotalMarketSupply(address _poolToken)\n external\n view\n returns (uint256 p2pSupplyAmount, uint256 poolSupplyAmount);\n\n function getTotalMarketBorrow(address _poolToken)\n external\n view\n returns (uint256 p2pBorrowAmount, uint256 poolBorrowAmount);\n\n /// INDEXES ///\n\n function getCurrentP2PSupplyIndex(address _poolToken)\n external\n view\n returns (uint256);\n\n function getCurrentP2PBorrowIndex(address _poolToken)\n external\n view\n returns (uint256);\n\n function getCurrentPoolIndexes(address _poolToken)\n external\n view\n returns (\n uint256 currentPoolSupplyIndex,\n uint256 currentPoolBorrowIndex\n );\n\n function getIndexes(address _poolToken, bool _computeUpdatedIndexes)\n external\n view\n returns (\n uint256 p2pSupplyIndex,\n uint256 p2pBorrowIndex,\n uint256 poolSupplyIndex,\n uint256 poolBorrowIndex\n );\n\n /// USERS ///\n\n function getEnteredMarkets(address _user)\n external\n view\n returns (address[] memory enteredMarkets);\n\n function getUserHealthFactor(\n address _user,\n address[] calldata _updatedMarkets\n ) external view returns (uint256);\n\n function getUserBalanceStates(\n address _user,\n address[] calldata _updatedMarkets\n )\n external\n view\n returns (\n uint256 collateralValue,\n uint256 debtValue,\n uint256 maxDebtValue\n );\n\n function getCurrentSupplyBalanceInOf(address _poolToken, address _user)\n external\n view\n returns (\n uint256 balanceOnPool,\n uint256 balanceInP2P,\n uint256 totalBalance\n );\n\n function getCurrentBorrowBalanceInOf(address _poolToken, address _user)\n external\n view\n returns (\n uint256 balanceOnPool,\n uint256 balanceInP2P,\n uint256 totalBalance\n );\n\n function getUserMaxCapacitiesForAsset(address _user, address _poolToken)\n external\n view\n returns (uint256 withdrawable, uint256 borrowable);\n\n function getUserHypotheticalBalanceStates(\n address _user,\n address _poolToken,\n uint256 _withdrawnAmount,\n uint256 _borrowedAmount\n ) external view returns (uint256 debtValue, uint256 maxDebtValue);\n\n function getUserLiquidityDataForAsset(\n address _user,\n address _poolToken,\n bool _computeUpdatedIndexes,\n ICompoundOracle _oracle\n ) external view returns (Types.AssetLiquidityData memory assetData);\n\n function isLiquidatable(address _user, address[] memory _updatedMarkets)\n external\n view\n returns (bool);\n\n function computeLiquidationRepayAmount(\n address _user,\n address _poolTokenBorrowed,\n address _poolTokenCollateral,\n address[] calldata _updatedMarkets\n ) external view returns (uint256 toRepay);\n\n /// RATES ///\n\n function getAverageSupplyRatePerBlock(address _poolToken)\n external\n view\n returns (\n uint256 avgSupplyRatePerBlock,\n uint256 p2pSupplyAmount,\n uint256 poolSupplyAmount\n );\n\n function getAverageBorrowRatePerBlock(address _poolToken)\n external\n view\n returns (\n uint256 avgBorrowRatePerBlock,\n uint256 p2pBorrowAmount,\n uint256 poolBorrowAmount\n );\n\n function getNextUserSupplyRatePerBlock(\n address _poolToken,\n address _user,\n uint256 _amount\n )\n external\n view\n returns (\n uint256 nextSupplyRatePerBlock,\n uint256 balanceOnPool,\n uint256 balanceInP2P,\n uint256 totalBalance\n );\n\n function getNextUserBorrowRatePerBlock(\n address _poolToken,\n address _user,\n uint256 _amount\n )\n external\n view\n returns (\n uint256 nextBorrowRatePerBlock,\n uint256 balanceOnPool,\n uint256 balanceInP2P,\n uint256 totalBalance\n );\n\n function getCurrentUserSupplyRatePerBlock(address _poolToken, address _user)\n external\n view\n returns (uint256);\n\n function getCurrentUserBorrowRatePerBlock(address _poolToken, address _user)\n external\n view\n returns (uint256);\n\n function getRatesPerBlock(address _poolToken)\n external\n view\n returns (\n uint256 p2pSupplyRate,\n uint256 p2pBorrowRate,\n uint256 poolSupplyRate,\n uint256 poolBorrowRate\n );\n\n /// REWARDS ///\n\n function getUserUnclaimedRewards(\n address[] calldata _poolTokens,\n address _user\n ) external view returns (uint256 unclaimedRewards);\n\n function getAccruedSupplierComp(\n address _supplier,\n address _poolToken,\n uint256 _balance\n ) external view returns (uint256);\n\n function getAccruedBorrowerComp(\n address _borrower,\n address _poolToken,\n uint256 _balance\n ) external view returns (uint256);\n\n function getCurrentCompSupplyIndex(address _poolToken)\n external\n view\n returns (uint256);\n\n function getCurrentCompBorrowIndex(address _poolToken)\n external\n view\n returns (uint256);\n}\n" + }, + "contracts/interfaces/morpho/IMorpho.sol": { + "content": "// SPDX-License-Identifier: GNU AGPLv3\npragma solidity ^0.8.0;\n\nimport \"./Types.sol\";\nimport \"../IComptroller.sol\";\nimport \"./compound/ICompoundOracle.sol\";\n\n// prettier-ignore\ninterface IMorpho {\n function comptroller() external view returns (IComptroller);\n function supply(address _poolTokenAddress, address _onBehalf, uint256 _amount) external;\n function supply(address _poolTokenAddress, address _onBehalf, uint256 _amount, uint256 _maxGasForMatching) external;\n function withdraw(address _poolTokenAddress, uint256 _amount) external;\n function claimRewards(\n address[] calldata _cTokenAddresses,\n bool _tradeForMorphoToken\n ) external returns (uint256 claimedAmount);\n}\n" + }, + "contracts/interfaces/morpho/Types.sol": { + "content": "// SPDX-License-Identifier: GNU AGPLv3\npragma solidity ^0.8.0;\n\n/// @title Types.\n/// @author Morpho Labs.\n/// @custom:contact security@morpho.xyz\n/// @dev Common types and structs used in Moprho contracts.\nlibrary Types {\n /// ENUMS ///\n\n enum PositionType {\n SUPPLIERS_IN_P2P,\n SUPPLIERS_ON_POOL,\n BORROWERS_IN_P2P,\n BORROWERS_ON_POOL\n }\n\n /// STRUCTS ///\n\n struct SupplyBalance {\n uint256 inP2P; // In supplier's peer-to-peer unit, a unit that grows in underlying value, to keep track of the interests earned by suppliers in peer-to-peer. Multiply by the peer-to-peer supply index to get the underlying amount.\n uint256 onPool; // In cToken. Multiply by the pool supply index to get the underlying amount.\n }\n\n struct BorrowBalance {\n uint256 inP2P; // In borrower's peer-to-peer unit, a unit that grows in underlying value, to keep track of the interests paid by borrowers in peer-to-peer. Multiply by the peer-to-peer borrow index to get the underlying amount.\n uint256 onPool; // In cdUnit, a unit that grows in value, to keep track of the debt increase when borrowers are on Compound. Multiply by the pool borrow index to get the underlying amount.\n }\n\n // Max gas to consume during the matching process for supply, borrow, withdraw and repay functions.\n struct MaxGasForMatching {\n uint64 supply;\n uint64 borrow;\n uint64 withdraw;\n uint64 repay;\n }\n\n struct Delta {\n uint256 p2pSupplyDelta; // Difference between the stored peer-to-peer supply amount and the real peer-to-peer supply amount (in pool supply unit).\n uint256 p2pBorrowDelta; // Difference between the stored peer-to-peer borrow amount and the real peer-to-peer borrow amount (in pool borrow unit).\n uint256 p2pSupplyAmount; // Sum of all stored peer-to-peer supply (in peer-to-peer supply unit).\n uint256 p2pBorrowAmount; // Sum of all stored peer-to-peer borrow (in peer-to-peer borrow unit).\n }\n\n struct AssetLiquidityData {\n uint256 collateralValue; // The collateral value of the asset.\n uint256 maxDebtValue; // The maximum possible debt value of the asset.\n uint256 debtValue; // The debt value of the asset.\n uint256 underlyingPrice; // The price of the token.\n uint256 collateralFactor; // The liquidation threshold applied on this token.\n }\n\n struct LiquidityData {\n uint256 collateralValue; // The collateral value.\n uint256 maxDebtValue; // The maximum debt value possible.\n uint256 debtValue; // The debt value.\n }\n\n // Variables are packed together to save gas (will not exceed their limit during Morpho's lifetime).\n struct LastPoolIndexes {\n uint32 lastUpdateBlockNumber; // The last time the peer-to-peer indexes were updated.\n uint112 lastSupplyPoolIndex; // Last pool supply index.\n uint112 lastBorrowPoolIndex; // Last pool borrow index.\n }\n\n struct MarketParameters {\n uint16 reserveFactor; // Proportion of the interest earned by users sent to the DAO for each market, in basis point (100% = 10 000). The value is set at market creation.\n uint16 p2pIndexCursor; // Position of the peer-to-peer rate in the pool's spread. Determine the weights of the weighted arithmetic average in the indexes computations ((1 - p2pIndexCursor) * r^S + p2pIndexCursor * r^B) (in basis point).\n }\n\n struct MarketStatus {\n bool isCreated; // Whether or not this market is created.\n bool isPaused; // Whether the market is paused or not (all entry points on Morpho are frozen; supply, borrow, withdraw, repay and liquidate).\n bool isPartiallyPaused; // Whether the market is partially paused or not (only supply and borrow are frozen).\n }\n}\n" + }, + "contracts/interfaces/Tether.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface Tether {\n function transfer(address to, uint256 value) external;\n\n function transferFrom(\n address from,\n address to,\n uint256 value\n ) external;\n\n function balanceOf(address) external returns (uint256);\n}\n" + }, + "contracts/interfaces/uniswap/IUniswapUniversalRouter.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IUniswapUniversalRouter {\n /// @notice Executes encoded commands along with provided inputs. Reverts if deadline has expired.\n /// @param commands A set of concatenated commands, each 1 byte in length\n /// @param inputs An array of byte strings containing abi encoded inputs for each command\n /// @param deadline The deadline by which the transaction must be executed\n function execute(\n bytes calldata commands,\n bytes[] calldata inputs,\n uint256 deadline\n ) external payable;\n\n function execute(bytes calldata commands, bytes[] calldata inputs)\n external\n payable;\n}\n" + }, + "contracts/interfaces/uniswap/IUniswapV2Pair.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IUniswapV2Pair {\n function token0() external view returns (address);\n\n function token1() external view returns (address);\n\n function getReserves()\n external\n view\n returns (\n uint112 reserve0,\n uint112 reserve1,\n uint32 blockTimestampLast\n );\n\n function price0CumulativeLast() external view returns (uint256);\n\n function price1CumulativeLast() external view returns (uint256);\n\n function sync() external;\n}\n" + }, + "contracts/interfaces/uniswap/IUniswapV2Router02.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IUniswapV2Router {\n function WETH() external pure returns (address);\n\n function swapExactTokensForTokens(\n uint256 amountIn,\n uint256 amountOutMin,\n address[] calldata path,\n address to,\n uint256 deadline\n ) external returns (uint256[] memory amounts);\n\n function addLiquidity(\n address tokenA,\n address tokenB,\n uint256 amountADesired,\n uint256 amountBDesired,\n uint256 amountAMin,\n uint256 amountBMin,\n address to,\n uint256 deadline\n )\n external\n returns (\n uint256 amountA,\n uint256 amountB,\n uint256 liquidity\n );\n}\n" + }, + "contracts/interfaces/uniswap/IUniswapV3Router.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// -- Solididy v0.5.x compatible interface\ninterface IUniswapV3Router {\n struct ExactInputParams {\n bytes path;\n address recipient;\n uint256 deadline;\n uint256 amountIn;\n uint256 amountOutMinimum;\n }\n\n /// @notice Swaps `amountIn` of one token for as much as possible of another along the specified path\n /// @param params The parameters necessary for the multi-hop swap, encoded as `ExactInputParams` in calldata\n /// @return amountOut The amount of the received token\n function exactInput(ExactInputParams calldata params)\n external\n payable\n returns (uint256 amountOut);\n}\n" + }, + "contracts/liquidity/LiquidityReward.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { SafeMath } from \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\n\nimport { Initializable } from \"../utils/Initializable.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\nimport { Governable } from \"../governance/Governable.sol\";\n\n//\n// LiquidityReward contract doles out reward for liquidity\n// base off of Sushiswap's MasterChef: https://github.com/sushiswap/sushiswap/blob/master/contracts/MasterChef.sol\n//\ncontract LiquidityReward is Initializable, Governable {\n using SafeMath for uint256;\n using StableMath for uint256;\n using SafeERC20 for IERC20;\n\n // Info of each user.\n struct UserInfo {\n uint256 amount; // How many LP tokens the user has provided.\n int256 rewardDebt; // Reward debt. See explanation below.\n //\n // We do some fancy math here. Basically, any point in time, the amount of Reward Tokens\n // entitled to a user but is pending to be distributed is:\n //\n // pending reward = (user.amount * pool.accRewardPerShare) - user.rewardDebt\n //\n // Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens:\n // 1. The pool's `accRewardPerShare` (and `lastRewardBlock`) gets updated.\n // 2. User receives the pending reward sent to his/her address.\n // 3. User's `amount` gets updated.\n // 4. User's `rewardDebt` gets updated.\n //\n // NOTE: rewardDebt can go negative because we allow withdraws without claiming the reward\n // in that case we owe the account holder some reward.\n }\n\n // Info of each pool.\n struct PoolInfo {\n IERC20 lpToken; // Address of LP token contract.\n uint256 lastRewardBlock; // Last block number that Reward calculation occurs.\n uint256 accRewardPerShare; // Accumulated Reward per share in reward precision. See below.\n }\n\n // The Reward token\n IERC20 public reward;\n\n // Reward tokens created per block in 1e18 precision.\n uint256 public rewardPerBlock;\n\n // Info on the LP.\n PoolInfo public pool;\n // total Reward debt, useful to calculate if we have enough to pay out all rewards\n int256 public totalRewardDebt;\n // total Supply that is accounted for via deposit/withdraw so that our rewards calc are stable\n uint256 public totalSupply;\n // Info of each user that stakes LP tokens.\n mapping(address => UserInfo) public userInfo;\n // The block number when Liquidity rewards ends.\n uint256 public endBlock;\n\n event CampaignStarted(\n uint256 rewardRate,\n uint256 startBlock,\n uint256 endBlock\n );\n event CampaignStopped(uint256 endBlock);\n event Deposit(address indexed user, uint256 amount);\n event Withdraw(address indexed user, uint256 amount);\n event Claim(address indexed user, uint256 amount);\n event DrainExtraReward(address indexed user, uint256 amount);\n event DrainExtraLP(address indexed user, uint256 amount);\n\n /**\n * Initializer for setting up Liquidity Reward internal state.\n * @param _reward Address of the reward token(OGN)\n * @param _lpToken Address of the LP token(Uniswap Pair)\n */\n function initialize(IERC20 _reward, IERC20 _lpToken)\n external\n onlyGovernor\n initializer\n {\n reward = _reward;\n pool.lpToken = _lpToken;\n pool.lastRewardBlock = block.number;\n }\n\n /**\n * @dev start a new reward campaign.\n * This will calculate all rewards up to the current block at the old rate.\n * This ensures that we pay everyone at the promised rate before update to the new rate.\n * @param _rewardPerBlock Amount rewarded per block\n * @param _startBlock Block number that we want to start the rewards at (0 for current block)\n * @param _numBlocks number of blocks that the campaign should last\n */\n function startCampaign(\n uint256 _rewardPerBlock,\n uint256 _startBlock,\n uint256 _numBlocks\n ) external onlyGovernor {\n // Calculate up to the current block at the current rate for everyone.\n updatePool();\n\n // total Pending calculated at the current pool rate\n uint256 totalPending = subDebt(\n pool.accRewardPerShare.mulTruncate(totalSupply),\n totalRewardDebt\n );\n\n require(_numBlocks > 0, \"startCampaign: zero blocks\");\n\n require(\n reward.balanceOf(address(this)) >=\n _rewardPerBlock.mul(_numBlocks).add(totalPending),\n \"startCampaign: insufficient rewards\"\n );\n\n uint256 startBlock = _startBlock;\n if (startBlock == 0) {\n // start block number isn't given so we start at the current\n startBlock = block.number;\n }\n require(\n startBlock >= block.number,\n \"startCampaign: _startBlock can't be in the past\"\n );\n endBlock = startBlock.add(_numBlocks);\n // we don't start accrue until the startBlock\n pool.lastRewardBlock = startBlock;\n // new blocks start at the new reward rate\n rewardPerBlock = _rewardPerBlock;\n emit CampaignStarted(rewardPerBlock, startBlock, endBlock);\n }\n\n function stopCampaign() external onlyGovernor {\n //calculate until current pool\n updatePool();\n //end the block here (the CampaignMultiplier will be zero)\n endBlock = block.number;\n emit CampaignStopped(endBlock);\n }\n\n function drainExtraRewards() external onlyGovernor {\n require(endBlock < block.number, \"drainExtraRewards:Campaign active\");\n updatePool();\n uint256 extraRewards = reward.balanceOf(address(this)).sub(\n subDebt(\n pool.accRewardPerShare.mulTruncate(totalSupply),\n totalRewardDebt\n )\n );\n if (extraRewards > 0) {\n emit DrainExtraReward(msg.sender, extraRewards);\n reward.safeTransfer(msg.sender, extraRewards);\n }\n }\n\n function drainExtraLP() external onlyGovernor {\n uint256 extraLP = pool.lpToken.balanceOf(address(this)).sub(\n totalSupply\n );\n require(extraLP > 0, \"drainExtraLP:no extra\");\n emit DrainExtraLP(msg.sender, extraLP);\n pool.lpToken.safeTransfer(msg.sender, extraLP);\n }\n\n function campaignActive() external view returns (bool) {\n return endBlock > block.number && block.number >= pool.lastRewardBlock;\n }\n\n function balanceOf(address _account) external view returns (uint256) {\n return userInfo[_account].amount;\n }\n\n /**\n * @dev calculate the number of blocks since we last updated\n * within start and end as constraints\n * @param _to Block number of the ending point.\n * @return multiplier Multiplier over the given _from to _to block.\n */\n function getCampaignMultiplier(uint256 _to)\n internal\n view\n returns (uint256)\n {\n uint256 from = pool.lastRewardBlock;\n if (from > endBlock) {\n return 0;\n } else {\n return (_to < endBlock ? _to : endBlock).sub(from);\n }\n }\n\n /**\n * @dev View function to see pending rewards for each account on frontend.\n * @param _user Address of the account we're looking up.\n * @return reward Total rewards owed to this account.\n */\n function pendingRewards(address _user) external view returns (uint256) {\n UserInfo storage user = userInfo[_user];\n return _pendingRewards(user);\n }\n\n function _pendingRewards(UserInfo storage user)\n internal\n view\n returns (uint256)\n {\n uint256 accRewardPerShare = pool.accRewardPerShare;\n if (block.number > pool.lastRewardBlock) {\n if (totalSupply != 0) {\n uint256 multiplier = getCampaignMultiplier(block.number);\n uint256 incReward = multiplier.mul(rewardPerBlock);\n accRewardPerShare = accRewardPerShare.add(\n incReward.divPrecisely(totalSupply)\n );\n }\n }\n return\n subDebt(\n user.amount.mulTruncate(accRewardPerShare),\n user.rewardDebt\n );\n }\n\n /**\n * @dev View function to see total outstanding rewards for the entire contract.\n * This is how much is owed when everyone pulls out.\n * @return reward Total rewards owed to everyone.\n */\n function totalOutstandingRewards() external view returns (uint256) {\n if (block.number > pool.lastRewardBlock && totalSupply != 0) {\n uint256 multiplier = getCampaignMultiplier(block.number);\n uint256 incReward = multiplier.mul(rewardPerBlock);\n uint256 accRewardPerShare = pool.accRewardPerShare;\n accRewardPerShare = accRewardPerShare.add(\n incReward.divPrecisely(totalSupply)\n );\n return\n subDebt(\n accRewardPerShare.mulTruncate(totalSupply),\n totalRewardDebt\n );\n }\n // no supply or not even started\n return 0;\n }\n\n /**\n * @dev External call for updating the pool.\n */\n function doUpdatePool() external {\n // There should be no harm allowing anyone to call this function.\n // It just updates the latest accRewardPerShare for the pool.\n updatePool();\n }\n\n /**\n * @dev Update the Liquidity Pool reward multiplier.\n * This locks in the accRewardPerShare from the last update block number to now.\n * Will fail if we do not have enough to pay everyone.\n * Always call updatePool whenever the balance changes!\n */\n function updatePool() internal {\n if (\n block.number <= pool.lastRewardBlock ||\n endBlock <= pool.lastRewardBlock\n ) {\n return;\n }\n\n if (totalSupply == 0) {\n pool.lastRewardBlock = block.number;\n return;\n }\n\n uint256 incReward = getCampaignMultiplier(block.number).mul(\n rewardPerBlock\n );\n // we are of course assuming lpTokens are in 1e18 precision\n uint256 accRewardPerShare = pool.accRewardPerShare.add(\n incReward.divPrecisely(totalSupply)\n );\n\n pool.accRewardPerShare = accRewardPerShare;\n pool.lastRewardBlock = block.number;\n }\n\n /**\n * @dev Deposit LP tokens into contract, must be preapproved.\n * @param _amount Amount of LPToken to deposit.\n */\n function deposit(uint256 _amount) external {\n UserInfo storage user = userInfo[msg.sender];\n updatePool();\n if (_amount > 0) {\n user.amount = user.amount.add(_amount);\n // newDebt is equal to the change in amount * accRewardPerShare (note accRewardPerShare is historic)\n int256 newDebt = int256(\n _amount.mulTruncate(pool.accRewardPerShare)\n );\n user.rewardDebt += newDebt;\n totalRewardDebt += newDebt;\n totalSupply = totalSupply.add(_amount);\n emit Deposit(msg.sender, _amount);\n pool.lpToken.safeTransferFrom(\n address(msg.sender),\n address(this),\n _amount\n );\n }\n }\n\n /**\n * @dev Exit out of the contract completely, withdraw LP tokens and claim rewards\n */\n function exit() external {\n UserInfo storage user = userInfo[msg.sender];\n // withdraw everything\n _withdraw(user, user.amount, true);\n }\n\n /**\n * @dev Withdraw LP tokens from contract.\n * @param _amount Amount of LPToken to withdraw.\n * @param _claim Boolean do we want to claim our rewards or not\n */\n function withdraw(uint256 _amount, bool _claim) external {\n UserInfo storage user = userInfo[msg.sender];\n _withdraw(user, _amount, _claim);\n }\n\n function _withdraw(\n UserInfo storage user,\n uint256 _amount,\n bool _claim\n ) internal {\n require(user.amount >= _amount, \"withdraw: overflow\");\n updatePool();\n\n // newDebt is equal to the change in amount * accRewardPerShare (note accRewardPerShare is historic)\n int256 newDebt = -int256(_amount.mulTruncate(pool.accRewardPerShare));\n uint256 pending = 0;\n if (_claim) {\n //This is an optimization so we don't modify the storage variable twice\n pending = subDebt(\n user.amount.mulTruncate(pool.accRewardPerShare),\n user.rewardDebt\n );\n\n newDebt += int256(pending);\n }\n\n user.rewardDebt += newDebt;\n totalRewardDebt += newDebt;\n emit Withdraw(msg.sender, _amount);\n // actually make the changes to the amount and debt\n if (_amount > 0) {\n user.amount = user.amount.sub(_amount);\n totalSupply = totalSupply.sub(_amount, \"withdraw: total overflow\");\n }\n //putting this all at the end to avoid reentrancy error\n if (pending > 0) {\n emit Claim(msg.sender, pending);\n reward.safeTransfer(msg.sender, pending);\n }\n if (_amount > 0) {\n pool.lpToken.safeTransfer(address(msg.sender), _amount);\n }\n }\n\n /**\n * @dev Claim all pending rewards up to current block\n */\n function claim() external {\n UserInfo storage user = userInfo[msg.sender];\n uint256 pending = _pendingRewards(user);\n if (pending > 0) {\n emit Claim(msg.sender, pending);\n int256 debtDelta = int256(pending);\n user.rewardDebt += debtDelta;\n totalRewardDebt += debtDelta;\n reward.safeTransfer(msg.sender, pending);\n }\n }\n\n function subDebt(uint256 amount, int256 debt)\n internal\n pure\n returns (uint256 result)\n {\n if (debt < 0) {\n result = amount.add(uint256(-debt));\n } else {\n result = amount.sub(uint256(debt));\n }\n }\n}\n" + }, + "contracts/mocks/BurnableERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\ninterface IBurnableERC20 {\n function burn(uint256 value) external returns (bool);\n\n function burnFrom(address account, uint256 value) external returns (bool);\n}\n\n/**\n * @title BurnableERC20\n * @dev Exposes the burn function of ERC20 for tests\n */\nabstract contract BurnableERC20 is IBurnableERC20, ERC20 {\n /**\n * @dev Function to burn tokens\n * @param value The amount of tokens to burn.\n * @return A boolean that indicates if the operation was successful.\n */\n function burn(uint256 value) public virtual override returns (bool) {\n _burn(msg.sender, value);\n return true;\n }\n\n /**\n * @dev Function to burn tokens from a specific account\n * @param account The address with the tokens to burn.\n * @param value The amount of tokens to burn.\n * @return A boolean that indicates if the operation was successful.\n */\n function burnFrom(address account, uint256 value)\n public\n override\n returns (bool)\n {\n _burn(account, value);\n return true;\n }\n}\n" + }, + "contracts/mocks/curve/Mock3CRV.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { ERC20, MintableERC20 } from \"../MintableERC20.sol\";\nimport { BurnableERC20 } from \"../BurnableERC20.sol\";\n\ncontract Mock3CRV is MintableERC20, BurnableERC20 {\n constructor() ERC20(\"Curve.fi DAI/USDC/USDT\", \"3Crv\") {}\n\n function decimals() public pure override returns (uint8) {\n return 18;\n }\n}\n" + }, + "contracts/mocks/curve/MockBooster.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { MockRewardPool } from \"./MockRewardPool.sol\";\n\nimport { IRewardStaking } from \"../../strategies/IRewardStaking.sol\";\nimport { IMintableERC20, MintableERC20, ERC20 } from \"../MintableERC20.sol\";\nimport { IBurnableERC20, BurnableERC20 } from \"../BurnableERC20.sol\";\n\ncontract MockDepositToken is MintableERC20, BurnableERC20 {\n constructor() ERC20(\"DCVX\", \"CVX Deposit Token\") {}\n}\n\ncontract MockBooster {\n using SafeERC20 for IERC20;\n\n struct PoolInfo {\n address lptoken;\n address token;\n address crvRewards;\n }\n\n address public minter; // this is CVx for the booster on live\n address public crv; // Curve rewards token\n address public cvx; // Convex rewards token\n mapping(uint256 => PoolInfo) public poolInfo;\n\n constructor(\n address _rewardsMinter,\n address _crv,\n address _cvx\n ) public {\n minter = _rewardsMinter;\n crv = _crv;\n cvx = _cvx;\n }\n\n function setPool(uint256 pid, address _lpToken)\n external\n returns (address rewards)\n {\n address token = address(new MockDepositToken());\n // Deploy a new Convex Rewards Pool\n rewards = address(\n new MockRewardPool(pid, token, crv, cvx, address(this))\n );\n\n poolInfo[pid] = PoolInfo({\n lptoken: _lpToken,\n token: token,\n crvRewards: rewards\n });\n }\n\n function deposit(\n uint256 _pid,\n uint256 _amount,\n bool _stake\n ) public returns (bool) {\n PoolInfo storage pool = poolInfo[_pid];\n\n address lptoken = pool.lptoken;\n\n // hold on to the Curve LP tokens\n IERC20(lptoken).safeTransferFrom(msg.sender, address(this), _amount);\n\n address token = pool.token;\n if (_stake) {\n // mint Convex pool LP tokens and stake in rewards contract on user behalf\n IMintableERC20(token).mint(_amount);\n address rewardContract = pool.crvRewards;\n IERC20(token).safeApprove(rewardContract, 0);\n IERC20(token).safeApprove(rewardContract, _amount);\n IRewardStaking(rewardContract).stakeFor(msg.sender, _amount);\n } else {\n // mint Convex pool LP tokens and send to user\n IMintableERC20(token).mint(_amount);\n IERC20(token).transfer(msg.sender, _amount);\n }\n return true;\n }\n\n // Deposit all Curve LP tokens and stake\n function depositAll(uint256 _pid, bool _stake) external returns (bool) {\n address lptoken = poolInfo[_pid].lptoken;\n uint256 balance = IERC20(lptoken).balanceOf(msg.sender);\n deposit(_pid, balance, _stake);\n return true;\n }\n\n // withdraw Curve LP tokens\n function _withdraw(\n uint256 _pid,\n uint256 _amount,\n address _from,\n address _to\n ) internal {\n PoolInfo storage pool = poolInfo[_pid];\n\n // burn the Convex pool LP tokens\n IBurnableERC20(pool.token).burnFrom(_from, _amount);\n\n // return the Curve LP tokens\n IERC20(pool.lptoken).safeTransfer(_to, _amount);\n }\n\n // withdraw Curve LP tokens\n function withdraw(uint256 _pid, uint256 _amount) public returns (bool) {\n _withdraw(_pid, _amount, msg.sender, msg.sender);\n return true;\n }\n\n // withdraw all Curve LP tokens\n function withdrawAll(uint256 _pid) public returns (bool) {\n address token = poolInfo[_pid].token;\n uint256 userBal = IERC20(token).balanceOf(msg.sender);\n withdraw(_pid, userBal);\n return true;\n }\n\n // allow reward contracts to send here and withdraw to user\n function withdrawTo(\n uint256 _pid,\n uint256 _amount,\n address _to\n ) external returns (bool) {\n address rewardContract = poolInfo[_pid].crvRewards;\n require(msg.sender == rewardContract, \"!auth\");\n\n _withdraw(_pid, _amount, msg.sender, _to);\n return true;\n }\n\n // callback from reward contract when crv is received.\n function rewardClaimed(\n uint256 _pid,\n // solhint-disable-next-line no-unused-vars\n address _address,\n uint256 _amount\n ) external returns (bool) {\n address rewardContract = poolInfo[_pid].crvRewards;\n require(msg.sender == rewardContract, \"!auth\");\n\n //mint reward tokens\n // and transfer it\n IMintableERC20(minter).mint(_amount);\n IERC20(minter).transfer(msg.sender, _amount);\n return true;\n }\n}\n" + }, + "contracts/mocks/curve/MockCRV.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"../MintableERC20.sol\";\n\ncontract MockCRV is MintableERC20 {\n constructor() ERC20(\"Curve DAO Token\", \"CRV\") {}\n\n function decimals() public pure override returns (uint8) {\n return 18;\n }\n}\n" + }, + "contracts/mocks/curve/MockCRVMinter.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IMintableERC20 } from \"../MintableERC20.sol\";\n\ncontract MockCRVMinter {\n address crv;\n\n constructor(address _crv) {\n crv = _crv;\n }\n\n function mint(address _address) external {\n uint256 amount = 2e18;\n IMintableERC20(crv).mint(amount);\n IERC20(crv).transfer(_address, amount);\n }\n}\n" + }, + "contracts/mocks/curve/MockCurveAbstractMetapool.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { MintableERC20, IMintableERC20 } from \"../MintableERC20.sol\";\nimport { StableMath } from \"../../utils/StableMath.sol\";\nimport \"../../utils/Helpers.sol\";\n\nabstract contract MockCurveAbstractMetapool is MintableERC20 {\n using StableMath for uint256;\n\n address[] public coins;\n uint256[2] public balances;\n\n // Returns the same amount of LP tokens in 1e18 decimals\n function add_liquidity(uint256[2] calldata _amounts, uint256 _minAmount)\n external\n returns (uint256 lpAmount)\n {\n for (uint256 i = 0; i < _amounts.length; i++) {\n if (_amounts[i] > 0) {\n IERC20(coins[i]).transferFrom(\n msg.sender,\n address(this),\n _amounts[i]\n );\n uint256 assetDecimals = Helpers.getDecimals(coins[i]);\n // Convert to 1e18 and add to sum\n lpAmount += _amounts[i].scaleBy(18, assetDecimals);\n balances[i] = balances[i] + _amounts[i];\n }\n }\n // Hacky way of simulating slippage to check _minAmount\n if (lpAmount == 29000e18) lpAmount = 14500e18;\n require(lpAmount >= _minAmount, \"Slippage ruined your day\");\n // Send LP token to sender, e.g. 3CRV\n _mint(msg.sender, lpAmount);\n }\n\n // Dumb implementation that returns the same amount\n function calc_withdraw_one_coin(uint256 _amount, int128 _index)\n public\n view\n returns (uint256 lpAmount)\n {\n uint256 assetDecimals = Helpers.getDecimals(coins[uint128(_index)]);\n lpAmount = _amount.scaleBy(assetDecimals, 18);\n }\n\n function remove_liquidity_one_coin(\n uint256 _lpAmount,\n int128 _index,\n // solhint-disable-next-line no-unused-vars\n uint256 _minAmount\n ) external returns (uint256 amount) {\n _burn(msg.sender, _lpAmount);\n uint256[] memory amounts = new uint256[](coins.length);\n amounts[uint128(_index)] = _lpAmount;\n amount = calc_withdraw_one_coin(_lpAmount, _index);\n balances[uint128(_index)] -= amount;\n IERC20(coins[uint128(_index)]).transfer(msg.sender, amount);\n }\n\n function get_virtual_price() external pure returns (uint256) {\n return 1e18;\n }\n\n // solhint-disable-next-line no-unused-vars\n function remove_liquidity(uint256 _amount, uint256[2] memory _min_amounts)\n public\n returns (uint256[2] memory amounts)\n {\n _burn(msg.sender, _amount);\n uint256 totalSupply = totalSupply();\n for (uint256 i = 0; i < 2; i++) {\n amounts[i] = totalSupply > 0\n ? (_amount * IERC20(coins[i]).balanceOf(address(this))) /\n totalSupply\n : IERC20(coins[i]).balanceOf(address(this));\n balances[i] -= amounts[i];\n IERC20(coins[i]).transfer(msg.sender, amounts[i]);\n }\n }\n\n function remove_liquidity_imbalance(\n uint256[2] memory _amounts,\n uint256 _max_burned_tokens\n ) public returns (uint256) {\n return\n _remove_liquidity_imbalance(\n _amounts,\n _max_burned_tokens,\n msg.sender\n );\n }\n\n function remove_liquidity_imbalance(\n uint256[2] memory _amounts,\n uint256 _max_burned_tokens,\n address _reveiver\n ) public returns (uint256) {\n return\n _remove_liquidity_imbalance(\n _amounts,\n _max_burned_tokens,\n _reveiver\n );\n }\n\n function _remove_liquidity_imbalance(\n uint256[2] memory _amounts,\n uint256 _max_burned_tokens,\n address _reveiver\n ) internal returns (uint256 lpTokens) {\n lpTokens = _max_burned_tokens;\n _burn(msg.sender, lpTokens);\n for (uint256 i = 0; i < _amounts.length; i++) {\n balances[i] -= _amounts[i];\n if (_amounts[i] > 0) {\n IERC20(coins[i]).transfer(_reveiver, _amounts[i]);\n }\n }\n }\n\n // Dumb implementation that sums the scaled amounts\n function calc_token_amount(uint256[2] memory _amounts, bool)\n public\n view\n returns (uint256 lpTokens)\n {\n for (uint256 i = 0; i < _amounts.length; i++) {\n uint256 assetDecimals = Helpers.getDecimals(coins[i]);\n // Convert to 1e18 and add to lpTokens\n lpTokens += _amounts[i].scaleBy(18, assetDecimals);\n }\n }\n\n /// @notice 0.02% fee\n function fee() external pure returns (uint256) {\n return 2000000;\n }\n\n function decimals() public pure override returns (uint8) {\n return 18;\n }\n\n function burnFrom(address from, uint256 value) public {\n _burn(from, value);\n }\n}\n" + }, + "contracts/mocks/curve/MockCurveGauge.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\nimport { ICurveGauge } from \"../../strategies/ICurveGauge.sol\";\n\ncontract MockCurveGauge is ICurveGauge {\n mapping(address => uint256) private _balances;\n address lpToken;\n\n constructor(address _lpToken) {\n lpToken = _lpToken;\n }\n\n function balanceOf(address account) public view override returns (uint256) {\n return _balances[account];\n }\n\n function deposit(uint256 _value, address _account) external override {\n IERC20(lpToken).transferFrom(msg.sender, address(this), _value);\n _balances[_account] += _value;\n }\n\n function withdraw(uint256 _value) external override {\n IERC20(lpToken).transfer(msg.sender, _value);\n // solhint-disable-next-line reentrancy\n _balances[msg.sender] -= _value;\n }\n}\n" + }, + "contracts/mocks/curve/MockCurveLUSDMetapool.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { MockCurveAbstractMetapool } from \"./MockCurveAbstractMetapool.sol\";\nimport \"../MintableERC20.sol\";\n\ncontract MockCurveLUSDMetapool is MockCurveAbstractMetapool {\n constructor(address[2] memory _coins)\n ERC20(\"Curve.fi Factory USD Metapool: LUSD\", \"LUSD3CRV-f\")\n {\n coins = _coins;\n }\n}\n" + }, + "contracts/mocks/curve/MockCurveMetapool.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { MockCurveAbstractMetapool } from \"./MockCurveAbstractMetapool.sol\";\nimport \"../MintableERC20.sol\";\n\ncontract MockCurveMetapool is MockCurveAbstractMetapool {\n constructor(address[2] memory _coins)\n ERC20(\"Curve.fi 3pool/OUSD metapool\", \"3crv_OUSD\")\n {\n coins = _coins;\n }\n}\n" + }, + "contracts/mocks/curve/MockCurvePool.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IBurnableERC20 } from \"../BurnableERC20.sol\";\n\nimport { IMintableERC20 } from \"../MintableERC20.sol\";\nimport { ICurvePool } from \"../../strategies/ICurvePool.sol\";\nimport { StableMath } from \"../../utils/StableMath.sol\";\nimport \"../../utils/Helpers.sol\";\n\ncontract MockCurvePool {\n using StableMath for uint256;\n\n address[] public coins;\n uint256[3] public balances;\n address lpToken;\n uint256 public slippage = 1 ether;\n\n constructor(address[3] memory _coins, address _lpToken) {\n coins = _coins;\n lpToken = _lpToken;\n }\n\n function setCoins(address[] memory _coins) external {\n coins = _coins;\n }\n\n // Returns the same amount of LP tokens in 1e18 decimals\n function add_liquidity(uint256[3] calldata _amounts, uint256 _minAmount)\n external\n {\n uint256 sum = 0;\n for (uint256 i = 0; i < _amounts.length; i++) {\n if (_amounts[i] > 0) {\n IERC20(coins[i]).transferFrom(\n msg.sender,\n address(this),\n _amounts[i]\n );\n uint256 assetDecimals = Helpers.getDecimals(coins[i]);\n // Convert to 1e18 and add to sum\n sum += _amounts[i].scaleBy(18, assetDecimals);\n balances[i] = balances[i] + _amounts[i];\n }\n }\n // Hacky way of simulating slippage to check _minAmount\n if (sum == 29000e18) sum = 14500e18;\n require(sum >= _minAmount, \"Slippage ruined your day\");\n // Send LP token to sender, e.g. 3CRV\n IMintableERC20(lpToken).mint(sum);\n IERC20(lpToken).transfer(msg.sender, sum);\n }\n\n // Dumb implementation that returns the same amount\n function calc_withdraw_one_coin(uint256 _amount, int128 _index)\n public\n view\n returns (uint256)\n {\n uint256 assetDecimals = Helpers.getDecimals(coins[uint128(_index)]);\n return _amount.scaleBy(assetDecimals, 18);\n }\n\n function remove_liquidity_one_coin(\n uint256 _amount,\n int128 _index,\n // solhint-disable-next-line no-unused-vars\n uint256 _minAmount\n ) external {\n // Burn the Curve LP tokens\n IBurnableERC20(lpToken).burnFrom(msg.sender, _amount);\n uint256[] memory amounts = new uint256[](coins.length);\n amounts[uint128(_index)] = _amount;\n uint256 coinAmount = calc_withdraw_one_coin(_amount, _index);\n balances[uint128(_index)] -= coinAmount;\n IERC20(coins[uint128(_index)]).transfer(msg.sender, coinAmount);\n }\n\n function get_virtual_price() external pure returns (uint256) {\n return 1e18;\n }\n\n // solhint-disable-next-line no-unused-vars\n function remove_liquidity(uint256 _lpAmount, uint256[3] memory _min_amounts)\n public\n {\n // Burn the Curve LP tokens\n IBurnableERC20(lpToken).burnFrom(msg.sender, _lpAmount);\n uint256 totalSupply = IERC20(lpToken).totalSupply();\n for (uint256 i = 0; i < 3; i++) {\n uint256 coinAmount = totalSupply > 0\n ? (_lpAmount * IERC20(coins[i]).balanceOf(address(this))) /\n totalSupply\n : IERC20(coins[i]).balanceOf(address(this));\n balances[i] -= coinAmount;\n IERC20(coins[i]).transfer(msg.sender, coinAmount);\n }\n }\n\n function remove_liquidity_imbalance(\n uint256[3] memory _amounts,\n uint256 _max_burned_tokens\n ) public {\n // Burn the Curve LP tokens\n IBurnableERC20(lpToken).burnFrom(msg.sender, _max_burned_tokens);\n // For each coin, transfer to the caller\n for (uint256 i = 0; i < _amounts.length; i++) {\n balances[i] -= _amounts[i];\n if (_amounts[i] > 0) {\n IERC20(coins[i]).transfer(msg.sender, _amounts[i]);\n }\n }\n }\n\n // Dumb implementation that sums the scaled amounts\n function calc_token_amount(uint256[3] memory _amounts, bool)\n public\n view\n returns (uint256 lpTokens)\n {\n for (uint256 i = 0; i < _amounts.length; i++) {\n uint256 assetDecimals = Helpers.getDecimals(coins[i]);\n // Convert to 1e18 and add to lpTokens\n lpTokens += _amounts[i].scaleBy(18, assetDecimals);\n }\n }\n\n function fee() external pure returns (uint256) {\n return 1000000;\n }\n\n function exchange(\n uint256 coin0,\n uint256 coin1,\n uint256 amountIn,\n uint256 minAmountOut\n ) external returns (uint256 amountOut) {\n IERC20(coins[coin0]).transferFrom(msg.sender, address(this), amountIn);\n amountOut = (minAmountOut * slippage) / 1 ether;\n require(amountOut >= minAmountOut, \"Slippage error\");\n IMintableERC20(coins[coin1]).mintTo(msg.sender, amountOut);\n }\n\n function setSlippage(uint256 _slippage) external {\n slippage = _slippage;\n }\n}\n" + }, + "contracts/mocks/curve/MockCVX.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"../MintableERC20.sol\";\n\ncontract MockCVX is MintableERC20 {\n constructor() ERC20(\"CVX\", \"CVX DAO Token\") {}\n}\n" + }, + "contracts/mocks/curve/MockLUSD.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"../MintableERC20.sol\";\n\ncontract MockLUSD is MintableERC20 {\n constructor() ERC20(\"LUSD\", \"Liquity Token\") {}\n}\n" + }, + "contracts/mocks/curve/MockRewardPool.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IMintableERC20 } from \"../MintableERC20.sol\";\nimport \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\n\ninterface IDeposit {\n function poolInfo(uint256)\n external\n view\n returns (\n address,\n address,\n address,\n address,\n address,\n bool\n );\n\n function rewardClaimed(\n uint256,\n address,\n uint256\n ) external;\n\n function withdrawTo(\n uint256,\n uint256,\n address\n ) external;\n}\n\ncontract MockRewardPool {\n using SafeMath for uint256;\n using SafeERC20 for IERC20;\n\n uint256 public pid;\n address public stakingToken;\n address public rewardTokenA;\n address public rewardTokenB;\n address public operator;\n\n uint256 private _totalSupply;\n\n mapping(address => uint256) private _balances;\n mapping(address => uint256) public rewards;\n\n constructor(\n uint256 _pid,\n address _stakingToken,\n address _rewardTokenA,\n address _rewardTokenB,\n address _operator\n ) public {\n pid = _pid;\n stakingToken = _stakingToken;\n rewardTokenA = _rewardTokenA;\n rewardTokenB = _rewardTokenB;\n operator = _operator;\n }\n\n function totalSupply() public view returns (uint256) {\n return _totalSupply;\n }\n\n function balanceOf(address account) public view returns (uint256) {\n return _balances[account];\n }\n\n function stakeFor(address _for, uint256 _amount) public returns (bool) {\n require(_amount > 0, \"RewardPool : Cannot stake 0\");\n\n //give to _for\n _totalSupply = _totalSupply.add(_amount);\n _balances[_for] = _balances[_for].add(_amount);\n\n //take away from sender\n IERC20(stakingToken).safeTransferFrom(\n msg.sender,\n address(this),\n _amount\n );\n\n return true;\n }\n\n function withdrawAndUnwrap(uint256 amount, bool claim)\n public\n returns (bool)\n {\n _totalSupply = _totalSupply.sub(amount);\n _balances[msg.sender] = _balances[msg.sender].sub(amount);\n\n //tell operator to withdraw from here directly to user\n IDeposit(operator).withdrawTo(pid, amount, msg.sender);\n\n //get rewards too\n if (claim) {\n getReward(msg.sender, true);\n }\n return true;\n }\n\n function withdrawAllAndUnwrap(bool claim) external {\n withdrawAndUnwrap(_balances[msg.sender], claim);\n }\n\n // solhint-disable-next-line no-unused-vars\n function getReward(address _account, bool _claimExtras)\n public\n returns (bool)\n {\n IMintableERC20(rewardTokenA).mint(2 * 1e18);\n IERC20(rewardTokenA).transfer(_account, 2 * 1e18);\n\n IMintableERC20(rewardTokenB).mint(3 * 1e18);\n IERC20(rewardTokenB).transfer(_account, 3 * 1e18);\n\n return true;\n }\n\n function getReward() public returns (bool) {\n getReward(msg.sender, true);\n }\n}\n" + }, + "contracts/mocks/MintableERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\ninterface IMintableERC20 {\n function mint(uint256 value) external;\n\n function mintTo(address to, uint256 value) external;\n}\n\n/**\n * @title MintableERC20\n * @dev Exposes the mint function of ERC20 for tests\n */\nabstract contract MintableERC20 is IMintableERC20, ERC20 {\n /**\n * @dev Function to mint tokens\n * @param _value The amount of tokens to mint.\n */\n function mint(uint256 _value) public virtual override {\n _mint(msg.sender, _value);\n }\n\n /**\n * @dev Function to mint tokens\n * @param _to Address to mint to.\n * @param _value The amount of tokens to mint.\n */\n function mintTo(address _to, uint256 _value) public virtual override {\n _mint(_to, _value);\n }\n}\n" + }, + "contracts/mocks/Mock1InchSwapRouter.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport { SwapDescription } from \"../interfaces/IOneInch.sol\";\n\ncontract Mock1InchSwapRouter {\n using SafeERC20 for IERC20;\n\n event MockSwap(address executor, bytes permitData, bytes executorData);\n\n event MockSwapDesc(\n address srcToken,\n address dstToken,\n address srcReceiver,\n address dstReceiver,\n uint256 amount,\n uint256 minReturnAmount,\n uint256 flags\n );\n\n event MockUnoswapTo(\n address recipient,\n address srcToken,\n uint256 amount,\n uint256 minReturn,\n uint256[] pools\n );\n\n event MockUniswapV3SwapTo(\n address recipient,\n uint256 amount,\n uint256 minReturn,\n uint256[] pools\n );\n\n /**\n * @dev transfers the shource asset and returns the minReturnAmount of the destination asset.\n */\n function swap(\n address executor,\n SwapDescription calldata desc,\n bytes calldata permitData,\n bytes calldata executorData\n ) public returns (uint256 returnAmount, uint256 spentAmount) {\n // Transfer the source tokens to the receiver contract\n IERC20(desc.srcToken).safeTransferFrom(\n msg.sender,\n desc.srcReceiver,\n desc.amount\n );\n\n // Transfer the destination tokens to the recipient\n IERC20(desc.dstToken).safeTransfer(\n desc.dstReceiver,\n desc.minReturnAmount\n );\n\n emit MockSwap(executor, permitData, executorData);\n _swapDesc(desc);\n returnAmount = 0;\n spentAmount = 0;\n }\n\n function _swapDesc(SwapDescription calldata desc) public {\n emit MockSwapDesc(\n address(desc.srcToken),\n address(desc.dstToken),\n desc.srcReceiver,\n desc.dstReceiver,\n desc.amount,\n desc.minReturnAmount,\n desc.flags\n );\n }\n\n /**\n * @dev only transfers the source asset to this contract.\n * Ideally it would return the destination asset but that's encoded in the pools array.\n */\n function unoswapTo(\n address payable recipient,\n address srcToken,\n uint256 amount,\n uint256 minReturn,\n uint256[] calldata pools\n ) public returns (uint256 returnAmount) {\n // transfer the from asset from the caller\n IERC20(srcToken).safeTransferFrom(msg.sender, address(this), amount);\n\n emit MockUnoswapTo(recipient, srcToken, amount, minReturn, pools);\n returnAmount = 0;\n }\n\n /**\n * @dev does not do any transfers. Just emits MockUniswapV3SwapTo.\n */\n function uniswapV3SwapTo(\n address payable recipient,\n uint256 amount,\n uint256 minReturn,\n uint256[] calldata pools\n ) public returns (uint256 returnAmount) {\n emit MockUniswapV3SwapTo(recipient, amount, minReturn, pools);\n returnAmount = 0;\n }\n}\n" + }, + "contracts/mocks/MockAave.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC20, ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\nimport { MintableERC20 } from \"./MintableERC20.sol\";\nimport { IAaveLendingPool, ILendingPoolAddressesProvider } from \"../strategies/IAave.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\n\n// 1. User calls 'getLendingPool'\n// 2. User calls 'deposit' (Aave)\n// - Deposit their underlying\n// - Mint aToken to them\n// 3. User calls redeem (aToken)\n// - Retrieve their aToken\n// - Return equal amount of underlying\n\ncontract MockAToken is MintableERC20 {\n address public lendingPool;\n IERC20 public underlyingToken;\n using SafeERC20 for IERC20;\n\n constructor(\n address _lendingPool,\n string memory _name,\n string memory _symbol,\n IERC20 _underlyingToken\n ) ERC20(_name, _symbol) {\n lendingPool = _lendingPool;\n underlyingToken = _underlyingToken;\n // addMinter(_lendingPool);\n }\n\n function decimals() public view override returns (uint8) {\n return ERC20(address(underlyingToken)).decimals();\n }\n\n function poolRedeem(uint256 _amount, address _to) external {\n require(msg.sender == lendingPool, \"pool only\");\n // Redeem these a Tokens\n _burn(_to, _amount);\n // For the underlying\n underlyingToken.safeTransferFrom(lendingPool, _to, _amount);\n }\n}\n\ncontract MockAave is IAaveLendingPool, ILendingPoolAddressesProvider {\n using SafeERC20 for IERC20;\n using StableMath for uint256;\n\n mapping(address => address) reserveToAToken;\n address pool = address(this);\n address payable core = payable(address(this));\n uint256 factor;\n\n function addAToken(address _aToken, address _underlying) public {\n IERC20(_underlying).safeApprove(_aToken, 0);\n IERC20(_underlying).safeApprove(_aToken, type(uint256).max);\n reserveToAToken[_underlying] = _aToken;\n }\n\n // set the reserve factor / basically the interest on deposit\n // in 18 precision\n // so 0.5% would be 5 * 10 ^ 15\n function setFactor(uint256 factor_) public {\n factor = factor_;\n }\n\n function deposit(\n address _reserve,\n uint256 _amount,\n address _to,\n uint16 /*_referralCode*/\n ) external override {\n uint256 previousBal = IERC20(reserveToAToken[_reserve]).balanceOf(\n msg.sender\n );\n uint256 interest = previousBal.mulTruncate(factor);\n MintableERC20(reserveToAToken[_reserve]).mintTo(msg.sender, interest);\n // Take their reserve\n IERC20(_reserve).safeTransferFrom(msg.sender, address(this), _amount);\n // Credit them with aToken\n MintableERC20(reserveToAToken[_reserve]).mintTo(_to, _amount);\n }\n\n function withdraw(\n address asset,\n uint256 amount,\n address to\n ) external override returns (uint256) {\n MockAToken atoken = MockAToken(reserveToAToken[asset]);\n atoken.poolRedeem(amount, to);\n return amount;\n }\n\n function getLendingPool() external view override returns (address) {\n return pool;\n }\n}\n" + }, + "contracts/mocks/MockAaveIncentivesController.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { MockStkAave } from \"./MockStkAave.sol\";\n\ncontract MockAaveIncentivesController {\n mapping(address => uint256) private rewards;\n MockStkAave public REWARD_TOKEN;\n\n constructor(address _reward_token) {\n REWARD_TOKEN = MockStkAave(_reward_token);\n }\n\n function setRewardsBalance(address user, uint256 amount) external {\n rewards[user] = amount;\n }\n\n /**\n * @dev Returns the total of rewards of an user, already accrued + not yet accrued\n * @param user The address of the user\n * @return The rewards\n **/\n // solhint-disable-next-line no-unused-vars\n function getRewardsBalance(address[] calldata assets, address user)\n external\n view\n returns (uint256)\n {\n return rewards[user];\n }\n\n /**\n * @dev Claims reward for an user, on all the assets of the lending pool, accumulating the pending rewards\n * @param amount Amount of rewards to claim\n * @param to Address that will be receiving the rewards\n * @return Rewards claimed\n **/\n function claimRewards(\n // solhint-disable-next-line no-unused-vars\n address[] calldata assets,\n uint256 amount,\n address to\n ) external returns (uint256) {\n require(amount > 0);\n require(rewards[to] == amount);\n REWARD_TOKEN.mint(amount);\n require(REWARD_TOKEN.transfer(to, amount));\n // solhint-disable-next-line reentrancy\n rewards[to] = 0;\n return amount;\n }\n}\n" + }, + "contracts/mocks/MockAAVEToken.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./MintableERC20.sol\";\n\ncontract MockAAVEToken is MintableERC20 {\n constructor() ERC20(\"AAVE\", \"AAVE\") {}\n}\n" + }, + "contracts/mocks/MockAura.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./MintableERC20.sol\";\n\ncontract MockAura is MintableERC20 {\n constructor() ERC20(\"Aura\", \"AURA\") {}\n}\n" + }, + "contracts/mocks/MockBAL.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./MintableERC20.sol\";\n\ncontract MockBAL is MintableERC20 {\n constructor() ERC20(\"Balancer\", \"BAL\") {}\n}\n" + }, + "contracts/mocks/MockBalancerVault.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IBalancerVault } from \"../interfaces/balancer/IBalancerVault.sol\";\nimport { MintableERC20 } from \"./MintableERC20.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\n\n// import \"hardhat/console.sol\";\n\ncontract MockBalancerVault {\n using StableMath for uint256;\n uint256 public slippage = 1 ether;\n bool public transferDisabled = false;\n bool public slippageErrorDisabled = false;\n\n function swap(\n IBalancerVault.SingleSwap calldata singleSwap,\n IBalancerVault.FundManagement calldata funds,\n uint256 minAmountOut,\n uint256\n ) external returns (uint256 amountCalculated) {\n amountCalculated = (minAmountOut * slippage) / 1 ether;\n if (!slippageErrorDisabled) {\n require(amountCalculated >= minAmountOut, \"Slippage error\");\n }\n IERC20(singleSwap.assetIn).transferFrom(\n funds.sender,\n address(this),\n singleSwap.amount\n );\n if (!transferDisabled) {\n MintableERC20(singleSwap.assetOut).mintTo(\n funds.recipient,\n amountCalculated\n );\n }\n }\n\n function setSlippage(uint256 _slippage) external {\n slippage = _slippage;\n }\n\n function getPoolTokenInfo(bytes32 poolId, address token)\n external\n view\n returns (\n uint256,\n uint256,\n uint256,\n address\n )\n {}\n\n function disableTransfer() external {\n transferDisabled = true;\n }\n\n function disableSlippageError() external {\n slippageErrorDisabled = true;\n }\n}\n" + }, + "contracts/mocks/MockChainlinkOracleFeed.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"../interfaces/chainlink/AggregatorV3Interface.sol\";\n\ncontract MockChainlinkOracleFeed is AggregatorV3Interface {\n int256 price;\n uint8 numDecimals;\n\n constructor(int256 _price, uint8 _decimals) {\n price = _price;\n numDecimals = _decimals;\n }\n\n function decimals() external view override returns (uint8) {\n return numDecimals;\n }\n\n function description() external pure override returns (string memory) {\n return \"MockOracleEthFeed\";\n }\n\n function version() external pure override returns (uint256) {\n return 1;\n }\n\n function setPrice(int256 _price) public {\n price = _price;\n }\n\n function setDecimals(uint8 _decimals) public {\n numDecimals = _decimals;\n }\n\n // getRoundData and latestRoundData should both raise \"No data present\"\n // if they do not have data to report, instead of returning unset values\n // which could be misinterpreted as actual reported values.\n function getRoundData(uint80 _roundId)\n external\n view\n override\n returns (\n uint80 roundId,\n int256 answer,\n uint256 startedAt,\n uint256 updatedAt,\n uint80 answeredInRound\n )\n {\n roundId = _roundId;\n answer = price;\n startedAt = 0;\n updatedAt = 0;\n answeredInRound = 0;\n }\n\n function latestRoundData()\n external\n view\n override\n returns (\n uint80 roundId,\n int256 answer,\n uint256 startedAt,\n uint256 updatedAt,\n uint80 answeredInRound\n )\n {\n roundId = 0;\n answer = price;\n startedAt = 0;\n updatedAt = block.timestamp;\n answeredInRound = 0;\n }\n}\n" + }, + "contracts/mocks/MockCOMP.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./MintableERC20.sol\";\n\ncontract MockCOMP is MintableERC20 {\n constructor() ERC20(\"COMP\", \"COMP\") {}\n}\n" + }, + "contracts/mocks/MockComptroller.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ncontract MockComptroller {\n // Claim all the COMP accrued by specific holders in specific markets for their supplies and/or borrows\n function claimComp(\n address[] memory holders,\n address[] memory cTokens,\n bool borrowers,\n bool suppliers\n ) external {}\n}\n" + }, + "contracts/mocks/MockCToken.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20, ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\nimport { ICERC20 } from \"../strategies/ICompound.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\n\ncontract MockCToken is ICERC20, ERC20 {\n using StableMath for uint256;\n\n IERC20 public underlyingToken;\n // underlying = cToken * exchangeRate\n // cToken = underlying / exchangeRate\n uint256 exchangeRate;\n address public override comptroller;\n\n constructor(ERC20 _underlyingToken, address _comptroller)\n ERC20(\"cMock\", \"cMK\")\n {\n uint8 underlyingDecimals = _underlyingToken.decimals();\n // if has 18 dp, exchange rate should be 1e26\n // if has 8 dp, exchange rate should be 1e18\n if (underlyingDecimals > 8) {\n exchangeRate = 10**uint256(18 + underlyingDecimals - 10);\n } else if (underlyingDecimals < 8) {\n // e.g. 18-8+6 = 16\n exchangeRate = 10**uint256(18 - 8 + underlyingDecimals);\n } else {\n exchangeRate = 1e18;\n }\n underlyingToken = _underlyingToken;\n comptroller = _comptroller;\n }\n\n function decimals() public pure override returns (uint8) {\n return 8;\n }\n\n function mint(uint256 mintAmount) public override returns (uint256) {\n // Credit them with cToken\n _mint(msg.sender, mintAmount.divPrecisely(exchangeRate));\n // Take their reserve\n underlyingToken.transferFrom(msg.sender, address(this), mintAmount);\n return 0;\n }\n\n function redeem(uint256 redeemAmount) external override returns (uint256) {\n uint256 tokenAmount = redeemAmount.mulTruncate(exchangeRate);\n // Burn the cToken\n _burn(msg.sender, redeemAmount);\n // Transfer underlying to caller\n underlyingToken.transfer(msg.sender, tokenAmount);\n return 0;\n }\n\n function redeemUnderlying(uint256 redeemAmount)\n external\n override\n returns (uint256)\n {\n uint256 cTokens = redeemAmount.divPrecisely(exchangeRate);\n // Burn the cToken\n _burn(msg.sender, cTokens);\n // Transfer underlying to caller\n underlyingToken.transfer(msg.sender, redeemAmount);\n return 0;\n }\n\n function balanceOfUnderlying(address owner)\n external\n view\n override\n returns (uint256)\n {\n uint256 cTokenBal = this.balanceOf(owner);\n return cTokenBal.mulTruncate(exchangeRate);\n }\n\n function balanceOf(address owner)\n public\n view\n override(ICERC20, ERC20)\n returns (uint256)\n {\n return ERC20.balanceOf(owner);\n }\n\n function updateExchangeRate()\n internal\n view\n returns (uint256 newExchangeRate)\n {\n uint256 factor = 100002 * (10**13); // 0.002%\n newExchangeRate = exchangeRate.mulTruncate(factor);\n }\n\n function exchangeRateStored() external view override returns (uint256) {\n return exchangeRate;\n }\n\n function supplyRatePerBlock() external pure override returns (uint256) {\n return 141 * (10**8);\n }\n}\n" + }, + "contracts/mocks/MockCVXLocker.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\ncontract MockCVXLocker {\n address public immutable cvx;\n mapping(address => uint256) public lockedBalanceOf;\n\n constructor(address _cvx) {\n cvx = _cvx;\n }\n\n function lock(\n address _account,\n uint256 _amount,\n uint256\n ) external {\n lockedBalanceOf[_account] += _amount;\n ERC20(cvx).transferFrom(msg.sender, address(this), _amount);\n }\n\n function unlockAllTokens(address _account) external {\n lockedBalanceOf[_account] = 0;\n ERC20(cvx).transfer(_account, lockedBalanceOf[_account]);\n }\n}\n" + }, + "contracts/mocks/MockDAI.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./MintableERC20.sol\";\n\ncontract MockDAI is MintableERC20 {\n constructor() ERC20(\"DAI\", \"DAI\") {}\n}\n" + }, + "contracts/mocks/MockDepositContract.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IDepositContract } from \"./../interfaces/IDepositContract.sol\";\n\ncontract MockDepositContract is IDepositContract {\n uint256 deposit_count;\n\n function deposit(\n bytes calldata pubkey,\n bytes calldata withdrawal_credentials,\n bytes calldata signature,\n bytes32 deposit_data_root\n ) external payable override {\n require(pubkey.length == 48, \"DepositContract: invalid pubkey length\");\n require(\n withdrawal_credentials.length == 32,\n \"DepositContract: invalid withdrawal_credentials length\"\n );\n require(\n signature.length == 96,\n \"DepositContract: invalid signature length\"\n );\n\n // Check deposit amount\n require(msg.value >= 1 ether, \"DepositContract: deposit value too low\");\n require(\n msg.value % 1 gwei == 0,\n \"DepositContract: deposit value not multiple of gwei\"\n );\n uint256 deposit_amount = msg.value / 1 gwei;\n require(\n deposit_amount <= type(uint64).max,\n \"DepositContract: deposit value too high\"\n );\n\n // Emit `DepositEvent` log\n bytes memory amount = to_little_endian_64(uint64(deposit_amount));\n emit DepositEvent(\n pubkey,\n withdrawal_credentials,\n amount,\n signature,\n to_little_endian_64(uint64(deposit_count))\n );\n require(\n deposit_data_root != 0,\n \"DepositContract: invalid deposit_data_root\"\n );\n }\n\n function get_deposit_root() external view override returns (bytes32) {\n // just return some bytes32\n return sha256(abi.encodePacked(deposit_count, bytes16(0)));\n }\n\n /// @notice Query the current deposit count.\n /// @return The deposit count encoded as a little endian 64-bit number.\n function get_deposit_count() external view override returns (bytes memory) {\n return to_little_endian_64(uint64(deposit_count));\n }\n\n function to_little_endian_64(uint64 value)\n internal\n pure\n returns (bytes memory ret)\n {\n ret = new bytes(8);\n bytes8 bytesValue = bytes8(value);\n // Byteswapping during copying to bytes.\n ret[0] = bytesValue[7];\n ret[1] = bytesValue[6];\n ret[2] = bytesValue[5];\n ret[3] = bytesValue[4];\n ret[4] = bytesValue[3];\n ret[5] = bytesValue[2];\n ret[6] = bytesValue[1];\n ret[7] = bytesValue[0];\n }\n}\n" + }, + "contracts/mocks/MockEvilDAI.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./MintableERC20.sol\";\nimport { IVault } from \"../interfaces/IVault.sol\";\n\ncontract MockEvilDAI is MintableERC20 {\n address host;\n address realCoin;\n\n constructor(address _host, address _realCoin) ERC20(\"DAI\", \"DAI\") {\n host = _host;\n realCoin = _realCoin;\n }\n\n function transferFrom(\n // solhint-disable-next-line no-unused-vars\n address _from,\n // solhint-disable-next-line no-unused-vars\n address _to,\n uint256 _amount\n ) public override returns (bool) {\n // call mint again!\n if (_amount != 69) {\n IVault(host).mint(address(this), 69, 0);\n }\n return true;\n }\n}\n" + }, + "contracts/mocks/MockEvilReentrantContract.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IVault } from \"../interfaces/IVault.sol\";\nimport { IOracle } from \"../interfaces/IOracle.sol\";\nimport { IRateProvider } from \"../interfaces/balancer/IRateProvider.sol\";\n\nimport { IBalancerVault } from \"../interfaces/balancer/IBalancerVault.sol\";\nimport { IERC20 } from \"../utils/InitializableAbstractStrategy.sol\";\n\nimport { StableMath } from \"../utils/StableMath.sol\";\n\ncontract MockEvilReentrantContract {\n using StableMath for uint256;\n\n IBalancerVault public immutable balancerVault;\n IERC20 public immutable reth;\n IERC20 public immutable weth;\n IVault public immutable oethVault;\n address public immutable poolAddress;\n bytes32 public immutable balancerPoolId;\n\n constructor(\n address _balancerVault,\n address _oethVault,\n address _reth,\n address _weth,\n address _poolAddress,\n bytes32 _poolId\n ) {\n balancerVault = IBalancerVault(_balancerVault);\n oethVault = IVault(_oethVault);\n reth = IERC20(_reth);\n weth = IERC20(_weth);\n poolAddress = _poolAddress;\n balancerPoolId = _poolId;\n }\n\n function doEvilStuff() public {\n address priceProvider = oethVault.priceProvider();\n uint256 rethPrice = IOracle(priceProvider).price(address(reth));\n\n // 1. Join pool\n uint256[] memory amounts = new uint256[](2);\n amounts[0] = uint256(10 ether);\n amounts[1] = rethPrice * 10;\n\n address[] memory assets = new address[](2);\n assets[0] = address(reth);\n assets[1] = address(weth);\n\n uint256 minBPT = getBPTExpected(assets, amounts).mulTruncate(\n 0.99 ether\n );\n\n bytes memory joinUserData = abi.encode(\n IBalancerVault.WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT,\n amounts,\n minBPT\n );\n\n IBalancerVault.JoinPoolRequest memory joinRequest = IBalancerVault\n .JoinPoolRequest(assets, amounts, joinUserData, false);\n\n balancerVault.joinPool(\n balancerPoolId,\n address(this),\n address(this),\n joinRequest\n );\n\n uint256 bptTokenBalance = IERC20(poolAddress).balanceOf(address(this));\n\n // 2. Redeem as ETH\n bytes memory exitUserData = abi.encode(\n IBalancerVault.WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT,\n bptTokenBalance,\n 1\n );\n\n assets[1] = address(0); // Receive ETH instead of WETH\n uint256[] memory exitAmounts = new uint256[](2);\n exitAmounts[1] = 15 ether;\n IBalancerVault.ExitPoolRequest memory exitRequest = IBalancerVault\n .ExitPoolRequest(assets, exitAmounts, exitUserData, false);\n\n balancerVault.exitPool(\n balancerPoolId,\n address(this),\n payable(address(this)),\n exitRequest\n );\n bptTokenBalance = IERC20(poolAddress).balanceOf(address(this));\n }\n\n function getBPTExpected(address[] memory _assets, uint256[] memory _amounts)\n internal\n view\n virtual\n returns (uint256 bptExpected)\n {\n // Get the oracle from the OETH Vault\n address priceProvider = oethVault.priceProvider();\n\n for (uint256 i = 0; i < _assets.length; ++i) {\n uint256 strategyAssetMarketPrice = IOracle(priceProvider).price(\n _assets[i]\n );\n // convert asset amount to ETH amount\n bptExpected =\n bptExpected +\n _amounts[i].mulTruncate(strategyAssetMarketPrice);\n }\n\n uint256 bptRate = IRateProvider(poolAddress).getRate();\n // Convert ETH amount to BPT amount\n bptExpected = bptExpected.divPrecisely(bptRate);\n }\n\n function approveAllTokens() public {\n // Approve all tokens\n weth.approve(address(oethVault), type(uint256).max);\n reth.approve(poolAddress, type(uint256).max);\n weth.approve(poolAddress, type(uint256).max);\n reth.approve(address(balancerVault), type(uint256).max);\n weth.approve(address(balancerVault), type(uint256).max);\n }\n\n receive() external payable {\n // 3. Try to mint OETH\n oethVault.mint(address(weth), 1 ether, 0.9 ether);\n }\n}\n" + }, + "contracts/mocks/MockfrxETH.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./MintableERC20.sol\";\n\ncontract MockfrxETH is MintableERC20 {\n constructor() ERC20(\"frxETH\", \"frxETH\") {}\n}\n" + }, + "contracts/mocks/MockFrxETHMinter.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./MintableERC20.sol\";\n\ncontract MockFrxETHMinter {\n address public immutable frxETH;\n address public immutable sfrxETH;\n\n constructor(address _frxETH, address _sfrxETH) {\n frxETH = _frxETH;\n sfrxETH = _sfrxETH;\n }\n\n function submitAndDeposit(address recipient)\n external\n payable\n returns (uint256 shares)\n {\n IMintableERC20(frxETH).mintTo(sfrxETH, msg.value);\n IMintableERC20(sfrxETH).mintTo(recipient, msg.value);\n shares = msg.value;\n }\n}\n" + }, + "contracts/mocks/MockLimitedWrappedOusd.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { WrappedOusd } from \"../token/WrappedOusd.sol\";\nimport { ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\ncontract MockLimitedWrappedOusd is WrappedOusd {\n constructor(\n ERC20 underlying_,\n string memory name_,\n string memory symbol_\n ) WrappedOusd(underlying_, name_, symbol_) {}\n\n function maxDeposit(address)\n public\n view\n virtual\n override\n returns (uint256)\n {\n return 1e18;\n }\n}\n" + }, + "contracts/mocks/MockMetadataToken.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// IERC20Metadata is used in the resolveAsset function in contracts/utils/assets.js\n// We just need to import it here to make its ABI available to Hardhat\nimport { IERC20Metadata } from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\n" + }, + "contracts/mocks/MockMintableUniswapPair.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./MintableERC20.sol\";\nimport \"./MockUniswapPair.sol\";\n\ncontract MockMintableUniswapPair is MockUniswapPair, MintableERC20 {\n constructor(\n address _token0,\n address _token1,\n uint112 _reserve0,\n uint112 _reserve1\n )\n MockUniswapPair(_token0, _token1, _reserve0, _reserve1)\n ERC20(\"Uniswap V2\", \"UNI-v2\")\n {}\n\n function decimals() public pure override returns (uint8) {\n return 18;\n }\n}\n" + }, + "contracts/mocks/MockNonRebasing.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IVault } from \"../interfaces/IVault.sol\";\n\nimport { OUSD } from \"../token/OUSD.sol\";\n\ncontract MockNonRebasing {\n OUSD oUSD;\n\n function setOUSD(address _oUSDAddress) public {\n oUSD = OUSD(_oUSDAddress);\n }\n\n function rebaseOptIn() public {\n oUSD.rebaseOptIn();\n }\n\n function rebaseOptOut() public {\n oUSD.rebaseOptOut();\n }\n\n function transfer(address _to, uint256 _value) public {\n oUSD.transfer(_to, _value);\n }\n\n function transferFrom(\n address _from,\n address _to,\n uint256 _value\n ) public {\n oUSD.transferFrom(_from, _to, _value);\n }\n\n function increaseAllowance(address _spender, uint256 _addedValue) public {\n oUSD.increaseAllowance(_spender, _addedValue);\n }\n\n function mintOusd(\n address _vaultContract,\n address _asset,\n uint256 _amount\n ) public {\n IVault(_vaultContract).mint(_asset, _amount, 0);\n }\n\n function redeemOusd(address _vaultContract, uint256 _amount) public {\n IVault(_vaultContract).redeem(_amount, 0);\n }\n\n function approveFor(\n address _contract,\n address _spender,\n uint256 _addedValue\n ) public {\n IERC20(_contract).approve(_spender, _addedValue);\n }\n}\n" + }, + "contracts/mocks/MockNonStandardToken.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { SafeMath } from \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\n\nimport \"./MintableERC20.sol\";\n\n/**\n * Mock token contract to simulate tokens that don't\n * throw/revert when a transfer/transferFrom call fails\n */\ncontract MockNonStandardToken is MintableERC20 {\n using SafeMath for uint256;\n\n constructor() ERC20(\"NonStandardToken\", \"NonStandardToken\") {}\n\n function decimals() public pure override returns (uint8) {\n return 6;\n }\n\n function transfer(address recipient, uint256 amount)\n public\n override\n returns (bool)\n {\n if (balanceOf(msg.sender) < amount) {\n // Fail silently\n return false;\n }\n\n _transfer(_msgSender(), recipient, amount);\n return true;\n }\n\n function transferFrom(\n address sender,\n address recipient,\n uint256 amount\n ) public override returns (bool) {\n if (balanceOf(sender) < amount) {\n // Fail silently\n return false;\n }\n\n _transfer(sender, recipient, amount);\n _approve(\n sender,\n _msgSender(),\n allowance(sender, _msgSender()).sub(\n amount,\n \"ERC20: transfer amount exceeds allowance\"\n )\n );\n return true;\n }\n}\n" + }, + "contracts/mocks/MockOETHVault.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { OETHVaultCore } from \"../vault/OETHVaultCore.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\nimport \"../utils/Helpers.sol\";\n\ncontract MockOETHVault is OETHVaultCore {\n using StableMath for uint256;\n\n constructor(address _weth) OETHVaultCore(_weth) {}\n\n function supportAsset(address asset) external {\n assets[asset] = Asset({\n isSupported: true,\n unitConversion: UnitConversion(0),\n decimals: 18,\n allowedOracleSlippageBps: 0\n });\n\n allAssets.push(asset);\n }\n}\n" + }, + "contracts/mocks/MockOGN.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./BurnableERC20.sol\";\nimport \"./MintableERC20.sol\";\n\n/**\n * @title Origin token (OGN).\n *\n * @dev Token that allows minting and burning.\n * @dev Important note:\n * @dev There is a known race condition in the ERC20 standard on the approve() method.\n * @dev See details: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n * @dev The Origin token contract implements the increaseApproval() and decreaseApproval() methods.\n * @dev It is strongly recommended to use those methods rather than approve()\n * @dev when updating the token allowance.\n */\ncontract MockOGN is MintableERC20, BurnableERC20 {\n event SetWhitelistExpiration(uint256 expiration);\n event AllowedTransactorAdded(address sender);\n event AllowedTransactorRemoved(address sender);\n event AddCallSpenderWhitelist(address enabler, address spender);\n event RemoveCallSpenderWhitelist(address disabler, address spender);\n\n mapping(address => bool) public callSpenderWhitelist;\n address public owner = msg.sender;\n // UNIX timestamp (in seconds) after which this whitelist no longer applies\n uint256 public whitelistExpiration;\n // While the whitelist is active, either the sender or recipient must be\n // in allowedTransactors.\n mapping(address => bool) public allowedTransactors;\n\n // @dev Constructor that gives msg.sender all initial tokens.\n constructor(uint256 _initialSupply) ERC20(\"OriginToken\", \"OGN\") {\n owner = msg.sender;\n _mint(owner, _initialSupply);\n }\n\n //\n // approveAndCall methods\n //\n\n // @dev Add spender to whitelist of spenders for approveAndCall\n // @param _spender Address to add\n function addCallSpenderWhitelist(address _spender) public onlyOwner {\n callSpenderWhitelist[_spender] = true;\n emit AddCallSpenderWhitelist(msg.sender, _spender);\n }\n\n // @dev Remove spender from whitelist of spenders for approveAndCall\n // @param _spender Address to remove\n function removeCallSpenderWhitelist(address _spender) public onlyOwner {\n delete callSpenderWhitelist[_spender];\n emit RemoveCallSpenderWhitelist(msg.sender, _spender);\n }\n\n // @dev Approve transfer of tokens and make a contract call in a single\n // @dev transaction. This allows a DApp to avoid requiring two MetaMask\n // @dev approvals for a single logical action, such as creating a listing,\n // @dev which requires the seller to approve a token transfer and the\n // @dev marketplace contract to transfer tokens from the seller.\n //\n // @dev This is based on the ERC827 function approveAndCall and avoids\n // @dev security issues by only working with a whitelisted set of _spender\n // @dev addresses. The other difference is that the combination of this\n // @dev function ensures that the proxied function call receives the\n // @dev msg.sender for this function as its first parameter.\n //\n // @param _spender The address that will spend the funds.\n // @param _value The amount of tokens to be spent.\n // @param _selector Function selector for function to be called.\n // @param _callParams Packed, encoded parameters, omitting the first parameter which is always msg.sender\n function approveAndCallWithSender(\n address _spender,\n uint256 _value,\n bytes4 _selector,\n bytes memory _callParams\n ) public payable returns (bool) {\n require(_spender != address(this), \"token contract can't be approved\");\n require(callSpenderWhitelist[_spender], \"spender not in whitelist\");\n\n require(super.approve(_spender, _value), \"approve failed\");\n\n bytes memory callData = abi.encodePacked(\n _selector,\n uint256(uint160(msg.sender)),\n _callParams\n );\n // solium-disable-next-line security/no-call-value\n (bool success, ) = _spender.call{ value: msg.value }(callData);\n require(success, \"proxied call failed\");\n return true;\n }\n\n //\n // Functions for maintaining whitelist\n //\n\n modifier onlyOwner() {\n require(msg.sender == owner);\n _;\n }\n modifier allowedTransfer(address _from, address _to) {\n require(\n // solium-disable-next-line operator-whitespace\n !whitelistActive() ||\n allowedTransactors[_from] ||\n allowedTransactors[_to],\n \"neither sender nor recipient are allowed\"\n );\n _;\n }\n\n function whitelistActive() public view returns (bool) {\n return block.timestamp < whitelistExpiration;\n }\n\n function addAllowedTransactor(address _transactor) public onlyOwner {\n emit AllowedTransactorAdded(_transactor);\n allowedTransactors[_transactor] = true;\n }\n\n function removeAllowedTransactor(address _transactor) public onlyOwner {\n emit AllowedTransactorRemoved(_transactor);\n delete allowedTransactors[_transactor];\n }\n\n /**\n * @dev Set the whitelist expiration, after which the whitelist no longer\n * applies.\n */\n function setWhitelistExpiration(uint256 _expiration) public onlyOwner {\n // allow only if whitelist expiration hasn't yet been set, or if the\n // whitelist expiration hasn't passed yet\n require(\n whitelistExpiration == 0 || whitelistActive(),\n \"an expired whitelist cannot be extended\"\n );\n // prevent possible mistakes in calling this function\n require(\n _expiration >= block.timestamp + 1 days,\n \"whitelist expiration not far enough into the future\"\n );\n emit SetWhitelistExpiration(_expiration);\n whitelistExpiration = _expiration;\n }\n\n //\n // ERC20 transfer functions that have been overridden to enforce the\n // whitelist.\n //\n\n function transfer(address _to, uint256 _value)\n public\n override\n allowedTransfer(msg.sender, _to)\n returns (bool)\n {\n return super.transfer(_to, _value);\n }\n\n function transferFrom(\n address _from,\n address _to,\n uint256 _value\n ) public override allowedTransfer(_from, _to) returns (bool) {\n return super.transferFrom(_from, _to, _value);\n }\n}\n" + }, + "contracts/mocks/MockOGV.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./MintableERC20.sol\";\n\ncontract MockOGV is MintableERC20 {\n constructor() ERC20(\"OGV\", \"OGV\") {}\n}\n" + }, + "contracts/mocks/MockOracle.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"../interfaces/IPriceOracle.sol\";\nimport \"../interfaces/IMinMaxOracle.sol\";\n\n/**\n * Mock of both price Oracle and min max oracles\n */\ncontract MockOracle is IPriceOracle, IMinMaxOracle {\n mapping(bytes32 => uint256) prices;\n mapping(bytes32 => uint256[]) pricesMinMax;\n uint256 ethMin;\n uint256 ethMax;\n\n /**\n * @dev returns the asset price in USD, 6 decimal digits.\n * Compatible with the Open Price Feed.\n */\n function price(string calldata symbol)\n external\n view\n override\n returns (uint256)\n {\n return prices[keccak256(abi.encodePacked(symbol))];\n }\n\n /**\n * @dev sets the price of the asset in USD, 6 decimal digits\n *\n */\n function setPrice(string calldata symbol, uint256 _price) external {\n prices[keccak256(abi.encodePacked(symbol))] = _price;\n }\n\n /**\n * @dev sets the min and max price of ETH in USD, 6 decimal digits\n *\n */\n function setEthPriceMinMax(uint256 _min, uint256 _max) external {\n ethMin = _min;\n ethMax = _max;\n }\n\n /**\n * @dev sets the prices Min Max for a specific symbol in ETH, 8 decimal digits\n *\n */\n function setTokPriceMinMax(\n string calldata symbol,\n uint256 _min,\n uint256 _max\n ) external {\n pricesMinMax[keccak256(abi.encodePacked(symbol))] = [_min, _max];\n }\n\n /**\n * @dev get the price of asset in ETH, 8 decimal digits.\n */\n function priceMin(string calldata symbol)\n external\n view\n override\n returns (uint256)\n {\n uint256[] storage pMinMax = pricesMinMax[\n keccak256(abi.encodePacked(symbol))\n ];\n return (pMinMax[0] * ethMin) / 1e6;\n }\n\n /**\n * @dev get the price of asset in USD, 8 decimal digits.\n * Not needed for now\n */\n function priceMax(string calldata symbol)\n external\n view\n override\n returns (uint256)\n {\n uint256[] storage pMinMax = pricesMinMax[\n keccak256(abi.encodePacked(symbol))\n ];\n return (pMinMax[1] * ethMax) / 1e6;\n }\n}\n" + }, + "contracts/mocks/MockOracleRouter.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"../interfaces/chainlink/AggregatorV3Interface.sol\";\nimport { IOracle } from \"../interfaces/IOracle.sol\";\nimport { Helpers } from \"../utils/Helpers.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { AbstractOracleRouter } from \"../oracle/AbstractOracleRouter.sol\";\n\n// @notice Oracle Router required for testing environment\ncontract MockOracleRouter is AbstractOracleRouter {\n struct FeedMetadata {\n address feedAddress;\n uint256 maxStaleness;\n }\n\n mapping(address => FeedMetadata) public assetToFeedMetadata;\n\n /* @dev Override feed and maxStaleness information for a particular asset\n * @param _asset the asset to override feed for\n * @param _feed new feed\n * @param _maxStaleness new maximum time allowed for feed data to be stale\n */\n function setFeed(\n address _asset,\n address _feed,\n uint256 _maxStaleness\n ) external {\n assetToFeedMetadata[_asset] = FeedMetadata(_feed, _maxStaleness);\n }\n\n /*\n * The dev version of the Oracle doesn't need to gas optimize and cache the decimals\n */\n function getDecimals(address _feed) internal view override returns (uint8) {\n require(_feed != address(0), \"Asset not available\");\n require(_feed != FIXED_PRICE, \"Fixed price feeds not supported\");\n\n return AggregatorV3Interface(_feed).decimals();\n }\n\n /**\n * @dev The price feed contract to use for a particular asset along with\n * maximum data staleness\n * @param asset address of the asset\n * @return feedAddress address of the price feed for the asset\n * @return maxStaleness maximum acceptable data staleness duration\n */\n function feedMetadata(address asset)\n internal\n view\n override\n returns (address feedAddress, uint256 maxStaleness)\n {\n FeedMetadata storage fm = assetToFeedMetadata[asset];\n feedAddress = fm.feedAddress;\n maxStaleness = fm.maxStaleness;\n }\n}\n" + }, + "contracts/mocks/MockOracleRouterNoStale.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"../interfaces/chainlink/AggregatorV3Interface.sol\";\nimport { IOracle } from \"../interfaces/IOracle.sol\";\nimport { Helpers } from \"../utils/Helpers.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { OracleRouter } from \"../oracle/OracleRouter.sol\";\nimport { OETHOracleRouter } from \"../oracle/OETHOracleRouter.sol\";\n\n// @notice Oracle Router used to bypass staleness\ncontract MockOracleRouterNoStale is OracleRouter {\n function feedMetadata(address asset)\n internal\n pure\n virtual\n override\n returns (address feedAddress, uint256 maxStaleness)\n {\n (feedAddress, ) = super.feedMetadata(asset);\n maxStaleness = 365 days;\n }\n}\n\n// @notice Oracle Router used to bypass staleness\ncontract MockOETHOracleRouterNoStale is OETHOracleRouter {\n constructor(address auraPriceFeed) OETHOracleRouter(auraPriceFeed) {}\n\n function feedMetadata(address asset)\n internal\n view\n virtual\n override\n returns (address feedAddress, uint256 maxStaleness)\n {\n (feedAddress, ) = super.feedMetadata(asset);\n maxStaleness = 365 days;\n }\n}\n" + }, + "contracts/mocks/MockOracleWeightedPool.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { Variable, OracleAverageQuery, IOracleWeightedPool } from \"../interfaces/balancer/IOracleWeightedPool.sol\";\n\ncontract MockOracleWeightedPool is IOracleWeightedPool {\n uint256[] public nextResults;\n\n constructor() {\n nextResults = [1 ether, 1 ether];\n }\n\n function getTimeWeightedAverage(OracleAverageQuery[] memory)\n external\n view\n override\n returns (uint256[] memory results)\n {\n return nextResults;\n }\n\n function setNextResults(uint256[] calldata results) external {\n nextResults = results;\n }\n}\n" + }, + "contracts/mocks/MockRebornMinter.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IVault } from \"../interfaces/IVault.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n// solhint-disable-next-line no-console\nimport \"hardhat/console.sol\";\n\ncontract Sanctum {\n address public asset;\n address public vault;\n address public reborner;\n bool public shouldAttack = false;\n uint256 public targetMethod;\n address public ousdContract;\n\n constructor(address _asset, address _vault) {\n asset = _asset;\n vault = _vault;\n }\n\n function deploy(uint256 salt, bytes memory bytecode)\n public\n returns (address addr)\n {\n // solhint-disable-next-line no-inline-assembly\n assembly {\n addr := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n }\n require(addr != address(0), \"Create2: Failed on deploy\");\n }\n\n function computeAddress(uint256 salt, bytes memory bytecode)\n public\n view\n returns (address)\n {\n bytes32 bytecodeHashHash = keccak256(bytecode);\n bytes32 _data = keccak256(\n abi.encodePacked(\n bytes1(0xff),\n address(this),\n salt,\n bytecodeHashHash\n )\n );\n return address(bytes20(_data << 96));\n }\n\n function setShouldAttack(bool _shouldAttack) public {\n shouldAttack = _shouldAttack;\n }\n\n function setTargetMethod(uint256 target) public {\n targetMethod = target;\n }\n\n function setOUSDAddress(address _ousdContract) public {\n ousdContract = _ousdContract;\n }\n}\n\ncontract Reborner {\n Sanctum sanctum;\n bool logging = false;\n\n constructor(address _sanctum) {\n log(\"We are created...\");\n sanctum = Sanctum(_sanctum);\n if (sanctum.shouldAttack()) {\n log(\"We are attacking now...\");\n\n uint256 target = sanctum.targetMethod();\n\n if (target == 1) {\n redeem();\n } else if (target == 2) {\n transfer();\n } else {\n mint();\n }\n }\n }\n\n function mint() public {\n log(\"We are attempting to mint..\");\n address asset = sanctum.asset();\n address vault = sanctum.vault();\n IERC20(asset).approve(vault, 1e18);\n IVault(vault).mint(asset, 1e18, 0);\n log(\"We are now minting..\");\n }\n\n function redeem() public {\n log(\"We are attempting to redeem..\");\n address vault = sanctum.vault();\n IVault(vault).redeem(1e18, 1e18);\n log(\"We are now redeeming..\");\n }\n\n function transfer() public {\n log(\"We are attempting to transfer..\");\n address ousd = sanctum.ousdContract();\n require(IERC20(ousd).transfer(address(1), 1e18), \"transfer failed\");\n log(\"We are now transfering..\");\n }\n\n function bye() public {\n log(\"We are now destructing..\");\n selfdestruct(payable(msg.sender));\n }\n\n function log(string memory message) internal view {\n if (logging) {\n // solhint-disable-next-line no-console\n console.log(message);\n }\n }\n}\n" + }, + "contracts/mocks/MockRETH.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./MintableERC20.sol\";\nimport \"../interfaces/IGetExchangeRateToken.sol\";\n\ncontract MockRETH is MintableERC20, IGetExchangeRateToken {\n uint256 private exchangeRate = 12e17;\n\n constructor() ERC20(\"Rocket Pool ETH\", \"rETH\") {}\n\n function getExchangeRate() external view override returns (uint256) {\n return exchangeRate;\n }\n\n function setExchangeRate(uint256 _rate) external {\n exchangeRate = _rate;\n }\n}\n" + }, + "contracts/mocks/MocksfrxETH.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./MintableERC20.sol\";\n\ncontract MocksfrxETH is MintableERC20 {\n address public frxETH;\n\n constructor(address _frxETH) ERC20(\"sfrxETH\", \"sfrxETH\") {\n frxETH = _frxETH;\n }\n\n function setMockfrxETHAddress(address _frxETH) external {\n frxETH = _frxETH;\n }\n\n function deposit(uint256 assets, address receiver)\n external\n returns (uint256 shares)\n {\n ERC20(frxETH).transferFrom(msg.sender, address(this), assets);\n\n _mint(receiver, assets);\n\n return assets;\n }\n\n function maxWithdraw(address owner) external view returns (uint256) {\n return balanceOf(owner);\n }\n\n function setMaxWithdrawableBalance(address owner, uint256 balance)\n external\n {\n uint256 currentBalance = balanceOf(owner);\n if (currentBalance > balance) {\n _burn(owner, currentBalance - balance);\n } else if (balance > currentBalance) {\n _mint(owner, balance - currentBalance);\n }\n }\n\n function redeem(\n uint256 shares,\n address receiver,\n address owner\n ) external returns (uint256 assets) {\n _burn(owner, shares);\n\n ERC20(frxETH).transfer(receiver, shares);\n\n assets = shares;\n }\n\n function withdraw(\n uint256 assets,\n address receiver,\n address owner\n ) external returns (uint256 shares) {\n _burn(owner, assets);\n\n ERC20(frxETH).transfer(receiver, assets);\n\n shares = assets;\n }\n\n function submitAndDeposit(address recipient)\n external\n payable\n returns (uint256 shares)\n {\n _mint(recipient, msg.value);\n shares = msg.value;\n }\n}\n" + }, + "contracts/mocks/MockSSV.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./MintableERC20.sol\";\n\ncontract MockSSV is MintableERC20 {\n constructor() ERC20(\"SSV Token\", \"SSV\") {}\n}\n" + }, + "contracts/mocks/MockSSVNetwork.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { Cluster } from \"./../interfaces/ISSVNetwork.sol\";\n\ncontract MockSSVNetwork {\n function registerValidator(\n bytes calldata publicKey,\n uint64[] calldata operatorIds,\n bytes calldata sharesData,\n uint256 amount,\n Cluster memory cluster\n ) external {}\n\n function bulkRegisterValidator(\n bytes[] calldata publicKeys,\n uint64[] calldata operatorIds,\n bytes[] calldata sharesData,\n uint256 amount,\n Cluster memory cluster\n ) external {}\n\n function exitValidator(\n bytes calldata publicKey,\n uint64[] calldata operatorIds\n ) external {}\n\n function removeValidator(\n bytes calldata publicKey,\n uint64[] calldata operatorIds,\n Cluster memory cluster\n ) external {}\n\n function deposit(\n address clusterOwner,\n uint64[] calldata operatorIds,\n uint256 amount,\n Cluster memory cluster\n ) external {}\n}\n" + }, + "contracts/mocks/MockstETH.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./MintableERC20.sol\";\n\ncontract MockstETH is MintableERC20 {\n constructor() ERC20(\"stETH\", \"stETH\") {}\n}\n" + }, + "contracts/mocks/MockStkAave.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport \"./MintableERC20.sol\";\n\ncontract MockStkAave is MintableERC20 {\n uint256 public COOLDOWN_SECONDS = 864000;\n uint256 public UNSTAKE_WINDOW = 172800;\n address public STAKED_TOKEN;\n\n mapping(address => uint256) public stakerRewardsToClaim;\n mapping(address => uint256) public stakersCooldowns;\n\n using SafeERC20 for IERC20;\n\n constructor(address _stakedToken) ERC20(\"Staked Aave\", \"stkAAVE\") {\n STAKED_TOKEN = _stakedToken;\n }\n\n function decimals() public pure override returns (uint8) {\n return 18;\n }\n\n function setStakedToken(address _stakedToken) external {\n STAKED_TOKEN = _stakedToken;\n }\n\n /**\n * @dev Redeems staked tokens, and stop earning rewards\n * @param to Address to redeem to\n * @param amount Amount to redeem\n **/\n function redeem(address to, uint256 amount) external {\n uint256 cooldownStartTimestamp = stakersCooldowns[msg.sender];\n uint256 windowStart = cooldownStartTimestamp + COOLDOWN_SECONDS;\n require(amount != 0, \"INVALID_ZERO_AMOUNT\");\n require(block.timestamp > windowStart, \"INSUFFICIENT_COOLDOWN\");\n require(\n block.timestamp - windowStart <= UNSTAKE_WINDOW,\n \"UNSTAKE_WINDOW_FINISHED\"\n );\n uint256 balanceOfMessageSender = balanceOf(msg.sender);\n uint256 amountToRedeem = (amount > balanceOfMessageSender)\n ? balanceOfMessageSender\n : amount;\n\n stakersCooldowns[msg.sender] = 0;\n _burn(msg.sender, amountToRedeem);\n IERC20(STAKED_TOKEN).safeTransfer(to, amountToRedeem);\n }\n\n /**\n * @dev Activates the cooldown period to unstake\n * - It can't be called if the user is not staking\n **/\n function cooldown() external {\n require(balanceOf(msg.sender) != 0, \"INVALID_BALANCE_ON_COOLDOWN\");\n stakersCooldowns[msg.sender] = block.timestamp;\n }\n\n /**\n * @dev Test helper function to allow changing the cooldown\n **/\n function setCooldown(address account, uint256 _cooldown) external {\n stakersCooldowns[account] = _cooldown;\n }\n}\n" + }, + "contracts/mocks/MockStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\ncontract MockStrategy {\n address[] public assets;\n\n address public withdrawAllAsset;\n address public withdrawAllRecipient;\n\n constructor() {}\n\n function deposit(address asset, uint256 amount) external {}\n\n function depositAll() external {}\n\n function withdraw(\n address recipient,\n address asset,\n uint256 amount\n ) external {\n IERC20(asset).transfer(recipient, amount);\n }\n\n function withdrawAll() external {\n IERC20(withdrawAllAsset).transfer(\n withdrawAllRecipient,\n IERC20(withdrawAllAsset).balanceOf(address(this))\n );\n }\n\n function checkBalance(address asset)\n external\n view\n returns (uint256 balance)\n {\n balance = IERC20(asset).balanceOf(address(this));\n }\n\n function supportsAsset(address) external view returns (bool) {\n return true;\n }\n\n function collectRewardTokens() external {}\n\n function getRewardTokenAddresses()\n external\n view\n returns (address[] memory)\n {\n return new address[](0);\n }\n\n function setWithdrawAll(address asset, address recipient) external {\n withdrawAllAsset = asset;\n withdrawAllRecipient = recipient;\n }\n}\n" + }, + "contracts/mocks/MockSwapper.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IMintableERC20 } from \"./MintableERC20.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\ncontract MockSwapper {\n uint256 public nextOutAmount;\n\n function swap(\n // solhint-disable-next-line no-unused-vars\n address _fromAsset,\n address _toAsset,\n // solhint-disable-next-line no-unused-vars\n uint256 _fromAssetAmount,\n uint256 _minToAssetAmount,\n // solhint-disable-next-line no-unused-vars\n bytes calldata _data\n ) external returns (uint256 toAssetAmount) {\n toAssetAmount = (nextOutAmount > 0) ? nextOutAmount : _minToAssetAmount;\n nextOutAmount = 0;\n IMintableERC20(_toAsset).mint(toAssetAmount);\n IERC20(_toAsset).transfer(msg.sender, toAssetAmount);\n }\n\n function setNextOutAmount(uint256 _nextOutAmount) public {\n nextOutAmount = _nextOutAmount;\n }\n}\n" + }, + "contracts/mocks/MockTUSD.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./MintableERC20.sol\";\n\ncontract MockTUSD is MintableERC20 {\n constructor() ERC20(\"TrueUSD\", \"TUSD\") {}\n\n function decimals() public pure override returns (uint8) {\n return 18;\n }\n}\n" + }, + "contracts/mocks/MockUniswapPair.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IUniswapV2Pair } from \"../interfaces/uniswap/IUniswapV2Pair.sol\";\n\ncontract MockUniswapPair is IUniswapV2Pair {\n address tok0;\n address tok1;\n uint112 reserve0;\n uint112 reserve1;\n uint256 blockTimestampLast;\n\n bool public hasSynced = false;\n\n constructor(\n address _token0,\n address _token1,\n uint112 _reserve0,\n uint112 _reserve1\n ) {\n tok0 = _token0;\n tok1 = _token1;\n reserve0 = _reserve0;\n reserve1 = _reserve1;\n blockTimestampLast = block.timestamp;\n }\n\n function token0() external view override returns (address) {\n return tok0;\n }\n\n function token1() external view override returns (address) {\n return tok1;\n }\n\n function getReserves()\n external\n view\n override\n returns (\n uint112,\n uint112,\n uint32\n )\n {\n return (reserve0, reserve1, uint32(blockTimestampLast));\n }\n\n function setReserves(uint112 _reserve0, uint112 _reserve1) public {\n reserve0 = _reserve0;\n reserve1 = _reserve1;\n blockTimestampLast = block.timestamp;\n }\n\n // CAUTION This will not work if you setReserves multiple times over\n // multiple different blocks because then it wouldn't be a continuous\n // reserve factor over that blockTimestamp, this assumes an even reserve\n // ratio all the way through\n function price0CumulativeLast() external view override returns (uint256) {\n return\n uint256(FixedPoint.fraction(reserve1, reserve0)._x) *\n blockTimestampLast;\n }\n\n function price1CumulativeLast() external view override returns (uint256) {\n return\n uint256(FixedPoint.fraction(reserve0, reserve1)._x) *\n blockTimestampLast;\n }\n\n function sync() external override {\n hasSynced = true;\n }\n\n function checkHasSynced() external view {\n require(hasSynced, \"Not synced\");\n }\n}\n\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\nlibrary FixedPoint {\n // range: [0, 2**112 - 1]\n // resolution: 1 / 2**112\n struct uq112x112 {\n uint224 _x;\n }\n\n // returns a uq112x112 which represents the ratio of the numerator to the denominator\n // equivalent to encode(numerator).div(denominator)\n function fraction(uint112 numerator, uint112 denominator)\n internal\n pure\n returns (uq112x112 memory)\n {\n require(denominator > 0, \"FixedPoint: DIV_BY_ZERO\");\n return uq112x112((uint224(numerator) << 112) / denominator);\n }\n}\n" + }, + "contracts/mocks/MockUniswapRouter.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { MintableERC20 } from \"./MintableERC20.sol\";\nimport { IUniswapV2Router } from \"../interfaces/uniswap/IUniswapV2Router02.sol\";\nimport { Helpers } from \"../utils/Helpers.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\n\ncontract MockUniswapRouter is IUniswapV2Router {\n using StableMath for uint256;\n\n mapping(address => address) public pairMaps;\n uint256 public slippage = 1 ether;\n\n function initialize(\n address[] calldata _0tokens,\n address[] calldata _1tokens\n ) public {\n require(\n _0tokens.length == _1tokens.length,\n \"Mock token pairs should be of the same length\"\n );\n for (uint256 i = 0; i < _0tokens.length; i++) {\n pairMaps[_0tokens[i]] = _1tokens[i];\n }\n }\n\n function setSlippage(uint256 _slippage) external {\n slippage = _slippage;\n }\n\n function swapExactTokensForTokens(\n uint256 amountIn,\n uint256 amountOutMin,\n address[] calldata path,\n address to,\n // solhint-disable-next-line no-unused-vars\n uint256\n ) external override returns (uint256[] memory amountsOut) {\n address tok0 = path[0];\n address tok1 = path[path.length - 1];\n\n uint256 amountOut = (amountOutMin * slippage) / 1 ether;\n require(amountOut >= amountOutMin, \"Slippage error\");\n\n IERC20(tok0).transferFrom(msg.sender, address(this), amountIn);\n MintableERC20(tok1).mintTo(to, amountOut);\n\n amountsOut = new uint256[](path.length);\n amountsOut[path.length - 1] = amountOut;\n }\n\n struct ExactInputParams {\n bytes path;\n address recipient;\n uint256 deadline;\n uint256 amountIn;\n uint256 amountOutMinimum;\n }\n\n function exactInput(ExactInputParams calldata params)\n external\n payable\n returns (uint256 amountOut)\n {\n (address tok0, address tok1) = _getFirstAndLastToken(params.path);\n\n amountOut = (params.amountOutMinimum * slippage) / 1 ether;\n\n IERC20(tok0).transferFrom(msg.sender, address(this), params.amountIn);\n MintableERC20(tok1).mintTo(params.recipient, amountOut);\n\n require(\n amountOut >= params.amountOutMinimum,\n \"UniswapMock: amountOut less than amountOutMinimum\"\n );\n return amountOut;\n }\n\n function addLiquidity(\n address tokenA,\n address tokenB,\n uint256 amountADesired,\n uint256 amountBDesired,\n uint256 amountAMin,\n uint256 amountBMin,\n address to,\n uint256 deadline\n )\n external\n override\n returns (\n uint256 amountA,\n uint256 amountB,\n uint256 liquidity\n )\n {\n // this is needed to make this contract whole else it'd be just virtual\n }\n\n function WETH() external pure override returns (address) {\n return address(0);\n }\n\n // Universal router mock\n function execute(\n bytes calldata,\n bytes[] calldata inputs,\n uint256\n ) external payable {\n uint256 inLen = inputs.length;\n for (uint256 i = 0; i < inLen; ++i) {\n (\n address recipient,\n ,\n uint256 amountOutMinimum,\n bytes memory path,\n\n ) = abi.decode(inputs[i], (address, uint256, uint256, bytes, bool));\n\n (address token0, address token1) = _getFirstAndLastToken(path);\n\n amountOutMinimum = amountOutMinimum.scaleBy(\n Helpers.getDecimals(token0),\n Helpers.getDecimals(token1)\n );\n\n MintableERC20(token1).mintTo(recipient, amountOutMinimum);\n }\n }\n\n function _getFirstAndLastToken(bytes memory path)\n internal\n view\n returns (address token0, address token1)\n {\n bytes memory tok0Bytes = new bytes(20);\n for (uint256 j = 0; j < 20; ++j) {\n tok0Bytes[j] = path[j];\n }\n token0 = address(bytes20(tok0Bytes));\n\n if (pairMaps[token0] != address(0)) {\n token0 = pairMaps[token0];\n }\n\n bytes memory tok1Bytes = new bytes(20);\n uint256 tok1Offset = path.length - 20;\n for (uint256 j = 0; j < 20; ++j) {\n tok1Bytes[j] = path[j + tok1Offset];\n }\n token1 = address(bytes20(tok1Bytes));\n\n if (pairMaps[token1] != address(0)) {\n token1 = pairMaps[token1];\n }\n }\n}\n" + }, + "contracts/mocks/MockUSDC.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./MintableERC20.sol\";\n\ncontract MockUSDC is MintableERC20 {\n constructor() ERC20(\"USDC Coin\", \"USDC\") {}\n\n function decimals() public pure override returns (uint8) {\n return 6;\n }\n}\n" + }, + "contracts/mocks/MockUSDT.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./MintableERC20.sol\";\n\ncontract MockUSDT is MintableERC20 {\n constructor() ERC20(\"USDT Coin\", \"USDT\") {}\n\n function decimals() public pure override returns (uint8) {\n return 6;\n }\n}\n" + }, + "contracts/mocks/MockVault.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { VaultCore } from \"../vault/VaultCore.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\nimport { VaultInitializer } from \"../vault/VaultInitializer.sol\";\nimport \"../utils/Helpers.sol\";\n\ncontract MockVault is VaultCore {\n using StableMath for uint256;\n\n uint256 storedTotalValue;\n\n function setTotalValue(uint256 _value) public {\n storedTotalValue = _value;\n }\n\n function totalValue() external view override returns (uint256) {\n return storedTotalValue;\n }\n\n function _totalValue() internal view override returns (uint256) {\n return storedTotalValue;\n }\n\n function _checkBalance(address _asset)\n internal\n view\n override\n returns (uint256 balance)\n {\n // Avoids rounding errors by returning the total value\n // in a single currency\n if (allAssets[0] == _asset) {\n uint256 decimals = Helpers.getDecimals(_asset);\n return storedTotalValue.scaleBy(decimals, 18);\n } else {\n return 0;\n }\n }\n\n function setMaxSupplyDiff(uint256 _maxSupplyDiff) external onlyGovernor {\n maxSupplyDiff = _maxSupplyDiff;\n }\n}\n" + }, + "contracts/mocks/MockWETH.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./MintableERC20.sol\";\n\ncontract MockWETH is MintableERC20 {\n constructor() ERC20(\"WETH\", \"WETH\") {}\n\n function deposit() external payable {\n _mint(msg.sender, msg.value);\n }\n\n function withdraw(uint256 wad) external {\n _burn(msg.sender, wad);\n payable(msg.sender).transfer(wad);\n }\n}\n" + }, + "contracts/oracle/AbstractOracleRouter.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"../interfaces/chainlink/AggregatorV3Interface.sol\";\nimport { IOracle } from \"../interfaces/IOracle.sol\";\nimport { Helpers } from \"../utils/Helpers.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\n\n// @notice Abstract functionality that is shared between various Oracle Routers\nabstract contract AbstractOracleRouter is IOracle {\n using StableMath for uint256;\n using SafeCast for int256;\n\n uint256 internal constant MIN_DRIFT = 0.7e18;\n uint256 internal constant MAX_DRIFT = 1.3e18;\n address internal constant FIXED_PRICE =\n 0x0000000000000000000000000000000000000001;\n // Maximum allowed staleness buffer above normal Oracle maximum staleness\n uint256 internal constant STALENESS_BUFFER = 1 days;\n mapping(address => uint8) internal decimalsCache;\n\n /**\n * @dev The price feed contract to use for a particular asset along with\n * maximum data staleness\n * @param asset address of the asset\n * @return feedAddress address of the price feed for the asset\n * @return maxStaleness maximum acceptable data staleness duration\n */\n function feedMetadata(address asset)\n internal\n view\n virtual\n returns (address feedAddress, uint256 maxStaleness);\n\n /**\n * @notice Returns the total price in 18 digit unit for a given asset.\n * @param asset address of the asset\n * @return uint256 unit price for 1 asset unit, in 18 decimal fixed\n */\n function price(address asset)\n external\n view\n virtual\n override\n returns (uint256)\n {\n (address _feed, uint256 maxStaleness) = feedMetadata(asset);\n require(_feed != address(0), \"Asset not available\");\n require(_feed != FIXED_PRICE, \"Fixed price feeds not supported\");\n\n // slither-disable-next-line unused-return\n (, int256 _iprice, , uint256 updatedAt, ) = AggregatorV3Interface(_feed)\n .latestRoundData();\n\n require(\n updatedAt + maxStaleness >= block.timestamp,\n \"Oracle price too old\"\n );\n\n uint8 decimals = getDecimals(_feed);\n\n uint256 _price = _iprice.toUint256().scaleBy(18, decimals);\n if (shouldBePegged(asset)) {\n require(_price <= MAX_DRIFT, \"Oracle: Price exceeds max\");\n require(_price >= MIN_DRIFT, \"Oracle: Price under min\");\n }\n return _price;\n }\n\n function getDecimals(address _feed) internal view virtual returns (uint8) {\n uint8 decimals = decimalsCache[_feed];\n require(decimals > 0, \"Oracle: Decimals not cached\");\n return decimals;\n }\n\n /**\n * @notice Before an asset/feed price is fetches for the first time the\n * decimals need to be cached. This is a gas optimization\n * @param asset address of the asset\n * @return uint8 corresponding asset decimals\n */\n function cacheDecimals(address asset) external returns (uint8) {\n (address _feed, ) = feedMetadata(asset);\n require(_feed != address(0), \"Asset not available\");\n require(_feed != FIXED_PRICE, \"Fixed price feeds not supported\");\n\n uint8 decimals = AggregatorV3Interface(_feed).decimals();\n decimalsCache[_feed] = decimals;\n return decimals;\n }\n\n function shouldBePegged(address _asset) internal view returns (bool) {\n string memory symbol = Helpers.getSymbol(_asset);\n bytes32 symbolHash = keccak256(abi.encodePacked(symbol));\n return\n symbolHash == keccak256(abi.encodePacked(\"DAI\")) ||\n symbolHash == keccak256(abi.encodePacked(\"USDC\")) ||\n symbolHash == keccak256(abi.encodePacked(\"USDT\"));\n }\n}\n" + }, + "contracts/oracle/AuraWETHPriceFeed.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { Variable, OracleAverageQuery, IOracleWeightedPool } from \"../interfaces/balancer/IOracleWeightedPool.sol\";\nimport { Strategizable } from \"../governance/Strategizable.sol\";\nimport { AggregatorV3Interface } from \"../interfaces/chainlink/AggregatorV3Interface.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\n\ncontract AuraWETHPriceFeed is AggregatorV3Interface, Strategizable {\n using SafeCast for uint256;\n using SafeCast for int256;\n\n event PriceFeedPaused();\n event PriceFeedUnpaused();\n event ToleranceChanged(uint256 oldTolerance, uint256 newTolerance);\n\n error PriceFeedPausedError();\n error PriceFeedUnpausedError();\n error InvalidToleranceBps();\n error HighPriceVolatility(uint256 deviation);\n\n bool public paused;\n uint256 public tolerance = 0.02 ether; // 2% by default\n\n // Fields to make it compatible with `AggregatorV3Interface`\n uint8 public constant override decimals = 18;\n string public constant override description = \"\";\n uint256 public constant override version = 1;\n\n IOracleWeightedPool public immutable auraOracleWeightedPool;\n\n constructor(address _auraOracleWeightedPool, address _governor) {\n _setGovernor(_governor);\n auraOracleWeightedPool = IOracleWeightedPool(_auraOracleWeightedPool);\n }\n\n /**\n * @dev Queries the OracleWeightedPool for TWAP of two intervals\n * (1h data from 5m ago and the recent 5m data) and ensures that\n * the price hasn't deviated too much and returns the most recent\n * TWAP price.\n *\n * @return price The price scaled to 18 decimals\n **/\n function price() external view returns (int256) {\n return _price();\n }\n\n function _price() internal view returns (int256) {\n if (paused) {\n revert PriceFeedPausedError();\n }\n OracleAverageQuery[] memory queries = new OracleAverageQuery[](2);\n\n queries[0] = OracleAverageQuery({\n variable: Variable.PAIR_PRICE,\n secs: 3600, // Get 1h data\n ago: 300 // From 5min ago\n });\n queries[1] = OracleAverageQuery({\n variable: Variable.PAIR_PRICE,\n secs: 300, // Get 5min data\n ago: 0 // From now\n });\n\n uint256[] memory prices = auraOracleWeightedPool.getTimeWeightedAverage(\n queries\n );\n int256 price_1h = prices[0].toInt256();\n int256 price_5m = prices[1].toInt256();\n\n int256 diff = (1e18 * (price_1h - price_5m)) /\n ((price_1h + price_5m) / 2);\n uint256 absDiff = diff >= 0 ? diff.toUint256() : (-diff).toUint256();\n\n // Ensure the price hasn't moved too much (2% tolerance)\n // between now and the past hour\n if (absDiff > tolerance) {\n revert HighPriceVolatility(absDiff);\n }\n\n // Return the recent price\n return price_5m;\n }\n\n /**\n * Pauses the price feed. Callable by Strategist as well.\n **/\n function pause() external onlyGovernorOrStrategist {\n if (paused) {\n revert PriceFeedPausedError();\n }\n paused = true;\n emit PriceFeedPaused();\n }\n\n /**\n * Unpauses the price feed. Only Governor can call it\n **/\n function unpause() external onlyGovernor {\n if (!paused) {\n revert PriceFeedUnpausedError();\n }\n paused = false;\n emit PriceFeedUnpaused();\n }\n\n /**\n * Set the max amount of tolerance acceptable between\n * two different price points.\n *\n * @param _tolerance New tolerance value\n **/\n function setTolerance(uint256 _tolerance) external onlyGovernor {\n if (_tolerance > 0.1 ether) {\n revert InvalidToleranceBps();\n }\n emit ToleranceChanged(tolerance, _tolerance);\n tolerance = _tolerance;\n }\n\n /**\n * @dev This function exists to make the contract compatible\n * with AggregatorV3Interface (which OETHOracleRouter uses to\n * get the price).\n *\n * The `answer` returned by this is same as what `price()` would return.\n *\n * It doesn't return any data about rounds (since those doesn't exist).\n **/\n function latestRoundData()\n external\n view\n override\n returns (\n uint80,\n int256 answer,\n uint256,\n uint256 updatedAt,\n uint80\n )\n {\n answer = _price();\n updatedAt = block.timestamp;\n }\n\n /**\n * @dev This function exists to make the contract compatible\n * with AggregatorV3Interface.\n *\n * Always reverts since there're no round data in this contract.\n **/\n function getRoundData(uint80)\n external\n pure\n override\n returns (\n uint80,\n int256,\n uint256,\n uint256,\n uint80\n )\n {\n revert(\"No data present\");\n }\n}\n" + }, + "contracts/oracle/OETHBaseOracleRouter.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"../interfaces/chainlink/AggregatorV3Interface.sol\";\nimport { AbstractOracleRouter } from \"./AbstractOracleRouter.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\n\n// @notice Oracle Router (for OETH on Base) that denominates all prices in ETH\ncontract OETHBaseOracleRouter is AbstractOracleRouter {\n using StableMath for uint256;\n\n address constant WETH = 0x4200000000000000000000000000000000000006;\n address constant WOETH = 0xD8724322f44E5c58D7A815F542036fb17DbbF839;\n address constant WOETH_CHAINLINK_FEED =\n 0xe96EB1EDa83d18cbac224233319FA5071464e1b9;\n\n constructor() {}\n\n /**\n * @notice Returns the total price in 18 digit units for a given asset.\n * This implementation does not (!) do range checks as the\n * parent OracleRouter does.\n * @param asset address of the asset\n * @return uint256 unit price for 1 asset unit, in 18 decimal fixed\n */\n function price(address asset)\n external\n view\n virtual\n override\n returns (uint256)\n {\n (address _feed, uint256 maxStaleness) = feedMetadata(asset);\n if (_feed == FIXED_PRICE) {\n return 1e18;\n }\n require(_feed != address(0), \"Asset not available\");\n\n // slither-disable-next-line unused-return\n (, int256 _iprice, , uint256 updatedAt, ) = AggregatorV3Interface(_feed)\n .latestRoundData();\n\n require(\n updatedAt + maxStaleness >= block.timestamp,\n \"Oracle price too old\"\n );\n\n uint8 decimals = getDecimals(_feed);\n uint256 _price = uint256(_iprice).scaleBy(18, decimals);\n return _price;\n }\n\n /**\n * @dev The price feed contract to use for a particular asset along with\n * maximum data staleness\n * @param asset address of the asset\n * @return feedAddress address of the price feed for the asset\n * @return maxStaleness maximum acceptable data staleness duration\n */\n function feedMetadata(address asset)\n internal\n view\n virtual\n override\n returns (address feedAddress, uint256 maxStaleness)\n {\n if (asset == WETH) {\n // FIXED_PRICE: WETH/ETH\n feedAddress = FIXED_PRICE;\n maxStaleness = 0;\n } else if (asset == WOETH) {\n // Chainlink: https://data.chain.link/feeds/base/base/woeth-oeth-exchange-rate\n // Bridged wOETH/OETH\n feedAddress = WOETH_CHAINLINK_FEED;\n maxStaleness = 1 days + STALENESS_BUFFER;\n } else {\n revert(\"Asset not available\");\n }\n }\n}\n" + }, + "contracts/oracle/OETHFixedOracle.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { OETHOracleRouter } from \"./OETHOracleRouter.sol\";\n\n// @notice Oracle Router that returns 1e18 for all prices\n// used solely for deployment to testnets\ncontract OETHFixedOracle is OETHOracleRouter {\n constructor(address _auraPriceFeed) OETHOracleRouter(_auraPriceFeed) {}\n\n /**\n * @dev The price feed contract to use for a particular asset along with\n * maximum data staleness\n * @param asset address of the asset\n * @return feedAddress address of the price feed for the asset\n * @return maxStaleness maximum acceptable data staleness duration\n */\n // solhint-disable-next-line no-unused-vars\n function feedMetadata(address asset)\n internal\n view\n virtual\n override\n returns (address feedAddress, uint256 maxStaleness)\n {\n // fixes price for all of the assets\n feedAddress = FIXED_PRICE;\n maxStaleness = 0;\n }\n}\n" + }, + "contracts/oracle/OETHOracleRouter.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"../interfaces/chainlink/AggregatorV3Interface.sol\";\nimport { AbstractOracleRouter } from \"./AbstractOracleRouter.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\n\n// @notice Oracle Router that denominates all prices in ETH\ncontract OETHOracleRouter is AbstractOracleRouter {\n using StableMath for uint256;\n\n address public immutable auraPriceFeed;\n\n constructor(address _auraPriceFeed) {\n auraPriceFeed = _auraPriceFeed;\n }\n\n /**\n * @notice Returns the total price in 18 digit units for a given asset.\n * This implementation does not (!) do range checks as the\n * parent OracleRouter does.\n * @param asset address of the asset\n * @return uint256 unit price for 1 asset unit, in 18 decimal fixed\n */\n function price(address asset)\n external\n view\n virtual\n override\n returns (uint256)\n {\n (address _feed, uint256 maxStaleness) = feedMetadata(asset);\n if (_feed == FIXED_PRICE) {\n return 1e18;\n }\n require(_feed != address(0), \"Asset not available\");\n\n // slither-disable-next-line unused-return\n (, int256 _iprice, , uint256 updatedAt, ) = AggregatorV3Interface(_feed)\n .latestRoundData();\n\n require(\n updatedAt + maxStaleness >= block.timestamp,\n \"Oracle price too old\"\n );\n\n uint8 decimals = getDecimals(_feed);\n uint256 _price = uint256(_iprice).scaleBy(18, decimals);\n return _price;\n }\n\n /**\n * @dev The price feed contract to use for a particular asset along with\n * maximum data staleness\n * @param asset address of the asset\n * @return feedAddress address of the price feed for the asset\n * @return maxStaleness maximum acceptable data staleness duration\n */\n function feedMetadata(address asset)\n internal\n view\n virtual\n override\n returns (address feedAddress, uint256 maxStaleness)\n {\n if (asset == 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) {\n // FIXED_PRICE: WETH/ETH\n feedAddress = FIXED_PRICE;\n maxStaleness = 0;\n } else if (asset == 0x5E8422345238F34275888049021821E8E08CAa1f) {\n // frxETH/ETH\n feedAddress = 0xC58F3385FBc1C8AD2c0C9a061D7c13b141D7A5Df;\n maxStaleness = 18 hours + STALENESS_BUFFER;\n } else if (asset == 0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84) {\n // https://data.chain.link/ethereum/mainnet/crypto-eth/steth-eth\n // Chainlink: stETH/ETH\n feedAddress = 0x86392dC19c0b719886221c78AB11eb8Cf5c52812;\n maxStaleness = 1 days + STALENESS_BUFFER;\n } else if (asset == 0xae78736Cd615f374D3085123A210448E74Fc6393) {\n // https://data.chain.link/ethereum/mainnet/crypto-eth/reth-eth\n // Chainlink: rETH/ETH\n feedAddress = 0x536218f9E9Eb48863970252233c8F271f554C2d0;\n maxStaleness = 1 days + STALENESS_BUFFER;\n } else if (asset == 0xD533a949740bb3306d119CC777fa900bA034cd52) {\n // https://data.chain.link/ethereum/mainnet/crypto-eth/crv-eth\n // Chainlink: CRV/ETH\n feedAddress = 0x8a12Be339B0cD1829b91Adc01977caa5E9ac121e;\n maxStaleness = 1 days + STALENESS_BUFFER;\n } else if (asset == 0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B) {\n // https://data.chain.link/ethereum/mainnet/crypto-eth/cvx-eth\n // Chainlink: CVX/ETH\n feedAddress = 0xC9CbF687f43176B302F03f5e58470b77D07c61c6;\n maxStaleness = 1 days + STALENESS_BUFFER;\n } else if (asset == 0xBe9895146f7AF43049ca1c1AE358B0541Ea49704) {\n // https://data.chain.link/ethereum/mainnet/crypto-eth/cbeth-eth\n // Chainlink: cbETH/ETH\n feedAddress = 0xF017fcB346A1885194689bA23Eff2fE6fA5C483b;\n maxStaleness = 1 days + STALENESS_BUFFER;\n } else if (asset == 0xba100000625a3754423978a60c9317c58a424e3D) {\n // https://data.chain.link/ethereum/mainnet/crypto-eth/bal-eth\n // Chainlink: BAL/ETH\n feedAddress = 0xC1438AA3823A6Ba0C159CfA8D98dF5A994bA120b;\n maxStaleness = 1 days + STALENESS_BUFFER;\n } else if (asset == 0xC0c293ce456fF0ED870ADd98a0828Dd4d2903DBF) {\n // AURA/ETH\n feedAddress = auraPriceFeed;\n maxStaleness = 0;\n } else {\n revert(\"Asset not available\");\n }\n }\n}\n" + }, + "contracts/oracle/OracleRouter.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"../interfaces/chainlink/AggregatorV3Interface.sol\";\nimport { AbstractOracleRouter } from \"./AbstractOracleRouter.sol\";\n\n// @notice Oracle Router that denominates all prices in USD\ncontract OracleRouter is AbstractOracleRouter {\n /**\n * @dev The price feed contract to use for a particular asset along with\n * maximum data staleness\n * @param asset address of the asset\n * @return feedAddress address of the price feed for the asset\n * @return maxStaleness maximum acceptable data staleness duration\n */\n function feedMetadata(address asset)\n internal\n pure\n virtual\n override\n returns (address feedAddress, uint256 maxStaleness)\n {\n /* + STALENESS_BUFFER is added in case Oracle for some reason doesn't\n * update on heartbeat and we add a generous buffer amount.\n */\n if (asset == 0x6B175474E89094C44Da98b954EedeAC495271d0F) {\n // https://data.chain.link/ethereum/mainnet/stablecoins/dai-usd\n // Chainlink: DAI/USD\n feedAddress = 0xAed0c38402a5d19df6E4c03F4E2DceD6e29c1ee9;\n maxStaleness = 1 hours + STALENESS_BUFFER;\n } else if (asset == 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48) {\n // https://data.chain.link/ethereum/mainnet/stablecoins/usdc-usd\n // Chainlink: USDC/USD\n feedAddress = 0x8fFfFfd4AfB6115b954Bd326cbe7B4BA576818f6;\n maxStaleness = 1 days + STALENESS_BUFFER;\n } else if (asset == 0xdAC17F958D2ee523a2206206994597C13D831ec7) {\n // https://data.chain.link/ethereum/mainnet/stablecoins/usdt-usd\n // Chainlink: USDT/USD\n feedAddress = 0x3E7d1eAB13ad0104d2750B8863b489D65364e32D;\n maxStaleness = 1 days + STALENESS_BUFFER;\n } else if (asset == 0xc00e94Cb662C3520282E6f5717214004A7f26888) {\n // https://data.chain.link/ethereum/mainnet/crypto-usd/comp-usd\n // Chainlink: COMP/USD\n feedAddress = 0xdbd020CAeF83eFd542f4De03e3cF0C28A4428bd5;\n maxStaleness = 1 hours + STALENESS_BUFFER;\n } else if (asset == 0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9) {\n // https://data.chain.link/ethereum/mainnet/crypto-usd/aave-usd\n // Chainlink: AAVE/USD\n feedAddress = 0x547a514d5e3769680Ce22B2361c10Ea13619e8a9;\n maxStaleness = 1 hours + STALENESS_BUFFER;\n } else if (asset == 0xD533a949740bb3306d119CC777fa900bA034cd52) {\n // https://data.chain.link/ethereum/mainnet/crypto-usd/crv-usd\n // Chainlink: CRV/USD\n feedAddress = 0xCd627aA160A6fA45Eb793D19Ef54f5062F20f33f;\n maxStaleness = 1 days + STALENESS_BUFFER;\n } else if (asset == 0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B) {\n // Chainlink: CVX/USD\n feedAddress = 0xd962fC30A72A84cE50161031391756Bf2876Af5D;\n maxStaleness = 1 days + STALENESS_BUFFER;\n } else {\n revert(\"Asset not available\");\n }\n }\n}\n" + }, + "contracts/proxies/InitializeGovernedUpgradeabilityProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport { Governable } from \"../governance/Governable.sol\";\n\n/**\n * @title BaseGovernedUpgradeabilityProxy\n * @dev This contract combines an upgradeability proxy with our governor system.\n * It is based on an older version of OpenZeppelins BaseUpgradeabilityProxy\n * with Solidity ^0.8.0.\n * @author Origin Protocol Inc\n */\ncontract InitializeGovernedUpgradeabilityProxy is Governable {\n /**\n * @dev Emitted when the implementation is upgraded.\n * @param implementation Address of the new implementation.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Contract initializer with Governor enforcement\n * @param _logic Address of the initial implementation.\n * @param _initGovernor Address of the initial Governor.\n * @param _data Data to send as msg.data to the implementation to initialize\n * the proxied contract.\n * It should include the signature and the parameters of the function to be\n * called, as described in\n * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n * This parameter is optional, if no data is given the initialization call\n * to proxied contract will be skipped.\n */\n function initialize(\n address _logic,\n address _initGovernor,\n bytes calldata _data\n ) public payable onlyGovernor {\n require(_implementation() == address(0));\n require(_logic != address(0), \"Implementation not set\");\n assert(\n IMPLEMENTATION_SLOT ==\n bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1)\n );\n _setImplementation(_logic);\n if (_data.length > 0) {\n (bool success, ) = _logic.delegatecall(_data);\n require(success);\n }\n _changeGovernor(_initGovernor);\n }\n\n /**\n * @return The address of the proxy admin/it's also the governor.\n */\n function admin() external view returns (address) {\n return _governor();\n }\n\n /**\n * @return The address of the implementation.\n */\n function implementation() external view returns (address) {\n return _implementation();\n }\n\n /**\n * @dev Upgrade the backing implementation of the proxy.\n * Only the admin can call this function.\n * @param _newImplementation Address of the new implementation.\n */\n function upgradeTo(address _newImplementation) external onlyGovernor {\n _upgradeTo(_newImplementation);\n }\n\n /**\n * @dev Upgrade the backing implementation of the proxy and call a function\n * on the new implementation.\n * This is useful to initialize the proxied contract.\n * @param newImplementation Address of the new implementation.\n * @param data Data to send as msg.data in the low level call.\n * It should include the signature and the parameters of the function to be called, as described in\n * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data)\n external\n payable\n onlyGovernor\n {\n _upgradeTo(newImplementation);\n (bool success, ) = newImplementation.delegatecall(data);\n require(success);\n }\n\n /**\n * @dev Fallback function.\n * Implemented entirely in `_fallback`.\n */\n fallback() external payable {\n _fallback();\n }\n\n /**\n * @dev Delegates execution to an implementation contract.\n * This is a low level function that doesn't return to its internal call site.\n * It will return to the external caller whatever the implementation returns.\n * @param _impl Address to delegate.\n */\n function _delegate(address _impl) internal {\n // solhint-disable-next-line no-inline-assembly\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), _impl, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev Function that is run as the first thing in the fallback function.\n * Can be redefined in derived contracts to add functionality.\n * Redefinitions must call super._willFallback().\n */\n function _willFallback() internal {}\n\n /**\n * @dev fallback implementation.\n * Extracted to enable manual triggering.\n */\n function _fallback() internal {\n _willFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant IMPLEMENTATION_SLOT =\n 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Returns the current implementation.\n * @return impl Address of the current implementation\n */\n function _implementation() internal view returns (address impl) {\n bytes32 slot = IMPLEMENTATION_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n impl := sload(slot)\n }\n }\n\n /**\n * @dev Upgrades the proxy to a new implementation.\n * @param newImplementation Address of the new implementation.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation address of the proxy.\n * @param newImplementation Address of the new implementation.\n */\n function _setImplementation(address newImplementation) internal {\n require(\n Address.isContract(newImplementation),\n \"Cannot set a proxy implementation to a non-contract address\"\n );\n\n bytes32 slot = IMPLEMENTATION_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, newImplementation)\n }\n }\n}\n" + }, + "contracts/proxies/Proxies.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { InitializeGovernedUpgradeabilityProxy } from \"./InitializeGovernedUpgradeabilityProxy.sol\";\n\n/**\n * @notice OUSDProxy delegates calls to an OUSD implementation\n */\ncontract OUSDProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice WrappedOUSDProxy delegates calls to a WrappedOUSD implementation\n */\ncontract WrappedOUSDProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice VaultProxy delegates calls to a Vault implementation\n */\ncontract VaultProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice CompoundStrategyProxy delegates calls to a CompoundStrategy implementation\n */\ncontract CompoundStrategyProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice AaveStrategyProxy delegates calls to a AaveStrategy implementation\n */\ncontract AaveStrategyProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice ThreePoolStrategyProxy delegates calls to a ThreePoolStrategy implementation\n */\ncontract ThreePoolStrategyProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice ConvexStrategyProxy delegates calls to a ConvexStrategy implementation\n */\ncontract ConvexStrategyProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice HarvesterProxy delegates calls to a Harvester implementation\n */\ncontract HarvesterProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice DripperProxy delegates calls to a Dripper implementation\n */\ncontract DripperProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice MorphoCompoundStrategyProxy delegates calls to a MorphoCompoundStrategy implementation\n */\ncontract MorphoCompoundStrategyProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice ConvexOUSDMetaStrategyProxy delegates calls to a ConvexOUSDMetaStrategy implementation\n */\ncontract ConvexOUSDMetaStrategyProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice ConvexLUSDMetaStrategyProxy delegates calls to a ConvexalGeneralizedMetaStrategy implementation\n */\ncontract ConvexLUSDMetaStrategyProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice MorphoAaveStrategyProxy delegates calls to a MorphoCompoundStrategy implementation\n */\ncontract MorphoAaveStrategyProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice OETHProxy delegates calls to nowhere for now\n */\ncontract OETHProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice WOETHProxy delegates calls to nowhere for now\n */\ncontract WOETHProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice OETHVaultProxy delegates calls to a Vault implementation\n */\ncontract OETHVaultProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice OETHDripperProxy delegates calls to a OETHDripper implementation\n */\ncontract OETHDripperProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice OETHHarvesterProxy delegates calls to a Harvester implementation\n */\ncontract OETHHarvesterProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice FraxETHStrategyProxy delegates calls to a FraxETHStrategy implementation\n */\ncontract FraxETHStrategyProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice CurveEthStrategyProxy delegates calls to a CurveEthStrategy implementation\n */\ncontract ConvexEthMetaStrategyProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice BuybackProxy delegates calls to Buyback implementation\n */\ncontract BuybackProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice OETHMorphoAaveStrategyProxy delegates calls to a MorphoAaveStrategy implementation\n */\ncontract OETHMorphoAaveStrategyProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice OETHBalancerMetaPoolrEthStrategyProxy delegates calls to a BalancerMetaPoolStrategy implementation\n */\ncontract OETHBalancerMetaPoolrEthStrategyProxy is\n InitializeGovernedUpgradeabilityProxy\n{\n\n}\n\n/**\n * @notice OETHBalancerMetaPoolwstEthStrategyProxy delegates calls to a BalancerMetaPoolStrategy implementation\n */\ncontract OETHBalancerMetaPoolwstEthStrategyProxy is\n InitializeGovernedUpgradeabilityProxy\n{\n\n}\n\n/**\n * @notice FluxStrategyProxy delegates calls to a CompoundStrategy implementation\n */\ncontract FluxStrategyProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice MakerDsrStrategyProxy delegates calls to a Generalized4626Strategy implementation\n */\ncontract MakerDsrStrategyProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice FrxEthRedeemStrategyProxy delegates calls to a FrxEthRedeemStrategy implementation\n */\ncontract FrxEthRedeemStrategyProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice OETHBuybackProxy delegates calls to Buyback implementation\n */\ncontract OETHBuybackProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice BridgedWOETHProxy delegates calls to BridgedWOETH implementation\n */\ncontract BridgedWOETHProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice NativeStakingSSVStrategyProxy delegates calls to NativeStakingSSVStrategy implementation\n */\ncontract NativeStakingSSVStrategyProxy is\n InitializeGovernedUpgradeabilityProxy\n{\n\n}\n\n/**\n * @notice NativeStakingFeeAccumulatorProxy delegates calls to FeeAccumulator implementation\n */\ncontract NativeStakingFeeAccumulatorProxy is\n InitializeGovernedUpgradeabilityProxy\n{\n\n}\n\n/**\n * @notice NativeStakingSSVStrategy2Proxy delegates calls to NativeStakingSSVStrategy implementation\n */\ncontract NativeStakingSSVStrategy2Proxy is\n InitializeGovernedUpgradeabilityProxy\n{\n\n}\n\n/**\n * @notice NativeStakingFeeAccumulator2Proxy delegates calls to FeeAccumulator implementation\n */\ncontract NativeStakingFeeAccumulator2Proxy is\n InitializeGovernedUpgradeabilityProxy\n{\n\n}\n\n/**\n * @notice LidoWithdrawalStrategyProxy delegates calls to a LidoWithdrawalStrategy implementation\n */\ncontract LidoWithdrawalStrategyProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice BridgedBaseWOETHProxy delegates calls to BridgedWOETH implementation\n */\ncontract BridgedBaseWOETHProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice OETHBaseVaultProxy delegates calls to OETHBaseVault implementation\n */\ncontract OETHBaseVaultProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice OETHBaseProxy delegates calls to OETH implementation\n */\ncontract OETHBaseProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n\n/**\n * @notice WOETHBaseProxy delegates calls to WOETH implementation\n */\ncontract WOETHBaseProxy is InitializeGovernedUpgradeabilityProxy {\n\n}\n" + }, + "contracts/staking/SingleAssetStaking.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeMath } from \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport { Initializable } from \"../utils/Initializable.sol\";\nimport { Governable } from \"../governance/Governable.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\n\ncontract SingleAssetStaking is Initializable, Governable {\n using SafeMath for uint256;\n using StableMath for uint256;\n using SafeERC20 for IERC20;\n\n /* ========== STATE VARIABLES ========== */\n\n IERC20 public stakingToken; // this is both the staking and rewards\n\n struct Stake {\n uint256 amount; // amount to stake\n uint256 end; // when does the staking period end\n uint256 duration; // the duration of the stake\n uint240 rate; // rate to charge use 248 to reserve 8 bits for the bool\n bool paid;\n uint8 stakeType;\n }\n\n struct DropRoot {\n bytes32 hash;\n uint256 depth;\n }\n\n uint256[] public durations; // allowed durations\n uint256[] public rates; // rates that correspond with the allowed durations\n\n uint256 public totalOutstanding;\n bool public paused;\n\n mapping(address => Stake[]) public userStakes;\n\n mapping(uint8 => DropRoot) public dropRoots;\n\n // type 0 is reserved for stakes done by the user, all other types will be drop/preApproved stakes\n uint8 constant USER_STAKE_TYPE = 0;\n uint256 constant MAX_STAKES = 256;\n\n address public transferAgent;\n\n /* ========== Initialize ========== */\n\n /**\n * @dev Initialize the contracts, sets up durations, rates, and preApprover\n * for preApproved contracts can only be called once\n * @param _stakingToken Address of the token that we are staking\n * @param _durations Array of allowed durations in seconds\n * @param _rates Array of rates(0.3 is 30%) that correspond to the allowed\n * durations in 1e18 precision\n */\n function initialize(\n address _stakingToken,\n uint256[] calldata _durations,\n uint256[] calldata _rates\n ) external onlyGovernor initializer {\n stakingToken = IERC20(_stakingToken);\n _setDurationRates(_durations, _rates);\n }\n\n /* ========= Internal helper functions ======== */\n\n /**\n * @dev Validate and set the duration and corresponding rates, will emit\n * events NewRate and NewDurations\n */\n function _setDurationRates(\n uint256[] memory _durations,\n uint256[] memory _rates\n ) internal {\n require(\n _rates.length == _durations.length,\n \"Mismatch durations and rates\"\n );\n\n for (uint256 i = 0; i < _rates.length; i++) {\n require(_rates[i] < type(uint240).max, \"Max rate exceeded\");\n }\n\n rates = _rates;\n durations = _durations;\n\n emit NewRates(msg.sender, rates);\n emit NewDurations(msg.sender, durations);\n }\n\n function _totalExpectedRewards(Stake[] storage stakes)\n internal\n view\n returns (uint256 total)\n {\n for (uint256 i = 0; i < stakes.length; i++) {\n Stake storage stake = stakes[i];\n if (!stake.paid) {\n total = total.add(stake.amount.mulTruncate(stake.rate));\n }\n }\n }\n\n function _totalExpected(Stake storage _stake)\n internal\n view\n returns (uint256)\n {\n return _stake.amount.add(_stake.amount.mulTruncate(_stake.rate));\n }\n\n function _airDroppedStakeClaimed(address account, uint8 stakeType)\n internal\n view\n returns (bool)\n {\n Stake[] storage stakes = userStakes[account];\n for (uint256 i = 0; i < stakes.length; i++) {\n if (stakes[i].stakeType == stakeType) {\n return true;\n }\n }\n return false;\n }\n\n function _findDurationRate(uint256 duration)\n internal\n view\n returns (uint240)\n {\n for (uint256 i = 0; i < durations.length; i++) {\n if (duration == durations[i]) {\n return uint240(rates[i]);\n }\n }\n return 0;\n }\n\n /**\n * @dev Internal staking function\n * will insert the stake into the stakes array and verify we have\n * enough to pay off stake + reward\n * @param staker Address of the staker\n * @param stakeType Number that represent the type of the stake, 0 is user\n * initiated all else is currently preApproved\n * @param duration Number of seconds this stake will be held for\n * @param rate Rate(0.3 is 30%) of reward for this stake in 1e18, uint240 =\n * to fit the bool and type in struct Stake\n * @param amount Number of tokens to stake in 1e18\n */\n function _stake(\n address staker,\n uint8 stakeType,\n uint256 duration,\n uint240 rate,\n uint256 amount\n ) internal {\n require(!paused, \"Staking paused\");\n\n Stake[] storage stakes = userStakes[staker];\n\n uint256 end = block.timestamp.add(duration);\n\n uint256 i = stakes.length; // start at the end of the current array\n\n require(i < MAX_STAKES, \"Max stakes\");\n\n stakes.push(); // grow the array\n // find the spot where we can insert the current stake\n // this should make an increasing list sorted by end\n while (i != 0 && stakes[i - 1].end > end) {\n // shift it back one\n stakes[i] = stakes[i - 1];\n i -= 1;\n }\n\n // insert the stake\n Stake storage newStake = stakes[i];\n newStake.rate = rate;\n newStake.stakeType = stakeType;\n newStake.end = end;\n newStake.duration = duration;\n newStake.amount = amount;\n\n totalOutstanding = totalOutstanding.add(_totalExpected(newStake));\n\n emit Staked(staker, amount, duration, rate);\n }\n\n function _stakeWithChecks(\n address staker,\n uint256 amount,\n uint256 duration\n ) internal {\n require(amount > 0, \"Cannot stake 0\");\n\n uint240 rewardRate = _findDurationRate(duration);\n require(rewardRate > 0, \"Invalid duration\"); // we couldn't find the rate that correspond to the passed duration\n\n _stake(staker, USER_STAKE_TYPE, duration, rewardRate, amount);\n // transfer in the token so that we can stake the correct amount\n stakingToken.safeTransferFrom(staker, address(this), amount);\n }\n\n modifier requireLiquidity() {\n // we need to have enough balance to cover the rewards after the operation is complete\n _;\n require(\n stakingToken.balanceOf(address(this)) >= totalOutstanding,\n \"Insufficient rewards\"\n );\n }\n\n /* ========== VIEWS ========== */\n\n function getAllDurations() external view returns (uint256[] memory) {\n return durations;\n }\n\n function getAllRates() external view returns (uint256[] memory) {\n return rates;\n }\n\n /**\n * @dev Return all the stakes paid and unpaid for a given user\n * @param account Address of the account that we want to look up\n */\n function getAllStakes(address account)\n external\n view\n returns (Stake[] memory)\n {\n return userStakes[account];\n }\n\n /**\n * @dev Find the rate that corresponds to a given duration\n * @param _duration Number of seconds\n */\n function durationRewardRate(uint256 _duration)\n external\n view\n returns (uint256)\n {\n return _findDurationRate(_duration);\n }\n\n /**\n * @dev Has the airdropped stake already been claimed\n */\n function airDroppedStakeClaimed(address account, uint8 stakeType)\n external\n view\n returns (bool)\n {\n return _airDroppedStakeClaimed(account, stakeType);\n }\n\n /**\n * @dev Calculate all the staked value a user has put into the contract,\n * rewards not included\n * @param account Address of the account that we want to look up\n */\n function totalStaked(address account)\n external\n view\n returns (uint256 total)\n {\n Stake[] storage stakes = userStakes[account];\n\n for (uint256 i = 0; i < stakes.length; i++) {\n if (!stakes[i].paid) {\n total = total.add(stakes[i].amount);\n }\n }\n }\n\n /**\n * @dev Calculate all the rewards a user can expect to receive.\n * @param account Address of the account that we want to look up\n */\n function totalExpectedRewards(address account)\n external\n view\n returns (uint256)\n {\n return _totalExpectedRewards(userStakes[account]);\n }\n\n /**\n * @dev Calculate all current holdings of a user: staked value + prorated rewards\n * @param account Address of the account that we want to look up\n */\n function totalCurrentHoldings(address account)\n external\n view\n returns (uint256 total)\n {\n Stake[] storage stakes = userStakes[account];\n\n for (uint256 i = 0; i < stakes.length; i++) {\n Stake storage stake = stakes[i];\n if (stake.paid) {\n continue;\n } else if (stake.end < block.timestamp) {\n total = total.add(_totalExpected(stake));\n } else {\n //calcualte the precentage accrued in term of rewards\n total = total.add(\n stake.amount.add(\n stake.amount.mulTruncate(stake.rate).mulTruncate(\n stake\n .duration\n .sub(stake.end.sub(block.timestamp))\n .divPrecisely(stake.duration)\n )\n )\n );\n }\n }\n }\n\n /* ========== MUTATIVE FUNCTIONS ========== */\n\n /**\n * @dev Make a preapproved stake for the user, this is a presigned voucher that the user can redeem either from\n * an airdrop or a compensation program.\n * Only 1 of each type is allowed per user. The proof must match the root hash\n * @param index Number that is zero base index of the stake in the payout entry\n * @param stakeType Number that represent the type of the stake, must not be 0 which is user stake\n * @param duration Number of seconds this stake will be held for\n * @param rate Rate(0.3 is 30%) of reward for this stake in 1e18, uint240 to fit the bool and type in struct Stake\n * @param amount Number of tokens to stake in 1e18\n * @param merkleProof Array of proofs for that amount\n */\n function airDroppedStake(\n uint256 index,\n uint8 stakeType,\n uint256 duration,\n uint256 rate,\n uint256 amount,\n bytes32[] calldata merkleProof\n ) external requireLiquidity {\n require(stakeType != USER_STAKE_TYPE, \"Cannot be normal staking\");\n require(rate < type(uint240).max, \"Max rate exceeded\");\n require(index < 2**merkleProof.length, \"Invalid index\");\n DropRoot storage dropRoot = dropRoots[stakeType];\n require(merkleProof.length == dropRoot.depth, \"Invalid proof\");\n\n // Compute the merkle root\n bytes32 node = keccak256(\n abi.encodePacked(\n index,\n stakeType,\n address(this),\n msg.sender,\n duration,\n rate,\n amount\n )\n );\n uint256 path = index;\n for (uint16 i = 0; i < merkleProof.length; i++) {\n if ((path & 0x01) == 1) {\n node = keccak256(abi.encodePacked(merkleProof[i], node));\n } else {\n node = keccak256(abi.encodePacked(node, merkleProof[i]));\n }\n path /= 2;\n }\n\n // Check the merkle proof\n require(node == dropRoot.hash, \"Stake not approved\");\n\n // verify that we haven't already staked\n require(\n !_airDroppedStakeClaimed(msg.sender, stakeType),\n \"Already staked\"\n );\n\n _stake(msg.sender, stakeType, duration, uint240(rate), amount);\n }\n\n /**\n * @dev Stake an approved amount of staking token into the contract.\n * User must have already approved the contract for specified amount.\n * @param amount Number of tokens to stake in 1e18\n * @param duration Number of seconds this stake will be held for\n */\n function stake(uint256 amount, uint256 duration) external requireLiquidity {\n // no checks are performed in this function since those are already present in _stakeWithChecks\n _stakeWithChecks(msg.sender, amount, duration);\n }\n\n /**\n * @dev Stake an approved amount of staking token into the contract. This function\n * can only be called by OGN token contract.\n * @param staker Address of the account that is creating the stake\n * @param amount Number of tokens to stake in 1e18\n * @param duration Number of seconds this stake will be held for\n */\n function stakeWithSender(\n address staker,\n uint256 amount,\n uint256 duration\n ) external requireLiquidity returns (bool) {\n require(\n msg.sender == address(stakingToken),\n \"Only token contract can make this call\"\n );\n\n _stakeWithChecks(staker, amount, duration);\n return true;\n }\n\n /**\n * @dev Exit out of all possible stakes\n */\n function exit() external requireLiquidity {\n Stake[] storage stakes = userStakes[msg.sender];\n require(stakes.length > 0, \"Nothing staked\");\n\n uint256 totalWithdraw = 0;\n uint256 stakedAmount = 0;\n uint256 l = stakes.length;\n do {\n Stake storage exitStake = stakes[l - 1];\n // stop on the first ended stake that's already been paid\n if (exitStake.end < block.timestamp && exitStake.paid) {\n break;\n }\n //might not be ended\n if (exitStake.end < block.timestamp) {\n //we are paying out the stake\n exitStake.paid = true;\n totalWithdraw = totalWithdraw.add(_totalExpected(exitStake));\n stakedAmount = stakedAmount.add(exitStake.amount);\n }\n l--;\n } while (l > 0);\n require(totalWithdraw > 0, \"All stakes in lock-up\");\n\n totalOutstanding = totalOutstanding.sub(totalWithdraw);\n emit Withdrawn(msg.sender, totalWithdraw, stakedAmount);\n stakingToken.safeTransfer(msg.sender, totalWithdraw);\n }\n\n /**\n * @dev Use to transfer all the stakes of an account in the case that the account is compromised\n * Requires access to both the account itself and the transfer agent\n * @param _frmAccount the address to transfer from\n * @param _dstAccount the address to transfer to(must be a clean address with no stakes)\n * @param r r portion of the signature by the transfer agent\n * @param s s portion of the signature\n * @param v v portion of the signature\n */\n function transferStakes(\n address _frmAccount,\n address _dstAccount,\n bytes32 r,\n bytes32 s,\n uint8 v\n ) external {\n require(transferAgent == msg.sender, \"must be transfer agent\");\n Stake[] storage dstStakes = userStakes[_dstAccount];\n require(dstStakes.length == 0, \"Dest stakes must be empty\");\n require(_frmAccount != address(0), \"from account not set\");\n Stake[] storage stakes = userStakes[_frmAccount];\n require(stakes.length > 0, \"Nothing to transfer\");\n\n // matches ethers.signMsg(ethers.utils.solidityPack([string(4), address, adddress, address]))\n bytes32 hash = keccak256(\n abi.encodePacked(\n \"\\x19Ethereum Signed Message:\\n64\",\n abi.encodePacked(\n \"tran\",\n address(this),\n _frmAccount,\n _dstAccount\n )\n )\n );\n require(ecrecover(hash, v, r, s) == _frmAccount, \"Transfer not authed\");\n\n // copy the stakes into the dstAccount array and delete the old one\n userStakes[_dstAccount] = stakes;\n delete userStakes[_frmAccount];\n emit StakesTransfered(_frmAccount, _dstAccount, stakes.length);\n }\n\n /* ========== MODIFIERS ========== */\n\n function setPaused(bool _paused) external onlyGovernor {\n paused = _paused;\n emit Paused(msg.sender, paused);\n }\n\n /**\n * @dev Set new durations and rates will not effect existing stakes\n * @param _durations Array of durations in seconds\n * @param _rates Array of rates that corresponds to the durations (0.01 is 1%) in 1e18\n */\n function setDurationRates(\n uint256[] calldata _durations,\n uint256[] calldata _rates\n ) external onlyGovernor {\n _setDurationRates(_durations, _rates);\n }\n\n /**\n * @dev Set the agent that will authorize transfers\n * @param _agent Address of agent\n */\n function setTransferAgent(address _agent) external onlyGovernor {\n transferAgent = _agent;\n }\n\n /**\n * @dev Set air drop root for a specific stake type\n * @param _stakeType Type of staking must be greater than 0\n * @param _rootHash Root hash of the Merkle Tree\n * @param _proofDepth Depth of the Merklke Tree\n */\n function setAirDropRoot(\n uint8 _stakeType,\n bytes32 _rootHash,\n uint256 _proofDepth\n ) external onlyGovernor {\n require(_stakeType != USER_STAKE_TYPE, \"Cannot be normal staking\");\n dropRoots[_stakeType].hash = _rootHash;\n dropRoots[_stakeType].depth = _proofDepth;\n emit NewAirDropRootHash(_stakeType, _rootHash, _proofDepth);\n }\n\n /* ========== EVENTS ========== */\n\n event Staked(\n address indexed user,\n uint256 amount,\n uint256 duration,\n uint256 rate\n );\n event Withdrawn(address indexed user, uint256 amount, uint256 stakedAmount);\n event Paused(address indexed user, bool yes);\n event NewDurations(address indexed user, uint256[] durations);\n event NewRates(address indexed user, uint256[] rates);\n event NewAirDropRootHash(\n uint8 stakeType,\n bytes32 rootHash,\n uint256 proofDepth\n );\n event StakesTransfered(\n address indexed fromUser,\n address toUser,\n uint256 numStakes\n );\n}\n" + }, + "contracts/strategies/AaveStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title OUSD Aave Strategy\n * @notice Investment strategy for investing stablecoins via Aave\n * @author Origin Protocol Inc\n */\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport \"./IAave.sol\";\nimport { IERC20, InitializableAbstractStrategy } from \"../utils/InitializableAbstractStrategy.sol\";\n\nimport { IAaveStakedToken } from \"./IAaveStakeToken.sol\";\nimport { IAaveIncentivesController } from \"./IAaveIncentivesController.sol\";\n\ncontract AaveStrategy is InitializableAbstractStrategy {\n using SafeERC20 for IERC20;\n\n uint16 constant referralCode = 92;\n\n IAaveIncentivesController public incentivesController;\n IAaveStakedToken public stkAave;\n\n /**\n * @param _stratConfig The platform and OToken vault addresses\n */\n constructor(BaseStrategyConfig memory _stratConfig)\n InitializableAbstractStrategy(_stratConfig)\n {}\n\n /**\n * Initializer for setting up strategy internal state. This overrides the\n * InitializableAbstractStrategy initializer as AAVE needs several extra\n * addresses for the rewards program.\n * @param _rewardTokenAddresses Address of the AAVE token\n * @param _assets Addresses of supported assets\n * @param _pTokens Platform Token corresponding addresses\n * @param _incentivesAddress Address of the AAVE incentives controller\n * @param _stkAaveAddress Address of the stkAave contract\n */\n function initialize(\n address[] calldata _rewardTokenAddresses, // AAVE\n address[] calldata _assets,\n address[] calldata _pTokens,\n address _incentivesAddress,\n address _stkAaveAddress\n ) external onlyGovernor initializer {\n incentivesController = IAaveIncentivesController(_incentivesAddress);\n stkAave = IAaveStakedToken(_stkAaveAddress);\n InitializableAbstractStrategy._initialize(\n _rewardTokenAddresses,\n _assets,\n _pTokens\n );\n }\n\n /**\n * @dev Deposit asset into Aave\n * @param _asset Address of asset to deposit\n * @param _amount Amount of asset to deposit\n */\n function deposit(address _asset, uint256 _amount)\n external\n override\n onlyVault\n nonReentrant\n {\n _deposit(_asset, _amount);\n }\n\n /**\n * @dev Deposit asset into Aave\n * @param _asset Address of asset to deposit\n * @param _amount Amount of asset to deposit\n */\n function _deposit(address _asset, uint256 _amount) internal {\n require(_amount > 0, \"Must deposit something\");\n // Following line also doubles as a check that we are depositing\n // an asset that we support.\n emit Deposit(_asset, _getATokenFor(_asset), _amount);\n _getLendingPool().deposit(_asset, _amount, address(this), referralCode);\n }\n\n /**\n * @dev Deposit the entire balance of any supported asset into Aave\n */\n function depositAll() external override onlyVault nonReentrant {\n for (uint256 i = 0; i < assetsMapped.length; i++) {\n uint256 balance = IERC20(assetsMapped[i]).balanceOf(address(this));\n if (balance > 0) {\n _deposit(assetsMapped[i], balance);\n }\n }\n }\n\n /**\n * @dev Withdraw asset from Aave\n * @param _recipient Address to receive withdrawn asset\n * @param _asset Address of asset to withdraw\n * @param _amount Amount of asset to withdraw\n */\n function withdraw(\n address _recipient,\n address _asset,\n uint256 _amount\n ) external override onlyVault nonReentrant {\n require(_amount > 0, \"Must withdraw something\");\n require(_recipient != address(0), \"Must specify recipient\");\n\n emit Withdrawal(_asset, _getATokenFor(_asset), _amount);\n uint256 actual = _getLendingPool().withdraw(\n _asset,\n _amount,\n address(this)\n );\n require(actual == _amount, \"Did not withdraw enough\");\n IERC20(_asset).safeTransfer(_recipient, _amount);\n }\n\n /**\n * @dev Remove all assets from platform and send them to Vault contract.\n */\n function withdrawAll() external override onlyVaultOrGovernor nonReentrant {\n for (uint256 i = 0; i < assetsMapped.length; i++) {\n // Redeem entire balance of aToken\n IERC20 asset = IERC20(assetsMapped[i]);\n address aToken = _getATokenFor(assetsMapped[i]);\n uint256 balance = IERC20(aToken).balanceOf(address(this));\n if (balance > 0) {\n uint256 actual = _getLendingPool().withdraw(\n address(asset),\n balance,\n address(this)\n );\n require(actual == balance, \"Did not withdraw enough\");\n\n uint256 assetBalance = asset.balanceOf(address(this));\n // Transfer entire balance to Vault\n asset.safeTransfer(vaultAddress, assetBalance);\n\n emit Withdrawal(address(asset), aToken, assetBalance);\n }\n }\n }\n\n /**\n * @dev Get the total asset value held in the platform\n * @param _asset Address of the asset\n * @return balance Total value of the asset in the platform\n */\n function checkBalance(address _asset)\n external\n view\n override\n returns (uint256 balance)\n {\n // Balance is always with token aToken decimals\n address aToken = _getATokenFor(_asset);\n balance = IERC20(aToken).balanceOf(address(this));\n }\n\n /**\n * @dev Returns bool indicating whether asset is supported by strategy\n * @param _asset Address of the asset\n */\n function supportsAsset(address _asset) public view override returns (bool) {\n return assetToPToken[_asset] != address(0);\n }\n\n /**\n * @dev Approve the spending of all assets by their corresponding aToken,\n * if for some reason is it necessary.\n */\n function safeApproveAllTokens()\n external\n override\n onlyGovernor\n nonReentrant\n {\n address lendingPool = address(_getLendingPool());\n // approve the pool to spend the Asset\n for (uint256 i = 0; i < assetsMapped.length; i++) {\n address asset = assetsMapped[i];\n // Safe approval\n IERC20(asset).safeApprove(lendingPool, 0);\n IERC20(asset).safeApprove(lendingPool, type(uint256).max);\n }\n }\n\n /**\n * @dev Internal method to respond to the addition of new asset / aTokens\n We need to give the AAVE lending pool approval to transfer the\n asset.\n * @param _asset Address of the asset to approve\n * @param _aToken Address of the aToken\n */\n // solhint-disable-next-line no-unused-vars\n function _abstractSetPToken(address _asset, address _aToken)\n internal\n override\n {\n address lendingPool = address(_getLendingPool());\n IERC20(_asset).safeApprove(lendingPool, 0);\n IERC20(_asset).safeApprove(lendingPool, type(uint256).max);\n }\n\n /**\n * @dev Get the aToken wrapped in the IERC20 interface for this asset.\n * Fails if the pToken doesn't exist in our mappings.\n * @param _asset Address of the asset\n * @return Corresponding aToken to this asset\n */\n function _getATokenFor(address _asset) internal view returns (address) {\n address aToken = assetToPToken[_asset];\n require(aToken != address(0), \"aToken does not exist\");\n return aToken;\n }\n\n /**\n * @dev Get the current address of the Aave lending pool, which is the gateway to\n * depositing.\n * @return Current lending pool implementation\n */\n function _getLendingPool() internal view returns (IAaveLendingPool) {\n address lendingPool = ILendingPoolAddressesProvider(platformAddress)\n .getLendingPool();\n require(lendingPool != address(0), \"Lending pool does not exist\");\n return IAaveLendingPool(lendingPool);\n }\n\n /**\n * @dev Collect stkAave, convert it to AAVE send to Vault.\n */\n function collectRewardTokens()\n external\n override\n onlyHarvester\n nonReentrant\n {\n if (address(stkAave) == address(0)) {\n return;\n }\n\n // Check staked AAVE cooldown timer\n uint256 cooldown = stkAave.stakersCooldowns(address(this));\n uint256 windowStart = cooldown + stkAave.COOLDOWN_SECONDS();\n uint256 windowEnd = windowStart + stkAave.UNSTAKE_WINDOW();\n\n // If inside the unlock window, then we can redeem stkAave\n // for AAVE and send it to the vault.\n if (block.timestamp > windowStart && block.timestamp <= windowEnd) {\n // Redeem to AAVE\n uint256 stkAaveBalance = stkAave.balanceOf(address(this));\n stkAave.redeem(address(this), stkAaveBalance);\n\n // Transfer AAVE to harvesterAddress\n uint256 aaveBalance = IERC20(rewardTokenAddresses[0]).balanceOf(\n address(this)\n );\n if (aaveBalance > 0) {\n IERC20(rewardTokenAddresses[0]).safeTransfer(\n harvesterAddress,\n aaveBalance\n );\n }\n }\n\n // Collect available rewards and restart the cooldown timer, if either of\n // those should be run.\n if (block.timestamp > windowStart || cooldown == 0) {\n uint256 assetsLen = assetsMapped.length;\n // aToken addresses for incentives controller\n address[] memory aTokens = new address[](assetsLen);\n for (uint256 i = 0; i < assetsLen; ++i) {\n aTokens[i] = _getATokenFor(assetsMapped[i]);\n }\n\n // 1. If we have rewards availabile, collect them\n uint256 pendingRewards = incentivesController.getRewardsBalance(\n aTokens,\n address(this)\n );\n if (pendingRewards > 0) {\n // Because getting more stkAAVE from the incentives controller\n // with claimRewards() may push the stkAAVE cooldown time\n // forward, it is called after stakedAAVE has been turned into\n // AAVE.\n uint256 collected = incentivesController.claimRewards(\n aTokens,\n pendingRewards,\n address(this)\n );\n require(collected == pendingRewards, \"AAVE reward difference\");\n }\n\n // 2. Start cooldown counting down.\n if (stkAave.balanceOf(address(this)) > 0) {\n // Protected with if since cooldown call would revert\n // if no stkAave balance.\n stkAave.cooldown();\n }\n }\n }\n}\n" + }, + "contracts/strategies/AbstractCompoundStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Base Compound Abstract Strategy\n * @author Origin Protocol Inc\n */\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { ICERC20 } from \"./ICompound.sol\";\nimport { IComptroller } from \"../interfaces/IComptroller.sol\";\nimport { IERC20, InitializableAbstractStrategy } from \"../utils/InitializableAbstractStrategy.sol\";\n\nabstract contract AbstractCompoundStrategy is InitializableAbstractStrategy {\n using SafeERC20 for IERC20;\n\n int256[50] private __reserved;\n\n /**\n * @dev Retuns bool indicating whether asset is supported by strategy\n * @param _asset Address of the asset\n */\n function supportsAsset(address _asset) public view override returns (bool) {\n return assetToPToken[_asset] != address(0);\n }\n\n /**\n * @dev Get the cToken wrapped in the ICERC20 interface for this asset.\n * Fails if the pToken doesn't exist in our mappings.\n * @param _asset Address of the asset\n * @return Corresponding cToken to this asset\n */\n function _getCTokenFor(address _asset) internal view returns (ICERC20) {\n address cToken = assetToPToken[_asset];\n require(cToken != address(0), \"cToken does not exist\");\n return ICERC20(cToken);\n }\n\n /**\n * @dev Converts an underlying amount into cToken amount\n * cTokenAmt = (underlying * 1e18) / exchangeRate\n * @param _cToken cToken for which to change\n * @param _underlying Amount of underlying to convert\n * @return amount Equivalent amount of cTokens\n */\n function _convertUnderlyingToCToken(ICERC20 _cToken, uint256 _underlying)\n internal\n view\n returns (uint256 amount)\n {\n // e.g. 1e18*1e18 / 205316390724364402565641705 = 50e8\n // e.g. 1e8*1e18 / 205316390724364402565641705 = 0.45 or 0\n amount = (_underlying * 1e18) / _cToken.exchangeRateStored();\n }\n}\n" + }, + "contracts/strategies/AbstractConvexMetaStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Curve Convex Strategy\n * @notice Investment strategy for investing stablecoins via Curve 3Pool\n * @author Origin Protocol Inc\n */\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport { IRewardStaking } from \"./IRewardStaking.sol\";\nimport { ICurvePool } from \"./ICurvePool.sol\";\nimport { ICurveMetaPool } from \"./ICurveMetaPool.sol\";\nimport { IERC20, AbstractCurveStrategy, InitializableAbstractStrategy } from \"./AbstractCurveStrategy.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\nimport { Helpers } from \"../utils/Helpers.sol\";\n\nabstract contract AbstractConvexMetaStrategy is AbstractCurveStrategy {\n using StableMath for uint256;\n using SafeERC20 for IERC20;\n\n event MaxWithdrawalSlippageUpdated(\n uint256 _prevMaxSlippagePercentage,\n uint256 _newMaxSlippagePercentage\n );\n\n // used to circumvent the stack too deep issue\n struct InitConfig {\n address cvxDepositorAddress; //Address of the Convex depositor(AKA booster) for this pool\n address metapoolAddress; //Address of the Curve MetaPool\n address metapoolMainToken; //Address of Main metapool token\n address cvxRewardStakerAddress; //Address of the CVX rewards staker\n address metapoolLPToken; //Address of metapool LP token\n uint256 cvxDepositorPTokenId; //Pid of the pool referred to by Depositor and staker\n }\n\n address internal cvxDepositorAddress;\n address internal cvxRewardStakerAddress;\n uint256 internal cvxDepositorPTokenId;\n ICurveMetaPool internal metapool;\n IERC20 internal metapoolMainToken;\n IERC20 internal metapoolLPToken;\n // Ordered list of metapool assets\n address[] internal metapoolAssets;\n // Max withdrawal slippage denominated in 1e18 (1e18 == 100%)\n uint256 public maxWithdrawalSlippage;\n uint128 internal crvCoinIndex;\n uint128 internal mainCoinIndex;\n\n int256[41] private ___reserved;\n\n /**\n * Initializer for setting up strategy internal state. This overrides the\n * InitializableAbstractStrategy initializer as Curve strategies don't fit\n * well within that abstraction.\n * @param _rewardTokenAddresses Address of CRV & CVX\n * @param _assets Addresses of supported assets. MUST be passed in the same\n * order as returned by coins on the pool contract, i.e.\n * DAI, USDC, USDT\n * @param _pTokens Platform Token corresponding addresses\n * @param initConfig Various addresses and info for initialization state\n */\n function initialize(\n address[] calldata _rewardTokenAddresses, // CRV + CVX\n address[] calldata _assets,\n address[] calldata _pTokens,\n InitConfig calldata initConfig\n ) external onlyGovernor initializer {\n require(_assets.length == 3, \"Must have exactly three assets\");\n // Should be set prior to abstract initialize call otherwise\n // abstractSetPToken calls will fail\n cvxDepositorAddress = initConfig.cvxDepositorAddress;\n pTokenAddress = _pTokens[0];\n metapool = ICurveMetaPool(initConfig.metapoolAddress);\n metapoolMainToken = IERC20(initConfig.metapoolMainToken);\n cvxRewardStakerAddress = initConfig.cvxRewardStakerAddress;\n metapoolLPToken = IERC20(initConfig.metapoolLPToken);\n cvxDepositorPTokenId = initConfig.cvxDepositorPTokenId;\n maxWithdrawalSlippage = 1e16;\n\n metapoolAssets = [metapool.coins(0), metapool.coins(1)];\n crvCoinIndex = _getMetapoolCoinIndex(pTokenAddress);\n mainCoinIndex = _getMetapoolCoinIndex(initConfig.metapoolMainToken);\n InitializableAbstractStrategy._initialize(\n _rewardTokenAddresses,\n _assets,\n _pTokens\n );\n _approveBase();\n }\n\n /**\n * @dev Get the total asset value held in the platform\n * @param _asset Address of the asset\n * @return balance Total value of the asset in the platform\n */\n function checkBalance(address _asset)\n public\n view\n virtual\n override\n returns (uint256 balance)\n {\n require(assetToPToken[_asset] != address(0), \"Unsupported asset\");\n balance = 0;\n\n // LP tokens in this contract. This should generally be nothing as we\n // should always stake the full balance in the Gauge, but include for\n // safety\n uint256 contractPTokens = IERC20(pTokenAddress).balanceOf(\n address(this)\n );\n ICurvePool curvePool = ICurvePool(platformAddress);\n if (contractPTokens > 0) {\n uint256 virtual_price = curvePool.get_virtual_price();\n uint256 value = contractPTokens.mulTruncate(virtual_price);\n balance += value;\n }\n\n /* We intentionally omit the metapoolLp tokens held by the metastrategyContract\n * since the contract should never (except in the middle of deposit/withdrawal\n * transaction) hold any amount of those tokens in normal operation. There\n * could be tokens sent to it by a 3rd party and we decide to actively ignore\n * those.\n */\n uint256 metapoolGaugePTokens = IRewardStaking(cvxRewardStakerAddress)\n .balanceOf(address(this));\n\n if (metapoolGaugePTokens > 0) {\n uint256 value = metapoolGaugePTokens.mulTruncate(\n metapool.get_virtual_price()\n );\n balance += value;\n }\n\n uint256 assetDecimals = Helpers.getDecimals(_asset);\n balance = balance.scaleBy(assetDecimals, 18) / THREEPOOL_ASSET_COUNT;\n }\n\n /**\n * @dev This function is completely analogous to _calcCurveTokenAmount[AbstractCurveStrategy]\n * and just utilizes different Curve (meta)pool API\n */\n function _calcCurveMetaTokenAmount(uint128 _coinIndex, uint256 _amount)\n internal\n returns (uint256 requiredMetapoolLP)\n {\n uint256[2] memory _amounts = [uint256(0), uint256(0)];\n _amounts[uint256(_coinIndex)] = _amount;\n\n // LP required when removing required asset ignoring fees\n uint256 lpRequiredNoFees = metapool.calc_token_amount(_amounts, false);\n /* LP required if fees would apply to entirety of removed amount\n *\n * fee is 1e10 denominated number: https://curve.readthedocs.io/exchange-pools.html#StableSwap.fee\n */\n uint256 lpRequiredFullFees = lpRequiredNoFees.mulTruncateScale(\n 1e10 + metapool.fee(),\n 1e10\n );\n\n /* asset received when withdrawing full fee applicable LP accounting for\n * slippage and fees\n */\n uint256 assetReceivedForFullLPFees = metapool.calc_withdraw_one_coin(\n lpRequiredFullFees,\n int128(_coinIndex)\n );\n\n // exact amount of LP required\n requiredMetapoolLP =\n (lpRequiredFullFees * _amount) /\n assetReceivedForFullLPFees;\n }\n\n function _approveBase() internal override {\n IERC20 pToken = IERC20(pTokenAddress);\n // 3Pool for LP token (required for removing liquidity)\n pToken.safeApprove(platformAddress, 0);\n pToken.safeApprove(platformAddress, type(uint256).max);\n // Gauge for LP token\n metapoolLPToken.safeApprove(cvxDepositorAddress, 0);\n metapoolLPToken.safeApprove(cvxDepositorAddress, type(uint256).max);\n // Metapool for LP token\n pToken.safeApprove(address(metapool), 0);\n pToken.safeApprove(address(metapool), type(uint256).max);\n // Metapool for Metapool main token\n metapoolMainToken.safeApprove(address(metapool), 0);\n metapoolMainToken.safeApprove(address(metapool), type(uint256).max);\n }\n\n /**\n * @dev Get the index of the coin\n */\n function _getMetapoolCoinIndex(address _asset)\n internal\n view\n returns (uint128)\n {\n for (uint128 i = 0; i < 2; i++) {\n if (metapoolAssets[i] == _asset) return i;\n }\n revert(\"Invalid Metapool asset\");\n }\n\n /**\n * @dev Sets max withdrawal slippage that is considered when removing\n * liquidity from Metapools.\n * @param _maxWithdrawalSlippage Max withdrawal slippage denominated in\n * wad (number with 18 decimals): 1e18 == 100%, 1e16 == 1%\n *\n * IMPORTANT Minimum maxWithdrawalSlippage should actually be 0.1% (1e15)\n * for production usage. Contract allows as low value as 0% for confirming\n * correct behavior in test suite.\n */\n function setMaxWithdrawalSlippage(uint256 _maxWithdrawalSlippage)\n external\n onlyVaultOrGovernorOrStrategist\n {\n require(\n _maxWithdrawalSlippage <= 1e18,\n \"Max withdrawal slippage needs to be between 0% - 100%\"\n );\n emit MaxWithdrawalSlippageUpdated(\n maxWithdrawalSlippage,\n _maxWithdrawalSlippage\n );\n maxWithdrawalSlippage = _maxWithdrawalSlippage;\n }\n\n /**\n * @dev Collect accumulated CRV and CVX and send to Harvester.\n */\n function collectRewardTokens()\n external\n override\n onlyHarvester\n nonReentrant\n {\n // Collect CRV and CVX\n IRewardStaking(cvxRewardStakerAddress).getReward();\n _collectRewardTokens();\n }\n\n /**\n * @dev Returns the largest of two numbers int256 version\n */\n function _max(int256 a, int256 b) internal pure returns (int256) {\n return a >= b ? a : b;\n }\n}\n" + }, + "contracts/strategies/AbstractCurveStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Curve 3Pool Strategy\n * @notice Investment strategy for investing stablecoins via Curve 3Pool\n * @author Origin Protocol Inc\n */\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport { ICurvePool } from \"./ICurvePool.sol\";\nimport { IERC20, InitializableAbstractStrategy } from \"../utils/InitializableAbstractStrategy.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\nimport { Helpers } from \"../utils/Helpers.sol\";\n\nabstract contract AbstractCurveStrategy is InitializableAbstractStrategy {\n using StableMath for uint256;\n using SafeERC20 for IERC20;\n\n uint256 internal constant MAX_SLIPPAGE = 1e16; // 1%, same as the Curve UI\n // number of assets in Curve 3Pool (USDC, DAI, USDT)\n uint256 internal constant THREEPOOL_ASSET_COUNT = 3;\n address internal pTokenAddress;\n\n int256[49] private __reserved;\n\n /**\n * @dev Deposit asset into the Curve 3Pool\n * @param _asset Address of asset to deposit\n * @param _amount Amount of asset to deposit\n */\n function deposit(address _asset, uint256 _amount)\n external\n override\n onlyVault\n nonReentrant\n {\n require(_amount > 0, \"Must deposit something\");\n emit Deposit(_asset, pTokenAddress, _amount);\n\n // 3Pool requires passing deposit amounts for all 3 assets, set to 0 for\n // all\n uint256[3] memory _amounts;\n uint256 poolCoinIndex = _getCoinIndex(_asset);\n // Set the amount on the asset we want to deposit\n _amounts[poolCoinIndex] = _amount;\n ICurvePool curvePool = ICurvePool(platformAddress);\n uint256 assetDecimals = Helpers.getDecimals(_asset);\n uint256 depositValue = _amount.scaleBy(18, assetDecimals).divPrecisely(\n curvePool.get_virtual_price()\n );\n uint256 minMintAmount = depositValue.mulTruncate(\n uint256(1e18) - MAX_SLIPPAGE\n );\n // Do the deposit to 3pool\n curvePool.add_liquidity(_amounts, minMintAmount);\n _lpDepositAll();\n }\n\n function _lpDepositAll() internal virtual;\n\n /**\n * @dev Deposit the entire balance of any supported asset into the Curve 3pool\n */\n function depositAll() external override onlyVault nonReentrant {\n uint256[3] memory _amounts = [uint256(0), uint256(0), uint256(0)];\n uint256 depositValue = 0;\n ICurvePool curvePool = ICurvePool(platformAddress);\n uint256 curveVirtualPrice = curvePool.get_virtual_price();\n\n uint256 assetCount = assetsMapped.length;\n for (uint256 i = 0; i < assetCount; i++) {\n address assetAddress = assetsMapped[i];\n uint256 balance = IERC20(assetAddress).balanceOf(address(this));\n if (balance > 0) {\n uint256 poolCoinIndex = _getCoinIndex(assetAddress);\n // Set the amount on the asset we want to deposit\n _amounts[poolCoinIndex] = balance;\n uint256 assetDecimals = Helpers.getDecimals(assetAddress);\n // Get value of deposit in Curve LP token to later determine\n // the minMintAmount argument for add_liquidity\n depositValue =\n depositValue +\n balance.scaleBy(18, assetDecimals).divPrecisely(\n curveVirtualPrice\n );\n emit Deposit(assetAddress, pTokenAddress, balance);\n }\n }\n\n uint256 minMintAmount = depositValue.mulTruncate(\n uint256(1e18) - MAX_SLIPPAGE\n );\n // Do the deposit to 3pool\n curvePool.add_liquidity(_amounts, minMintAmount);\n\n /* In case of Curve Strategy all assets are mapped to the same pToken (3CrvLP). Let\n * descendants further handle the pToken. By either deploying it to the metapool and\n * resulting tokens in Gauge. Or deploying pTokens directly to the Gauge.\n */\n _lpDepositAll();\n }\n\n function _lpWithdraw(uint256 numCrvTokens) internal virtual;\n\n function _lpWithdrawAll() internal virtual;\n\n /**\n * @dev Withdraw asset from Curve 3Pool\n * @param _recipient Address to receive withdrawn asset\n * @param _asset Address of asset to withdraw\n * @param _amount Amount of asset to withdraw\n */\n function withdraw(\n address _recipient,\n address _asset,\n uint256 _amount\n ) external override onlyVault nonReentrant {\n require(_amount > 0, \"Invalid amount\");\n\n emit Withdrawal(_asset, pTokenAddress, _amount);\n\n uint256 contractCrv3Tokens = IERC20(pTokenAddress).balanceOf(\n address(this)\n );\n\n uint256 coinIndex = _getCoinIndex(_asset);\n ICurvePool curvePool = ICurvePool(platformAddress);\n\n uint256 requiredCrv3Tokens = _calcCurveTokenAmount(coinIndex, _amount);\n\n // We have enough LP tokens, make sure they are all on this contract\n if (contractCrv3Tokens < requiredCrv3Tokens) {\n _lpWithdraw(requiredCrv3Tokens - contractCrv3Tokens);\n }\n\n uint256[3] memory _amounts = [uint256(0), uint256(0), uint256(0)];\n _amounts[coinIndex] = _amount;\n\n curvePool.remove_liquidity_imbalance(_amounts, requiredCrv3Tokens);\n IERC20(_asset).safeTransfer(_recipient, _amount);\n }\n\n /**\n * @dev Calculate amount of LP required when withdrawing specific amount of one\n * of the underlying assets accounting for fees and slippage.\n *\n * Curve pools unfortunately do not contain a calculation function for\n * amount of LP required when withdrawing a specific amount of one of the\n * underlying tokens and also accounting for fees (Curve's calc_token_amount\n * does account for slippage but not fees).\n *\n * Steps taken to calculate the metric:\n * - get amount of LP required if fees wouldn't apply\n * - increase the LP amount as if fees would apply to the entirety of the underlying\n * asset withdrawal. (when withdrawing only one coin fees apply only to amounts\n * of other assets pool would return in case of balanced removal - since those need\n * to be swapped for the single underlying asset being withdrawn)\n * - get amount of underlying asset withdrawn (this Curve function does consider slippage\n * and fees) when using the increased LP amount. As LP amount is slightly over-increased\n * so is amount of underlying assets returned.\n * - since we know exactly how much asset we require take the rate of LP required for asset\n * withdrawn to get the exact amount of LP.\n */\n function _calcCurveTokenAmount(uint256 _coinIndex, uint256 _amount)\n internal\n returns (uint256 required3Crv)\n {\n ICurvePool curvePool = ICurvePool(platformAddress);\n\n uint256[3] memory _amounts = [uint256(0), uint256(0), uint256(0)];\n _amounts[_coinIndex] = _amount;\n\n // LP required when removing required asset ignoring fees\n uint256 lpRequiredNoFees = curvePool.calc_token_amount(_amounts, false);\n /* LP required if fees would apply to entirety of removed amount\n *\n * fee is 1e10 denominated number: https://curve.readthedocs.io/exchange-pools.html#StableSwap.fee\n */\n uint256 lpRequiredFullFees = lpRequiredNoFees.mulTruncateScale(\n 1e10 + curvePool.fee(),\n 1e10\n );\n\n /* asset received when withdrawing full fee applicable LP accounting for\n * slippage and fees\n */\n uint256 assetReceivedForFullLPFees = curvePool.calc_withdraw_one_coin(\n lpRequiredFullFees,\n int128(uint128(_coinIndex))\n );\n\n // exact amount of LP required\n required3Crv =\n (lpRequiredFullFees * _amount) /\n assetReceivedForFullLPFees;\n }\n\n /**\n * @dev Remove all assets from platform and send them to Vault contract.\n */\n function withdrawAll() external override onlyVaultOrGovernor nonReentrant {\n _lpWithdrawAll();\n // Withdraws are proportional to assets held by 3Pool\n uint256[3] memory minWithdrawAmounts = [\n uint256(0),\n uint256(0),\n uint256(0)\n ];\n\n // Remove liquidity\n ICurvePool threePool = ICurvePool(platformAddress);\n threePool.remove_liquidity(\n IERC20(pTokenAddress).balanceOf(address(this)),\n minWithdrawAmounts\n );\n // Transfer assets out of Vault\n // Note that Curve will provide all 3 of the assets in 3pool even if\n // we have not set PToken addresses for all of them in this strategy\n for (uint256 i = 0; i < assetsMapped.length; i++) {\n IERC20 asset = IERC20(threePool.coins(i));\n asset.safeTransfer(vaultAddress, asset.balanceOf(address(this)));\n }\n }\n\n /**\n * @dev Get the total asset value held in the platform\n * @param _asset Address of the asset\n * @return balance Total value of the asset in the platform\n */\n function checkBalance(address _asset)\n public\n view\n virtual\n override\n returns (uint256 balance)\n {\n require(assetToPToken[_asset] != address(0), \"Unsupported asset\");\n // LP tokens in this contract. This should generally be nothing as we\n // should always stake the full balance in the Gauge, but include for\n // safety\n uint256 totalPTokens = IERC20(pTokenAddress).balanceOf(address(this));\n ICurvePool curvePool = ICurvePool(platformAddress);\n if (totalPTokens > 0) {\n uint256 virtual_price = curvePool.get_virtual_price();\n uint256 value = (totalPTokens * virtual_price) / 1e18;\n uint256 assetDecimals = Helpers.getDecimals(_asset);\n balance = value.scaleBy(assetDecimals, 18) / THREEPOOL_ASSET_COUNT;\n }\n }\n\n /**\n * @dev Retuns bool indicating whether asset is supported by strategy\n * @param _asset Address of the asset\n */\n function supportsAsset(address _asset) public view override returns (bool) {\n return assetToPToken[_asset] != address(0);\n }\n\n /**\n * @dev Approve the spending of all assets by their corresponding pool tokens,\n * if for some reason is it necessary.\n */\n function safeApproveAllTokens()\n external\n override\n onlyGovernor\n nonReentrant\n {\n _approveBase();\n // This strategy is a special case since it only supports one asset\n for (uint256 i = 0; i < assetsMapped.length; i++) {\n _approveAsset(assetsMapped[i]);\n }\n }\n\n /**\n * @dev Call the necessary approvals for the Curve pool and gauge\n * @param _asset Address of the asset\n */\n function _abstractSetPToken(address _asset, address) internal override {\n _approveAsset(_asset);\n }\n\n function _approveAsset(address _asset) internal {\n IERC20 asset = IERC20(_asset);\n // 3Pool for asset (required for adding liquidity)\n asset.safeApprove(platformAddress, 0);\n asset.safeApprove(platformAddress, type(uint256).max);\n }\n\n function _approveBase() internal virtual;\n\n /**\n * @dev Get the index of the coin\n */\n function _getCoinIndex(address _asset) internal view returns (uint256) {\n for (uint256 i = 0; i < 3; i++) {\n if (assetsMapped[i] == _asset) return i;\n }\n revert(\"Invalid 3pool asset\");\n }\n}\n" + }, + "contracts/strategies/balancer/AbstractAuraStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title OETH Base Balancer Abstract Strategy\n * @author Origin Protocol Inc\n */\n\nimport { AbstractBalancerStrategy } from \"./AbstractBalancerStrategy.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC20 } from \"../../utils/InitializableAbstractStrategy.sol\";\nimport { IERC4626 } from \"../../../lib/openzeppelin/interfaces/IERC4626.sol\";\nimport { StableMath } from \"../../utils/StableMath.sol\";\nimport { IRewardStaking } from \"../IRewardStaking.sol\";\n\nabstract contract AbstractAuraStrategy is AbstractBalancerStrategy {\n using SafeERC20 for IERC20;\n using StableMath for uint256;\n\n /// @notice Address of the Aura rewards pool\n address public immutable auraRewardPoolAddress;\n\n // renamed from __reserved to not shadow AbstractBalancerStrategy.__reserved,\n int256[50] private __reserved_baseAuraStrategy;\n\n constructor(address _auraRewardPoolAddress) {\n auraRewardPoolAddress = _auraRewardPoolAddress;\n }\n\n /**\n * @dev Deposit all Balancer Pool Tokens (BPT) in this strategy contract\n * to the Aura rewards pool.\n */\n function _lpDepositAll() internal virtual override {\n uint256 bptBalance = IERC20(platformAddress).balanceOf(address(this));\n uint256 auraLp = IERC4626(auraRewardPoolAddress).deposit(\n bptBalance,\n address(this)\n );\n require(bptBalance == auraLp, \"Aura LP != BPT\");\n }\n\n /**\n * @dev Withdraw `numBPTTokens` Balancer Pool Tokens (BPT) from\n * the Aura rewards pool to this strategy contract.\n * @param numBPTTokens Number of Balancer Pool Tokens (BPT) to withdraw\n */\n function _lpWithdraw(uint256 numBPTTokens) internal virtual override {\n IRewardStaking(auraRewardPoolAddress).withdrawAndUnwrap(\n numBPTTokens,\n true // also claim reward tokens\n );\n }\n\n /**\n * @dev Withdraw all Balancer Pool Tokens (BPT) from\n * the Aura rewards pool to this strategy contract.\n */\n function _lpWithdrawAll() internal virtual override {\n // Get all the strategy's BPTs in Aura\n // maxRedeem is implemented as balanceOf(address) in Aura\n uint256 bptBalance = IERC4626(auraRewardPoolAddress).maxRedeem(\n address(this)\n );\n\n IRewardStaking(auraRewardPoolAddress).withdrawAndUnwrap(\n bptBalance,\n true // also claim reward tokens\n );\n }\n\n /**\n * @notice Collects BAL and AURA tokens from the rewards pool.\n */\n function collectRewardTokens()\n external\n virtual\n override\n onlyHarvester\n nonReentrant\n {\n /* Similar to Convex, calling this function collects both of the\n * accrued BAL and AURA tokens.\n */\n IRewardStaking(auraRewardPoolAddress).getReward();\n _collectRewardTokens();\n }\n\n /// @notice Balancer Pool Tokens (BPT) in the Balancer pool and the Aura rewards pool.\n function _getBalancerPoolTokens()\n internal\n view\n override\n returns (uint256 balancerPoolTokens)\n {\n balancerPoolTokens =\n IERC20(platformAddress).balanceOf(address(this)) +\n // maxRedeem is implemented as balanceOf(address) in Aura\n IERC4626(auraRewardPoolAddress).maxRedeem(address(this));\n }\n\n function _approveBase() internal virtual override {\n super._approveBase();\n\n IERC20 pToken = IERC20(platformAddress);\n pToken.safeApprove(auraRewardPoolAddress, type(uint256).max);\n }\n}\n" + }, + "contracts/strategies/balancer/AbstractBalancerStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title OETH Balancer Abstract Strategy\n * @author Origin Protocol Inc\n */\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC20, InitializableAbstractStrategy } from \"../../utils/InitializableAbstractStrategy.sol\";\nimport { IBalancerVault } from \"../../interfaces/balancer/IBalancerVault.sol\";\nimport { IRateProvider } from \"../../interfaces/balancer/IRateProvider.sol\";\nimport { VaultReentrancyLib } from \"./VaultReentrancyLib.sol\";\nimport { IOracle } from \"../../interfaces/IOracle.sol\";\nimport { IWstETH } from \"../../interfaces/IWstETH.sol\";\nimport { IERC4626 } from \"../../../lib/openzeppelin/interfaces/IERC4626.sol\";\nimport { StableMath } from \"../../utils/StableMath.sol\";\n\nabstract contract AbstractBalancerStrategy is InitializableAbstractStrategy {\n using SafeERC20 for IERC20;\n using StableMath for uint256;\n\n address public immutable rETH;\n address public immutable stETH;\n address public immutable wstETH;\n address public immutable frxETH;\n address public immutable sfrxETH;\n\n /// @notice Address of the Balancer vault\n IBalancerVault public immutable balancerVault;\n /// @notice Balancer pool identifier\n bytes32 public immutable balancerPoolId;\n\n // Max withdrawal deviation denominated in 1e18 (1e18 == 100%)\n uint256 public maxWithdrawalDeviation;\n // Max deposit deviation denominated in 1e18 (1e18 == 100%)\n uint256 public maxDepositDeviation;\n\n int256[48] private __reserved;\n\n struct BaseBalancerConfig {\n address rEthAddress; // Address of the rETH token\n address stEthAddress; // Address of the stETH token\n address wstEthAddress; // Address of the wstETH token\n address frxEthAddress; // Address of the frxEth token\n address sfrxEthAddress; // Address of the sfrxEth token\n address balancerVaultAddress; // Address of the Balancer vault\n bytes32 balancerPoolId; // Balancer pool identifier\n }\n\n event MaxWithdrawalDeviationUpdated(\n uint256 _prevMaxDeviationPercentage,\n uint256 _newMaxDeviationPercentage\n );\n event MaxDepositDeviationUpdated(\n uint256 _prevMaxDeviationPercentage,\n uint256 _newMaxDeviationPercentage\n );\n\n /**\n * @dev Ensure we are not in a Vault context when this function is called, by attempting a no-op internal\n * balance operation. If we are already in a Vault transaction (e.g., a swap, join, or exit), the Vault's\n * reentrancy protection will cause this function to revert.\n *\n * Use this modifier with any function that can cause a state change in a pool and is either public itself,\n * or called by a public function *outside* a Vault operation (e.g., join, exit, or swap).\n *\n * This is to protect against Balancer's read-only re-entrancy vulnerability:\n * https://www.notion.so/originprotocol/Balancer-read-only-reentrancy-c686e72c82414ef18fa34312bb02e11b\n */\n modifier whenNotInBalancerVaultContext() {\n VaultReentrancyLib.ensureNotInVaultContext(balancerVault);\n _;\n }\n\n constructor(BaseBalancerConfig memory _balancerConfig) {\n rETH = _balancerConfig.rEthAddress;\n stETH = _balancerConfig.stEthAddress;\n wstETH = _balancerConfig.wstEthAddress;\n frxETH = _balancerConfig.frxEthAddress;\n sfrxETH = _balancerConfig.sfrxEthAddress;\n\n balancerVault = IBalancerVault(_balancerConfig.balancerVaultAddress);\n balancerPoolId = _balancerConfig.balancerPoolId;\n }\n\n /**\n * Initializer for setting up strategy internal state. This overrides the\n * InitializableAbstractStrategy initializer as Balancer's strategies don't fit\n * well within that abstraction.\n * @param _rewardTokenAddresses Address of BAL & AURA\n * @param _assets Addresses of supported assets. MUST be passed in the same\n * order as returned by coins on the pool contract, i.e.\n * WETH, stETH\n * @param _pTokens Platform Token corresponding addresses\n */\n function initialize(\n address[] calldata _rewardTokenAddresses, // BAL & AURA\n address[] calldata _assets,\n address[] calldata _pTokens\n ) external onlyGovernor initializer {\n maxWithdrawalDeviation = 1e16;\n maxDepositDeviation = 1e16;\n\n emit MaxWithdrawalDeviationUpdated(0, maxWithdrawalDeviation);\n emit MaxDepositDeviationUpdated(0, maxDepositDeviation);\n\n IERC20[] memory poolAssets = _getPoolAssets();\n require(\n poolAssets.length == _assets.length,\n \"Pool assets length mismatch\"\n );\n for (uint256 i = 0; i < _assets.length; ++i) {\n address asset = _fromPoolAsset(address(poolAssets[i]));\n require(_assets[i] == asset, \"Pool assets mismatch\");\n }\n\n InitializableAbstractStrategy._initialize(\n _rewardTokenAddresses,\n _assets,\n _pTokens\n );\n _approveBase();\n }\n\n /**\n * @notice Returns bool indicating whether asset is supported by strategy\n * @param _asset Address of the asset\n */\n function supportsAsset(address _asset) public view override returns (bool) {\n return assetToPToken[_asset] != address(0);\n }\n\n /**\n * @notice Get strategy's share of an assets in the Balancer pool.\n * This is not denominated in OUSD/ETH value of the assets in the Balancer pool.\n * @param _asset Address of the Vault collateral asset\n * @return amount the amount of vault collateral assets\n *\n * IMPORTANT if this function is overridden it needs to have a whenNotInBalancerVaultContext\n * modifier on it or it is susceptible to read-only re-entrancy attack\n *\n * @dev it is important that this function is not affected by reporting inflated\n * values of assets in case of any pool manipulation. Such a manipulation could easily\n * exploit the protocol by:\n * - minting OETH\n * - tilting Balancer pool to report higher balances of assets\n * - rebasing() -> all that extra token balances get distributed to OETH holders\n * - tilting pool back\n * - redeeming OETH\n */\n function checkBalance(address _asset)\n external\n view\n virtual\n override\n whenNotInBalancerVaultContext\n returns (uint256 amount)\n {\n require(assetToPToken[_asset] != address(0), \"Unsupported asset\");\n\n uint256 bptBalance = _getBalancerPoolTokens();\n\n /* To calculate the worth of queried asset:\n * - assume that all tokens normalized to their ETH value have an equal split balance\n * in the pool when it is balanced\n * - multiply the BPT amount with the bpt rate to get the ETH denominated amount\n * of strategy's holdings\n * - divide that by the number of tokens we support in the pool to get ETH denominated\n * amount that is applicable to each supported token in the pool.\n *\n * It would be possible to support only 1 asset in the pool (and be exposed to all\n * the assets while holding BPT tokens) and deposit/withdraw/checkBalance using only\n * that asset. TBD: changes to other functions still required if we ever decide to\n * go with such configuration.\n */\n amount = (bptBalance.mulTruncate(\n IRateProvider(platformAddress).getRate()\n ) / assetsMapped.length);\n\n /* If the pool asset is equal to (strategy )_asset it means that a rate\n * provider for that asset exists and that asset is not necessarily\n * pegged to a unit (ETH).\n *\n * Because this function returns the balance of the asset and is not denominated in\n * ETH units we need to convert the ETH denominated amount to asset amount.\n */\n if (_toPoolAsset(_asset) == _asset) {\n amount = amount.divPrecisely(_getRateProviderRate(_asset));\n }\n }\n\n /**\n * @notice Returns the value of all assets managed by this strategy.\n * Uses the Balancer pool's rate (virtual price) to convert the strategy's\n * Balancer Pool Tokens (BPT) to ETH value.\n * @return value The ETH value\n *\n * IMPORTANT if this function is overridden it needs to have a whenNotInBalancerVaultContext\n * modifier on it or it is susceptible to read-only re-entrancy attack\n */\n function checkBalance()\n external\n view\n virtual\n whenNotInBalancerVaultContext\n returns (uint256 value)\n {\n uint256 bptBalance = _getBalancerPoolTokens();\n\n // Convert BPT to ETH value\n value = bptBalance.mulTruncate(\n IRateProvider(platformAddress).getRate()\n );\n }\n\n /// @notice Balancer Pool Tokens (BPT) in the Balancer pool.\n function _getBalancerPoolTokens()\n internal\n view\n virtual\n returns (uint256 balancerPoolTokens)\n {\n balancerPoolTokens = IERC20(platformAddress).balanceOf(address(this));\n }\n\n /* solhint-disable max-line-length */\n /**\n * @notice BPT price is calculated by taking the rate from the rateProvider of the asset in\n * question. If one does not exist it defaults to 1e18. To get the final BPT expected that\n * is multiplied by the underlying asset amount divided by BPT token rate. BPT token rate is\n * similar to Curve's virtual_price and expresses how much has the price of BPT appreciated\n * (e.g. due to swap fees) in relation to the underlying assets\n *\n * Using the above approach makes the strategy vulnerable to a possible MEV attack using\n * flash loan to manipulate the pool before a deposit/withdrawal since the function ignores\n * market values of the assets being priced in BPT.\n *\n * At the time of writing there is no safe on-chain approach to pricing BPT in a way that it\n * would make it invulnerable to MEV pool manipulation. See recent Balancer exploit:\n * https://www.notion.so/originprotocol/Balancer-OETH-strategy-9becdea132704e588782a919d7d471eb?pvs=4#1cf07de12fc64f1888072321e0644348\n *\n * To mitigate MEV possibilities during deposits and withdraws, the VaultValueChecker will use checkBalance before and after the move\n * to ensure the expected changes took place.\n *\n * @param _asset Address of the Balancer pool asset\n * @param _amount Amount of the Balancer pool asset\n * @return bptExpected of BPT expected in exchange for the asset\n *\n * @dev\n * bptAssetPrice = 1e18 (asset peg) * pool_asset_rate\n *\n * bptExpected = bptAssetPrice * asset_amount / BPT_token_rate\n *\n * bptExpected = 1e18 (asset peg) * pool_asset_rate * asset_amount / BPT_token_rate\n * bptExpected = asset_amount * pool_asset_rate / BPT_token_rate\n *\n * further information available here:\n * https://www.notion.so/originprotocol/Balancer-OETH-strategy-9becdea132704e588782a919d7d471eb?pvs=4#ce01495ae70346d8971f5dced809fb83\n */\n /* solhint-enable max-line-length */\n function _getBPTExpected(address _asset, uint256 _amount)\n internal\n view\n virtual\n returns (uint256 bptExpected)\n {\n uint256 bptRate = IRateProvider(platformAddress).getRate();\n uint256 poolAssetRate = _getRateProviderRate(_asset);\n bptExpected = _amount.mulTruncate(poolAssetRate).divPrecisely(bptRate);\n }\n\n function _getBPTExpected(\n address[] memory _assets,\n uint256[] memory _amounts\n ) internal view virtual returns (uint256 bptExpected) {\n require(_assets.length == _amounts.length, \"Assets & amounts mismatch\");\n\n for (uint256 i = 0; i < _assets.length; ++i) {\n uint256 poolAssetRate = _getRateProviderRate(_assets[i]);\n // convert asset amount to ETH amount\n bptExpected += _amounts[i].mulTruncate(poolAssetRate);\n }\n\n uint256 bptRate = IRateProvider(platformAddress).getRate();\n // Convert ETH amount to BPT amount\n bptExpected = bptExpected.divPrecisely(bptRate);\n }\n\n function _lpDepositAll() internal virtual;\n\n function _lpWithdraw(uint256 numBPTTokens) internal virtual;\n\n function _lpWithdrawAll() internal virtual;\n\n /**\n * @notice Balancer returns assets and rateProviders for corresponding assets ordered\n * by numerical order.\n */\n function _getPoolAssets() internal view returns (IERC20[] memory assets) {\n // slither-disable-next-line unused-return\n (assets, , ) = balancerVault.getPoolTokens(balancerPoolId);\n }\n\n /**\n * @dev If an asset is rebasing the Balancer pools have a wrapped versions of assets\n * that the strategy supports. This function converts the pool(wrapped) asset\n * and corresponding amount to strategy asset.\n */\n function _toPoolAsset(address asset, uint256 amount)\n internal\n view\n returns (address poolAsset, uint256 poolAmount)\n {\n if (asset == stETH) {\n poolAsset = wstETH;\n if (amount > 0) {\n poolAmount = IWstETH(wstETH).getWstETHByStETH(amount);\n }\n } else if (asset == frxETH) {\n poolAsset = sfrxETH;\n if (amount > 0) {\n poolAmount = IERC4626(sfrxETH).convertToShares(amount);\n }\n } else {\n poolAsset = asset;\n poolAmount = amount;\n }\n }\n\n /**\n * @dev Converts a Vault collateral asset to a Balancer pool asset.\n * stETH becomes wstETH, frxETH becomes sfrxETH and everything else stays the same.\n * @param asset Address of the Vault collateral asset.\n * @return Address of the Balancer pool asset.\n */\n function _toPoolAsset(address asset) internal view returns (address) {\n if (asset == stETH) {\n return wstETH;\n } else if (asset == frxETH) {\n return sfrxETH;\n }\n return asset;\n }\n\n /**\n * @dev Converts rebasing asset to its wrapped counterpart.\n */\n function _wrapPoolAsset(address asset, uint256 amount)\n internal\n returns (address wrappedAsset, uint256 wrappedAmount)\n {\n if (asset == stETH) {\n wrappedAsset = wstETH;\n if (amount > 0) {\n wrappedAmount = IWstETH(wstETH).wrap(amount);\n }\n } else if (asset == frxETH) {\n wrappedAsset = sfrxETH;\n if (amount > 0) {\n wrappedAmount = IERC4626(sfrxETH).deposit(\n amount,\n address(this)\n );\n }\n } else {\n wrappedAsset = asset;\n wrappedAmount = amount;\n }\n }\n\n /**\n * @dev Converts wrapped asset to its rebasing counterpart.\n */\n function _unwrapPoolAsset(address asset, uint256 amount)\n internal\n returns (uint256 unwrappedAmount)\n {\n if (asset == stETH) {\n unwrappedAmount = IWstETH(wstETH).unwrap(amount);\n } else if (asset == frxETH) {\n unwrappedAmount = IERC4626(sfrxETH).withdraw(\n amount,\n address(this),\n address(this)\n );\n } else {\n unwrappedAmount = amount;\n }\n }\n\n /**\n * @dev If an asset is rebasing the Balancer pools have a wrapped versions of assets\n * that the strategy supports. This function converts the rebasing strategy asset\n * and corresponding amount to wrapped(pool) asset.\n */\n function _fromPoolAsset(address poolAsset, uint256 poolAmount)\n internal\n view\n returns (address asset, uint256 amount)\n {\n if (poolAsset == wstETH) {\n asset = stETH;\n if (poolAmount > 0) {\n amount = IWstETH(wstETH).getStETHByWstETH(poolAmount);\n }\n } else if (poolAsset == sfrxETH) {\n asset = frxETH;\n if (poolAmount > 0) {\n amount = IERC4626(sfrxETH).convertToAssets(poolAmount);\n }\n } else {\n asset = poolAsset;\n amount = poolAmount;\n }\n }\n\n function _fromPoolAsset(address poolAsset)\n internal\n view\n returns (address asset)\n {\n if (poolAsset == wstETH) {\n asset = stETH;\n } else if (poolAsset == sfrxETH) {\n asset = frxETH;\n } else {\n asset = poolAsset;\n }\n }\n\n /**\n * @notice Sets max withdrawal deviation that is considered when removing\n * liquidity from Balancer pools.\n * @param _maxWithdrawalDeviation Max withdrawal deviation denominated in\n * wad (number with 18 decimals): 1e18 == 100%, 1e16 == 1%\n *\n * IMPORTANT Minimum maxWithdrawalDeviation will be 1% (1e16) for production\n * usage. Vault value checker in combination with checkBalance will\n * catch any unexpected manipulation.\n */\n function setMaxWithdrawalDeviation(uint256 _maxWithdrawalDeviation)\n external\n onlyVaultOrGovernorOrStrategist\n {\n require(\n _maxWithdrawalDeviation <= 1e18,\n \"Withdrawal dev. out of bounds\"\n );\n emit MaxWithdrawalDeviationUpdated(\n maxWithdrawalDeviation,\n _maxWithdrawalDeviation\n );\n maxWithdrawalDeviation = _maxWithdrawalDeviation;\n }\n\n /**\n * @notice Sets max deposit deviation that is considered when adding\n * liquidity to Balancer pools.\n * @param _maxDepositDeviation Max deposit deviation denominated in\n * wad (number with 18 decimals): 1e18 == 100%, 1e16 == 1%\n *\n * IMPORTANT Minimum maxDepositDeviation will default to 1% (1e16)\n * for production usage. Vault value checker in combination with\n * checkBalance will catch any unexpected manipulation.\n */\n function setMaxDepositDeviation(uint256 _maxDepositDeviation)\n external\n onlyVaultOrGovernorOrStrategist\n {\n require(_maxDepositDeviation <= 1e18, \"Deposit dev. out of bounds\");\n emit MaxDepositDeviationUpdated(\n maxDepositDeviation,\n _maxDepositDeviation\n );\n maxDepositDeviation = _maxDepositDeviation;\n }\n\n function _approveBase() internal virtual {\n IERC20 pToken = IERC20(platformAddress);\n // Balancer vault for BPT token (required for removing liquidity)\n pToken.safeApprove(address(balancerVault), type(uint256).max);\n }\n\n function _getRateProviderRate(address _asset)\n internal\n view\n virtual\n returns (uint256);\n}\n" + }, + "contracts/strategies/balancer/BalancerMetaPoolStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title OETH Balancer MetaStablePool Strategy\n * @author Origin Protocol Inc\n */\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { AbstractAuraStrategy, AbstractBalancerStrategy } from \"./AbstractAuraStrategy.sol\";\nimport { IBalancerVault } from \"../../interfaces/balancer/IBalancerVault.sol\";\nimport { IRateProvider } from \"../../interfaces/balancer/IRateProvider.sol\";\nimport { IMetaStablePool } from \"../../interfaces/balancer/IMetaStablePool.sol\";\nimport { IERC20, InitializableAbstractStrategy } from \"../../utils/InitializableAbstractStrategy.sol\";\nimport { StableMath } from \"../../utils/StableMath.sol\";\n\ncontract BalancerMetaPoolStrategy is AbstractAuraStrategy {\n using SafeERC20 for IERC20;\n using StableMath for uint256;\n\n constructor(\n BaseStrategyConfig memory _stratConfig,\n BaseBalancerConfig memory _balancerConfig,\n address _auraRewardPoolAddress\n )\n InitializableAbstractStrategy(_stratConfig)\n AbstractBalancerStrategy(_balancerConfig)\n AbstractAuraStrategy(_auraRewardPoolAddress)\n {}\n\n /**\n * @notice There are no plans to configure BalancerMetaPool as a default\n * asset strategy. For that reason there is no need to support this\n * functionality.\n */\n function deposit(address, uint256)\n external\n override\n onlyVault\n nonReentrant\n {\n revert(\"Not supported\");\n }\n\n /**\n * @notice There are no plans to configure BalancerMetaPool as a default\n * asset strategy. For that reason there is no need to support this\n * functionality.\n */\n function deposit(address[] calldata, uint256[] calldata)\n external\n onlyVault\n nonReentrant\n {\n revert(\"Not supported\");\n }\n\n /**\n * @notice Deposits all supported assets in this strategy contract to the Balancer pool.\n */\n function depositAll() external override onlyVault nonReentrant {\n uint256 assetsLength = assetsMapped.length;\n address[] memory strategyAssets = new address[](assetsLength);\n uint256[] memory strategyAmounts = new uint256[](assetsLength);\n\n // For each vault collateral asset\n for (uint256 i = 0; i < assetsLength; ++i) {\n strategyAssets[i] = assetsMapped[i];\n // Get the asset balance in this strategy contract\n strategyAmounts[i] = IERC20(strategyAssets[i]).balanceOf(\n address(this)\n );\n }\n _deposit(strategyAssets, strategyAmounts);\n }\n\n /*\n * _deposit doesn't require a read-only re-entrancy protection since during the deposit\n * the function enters the Balancer Vault Context. If this function were called as part of\n * the attacking contract (while intercepting execution flow upon receiving ETH) the read-only\n * protection of the Balancer Vault would be triggered. Since the attacking contract would\n * already be in the Balancer Vault context and wouldn't be able to enter it again.\n */\n function _deposit(\n address[] memory _strategyAssets,\n uint256[] memory _strategyAmounts\n ) internal {\n require(\n _strategyAssets.length == _strategyAmounts.length,\n \"Array length missmatch\"\n );\n\n (IERC20[] memory tokens, , ) = balancerVault.getPoolTokens(\n balancerPoolId\n );\n\n uint256[] memory strategyAssetAmountsToPoolAssetAmounts = new uint256[](\n _strategyAssets.length\n );\n address[] memory strategyAssetsToPoolAssets = new address[](\n _strategyAssets.length\n );\n\n for (uint256 i = 0; i < _strategyAssets.length; ++i) {\n address strategyAsset = _strategyAssets[i];\n uint256 strategyAmount = _strategyAmounts[i];\n\n require(\n assetToPToken[strategyAsset] != address(0),\n \"Unsupported asset\"\n );\n strategyAssetsToPoolAssets[i] = _toPoolAsset(strategyAsset);\n\n if (strategyAmount > 0) {\n emit Deposit(strategyAsset, platformAddress, strategyAmount);\n\n // wrap rebasing assets like stETH and frxETH to wstETH and sfrxETH\n (, strategyAssetAmountsToPoolAssetAmounts[i]) = _wrapPoolAsset(\n strategyAsset,\n strategyAmount\n );\n }\n }\n\n uint256[] memory amountsIn = new uint256[](tokens.length);\n address[] memory poolAssets = new address[](tokens.length);\n for (uint256 i = 0; i < tokens.length; ++i) {\n // Convert IERC20 type to address\n poolAssets[i] = address(tokens[i]);\n\n // For each of the mapped assets\n for (uint256 j = 0; j < strategyAssetsToPoolAssets.length; ++j) {\n // If the pool asset is the same as the mapped asset\n if (poolAssets[i] == strategyAssetsToPoolAssets[j]) {\n amountsIn[i] = strategyAssetAmountsToPoolAssetAmounts[j];\n }\n }\n }\n\n uint256 minBPT = _getBPTExpected(\n strategyAssetsToPoolAssets,\n strategyAssetAmountsToPoolAssetAmounts\n );\n uint256 minBPTwDeviation = minBPT.mulTruncate(\n 1e18 - maxDepositDeviation\n );\n\n /* EXACT_TOKENS_IN_FOR_BPT_OUT:\n * User sends precise quantities of tokens, and receives an\n * estimated but unknown (computed at run time) quantity of BPT.\n *\n * ['uint256', 'uint256[]', 'uint256']\n * [EXACT_TOKENS_IN_FOR_BPT_OUT, amountsIn, minimumBPT]\n */\n bytes memory userData = abi.encode(\n IBalancerVault.WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT,\n amountsIn,\n minBPTwDeviation\n );\n\n IBalancerVault.JoinPoolRequest memory request = IBalancerVault\n .JoinPoolRequest(poolAssets, amountsIn, userData, false);\n\n // Add the pool assets in this strategy to the balancer pool\n balancerVault.joinPool(\n balancerPoolId,\n address(this),\n address(this),\n request\n );\n\n // Deposit the Balancer Pool Tokens (BPT) into Aura\n _lpDepositAll();\n }\n\n /**\n * @notice Withdraw a Vault collateral asset from the Balancer pool.\n * @param _recipient Address to receive the Vault collateral assets. Typically is the Vault.\n * @param _strategyAsset Address of the Vault collateral asset\n * @param _strategyAmount The amount of Vault collateral assets to withdraw\n */\n function withdraw(\n address _recipient,\n address _strategyAsset,\n uint256 _strategyAmount\n ) external override onlyVault nonReentrant {\n address[] memory strategyAssets = new address[](1);\n uint256[] memory strategyAmounts = new uint256[](1);\n strategyAssets[0] = _strategyAsset;\n strategyAmounts[0] = _strategyAmount;\n\n _withdraw(_recipient, strategyAssets, strategyAmounts);\n }\n\n /**\n * @notice Withdraw multiple Vault collateral asset from the Balancer pool.\n * @param _recipient Address to receive the Vault collateral assets. Typically is the Vault.\n * @param _strategyAssets Addresses of the Vault collateral assets\n * @param _strategyAmounts The amounts of Vault collateral assets to withdraw\n */\n function withdraw(\n address _recipient,\n address[] calldata _strategyAssets,\n uint256[] calldata _strategyAmounts\n ) external onlyVault nonReentrant {\n _withdraw(_recipient, _strategyAssets, _strategyAmounts);\n }\n\n /**\n * @dev Withdraw multiple Vault collateral asset from the Balancer pool.\n * @param _recipient Address to receive the Vault collateral assets. Typically is the Vault.\n * @param _strategyAssets Addresses of the Vault collateral assets\n * @param _strategyAmounts The amounts of Vault collateral assets to withdraw\n *\n * _withdrawal doesn't require a read-only re-entrancy protection since during the withdrawal\n * the function enters the Balancer Vault Context. If this function were called as part of\n * the attacking contract (while intercepting execution flow upon receiving ETH) the read-only\n * protection of the Balancer Vault would be triggered. Since the attacking contract would\n * already be in the Balancer Vault context and wouldn't be able to enter it again.\n */\n function _withdraw(\n address _recipient,\n address[] memory _strategyAssets,\n uint256[] memory _strategyAmounts\n ) internal {\n require(\n _strategyAssets.length == _strategyAmounts.length,\n \"Invalid input arrays\"\n );\n\n for (uint256 i = 0; i < _strategyAssets.length; ++i) {\n require(\n assetToPToken[_strategyAssets[i]] != address(0),\n \"Unsupported asset\"\n );\n }\n\n // STEP 1 - Calculate the Balancer pool assets and amounts from the vault collateral assets\n\n // Get all the supported balancer pool assets\n (IERC20[] memory tokens, , ) = balancerVault.getPoolTokens(\n balancerPoolId\n );\n // Calculate the balancer pool assets and amounts to withdraw\n uint256[] memory poolAssetsAmountsOut = new uint256[](tokens.length);\n address[] memory poolAssets = new address[](tokens.length);\n // Is the wrapped asset amount indexed by the assets array, not the order of the Balancer pool tokens\n // eg wstETH and sfrxETH amounts, not the stETH and frxETH amounts\n uint256[] memory strategyAssetsToPoolAssetsAmounts = new uint256[](\n _strategyAssets.length\n );\n\n // For each of the Balancer pool assets\n for (uint256 i = 0; i < tokens.length; ++i) {\n poolAssets[i] = address(tokens[i]);\n\n // Convert the Balancer pool asset back to a vault collateral asset\n address strategyAsset = _fromPoolAsset(poolAssets[i]);\n\n // for each of the vault assets\n for (uint256 j = 0; j < _strategyAssets.length; ++j) {\n // If the vault asset equals the vault asset mapped from the Balancer pool asset\n if (_strategyAssets[j] == strategyAsset) {\n (, poolAssetsAmountsOut[i]) = _toPoolAsset(\n strategyAsset,\n _strategyAmounts[j]\n );\n strategyAssetsToPoolAssetsAmounts[j] = poolAssetsAmountsOut[\n i\n ];\n\n /* Because of the potential Balancer rounding error mentioned below\n * the contract might receive 1-2 WEI smaller amount than required\n * in the withdraw user data encoding. If slightly lesser token amount\n * is received the strategy can not unwrap the pool asset as it is\n * smaller than expected.\n *\n * For that reason we `overshoot` the required tokens expected to\n * circumvent the error\n */\n if (poolAssetsAmountsOut[i] > 0) {\n poolAssetsAmountsOut[i] += 2;\n }\n }\n }\n }\n\n // STEP 2 - Calculate the max about of Balancer Pool Tokens (BPT) to withdraw\n\n // Estimate the required amount of Balancer Pool Tokens (BPT) for the assets\n uint256 maxBPTtoWithdraw = _getBPTExpected(\n poolAssets,\n /* all non 0 values are overshot by 2 WEI and with the expected mainnet\n * ~1% withdrawal deviation, the 2 WEI aren't important\n */\n poolAssetsAmountsOut\n );\n // Increase BPTs by the max allowed deviation\n // Any excess BPTs will be left in this strategy contract\n maxBPTtoWithdraw = maxBPTtoWithdraw.mulTruncate(\n 1e18 + maxWithdrawalDeviation\n );\n\n // STEP 3 - Withdraw the Balancer Pool Tokens (BPT) from Aura to this strategy contract\n\n // Withdraw BPT from Aura allowing for BPTs left in this strategy contract from previous withdrawals\n _lpWithdraw(\n maxBPTtoWithdraw - IERC20(platformAddress).balanceOf(address(this))\n );\n\n // STEP 4 - Withdraw the balancer pool assets from the pool\n\n /* Custom asset exit: BPT_IN_FOR_EXACT_TOKENS_OUT:\n * User sends an estimated but unknown (computed at run time) quantity of BPT,\n * and receives precise quantities of specified tokens.\n *\n * ['uint256', 'uint256[]', 'uint256']\n * [BPT_IN_FOR_EXACT_TOKENS_OUT, amountsOut, maxBPTAmountIn]\n */\n bytes memory userData = abi.encode(\n IBalancerVault.WeightedPoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT,\n poolAssetsAmountsOut,\n maxBPTtoWithdraw\n );\n\n IBalancerVault.ExitPoolRequest memory request = IBalancerVault\n .ExitPoolRequest(\n poolAssets,\n /* We specify the exact amount of a tokens we are expecting in the encoded\n * userData, for that reason we don't need to specify the amountsOut here.\n *\n * Also Balancer has a rounding issue that can make a transaction fail:\n * https://github.com/balancer/balancer-v2-monorepo/issues/2541\n * which is an extra reason why this field is empty.\n */\n new uint256[](tokens.length),\n userData,\n false\n );\n\n balancerVault.exitPool(\n balancerPoolId,\n address(this),\n /* Payable keyword is required because of the IBalancerVault interface even though\n * this strategy shall never be receiving native ETH\n */\n payable(address(this)),\n request\n );\n\n // STEP 5 - Re-deposit any left over BPT tokens back into Aura\n /* When concluding how much of BPT we need to withdraw from Aura we overshoot by\n * roughly around 1% (initial mainnet setting of maxWithdrawalDeviation). After exiting\n * the pool strategy could have left over BPT tokens that are not earning boosted yield.\n * We re-deploy those back in.\n */\n _lpDepositAll();\n\n // STEP 6 - Unswap balancer pool assets to vault collateral assets and send to the vault.\n\n // For each of the specified assets\n for (uint256 i = 0; i < _strategyAssets.length; ++i) {\n // Unwrap assets like wstETH and sfrxETH to rebasing assets stETH and frxETH\n if (strategyAssetsToPoolAssetsAmounts[i] > 0) {\n _unwrapPoolAsset(\n _strategyAssets[i],\n strategyAssetsToPoolAssetsAmounts[i]\n );\n }\n\n // Transfer the vault collateral assets to the recipient, which is typically the vault\n if (_strategyAmounts[i] > 0) {\n IERC20(_strategyAssets[i]).safeTransfer(\n _recipient,\n _strategyAmounts[i]\n );\n\n emit Withdrawal(\n _strategyAssets[i],\n platformAddress,\n _strategyAmounts[i]\n );\n }\n }\n }\n\n /**\n * @notice Withdraws all supported Vault collateral assets from the Balancer pool\n * and send to the OToken's Vault.\n *\n * Is only executable by the OToken's Vault or the Governor.\n */\n function withdrawAll() external override onlyVaultOrGovernor nonReentrant {\n // STEP 1 - Withdraw all Balancer Pool Tokens (BPT) from Aura to this strategy contract\n\n _lpWithdrawAll();\n // Get the BPTs withdrawn from Aura plus any that were already in this strategy contract\n uint256 BPTtoWithdraw = IERC20(platformAddress).balanceOf(\n address(this)\n );\n // Get the balancer pool assets and their total balances\n (IERC20[] memory tokens, , ) = balancerVault.getPoolTokens(\n balancerPoolId\n );\n uint256[] memory minAmountsOut = new uint256[](tokens.length);\n address[] memory poolAssets = new address[](tokens.length);\n for (uint256 i = 0; i < tokens.length; ++i) {\n poolAssets[i] = address(tokens[i]);\n }\n\n // STEP 2 - Withdraw the Balancer pool assets from the pool\n /* Proportional exit: EXACT_BPT_IN_FOR_TOKENS_OUT:\n * User sends a precise quantity of BPT, and receives an estimated but unknown\n * (computed at run time) quantity of a single token\n *\n * ['uint256', 'uint256']\n * [EXACT_BPT_IN_FOR_TOKENS_OUT, bptAmountIn]\n *\n * It is ok to pass an empty minAmountsOut since tilting the pool in any direction\n * when doing a proportional exit can only be beneficial to the strategy. Since\n * it will receive more of the underlying tokens for the BPT traded in.\n */\n bytes memory userData = abi.encode(\n IBalancerVault.WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT,\n BPTtoWithdraw\n );\n\n IBalancerVault.ExitPoolRequest memory request = IBalancerVault\n .ExitPoolRequest(poolAssets, minAmountsOut, userData, false);\n\n balancerVault.exitPool(\n balancerPoolId,\n address(this),\n /* Payable keyword is required because of the IBalancerVault interface even though\n * this strategy shall never be receiving native ETH\n */\n payable(address(this)),\n request\n );\n\n // STEP 3 - Convert the balancer pool assets to the vault collateral assets and send to the vault\n // For each of the Balancer pool assets\n for (uint256 i = 0; i < tokens.length; ++i) {\n address poolAsset = address(tokens[i]);\n // Convert the balancer pool asset to the strategy asset\n address strategyAsset = _fromPoolAsset(poolAsset);\n // Get the balancer pool assets withdraw from the pool plus any that were already in this strategy contract\n uint256 poolAssetAmount = IERC20(poolAsset).balanceOf(\n address(this)\n );\n\n // Unwrap assets like wstETH and sfrxETH to rebasing assets stETH and frxETH\n uint256 unwrappedAmount = 0;\n if (poolAssetAmount > 0) {\n unwrappedAmount = _unwrapPoolAsset(\n strategyAsset,\n poolAssetAmount\n );\n }\n\n // Transfer the vault collateral assets to the vault\n if (unwrappedAmount > 0) {\n IERC20(strategyAsset).safeTransfer(\n vaultAddress,\n unwrappedAmount\n );\n emit Withdrawal(\n strategyAsset,\n platformAddress,\n unwrappedAmount\n );\n }\n }\n }\n\n /**\n * @notice Approves the Balancer Vault to transfer poolAsset counterparts\n * of all of the supported assets from this strategy. E.g. stETH is a supported\n * strategy and Balancer Vault gets unlimited approval to transfer wstETH.\n *\n * If Balancer pool uses a wrapped version of a supported asset then also approve\n * unlimited usage of an asset to the contract responsible for wrapping.\n *\n * Approve unlimited spending by Balancer Vault and Aura reward pool of the\n * pool BPT tokens.\n *\n * Is only executable by the Governor.\n */\n function safeApproveAllTokens()\n external\n override\n onlyGovernor\n nonReentrant\n {\n uint256 assetCount = assetsMapped.length;\n for (uint256 i = 0; i < assetCount; ++i) {\n _abstractSetPToken(assetsMapped[i], platformAddress);\n }\n _approveBase();\n }\n\n // solhint-disable-next-line no-unused-vars\n function _abstractSetPToken(address _asset, address) internal override {\n address poolAsset = _toPoolAsset(_asset);\n if (_asset == stETH) {\n // slither-disable-next-line unused-return\n IERC20(stETH).approve(wstETH, type(uint256).max);\n } else if (_asset == frxETH) {\n // slither-disable-next-line unused-return\n IERC20(frxETH).approve(sfrxETH, type(uint256).max);\n }\n _approveAsset(poolAsset);\n }\n\n /**\n * @dev Approves the Balancer Vault to transfer an asset from\n * this strategy. The assets could be a Vault collateral asset\n * like WETH or rETH; or a Balancer pool asset that wraps the vault asset\n * like wstETH or sfrxETH.\n */\n function _approveAsset(address _asset) internal {\n IERC20 asset = IERC20(_asset);\n // slither-disable-next-line unused-return\n asset.approve(address(balancerVault), type(uint256).max);\n }\n\n /**\n * @notice Returns the rate supplied by the Balancer configured rate\n * provider. Rate is used to normalize the token to common underlying\n * pool denominator. (ETH for ETH Liquid staking derivatives)\n *\n * @param _asset Address of the Balancer pool asset\n * @return rate of the corresponding asset\n */\n function _getRateProviderRate(address _asset)\n internal\n view\n override\n returns (uint256)\n {\n IMetaStablePool pool = IMetaStablePool(platformAddress);\n IRateProvider[] memory providers = pool.getRateProviders();\n (IERC20[] memory tokens, , ) = balancerVault.getPoolTokens(\n balancerPoolId\n );\n\n uint256 providersLength = providers.length;\n for (uint256 i = 0; i < providersLength; ++i) {\n // _assets and corresponding rate providers are all in the same order\n if (address(tokens[i]) == _asset) {\n // rate provider doesn't exist, defaults to 1e18\n if (address(providers[i]) == address(0)) {\n return 1e18;\n }\n return providers[i].getRate();\n }\n }\n\n // should never happen\n assert(false);\n }\n}\n" + }, + "contracts/strategies/balancer/VaultReentrancyLib.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity >=0.7.0 <0.9.0;\n\nimport \"../../utils/BalancerErrors.sol\";\nimport { IBalancerVault } from \"../../interfaces/balancer/IBalancerVault.sol\";\n\nlibrary VaultReentrancyLib {\n /**\n * @dev Ensure we are not in a Vault context when this function is called, by attempting a no-op internal\n * balance operation. If we are already in a Vault transaction (e.g., a swap, join, or exit), the Vault's\n * reentrancy protection will cause this function to revert.\n *\n * The exact function call doesn't really matter: we're just trying to trigger the Vault reentrancy check\n * (and not hurt anything in case it works). An empty operation array with no specific operation at all works\n * for that purpose, and is also the least expensive in terms of gas and bytecode size.\n *\n * Call this at the top of any function that can cause a state change in a pool and is either public itself,\n * or called by a public function *outside* a Vault operation (e.g., join, exit, or swap).\n *\n * If this is *not* called in functions that are vulnerable to the read-only reentrancy issue described\n * here (https://forum.balancer.fi/t/reentrancy-vulnerability-scope-expanded/4345), those functions are unsafe,\n * and subject to manipulation that may result in loss of funds.\n */\n function ensureNotInVaultContext(IBalancerVault vault) internal view {\n // Perform the following operation to trigger the Vault's reentrancy guard:\n //\n // IBalancerVault.UserBalanceOp[] memory noop = new IBalancerVault.UserBalanceOp[](0);\n // _vault.manageUserBalance(noop);\n //\n // However, use a static call so that it can be a view function (even though the function is non-view).\n // This allows the library to be used more widely, as some functions that need to be protected might be\n // view.\n //\n // This staticcall always reverts, but we need to make sure it doesn't fail due to a re-entrancy attack.\n // Staticcalls consume all gas forwarded to them on a revert caused by storage modification.\n // By default, almost the entire available gas is forwarded to the staticcall,\n // causing the entire call to revert with an 'out of gas' error.\n //\n // We set the gas limit to 10k for the staticcall to\n // avoid wasting gas when it reverts due to storage modification.\n // `manageUserBalance` is a non-reentrant function in the Vault, so calling it invokes `_enterNonReentrant`\n // in the `ReentrancyGuard` contract, reproduced here:\n //\n // function _enterNonReentrant() private {\n // // If the Vault is actually being reentered, it will revert in the first line, at the `_require` that\n // // checks the reentrancy flag, with \"BAL#400\" (corresponding to Errors.REENTRANCY) in the revertData.\n // // The full revertData will be: `abi.encodeWithSignature(\"Error(string)\", \"BAL#400\")`.\n // _require(_status != _ENTERED, Errors.REENTRANCY);\n //\n // // If the Vault is not being reentered, the check above will pass: but it will *still* revert,\n // // because the next line attempts to modify storage during a staticcall. However, this type of\n // // failure results in empty revertData.\n // _status = _ENTERED;\n // }\n //\n // So based on this analysis, there are only two possible revertData values: empty, or abi.encoded BAL#400.\n //\n // It is of course much more bytecode and gas efficient to check for zero-length revertData than to compare it\n // to the encoded REENTRANCY revertData.\n //\n // While it should be impossible for the call to fail in any other way (especially since it reverts before\n // `manageUserBalance` even gets called), any other error would generate non-zero revertData, so checking for\n // empty data guards against this case too.\n\n (, bytes memory revertData) = address(vault).staticcall{ gas: 10_000 }(\n abi.encodeWithSelector(vault.manageUserBalance.selector, 0)\n );\n\n _require(revertData.length == 0, Errors.REENTRANCY);\n }\n}\n" + }, + "contracts/strategies/CompoundStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Compound Strategy\n * @notice Investment strategy for Compound like lending platforms. eg Compound and Flux\n * @author Origin Protocol Inc\n */\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport { ICERC20 } from \"./ICompound.sol\";\nimport { AbstractCompoundStrategy, InitializableAbstractStrategy } from \"./AbstractCompoundStrategy.sol\";\nimport { IComptroller } from \"../interfaces/IComptroller.sol\";\nimport { IERC20 } from \"../utils/InitializableAbstractStrategy.sol\";\n\ncontract CompoundStrategy is AbstractCompoundStrategy {\n using SafeERC20 for IERC20;\n event SkippedWithdrawal(address asset, uint256 amount);\n\n constructor(BaseStrategyConfig memory _stratConfig)\n InitializableAbstractStrategy(_stratConfig)\n {}\n\n /**\n * @notice initialize function, to set up initial internal state\n * @param _rewardTokenAddresses Address of reward token for platform\n * @param _assets Addresses of initial supported assets\n * @param _pTokens Platform Token corresponding addresses\n */\n function initialize(\n address[] memory _rewardTokenAddresses,\n address[] memory _assets,\n address[] memory _pTokens\n ) external onlyGovernor initializer {\n InitializableAbstractStrategy._initialize(\n _rewardTokenAddresses,\n _assets,\n _pTokens\n );\n }\n\n /**\n * @notice Collect accumulated COMP and send to Harvester.\n */\n function collectRewardTokens()\n external\n virtual\n override\n onlyHarvester\n nonReentrant\n {\n // Claim COMP from Comptroller\n ICERC20 cToken = _getCTokenFor(assetsMapped[0]);\n IComptroller comptroller = IComptroller(cToken.comptroller());\n // Only collect from active cTokens, saves gas\n address[] memory ctokensToCollect = new address[](assetsMapped.length);\n uint256 assetCount = assetsMapped.length;\n for (uint256 i = 0; i < assetCount; ++i) {\n ctokensToCollect[i] = address(_getCTokenFor(assetsMapped[i]));\n }\n // Claim only for this strategy\n address[] memory claimers = new address[](1);\n claimers[0] = address(this);\n // Claim COMP from Comptroller. Only collect for supply, saves gas\n comptroller.claimComp(claimers, ctokensToCollect, false, true);\n // Transfer COMP to Harvester\n IERC20 rewardToken = IERC20(rewardTokenAddresses[0]);\n uint256 balance = rewardToken.balanceOf(address(this));\n emit RewardTokenCollected(\n harvesterAddress,\n rewardTokenAddresses[0],\n balance\n );\n rewardToken.safeTransfer(harvesterAddress, balance);\n }\n\n /**\n * @notice Deposit asset into the underlying platform\n * @param _asset Address of asset to deposit\n * @param _amount Amount of assets to deposit\n */\n function deposit(address _asset, uint256 _amount)\n external\n override\n onlyVault\n nonReentrant\n {\n _deposit(_asset, _amount);\n }\n\n /**\n * @dev Deposit an asset into the underlying platform\n * @param _asset Address of the asset to deposit\n * @param _amount Amount of assets to deposit\n */\n function _deposit(address _asset, uint256 _amount) internal {\n require(_amount > 0, \"Must deposit something\");\n ICERC20 cToken = _getCTokenFor(_asset);\n emit Deposit(_asset, address(cToken), _amount);\n require(cToken.mint(_amount) == 0, \"cToken mint failed\");\n }\n\n /**\n * @notice Deposit the entire balance of any supported asset in the strategy into the underlying platform\n */\n function depositAll() external override onlyVault nonReentrant {\n uint256 assetCount = assetsMapped.length;\n for (uint256 i = 0; i < assetCount; ++i) {\n IERC20 asset = IERC20(assetsMapped[i]);\n uint256 assetBalance = asset.balanceOf(address(this));\n if (assetBalance > 0) {\n _deposit(address(asset), assetBalance);\n }\n }\n }\n\n /**\n * @notice Withdraw an asset from the underlying platform\n * @param _recipient Address to receive withdrawn assets\n * @param _asset Address of the asset to withdraw\n * @param _amount Amount of assets to withdraw\n */\n function withdraw(\n address _recipient,\n address _asset,\n uint256 _amount\n ) external override onlyVault nonReentrant {\n require(_amount > 0, \"Must withdraw something\");\n require(_recipient != address(0), \"Must specify recipient\");\n\n ICERC20 cToken = _getCTokenFor(_asset);\n // If redeeming 0 cTokens, just skip, else COMP will revert\n uint256 cTokensToRedeem = _convertUnderlyingToCToken(cToken, _amount);\n if (cTokensToRedeem == 0) {\n emit SkippedWithdrawal(_asset, _amount);\n return;\n }\n\n emit Withdrawal(_asset, address(cToken), _amount);\n require(cToken.redeemUnderlying(_amount) == 0, \"Redeem failed\");\n IERC20(_asset).safeTransfer(_recipient, _amount);\n }\n\n /**\n * @dev Internal method to respond to the addition of new asset / cTokens\n * We need to approve the cToken and give it permission to spend the asset\n * @param _asset Address of the asset to approve. eg DAI\n * @param _pToken The pToken for the approval. eg cDAI or fDAI\n */\n function _abstractSetPToken(address _asset, address _pToken)\n internal\n override\n {\n // Safe approval\n IERC20(_asset).safeApprove(_pToken, 0);\n IERC20(_asset).safeApprove(_pToken, type(uint256).max);\n }\n\n /**\n * @notice Remove all supported assets from the underlying platform and send them to Vault contract.\n */\n function withdrawAll() external override onlyVaultOrGovernor nonReentrant {\n uint256 assetCount = assetsMapped.length;\n for (uint256 i = 0; i < assetCount; ++i) {\n IERC20 asset = IERC20(assetsMapped[i]);\n // Redeem entire balance of cToken\n ICERC20 cToken = _getCTokenFor(address(asset));\n uint256 cTokenBalance = cToken.balanceOf(address(this));\n if (cTokenBalance > 0) {\n require(cToken.redeem(cTokenBalance) == 0, \"Redeem failed\");\n uint256 assetBalance = asset.balanceOf(address(this));\n // Transfer entire balance to Vault\n asset.safeTransfer(vaultAddress, assetBalance);\n\n emit Withdrawal(address(asset), address(cToken), assetBalance);\n }\n }\n }\n\n /**\n * @notice Get the total asset value held in the underlying platform\n * This includes any interest that was generated since depositing.\n * The exchange rate between the cToken and asset gradually increases,\n * causing the cToken to be worth more corresponding asset.\n * @param _asset Address of the asset\n * @return balance Total value of the asset in the platform\n */\n function checkBalance(address _asset)\n external\n view\n override\n returns (uint256 balance)\n {\n // Balance is always with token cToken decimals\n ICERC20 cToken = _getCTokenFor(_asset);\n balance = _checkBalance(cToken);\n }\n\n /**\n * @dev Get the total asset value held in the platform\n * underlying = (cTokenAmt * exchangeRate) / 1e18\n * @param _cToken cToken for which to check balance\n * @return balance Total value of the asset in the platform\n */\n function _checkBalance(ICERC20 _cToken)\n internal\n view\n returns (uint256 balance)\n {\n // e.g. 50e8*205316390724364402565641705 / 1e18 = 1.0265..e18\n balance =\n (_cToken.balanceOf(address(this)) * _cToken.exchangeRateStored()) /\n 1e18;\n }\n\n /**\n * @notice Approve the spending of all assets by their corresponding cToken,\n * if for some reason is it necessary.\n */\n function safeApproveAllTokens() external override {\n uint256 assetCount = assetsMapped.length;\n for (uint256 i = 0; i < assetCount; ++i) {\n IERC20 asset = IERC20(assetsMapped[i]);\n address cToken = assetToPToken[address(asset)];\n // Safe approval\n asset.safeApprove(cToken, 0);\n asset.safeApprove(cToken, type(uint256).max);\n }\n }\n}\n" + }, + "contracts/strategies/ConvexEthMetaStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Convex Automated Market Maker (AMO) Strategy\n * @notice AMO strategy for the Curve OETH/ETH pool\n * @author Origin Protocol Inc\n */\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport \"@openzeppelin/contracts/utils/math/Math.sol\";\n\nimport { ICurveETHPoolV1 } from \"./ICurveETHPoolV1.sol\";\nimport { IERC20, InitializableAbstractStrategy } from \"../utils/InitializableAbstractStrategy.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\nimport { IVault } from \"../interfaces/IVault.sol\";\nimport { IWETH9 } from \"../interfaces/IWETH9.sol\";\nimport { IConvexDeposits } from \"./IConvexDeposits.sol\";\nimport { IRewardStaking } from \"./IRewardStaking.sol\";\n\ncontract ConvexEthMetaStrategy is InitializableAbstractStrategy {\n using StableMath for uint256;\n using SafeERC20 for IERC20;\n\n uint256 public constant MAX_SLIPPAGE = 1e16; // 1%, same as the Curve UI\n address public constant ETH_ADDRESS =\n 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\n\n // The following slots have been deprecated with immutable variables\n // slither-disable-next-line constable-states\n address private _deprecated_cvxDepositorAddress;\n // slither-disable-next-line constable-states\n address private _deprecated_cvxRewardStaker;\n // slither-disable-next-line constable-states\n uint256 private _deprecated_cvxDepositorPTokenId;\n // slither-disable-next-line constable-states\n address private _deprecated_curvePool;\n // slither-disable-next-line constable-states\n address private _deprecated_lpToken;\n // slither-disable-next-line constable-states\n address private _deprecated_oeth;\n // slither-disable-next-line constable-states\n address private _deprecated_weth;\n\n // Ordered list of pool assets\n // slither-disable-next-line constable-states\n uint128 private _deprecated_oethCoinIndex;\n // slither-disable-next-line constable-states\n uint128 private _deprecated_ethCoinIndex;\n\n // New immutable variables that must be set in the constructor\n address public immutable cvxDepositorAddress;\n IRewardStaking public immutable cvxRewardStaker;\n uint256 public immutable cvxDepositorPTokenId;\n ICurveETHPoolV1 public immutable curvePool;\n IERC20 public immutable lpToken;\n IERC20 public immutable oeth;\n IWETH9 public immutable weth;\n\n // Ordered list of pool assets\n uint128 public constant oethCoinIndex = 1;\n uint128 public constant ethCoinIndex = 0;\n\n /**\n * @dev Verifies that the caller is the Strategist.\n */\n modifier onlyStrategist() {\n require(\n msg.sender == IVault(vaultAddress).strategistAddr(),\n \"Caller is not the Strategist\"\n );\n _;\n }\n\n /**\n * @dev Checks the Curve pool's balances have improved and the balances\n * have not tipped to the other side.\n * This modifier only works on functions that do a single sided add or remove.\n * The standard deposit function adds to both sides of the pool in a way that\n * the pool's balance is not worsened.\n * Withdrawals are proportional so doesn't change the pools asset balance.\n */\n modifier improvePoolBalance() {\n // Get the asset and OToken balances in the Curve pool\n uint256[2] memory balancesBefore = curvePool.get_balances();\n // diff = ETH balance - OETH balance\n int256 diffBefore = int256(balancesBefore[ethCoinIndex]) -\n int256(balancesBefore[oethCoinIndex]);\n\n _;\n\n // Get the asset and OToken balances in the Curve pool\n uint256[2] memory balancesAfter = curvePool.get_balances();\n // diff = ETH balance - OETH balance\n int256 diffAfter = int256(balancesAfter[ethCoinIndex]) -\n int256(balancesAfter[oethCoinIndex]);\n\n if (diffBefore <= 0) {\n // If the pool was originally imbalanced in favor of OETH, then\n // we want to check that the pool is now more balanced\n require(diffAfter <= 0, \"OTokens overshot peg\");\n require(diffBefore < diffAfter, \"OTokens balance worse\");\n }\n if (diffBefore >= 0) {\n // If the pool was originally imbalanced in favor of ETH, then\n // we want to check that the pool is now more balanced\n require(diffAfter >= 0, \"Assets overshot peg\");\n require(diffAfter < diffBefore, \"Assets balance worse\");\n }\n }\n\n // Used to circumvent the stack too deep issue\n struct ConvexEthMetaConfig {\n address cvxDepositorAddress; //Address of the Convex depositor(AKA booster) for this pool\n address cvxRewardStakerAddress; //Address of the CVX rewards staker\n uint256 cvxDepositorPTokenId; //Pid of the pool referred to by Depositor and staker\n address oethAddress; //Address of OETH token\n address wethAddress; //Address of WETH\n }\n\n constructor(\n BaseStrategyConfig memory _baseConfig,\n ConvexEthMetaConfig memory _convexConfig\n ) InitializableAbstractStrategy(_baseConfig) {\n lpToken = IERC20(_baseConfig.platformAddress);\n curvePool = ICurveETHPoolV1(_baseConfig.platformAddress);\n\n cvxDepositorAddress = _convexConfig.cvxDepositorAddress;\n cvxRewardStaker = IRewardStaking(_convexConfig.cvxRewardStakerAddress);\n cvxDepositorPTokenId = _convexConfig.cvxDepositorPTokenId;\n oeth = IERC20(_convexConfig.oethAddress);\n weth = IWETH9(_convexConfig.wethAddress);\n }\n\n /**\n * Initializer for setting up strategy internal state. This overrides the\n * InitializableAbstractStrategy initializer as Curve strategies don't fit\n * well within that abstraction.\n * @param _rewardTokenAddresses Address of CRV & CVX\n * @param _assets Addresses of supported assets. eg WETH\n */\n function initialize(\n address[] calldata _rewardTokenAddresses, // CRV + CVX\n address[] calldata _assets // WETH\n ) external onlyGovernor initializer {\n require(_assets.length == 1, \"Must have exactly one asset\");\n require(_assets[0] == address(weth), \"Asset not WETH\");\n\n address[] memory pTokens = new address[](1);\n pTokens[0] = address(curvePool);\n\n InitializableAbstractStrategy._initialize(\n _rewardTokenAddresses,\n _assets,\n pTokens\n );\n\n _approveBase();\n }\n\n /***************************************\n Deposit\n ****************************************/\n\n /**\n * @notice Deposit WETH into the Curve pool\n * @param _weth Address of Wrapped ETH (WETH) contract.\n * @param _amount Amount of WETH to deposit.\n */\n function deposit(address _weth, uint256 _amount)\n external\n override\n onlyVault\n nonReentrant\n {\n _deposit(_weth, _amount);\n }\n\n function _deposit(address _weth, uint256 _wethAmount) internal {\n require(_wethAmount > 0, \"Must deposit something\");\n require(_weth == address(weth), \"Can only deposit WETH\");\n weth.withdraw(_wethAmount);\n\n emit Deposit(_weth, address(lpToken), _wethAmount);\n\n // Get the asset and OToken balances in the Curve pool\n uint256[2] memory balances = curvePool.get_balances();\n // safe to cast since min value is at least 0\n uint256 oethToAdd = uint256(\n _max(\n 0,\n int256(balances[ethCoinIndex]) +\n int256(_wethAmount) -\n int256(balances[oethCoinIndex])\n )\n );\n\n /* Add so much OETH so that the pool ends up being balanced. And at minimum\n * add as much OETH as WETH and at maximum twice as much OETH.\n */\n oethToAdd = Math.max(oethToAdd, _wethAmount);\n oethToAdd = Math.min(oethToAdd, _wethAmount * 2);\n\n /* Mint OETH with a strategy that attempts to contribute to stability of OETH/WETH pool. Try\n * to mint so much OETH that after deployment of liquidity pool ends up being balanced.\n *\n * To manage unpredictability minimal OETH minted will always be at least equal or greater\n * to WETH amount deployed. And never larger than twice the WETH amount deployed even if\n * it would have a further beneficial effect on pool stability.\n */\n IVault(vaultAddress).mintForStrategy(oethToAdd);\n\n emit Deposit(address(oeth), address(lpToken), oethToAdd);\n\n uint256[2] memory _amounts;\n _amounts[ethCoinIndex] = _wethAmount;\n _amounts[oethCoinIndex] = oethToAdd;\n\n uint256 valueInLpTokens = (_wethAmount + oethToAdd).divPrecisely(\n curvePool.get_virtual_price()\n );\n uint256 minMintAmount = valueInLpTokens.mulTruncate(\n uint256(1e18) - MAX_SLIPPAGE\n );\n\n // Do the deposit to the Curve pool\n // slither-disable-next-line arbitrary-send\n uint256 lpDeposited = curvePool.add_liquidity{ value: _wethAmount }(\n _amounts,\n minMintAmount\n );\n\n // Deposit the Curve pool's LP tokens into the Convex rewards pool\n require(\n IConvexDeposits(cvxDepositorAddress).deposit(\n cvxDepositorPTokenId,\n lpDeposited,\n true // Deposit with staking\n ),\n \"Depositing LP to Convex not successful\"\n );\n }\n\n /**\n * @notice Deposit the strategy's entire balance of WETH into the Curve pool\n */\n function depositAll() external override onlyVault nonReentrant {\n uint256 balance = weth.balanceOf(address(this));\n if (balance > 0) {\n _deposit(address(weth), balance);\n }\n }\n\n /***************************************\n Withdraw\n ****************************************/\n\n /**\n * @notice Withdraw ETH and OETH from the Curve pool, burn the OETH,\n * convert the ETH to WETH and transfer to the recipient.\n * @param _recipient Address to receive withdrawn asset which is normally the Vault.\n * @param _weth Address of the Wrapped ETH (WETH) contract.\n * @param _amount Amount of WETH to withdraw.\n */\n function withdraw(\n address _recipient,\n address _weth,\n uint256 _amount\n ) external override onlyVault nonReentrant {\n require(_amount > 0, \"Invalid amount\");\n require(_weth == address(weth), \"Can only withdraw WETH\");\n\n emit Withdrawal(_weth, address(lpToken), _amount);\n\n uint256 requiredLpTokens = calcTokenToBurn(_amount);\n\n _lpWithdraw(requiredLpTokens);\n\n /* math in requiredLpTokens should correctly calculate the amount of LP to remove\n * in that the strategy receives enough WETH on balanced removal\n */\n uint256[2] memory _minWithdrawalAmounts = [uint256(0), uint256(0)];\n _minWithdrawalAmounts[ethCoinIndex] = _amount;\n // slither-disable-next-line unused-return\n curvePool.remove_liquidity(requiredLpTokens, _minWithdrawalAmounts);\n\n // Burn all the removed OETH and any that was left in the strategy\n uint256 oethToBurn = oeth.balanceOf(address(this));\n IVault(vaultAddress).burnForStrategy(oethToBurn);\n\n emit Withdrawal(address(oeth), address(lpToken), oethToBurn);\n\n // Transfer WETH to the recipient\n weth.deposit{ value: _amount }();\n require(\n weth.transfer(_recipient, _amount),\n \"Transfer of WETH not successful\"\n );\n }\n\n function calcTokenToBurn(uint256 _wethAmount)\n internal\n view\n returns (uint256 lpToBurn)\n {\n /* The rate between coins in the pool determines the rate at which pool returns\n * tokens when doing balanced removal (remove_liquidity call). And by knowing how much WETH\n * we want we can determine how much of OETH we receive by removing liquidity.\n *\n * Because we are doing balanced removal we should be making profit when removing liquidity in a\n * pool tilted to either side.\n *\n * Important: A downside is that the Strategist / Governor needs to be\n * cognisant of not removing too much liquidity. And while the proposal to remove liquidity\n * is being voted on the pool tilt might change so much that the proposal that has been valid while\n * created is no longer valid.\n */\n\n uint256 poolWETHBalance = curvePool.balances(ethCoinIndex);\n /* K is multiplied by 1e36 which is used for higher precision calculation of required\n * pool LP tokens. Without it the end value can have rounding errors up to precision of\n * 10 digits. This way we move the decimal point by 36 places when doing the calculation\n * and again by 36 places when we are done with it.\n */\n uint256 k = (1e36 * lpToken.totalSupply()) / poolWETHBalance;\n // prettier-ignore\n // slither-disable-next-line divide-before-multiply\n uint256 diff = (_wethAmount + 1) * k;\n lpToBurn = diff / 1e36;\n }\n\n /**\n * @notice Remove all ETH and OETH from the Curve pool, burn the OETH,\n * convert the ETH to WETH and transfer to the Vault contract.\n */\n function withdrawAll() external override onlyVaultOrGovernor nonReentrant {\n uint256 gaugeTokens = cvxRewardStaker.balanceOf(address(this));\n _lpWithdraw(gaugeTokens);\n\n // Withdraws are proportional to assets held by 3Pool\n uint256[2] memory minWithdrawAmounts = [uint256(0), uint256(0)];\n\n // Remove liquidity\n // slither-disable-next-line unused-return\n curvePool.remove_liquidity(\n lpToken.balanceOf(address(this)),\n minWithdrawAmounts\n );\n\n // Burn all OETH\n uint256 oethToBurn = oeth.balanceOf(address(this));\n IVault(vaultAddress).burnForStrategy(oethToBurn);\n\n // Get the strategy contract's ether balance.\n // This includes all that was removed from the Curve pool and\n // any ether that was sitting in the strategy contract before the removal.\n uint256 ethBalance = address(this).balance;\n // Convert all the strategy contract's ether to WETH and transfer to the vault.\n weth.deposit{ value: ethBalance }();\n require(\n weth.transfer(vaultAddress, ethBalance),\n \"Transfer of WETH not successful\"\n );\n\n emit Withdrawal(address(weth), address(lpToken), ethBalance);\n emit Withdrawal(address(oeth), address(lpToken), oethToBurn);\n }\n\n /***************************************\n Curve pool Rebalancing\n ****************************************/\n\n /**\n * @notice Mint OTokens and one-sided add to the Curve pool.\n * This is used when the Curve pool does not have enough OTokens and too many ETH.\n * The OToken/Asset, eg OETH/ETH, price with increase.\n * The amount of assets in the vault is unchanged.\n * The total supply of OTokens is increased.\n * The asset value of the strategy and vault is increased.\n * @param _oTokens The amount of OTokens to be minted and added to the pool.\n */\n function mintAndAddOTokens(uint256 _oTokens)\n external\n onlyStrategist\n nonReentrant\n improvePoolBalance\n {\n IVault(vaultAddress).mintForStrategy(_oTokens);\n\n uint256[2] memory amounts = [uint256(0), uint256(0)];\n amounts[oethCoinIndex] = _oTokens;\n\n // Convert OETH to Curve pool LP tokens\n uint256 valueInLpTokens = (_oTokens).divPrecisely(\n curvePool.get_virtual_price()\n );\n // Apply slippage to LP tokens\n uint256 minMintAmount = valueInLpTokens.mulTruncate(\n uint256(1e18) - MAX_SLIPPAGE\n );\n\n // Add the minted OTokens to the Curve pool\n uint256 lpDeposited = curvePool.add_liquidity(amounts, minMintAmount);\n\n // Deposit the Curve pool LP tokens to the Convex rewards pool\n require(\n IConvexDeposits(cvxDepositorAddress).deposit(\n cvxDepositorPTokenId,\n lpDeposited,\n true // Deposit with staking\n ),\n \"Failed to Deposit LP to Convex\"\n );\n\n emit Deposit(address(oeth), address(lpToken), _oTokens);\n }\n\n /**\n * @notice One-sided remove of OTokens from the Curve pool which are then burned.\n * This is used when the Curve pool has too many OTokens and not enough ETH.\n * The amount of assets in the vault is unchanged.\n * The total supply of OTokens is reduced.\n * The asset value of the strategy and vault is reduced.\n * @param _lpTokens The amount of Curve pool LP tokens to be burned for OTokens.\n */\n function removeAndBurnOTokens(uint256 _lpTokens)\n external\n onlyStrategist\n nonReentrant\n improvePoolBalance\n {\n // Withdraw Curve pool LP tokens from Convex and remove OTokens from the Curve pool\n uint256 oethToBurn = _withdrawAndRemoveFromPool(\n _lpTokens,\n oethCoinIndex\n );\n\n // The vault burns the OTokens from this strategy\n IVault(vaultAddress).burnForStrategy(oethToBurn);\n\n emit Withdrawal(address(oeth), address(lpToken), oethToBurn);\n }\n\n /**\n * @notice One-sided remove of ETH from the Curve pool, convert to WETH\n * and transfer to the vault.\n * This is used when the Curve pool does not have enough OTokens and too many ETH.\n * The OToken/Asset, eg OETH/ETH, price with decrease.\n * The amount of assets in the vault increases.\n * The total supply of OTokens does not change.\n * The asset value of the strategy reduces.\n * The asset value of the vault should be close to the same.\n * @param _lpTokens The amount of Curve pool LP tokens to be burned for ETH.\n * @dev Curve pool LP tokens is used rather than WETH assets as Curve does not\n * have a way to accurately calculate the amount of LP tokens for a required\n * amount of ETH. Curve's `calc_token_amount` functioun does not include fees.\n * A 3rd party libary can be used that takes into account the fees, but this\n * is a gas intensive process. It's easier for the trusted strategist to\n * caclulate the amount of Curve pool LP tokens required off-chain.\n */\n function removeOnlyAssets(uint256 _lpTokens)\n external\n onlyStrategist\n nonReentrant\n improvePoolBalance\n {\n // Withdraw Curve pool LP tokens from Convex and remove ETH from the Curve pool\n uint256 ethAmount = _withdrawAndRemoveFromPool(_lpTokens, ethCoinIndex);\n\n // Convert ETH to WETH and transfer to the vault\n weth.deposit{ value: ethAmount }();\n require(\n weth.transfer(vaultAddress, ethAmount),\n \"Transfer of WETH not successful\"\n );\n\n emit Withdrawal(address(weth), address(lpToken), ethAmount);\n }\n\n /**\n * @dev Remove Curve pool LP tokens from the Convex pool and\n * do a one-sided remove of ETH or OETH from the Curve pool.\n * @param _lpTokens The amount of Curve pool LP tokens to be removed from the Convex pool.\n * @param coinIndex The index of the coin to be removed from the Curve pool. 0 = ETH, 1 = OETH.\n * @return coinsRemoved The amount of ETH or OETH removed from the Curve pool.\n */\n function _withdrawAndRemoveFromPool(uint256 _lpTokens, uint128 coinIndex)\n internal\n returns (uint256 coinsRemoved)\n {\n // Withdraw Curve pool LP tokens from Convex pool\n _lpWithdraw(_lpTokens);\n\n // Convert Curve pool LP tokens to ETH value\n uint256 valueInEth = _lpTokens.mulTruncate(\n curvePool.get_virtual_price()\n );\n // Apply slippage to ETH value\n uint256 minAmount = valueInEth.mulTruncate(\n uint256(1e18) - MAX_SLIPPAGE\n );\n\n // Remove just the ETH from the Curve pool\n coinsRemoved = curvePool.remove_liquidity_one_coin(\n _lpTokens,\n int128(coinIndex),\n minAmount,\n address(this)\n );\n }\n\n /***************************************\n Assets and Rewards\n ****************************************/\n\n /**\n * @notice Collect accumulated CRV and CVX rewards and send to the Harvester.\n */\n function collectRewardTokens()\n external\n override\n onlyHarvester\n nonReentrant\n {\n // Collect CRV and CVX\n cvxRewardStaker.getReward();\n _collectRewardTokens();\n }\n\n function _lpWithdraw(uint256 _wethAmount) internal {\n // withdraw and unwrap with claim takes back the lpTokens\n // and also collects the rewards for deposit\n cvxRewardStaker.withdrawAndUnwrap(_wethAmount, true);\n }\n\n /**\n * @notice Get the total asset value held in the platform\n * @param _asset Address of the asset\n * @return balance Total value of the asset in the platform\n */\n function checkBalance(address _asset)\n public\n view\n override\n returns (uint256 balance)\n {\n require(_asset == address(weth), \"Unsupported asset\");\n\n // Eth balance needed here for the balance check that happens from vault during depositing.\n balance = address(this).balance;\n uint256 lpTokens = cvxRewardStaker.balanceOf(address(this));\n if (lpTokens > 0) {\n balance += (lpTokens * curvePool.get_virtual_price()) / 1e18;\n }\n }\n\n /**\n * @notice Returns bool indicating whether asset is supported by strategy\n * @param _asset Address of the asset\n */\n function supportsAsset(address _asset) public view override returns (bool) {\n return _asset == address(weth);\n }\n\n /***************************************\n Approvals\n ****************************************/\n\n /**\n * @notice Approve the spending of all assets by their corresponding pool tokens,\n * if for some reason is it necessary.\n */\n function safeApproveAllTokens()\n external\n override\n onlyGovernor\n nonReentrant\n {\n _approveBase();\n }\n\n /**\n * @notice Accept unwrapped WETH\n */\n receive() external payable {}\n\n /**\n * @dev Since we are unwrapping WETH before depositing it to Curve\n * there is no need to set an approval for WETH on the Curve\n * pool\n * @param _asset Address of the asset\n * @param _pToken Address of the Curve LP token\n */\n // solhint-disable-next-line no-unused-vars\n function _abstractSetPToken(address _asset, address _pToken)\n internal\n override\n {}\n\n function _approveBase() internal {\n // Approve Curve pool for OETH (required for adding liquidity)\n // No approval is needed for ETH\n // slither-disable-next-line unused-return\n oeth.approve(platformAddress, type(uint256).max);\n\n // Approve Convex deposit contract to transfer Curve pool LP tokens\n // This is needed for deposits if Curve pool LP tokens into the Convex rewards pool\n // slither-disable-next-line unused-return\n lpToken.approve(cvxDepositorAddress, type(uint256).max);\n }\n\n /**\n * @dev Returns the largest of two numbers int256 version\n */\n function _max(int256 a, int256 b) internal pure returns (int256) {\n return a >= b ? a : b;\n }\n}\n" + }, + "contracts/strategies/ConvexGeneralizedMetaStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Curve Convex Strategy\n * @notice Investment strategy for investing stablecoins via Curve 3Pool\n * @author Origin Protocol Inc\n */\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport \"@openzeppelin/contracts/utils/Strings.sol\";\n\nimport { IRewardStaking } from \"./IRewardStaking.sol\";\nimport { IConvexDeposits } from \"./IConvexDeposits.sol\";\nimport { ICurvePool } from \"./ICurvePool.sol\";\nimport { IERC20, InitializableAbstractStrategy } from \"./AbstractCurveStrategy.sol\";\nimport { AbstractConvexMetaStrategy } from \"./AbstractConvexMetaStrategy.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\n\ncontract ConvexGeneralizedMetaStrategy is AbstractConvexMetaStrategy {\n using StableMath for uint256;\n using SafeERC20 for IERC20;\n\n constructor(BaseStrategyConfig memory _stratConfig)\n InitializableAbstractStrategy(_stratConfig)\n {}\n\n /* Take 3pool LP and deposit it to metapool. Take the LP from metapool\n * and deposit them to Convex.\n */\n function _lpDepositAll() internal override {\n IERC20 threePoolLp = IERC20(pTokenAddress);\n ICurvePool curvePool = ICurvePool(platformAddress);\n\n uint256 threePoolLpBalance = threePoolLp.balanceOf(address(this));\n uint256 curve3PoolVirtualPrice = curvePool.get_virtual_price();\n uint256 threePoolLpDollarValue = threePoolLpBalance.mulTruncate(\n curve3PoolVirtualPrice\n );\n\n uint256[2] memory _amounts = [0, threePoolLpBalance];\n\n uint256 metapoolVirtualPrice = metapool.get_virtual_price();\n /**\n * First convert all the deposited tokens to dollar values,\n * then divide by virtual price to convert to metapool LP tokens\n * and apply the max slippage\n */\n uint256 minReceived = threePoolLpDollarValue\n .divPrecisely(metapoolVirtualPrice)\n .mulTruncate(uint256(1e18) - MAX_SLIPPAGE);\n\n uint256 metapoolLp = metapool.add_liquidity(_amounts, minReceived);\n\n bool success = IConvexDeposits(cvxDepositorAddress).deposit(\n cvxDepositorPTokenId,\n metapoolLp,\n true // Deposit with staking\n );\n\n require(success, \"Failed to deposit to Convex\");\n }\n\n /**\n * Withdraw the specified amount of tokens from the gauge. And use all the resulting tokens\n * to remove liquidity from metapool\n * @param num3CrvTokens Number of Convex 3pool LP tokens to withdraw from metapool\n */\n function _lpWithdraw(uint256 num3CrvTokens) internal override {\n uint256 gaugeTokens = IRewardStaking(cvxRewardStakerAddress).balanceOf(\n address(this)\n );\n\n uint256 requiredMetapoolLpTokens = _calcCurveMetaTokenAmount(\n crvCoinIndex,\n num3CrvTokens\n );\n\n require(\n requiredMetapoolLpTokens <= gaugeTokens,\n string(\n bytes.concat(\n bytes(\"Attempting to withdraw \"),\n bytes(Strings.toString(requiredMetapoolLpTokens)),\n bytes(\", metapoolLP but only \"),\n bytes(Strings.toString(gaugeTokens)),\n bytes(\" available.\")\n )\n )\n );\n\n // withdraw and unwrap with claim takes back the lpTokens and also collects the rewards for deposit\n IRewardStaking(cvxRewardStakerAddress).withdrawAndUnwrap(\n requiredMetapoolLpTokens,\n true\n );\n\n if (requiredMetapoolLpTokens > 0) {\n // slither-disable-next-line unused-return\n metapool.remove_liquidity_one_coin(\n requiredMetapoolLpTokens,\n int128(crvCoinIndex),\n num3CrvTokens\n );\n }\n }\n\n function _lpWithdrawAll() internal override {\n uint256 gaugeTokens = IRewardStaking(cvxRewardStakerAddress).balanceOf(\n address(this)\n );\n IRewardStaking(cvxRewardStakerAddress).withdrawAndUnwrap(\n gaugeTokens,\n true\n );\n\n if (gaugeTokens > 0) {\n uint256 burnDollarAmount = gaugeTokens.mulTruncate(\n metapool.get_virtual_price()\n );\n uint256 curve3PoolExpected = burnDollarAmount.divPrecisely(\n ICurvePool(platformAddress).get_virtual_price()\n );\n\n // Always withdraw all of the available metapool LP tokens (similar to how we always deposit all)\n // slither-disable-next-line unused-return\n metapool.remove_liquidity_one_coin(\n gaugeTokens,\n int128(crvCoinIndex),\n curve3PoolExpected -\n curve3PoolExpected.mulTruncate(maxWithdrawalSlippage)\n );\n }\n }\n}\n" + }, + "contracts/strategies/ConvexOUSDMetaStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Curve Convex Strategy\n * @notice Investment strategy for investing stablecoins via Curve 3Pool\n * @author Origin Protocol Inc\n */\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport \"@openzeppelin/contracts/utils/Strings.sol\";\nimport \"@openzeppelin/contracts/utils/math/Math.sol\";\n\nimport { IRewardStaking } from \"./IRewardStaking.sol\";\nimport { IConvexDeposits } from \"./IConvexDeposits.sol\";\nimport { ICurvePool } from \"./ICurvePool.sol\";\nimport { IERC20, InitializableAbstractStrategy } from \"./AbstractCurveStrategy.sol\";\nimport { AbstractConvexMetaStrategy } from \"./AbstractConvexMetaStrategy.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\nimport { IVault } from \"../interfaces/IVault.sol\";\n\ncontract ConvexOUSDMetaStrategy is AbstractConvexMetaStrategy {\n using StableMath for uint256;\n using SafeERC20 for IERC20;\n\n constructor(BaseStrategyConfig memory _stratConfig)\n InitializableAbstractStrategy(_stratConfig)\n {}\n\n /* Take 3pool LP and mint the corresponding amount of ousd. Deposit and stake that to\n * ousd Curve Metapool. Take the LP from metapool and deposit them to Convex.\n */\n function _lpDepositAll() internal override {\n ICurvePool curvePool = ICurvePool(platformAddress);\n\n uint256 threePoolLpBalance = IERC20(pTokenAddress).balanceOf(\n address(this)\n );\n uint256 curve3PoolVirtualPrice = curvePool.get_virtual_price();\n uint256 threePoolLpDollarValue = threePoolLpBalance.mulTruncate(\n curve3PoolVirtualPrice\n );\n\n // safe to cast since min value is at least 0\n uint256 ousdToAdd = uint256(\n _max(\n 0,\n int256(\n metapool.balances(crvCoinIndex).mulTruncate(\n curve3PoolVirtualPrice\n )\n ) -\n int256(metapool.balances(mainCoinIndex)) +\n int256(threePoolLpDollarValue)\n )\n );\n\n /* Add so much OUSD so that the pool ends up being balanced. And at minimum\n * add twice as much OUSD as 3poolLP and at maximum at twice as\n * much OUSD.\n */\n ousdToAdd = Math.max(ousdToAdd, threePoolLpDollarValue);\n ousdToAdd = Math.min(ousdToAdd, threePoolLpDollarValue * 2);\n\n /* Mint OUSD with a strategy that attempts to contribute to stability of OUSD metapool. Try\n * to mint so much OUSD that after deployment of liquidity pool ends up being balanced.\n *\n * To manage unpredictability minimal OUSD minted will always be at least equal or greater\n * to stablecoin(DAI, USDC, USDT) amount of 3CRVLP deployed. And never larger than twice the\n * stablecoin amount of 3CRVLP deployed even if it would have a further beneficial effect\n * on pool stability.\n */\n if (ousdToAdd > 0) {\n IVault(vaultAddress).mintForStrategy(ousdToAdd);\n }\n\n uint256[2] memory _amounts = [ousdToAdd, threePoolLpBalance];\n\n uint256 metapoolVirtualPrice = metapool.get_virtual_price();\n /**\n * First convert all the deposited tokens to dollar values,\n * then divide by virtual price to convert to metapool LP tokens\n * and apply the max slippage\n */\n uint256 minReceived = (ousdToAdd + threePoolLpDollarValue)\n .divPrecisely(metapoolVirtualPrice)\n .mulTruncate(uint256(1e18) - MAX_SLIPPAGE);\n\n uint256 metapoolLp = metapool.add_liquidity(_amounts, minReceived);\n\n bool success = IConvexDeposits(cvxDepositorAddress).deposit(\n cvxDepositorPTokenId,\n metapoolLp,\n true // Deposit with staking\n );\n\n require(success, \"Failed to deposit to Convex\");\n }\n\n /**\n * Withdraw the specified amount of tokens from the gauge. And use all the resulting tokens\n * to remove liquidity from metapool\n * @param num3CrvTokens Number of 3CRV tokens to withdraw from metapool\n */\n function _lpWithdraw(uint256 num3CrvTokens) internal override {\n ICurvePool curvePool = ICurvePool(platformAddress);\n /* The rate between coins in the metapool determines the rate at which metapool returns\n * tokens when doing balanced removal (remove_liquidity call). And by knowing how much 3crvLp\n * we want we can determine how much of OUSD we receive by removing liquidity.\n *\n * Because we are doing balanced removal we should be making profit when removing liquidity in a\n * pool tilted to either side.\n *\n * Important: A downside is that the Strategist / Governor needs to be\n * cognisant of not removing too much liquidity. And while the proposal to remove liquidity\n * is being voted on the pool tilt might change so much that the proposal that has been valid while\n * created is no longer valid.\n */\n\n uint256 crvPoolBalance = metapool.balances(crvCoinIndex);\n /* K is multiplied by 1e36 which is used for higher precision calculation of required\n * metapool LP tokens. Without it the end value can have rounding errors up to precision of\n * 10 digits. This way we move the decimal point by 36 places when doing the calculation\n * and again by 36 places when we are done with it.\n */\n uint256 k = (1e36 * metapoolLPToken.totalSupply()) / crvPoolBalance;\n // simplifying below to: `uint256 diff = (num3CrvTokens - 1) * k` causes loss of precision\n // prettier-ignore\n // slither-disable-next-line divide-before-multiply\n uint256 diff = crvPoolBalance * k -\n (crvPoolBalance - num3CrvTokens - 1) * k;\n uint256 lpToBurn = diff / 1e36;\n\n uint256 gaugeTokens = IRewardStaking(cvxRewardStakerAddress).balanceOf(\n address(this)\n );\n\n require(\n lpToBurn <= gaugeTokens,\n string(\n bytes.concat(\n bytes(\"Attempting to withdraw \"),\n bytes(Strings.toString(lpToBurn)),\n bytes(\", metapoolLP but only \"),\n bytes(Strings.toString(gaugeTokens)),\n bytes(\" available.\")\n )\n )\n );\n\n // withdraw and unwrap with claim takes back the lpTokens and also collects the rewards for deposit\n IRewardStaking(cvxRewardStakerAddress).withdrawAndUnwrap(\n lpToBurn,\n true\n );\n\n // calculate the min amount of OUSD expected for the specified amount of LP tokens\n uint256 minOUSDAmount = lpToBurn.mulTruncate(\n metapool.get_virtual_price()\n ) -\n num3CrvTokens.mulTruncate(curvePool.get_virtual_price()) -\n 1;\n\n // withdraw the liquidity from metapool\n uint256[2] memory _removedAmounts = metapool.remove_liquidity(\n lpToBurn,\n [minOUSDAmount, num3CrvTokens]\n );\n\n IVault(vaultAddress).burnForStrategy(_removedAmounts[mainCoinIndex]);\n }\n\n function _lpWithdrawAll() internal override {\n IERC20 metapoolErc20 = IERC20(address(metapool));\n uint256 gaugeTokens = IRewardStaking(cvxRewardStakerAddress).balanceOf(\n address(this)\n );\n IRewardStaking(cvxRewardStakerAddress).withdrawAndUnwrap(\n gaugeTokens,\n true\n );\n\n uint256[2] memory _minAmounts = [uint256(0), uint256(0)];\n uint256[2] memory _removedAmounts = metapool.remove_liquidity(\n metapoolErc20.balanceOf(address(this)),\n _minAmounts\n );\n\n IVault(vaultAddress).burnForStrategy(_removedAmounts[mainCoinIndex]);\n }\n}\n" + }, + "contracts/strategies/ConvexStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Curve Convex Strategy\n * @notice Investment strategy for investing stablecoins via Curve 3Pool\n * @author Origin Protocol Inc\n */\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport { ICurvePool } from \"./ICurvePool.sol\";\nimport { IRewardStaking } from \"./IRewardStaking.sol\";\nimport { IConvexDeposits } from \"./IConvexDeposits.sol\";\nimport { IERC20, AbstractCurveStrategy, InitializableAbstractStrategy } from \"./AbstractCurveStrategy.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\nimport { Helpers } from \"../utils/Helpers.sol\";\n\n/*\n * IMPORTANT(!) If ConvexStrategy needs to be re-deployed, it requires new\n * proxy contract with fresh storage slots. Changes in `AbstractCurveStrategy`\n * storage slots would break existing implementation.\n *\n * Remove this notice if ConvexStrategy is re-deployed\n */\ncontract ConvexStrategy is AbstractCurveStrategy {\n using StableMath for uint256;\n using SafeERC20 for IERC20;\n\n address internal cvxDepositorAddress;\n address internal cvxRewardStakerAddress;\n // slither-disable-next-line constable-states\n address private _deprecated_cvxRewardTokenAddress;\n uint256 internal cvxDepositorPTokenId;\n\n constructor(BaseStrategyConfig memory _stratConfig)\n InitializableAbstractStrategy(_stratConfig)\n {}\n\n /**\n * Initializer for setting up strategy internal state. This overrides the\n * InitializableAbstractStrategy initializer as Curve strategies don't fit\n * well within that abstraction.\n * @param _rewardTokenAddresses Address of CRV & CVX\n * @param _assets Addresses of supported assets. MUST be passed in the same\n * order as returned by coins on the pool contract, i.e.\n * DAI, USDC, USDT\n * @param _pTokens Platform Token corresponding addresses\n * @param _cvxDepositorAddress Address of the Convex depositor(AKA booster) for this pool\n * @param _cvxRewardStakerAddress Address of the CVX rewards staker\n * @param _cvxDepositorPTokenId Pid of the pool referred to by Depositor and staker\n */\n function initialize(\n address[] calldata _rewardTokenAddresses, // CRV + CVX\n address[] calldata _assets,\n address[] calldata _pTokens,\n address _cvxDepositorAddress,\n address _cvxRewardStakerAddress,\n uint256 _cvxDepositorPTokenId\n ) external onlyGovernor initializer {\n require(_assets.length == 3, \"Must have exactly three assets\");\n // Should be set prior to abstract initialize call otherwise\n // abstractSetPToken calls will fail\n cvxDepositorAddress = _cvxDepositorAddress;\n cvxRewardStakerAddress = _cvxRewardStakerAddress;\n cvxDepositorPTokenId = _cvxDepositorPTokenId;\n pTokenAddress = _pTokens[0];\n\n InitializableAbstractStrategy._initialize(\n _rewardTokenAddresses,\n _assets,\n _pTokens\n );\n _approveBase();\n }\n\n function _lpDepositAll() internal override {\n IERC20 pToken = IERC20(pTokenAddress);\n // Deposit with staking\n bool success = IConvexDeposits(cvxDepositorAddress).deposit(\n cvxDepositorPTokenId,\n pToken.balanceOf(address(this)),\n true\n );\n require(success, \"Failed to deposit to Convex\");\n }\n\n function _lpWithdraw(uint256 numCrvTokens) internal override {\n uint256 gaugePTokens = IRewardStaking(cvxRewardStakerAddress).balanceOf(\n address(this)\n );\n\n // Not enough in this contract or in the Gauge, can't proceed\n require(numCrvTokens > gaugePTokens, \"Insufficient 3CRV balance\");\n\n // withdraw and unwrap with claim takes back the lpTokens and also collects the rewards to this\n IRewardStaking(cvxRewardStakerAddress).withdrawAndUnwrap(\n numCrvTokens,\n true\n );\n }\n\n function _lpWithdrawAll() internal override {\n // withdraw and unwrap with claim takes back the lpTokens and also collects the rewards to this\n IRewardStaking(cvxRewardStakerAddress).withdrawAndUnwrap(\n IRewardStaking(cvxRewardStakerAddress).balanceOf(address(this)),\n true\n );\n }\n\n function _approveBase() internal override {\n IERC20 pToken = IERC20(pTokenAddress);\n // 3Pool for LP token (required for removing liquidity)\n pToken.safeApprove(platformAddress, 0);\n pToken.safeApprove(platformAddress, type(uint256).max);\n // Gauge for LP token\n pToken.safeApprove(cvxDepositorAddress, 0);\n pToken.safeApprove(cvxDepositorAddress, type(uint256).max);\n }\n\n /**\n * @dev Get the total asset value held in the platform\n * @param _asset Address of the asset\n * @return balance Total value of the asset in the platform\n */\n function checkBalance(address _asset)\n public\n view\n override\n returns (uint256 balance)\n {\n require(assetToPToken[_asset] != address(0), \"Unsupported asset\");\n // LP tokens in this contract. This should generally be nothing as we\n // should always stake the full balance in the Gauge, but include for\n // safety\n uint256 contractPTokens = IERC20(pTokenAddress).balanceOf(\n address(this)\n );\n uint256 gaugePTokens = IRewardStaking(cvxRewardStakerAddress).balanceOf(\n address(this)\n );\n uint256 totalPTokens = contractPTokens + gaugePTokens;\n\n ICurvePool curvePool = ICurvePool(platformAddress);\n if (totalPTokens > 0) {\n uint256 virtual_price = curvePool.get_virtual_price();\n uint256 value = (totalPTokens * virtual_price) / 1e18;\n uint256 assetDecimals = Helpers.getDecimals(_asset);\n balance = value.scaleBy(assetDecimals, 18) / 3;\n }\n }\n\n /**\n * @dev Collect accumulated CRV and CVX and send to Vault.\n */\n function collectRewardTokens()\n external\n override\n onlyHarvester\n nonReentrant\n {\n // Collect CRV and CVX\n IRewardStaking(cvxRewardStakerAddress).getReward();\n _collectRewardTokens();\n }\n}\n" + }, + "contracts/strategies/FluxStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Flux Strategy\n * @notice Investment strategy for investing stablecoins via Flux\n * @author Origin Protocol Inc\n */\n\nimport { CompoundStrategy } from \"./CompoundStrategy.sol\";\n\ncontract FluxStrategy is CompoundStrategy {\n constructor(BaseStrategyConfig memory _stratConfig)\n CompoundStrategy(_stratConfig)\n {}\n\n /**\n * @inheritdoc CompoundStrategy\n */\n function collectRewardTokens() external override {\n // Intentionally not adding any modifiers to not increase contract size\n // Flux strategy has no reward tokens\n }\n}\n" + }, + "contracts/strategies/FraxETHStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title OETH FraxETH Strategy\n * @notice Investment WETH and FraxETH into the sFraxETH staking contract\n * @author Origin Protocol Inc\n */\nimport { IERC4626 } from \"../../lib/openzeppelin/interfaces/IERC4626.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IWETH9 } from \"../interfaces/IWETH9.sol\";\nimport { IFraxETHMinter } from \"../interfaces/IFraxETHMinter.sol\";\nimport { Generalized4626Strategy, IERC20, InitializableAbstractStrategy } from \"./Generalized4626Strategy.sol\";\n\ncontract FraxETHStrategy is Generalized4626Strategy {\n using SafeERC20 for IERC20;\n\n address public constant weth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;\n\n IFraxETHMinter public constant fraxETHMinter =\n IFraxETHMinter(0xbAFA44EFE7901E04E39Dad13167D089C559c1138);\n\n /**\n * @param _baseConfig Base strategy config with platformAddress (sfrxETH) and vaultAddress (OETHVaultProxy)\n * @param _assetToken Address of the ERC-4626 asset token (frxETH)\n */\n constructor(BaseStrategyConfig memory _baseConfig, address _assetToken)\n Generalized4626Strategy(_baseConfig, _assetToken)\n {}\n\n function initialize() external override onlyGovernor initializer {\n address[] memory rewardTokens = new address[](0);\n address[] memory assets = new address[](2);\n address[] memory pTokens = new address[](2);\n\n assets[0] = address(assetToken);\n assets[1] = address(weth);\n pTokens[0] = address(platformAddress);\n pTokens[1] = address(platformAddress);\n\n InitializableAbstractStrategy._initialize(\n rewardTokens,\n assets,\n pTokens\n );\n }\n\n function _deposit(address _asset, uint256 _amount) internal override {\n require(_amount > 0, \"Must deposit something\");\n\n if (_asset == weth) {\n // Unwrap WETH\n IWETH9(weth).withdraw(_amount);\n\n // Deposit ETH for frxETH and stake it\n // slither-disable-next-line unused-return\n fraxETHMinter.submitAndDeposit{ value: _amount }(address(this));\n } else if (_asset == address(assetToken)) {\n // Stake frxETH\n // slither-disable-next-line unused-return\n IERC4626(platformAddress).deposit(_amount, address(this));\n } else {\n revert(\"Unexpected asset address\");\n }\n\n emit Deposit(_asset, address(shareToken), _amount);\n }\n\n /**\n * @dev Retuns bool indicating whether asset is supported by strategy\n * @param _asset Address of the asset\n */\n function supportsAsset(address _asset) public view override returns (bool) {\n return _asset == address(assetToken) || _asset == weth;\n }\n\n /**\n * @dev Get the total asset value held in the platform\n * @param _asset Address of the asset\n * @return balance Total value of the asset in the platform\n */\n function checkBalance(address _asset)\n external\n view\n virtual\n override\n returns (uint256 balance)\n {\n if (_asset == weth) {\n // For WETH, it's always 0\n return 0;\n }\n\n // If it's not WETH, it has to be frxETH\n require(_asset == address(assetToken), \"Unexpected asset address\");\n\n /* We are intentionally not counting the amount of assetToken parked on the\n * contract toward the checkBalance. The deposit and withdraw functions\n * should not result in assetToken being unused and owned by this strategy\n * contract.\n */\n return IERC4626(platformAddress).maxWithdraw(address(this));\n }\n\n /**\n * @dev Deposit the entire balance of assetToken to gain shareToken\n */\n function depositAll() external virtual override onlyVault nonReentrant {\n uint256 balance = assetToken.balanceOf(address(this));\n if (balance > 0) {\n _deposit(address(assetToken), balance);\n }\n\n uint256 wethBalance = IWETH9(weth).balanceOf(address(this));\n if (wethBalance > 0) {\n _deposit(weth, wethBalance);\n }\n }\n\n /**\n * @dev Accept ETH\n */\n receive() external payable {}\n}\n" + }, + "contracts/strategies/FrxEthRedeemStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC721Receiver } from \"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\";\n\nimport { IERC20, InitializableAbstractStrategy } from \"../utils/InitializableAbstractStrategy.sol\";\nimport { IWETH9 } from \"../interfaces/IWETH9.sol\";\nimport { IVault } from \"../interfaces/IVault.sol\";\n\ninterface IFraxEtherRedemptionQueue {\n function burnRedemptionTicketNft(uint256 _nftId, address payable _recipient)\n external;\n\n function enterRedemptionQueue(address _recipient, uint120 _amountToRedeem)\n external\n returns (uint256 _nftId);\n}\n\n/**\n * @title Frax ETH Redeem Strategy\n * @notice This strategy redeems Frax ETH for ETH via the Frax Eth Redemption Queue contract\n * @author Origin Protocol Inc\n */\ncontract FrxEthRedeemStrategy is InitializableAbstractStrategy {\n IWETH9 private constant weth =\n IWETH9(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);\n IERC20 private constant frxETH =\n IERC20(0x5E8422345238F34275888049021821E8E08CAa1f);\n IFraxEtherRedemptionQueue private constant redemptionQueue =\n IFraxEtherRedemptionQueue(0x82bA8da44Cd5261762e629dd5c605b17715727bd);\n uint256 public constant maxRedeemTicket = 250e18;\n uint256 public outstandingRedeems;\n\n event RedeemNFTMinted(uint256 _nftId, uint256 _amount);\n event RedeemNFTBurned(uint256 _nftId);\n\n constructor(BaseStrategyConfig memory _stratConfig)\n InitializableAbstractStrategy(_stratConfig)\n {\n require(maxRedeemTicket < type(uint120).max);\n }\n\n /**\n * @notice initialize function, to set up initial internal state\n * @param _rewardTokenAddresses Address of reward token for platform\n * @param _assets Addresses of initial supported assets\n * @param _pTokens Platform Token corresponding addresses\n */\n function initialize(\n address[] memory _rewardTokenAddresses,\n address[] memory _assets,\n address[] memory _pTokens\n ) external onlyGovernor initializer {\n InitializableAbstractStrategy._initialize(\n _rewardTokenAddresses,\n _assets,\n _pTokens\n );\n safeApproveAllTokens();\n }\n\n /**\n * @notice deposit() function not used for this strategy. Use depositAll() instead.\n */\n function deposit(address, uint256) public override onlyVault nonReentrant {\n // This method no longer used by the VaultAdmin, and we don't want it\n // to be used by VaultCore.\n require(false, \"use depositAll() instead\");\n }\n\n /**\n * @notice Takes all given frxETH and creates new redeem tickets\n */\n function depositAll() external override onlyVault nonReentrant {\n uint256 frxETHStart = frxETH.balanceOf(address(this));\n require(frxETHStart > 0, \"No frxETH to redeem\");\n uint256 frxETHRemaining = frxETHStart;\n\n while (frxETHRemaining > 0) {\n uint256 amount = frxETHRemaining > maxRedeemTicket\n ? maxRedeemTicket\n : frxETHRemaining;\n uint256 nftId = redemptionQueue.enterRedemptionQueue(\n address(this),\n uint120(amount)\n );\n frxETHRemaining -= amount;\n emit RedeemNFTMinted(nftId, amount);\n }\n\n require(\n frxETH.balanceOf(address(this)) == 0,\n \"Not all FraxEth sent to redemption queue\"\n );\n outstandingRedeems += frxETHStart; // Single set for gas reasons\n\n // This strategy claims to support WETH, so it is posible for\n // the vault to transfer WETH to it. This returns any deposited WETH\n // to the vault so that it is not lost for balance tracking purposes.\n uint256 wethBalance = weth.balanceOf(address(this));\n if (wethBalance > 0) {\n // slither-disable-next-line unchecked-transfer\n weth.transfer(vaultAddress, wethBalance);\n }\n\n emit Deposit(address(frxETH), address(redemptionQueue), frxETHStart);\n }\n\n /**\n * @notice Withdraw an asset from the underlying platform\n * @param _recipient Address to receive withdrawn assets\n * @param _asset Address of the asset to withdraw\n * @param _amount Amount of assets to withdraw\n */\n function withdraw(\n // solhint-disable-next-line no-unused-vars\n address _recipient,\n // solhint-disable-next-line no-unused-vars\n address _asset,\n // solhint-disable-next-line no-unused-vars\n uint256 _amount\n ) external override onlyVault nonReentrant {\n // Does nothing - all redeems need to be called manually by the\n // strategist via redeemTickets\n require(false, \"use redeemTickets() instead\");\n }\n\n /**\n * @notice Redeem specific tickets from the Queue.\n * Called by the strategist.\n * @param _nftIds Array of NFT IDs to redeem\n */\n function redeemTickets(uint256[] memory _nftIds, uint256 expectedAmount)\n external\n nonReentrant\n {\n require(\n msg.sender == IVault(vaultAddress).strategistAddr(),\n \"Caller is not the Strategist\"\n );\n uint256 startingBalance = payable(address(this)).balance;\n for (uint256 i = 0; i < _nftIds.length; i++) {\n uint256 nftId = _nftIds[i];\n redemptionQueue.burnRedemptionTicketNft(\n nftId,\n payable(address(this))\n );\n emit RedeemNFTBurned(nftId);\n }\n\n uint256 currentBalance = payable(address(this)).balance;\n uint256 redeemedAmount = currentBalance - startingBalance;\n require(\n expectedAmount == redeemedAmount,\n \"Redeemed amount does not match expected amount\"\n );\n outstandingRedeems -= redeemedAmount;\n weth.deposit{ value: currentBalance }();\n // slither-disable-next-line unchecked-transfer\n weth.transfer(vaultAddress, currentBalance);\n emit Withdrawal(\n address(weth),\n address(redemptionQueue),\n currentBalance\n );\n }\n\n function _abstractSetPToken(address, address) internal override {\n revert(\"No pTokens are used\");\n }\n\n /**\n * @notice Withdraw all assets from this strategy, and transfer to the Vault.\n * In correct operation, this strategy should never hold any assets.\n */\n function withdrawAll() external override onlyVaultOrGovernor nonReentrant {\n if (payable(address(this)).balance > 0) {\n weth.deposit{ value: payable(address(this)).balance }();\n }\n uint256 wethBalance = weth.balanceOf(address(this));\n if (wethBalance > 0) {\n // slither-disable-next-line unchecked-transfer\n weth.transfer(vaultAddress, wethBalance);\n emit Withdrawal(address(weth), address(0), wethBalance);\n }\n uint256 fraxEthBalance = frxETH.balanceOf(address(this));\n if (fraxEthBalance > 0) {\n // slither-disable-next-line unchecked-transfer\n frxETH.transfer(vaultAddress, fraxEthBalance);\n emit Withdrawal(address(frxETH), address(0), fraxEthBalance);\n }\n }\n\n /**\n * @notice Returns the amount of queued FraxEth that will be returned as WETH.\n * We return this as a WETH asset, since that is what it will eventually be returned as.\n * We only return the outstandingRedeems, because the contract itself should never hold any funds.\n * @param _asset Address of the asset\n * @return balance Total value of the asset in the platform\n */\n function checkBalance(address _asset)\n external\n view\n override\n returns (uint256 balance)\n {\n if (_asset == address(weth)) {\n return outstandingRedeems;\n } else if (_asset == address(frxETH)) {\n return 0;\n } else {\n revert(\"Unexpected asset address\");\n }\n }\n\n /**\n * @notice Approve the spending of all assets by their corresponding cToken,\n * if for some reason is it necessary.\n */\n function safeApproveAllTokens() public override {\n // slither-disable-next-line unused-return\n frxETH.approve(address(redemptionQueue), type(uint256).max);\n }\n\n /**\n * @notice Check if an asset is supported.\n * @param _asset Address of the asset\n * @return bool Whether asset is supported\n */\n function supportsAsset(address _asset) public pure override returns (bool) {\n // frxETH can be deposited by the vault and balances are reported in weth\n return _asset == address(frxETH) || _asset == address(weth);\n }\n\n function onERC721Received(\n // solhint-disable-next-line no-unused-vars\n address operator,\n // solhint-disable-next-line no-unused-vars\n address from,\n // solhint-disable-next-line no-unused-vars\n uint256 tokenId,\n // solhint-disable-next-line no-unused-vars\n bytes calldata data\n ) external returns (bytes4) {\n return IERC721Receiver.onERC721Received.selector;\n }\n\n receive() external payable {}\n}\n" + }, + "contracts/strategies/Generalized4626Strategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Generalized 4626 Strategy\n * @notice Investment strategy for ERC-4626 Tokenized Vaults\n * @author Origin Protocol Inc\n */\nimport { IERC4626 } from \"../../lib/openzeppelin/interfaces/IERC4626.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC20, InitializableAbstractStrategy } from \"../utils/InitializableAbstractStrategy.sol\";\n\ncontract Generalized4626Strategy is InitializableAbstractStrategy {\n using SafeERC20 for IERC20;\n\n /// @dev Replaced with an immutable variable\n // slither-disable-next-line constable-states\n address private _deprecate_shareToken;\n /// @dev Replaced with an immutable variable\n // slither-disable-next-line constable-states\n address private _deprecate_assetToken;\n\n IERC20 public immutable shareToken;\n IERC20 public immutable assetToken;\n\n // For future use\n uint256[50] private __gap;\n\n /**\n * @param _baseConfig Base strategy config with platformAddress (ERC-4626 Vault contract), eg sfrxETH or sDAI,\n * and vaultAddress (OToken Vault contract), eg VaultProxy or OETHVaultProxy\n * @param _assetToken Address of the ERC-4626 asset token. eg frxETH or DAI\n */\n constructor(BaseStrategyConfig memory _baseConfig, address _assetToken)\n InitializableAbstractStrategy(_baseConfig)\n {\n shareToken = IERC20(_baseConfig.platformAddress);\n assetToken = IERC20(_assetToken);\n }\n\n function initialize() external virtual onlyGovernor initializer {\n address[] memory rewardTokens = new address[](0);\n address[] memory assets = new address[](1);\n address[] memory pTokens = new address[](1);\n\n assets[0] = address(assetToken);\n pTokens[0] = address(platformAddress);\n\n InitializableAbstractStrategy._initialize(\n rewardTokens,\n assets,\n pTokens\n );\n }\n\n /**\n * @dev Deposit assets by converting them to shares\n * @param _asset Address of asset to deposit\n * @param _amount Amount of asset to deposit\n */\n function deposit(address _asset, uint256 _amount)\n external\n override\n onlyVault\n nonReentrant\n {\n _deposit(_asset, _amount);\n }\n\n /**\n * @dev Deposit assets by converting them to shares\n * @param _asset Address of asset to deposit\n * @param _amount Amount of asset to deposit\n */\n function _deposit(address _asset, uint256 _amount) internal virtual {\n require(_amount > 0, \"Must deposit something\");\n require(_asset == address(assetToken), \"Unexpected asset address\");\n\n // slither-disable-next-line unused-return\n IERC4626(platformAddress).deposit(_amount, address(this));\n emit Deposit(_asset, address(shareToken), _amount);\n }\n\n /**\n * @dev Deposit the entire balance of assetToken to gain shareToken\n */\n function depositAll() external virtual override onlyVault nonReentrant {\n uint256 balance = assetToken.balanceOf(address(this));\n if (balance > 0) {\n _deposit(address(assetToken), balance);\n }\n }\n\n /**\n * @dev Withdraw asset by burning shares\n * @param _recipient Address to receive withdrawn asset\n * @param _asset Address of asset to withdraw\n * @param _amount Amount of asset to withdraw\n */\n function withdraw(\n address _recipient,\n address _asset,\n uint256 _amount\n ) external virtual override onlyVault nonReentrant {\n require(_amount > 0, \"Must withdraw something\");\n require(_recipient != address(0), \"Must specify recipient\");\n require(_asset == address(assetToken), \"Unexpected asset address\");\n\n // slither-disable-next-line unused-return\n IERC4626(platformAddress).withdraw(_amount, _recipient, address(this));\n emit Withdrawal(_asset, address(shareToken), _amount);\n }\n\n /**\n * @dev Internal method to respond to the addition of new asset / share tokens\n */\n function _abstractSetPToken(address, address) internal virtual override {\n _approveBase();\n }\n\n /**\n * @dev Remove all assets from platform and send them to Vault contract.\n */\n function withdrawAll()\n external\n virtual\n override\n onlyVaultOrGovernor\n nonReentrant\n {\n uint256 shareBalance = shareToken.balanceOf(address(this));\n uint256 assetAmount = 0;\n if (shareBalance > 0) {\n assetAmount = IERC4626(platformAddress).redeem(\n shareBalance,\n vaultAddress,\n address(this)\n );\n emit Withdrawal(\n address(assetToken),\n address(shareToken),\n assetAmount\n );\n }\n }\n\n /**\n * @dev Get the total asset value held in the platform\n * @param _asset Address of the asset\n * @return balance Total value of the asset in the platform\n */\n function checkBalance(address _asset)\n external\n view\n virtual\n override\n returns (uint256 balance)\n {\n require(_asset == address(assetToken), \"Unexpected asset address\");\n /* We are intentionally not counting the amount of assetToken parked on the\n * contract toward the checkBalance. The deposit and withdraw functions\n * should not result in assetToken being unused and owned by this strategy\n * contract.\n */\n return IERC4626(platformAddress).maxWithdraw(address(this));\n }\n\n /**\n * @notice Governor approves the the ERC-4626 Tokenized Vault to spend the asset.\n */\n function safeApproveAllTokens() external override onlyGovernor {\n _approveBase();\n }\n\n function _approveBase() internal virtual {\n // Approval the asset to be trasferred to the ERC-4626 Tokenized Vualt.\n // Used by the ERC-4626 deposit() and mint() functions\n // slither-disable-next-line unused-return\n assetToken.approve(platformAddress, type(uint256).max);\n }\n\n /**\n * @dev Retuns bool indicating whether asset is supported by strategy\n * @param _asset Address of the asset\n */\n function supportsAsset(address _asset)\n public\n view\n virtual\n override\n returns (bool)\n {\n return _asset == address(assetToken);\n }\n\n /**\n * @notice is not supported for this strategy as the asset and\n * ERC-4626 Tokenized Vault are set at deploy time.\n * @dev If the ERC-4626 Tokenized Vault needed to be changed, a new\n * contract would need to be deployed and the proxy updated.\n */\n function setPTokenAddress(address, address) external override onlyGovernor {\n revert(\"unsupported function\");\n }\n\n /**\n * @notice is not supported for this strategy as the asset and\n * ERC-4626 Tokenized Vault are set at deploy time.\n * @dev If the ERC-4626 Tokenized Vault needed to be changed, a new\n * contract would need to be deployed and the proxy updated.\n */\n function removePToken(uint256) external override onlyGovernor {\n revert(\"unsupported function\");\n }\n}\n" + }, + "contracts/strategies/IAave.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface for Aaves Lending Pool\n * Documentation: https://developers.aave.com/#lendingpool\n */\ninterface IAaveLendingPool {\n /**\n * @dev Deposits an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\n * - E.g. User deposits 100 USDC and gets in return 100 aUSDC\n * @param asset The address of the underlying asset to deposit\n * @param amount The amount to be deposited\n * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\n * wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\n * is a different wallet\n * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n * 0 if the action is executed directly by the user, without any middle-man\n **/\n function deposit(\n address asset,\n uint256 amount,\n address onBehalfOf,\n uint16 referralCode\n ) external;\n\n /**\n * @dev Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\n * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\n * @param asset The address of the underlying asset to withdraw\n * @param amount The underlying amount to be withdrawn\n * - Send the value type(uint256).max in order to withdraw the whole aToken balance\n * @param to Address that will receive the underlying, same as msg.sender if the user\n * wants to receive it on his own wallet, or a different address if the beneficiary is a\n * different wallet\n * @return The final amount withdrawn\n **/\n function withdraw(\n address asset,\n uint256 amount,\n address to\n ) external returns (uint256);\n}\n\n/**\n * @dev Interface for Aaves Lending Pool\n * Documentation: https://developers.aave.com/#lendingpooladdressesprovider\n */\ninterface ILendingPoolAddressesProvider {\n /**\n * @notice Get the current address for Aave LendingPool\n * @dev Lending pool is the core contract on which to call deposit\n */\n function getLendingPool() external view returns (address);\n}\n" + }, + "contracts/strategies/IAaveIncentivesController.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IAaveIncentivesController {\n event RewardsAccrued(address indexed user, uint256 amount);\n\n event RewardsClaimed(\n address indexed user,\n address indexed to,\n uint256 amount\n );\n\n event RewardsClaimed(\n address indexed user,\n address indexed to,\n address indexed claimer,\n uint256 amount\n );\n\n event ClaimerSet(address indexed user, address indexed claimer);\n\n /*\n * @dev Returns the configuration of the distribution for a certain asset\n * @param asset The address of the reference asset of the distribution\n * @return The asset index, the emission per second and the last updated timestamp\n **/\n function getAssetData(address asset)\n external\n view\n returns (\n uint256,\n uint256,\n uint256\n );\n\n /**\n * @dev Whitelists an address to claim the rewards on behalf of another address\n * @param user The address of the user\n * @param claimer The address of the claimer\n */\n function setClaimer(address user, address claimer) external;\n\n /**\n * @dev Returns the whitelisted claimer for a certain address (0x0 if not set)\n * @param user The address of the user\n * @return The claimer address\n */\n function getClaimer(address user) external view returns (address);\n\n /**\n * @dev Configure assets for a certain rewards emission\n * @param assets The assets to incentivize\n * @param emissionsPerSecond The emission for each asset\n */\n function configureAssets(\n address[] calldata assets,\n uint256[] calldata emissionsPerSecond\n ) external;\n\n /**\n * @dev Called by the corresponding asset on any update that affects the rewards distribution\n * @param asset The address of the user\n * @param userBalance The balance of the user of the asset in the lending pool\n * @param totalSupply The total supply of the asset in the lending pool\n **/\n function handleAction(\n address asset,\n uint256 userBalance,\n uint256 totalSupply\n ) external;\n\n /**\n * @dev Returns the total of rewards of an user, already accrued + not yet accrued\n * @param user The address of the user\n * @return The rewards\n **/\n function getRewardsBalance(address[] calldata assets, address user)\n external\n view\n returns (uint256);\n\n /**\n * @dev Claims reward for an user, on all the assets of the lending pool,\n * accumulating the pending rewards\n * @param amount Amount of rewards to claim\n * @param to Address that will be receiving the rewards\n * @return Rewards claimed\n **/\n function claimRewards(\n address[] calldata assets,\n uint256 amount,\n address to\n ) external returns (uint256);\n\n /**\n * @dev Claims reward for an user on behalf, on all the assets of the\n * lending pool, accumulating the pending rewards. The caller must\n * be whitelisted via \"allowClaimOnBehalf\" function by the RewardsAdmin role manager\n * @param amount Amount of rewards to claim\n * @param user Address to check and claim rewards\n * @param to Address that will be receiving the rewards\n * @return Rewards claimed\n **/\n function claimRewardsOnBehalf(\n address[] calldata assets,\n uint256 amount,\n address user,\n address to\n ) external returns (uint256);\n\n /**\n * @dev returns the unclaimed rewards of the user\n * @param user the address of the user\n * @return the unclaimed user rewards\n */\n function getUserUnclaimedRewards(address user)\n external\n view\n returns (uint256);\n\n /**\n * @dev returns the unclaimed rewards of the user\n * @param user the address of the user\n * @param asset The asset to incentivize\n * @return the user index for the asset\n */\n function getUserAssetData(address user, address asset)\n external\n view\n returns (uint256);\n\n /**\n * @dev for backward compatibility with previous implementation of the Incentives controller\n */\n function REWARD_TOKEN() external view returns (address);\n\n /**\n * @dev for backward compatibility with previous implementation of the Incentives controller\n */\n function PRECISION() external view returns (uint8);\n\n /**\n * @dev Gets the distribution end timestamp of the emissions\n */\n function DISTRIBUTION_END() external view returns (uint256);\n}\n" + }, + "contracts/strategies/IAaveStakeToken.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IAaveStakedToken {\n function COOLDOWN_SECONDS() external returns (uint256);\n\n function UNSTAKE_WINDOW() external returns (uint256);\n\n function balanceOf(address addr) external returns (uint256);\n\n function redeem(address to, uint256 amount) external;\n\n function stakersCooldowns(address addr) external returns (uint256);\n\n function cooldown() external;\n}\n" + }, + "contracts/strategies/ICompound.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @dev Compound C Token interface\n * Documentation: https://compound.finance/developers/ctokens\n */\ninterface ICERC20 {\n /**\n * @notice The mint function transfers an asset into the protocol, which begins accumulating\n * interest based on the current Supply Rate for the asset. The user receives a quantity of\n * cTokens equal to the underlying tokens supplied, divided by the current Exchange Rate.\n * @param mintAmount The amount of the asset to be supplied, in units of the underlying asset.\n * @return 0 on success, otherwise an Error codes\n */\n function mint(uint256 mintAmount) external returns (uint256);\n\n /**\n * @notice Sender redeems cTokens in exchange for the underlying asset\n * @dev Accrues interest whether or not the operation succeeds, unless reverted\n * @param redeemTokens The number of cTokens to redeem into underlying\n * @return uint 0=success, otherwise an error code.\n */\n function redeem(uint256 redeemTokens) external returns (uint256);\n\n /**\n * @notice The redeem underlying function converts cTokens into a specified quantity of the underlying\n * asset, and returns them to the user. The amount of cTokens redeemed is equal to the quantity of\n * underlying tokens received, divided by the current Exchange Rate. The amount redeemed must be less\n * than the user's Account Liquidity and the market's available liquidity.\n * @param redeemAmount The amount of underlying to be redeemed.\n * @return 0 on success, otherwise an error code.\n */\n function redeemUnderlying(uint256 redeemAmount) external returns (uint256);\n\n /**\n * @notice The user's underlying balance, representing their assets in the protocol, is equal to\n * the user's cToken balance multiplied by the Exchange Rate.\n * @param owner The account to get the underlying balance of.\n * @return The amount of underlying currently owned by the account.\n */\n function balanceOfUnderlying(address owner) external returns (uint256);\n\n /**\n * @notice Calculates the exchange rate from the underlying to the CToken\n * @dev This function does not accrue interest before calculating the exchange rate\n * @return Calculated exchange rate scaled by 1e18\n */\n function exchangeRateStored() external view returns (uint256);\n\n /**\n * @notice Get the token balance of the `owner`\n * @param owner The address of the account to query\n * @return The number of tokens owned by `owner`\n */\n function balanceOf(address owner) external view returns (uint256);\n\n /**\n * @notice Get the supply rate per block for supplying the token to Compound.\n */\n function supplyRatePerBlock() external view returns (uint256);\n\n /**\n * @notice Address of the Compound Comptroller.\n */\n function comptroller() external view returns (address);\n}\n" + }, + "contracts/strategies/IConvexDeposits.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IConvexDeposits {\n function deposit(\n uint256 _pid,\n uint256 _amount,\n bool _stake\n ) external returns (bool);\n\n function deposit(\n uint256 _amount,\n bool _lock,\n address _stakeAddress\n ) external;\n}\n" + }, + "contracts/strategies/ICRVMinter.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface ICRVMinter {\n function mint(address gaugeAddress) external;\n}\n" + }, + "contracts/strategies/ICurveETHPoolV1.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface ICurveETHPoolV1 {\n event AddLiquidity(\n address indexed provider,\n uint256[2] token_amounts,\n uint256[2] fees,\n uint256 invariant,\n uint256 token_supply\n );\n event ApplyNewFee(uint256 fee);\n event Approval(\n address indexed owner,\n address indexed spender,\n uint256 value\n );\n event CommitNewFee(uint256 new_fee);\n event RampA(\n uint256 old_A,\n uint256 new_A,\n uint256 initial_time,\n uint256 future_time\n );\n event RemoveLiquidity(\n address indexed provider,\n uint256[2] token_amounts,\n uint256[2] fees,\n uint256 token_supply\n );\n event RemoveLiquidityImbalance(\n address indexed provider,\n uint256[2] token_amounts,\n uint256[2] fees,\n uint256 invariant,\n uint256 token_supply\n );\n event RemoveLiquidityOne(\n address indexed provider,\n uint256 token_amount,\n uint256 coin_amount,\n uint256 token_supply\n );\n event StopRampA(uint256 A, uint256 t);\n event TokenExchange(\n address indexed buyer,\n int128 sold_id,\n uint256 tokens_sold,\n int128 bought_id,\n uint256 tokens_bought\n );\n event Transfer(\n address indexed sender,\n address indexed receiver,\n uint256 value\n );\n\n function A() external view returns (uint256);\n\n function A_precise() external view returns (uint256);\n\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n\n function add_liquidity(uint256[2] memory _amounts, uint256 _min_mint_amount)\n external\n payable\n returns (uint256);\n\n function add_liquidity(\n uint256[2] memory _amounts,\n uint256 _min_mint_amount,\n address _receiver\n ) external payable returns (uint256);\n\n function admin_action_deadline() external view returns (uint256);\n\n function admin_balances(uint256 i) external view returns (uint256);\n\n function admin_fee() external view returns (uint256);\n\n function allowance(address arg0, address arg1)\n external\n view\n returns (uint256);\n\n function apply_new_fee() external;\n\n function approve(address _spender, uint256 _value) external returns (bool);\n\n function balanceOf(address arg0) external view returns (uint256);\n\n function balances(uint256 arg0) external view returns (uint256);\n\n function calc_token_amount(uint256[2] memory _amounts, bool _is_deposit)\n external\n view\n returns (uint256);\n\n function calc_withdraw_one_coin(uint256 _burn_amount, int128 i)\n external\n view\n returns (uint256);\n\n function coins(uint256 arg0) external view returns (address);\n\n function commit_new_fee(uint256 _new_fee) external;\n\n function decimals() external view returns (uint256);\n\n function ema_price() external view returns (uint256);\n\n function exchange(\n int128 i,\n int128 j,\n uint256 _dx,\n uint256 _min_dy\n ) external payable returns (uint256);\n\n function exchange(\n int128 i,\n int128 j,\n uint256 _dx,\n uint256 _min_dy,\n address _receiver\n ) external payable returns (uint256);\n\n function fee() external view returns (uint256);\n\n function future_A() external view returns (uint256);\n\n function future_A_time() external view returns (uint256);\n\n function future_fee() external view returns (uint256);\n\n function get_balances() external view returns (uint256[2] memory);\n\n function get_dy(\n int128 i,\n int128 j,\n uint256 dx\n ) external view returns (uint256);\n\n function get_p() external view returns (uint256);\n\n function get_virtual_price() external view returns (uint256);\n\n function initial_A() external view returns (uint256);\n\n function initial_A_time() external view returns (uint256);\n\n function initialize(\n string memory _name,\n string memory _symbol,\n address[4] memory _coins,\n uint256[4] memory _rate_multipliers,\n uint256 _A,\n uint256 _fee\n ) external;\n\n function last_price() external view returns (uint256);\n\n function ma_exp_time() external view returns (uint256);\n\n function ma_last_time() external view returns (uint256);\n\n function name() external view returns (string memory);\n\n function nonces(address arg0) external view returns (uint256);\n\n function permit(\n address _owner,\n address _spender,\n uint256 _value,\n uint256 _deadline,\n uint8 _v,\n bytes32 _r,\n bytes32 _s\n ) external returns (bool);\n\n function price_oracle() external view returns (uint256);\n\n function ramp_A(uint256 _future_A, uint256 _future_time) external;\n\n function remove_liquidity(\n uint256 _burn_amount,\n uint256[2] memory _min_amounts\n ) external returns (uint256[2] memory);\n\n function remove_liquidity(\n uint256 _burn_amount,\n uint256[2] memory _min_amounts,\n address _receiver\n ) external returns (uint256[2] memory);\n\n function remove_liquidity_imbalance(\n uint256[2] memory _amounts,\n uint256 _max_burn_amount\n ) external returns (uint256);\n\n function remove_liquidity_imbalance(\n uint256[2] memory _amounts,\n uint256 _max_burn_amount,\n address _receiver\n ) external returns (uint256);\n\n function remove_liquidity_one_coin(\n uint256 _burn_amount,\n int128 i,\n uint256 _min_received\n ) external returns (uint256);\n\n function remove_liquidity_one_coin(\n uint256 _burn_amount,\n int128 i,\n uint256 _min_received,\n address _receiver\n ) external returns (uint256);\n\n function set_ma_exp_time(uint256 _ma_exp_time) external;\n\n function stop_ramp_A() external;\n\n function symbol() external view returns (string memory);\n\n function totalSupply() external view returns (uint256);\n\n function transfer(address _to, uint256 _value) external returns (bool);\n\n function transferFrom(\n address _from,\n address _to,\n uint256 _value\n ) external returns (bool);\n\n function version() external view returns (string memory);\n\n function withdraw_admin_fees() external;\n}\n" + }, + "contracts/strategies/ICurveGauge.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface ICurveGauge {\n function balanceOf(address account) external view returns (uint256);\n\n function deposit(uint256 value, address account) external;\n\n function withdraw(uint256 value) external;\n}\n" + }, + "contracts/strategies/ICurveMetaPool.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\ninterface ICurveMetaPool {\n function add_liquidity(uint256[2] calldata amounts, uint256 min_mint_amount)\n external\n returns (uint256);\n\n function get_virtual_price() external view returns (uint256);\n\n function remove_liquidity(uint256 _amount, uint256[2] calldata min_amounts)\n external\n returns (uint256[2] calldata);\n\n function remove_liquidity_one_coin(\n uint256 _token_amount,\n int128 i,\n uint256 min_amount\n ) external returns (uint256);\n\n function remove_liquidity_imbalance(\n uint256[2] calldata amounts,\n uint256 max_burn_amount\n ) external returns (uint256);\n\n function calc_withdraw_one_coin(uint256 _token_amount, int128 i)\n external\n view\n returns (uint256);\n\n function balances(uint256 i) external view returns (uint256);\n\n function calc_token_amount(uint256[2] calldata amounts, bool deposit)\n external\n view\n returns (uint256);\n\n function base_pool() external view returns (address);\n\n function fee() external view returns (uint256);\n\n function coins(uint256 i) external view returns (address);\n\n function exchange(\n int128 i,\n int128 j,\n uint256 dx,\n uint256 min_dy\n ) external returns (uint256);\n\n function get_dy(\n int128 i,\n int128 j,\n uint256 dx\n ) external view returns (uint256);\n}\n" + }, + "contracts/strategies/ICurvePool.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface ICurvePool {\n function get_virtual_price() external view returns (uint256);\n\n function add_liquidity(uint256[3] calldata _amounts, uint256 _min) external;\n\n function balances(uint256) external view returns (uint256);\n\n function calc_token_amount(uint256[3] calldata _amounts, bool _deposit)\n external\n returns (uint256);\n\n function fee() external view returns (uint256);\n\n function remove_liquidity_one_coin(\n uint256 _amount,\n int128 _index,\n uint256 _minAmount\n ) external;\n\n function remove_liquidity(\n uint256 _amount,\n uint256[3] calldata _minWithdrawAmounts\n ) external;\n\n function calc_withdraw_one_coin(uint256 _amount, int128 _index)\n external\n view\n returns (uint256);\n\n function exchange(\n uint256 i,\n uint256 j,\n uint256 dx,\n uint256 min_dy\n ) external returns (uint256);\n\n function coins(uint256 _index) external view returns (address);\n\n function remove_liquidity_imbalance(\n uint256[3] calldata _amounts,\n uint256 maxBurnAmount\n ) external;\n}\n" + }, + "contracts/strategies/IRewardStaking.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IRewardStaking {\n function stakeFor(address, uint256) external;\n\n function stake(uint256) external;\n\n function withdraw(uint256 amount, bool claim) external;\n\n function withdrawAndUnwrap(uint256 amount, bool claim) external;\n\n function earned(address account) external view returns (uint256);\n\n function getReward() external;\n\n function getReward(address _account, bool _claimExtras) external;\n\n function extraRewardsLength() external returns (uint256);\n\n function extraRewards(uint256 _pid) external returns (address);\n\n function rewardToken() external returns (address);\n\n function balanceOf(address account) external view returns (uint256);\n}\n" + }, + "contracts/strategies/LidoWithdrawalStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20, InitializableAbstractStrategy } from \"../utils/InitializableAbstractStrategy.sol\";\nimport { IWETH9 } from \"../interfaces/IWETH9.sol\";\nimport { IVault } from \"../interfaces/IVault.sol\";\n\ninterface IStETHWithdrawal {\n event WithdrawalRequested(\n uint256 indexed requestId,\n address indexed requestor,\n address indexed owner,\n uint256 amountOfStETH,\n uint256 amountOfShares\n );\n event WithdrawalsFinalized(\n uint256 indexed from,\n uint256 indexed to,\n uint256 amountOfETHLocked,\n uint256 sharesToBurn,\n uint256 timestamp\n );\n event WithdrawalClaimed(\n uint256 indexed requestId,\n address indexed owner,\n address indexed receiver,\n uint256 amountOfETH\n );\n\n struct WithdrawalRequestStatus {\n /// @notice stETH token amount that was locked on withdrawal queue for this request\n uint256 amountOfStETH;\n /// @notice amount of stETH shares locked on withdrawal queue for this request\n uint256 amountOfShares;\n /// @notice address that can claim or transfer this request\n address owner;\n /// @notice timestamp of when the request was created, in seconds\n uint256 timestamp;\n /// @notice true, if request is finalized\n bool isFinalized;\n /// @notice true, if request is claimed. Request is claimable if (isFinalized && !isClaimed)\n bool isClaimed;\n }\n\n function requestWithdrawals(uint256[] calldata _amounts, address _owner)\n external\n returns (uint256[] memory requestIds);\n\n function getLastCheckpointIndex() external view returns (uint256);\n\n function findCheckpointHints(\n uint256[] calldata _requestIds,\n uint256 _firstIndex,\n uint256 _lastIndex\n ) external view returns (uint256[] memory hintIds);\n\n function claimWithdrawals(\n uint256[] calldata _requestIds,\n uint256[] calldata _hints\n ) external;\n\n function getWithdrawalStatus(uint256[] calldata _requestIds)\n external\n view\n returns (WithdrawalRequestStatus[] memory statuses);\n\n function getWithdrawalRequests(address _owner)\n external\n view\n returns (uint256[] memory requestsIds);\n\n function finalize(\n uint256 _lastRequestIdToBeFinalized,\n uint256 _maxShareRate\n ) external payable;\n}\n\n/**\n * @title Lido Withdrawal Strategy\n * @notice This strategy withdraws ETH from stETH via the Lido Withdrawal Queue contract\n * @author Origin Protocol Inc\n */\ncontract LidoWithdrawalStrategy is InitializableAbstractStrategy {\n /// @notice Address of the WETH token\n IWETH9 private constant weth =\n IWETH9(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);\n /// @notice Address of the stETH token\n IERC20 private constant stETH =\n IERC20(0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84);\n /// @notice Address of the Lido Withdrawal Queue contract\n IStETHWithdrawal private constant withdrawalQueue =\n IStETHWithdrawal(0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1);\n /// @notice Maximum amount of stETH that can be withdrawn in a single request\n uint256 public constant MaxWithdrawalAmount = 1000 ether;\n /// @notice Total amount of stETH that has been requested to be withdrawn for ETH\n uint256 public outstandingWithdrawals;\n\n event WithdrawalRequests(uint256[] requestIds, uint256[] amounts);\n event WithdrawalClaims(uint256[] requestIds, uint256 amount);\n\n constructor(BaseStrategyConfig memory _stratConfig)\n InitializableAbstractStrategy(_stratConfig)\n {}\n\n /**\n * @notice initialize function, to set up initial internal state\n * @param _rewardTokenAddresses Address of reward token for platform\n * @param _assets Addresses of initial supported assets\n * @param _pTokens Platform Token corresponding addresses\n */\n function initialize(\n address[] memory _rewardTokenAddresses,\n address[] memory _assets,\n address[] memory _pTokens\n ) external onlyGovernor initializer {\n InitializableAbstractStrategy._initialize(\n _rewardTokenAddresses,\n _assets,\n _pTokens\n );\n safeApproveAllTokens();\n }\n\n /**\n * @notice deposit() function not used for this strategy. Use depositAll() instead.\n */\n function deposit(address, uint256) public override onlyVault nonReentrant {\n // This method no longer used by the VaultAdmin, and we don't want it\n // to be used by VaultCore.\n require(false, \"use depositAll() instead\");\n }\n\n /**\n * @notice Takes all given stETH and creates Lido withdrawal request\n */\n function depositAll() external override onlyVault nonReentrant {\n uint256 stETHStart = stETH.balanceOf(address(this));\n require(stETHStart > 0, \"No stETH to withdraw\");\n\n uint256 withdrawalLength = (stETHStart / MaxWithdrawalAmount) + 1;\n uint256[] memory amounts = new uint256[](withdrawalLength);\n\n uint256 stETHRemaining = stETHStart;\n uint256 i = 0;\n while (stETHRemaining > MaxWithdrawalAmount) {\n amounts[i++] = MaxWithdrawalAmount;\n stETHRemaining -= MaxWithdrawalAmount;\n }\n amounts[i] = stETHRemaining;\n\n uint256[] memory requestIds = withdrawalQueue.requestWithdrawals(\n amounts,\n address(this)\n );\n\n emit WithdrawalRequests(requestIds, amounts);\n\n // Is there any stETH left except 1 wei from each request?\n // This is because stETH does not transfer all the transfer amount.\n uint256 stEthDust = stETH.balanceOf(address(this));\n require(\n stEthDust <= withdrawalLength,\n \"Not all stEth in withdraw queue\"\n );\n outstandingWithdrawals += stETHStart;\n\n // This strategy claims to support WETH, so it is possible for\n // the vault to transfer WETH to it. This returns any deposited WETH\n // to the vault so that it is not lost for balance tracking purposes.\n uint256 wethBalance = weth.balanceOf(address(this));\n if (wethBalance > 0) {\n // slither-disable-next-line unchecked-transfer\n weth.transfer(vaultAddress, wethBalance);\n }\n\n emit Deposit(address(stETH), address(withdrawalQueue), stETHStart);\n }\n\n /**\n * @notice Withdraw an asset from the underlying platform\n * @param _recipient Address to receive withdrawn assets\n * @param _asset Address of the asset to withdraw\n * @param _amount Amount of assets to withdraw\n */\n function withdraw(\n // solhint-disable-next-line no-unused-vars\n address _recipient,\n // solhint-disable-next-line no-unused-vars\n address _asset,\n // solhint-disable-next-line no-unused-vars\n uint256 _amount\n ) external override onlyVault nonReentrant {\n // Does nothing - all withdrawals need to be called manually using the\n // Strategist calling claimWithdrawals\n revert(\"use claimWithdrawals()\");\n }\n\n /**\n * @notice Claim previously requested withdrawals that have now finalized.\n * Called by the Strategist.\n * @param _requestIds Array of withdrawal request identifiers\n * @param _expectedAmount Total amount of ETH expect to be withdrawn\n */\n function claimWithdrawals(\n uint256[] memory _requestIds,\n uint256 _expectedAmount\n ) external nonReentrant {\n require(\n msg.sender == IVault(vaultAddress).strategistAddr(),\n \"Caller is not the Strategist\"\n );\n uint256 startingBalance = payable(address(this)).balance;\n uint256 lastIndex = withdrawalQueue.getLastCheckpointIndex();\n uint256[] memory hintIds = withdrawalQueue.findCheckpointHints(\n _requestIds,\n 1,\n lastIndex\n );\n withdrawalQueue.claimWithdrawals(_requestIds, hintIds);\n\n uint256 currentBalance = payable(address(this)).balance;\n uint256 withdrawalAmount = currentBalance - startingBalance;\n // Withdrawal amount should be within 2 wei of expected amount\n require(\n withdrawalAmount + 2 >= _expectedAmount &&\n withdrawalAmount <= _expectedAmount,\n \"Withdrawal amount not expected\"\n );\n\n emit WithdrawalClaims(_requestIds, withdrawalAmount);\n\n outstandingWithdrawals -= withdrawalAmount;\n weth.deposit{ value: currentBalance }();\n // slither-disable-next-line unchecked-transfer\n weth.transfer(vaultAddress, currentBalance);\n emit Withdrawal(\n address(weth),\n address(withdrawalQueue),\n currentBalance\n );\n }\n\n /**\n * @notice Withdraw all assets from this strategy, and transfer to the Vault.\n * In correct operation, this strategy should never hold any assets.\n */\n function withdrawAll() external override onlyVaultOrGovernor nonReentrant {\n if (payable(address(this)).balance > 0) {\n weth.deposit{ value: payable(address(this)).balance }();\n }\n uint256 wethBalance = weth.balanceOf(address(this));\n if (wethBalance > 0) {\n // slither-disable-next-line unchecked-transfer\n weth.transfer(vaultAddress, wethBalance);\n emit Withdrawal(address(weth), address(0), wethBalance);\n }\n uint256 stEthBalance = stETH.balanceOf(address(this));\n if (stEthBalance > 0) {\n // slither-disable-next-line unchecked-transfer\n stETH.transfer(vaultAddress, stEthBalance);\n emit Withdrawal(address(stETH), address(0), stEthBalance);\n }\n }\n\n /**\n * @notice Returns the amount of queued stETH that will be returned as WETH.\n * We return this as a WETH asset, since that is what it will eventually be returned as.\n * We only return the outstandingWithdrawals, because the contract itself should never hold any funds.\n * @param _asset Address of the asset\n * @return balance Total value of the asset in the platform\n */\n function checkBalance(address _asset)\n external\n view\n override\n returns (uint256 balance)\n {\n if (_asset == address(weth)) {\n return outstandingWithdrawals;\n } else if (_asset == address(stETH)) {\n return 0;\n } else {\n revert(\"Unexpected asset address\");\n }\n }\n\n /**\n * @notice Approve the spending of all assets by their corresponding cToken,\n * if for some reason is it necessary.\n */\n function safeApproveAllTokens() public override {\n // slither-disable-next-line unused-return\n stETH.approve(address(withdrawalQueue), type(uint256).max);\n }\n\n /**\n * @notice Check if an asset is supported.\n * @param _asset Address of the asset\n * @return bool Whether asset is supported\n */\n function supportsAsset(address _asset) public pure override returns (bool) {\n // stETH can be deposited by the vault and balances are reported in WETH\n return _asset == address(stETH) || _asset == address(weth);\n }\n\n /// @notice Needed to receive ETH when withdrawal requests are claimed\n receive() external payable {}\n\n function _abstractSetPToken(address, address) internal pure override {\n revert(\"No pTokens are used\");\n }\n}\n" + }, + "contracts/strategies/MorphoAaveStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title OUSD Morpho Aave Strategy\n * @notice Investment strategy for investing stablecoins via Morpho (Aave)\n * @author Origin Protocol Inc\n */\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC20, InitializableAbstractStrategy } from \"../utils/InitializableAbstractStrategy.sol\";\nimport { IMorpho } from \"../interfaces/morpho/IMorpho.sol\";\nimport { ILens } from \"../interfaces/morpho/ILens.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\n\ncontract MorphoAaveStrategy is InitializableAbstractStrategy {\n address public constant MORPHO = 0x777777c9898D384F785Ee44Acfe945efDFf5f3E0;\n address public constant LENS = 0x507fA343d0A90786d86C7cd885f5C49263A91FF4;\n\n using SafeERC20 for IERC20;\n using StableMath for uint256;\n\n constructor(BaseStrategyConfig memory _stratConfig)\n InitializableAbstractStrategy(_stratConfig)\n {}\n\n /**\n * @dev Initialize function, to set up initial internal state\n * @param _rewardTokenAddresses Address of reward token for platform\n * @param _assets Addresses of initial supported assets\n * @param _pTokens Platform Token corresponding addresses\n */\n function initialize(\n address[] calldata _rewardTokenAddresses,\n address[] calldata _assets,\n address[] calldata _pTokens\n ) external onlyGovernor initializer {\n InitializableAbstractStrategy._initialize(\n _rewardTokenAddresses,\n _assets,\n _pTokens\n );\n }\n\n /**\n * @dev Approve the spending of all assets by main Morpho contract,\n * if for some reason is it necessary.\n */\n function safeApproveAllTokens()\n external\n override\n onlyGovernor\n nonReentrant\n {\n uint256 assetCount = assetsMapped.length;\n for (uint256 i = 0; i < assetCount; i++) {\n address asset = assetsMapped[i];\n\n // Safe approval\n IERC20(asset).safeApprove(MORPHO, 0);\n IERC20(asset).safeApprove(MORPHO, type(uint256).max);\n }\n }\n\n /**\n * @dev Internal method to respond to the addition of new asset\n * We need to approve and allow Morpho to move them\n * @param _asset Address of the asset to approve\n * @param _pToken The pToken for the approval\n */\n // solhint-disable-next-line no-unused-vars\n function _abstractSetPToken(address _asset, address _pToken)\n internal\n override\n {\n IERC20(_asset).safeApprove(MORPHO, 0);\n IERC20(_asset).safeApprove(MORPHO, type(uint256).max);\n }\n\n /**\n * @dev Collect accumulated rewards and send them to Harvester.\n */\n function collectRewardTokens()\n external\n override\n onlyHarvester\n nonReentrant\n {\n // Morpho Aave-v2 doesn't distribute reward tokens\n // solhint-disable-next-line max-line-length\n // Ref: https://developers.morpho.xyz/interact-with-morpho/get-started/interact-with-morpho/claim-rewards#morpho-aave-v2\n }\n\n /**\n * @dev Get the amount of rewards pending to be collected from the protocol\n */\n function getPendingRewards() external view returns (uint256 balance) {\n // Morpho Aave-v2 doesn't distribute reward tokens\n // solhint-disable-next-line max-line-length\n // Ref: https://developers.morpho.xyz/interact-with-morpho/get-started/interact-with-morpho/claim-rewards#morpho-aave-v2\n return 0;\n }\n\n /**\n * @dev Deposit asset into Morpho\n * @param _asset Address of asset to deposit\n * @param _amount Amount of asset to deposit\n */\n function deposit(address _asset, uint256 _amount)\n external\n override\n onlyVault\n nonReentrant\n {\n _deposit(_asset, _amount);\n }\n\n /**\n * @dev Deposit asset into Morpho\n * @param _asset Address of asset to deposit\n * @param _amount Amount of asset to deposit\n */\n function _deposit(address _asset, uint256 _amount) internal {\n require(_amount > 0, \"Must deposit something\");\n\n address pToken = address(_getPTokenFor(_asset));\n\n IMorpho(MORPHO).supply(\n pToken,\n address(this), // the address of the user you want to supply on behalf of\n _amount\n );\n emit Deposit(_asset, pToken, _amount);\n }\n\n /**\n * @dev Deposit the entire balance of any supported asset into Morpho\n */\n function depositAll() external override onlyVault nonReentrant {\n for (uint256 i = 0; i < assetsMapped.length; i++) {\n uint256 balance = IERC20(assetsMapped[i]).balanceOf(address(this));\n if (balance > 0) {\n _deposit(assetsMapped[i], balance);\n }\n }\n }\n\n /**\n * @dev Withdraw asset from Morpho\n * @param _recipient Address to receive withdrawn asset\n * @param _asset Address of asset to withdraw\n * @param _amount Amount of asset to withdraw\n */\n function withdraw(\n address _recipient,\n address _asset,\n uint256 _amount\n ) external override onlyVault nonReentrant {\n _withdraw(_recipient, _asset, _amount);\n }\n\n function _withdraw(\n address _recipient,\n address _asset,\n uint256 _amount\n ) internal {\n require(_amount > 0, \"Must withdraw something\");\n require(_recipient != address(0), \"Must specify recipient\");\n\n address pToken = address(_getPTokenFor(_asset));\n\n IMorpho(MORPHO).withdraw(pToken, _amount);\n emit Withdrawal(_asset, pToken, _amount);\n IERC20(_asset).safeTransfer(_recipient, _amount);\n }\n\n /**\n * @dev Remove all assets from platform and send them to Vault contract.\n */\n function withdrawAll() external override onlyVaultOrGovernor nonReentrant {\n for (uint256 i = 0; i < assetsMapped.length; i++) {\n uint256 balance = _checkBalance(assetsMapped[i]);\n if (balance > 0) {\n _withdraw(vaultAddress, assetsMapped[i], balance);\n }\n }\n }\n\n /**\n * @dev Return total value of an asset held in the platform\n * @param _asset Address of the asset\n * @return balance Total value of the asset in the platform\n */\n function checkBalance(address _asset)\n external\n view\n override\n returns (uint256 balance)\n {\n return _checkBalance(_asset);\n }\n\n function _checkBalance(address _asset)\n internal\n view\n returns (uint256 balance)\n {\n address pToken = address(_getPTokenFor(_asset));\n\n // Total value represented by decimal position of underlying token\n (, , balance) = ILens(LENS).getCurrentSupplyBalanceInOf(\n pToken,\n address(this)\n );\n }\n\n /**\n * @dev Retuns bool indicating whether asset is supported by strategy\n * @param _asset Address of the asset\n */\n function supportsAsset(address _asset) public view override returns (bool) {\n return assetToPToken[_asset] != address(0);\n }\n\n /**\n * @dev Get the pToken wrapped in the IERC20 interface for this asset.\n * Fails if the pToken doesn't exist in our mappings.\n * @param _asset Address of the asset\n * @return pToken Corresponding pToken to this asset\n */\n function _getPTokenFor(address _asset) internal view returns (IERC20) {\n address pToken = assetToPToken[_asset];\n require(pToken != address(0), \"pToken does not exist\");\n return IERC20(pToken);\n }\n}\n" + }, + "contracts/strategies/MorphoCompoundStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title OUSD Morpho Compound Strategy\n * @notice Investment strategy for investing stablecoins via Morpho (Compound)\n * @author Origin Protocol Inc\n */\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC20, AbstractCompoundStrategy, InitializableAbstractStrategy } from \"./AbstractCompoundStrategy.sol\";\nimport { IMorpho } from \"../interfaces/morpho/IMorpho.sol\";\nimport { ILens } from \"../interfaces/morpho/ILens.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\nimport \"../utils/Helpers.sol\";\n\ncontract MorphoCompoundStrategy is AbstractCompoundStrategy {\n address public constant MORPHO = 0x8888882f8f843896699869179fB6E4f7e3B58888;\n address public constant LENS = 0x930f1b46e1D081Ec1524efD95752bE3eCe51EF67;\n using SafeERC20 for IERC20;\n using StableMath for uint256;\n\n constructor(BaseStrategyConfig memory _stratConfig)\n InitializableAbstractStrategy(_stratConfig)\n {}\n\n /**\n * @dev Initialize function, to set up initial internal state\n * @param _rewardTokenAddresses Address of reward token for platform\n * @param _assets Addresses of initial supported assets\n * @param _pTokens Platform Token corresponding addresses\n */\n function initialize(\n address[] calldata _rewardTokenAddresses,\n address[] calldata _assets,\n address[] calldata _pTokens\n ) external onlyGovernor initializer {\n InitializableAbstractStrategy._initialize(\n _rewardTokenAddresses,\n _assets,\n _pTokens\n );\n }\n\n /**\n * @dev Approve the spending of all assets by main Morpho contract,\n * if for some reason is it necessary.\n */\n function safeApproveAllTokens()\n external\n override\n onlyGovernor\n nonReentrant\n {\n uint256 assetCount = assetsMapped.length;\n for (uint256 i = 0; i < assetCount; i++) {\n address asset = assetsMapped[i];\n\n // Safe approval\n IERC20(asset).safeApprove(MORPHO, 0);\n IERC20(asset).safeApprove(MORPHO, type(uint256).max);\n }\n }\n\n /**\n * @dev Internal method to respond to the addition of new asset\n * We need to approve and allow Morpho to move them\n * @param _asset Address of the asset to approve\n * @param _pToken The pToken for the approval\n */\n // solhint-disable-next-line no-unused-vars\n function _abstractSetPToken(address _asset, address _pToken)\n internal\n override\n {\n IERC20(_asset).safeApprove(MORPHO, 0);\n IERC20(_asset).safeApprove(MORPHO, type(uint256).max);\n }\n\n /**\n * @dev Collect accumulated rewards and send them to Harvester.\n */\n function collectRewardTokens()\n external\n override\n onlyHarvester\n nonReentrant\n {\n /**\n * Gas considerations. We could query Morpho LENS's `getUserUnclaimedRewards` for each\n * cToken separately and only claimRewards where it is economically feasible. Each call\n * (out of 3) costs ~60k gas extra.\n *\n * Each extra cToken in the `poolTokens` of `claimRewards` function makes that call\n * 89-120k more expensive gas wise.\n *\n * With Lens query in case where:\n * - there is only 1 reward token to collect. Net gas usage in best case would be\n * 3*60 - 2*120 = -60k -> saving 60k gas\n * - there are 2 reward tokens to collect. Net gas usage in best case would be\n * 3*60 - 120 = 60k -> more expensive for 60k gas\n * - there are 3 reward tokens to collect. Net gas usage in best case would be\n * 3*60 = 180k -> more expensive for 180k gas\n *\n * For the above reasoning such \"optimization\" is not implemented\n */\n\n address[] memory poolTokens = new address[](assetsMapped.length);\n for (uint256 i = 0; i < assetsMapped.length; i++) {\n poolTokens[i] = assetToPToken[assetsMapped[i]];\n }\n\n // slither-disable-next-line unused-return\n IMorpho(MORPHO).claimRewards(\n poolTokens, // The addresses of the underlying protocol's pools to claim rewards from\n false // Whether to trade the accrued rewards for MORPHO token, with a premium\n );\n\n // Transfer COMP to Harvester\n IERC20 rewardToken = IERC20(rewardTokenAddresses[0]);\n uint256 balance = rewardToken.balanceOf(address(this));\n emit RewardTokenCollected(\n harvesterAddress,\n rewardTokenAddresses[0],\n balance\n );\n rewardToken.safeTransfer(harvesterAddress, balance);\n }\n\n /**\n * @dev Get the amount of rewards pending to be collected from the protocol\n */\n function getPendingRewards() external view returns (uint256 balance) {\n address[] memory poolTokens = new address[](assetsMapped.length);\n for (uint256 i = 0; i < assetsMapped.length; i++) {\n poolTokens[i] = assetToPToken[assetsMapped[i]];\n }\n\n return ILens(LENS).getUserUnclaimedRewards(poolTokens, address(this));\n }\n\n /**\n * @dev Deposit asset into Morpho\n * @param _asset Address of asset to deposit\n * @param _amount Amount of asset to deposit\n */\n function deposit(address _asset, uint256 _amount)\n external\n override\n onlyVault\n nonReentrant\n {\n _deposit(_asset, _amount);\n }\n\n /**\n * @dev Deposit asset into Morpho\n * @param _asset Address of asset to deposit\n * @param _amount Amount of asset to deposit\n */\n function _deposit(address _asset, uint256 _amount) internal {\n require(_amount > 0, \"Must deposit something\");\n\n IMorpho(MORPHO).supply(\n address(_getCTokenFor(_asset)),\n address(this), // the address of the user you want to supply on behalf of\n _amount\n );\n emit Deposit(_asset, address(_getCTokenFor(_asset)), _amount);\n }\n\n /**\n * @dev Deposit the entire balance of any supported asset into Morpho\n */\n function depositAll() external override onlyVault nonReentrant {\n for (uint256 i = 0; i < assetsMapped.length; i++) {\n uint256 balance = IERC20(assetsMapped[i]).balanceOf(address(this));\n if (balance > 0) {\n _deposit(assetsMapped[i], balance);\n }\n }\n }\n\n /**\n * @dev Withdraw asset from Morpho\n * @param _recipient Address to receive withdrawn asset\n * @param _asset Address of asset to withdraw\n * @param _amount Amount of asset to withdraw\n */\n function withdraw(\n address _recipient,\n address _asset,\n uint256 _amount\n ) external override onlyVault nonReentrant {\n _withdraw(_recipient, _asset, _amount);\n }\n\n function _withdraw(\n address _recipient,\n address _asset,\n uint256 _amount\n ) internal {\n require(_amount > 0, \"Must withdraw something\");\n require(_recipient != address(0), \"Must specify recipient\");\n\n address pToken = assetToPToken[_asset];\n\n IMorpho(MORPHO).withdraw(pToken, _amount);\n emit Withdrawal(_asset, address(_getCTokenFor(_asset)), _amount);\n IERC20(_asset).safeTransfer(_recipient, _amount);\n }\n\n /**\n * @dev Remove all assets from platform and send them to Vault contract.\n */\n function withdrawAll() external override onlyVaultOrGovernor nonReentrant {\n for (uint256 i = 0; i < assetsMapped.length; i++) {\n uint256 balance = _checkBalance(assetsMapped[i]);\n if (balance > 0) {\n _withdraw(vaultAddress, assetsMapped[i], balance);\n }\n }\n }\n\n /**\n * @dev Return total value of an asset held in the platform\n * @param _asset Address of the asset\n * @return balance Total value of the asset in the platform\n */\n function checkBalance(address _asset)\n external\n view\n override\n returns (uint256 balance)\n {\n return _checkBalance(_asset);\n }\n\n function _checkBalance(address _asset)\n internal\n view\n returns (uint256 balance)\n {\n address pToken = assetToPToken[_asset];\n\n // Total value represented by decimal position of underlying token\n (, , balance) = ILens(LENS).getCurrentSupplyBalanceInOf(\n pToken,\n address(this)\n );\n }\n}\n" + }, + "contracts/strategies/NativeStaking/FeeAccumulator.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\n/**\n * @title Fee Accumulator for Native Staking SSV Strategy\n * @notice Receives execution rewards which includes tx fees and\n * MEV rewards like tx priority and tx ordering.\n * It does NOT include swept ETH from beacon chain consensus rewards or full validator withdrawals.\n * @author Origin Protocol Inc\n */\ncontract FeeAccumulator {\n /// @notice The address of the Native Staking Strategy\n address public immutable STRATEGY;\n\n event ExecutionRewardsCollected(address indexed strategy, uint256 amount);\n\n /**\n * @param _strategy Address of the Native Staking Strategy\n */\n constructor(address _strategy) {\n STRATEGY = _strategy;\n }\n\n /**\n * @notice sends all ETH in this FeeAccumulator contract to the Native Staking Strategy.\n * @return eth The amount of execution rewards that were sent to the Native Staking Strategy\n */\n function collect() external returns (uint256 eth) {\n require(msg.sender == STRATEGY, \"Caller is not the Strategy\");\n\n eth = address(this).balance;\n if (eth > 0) {\n // Send the ETH to the Native Staking Strategy\n Address.sendValue(payable(STRATEGY), eth);\n\n emit ExecutionRewardsCollected(STRATEGY, eth);\n }\n }\n\n /**\n * @dev Accept ETH\n */\n receive() external payable {}\n}\n" + }, + "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport \"@openzeppelin/contracts/utils/math/Math.sol\";\n\nimport { InitializableAbstractStrategy } from \"../../utils/InitializableAbstractStrategy.sol\";\nimport { IWETH9 } from \"../../interfaces/IWETH9.sol\";\nimport { FeeAccumulator } from \"./FeeAccumulator.sol\";\nimport { ValidatorAccountant } from \"./ValidatorAccountant.sol\";\nimport { ISSVNetwork } from \"../../interfaces/ISSVNetwork.sol\";\n\nstruct ValidatorStakeData {\n bytes pubkey;\n bytes signature;\n bytes32 depositDataRoot;\n}\n\n/// @title Native Staking SSV Strategy\n/// @notice Strategy to deploy funds into DVT validators powered by the SSV Network\n/// @author Origin Protocol Inc\n/// @dev This contract handles WETH and ETH and in some operations interchanges between the two. Any WETH that\n/// is on the contract across multiple blocks (and not just transitory within a transaction) is considered an\n/// asset. Meaning deposits increase the balance of the asset and withdrawal decrease it. As opposed to all\n/// our other strategies the WETH doesn't immediately get deposited into an underlying strategy and can be present\n/// across multiple blocks waiting to be unwrapped to ETH and staked to validators. This separation of WETH and ETH is\n/// required since the rewards (reward token) is also in ETH.\n///\n/// To simplify the accounting of WETH there is another difference in behavior compared to the other strategies.\n/// To withdraw WETH asset - exit message is posted to validators and the ETH hits this contract with multiple days\n/// delay. In order to simplify the WETH accounting upon detection of such an event the ValidatorAccountant\n/// immediately wraps ETH to WETH and sends it to the Vault.\n///\n/// On the other hand any ETH on the contract (across multiple blocks) is there either:\n/// - as a result of already accounted for consensus rewards\n/// - as a result of not yet accounted for consensus rewards\n/// - as a results of not yet accounted for full validator withdrawals (or validator slashes)\n///\n/// Even though the strategy assets and rewards are a very similar asset the consensus layer rewards and the\n/// execution layer rewards are considered rewards and those are dripped to the Vault over a configurable time\n/// interval and not immediately.\ncontract NativeStakingSSVStrategy is\n ValidatorAccountant,\n InitializableAbstractStrategy\n{\n using SafeERC20 for IERC20;\n\n /// @notice SSV ERC20 token that serves as a payment for operating SSV validators\n address public immutable SSV_TOKEN;\n /// @notice Fee collector address\n /// @dev this address will receive maximal extractable value (MEV) rewards. These are\n /// rewards for arranging transactions in a way that benefits the validator.\n address payable public immutable FEE_ACCUMULATOR_ADDRESS;\n\n /// @dev This contract receives WETH as the deposit asset, but unlike other strategies doesn't immediately\n /// deposit it to an underlying platform. Rather a special privilege account stakes it to the validators.\n /// For that reason calling WETH.balanceOf(this) in a deposit function can contain WETH that has just been\n /// deposited and also WETH that has previously been deposited. To keep a correct count we need to keep track\n /// of WETH that has already been accounted for.\n /// This value represents the amount of WETH balance of this contract that has already been accounted for by the\n /// deposit events.\n /// It is important to note that this variable is not concerned with WETH that is a result of full/partial\n /// withdrawal of the validators. It is strictly concerned with WETH that has been deposited and is waiting to\n /// be staked.\n uint256 public depositedWethAccountedFor;\n\n // For future use\n uint256[49] private __gap;\n\n /// @param _baseConfig Base strategy config with platformAddress (ERC-4626 Vault contract), eg sfrxETH or sDAI,\n /// and vaultAddress (OToken Vault contract), eg VaultProxy or OETHVaultProxy\n /// @param _wethAddress Address of the Erc20 WETH Token contract\n /// @param _ssvToken Address of the Erc20 SSV Token contract\n /// @param _ssvNetwork Address of the SSV Network contract\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\n /// @param _feeAccumulator Address of the fee accumulator receiving execution layer validator rewards\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\n constructor(\n BaseStrategyConfig memory _baseConfig,\n address _wethAddress,\n address _ssvToken,\n address _ssvNetwork,\n uint256 _maxValidators,\n address _feeAccumulator,\n address _beaconChainDepositContract\n )\n InitializableAbstractStrategy(_baseConfig)\n ValidatorAccountant(\n _wethAddress,\n _baseConfig.vaultAddress,\n _beaconChainDepositContract,\n _ssvNetwork,\n _maxValidators\n )\n {\n SSV_TOKEN = _ssvToken;\n FEE_ACCUMULATOR_ADDRESS = payable(_feeAccumulator);\n }\n\n /// @notice Set up initial internal state including\n /// 1. approving the SSVNetwork to transfer SSV tokens from this strategy contract\n /// 2. setting the recipient of SSV validator MEV rewards to the FeeAccumulator contract.\n /// @param _rewardTokenAddresses Address of reward token for platform\n /// @param _assets Addresses of initial supported assets\n /// @param _pTokens Platform Token corresponding addresses\n function initialize(\n address[] memory _rewardTokenAddresses,\n address[] memory _assets,\n address[] memory _pTokens\n ) external onlyGovernor initializer {\n InitializableAbstractStrategy._initialize(\n _rewardTokenAddresses,\n _assets,\n _pTokens\n );\n\n // Approves the SSV Network contract to transfer SSV tokens for deposits\n IERC20(SSV_TOKEN).approve(SSV_NETWORK, type(uint256).max);\n\n // Set the FeeAccumulator as the address for SSV validators to send MEV rewards to\n ISSVNetwork(SSV_NETWORK).setFeeRecipientAddress(\n FEE_ACCUMULATOR_ADDRESS\n );\n }\n\n /// @notice Unlike other strategies, this does not deposit assets into the underlying platform.\n /// It just checks the asset is WETH and emits the Deposit event.\n /// To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used.\n /// Will NOT revert if the strategy is paused from an accounting failure.\n /// @param _asset Address of asset to deposit. Has to be WETH.\n /// @param _amount Amount of assets that were transferred to the strategy by the vault.\n function deposit(address _asset, uint256 _amount)\n external\n override\n onlyVault\n nonReentrant\n {\n require(_asset == WETH, \"Unsupported asset\");\n depositedWethAccountedFor += _amount;\n _deposit(_asset, _amount);\n }\n\n /// @dev Deposit WETH to this strategy so it can later be staked into a validator.\n /// @param _asset Address of WETH\n /// @param _amount Amount of WETH to deposit\n function _deposit(address _asset, uint256 _amount) internal {\n require(_amount > 0, \"Must deposit something\");\n /*\n * We could do a check here that would revert when \"_amount % 32 ether != 0\". With the idea of\n * not allowing deposits that will result in WETH sitting on the strategy after all the possible batches\n * of 32ETH have been staked.\n * But someone could mess with our strategy by sending some WETH to it. And we might want to deposit just\n * enough WETH to add it up to 32 so it can be staked. For that reason the check is left out.\n *\n * WETH sitting on the strategy won't interfere with the accounting since accounting only operates on ETH.\n */\n emit Deposit(_asset, address(0), _amount);\n }\n\n /// @notice Unlike other strategies, this does not deposit assets into the underlying platform.\n /// It just emits the Deposit event.\n /// To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used.\n /// Will NOT revert if the strategy is paused from an accounting failure.\n function depositAll() external override onlyVault nonReentrant {\n uint256 wethBalance = IERC20(WETH).balanceOf(address(this));\n uint256 newWeth = wethBalance - depositedWethAccountedFor;\n\n if (newWeth > 0) {\n depositedWethAccountedFor = wethBalance;\n\n _deposit(WETH, newWeth);\n }\n }\n\n /// @notice Withdraw WETH from this contract. Used only if some WETH for is lingering on the contract.\n /// That can happen when:\n /// - after mints if the strategy is the default\n /// - time between depositToStrategy and stakeEth\n /// - the deposit was not a multiple of 32 WETH\n /// - someone sent WETH directly to this contract\n /// Will NOT revert if the strategy is paused from an accounting failure.\n /// @param _recipient Address to receive withdrawn assets\n /// @param _asset WETH to withdraw\n /// @param _amount Amount of WETH to withdraw\n function withdraw(\n address _recipient,\n address _asset,\n uint256 _amount\n ) external override onlyVault nonReentrant {\n require(_asset == WETH, \"Unsupported asset\");\n _withdraw(_recipient, _asset, _amount);\n }\n\n function _withdraw(\n address _recipient,\n address _asset,\n uint256 _amount\n ) internal {\n require(_amount > 0, \"Must withdraw something\");\n require(_recipient != address(0), \"Must specify recipient\");\n\n _wethWithdrawn(_amount);\n\n IERC20(_asset).safeTransfer(_recipient, _amount);\n emit Withdrawal(_asset, address(0), _amount);\n }\n\n /// @notice transfer all WETH deposits back to the vault.\n /// This does not withdraw from the validators. That has to be done separately with the\n /// `exitSsvValidator` and `removeSsvValidator` operations.\n /// This does not withdraw any execution rewards from the FeeAccumulator or\n /// consensus rewards in this strategy.\n /// Any ETH in this strategy that was swept from a full validator withdrawal will not be withdrawn.\n /// ETH from full validator withdrawals is sent to the Vault using `doAccounting`.\n /// Will NOT revert if the strategy is paused from an accounting failure.\n function withdrawAll() external override onlyVaultOrGovernor nonReentrant {\n uint256 wethBalance = IERC20(WETH).balanceOf(address(this));\n if (wethBalance > 0) {\n _withdraw(vaultAddress, WETH, wethBalance);\n }\n }\n\n /// @notice Returns the total value of (W)ETH that is staked to the validators\n /// and WETH deposits that are still to be staked.\n /// This does not include ETH from consensus rewards sitting in this strategy\n /// or ETH from MEV rewards in the FeeAccumulator. These rewards are harvested\n /// and sent to the Dripper so will eventually be sent to the Vault as WETH.\n /// @param _asset Address of weth asset\n /// @return balance Total value of (W)ETH\n function checkBalance(address _asset)\n external\n view\n override\n returns (uint256 balance)\n {\n require(_asset == WETH, \"Unsupported asset\");\n\n balance =\n // add the ETH that has been staked in validators\n activeDepositedValidators *\n FULL_STAKE +\n // add the WETH in the strategy from deposits that are still to be staked\n IERC20(WETH).balanceOf(address(this));\n }\n\n function pause() external onlyStrategist {\n _pause();\n }\n\n /// @notice Returns bool indicating whether asset is supported by strategy.\n /// @param _asset The address of the asset token.\n function supportsAsset(address _asset) public view override returns (bool) {\n return _asset == WETH;\n }\n\n /// @notice Approves the SSV Network contract to transfer SSV tokens for deposits\n function safeApproveAllTokens() external override {\n // Approves the SSV Network contract to transfer SSV tokens for deposits\n IERC20(SSV_TOKEN).approve(SSV_NETWORK, type(uint256).max);\n }\n\n /// @notice Set the FeeAccumulator as the address for SSV validators to send MEV rewards to\n function setFeeRecipient() external {\n ISSVNetwork(SSV_NETWORK).setFeeRecipientAddress(\n FEE_ACCUMULATOR_ADDRESS\n );\n }\n\n /**\n * @notice Only accept ETH from the FeeAccumulator and the WETH contract - required when\n * unwrapping WETH just before staking it to the validator.\n * The strategy will also receive ETH from the priority fees of transactions when producing blocks\n * as defined in EIP-1559.\n * The tx fees come from the Beacon chain so do not need any EVM level permissions to receive ETH.\n * The tx fees are paid with each block produced. They are not included in the consensus rewards\n * which are periodically swept from the validators to this strategy.\n * For accounting purposes, the priority fees of transactions will be considered consensus rewards\n * and will be included in the AccountingConsensusRewards event.\n * @dev don't want to receive donations from anyone else as donations over the fuse limits will\n * mess with the accounting of the consensus rewards and validator full withdrawals.\n */\n receive() external payable {\n require(\n msg.sender == FEE_ACCUMULATOR_ADDRESS || msg.sender == WETH,\n \"Eth not from allowed contracts\"\n );\n }\n\n /***************************************\n Internal functions\n ****************************************/\n\n function _abstractSetPToken(address _asset, address) internal override {}\n\n /// @dev Convert accumulated ETH to WETH and send to the Harvester.\n /// Will revert if the strategy is paused for accounting.\n function _collectRewardTokens() internal override whenNotPaused {\n // collect ETH from execution rewards from the fee accumulator\n uint256 executionRewards = FeeAccumulator(FEE_ACCUMULATOR_ADDRESS)\n .collect();\n\n // total ETH rewards to be harvested = execution rewards + consensus rewards\n uint256 ethRewards = executionRewards + consensusRewards;\n\n require(\n address(this).balance >= ethRewards,\n \"Insufficient eth balance\"\n );\n\n if (ethRewards > 0) {\n // reset the counter keeping track of beacon chain consensus rewards\n consensusRewards = 0;\n\n // Convert ETH rewards to WETH\n IWETH9(WETH).deposit{ value: ethRewards }();\n\n IERC20(WETH).safeTransfer(harvesterAddress, ethRewards);\n emit RewardTokenCollected(harvesterAddress, WETH, ethRewards);\n }\n }\n\n /// @dev emits Withdrawal event from NativeStakingSSVStrategy\n function _wethWithdrawnToVault(uint256 _amount) internal override {\n emit Withdrawal(WETH, address(0), _amount);\n }\n\n /// @dev Called when WETH is withdrawn from the strategy or staked to a validator so\n /// the strategy knows how much WETH it has on deposit.\n /// This is so it can emit the correct amount in the Deposit event in depositAll().\n function _wethWithdrawn(uint256 _amount) internal override {\n /* In an ideal world we wouldn't need to reduce the deduction amount when the\n * depositedWethAccountedFor is smaller than the _amount.\n *\n * The reason this is required is that a malicious actor could sent WETH directly\n * to this contract and that would circumvent the increase of depositedWethAccountedFor\n * property. When the ETH would be staked the depositedWethAccountedFor amount could\n * be deducted so much that it would be negative.\n */\n uint256 deductAmount = Math.min(_amount, depositedWethAccountedFor);\n depositedWethAccountedFor -= deductAmount;\n }\n}\n" + }, + "contracts/strategies/NativeStaking/ValidatorAccountant.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { ValidatorRegistrator } from \"./ValidatorRegistrator.sol\";\nimport { IWETH9 } from \"../../interfaces/IWETH9.sol\";\n\n/// @title Validator Accountant\n/// @notice Attributes the ETH swept from beacon chain validators to this strategy contract\n/// as either full or partial withdrawals. Partial withdrawals being consensus rewards.\n/// Full withdrawals are from exited validators.\n/// @author Origin Protocol Inc\nabstract contract ValidatorAccountant is ValidatorRegistrator {\n /// @notice The minimum amount of blocks that need to pass between two calls to manuallyFixAccounting\n uint256 public constant MIN_FIX_ACCOUNTING_CADENCE = 7200; // 1 day\n\n /// @notice Keeps track of the total consensus rewards swept from the beacon chain\n uint256 public consensusRewards;\n\n /// @notice start of fuse interval\n uint256 public fuseIntervalStart;\n /// @notice end of fuse interval\n uint256 public fuseIntervalEnd;\n /// @notice last block number manuallyFixAccounting has been called\n uint256 public lastFixAccountingBlockNumber;\n\n uint256[49] private __gap;\n\n event FuseIntervalUpdated(uint256 start, uint256 end);\n event AccountingFullyWithdrawnValidator(\n uint256 noOfValidators,\n uint256 remainingValidators,\n uint256 wethSentToVault\n );\n event AccountingValidatorSlashed(\n uint256 remainingValidators,\n uint256 wethSentToVault\n );\n event AccountingConsensusRewards(uint256 amount);\n\n event AccountingManuallyFixed(\n int256 validatorsDelta,\n int256 consensusRewardsDelta,\n uint256 wethToVault\n );\n\n /// @param _wethAddress Address of the Erc20 WETH Token contract\n /// @param _vaultAddress Address of the Vault\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\n /// @param _ssvNetwork Address of the SSV Network contract\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\n constructor(\n address _wethAddress,\n address _vaultAddress,\n address _beaconChainDepositContract,\n address _ssvNetwork,\n uint256 _maxValidators\n )\n ValidatorRegistrator(\n _wethAddress,\n _vaultAddress,\n _beaconChainDepositContract,\n _ssvNetwork,\n _maxValidators\n )\n {}\n\n /// @notice set fuse interval values\n function setFuseInterval(\n uint256 _fuseIntervalStart,\n uint256 _fuseIntervalEnd\n ) external onlyGovernor {\n require(\n _fuseIntervalStart < _fuseIntervalEnd &&\n _fuseIntervalEnd < 32 ether &&\n _fuseIntervalEnd - _fuseIntervalStart >= 4 ether,\n \"Incorrect fuse interval\"\n );\n\n fuseIntervalStart = _fuseIntervalStart;\n fuseIntervalEnd = _fuseIntervalEnd;\n\n emit FuseIntervalUpdated(_fuseIntervalStart, _fuseIntervalEnd);\n }\n\n /* solhint-disable max-line-length */\n /// This notion page offers a good explanation of how the accounting functions\n /// https://www.notion.so/originprotocol/Limited-simplified-native-staking-accounting-67a217c8420d40678eb943b9da0ee77d\n /// In short, after dividing by 32, if the ETH remaining on the contract falls between 0 and fuseIntervalStart,\n /// the accounting function will treat that ETH as Beacon chain consensus rewards.\n /// On the contrary, if after dividing by 32, the ETH remaining on the contract falls between fuseIntervalEnd and 32,\n /// the accounting function will treat that as a validator slashing.\n /// @notice Perform the accounting attributing beacon chain ETH to either full or partial withdrawals. Returns true when\n /// accounting is valid and fuse isn't \"blown\". Returns false when fuse is blown.\n /// @dev This function could in theory be permission-less but lets allow only the Registrator (Defender Action) to call it\n /// for now.\n /// @return accountingValid true if accounting was successful, false if fuse is blown\n /* solhint-enable max-line-length */\n function doAccounting()\n external\n onlyRegistrator\n whenNotPaused\n nonReentrant\n returns (bool accountingValid)\n {\n // pause the accounting on failure\n accountingValid = _doAccounting(true);\n }\n\n // slither-disable-start reentrancy-eth\n function _doAccounting(bool pauseOnFail)\n internal\n returns (bool accountingValid)\n {\n if (address(this).balance < consensusRewards) {\n return _failAccounting(pauseOnFail);\n }\n\n // Calculate all the new ETH that has been swept to the contract since the last accounting\n uint256 newSweptETH = address(this).balance - consensusRewards;\n accountingValid = true;\n\n // send the ETH that is from fully withdrawn validators to the Vault\n if (newSweptETH >= FULL_STAKE) {\n uint256 fullyWithdrawnValidators;\n // explicitly cast to uint256 as we want to round to a whole number of validators\n fullyWithdrawnValidators = uint256(newSweptETH / FULL_STAKE);\n activeDepositedValidators -= fullyWithdrawnValidators;\n\n uint256 wethToVault = FULL_STAKE * fullyWithdrawnValidators;\n IWETH9(WETH).deposit{ value: wethToVault }();\n // slither-disable-next-line unchecked-transfer\n IWETH9(WETH).transfer(VAULT_ADDRESS, wethToVault);\n _wethWithdrawnToVault(wethToVault);\n\n emit AccountingFullyWithdrawnValidator(\n fullyWithdrawnValidators,\n activeDepositedValidators,\n wethToVault\n );\n }\n\n uint256 ethRemaining = address(this).balance - consensusRewards;\n // should be less than a whole validator stake\n require(ethRemaining < FULL_STAKE, \"Unexpected accounting\");\n\n // If no Beacon chain consensus rewards swept\n if (ethRemaining == 0) {\n // do nothing\n return accountingValid;\n } else if (ethRemaining < fuseIntervalStart) {\n // Beacon chain consensus rewards swept (partial validator withdrawals)\n // solhint-disable-next-line reentrancy\n consensusRewards += ethRemaining;\n emit AccountingConsensusRewards(ethRemaining);\n } else if (ethRemaining > fuseIntervalEnd) {\n // Beacon chain consensus rewards swept but also a slashed validator fully exited\n IWETH9(WETH).deposit{ value: ethRemaining }();\n // slither-disable-next-line unchecked-transfer\n IWETH9(WETH).transfer(VAULT_ADDRESS, ethRemaining);\n activeDepositedValidators -= 1;\n\n _wethWithdrawnToVault(ethRemaining);\n\n emit AccountingValidatorSlashed(\n activeDepositedValidators,\n ethRemaining\n );\n }\n // Oh no... Fuse is blown. The Strategist needs to adjust the accounting values.\n else {\n return _failAccounting(pauseOnFail);\n }\n }\n\n // slither-disable-end reentrancy-eth\n\n /// @dev pause any further accounting if required and return false\n function _failAccounting(bool pauseOnFail)\n internal\n returns (bool accountingValid)\n {\n // pause if not already\n if (pauseOnFail) {\n _pause();\n }\n // fail the accounting\n accountingValid = false;\n }\n\n /// @notice Allow the Strategist to fix the accounting of this strategy and unpause.\n /// @param _validatorsDelta adjust the active validators by up to plus three or minus three\n /// @param _consensusRewardsDelta adjust the accounted for consensus rewards up or down\n /// @param _ethToVaultAmount the amount of ETH that gets wrapped into WETH and sent to the Vault\n /// @dev There is a case when a validator(s) gets slashed so much that the eth swept from\n /// the beacon chain enters the fuse area and there are no consensus rewards on the contract\n /// to \"dip into\"/use. To increase the amount of unaccounted ETH over the fuse end interval\n /// we need to reduce the amount of active deposited validators and immediately send WETH\n /// to the vault, so it doesn't interfere with further accounting.\n function manuallyFixAccounting(\n int256 _validatorsDelta,\n int256 _consensusRewardsDelta,\n uint256 _ethToVaultAmount\n ) external onlyStrategist whenPaused nonReentrant {\n require(\n lastFixAccountingBlockNumber + MIN_FIX_ACCOUNTING_CADENCE <\n block.number,\n \"Fix accounting called too soon\"\n );\n require(\n _validatorsDelta >= -3 &&\n _validatorsDelta <= 3 &&\n // new value must be positive\n int256(activeDepositedValidators) + _validatorsDelta >= 0,\n \"Invalid validatorsDelta\"\n );\n require(\n _consensusRewardsDelta >= -332 ether &&\n _consensusRewardsDelta <= 332 ether &&\n // new value must be positive\n int256(consensusRewards) + _consensusRewardsDelta >= 0,\n \"Invalid consensusRewardsDelta\"\n );\n require(_ethToVaultAmount <= 32 ether * 3, \"Invalid wethToVaultAmount\");\n\n activeDepositedValidators = uint256(\n int256(activeDepositedValidators) + _validatorsDelta\n );\n consensusRewards = uint256(\n int256(consensusRewards) + _consensusRewardsDelta\n );\n lastFixAccountingBlockNumber = block.number;\n if (_ethToVaultAmount > 0) {\n IWETH9(WETH).deposit{ value: _ethToVaultAmount }();\n // slither-disable-next-line unchecked-transfer\n IWETH9(WETH).transfer(VAULT_ADDRESS, _ethToVaultAmount);\n _wethWithdrawnToVault(_ethToVaultAmount);\n }\n\n emit AccountingManuallyFixed(\n _validatorsDelta,\n _consensusRewardsDelta,\n _ethToVaultAmount\n );\n\n // rerun the accounting to see if it has now been fixed.\n // Do not pause the accounting on failure as it is already paused\n require(_doAccounting(false), \"Fuse still blown\");\n\n // unpause since doAccounting was successful\n _unpause();\n }\n\n /***************************************\n Abstract\n ****************************************/\n\n /// @dev allows for NativeStakingSSVStrategy contract to emit the Withdrawal event\n function _wethWithdrawnToVault(uint256 _amount) internal virtual;\n}\n" + }, + "contracts/strategies/NativeStaking/ValidatorRegistrator.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { Pausable } from \"@openzeppelin/contracts/security/Pausable.sol\";\nimport { Governable } from \"../../governance/Governable.sol\";\nimport { IDepositContract } from \"../../interfaces/IDepositContract.sol\";\nimport { IVault } from \"../../interfaces/IVault.sol\";\nimport { IWETH9 } from \"../../interfaces/IWETH9.sol\";\nimport { ISSVNetwork, Cluster } from \"../../interfaces/ISSVNetwork.sol\";\n\nstruct ValidatorStakeData {\n bytes pubkey;\n bytes signature;\n bytes32 depositDataRoot;\n}\n\n/**\n * @title Registrator of the validators\n * @notice This contract implements all the required functionality to register, exit and remove validators.\n * @author Origin Protocol Inc\n */\nabstract contract ValidatorRegistrator is Governable, Pausable {\n /// @notice The maximum amount of ETH that can be staked by a validator\n /// @dev this can change in the future with EIP-7251, Increase the MAX_EFFECTIVE_BALANCE\n uint256 public constant FULL_STAKE = 32 ether;\n\n /// @notice The address of the Wrapped ETH (WETH) token contract\n address public immutable WETH;\n /// @notice The address of the beacon chain deposit contract\n address public immutable BEACON_CHAIN_DEPOSIT_CONTRACT;\n /// @notice The address of the SSV Network contract used to interface with\n address public immutable SSV_NETWORK;\n /// @notice Address of the OETH Vault proxy contract\n address public immutable VAULT_ADDRESS;\n /// @notice Maximum number of validators that can be registered in this strategy\n uint256 public immutable MAX_VALIDATORS;\n\n /// @notice Address of the registrator - allowed to register, exit and remove validators\n address public validatorRegistrator;\n /// @notice The number of validators that have 32 (!) ETH actively deposited. When a new deposit\n /// to a validator happens this number increases, when a validator exit is detected this number\n /// decreases.\n uint256 public activeDepositedValidators;\n /// @notice State of the validators keccak256(pubKey) => state\n mapping(bytes32 => VALIDATOR_STATE) public validatorsStates;\n /// @notice The account that is allowed to modify stakeETHThreshold and reset stakeETHTally\n address public stakingMonitor;\n /// @notice Amount of ETH that can be staked before staking on the contract is suspended\n /// and the `stakingMonitor` needs to approve further staking by calling `resetStakeETHTally`\n uint256 public stakeETHThreshold;\n /// @notice Amount of ETH that has been staked since the `stakingMonitor` last called `resetStakeETHTally`.\n /// This can not go above `stakeETHThreshold`.\n uint256 public stakeETHTally;\n // For future use\n uint256[47] private __gap;\n\n enum VALIDATOR_STATE {\n NON_REGISTERED, // validator is not registered on the SSV network\n REGISTERED, // validator is registered on the SSV network\n STAKED, // validator has funds staked\n EXITING, // exit message has been posted and validator is in the process of exiting\n EXIT_COMPLETE // validator has funds withdrawn to the EigenPod and is removed from the SSV\n }\n\n event RegistratorChanged(address indexed newAddress);\n event StakingMonitorChanged(address indexed newAddress);\n event ETHStaked(bytes32 indexed pubKeyHash, bytes pubKey, uint256 amount);\n event SSVValidatorRegistered(\n bytes32 indexed pubKeyHash,\n bytes pubKey,\n uint64[] operatorIds\n );\n event SSVValidatorExitInitiated(\n bytes32 indexed pubKeyHash,\n bytes pubKey,\n uint64[] operatorIds\n );\n event SSVValidatorExitCompleted(\n bytes32 indexed pubKeyHash,\n bytes pubKey,\n uint64[] operatorIds\n );\n event StakeETHThresholdChanged(uint256 amount);\n event StakeETHTallyReset();\n\n /// @dev Throws if called by any account other than the Registrator\n modifier onlyRegistrator() {\n require(\n msg.sender == validatorRegistrator,\n \"Caller is not the Registrator\"\n );\n _;\n }\n\n /// @dev Throws if called by any account other than the Staking monitor\n modifier onlyStakingMonitor() {\n require(msg.sender == stakingMonitor, \"Caller is not the Monitor\");\n _;\n }\n\n /// @dev Throws if called by any account other than the Strategist\n modifier onlyStrategist() {\n require(\n msg.sender == IVault(VAULT_ADDRESS).strategistAddr(),\n \"Caller is not the Strategist\"\n );\n _;\n }\n\n /// @param _wethAddress Address of the Erc20 WETH Token contract\n /// @param _vaultAddress Address of the Vault\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\n /// @param _ssvNetwork Address of the SSV Network contract\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\n constructor(\n address _wethAddress,\n address _vaultAddress,\n address _beaconChainDepositContract,\n address _ssvNetwork,\n uint256 _maxValidators\n ) {\n WETH = _wethAddress;\n BEACON_CHAIN_DEPOSIT_CONTRACT = _beaconChainDepositContract;\n SSV_NETWORK = _ssvNetwork;\n VAULT_ADDRESS = _vaultAddress;\n MAX_VALIDATORS = _maxValidators;\n }\n\n /// @notice Set the address of the registrator which can register, exit and remove validators\n function setRegistrator(address _address) external onlyGovernor {\n validatorRegistrator = _address;\n emit RegistratorChanged(_address);\n }\n\n /// @notice Set the address of the staking monitor that is allowed to reset stakeETHTally\n function setStakingMonitor(address _address) external onlyGovernor {\n stakingMonitor = _address;\n emit StakingMonitorChanged(_address);\n }\n\n /// @notice Set the amount of ETH that can be staked before staking monitor\n // needs to a approve further staking by resetting the stake ETH tally\n function setStakeETHThreshold(uint256 _amount) external onlyGovernor {\n stakeETHThreshold = _amount;\n emit StakeETHThresholdChanged(_amount);\n }\n\n /// @notice Reset the stakeETHTally\n function resetStakeETHTally() external onlyStakingMonitor {\n stakeETHTally = 0;\n emit StakeETHTallyReset();\n }\n\n /// @notice Stakes WETH to the node validators\n /// @param validators A list of validator data needed to stake.\n /// The `ValidatorStakeData` struct contains the pubkey, signature and depositDataRoot.\n /// Only the registrator can call this function.\n // slither-disable-start reentrancy-eth\n function stakeEth(ValidatorStakeData[] calldata validators)\n external\n onlyRegistrator\n whenNotPaused\n nonReentrant\n {\n uint256 requiredETH = validators.length * FULL_STAKE;\n\n // Check there is enough WETH from the deposits sitting in this strategy contract\n require(\n requiredETH <= IWETH9(WETH).balanceOf(address(this)),\n \"Insufficient WETH\"\n );\n require(\n activeDepositedValidators + validators.length <= MAX_VALIDATORS,\n \"Max validators reached\"\n );\n\n require(\n stakeETHTally + requiredETH <= stakeETHThreshold,\n \"Staking ETH over threshold\"\n );\n stakeETHTally += requiredETH;\n\n // Convert required ETH from WETH\n IWETH9(WETH).withdraw(requiredETH);\n _wethWithdrawn(requiredETH);\n\n /* 0x01 to indicate that withdrawal credentials will contain an EOA address that the sweeping function\n * can sweep funds to.\n * bytes11(0) to fill up the required zeros\n * remaining bytes20 are for the address\n */\n bytes memory withdrawalCredentials = abi.encodePacked(\n bytes1(0x01),\n bytes11(0),\n address(this)\n );\n\n // For each validator\n for (uint256 i = 0; i < validators.length; ++i) {\n bytes32 pubKeyHash = keccak256(validators[i].pubkey);\n\n require(\n validatorsStates[pubKeyHash] == VALIDATOR_STATE.REGISTERED,\n \"Validator not registered\"\n );\n\n IDepositContract(BEACON_CHAIN_DEPOSIT_CONTRACT).deposit{\n value: FULL_STAKE\n }(\n validators[i].pubkey,\n withdrawalCredentials,\n validators[i].signature,\n validators[i].depositDataRoot\n );\n\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.STAKED;\n\n emit ETHStaked(pubKeyHash, validators[i].pubkey, FULL_STAKE);\n }\n // save gas by changing this storage variable only once rather each time in the loop.\n activeDepositedValidators += validators.length;\n }\n\n // slither-disable-end reentrancy-eth\n\n /// @notice Registers a new validator in the SSV Cluster.\n /// Only the registrator can call this function.\n /// @param publicKeys The public keys of the validators\n /// @param operatorIds The operator IDs of the SSV Cluster\n /// @param sharesData The shares data for each validator\n /// @param ssvAmount The amount of SSV tokens to be deposited to the SSV cluster\n /// @param cluster The SSV cluster details including the validator count and SSV balance\n // slither-disable-start reentrancy-no-eth\n function registerSsvValidators(\n bytes[] calldata publicKeys,\n uint64[] calldata operatorIds,\n bytes[] calldata sharesData,\n uint256 ssvAmount,\n Cluster calldata cluster\n ) external onlyRegistrator whenNotPaused {\n require(\n publicKeys.length == sharesData.length,\n \"Pubkey sharesData mismatch\"\n );\n // Check each public key has not already been used\n bytes32 pubKeyHash;\n VALIDATOR_STATE currentState;\n for (uint256 i = 0; i < publicKeys.length; ++i) {\n pubKeyHash = keccak256(publicKeys[i]);\n currentState = validatorsStates[pubKeyHash];\n require(\n currentState == VALIDATOR_STATE.NON_REGISTERED,\n \"Validator already registered\"\n );\n\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.REGISTERED;\n\n emit SSVValidatorRegistered(pubKeyHash, publicKeys[i], operatorIds);\n }\n\n ISSVNetwork(SSV_NETWORK).bulkRegisterValidator(\n publicKeys,\n operatorIds,\n sharesData,\n ssvAmount,\n cluster\n );\n }\n\n // slither-disable-end reentrancy-no-eth\n\n /// @notice Exit a validator from the Beacon chain.\n /// The staked ETH will eventually swept to this native staking strategy.\n /// Only the registrator can call this function.\n /// @param publicKey The public key of the validator\n /// @param operatorIds The operator IDs of the SSV Cluster\n // slither-disable-start reentrancy-no-eth\n function exitSsvValidator(\n bytes calldata publicKey,\n uint64[] calldata operatorIds\n ) external onlyRegistrator whenNotPaused {\n bytes32 pubKeyHash = keccak256(publicKey);\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\n require(currentState == VALIDATOR_STATE.STAKED, \"Validator not staked\");\n\n ISSVNetwork(SSV_NETWORK).exitValidator(publicKey, operatorIds);\n\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXITING;\n\n emit SSVValidatorExitInitiated(pubKeyHash, publicKey, operatorIds);\n }\n\n // slither-disable-end reentrancy-no-eth\n\n /// @notice Remove a validator from the SSV Cluster.\n /// Make sure `exitSsvValidator` is called before and the validate has exited the Beacon chain.\n /// If removed before the validator has exited the beacon chain will result in the validator being slashed.\n /// Only the registrator can call this function.\n /// @param publicKey The public key of the validator\n /// @param operatorIds The operator IDs of the SSV Cluster\n /// @param cluster The SSV cluster details including the validator count and SSV balance\n // slither-disable-start reentrancy-no-eth\n function removeSsvValidator(\n bytes calldata publicKey,\n uint64[] calldata operatorIds,\n Cluster calldata cluster\n ) external onlyRegistrator whenNotPaused {\n bytes32 pubKeyHash = keccak256(publicKey);\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\n // Can remove SSV validators that were incorrectly registered and can not be deposited to.\n require(\n currentState == VALIDATOR_STATE.EXITING ||\n currentState == VALIDATOR_STATE.REGISTERED,\n \"Validator not regd or exiting\"\n );\n\n ISSVNetwork(SSV_NETWORK).removeValidator(\n publicKey,\n operatorIds,\n cluster\n );\n\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXIT_COMPLETE;\n\n emit SSVValidatorExitCompleted(pubKeyHash, publicKey, operatorIds);\n }\n\n // slither-disable-end reentrancy-no-eth\n\n /// @notice Deposits more SSV Tokens to the SSV Network contract which is used to pay the SSV Operators.\n /// @dev A SSV cluster is defined by the SSVOwnerAddress and the set of operatorIds.\n /// uses \"onlyStrategist\" modifier so continuous front-running can't DOS our maintenance service\n /// that tries to top up SSV tokens.\n /// @param operatorIds The operator IDs of the SSV Cluster\n /// @param ssvAmount The amount of SSV tokens to be deposited to the SSV cluster\n /// @param cluster The SSV cluster details including the validator count and SSV balance\n function depositSSV(\n uint64[] memory operatorIds,\n uint256 ssvAmount,\n Cluster memory cluster\n ) external onlyStrategist {\n ISSVNetwork(SSV_NETWORK).deposit(\n address(this),\n operatorIds,\n ssvAmount,\n cluster\n );\n }\n\n /***************************************\n Abstract\n ****************************************/\n\n /// @dev Called when WETH is withdrawn from the strategy or staked to a validator so\n /// the strategy knows how much WETH it has on deposit.\n /// This is so it can emit the correct amount in the Deposit event in depositAll().\n function _wethWithdrawn(uint256 _amount) internal virtual;\n}\n" + }, + "contracts/strategies/ThreePoolStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Curve 3Pool Strategy\n * @notice Investment strategy for investing stablecoins via Curve 3Pool\n * @author Origin Protocol Inc\n */\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport { ICurveGauge } from \"./ICurveGauge.sol\";\nimport { ICurvePool } from \"./ICurvePool.sol\";\nimport { ICRVMinter } from \"./ICRVMinter.sol\";\nimport { IERC20, AbstractCurveStrategy, InitializableAbstractStrategy } from \"./AbstractCurveStrategy.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\nimport { Helpers } from \"../utils/Helpers.sol\";\n\n/*\n * IMPORTANT(!) If ThreePoolStrategy needs to be re-deployed, it requires new\n * proxy contract with fresh storage slots. Changes in `AbstractCurveStrategy`\n * storage slots would break existing implementation.\n *\n * Remove this notice if ThreePoolStrategy is re-deployed\n */\ncontract ThreePoolStrategy is AbstractCurveStrategy {\n using StableMath for uint256;\n using SafeERC20 for IERC20;\n\n address internal crvGaugeAddress;\n address internal crvMinterAddress;\n\n constructor(BaseStrategyConfig memory _stratConfig)\n InitializableAbstractStrategy(_stratConfig)\n {}\n\n /**\n * Initializer for setting up strategy internal state. This overrides the\n * InitializableAbstractStrategy initializer as Curve strategies don't fit\n * well within that abstraction.\n * @param _rewardTokenAddress Address of CRV\n * @param _assets Addresses of supported assets. MUST be passed in the same\n * order as returned by coins on the pool contract, i.e.\n * DAI, USDC, USDT\n * @param _pTokens Platform Token corresponding addresses\n * @param _crvGaugeAddress Address of the Curve DAO gauge for this pool\n * @param _crvMinterAddress Address of the CRV minter for rewards\n */\n function initialize(\n address[] calldata _rewardTokenAddress, // CRV\n address[] calldata _assets,\n address[] calldata _pTokens,\n address _crvGaugeAddress,\n address _crvMinterAddress\n ) external onlyGovernor initializer {\n require(_assets.length == 3, \"Must have exactly three assets\");\n // Should be set prior to abstract initialize call otherwise\n // abstractSetPToken calls will fail\n crvGaugeAddress = _crvGaugeAddress;\n crvMinterAddress = _crvMinterAddress;\n pTokenAddress = _pTokens[0];\n InitializableAbstractStrategy._initialize(\n _rewardTokenAddress,\n _assets,\n _pTokens\n );\n _approveBase();\n }\n\n function _lpDepositAll() internal override {\n IERC20 pToken = IERC20(pTokenAddress);\n // Deposit into Gauge\n ICurveGauge(crvGaugeAddress).deposit(\n pToken.balanceOf(address(this)),\n address(this)\n );\n }\n\n function _lpWithdraw(uint256 numPTokens) internal override {\n // Not enough of pool token exists on this contract, some must be\n // staked in Gauge, unstake difference\n ICurveGauge(crvGaugeAddress).withdraw(numPTokens);\n }\n\n function _lpWithdrawAll() internal override {\n ICurveGauge gauge = ICurveGauge(crvGaugeAddress);\n gauge.withdraw(gauge.balanceOf(address(this)));\n }\n\n /**\n * @dev Get the total asset value held in the platform\n * @param _asset Address of the asset\n * @return balance Total value of the asset in the platform\n */\n function checkBalance(address _asset)\n public\n view\n override\n returns (uint256 balance)\n {\n require(assetToPToken[_asset] != address(0), \"Unsupported asset\");\n // LP tokens in this contract. This should generally be nothing as we\n // should always stake the full balance in the Gauge, but include for\n // safety\n\n uint256 contractPTokens = IERC20(pTokenAddress).balanceOf(\n address(this)\n );\n ICurveGauge gauge = ICurveGauge(crvGaugeAddress);\n uint256 gaugePTokens = gauge.balanceOf(address(this));\n uint256 totalPTokens = contractPTokens + gaugePTokens;\n\n ICurvePool curvePool = ICurvePool(platformAddress);\n if (totalPTokens > 0) {\n uint256 virtual_price = curvePool.get_virtual_price();\n uint256 value = (totalPTokens * virtual_price) / 1e18;\n uint256 assetDecimals = Helpers.getDecimals(_asset);\n balance = value.scaleBy(assetDecimals, 18) / 3;\n }\n }\n\n function _approveBase() internal override {\n IERC20 pToken = IERC20(pTokenAddress);\n // 3Pool for LP token (required for removing liquidity)\n pToken.safeApprove(platformAddress, 0);\n pToken.safeApprove(platformAddress, type(uint256).max);\n // Gauge for LP token\n pToken.safeApprove(crvGaugeAddress, 0);\n pToken.safeApprove(crvGaugeAddress, type(uint256).max);\n }\n\n /**\n * @dev Collect accumulated CRV and send to Vault.\n */\n function collectRewardTokens() public override onlyHarvester nonReentrant {\n // Collect\n ICRVMinter(crvMinterAddress).mint(crvGaugeAddress);\n // Send\n IERC20 crvToken = IERC20(rewardTokenAddresses[0]);\n uint256 balance = crvToken.balanceOf(address(this));\n emit RewardTokenCollected(\n harvesterAddress,\n rewardTokenAddresses[0],\n balance\n );\n crvToken.safeTransfer(harvesterAddress, balance);\n }\n}\n" + }, + "contracts/strategies/VaultValueChecker.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IOUSD } from \"../interfaces/IOUSD.sol\";\nimport { IVault } from \"../interfaces/IVault.sol\";\n\ncontract VaultValueChecker {\n IVault public immutable vault;\n IOUSD public immutable ousd;\n // Snapshot expiration time in seconds.\n // Used to prevent accidental use of an old snapshot, but\n // is not zero to allow easy testing of strategist actions in fork testing\n uint256 constant SNAPSHOT_EXPIRES = 5 * 60;\n\n struct Snapshot {\n uint256 vaultValue;\n uint256 totalSupply;\n uint256 time;\n }\n // By doing per user snapshots, we prevent a reentrancy attack\n // from a third party that updates the snapshot in the middle\n // of an allocation process\n\n mapping(address => Snapshot) public snapshots;\n\n constructor(address _vault, address _ousd) {\n vault = IVault(_vault);\n ousd = IOUSD(_ousd);\n }\n\n function takeSnapshot() external {\n snapshots[msg.sender] = Snapshot({\n vaultValue: vault.totalValue(),\n totalSupply: ousd.totalSupply(),\n time: block.timestamp\n });\n }\n\n function checkDelta(\n int256 expectedProfit,\n int256 profitVariance,\n int256 expectedVaultChange,\n int256 vaultChangeVariance\n ) external {\n // Intentionaly not view so that this method shows up in TX builders\n Snapshot memory snapshot = snapshots[msg.sender];\n int256 vaultChange = toInt256(vault.totalValue()) -\n toInt256(snapshot.vaultValue);\n int256 supplyChange = toInt256(ousd.totalSupply()) -\n toInt256(snapshot.totalSupply);\n int256 profit = vaultChange - supplyChange;\n\n require(\n snapshot.time >= block.timestamp - SNAPSHOT_EXPIRES,\n \"Snapshot too old\"\n );\n require(snapshot.time <= block.timestamp, \"Snapshot too new\");\n require(profit >= expectedProfit - profitVariance, \"Profit too low\");\n require(profit <= expectedProfit + profitVariance, \"Profit too high\");\n require(\n vaultChange >= expectedVaultChange - vaultChangeVariance,\n \"Vault value change too low\"\n );\n require(\n vaultChange <= expectedVaultChange + vaultChangeVariance,\n \"Vault value change too high\"\n );\n }\n\n function toInt256(uint256 value) internal pure returns (int256) {\n // From openzeppelin math/SafeCast.sol\n // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\n require(\n value <= uint256(type(int256).max),\n \"SafeCast: value doesn't fit in an int256\"\n );\n return int256(value);\n }\n}\n\ncontract OETHVaultValueChecker is VaultValueChecker {\n constructor(address _vault, address _ousd)\n VaultValueChecker(_vault, _ousd)\n {}\n}\n" + }, + "contracts/swapper/Swapper1InchV5.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @notice 1Inch Pathfinder V5 implementation of the general ISwapper interface.\n * @author Origin Protocol Inc\n * @dev It is possible that dust token amounts are left in this contract after a swap.\n * This can happen with some tokens that don't send the full transfer amount.\n * These dust amounts can build up over time and be used by anyone who calls the `swap` function.\n */\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport { IAggregationExecutor, IOneInchRouter, SwapDescription } from \"../interfaces/IOneInch.sol\";\nimport { ISwapper } from \"../interfaces/ISwapper.sol\";\n\ncontract Swapper1InchV5 is ISwapper {\n using SafeERC20 for IERC20;\n\n /// @notice 1Inch router contract to give allowance to perform swaps\n address public constant SWAP_ROUTER =\n 0x1111111254EEB25477B68fb85Ed929f73A960582;\n\n // swap(address,(address,address,address,address,uint256,uint256,uint256),bytes,bytes)\n bytes4 internal constant SWAP_SELECTOR = 0x12aa3caf;\n // unoswapTo(address,address,uint256,uint256,uint256[])\n bytes4 internal constant UNISWAP_SELECTOR = 0xf78dc253;\n // uniswapV3SwapTo(address,uint256,uint256,uint256[])\n bytes4 internal constant UNISWAPV3_SELECTOR = 0xbc80f1a8;\n\n /**\n * @notice Strategist swaps assets sitting in the contract of the `assetHolder`.\n * @param _fromAsset The token address of the asset being sold by the vault.\n * @param _toAsset The token address of the asset being purchased by the vault.\n * @param _fromAssetAmount The amount of assets being sold by the vault.\n * @param _minToAssetAmount The minimum amount of assets to be purchased.\n * @param _data RLP encoded executer address and bytes data. This is re-encoded tx.data from 1Inch swap API\n */\n function swap(\n address _fromAsset,\n address _toAsset,\n uint256 _fromAssetAmount,\n uint256 _minToAssetAmount,\n bytes calldata _data\n ) external override returns (uint256 toAssetAmount) {\n // Decode the function selector from the RLP encoded _data param\n bytes4 swapSelector = bytes4(_data[:4]);\n\n if (swapSelector == SWAP_SELECTOR) {\n // Decode the executer address and data from the RLP encoded _data param\n (, address executer, bytes memory executerData) = abi.decode(\n _data,\n (bytes4, address, bytes)\n );\n SwapDescription memory swapDesc = SwapDescription({\n srcToken: IERC20(_fromAsset),\n dstToken: IERC20(_toAsset),\n srcReceiver: payable(executer),\n dstReceiver: payable(msg.sender),\n amount: _fromAssetAmount,\n minReturnAmount: _minToAssetAmount,\n flags: 4 // 1st bit _PARTIAL_FILL, 2nd bit _REQUIRES_EXTRA_ETH, 3rd bit _SHOULD_CLAIM\n });\n (toAssetAmount, ) = IOneInchRouter(SWAP_ROUTER).swap(\n IAggregationExecutor(executer),\n swapDesc,\n hex\"\",\n executerData\n );\n } else if (swapSelector == UNISWAP_SELECTOR) {\n // Need to get the Uniswap pools data from the _data param\n (, uint256[] memory pools) = abi.decode(_data, (bytes4, uint256[]));\n toAssetAmount = IOneInchRouter(SWAP_ROUTER).unoswapTo(\n payable(msg.sender),\n IERC20(_fromAsset),\n _fromAssetAmount,\n _minToAssetAmount,\n pools\n );\n } else if (swapSelector == UNISWAPV3_SELECTOR) {\n // Need to get the Uniswap pools data from the _data param\n // slither-disable-next-line uninitialized-storage\n (, uint256[] memory pools) = abi.decode(_data, (bytes4, uint256[]));\n toAssetAmount = IOneInchRouter(SWAP_ROUTER).uniswapV3SwapTo(\n payable(msg.sender),\n _fromAssetAmount,\n _minToAssetAmount,\n pools\n );\n } else {\n revert(\"Unsupported swap function\");\n }\n }\n\n /**\n * @notice Approve assets for swapping.\n * @param _assets Array of token addresses to approve.\n * @dev unlimited approval is used as no tokens sit in this contract outside a transaction.\n */\n function approveAssets(address[] memory _assets) external {\n for (uint256 i = 0; i < _assets.length; ++i) {\n // Give the 1Inch router approval to transfer unlimited assets\n IERC20(_assets[i]).safeApprove(SWAP_ROUTER, type(uint256).max);\n }\n }\n}\n" + }, + "contracts/timelock/Timelock.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title OUSD Timelock Contract\n * @author Origin Protocol Inc\n */\nimport \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\n\ninterface CapitalPausable {\n function pauseCapital() external;\n\n function unpauseCapital() external;\n}\n\ncontract Timelock {\n using SafeMath for uint256;\n\n event NewAdmin(address indexed newAdmin);\n event NewPendingAdmin(address indexed newPendingAdmin);\n event NewDelay(uint256 indexed newDelay);\n event CancelTransaction(\n bytes32 indexed txHash,\n address indexed target,\n string signature,\n bytes data,\n uint256 eta\n );\n event ExecuteTransaction(\n bytes32 indexed txHash,\n address indexed target,\n string signature,\n bytes data,\n uint256 eta\n );\n event QueueTransaction(\n bytes32 indexed txHash,\n address indexed target,\n string signature,\n bytes data,\n uint256 eta\n );\n\n uint256 public constant GRACE_PERIOD = 3 days;\n uint256 public constant MINIMUM_DELAY = 1 minutes;\n uint256 public constant MAXIMUM_DELAY = 2 days;\n\n address public admin;\n address public pendingAdmin;\n uint256 public delay;\n\n mapping(bytes32 => bool) public queuedTransactions;\n\n /**\n * @dev Throws if called by any account other than the Admin.\n */\n modifier onlyAdmin() {\n require(msg.sender == admin, \"Caller is not the admin\");\n _;\n }\n\n constructor(address admin_, uint256 delay_) {\n require(\n delay_ >= MINIMUM_DELAY,\n \"Timelock::constructor: Delay must exceed minimum delay.\"\n );\n require(\n delay_ <= MAXIMUM_DELAY,\n \"Timelock::setDelay: Delay must not exceed maximum delay.\"\n );\n\n admin = admin_;\n delay = delay_;\n }\n\n function setDelay(uint256 delay_) public {\n require(\n msg.sender == address(this),\n \"Timelock::setDelay: Call must come from Timelock.\"\n );\n require(\n delay_ >= MINIMUM_DELAY,\n \"Timelock::setDelay: Delay must exceed minimum delay.\"\n );\n require(\n delay_ <= MAXIMUM_DELAY,\n \"Timelock::setDelay: Delay must not exceed maximum delay.\"\n );\n delay = delay_;\n\n emit NewDelay(delay);\n }\n\n function acceptAdmin() public {\n require(\n msg.sender == pendingAdmin,\n \"Timelock::acceptAdmin: Call must come from pendingAdmin.\"\n );\n admin = msg.sender;\n pendingAdmin = address(0);\n\n emit NewAdmin(admin);\n }\n\n function setPendingAdmin(address pendingAdmin_) public onlyAdmin {\n pendingAdmin = pendingAdmin_;\n\n emit NewPendingAdmin(pendingAdmin);\n }\n\n function queueTransaction(\n address target,\n string memory signature,\n bytes memory data,\n uint256 eta\n ) internal returns (bytes32) {\n require(\n msg.sender == admin,\n \"Timelock::queueTransaction: Call must come from admin.\"\n );\n require(\n eta >= getBlockTimestamp().add(delay),\n \"Timelock::queueTransaction: Estimated execution block must satisfy delay.\"\n );\n\n bytes32 txHash = keccak256(\n abi.encode(target, signature, keccak256(data), eta)\n );\n queuedTransactions[txHash] = true;\n\n emit QueueTransaction(txHash, target, signature, data, eta);\n return txHash;\n }\n\n function cancelTransaction(\n address target,\n string memory signature,\n bytes memory data,\n uint256 eta\n ) internal {\n require(\n msg.sender == admin,\n \"Timelock::cancelTransaction: Call must come from admin.\"\n );\n\n bytes32 txHash = keccak256(\n abi.encode(target, signature, keccak256(data), eta)\n );\n queuedTransactions[txHash] = false;\n\n emit CancelTransaction(txHash, target, signature, data, eta);\n }\n\n function _getRevertMsg(bytes memory _returnData)\n internal\n pure\n returns (string memory)\n {\n // If the _res length is less than 68, then the transaction failed\n // silently (without a revert message)\n if (_returnData.length < 68) return \"Transaction reverted silently\";\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n // Slice the sighash.\n _returnData := add(_returnData, 0x04)\n }\n return abi.decode(_returnData, (string));\n }\n\n function executeTransaction(\n address target,\n string memory signature,\n bytes memory data,\n uint256 eta\n ) internal returns (bytes memory) {\n require(\n msg.sender == admin,\n \"Timelock::executeTransaction: Call must come from admin.\"\n );\n\n bytes32 txHash = keccak256(\n abi.encode(target, signature, keccak256(data), eta)\n );\n require(\n queuedTransactions[txHash],\n \"Timelock::executeTransaction: Transaction hasn't been queued.\"\n );\n require(\n getBlockTimestamp() >= eta,\n \"Timelock::executeTransaction: Transaction hasn't surpassed time lock.\"\n );\n require(\n getBlockTimestamp() <= eta.add(GRACE_PERIOD),\n \"Timelock::executeTransaction: Transaction is stale.\"\n );\n\n queuedTransactions[txHash] = false;\n\n bytes memory callData;\n\n if (bytes(signature).length == 0) {\n callData = data;\n } else {\n callData = abi.encodePacked(\n bytes4(keccak256(bytes(signature))),\n data\n );\n }\n\n (bool success, bytes memory returnData) = target.call(callData);\n\n if (!success) {\n revert(_getRevertMsg(returnData));\n }\n\n emit ExecuteTransaction(txHash, target, signature, data, eta);\n\n return returnData;\n }\n\n function getBlockTimestamp() internal view returns (uint256) {\n // solium-disable-next-line security/no-block-members\n return block.timestamp;\n }\n\n function pauseCapital(address target) external {\n require(\n msg.sender == admin,\n \"Timelock::pauseCapital: Call must come from admin.\"\n );\n CapitalPausable(target).pauseCapital();\n }\n\n function unpauseCapital(address target) external {\n require(\n msg.sender == admin,\n \"Timelock::unpauseCapital: Call must come from admin.\"\n );\n CapitalPausable(target).unpauseCapital();\n }\n}\n" + }, + "contracts/token/BridgedWOETH.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport { AccessControlEnumerable } from \"@openzeppelin/contracts/access/AccessControlEnumerable.sol\";\nimport { Governable } from \"../governance/Governable.sol\";\nimport { Initializable } from \"../utils/Initializable.sol\";\n\ncontract BridgedWOETH is\n Governable,\n AccessControlEnumerable,\n Initializable,\n ERC20\n{\n bytes32 public constant MINTER_ROLE = keccak256(\"MINTER_ROLE\");\n bytes32 public constant BURNER_ROLE = keccak256(\"BURNER_ROLE\");\n\n constructor() ERC20(\"Wrapped OETH\", \"wOETH\") {\n // Nobody owns the implementation\n _setGovernor(address(0));\n }\n\n /**\n * @dev Initialize the proxy and set the Governor\n */\n function initialize() external initializer {\n // Governor can grant Minter/Burner roles\n _setupRole(DEFAULT_ADMIN_ROLE, _governor());\n }\n\n /**\n * @dev Mint tokens for `account`\n * @param account Address to mint tokens for\n * @param amount Amount of tokens to mint\n */\n function mint(address account, uint256 amount)\n external\n onlyRole(MINTER_ROLE)\n nonReentrant\n {\n _mint(account, amount);\n }\n\n /**\n * @dev Burns tokens from `account`\n * @param account Address to burn tokens from\n * @param amount Amount of tokens to burn\n */\n function burn(address account, uint256 amount)\n external\n onlyRole(BURNER_ROLE)\n nonReentrant\n {\n _burn(account, amount);\n }\n\n /**\n * @dev Burns tokens from `msg.sender`\n * @param amount Amount of tokens to burn\n */\n function burn(uint256 amount) external onlyRole(BURNER_ROLE) nonReentrant {\n _burn(msg.sender, amount);\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view virtual override returns (string memory) {\n return \"Wrapped OETH\";\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view virtual override returns (string memory) {\n return \"wOETH\";\n }\n\n /**\n * @dev Returns the decimals of the token\n */\n function decimals() public view virtual override returns (uint8) {\n return 18;\n }\n}\n" + }, + "contracts/token/OETH.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { OUSD } from \"./OUSD.sol\";\n\n/**\n * @title OETH Token Contract\n * @author Origin Protocol Inc\n */\ncontract OETH is OUSD {\n\n}\n" + }, + "contracts/token/OUSD.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title OUSD Token Contract\n * @dev ERC20 compatible contract for OUSD\n * @dev Implements an elastic supply\n * @author Origin Protocol Inc\n */\nimport { SafeMath } from \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport { Initializable } from \"../utils/Initializable.sol\";\nimport { InitializableERC20Detailed } from \"../utils/InitializableERC20Detailed.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\nimport { Governable } from \"../governance/Governable.sol\";\n\n/**\n * NOTE that this is an ERC20 token but the invariant that the sum of\n * balanceOf(x) for all x is not >= totalSupply(). This is a consequence of the\n * rebasing design. Any integrations with OUSD should be aware.\n */\n\ncontract OUSD is Initializable, InitializableERC20Detailed, Governable {\n using SafeMath for uint256;\n using StableMath for uint256;\n\n event TotalSupplyUpdatedHighres(\n uint256 totalSupply,\n uint256 rebasingCredits,\n uint256 rebasingCreditsPerToken\n );\n event AccountRebasingEnabled(address account);\n event AccountRebasingDisabled(address account);\n\n enum RebaseOptions {\n NotSet,\n OptOut,\n OptIn\n }\n\n uint256 private constant MAX_SUPPLY = ~uint128(0); // (2^128) - 1\n uint256 public _totalSupply;\n mapping(address => mapping(address => uint256)) private _allowances;\n address public vaultAddress = address(0);\n mapping(address => uint256) private _creditBalances;\n uint256 private _rebasingCredits;\n uint256 private _rebasingCreditsPerToken;\n // Frozen address/credits are non rebasing (value is held in contracts which\n // do not receive yield unless they explicitly opt in)\n uint256 public nonRebasingSupply;\n mapping(address => uint256) public nonRebasingCreditsPerToken;\n mapping(address => RebaseOptions) public rebaseState;\n mapping(address => uint256) public isUpgraded;\n\n uint256 private constant RESOLUTION_INCREASE = 1e9;\n\n function initialize(\n string calldata _nameArg,\n string calldata _symbolArg,\n address _vaultAddress,\n uint256 _initialCreditsPerToken\n ) external onlyGovernor initializer {\n InitializableERC20Detailed._initialize(_nameArg, _symbolArg, 18);\n _rebasingCreditsPerToken = _initialCreditsPerToken;\n vaultAddress = _vaultAddress;\n }\n\n /**\n * @dev Verifies that the caller is the Vault contract\n */\n modifier onlyVault() {\n require(vaultAddress == msg.sender, \"Caller is not the Vault\");\n _;\n }\n\n /**\n * @return The total supply of OUSD.\n */\n function totalSupply() public view override returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @return Low resolution rebasingCreditsPerToken\n */\n function rebasingCreditsPerToken() public view returns (uint256) {\n return _rebasingCreditsPerToken / RESOLUTION_INCREASE;\n }\n\n /**\n * @return Low resolution total number of rebasing credits\n */\n function rebasingCredits() public view returns (uint256) {\n return _rebasingCredits / RESOLUTION_INCREASE;\n }\n\n /**\n * @return High resolution rebasingCreditsPerToken\n */\n function rebasingCreditsPerTokenHighres() public view returns (uint256) {\n return _rebasingCreditsPerToken;\n }\n\n /**\n * @return High resolution total number of rebasing credits\n */\n function rebasingCreditsHighres() public view returns (uint256) {\n return _rebasingCredits;\n }\n\n /**\n * @dev Gets the balance of the specified address.\n * @param _account Address to query the balance of.\n * @return A uint256 representing the amount of base units owned by the\n * specified address.\n */\n function balanceOf(address _account)\n public\n view\n override\n returns (uint256)\n {\n if (_creditBalances[_account] == 0) return 0;\n return\n _creditBalances[_account].divPrecisely(_creditsPerToken(_account));\n }\n\n /**\n * @dev Gets the credits balance of the specified address.\n * @dev Backwards compatible with old low res credits per token.\n * @param _account The address to query the balance of.\n * @return (uint256, uint256) Credit balance and credits per token of the\n * address\n */\n function creditsBalanceOf(address _account)\n public\n view\n returns (uint256, uint256)\n {\n uint256 cpt = _creditsPerToken(_account);\n if (cpt == 1e27) {\n // For a period before the resolution upgrade, we created all new\n // contract accounts at high resolution. Since they are not changing\n // as a result of this upgrade, we will return their true values\n return (_creditBalances[_account], cpt);\n } else {\n return (\n _creditBalances[_account] / RESOLUTION_INCREASE,\n cpt / RESOLUTION_INCREASE\n );\n }\n }\n\n /**\n * @dev Gets the credits balance of the specified address.\n * @param _account The address to query the balance of.\n * @return (uint256, uint256, bool) Credit balance, credits per token of the\n * address, and isUpgraded\n */\n function creditsBalanceOfHighres(address _account)\n public\n view\n returns (\n uint256,\n uint256,\n bool\n )\n {\n return (\n _creditBalances[_account],\n _creditsPerToken(_account),\n isUpgraded[_account] == 1\n );\n }\n\n /**\n * @dev Transfer tokens to a specified address.\n * @param _to the address to transfer to.\n * @param _value the amount to be transferred.\n * @return true on success.\n */\n function transfer(address _to, uint256 _value)\n public\n override\n returns (bool)\n {\n require(_to != address(0), \"Transfer to zero address\");\n require(\n _value <= balanceOf(msg.sender),\n \"Transfer greater than balance\"\n );\n\n _executeTransfer(msg.sender, _to, _value);\n\n emit Transfer(msg.sender, _to, _value);\n\n return true;\n }\n\n /**\n * @dev Transfer tokens from one address to another.\n * @param _from The address you want to send tokens from.\n * @param _to The address you want to transfer to.\n * @param _value The amount of tokens to be transferred.\n */\n function transferFrom(\n address _from,\n address _to,\n uint256 _value\n ) public override returns (bool) {\n require(_to != address(0), \"Transfer to zero address\");\n require(_value <= balanceOf(_from), \"Transfer greater than balance\");\n\n _allowances[_from][msg.sender] = _allowances[_from][msg.sender].sub(\n _value\n );\n\n _executeTransfer(_from, _to, _value);\n\n emit Transfer(_from, _to, _value);\n\n return true;\n }\n\n /**\n * @dev Update the count of non rebasing credits in response to a transfer\n * @param _from The address you want to send tokens from.\n * @param _to The address you want to transfer to.\n * @param _value Amount of OUSD to transfer\n */\n function _executeTransfer(\n address _from,\n address _to,\n uint256 _value\n ) internal {\n bool isNonRebasingTo = _isNonRebasingAccount(_to);\n bool isNonRebasingFrom = _isNonRebasingAccount(_from);\n\n // Credits deducted and credited might be different due to the\n // differing creditsPerToken used by each account\n uint256 creditsCredited = _value.mulTruncate(_creditsPerToken(_to));\n uint256 creditsDeducted = _value.mulTruncate(_creditsPerToken(_from));\n\n _creditBalances[_from] = _creditBalances[_from].sub(\n creditsDeducted,\n \"Transfer amount exceeds balance\"\n );\n _creditBalances[_to] = _creditBalances[_to].add(creditsCredited);\n\n if (isNonRebasingTo && !isNonRebasingFrom) {\n // Transfer to non-rebasing account from rebasing account, credits\n // are removed from the non rebasing tally\n nonRebasingSupply = nonRebasingSupply.add(_value);\n // Update rebasingCredits by subtracting the deducted amount\n _rebasingCredits = _rebasingCredits.sub(creditsDeducted);\n } else if (!isNonRebasingTo && isNonRebasingFrom) {\n // Transfer to rebasing account from non-rebasing account\n // Decreasing non-rebasing credits by the amount that was sent\n nonRebasingSupply = nonRebasingSupply.sub(_value);\n // Update rebasingCredits by adding the credited amount\n _rebasingCredits = _rebasingCredits.add(creditsCredited);\n }\n }\n\n /**\n * @dev Function to check the amount of tokens that _owner has allowed to\n * `_spender`.\n * @param _owner The address which owns the funds.\n * @param _spender The address which will spend the funds.\n * @return The number of tokens still available for the _spender.\n */\n function allowance(address _owner, address _spender)\n public\n view\n override\n returns (uint256)\n {\n return _allowances[_owner][_spender];\n }\n\n /**\n * @dev Approve the passed address to spend the specified amount of tokens\n * on behalf of msg.sender. This method is included for ERC20\n * compatibility. `increaseAllowance` and `decreaseAllowance` should be\n * used instead.\n *\n * Changing an allowance with this method brings the risk that someone\n * may transfer both the old and the new allowance - if they are both\n * greater than zero - if a transfer transaction is mined before the\n * later approve() call is mined.\n * @param _spender The address which will spend the funds.\n * @param _value The amount of tokens to be spent.\n */\n function approve(address _spender, uint256 _value)\n public\n override\n returns (bool)\n {\n _allowances[msg.sender][_spender] = _value;\n emit Approval(msg.sender, _spender, _value);\n return true;\n }\n\n /**\n * @dev Increase the amount of tokens that an owner has allowed to\n * `_spender`.\n * This method should be used instead of approve() to avoid the double\n * approval vulnerability described above.\n * @param _spender The address which will spend the funds.\n * @param _addedValue The amount of tokens to increase the allowance by.\n */\n function increaseAllowance(address _spender, uint256 _addedValue)\n public\n returns (bool)\n {\n _allowances[msg.sender][_spender] = _allowances[msg.sender][_spender]\n .add(_addedValue);\n emit Approval(msg.sender, _spender, _allowances[msg.sender][_spender]);\n return true;\n }\n\n /**\n * @dev Decrease the amount of tokens that an owner has allowed to\n `_spender`.\n * @param _spender The address which will spend the funds.\n * @param _subtractedValue The amount of tokens to decrease the allowance\n * by.\n */\n function decreaseAllowance(address _spender, uint256 _subtractedValue)\n public\n returns (bool)\n {\n uint256 oldValue = _allowances[msg.sender][_spender];\n if (_subtractedValue >= oldValue) {\n _allowances[msg.sender][_spender] = 0;\n } else {\n _allowances[msg.sender][_spender] = oldValue.sub(_subtractedValue);\n }\n emit Approval(msg.sender, _spender, _allowances[msg.sender][_spender]);\n return true;\n }\n\n /**\n * @dev Mints new tokens, increasing totalSupply.\n */\n function mint(address _account, uint256 _amount) external onlyVault {\n _mint(_account, _amount);\n }\n\n /**\n * @dev Creates `_amount` tokens and assigns them to `_account`, increasing\n * the total supply.\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * Requirements\n *\n * - `to` cannot be the zero address.\n */\n function _mint(address _account, uint256 _amount) internal nonReentrant {\n require(_account != address(0), \"Mint to the zero address\");\n\n bool isNonRebasingAccount = _isNonRebasingAccount(_account);\n\n uint256 creditAmount = _amount.mulTruncate(_creditsPerToken(_account));\n _creditBalances[_account] = _creditBalances[_account].add(creditAmount);\n\n // If the account is non rebasing and doesn't have a set creditsPerToken\n // then set it i.e. this is a mint from a fresh contract\n if (isNonRebasingAccount) {\n nonRebasingSupply = nonRebasingSupply.add(_amount);\n } else {\n _rebasingCredits = _rebasingCredits.add(creditAmount);\n }\n\n _totalSupply = _totalSupply.add(_amount);\n\n require(_totalSupply < MAX_SUPPLY, \"Max supply\");\n\n emit Transfer(address(0), _account, _amount);\n }\n\n /**\n * @dev Burns tokens, decreasing totalSupply.\n */\n function burn(address account, uint256 amount) external onlyVault {\n _burn(account, amount);\n }\n\n /**\n * @dev Destroys `_amount` tokens from `_account`, reducing the\n * total supply.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * Requirements\n *\n * - `_account` cannot be the zero address.\n * - `_account` must have at least `_amount` tokens.\n */\n function _burn(address _account, uint256 _amount) internal nonReentrant {\n require(_account != address(0), \"Burn from the zero address\");\n if (_amount == 0) {\n return;\n }\n\n bool isNonRebasingAccount = _isNonRebasingAccount(_account);\n uint256 creditAmount = _amount.mulTruncate(_creditsPerToken(_account));\n uint256 currentCredits = _creditBalances[_account];\n\n // Remove the credits, burning rounding errors\n if (\n currentCredits == creditAmount || currentCredits - 1 == creditAmount\n ) {\n // Handle dust from rounding\n _creditBalances[_account] = 0;\n } else if (currentCredits > creditAmount) {\n _creditBalances[_account] = _creditBalances[_account].sub(\n creditAmount\n );\n } else {\n revert(\"Remove exceeds balance\");\n }\n\n // Remove from the credit tallies and non-rebasing supply\n if (isNonRebasingAccount) {\n nonRebasingSupply = nonRebasingSupply.sub(_amount);\n } else {\n _rebasingCredits = _rebasingCredits.sub(creditAmount);\n }\n\n _totalSupply = _totalSupply.sub(_amount);\n\n emit Transfer(_account, address(0), _amount);\n }\n\n /**\n * @dev Get the credits per token for an account. Returns a fixed amount\n * if the account is non-rebasing.\n * @param _account Address of the account.\n */\n function _creditsPerToken(address _account)\n internal\n view\n returns (uint256)\n {\n if (nonRebasingCreditsPerToken[_account] != 0) {\n return nonRebasingCreditsPerToken[_account];\n } else {\n return _rebasingCreditsPerToken;\n }\n }\n\n /**\n * @dev Is an account using rebasing accounting or non-rebasing accounting?\n * Also, ensure contracts are non-rebasing if they have not opted in.\n * @param _account Address of the account.\n */\n function _isNonRebasingAccount(address _account) internal returns (bool) {\n bool isContract = Address.isContract(_account);\n if (isContract && rebaseState[_account] == RebaseOptions.NotSet) {\n _ensureRebasingMigration(_account);\n }\n return nonRebasingCreditsPerToken[_account] > 0;\n }\n\n /**\n * @dev Ensures internal account for rebasing and non-rebasing credits and\n * supply is updated following deployment of frozen yield change.\n */\n function _ensureRebasingMigration(address _account) internal {\n if (nonRebasingCreditsPerToken[_account] == 0) {\n emit AccountRebasingDisabled(_account);\n if (_creditBalances[_account] == 0) {\n // Since there is no existing balance, we can directly set to\n // high resolution, and do not have to do any other bookkeeping\n nonRebasingCreditsPerToken[_account] = 1e27;\n } else {\n // Migrate an existing account:\n\n // Set fixed credits per token for this account\n nonRebasingCreditsPerToken[_account] = _rebasingCreditsPerToken;\n // Update non rebasing supply\n nonRebasingSupply = nonRebasingSupply.add(balanceOf(_account));\n // Update credit tallies\n _rebasingCredits = _rebasingCredits.sub(\n _creditBalances[_account]\n );\n }\n }\n }\n\n /**\n * @notice Enable rebasing for an account.\n * @dev Add a contract address to the non-rebasing exception list. The\n * address's balance will be part of rebases and the account will be exposed\n * to upside and downside.\n * @param _account Address of the account.\n */\n function governanceRebaseOptIn(address _account)\n public\n nonReentrant\n onlyGovernor\n {\n _rebaseOptIn(_account);\n }\n\n /**\n * @dev Add a contract address to the non-rebasing exception list. The\n * address's balance will be part of rebases and the account will be exposed\n * to upside and downside.\n */\n function rebaseOptIn() public nonReentrant {\n _rebaseOptIn(msg.sender);\n }\n\n function _rebaseOptIn(address _account) internal {\n require(_isNonRebasingAccount(_account), \"Account has not opted out\");\n\n // Convert balance into the same amount at the current exchange rate\n uint256 newCreditBalance = _creditBalances[_account]\n .mul(_rebasingCreditsPerToken)\n .div(_creditsPerToken(_account));\n\n // Decreasing non rebasing supply\n nonRebasingSupply = nonRebasingSupply.sub(balanceOf(_account));\n\n _creditBalances[_account] = newCreditBalance;\n\n // Increase rebasing credits, totalSupply remains unchanged so no\n // adjustment necessary\n _rebasingCredits = _rebasingCredits.add(_creditBalances[_account]);\n\n rebaseState[_account] = RebaseOptions.OptIn;\n\n // Delete any fixed credits per token\n delete nonRebasingCreditsPerToken[_account];\n emit AccountRebasingEnabled(_account);\n }\n\n /**\n * @dev Explicitly mark that an address is non-rebasing.\n */\n function rebaseOptOut() public nonReentrant {\n require(!_isNonRebasingAccount(msg.sender), \"Account has not opted in\");\n\n // Increase non rebasing supply\n nonRebasingSupply = nonRebasingSupply.add(balanceOf(msg.sender));\n // Set fixed credits per token\n nonRebasingCreditsPerToken[msg.sender] = _rebasingCreditsPerToken;\n\n // Decrease rebasing credits, total supply remains unchanged so no\n // adjustment necessary\n _rebasingCredits = _rebasingCredits.sub(_creditBalances[msg.sender]);\n\n // Mark explicitly opted out of rebasing\n rebaseState[msg.sender] = RebaseOptions.OptOut;\n emit AccountRebasingDisabled(msg.sender);\n }\n\n /**\n * @dev Modify the supply without minting new tokens. This uses a change in\n * the exchange rate between \"credits\" and OUSD tokens to change balances.\n * @param _newTotalSupply New total supply of OUSD.\n */\n function changeSupply(uint256 _newTotalSupply)\n external\n onlyVault\n nonReentrant\n {\n require(_totalSupply > 0, \"Cannot increase 0 supply\");\n\n if (_totalSupply == _newTotalSupply) {\n emit TotalSupplyUpdatedHighres(\n _totalSupply,\n _rebasingCredits,\n _rebasingCreditsPerToken\n );\n return;\n }\n\n _totalSupply = _newTotalSupply > MAX_SUPPLY\n ? MAX_SUPPLY\n : _newTotalSupply;\n\n _rebasingCreditsPerToken = _rebasingCredits.divPrecisely(\n _totalSupply.sub(nonRebasingSupply)\n );\n\n require(_rebasingCreditsPerToken > 0, \"Invalid change in supply\");\n\n _totalSupply = _rebasingCredits\n .divPrecisely(_rebasingCreditsPerToken)\n .add(nonRebasingSupply);\n\n emit TotalSupplyUpdatedHighres(\n _totalSupply,\n _rebasingCredits,\n _rebasingCreditsPerToken\n );\n }\n}\n" + }, + "contracts/token/OUSDResolutionUpgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ncontract OUSDResolutionUpgrade {\n enum RebaseOptions {\n NotSet,\n OptOut,\n OptIn\n }\n\n // From Initializable\n bool private initialized;\n bool private initializing;\n uint256[50] private ______igap;\n\n // From InitializableERC20Detailed\n uint256[100] private _____ugap;\n string private _name;\n string private _symbol;\n uint8 private _decimals;\n\n // From OUSD\n uint256 private constant MAX_SUPPLY = ~uint128(0); // (2^128) - 1\n uint256 public _totalSupply;\n mapping(address => mapping(address => uint256)) private _allowances;\n address public vaultAddress = address(0);\n mapping(address => uint256) private _creditBalances;\n uint256 private _rebasingCredits;\n uint256 private _rebasingCreditsPerToken;\n uint256 public nonRebasingSupply;\n mapping(address => uint256) public nonRebasingCreditsPerToken;\n mapping(address => RebaseOptions) public rebaseState;\n mapping(address => uint256) public isUpgraded;\n\n uint256 private constant RESOLUTION_INCREASE = 1e9;\n\n /**\n * @return High resolution rebasingCreditsPerToken\n */\n function rebasingCreditsPerToken() public view returns (uint256) {\n return _rebasingCreditsPerToken / RESOLUTION_INCREASE;\n }\n\n /**\n * @return High resolution total number of rebasing credits\n */\n function rebasingCredits() public view returns (uint256) {\n return _rebasingCredits / RESOLUTION_INCREASE;\n }\n\n /**\n * @return High resolution rebasingCreditsPerToken\n */\n function rebasingCreditsPerTokenHighres() public view returns (uint256) {\n return _rebasingCreditsPerToken;\n }\n\n /**\n * @return High resolution total number of rebasing credits\n */\n function rebasingCreditsHighres() public view returns (uint256) {\n return _rebasingCredits;\n }\n\n function upgradeGlobals() external {\n require(isUpgraded[address(0)] == 0, \"Globals already upgraded\");\n require(_rebasingCredits > 0, \"Sanity _rebasingCredits\");\n require(\n _rebasingCreditsPerToken > 0,\n \"Sanity _rebasingCreditsPerToken\"\n );\n isUpgraded[address(0)] = 1;\n _rebasingCredits = _rebasingCredits * RESOLUTION_INCREASE;\n _rebasingCreditsPerToken =\n _rebasingCreditsPerToken *\n RESOLUTION_INCREASE;\n }\n\n function upgradeAccounts(address[] calldata accounts) external {\n for (uint256 i = 0; i < accounts.length; i++) {\n address account = accounts[i];\n require(account != address(0), \"Reserved\");\n require(isUpgraded[account] == 0, \"Account already upgraded\");\n isUpgraded[account] = 1;\n\n // Handle special for non-rebasing accounts\n uint256 nrc = nonRebasingCreditsPerToken[account];\n if (nrc > 0) {\n require(nrc < 1e18, \"Account already highres\");\n nonRebasingCreditsPerToken[account] = nrc * RESOLUTION_INCREASE;\n }\n // Upgrade balance\n uint256 balance = _creditBalances[account];\n require(balance > 0, \"Will not upgrade zero balance\");\n _creditBalances[account] = balance * RESOLUTION_INCREASE;\n }\n }\n\n function creditsBalanceOfHighres(address _account)\n public\n view\n returns (\n uint256,\n uint256,\n bool\n )\n {\n return (\n _creditBalances[_account],\n _creditsPerToken(_account),\n isUpgraded[_account] == 1\n );\n }\n\n /**\n * @dev Get the credits per token for an account. Returns a fixed amount\n * if the account is non-rebasing.\n * @param _account Address of the account.\n */\n function _creditsPerToken(address _account)\n internal\n view\n returns (uint256)\n {\n if (nonRebasingCreditsPerToken[_account] != 0) {\n return nonRebasingCreditsPerToken[_account];\n } else {\n return _rebasingCreditsPerToken;\n }\n }\n}\n" + }, + "contracts/token/WOETH.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { ERC4626 } from \"../../lib/openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol\";\nimport { ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport { Governable } from \"../governance/Governable.sol\";\nimport { Initializable } from \"../utils/Initializable.sol\";\nimport { OETH } from \"./OETH.sol\";\n\n/**\n * @title OETH Token Contract\n * @author Origin Protocol Inc\n */\n\ncontract WOETH is ERC4626, Governable, Initializable {\n using SafeERC20 for IERC20;\n\n constructor(\n ERC20 underlying_,\n string memory name_,\n string memory symbol_\n ) ERC20(name_, symbol_) ERC4626(underlying_) Governable() {}\n\n /**\n * @notice Enable OETH rebasing for this contract\n */\n function initialize() external onlyGovernor initializer {\n OETH(address(asset())).rebaseOptIn();\n }\n\n function name() public view virtual override returns (string memory) {\n return \"Wrapped OETH\";\n }\n\n function symbol() public view virtual override returns (string memory) {\n return \"wOETH\";\n }\n\n /**\n * @notice Transfer token to governor. Intended for recovering tokens stuck in\n * contract, i.e. mistaken sends. Cannot transfer OETH\n * @param asset_ Address for the asset\n * @param amount_ Amount of the asset to transfer\n */\n function transferToken(address asset_, uint256 amount_)\n external\n onlyGovernor\n {\n require(asset_ != address(asset()), \"Cannot collect OETH\");\n IERC20(asset_).safeTransfer(governor(), amount_);\n }\n}\n" + }, + "contracts/token/WOETHBase.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { WOETH } from \"./WOETH.sol\";\nimport { ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\n/**\n * @title OETH Token Contract\n * @author Origin Protocol Inc\n */\n\ncontract WOETHBase is WOETH {\n constructor(\n ERC20 underlying_,\n string memory name_,\n string memory symbol_\n ) WOETH(underlying_, name_, symbol_) {}\n\n function name() public view virtual override returns (string memory) {\n return \"Wrapped OETH Base\";\n }\n\n function symbol() public view virtual override returns (string memory) {\n return \"wOETHb\";\n }\n}\n" + }, + "contracts/token/WrappedOusd.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { ERC4626 } from \"../../lib/openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol\";\nimport { ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport { Governable } from \"../governance/Governable.sol\";\nimport { Initializable } from \"../utils/Initializable.sol\";\nimport { OUSD } from \"./OUSD.sol\";\n\ncontract WrappedOusd is ERC4626, Governable, Initializable {\n using SafeERC20 for IERC20;\n\n constructor(\n ERC20 underlying_,\n string memory name_,\n string memory symbol_\n ) ERC20(name_, symbol_) ERC4626(underlying_) Governable() {}\n\n /**\n * @notice Enable OUSD rebasing for this contract\n */\n function initialize() external onlyGovernor initializer {\n OUSD(address(asset())).rebaseOptIn();\n }\n\n function name() public view override returns (string memory) {\n return \"Wrapped OUSD\";\n }\n\n function symbol() public view override returns (string memory) {\n return \"WOUSD\";\n }\n\n /**\n * @notice Transfer token to governor. Intended for recovering tokens stuck in\n * contract, i.e. mistaken sends. Cannot transfer OUSD\n * @param asset_ Address for the asset\n * @param amount_ Amount of the asset to transfer\n */\n function transferToken(address asset_, uint256 amount_)\n external\n onlyGovernor\n {\n require(asset_ != address(asset()), \"Cannot collect OUSD\");\n IERC20(asset_).safeTransfer(governor(), amount_);\n }\n}\n" + }, + "contracts/utils/BalancerErrors.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity >=0.7.4 <0.9.0;\n\n// solhint-disable\n\n/**\n * @dev Reverts if `condition` is false, with a revert reason containing `errorCode`. Only codes up to 999 are\n * supported.\n * Uses the default 'BAL' prefix for the error code\n */\nfunction _require(bool condition, uint256 errorCode) pure {\n if (!condition) _revert(errorCode);\n}\n\n/**\n * @dev Reverts if `condition` is false, with a revert reason containing `errorCode`. Only codes up to 999 are\n * supported.\n */\nfunction _require(\n bool condition,\n uint256 errorCode,\n bytes3 prefix\n) pure {\n if (!condition) _revert(errorCode, prefix);\n}\n\n/**\n * @dev Reverts with a revert reason containing `errorCode`. Only codes up to 999 are supported.\n * Uses the default 'BAL' prefix for the error code\n */\nfunction _revert(uint256 errorCode) pure {\n _revert(errorCode, 0x42414c); // This is the raw byte representation of \"BAL\"\n}\n\n/**\n * @dev Reverts with a revert reason containing `errorCode`. Only codes up to 999 are supported.\n */\nfunction _revert(uint256 errorCode, bytes3 prefix) pure {\n uint256 prefixUint = uint256(uint24(prefix));\n // We're going to dynamically create a revert string based on the error code, with the following format:\n // 'BAL#{errorCode}'\n // where the code is left-padded with zeroes to three digits (so they range from 000 to 999).\n //\n // We don't have revert strings embedded in the contract to save bytecode size: it takes much less space to store a\n // number (8 to 16 bits) than the individual string characters.\n //\n // The dynamic string creation algorithm that follows could be implemented in Solidity, but assembly allows for a\n // much denser implementation, again saving bytecode size. Given this function unconditionally reverts, this is a\n // safe place to rely on it without worrying about how its usage might affect e.g. memory contents.\n assembly {\n // First, we need to compute the ASCII representation of the error code. We assume that it is in the 0-999\n // range, so we only need to convert three digits. To convert the digits to ASCII, we add 0x30, the value for\n // the '0' character.\n\n let units := add(mod(errorCode, 10), 0x30)\n\n errorCode := div(errorCode, 10)\n let tenths := add(mod(errorCode, 10), 0x30)\n\n errorCode := div(errorCode, 10)\n let hundreds := add(mod(errorCode, 10), 0x30)\n\n // With the individual characters, we can now construct the full string.\n // We first append the '#' character (0x23) to the prefix. In the case of 'BAL', it results in 0x42414c23 ('BAL#')\n // Then, we shift this by 24 (to provide space for the 3 bytes of the error code), and add the\n // characters to it, each shifted by a multiple of 8.\n // The revert reason is then shifted left by 200 bits (256 minus the length of the string, 7 characters * 8 bits\n // per character = 56) to locate it in the most significant part of the 256 slot (the beginning of a byte\n // array).\n let formattedPrefix := shl(24, add(0x23, shl(8, prefixUint)))\n\n let revertReason := shl(\n 200,\n add(\n formattedPrefix,\n add(add(units, shl(8, tenths)), shl(16, hundreds))\n )\n )\n\n // We can now encode the reason in memory, which can be safely overwritten as we're about to revert. The encoded\n // message will have the following layout:\n // [ revert reason identifier ] [ string location offset ] [ string length ] [ string contents ]\n\n // The Solidity revert reason identifier is 0x08c739a0, the function selector of the Error(string) function. We\n // also write zeroes to the next 28 bytes of memory, but those are about to be overwritten.\n mstore(\n 0x0,\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n )\n // Next is the offset to the location of the string, which will be placed immediately after (20 bytes away).\n mstore(\n 0x04,\n 0x0000000000000000000000000000000000000000000000000000000000000020\n )\n // The string length is fixed: 7 characters.\n mstore(0x24, 7)\n // Finally, the string itself is stored.\n mstore(0x44, revertReason)\n\n // Even if the string is only 7 bytes long, we need to return a full 32 byte slot containing it. The length of\n // the encoded message is therefore 4 + 32 + 32 + 32 = 100.\n revert(0, 100)\n }\n}\n\nlibrary Errors {\n // Math\n uint256 internal constant ADD_OVERFLOW = 0;\n uint256 internal constant SUB_OVERFLOW = 1;\n uint256 internal constant SUB_UNDERFLOW = 2;\n uint256 internal constant MUL_OVERFLOW = 3;\n uint256 internal constant ZERO_DIVISION = 4;\n uint256 internal constant DIV_INTERNAL = 5;\n uint256 internal constant X_OUT_OF_BOUNDS = 6;\n uint256 internal constant Y_OUT_OF_BOUNDS = 7;\n uint256 internal constant PRODUCT_OUT_OF_BOUNDS = 8;\n uint256 internal constant INVALID_EXPONENT = 9;\n\n // Input\n uint256 internal constant OUT_OF_BOUNDS = 100;\n uint256 internal constant UNSORTED_ARRAY = 101;\n uint256 internal constant UNSORTED_TOKENS = 102;\n uint256 internal constant INPUT_LENGTH_MISMATCH = 103;\n uint256 internal constant ZERO_TOKEN = 104;\n uint256 internal constant INSUFFICIENT_DATA = 105;\n\n // Shared pools\n uint256 internal constant MIN_TOKENS = 200;\n uint256 internal constant MAX_TOKENS = 201;\n uint256 internal constant MAX_SWAP_FEE_PERCENTAGE = 202;\n uint256 internal constant MIN_SWAP_FEE_PERCENTAGE = 203;\n uint256 internal constant MINIMUM_BPT = 204;\n uint256 internal constant CALLER_NOT_VAULT = 205;\n uint256 internal constant UNINITIALIZED = 206;\n uint256 internal constant BPT_IN_MAX_AMOUNT = 207;\n uint256 internal constant BPT_OUT_MIN_AMOUNT = 208;\n uint256 internal constant EXPIRED_PERMIT = 209;\n uint256 internal constant NOT_TWO_TOKENS = 210;\n uint256 internal constant DISABLED = 211;\n\n // Pools\n uint256 internal constant MIN_AMP = 300;\n uint256 internal constant MAX_AMP = 301;\n uint256 internal constant MIN_WEIGHT = 302;\n uint256 internal constant MAX_STABLE_TOKENS = 303;\n uint256 internal constant MAX_IN_RATIO = 304;\n uint256 internal constant MAX_OUT_RATIO = 305;\n uint256 internal constant MIN_BPT_IN_FOR_TOKEN_OUT = 306;\n uint256 internal constant MAX_OUT_BPT_FOR_TOKEN_IN = 307;\n uint256 internal constant NORMALIZED_WEIGHT_INVARIANT = 308;\n uint256 internal constant INVALID_TOKEN = 309;\n uint256 internal constant UNHANDLED_JOIN_KIND = 310;\n uint256 internal constant ZERO_INVARIANT = 311;\n uint256 internal constant ORACLE_INVALID_SECONDS_QUERY = 312;\n uint256 internal constant ORACLE_NOT_INITIALIZED = 313;\n uint256 internal constant ORACLE_QUERY_TOO_OLD = 314;\n uint256 internal constant ORACLE_INVALID_INDEX = 315;\n uint256 internal constant ORACLE_BAD_SECS = 316;\n uint256 internal constant AMP_END_TIME_TOO_CLOSE = 317;\n uint256 internal constant AMP_ONGOING_UPDATE = 318;\n uint256 internal constant AMP_RATE_TOO_HIGH = 319;\n uint256 internal constant AMP_NO_ONGOING_UPDATE = 320;\n uint256 internal constant STABLE_INVARIANT_DIDNT_CONVERGE = 321;\n uint256 internal constant STABLE_GET_BALANCE_DIDNT_CONVERGE = 322;\n uint256 internal constant RELAYER_NOT_CONTRACT = 323;\n uint256 internal constant BASE_POOL_RELAYER_NOT_CALLED = 324;\n uint256 internal constant REBALANCING_RELAYER_REENTERED = 325;\n uint256 internal constant GRADUAL_UPDATE_TIME_TRAVEL = 326;\n uint256 internal constant SWAPS_DISABLED = 327;\n uint256 internal constant CALLER_IS_NOT_LBP_OWNER = 328;\n uint256 internal constant PRICE_RATE_OVERFLOW = 329;\n uint256 internal constant INVALID_JOIN_EXIT_KIND_WHILE_SWAPS_DISABLED = 330;\n uint256 internal constant WEIGHT_CHANGE_TOO_FAST = 331;\n uint256 internal constant LOWER_GREATER_THAN_UPPER_TARGET = 332;\n uint256 internal constant UPPER_TARGET_TOO_HIGH = 333;\n uint256 internal constant UNHANDLED_BY_LINEAR_POOL = 334;\n uint256 internal constant OUT_OF_TARGET_RANGE = 335;\n uint256 internal constant UNHANDLED_EXIT_KIND = 336;\n uint256 internal constant UNAUTHORIZED_EXIT = 337;\n uint256 internal constant MAX_MANAGEMENT_SWAP_FEE_PERCENTAGE = 338;\n uint256 internal constant UNHANDLED_BY_MANAGED_POOL = 339;\n uint256 internal constant UNHANDLED_BY_PHANTOM_POOL = 340;\n uint256 internal constant TOKEN_DOES_NOT_HAVE_RATE_PROVIDER = 341;\n uint256 internal constant INVALID_INITIALIZATION = 342;\n uint256 internal constant OUT_OF_NEW_TARGET_RANGE = 343;\n uint256 internal constant FEATURE_DISABLED = 344;\n uint256 internal constant UNINITIALIZED_POOL_CONTROLLER = 345;\n uint256 internal constant SET_SWAP_FEE_DURING_FEE_CHANGE = 346;\n uint256 internal constant SET_SWAP_FEE_PENDING_FEE_CHANGE = 347;\n uint256 internal constant CHANGE_TOKENS_DURING_WEIGHT_CHANGE = 348;\n uint256 internal constant CHANGE_TOKENS_PENDING_WEIGHT_CHANGE = 349;\n uint256 internal constant MAX_WEIGHT = 350;\n uint256 internal constant UNAUTHORIZED_JOIN = 351;\n uint256 internal constant MAX_MANAGEMENT_AUM_FEE_PERCENTAGE = 352;\n uint256 internal constant FRACTIONAL_TARGET = 353;\n uint256 internal constant ADD_OR_REMOVE_BPT = 354;\n uint256 internal constant INVALID_CIRCUIT_BREAKER_BOUNDS = 355;\n uint256 internal constant CIRCUIT_BREAKER_TRIPPED = 356;\n uint256 internal constant MALICIOUS_QUERY_REVERT = 357;\n uint256 internal constant JOINS_EXITS_DISABLED = 358;\n\n // Lib\n uint256 internal constant REENTRANCY = 400;\n uint256 internal constant SENDER_NOT_ALLOWED = 401;\n uint256 internal constant PAUSED = 402;\n uint256 internal constant PAUSE_WINDOW_EXPIRED = 403;\n uint256 internal constant MAX_PAUSE_WINDOW_DURATION = 404;\n uint256 internal constant MAX_BUFFER_PERIOD_DURATION = 405;\n uint256 internal constant INSUFFICIENT_BALANCE = 406;\n uint256 internal constant INSUFFICIENT_ALLOWANCE = 407;\n uint256 internal constant ERC20_TRANSFER_FROM_ZERO_ADDRESS = 408;\n uint256 internal constant ERC20_TRANSFER_TO_ZERO_ADDRESS = 409;\n uint256 internal constant ERC20_MINT_TO_ZERO_ADDRESS = 410;\n uint256 internal constant ERC20_BURN_FROM_ZERO_ADDRESS = 411;\n uint256 internal constant ERC20_APPROVE_FROM_ZERO_ADDRESS = 412;\n uint256 internal constant ERC20_APPROVE_TO_ZERO_ADDRESS = 413;\n uint256 internal constant ERC20_TRANSFER_EXCEEDS_ALLOWANCE = 414;\n uint256 internal constant ERC20_DECREASED_ALLOWANCE_BELOW_ZERO = 415;\n uint256 internal constant ERC20_TRANSFER_EXCEEDS_BALANCE = 416;\n uint256 internal constant ERC20_BURN_EXCEEDS_ALLOWANCE = 417;\n uint256 internal constant SAFE_ERC20_CALL_FAILED = 418;\n uint256 internal constant ADDRESS_INSUFFICIENT_BALANCE = 419;\n uint256 internal constant ADDRESS_CANNOT_SEND_VALUE = 420;\n uint256 internal constant SAFE_CAST_VALUE_CANT_FIT_INT256 = 421;\n uint256 internal constant GRANT_SENDER_NOT_ADMIN = 422;\n uint256 internal constant REVOKE_SENDER_NOT_ADMIN = 423;\n uint256 internal constant RENOUNCE_SENDER_NOT_ALLOWED = 424;\n uint256 internal constant BUFFER_PERIOD_EXPIRED = 425;\n uint256 internal constant CALLER_IS_NOT_OWNER = 426;\n uint256 internal constant NEW_OWNER_IS_ZERO = 427;\n uint256 internal constant CODE_DEPLOYMENT_FAILED = 428;\n uint256 internal constant CALL_TO_NON_CONTRACT = 429;\n uint256 internal constant LOW_LEVEL_CALL_FAILED = 430;\n uint256 internal constant NOT_PAUSED = 431;\n uint256 internal constant ADDRESS_ALREADY_ALLOWLISTED = 432;\n uint256 internal constant ADDRESS_NOT_ALLOWLISTED = 433;\n uint256 internal constant ERC20_BURN_EXCEEDS_BALANCE = 434;\n uint256 internal constant INVALID_OPERATION = 435;\n uint256 internal constant CODEC_OVERFLOW = 436;\n uint256 internal constant IN_RECOVERY_MODE = 437;\n uint256 internal constant NOT_IN_RECOVERY_MODE = 438;\n uint256 internal constant INDUCED_FAILURE = 439;\n uint256 internal constant EXPIRED_SIGNATURE = 440;\n uint256 internal constant MALFORMED_SIGNATURE = 441;\n uint256 internal constant SAFE_CAST_VALUE_CANT_FIT_UINT64 = 442;\n uint256 internal constant UNHANDLED_FEE_TYPE = 443;\n uint256 internal constant BURN_FROM_ZERO = 444;\n\n // Vault\n uint256 internal constant INVALID_POOL_ID = 500;\n uint256 internal constant CALLER_NOT_POOL = 501;\n uint256 internal constant SENDER_NOT_ASSET_MANAGER = 502;\n uint256 internal constant USER_DOESNT_ALLOW_RELAYER = 503;\n uint256 internal constant INVALID_SIGNATURE = 504;\n uint256 internal constant EXIT_BELOW_MIN = 505;\n uint256 internal constant JOIN_ABOVE_MAX = 506;\n uint256 internal constant SWAP_LIMIT = 507;\n uint256 internal constant SWAP_DEADLINE = 508;\n uint256 internal constant CANNOT_SWAP_SAME_TOKEN = 509;\n uint256 internal constant UNKNOWN_AMOUNT_IN_FIRST_SWAP = 510;\n uint256 internal constant MALCONSTRUCTED_MULTIHOP_SWAP = 511;\n uint256 internal constant INTERNAL_BALANCE_OVERFLOW = 512;\n uint256 internal constant INSUFFICIENT_INTERNAL_BALANCE = 513;\n uint256 internal constant INVALID_ETH_INTERNAL_BALANCE = 514;\n uint256 internal constant INVALID_POST_LOAN_BALANCE = 515;\n uint256 internal constant INSUFFICIENT_ETH = 516;\n uint256 internal constant UNALLOCATED_ETH = 517;\n uint256 internal constant ETH_TRANSFER = 518;\n uint256 internal constant CANNOT_USE_ETH_SENTINEL = 519;\n uint256 internal constant TOKENS_MISMATCH = 520;\n uint256 internal constant TOKEN_NOT_REGISTERED = 521;\n uint256 internal constant TOKEN_ALREADY_REGISTERED = 522;\n uint256 internal constant TOKENS_ALREADY_SET = 523;\n uint256 internal constant TOKENS_LENGTH_MUST_BE_2 = 524;\n uint256 internal constant NONZERO_TOKEN_BALANCE = 525;\n uint256 internal constant BALANCE_TOTAL_OVERFLOW = 526;\n uint256 internal constant POOL_NO_TOKENS = 527;\n uint256 internal constant INSUFFICIENT_FLASH_LOAN_BALANCE = 528;\n\n // Fees\n uint256 internal constant SWAP_FEE_PERCENTAGE_TOO_HIGH = 600;\n uint256 internal constant FLASH_LOAN_FEE_PERCENTAGE_TOO_HIGH = 601;\n uint256 internal constant INSUFFICIENT_FLASH_LOAN_FEE_AMOUNT = 602;\n uint256 internal constant AUM_FEE_PERCENTAGE_TOO_HIGH = 603;\n\n // FeeSplitter\n uint256 internal constant SPLITTER_FEE_PERCENTAGE_TOO_HIGH = 700;\n\n // Misc\n uint256 internal constant UNIMPLEMENTED = 998;\n uint256 internal constant SHOULD_NOT_HAPPEN = 999;\n}\n" + }, + "contracts/utils/DepositContractUtils.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ncontract DepositContractUtils {\n function calculateDepositDataRoot(\n bytes calldata pubkey,\n bytes calldata withdrawal_credentials,\n bytes calldata signature\n ) public pure returns (bytes32 node) {\n uint256 deposit_amount = 32 ether / 1 gwei;\n bytes memory amount = to_little_endian_64(uint64(deposit_amount));\n\n // Compute deposit data root (`DepositData` hash tree root)\n bytes32 pubkey_root = sha256(abi.encodePacked(pubkey, bytes16(0)));\n bytes32 signature_root = sha256(\n abi.encodePacked(\n sha256(abi.encodePacked(signature[:64])),\n sha256(abi.encodePacked(signature[64:], bytes32(0)))\n )\n );\n node = sha256(\n abi.encodePacked(\n sha256(abi.encodePacked(pubkey_root, withdrawal_credentials)),\n sha256(abi.encodePacked(amount, bytes24(0), signature_root))\n )\n );\n }\n\n function to_little_endian_64(uint64 value)\n internal\n pure\n returns (bytes memory ret)\n {\n ret = new bytes(8);\n bytes8 bytesValue = bytes8(value);\n // Byteswapping during copying to bytes.\n ret[0] = bytesValue[7];\n ret[1] = bytesValue[6];\n ret[2] = bytesValue[5];\n ret[3] = bytesValue[4];\n ret[4] = bytesValue[3];\n ret[5] = bytesValue[2];\n ret[6] = bytesValue[1];\n ret[7] = bytesValue[0];\n }\n}\n" + }, + "contracts/utils/Helpers.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IBasicToken } from \"../interfaces/IBasicToken.sol\";\n\nlibrary Helpers {\n /**\n * @notice Fetch the `symbol()` from an ERC20 token\n * @dev Grabs the `symbol()` from a contract\n * @param _token Address of the ERC20 token\n * @return string Symbol of the ERC20 token\n */\n function getSymbol(address _token) internal view returns (string memory) {\n string memory symbol = IBasicToken(_token).symbol();\n return symbol;\n }\n\n /**\n * @notice Fetch the `decimals()` from an ERC20 token\n * @dev Grabs the `decimals()` from a contract and fails if\n * the decimal value does not live within a certain range\n * @param _token Address of the ERC20 token\n * @return uint256 Decimals of the ERC20 token\n */\n function getDecimals(address _token) internal view returns (uint256) {\n uint256 decimals = IBasicToken(_token).decimals();\n require(\n decimals >= 4 && decimals <= 18,\n \"Token must have sufficient decimal places\"\n );\n\n return decimals;\n }\n}\n" + }, + "contracts/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Base contract any contracts that need to initialize state after deployment.\n * @author Origin Protocol Inc\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n require(\n initializing || !initialized,\n \"Initializable: contract is already initialized\"\n );\n\n bool isTopLevelCall = !initializing;\n if (isTopLevelCall) {\n initializing = true;\n initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n initializing = false;\n }\n }\n\n uint256[50] private ______gap;\n}\n" + }, + "contracts/utils/InitializableAbstractStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Base contract for vault strategies.\n * @author Origin Protocol Inc\n */\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport { Initializable } from \"../utils/Initializable.sol\";\nimport { Governable } from \"../governance/Governable.sol\";\nimport { IVault } from \"../interfaces/IVault.sol\";\n\nabstract contract InitializableAbstractStrategy is Initializable, Governable {\n using SafeERC20 for IERC20;\n\n event PTokenAdded(address indexed _asset, address _pToken);\n event PTokenRemoved(address indexed _asset, address _pToken);\n event Deposit(address indexed _asset, address _pToken, uint256 _amount);\n event Withdrawal(address indexed _asset, address _pToken, uint256 _amount);\n event RewardTokenCollected(\n address recipient,\n address rewardToken,\n uint256 amount\n );\n event RewardTokenAddressesUpdated(\n address[] _oldAddresses,\n address[] _newAddresses\n );\n event HarvesterAddressesUpdated(\n address _oldHarvesterAddress,\n address _newHarvesterAddress\n );\n\n /// @notice Address of the underlying platform\n address public immutable platformAddress;\n /// @notice Address of the OToken vault\n address public immutable vaultAddress;\n\n /// @dev Replaced with an immutable variable\n // slither-disable-next-line constable-states\n address private _deprecated_platformAddress;\n\n /// @dev Replaced with an immutable\n // slither-disable-next-line constable-states\n address private _deprecated_vaultAddress;\n\n /// @notice asset => pToken (Platform Specific Token Address)\n mapping(address => address) public assetToPToken;\n\n /// @notice Full list of all assets supported by the strategy\n address[] internal assetsMapped;\n\n // Deprecated: Reward token address\n // slither-disable-next-line constable-states\n address private _deprecated_rewardTokenAddress;\n\n // Deprecated: now resides in Harvester's rewardTokenConfigs\n // slither-disable-next-line constable-states\n uint256 private _deprecated_rewardLiquidationThreshold;\n\n /// @notice Address of the Harvester contract allowed to collect reward tokens\n address public harvesterAddress;\n\n /// @notice Address of the reward tokens. eg CRV, BAL, CVX, AURA\n address[] public rewardTokenAddresses;\n\n /* Reserved for future expansion. Used to be 100 storage slots\n * and has decreased to accommodate:\n * - harvesterAddress\n * - rewardTokenAddresses\n */\n int256[98] private _reserved;\n\n struct BaseStrategyConfig {\n address platformAddress; // Address of the underlying platform\n address vaultAddress; // Address of the OToken's Vault\n }\n\n /**\n * @param _config The platform and OToken vault addresses\n */\n constructor(BaseStrategyConfig memory _config) {\n platformAddress = _config.platformAddress;\n vaultAddress = _config.vaultAddress;\n }\n\n /**\n * @dev Internal initialize function, to set up initial internal state\n * @param _rewardTokenAddresses Address of reward token for platform\n * @param _assets Addresses of initial supported assets\n * @param _pTokens Platform Token corresponding addresses\n */\n function _initialize(\n address[] memory _rewardTokenAddresses,\n address[] memory _assets,\n address[] memory _pTokens\n ) internal {\n rewardTokenAddresses = _rewardTokenAddresses;\n\n uint256 assetCount = _assets.length;\n require(assetCount == _pTokens.length, \"Invalid input arrays\");\n for (uint256 i = 0; i < assetCount; ++i) {\n _setPTokenAddress(_assets[i], _pTokens[i]);\n }\n }\n\n /**\n * @notice Collect accumulated reward token and send to Vault.\n */\n function collectRewardTokens() external virtual onlyHarvester nonReentrant {\n _collectRewardTokens();\n }\n\n /**\n * @dev Default implementation that transfers reward tokens to the Harvester\n * Implementing strategies need to add custom logic to collect the rewards.\n */\n function _collectRewardTokens() internal virtual {\n uint256 rewardTokenCount = rewardTokenAddresses.length;\n for (uint256 i = 0; i < rewardTokenCount; ++i) {\n IERC20 rewardToken = IERC20(rewardTokenAddresses[i]);\n uint256 balance = rewardToken.balanceOf(address(this));\n if (balance > 0) {\n emit RewardTokenCollected(\n harvesterAddress,\n address(rewardToken),\n balance\n );\n rewardToken.safeTransfer(harvesterAddress, balance);\n }\n }\n }\n\n /**\n * @dev Verifies that the caller is the Vault.\n */\n modifier onlyVault() {\n require(msg.sender == vaultAddress, \"Caller is not the Vault\");\n _;\n }\n\n /**\n * @dev Verifies that the caller is the Harvester.\n */\n modifier onlyHarvester() {\n require(msg.sender == harvesterAddress, \"Caller is not the Harvester\");\n _;\n }\n\n /**\n * @dev Verifies that the caller is the Vault or Governor.\n */\n modifier onlyVaultOrGovernor() {\n require(\n msg.sender == vaultAddress || msg.sender == governor(),\n \"Caller is not the Vault or Governor\"\n );\n _;\n }\n\n /**\n * @dev Verifies that the caller is the Vault, Governor, or Strategist.\n */\n modifier onlyVaultOrGovernorOrStrategist() {\n require(\n msg.sender == vaultAddress ||\n msg.sender == governor() ||\n msg.sender == IVault(vaultAddress).strategistAddr(),\n \"Caller is not the Vault, Governor, or Strategist\"\n );\n _;\n }\n\n /**\n * @notice Set the reward token addresses. Any old addresses will be overwritten.\n * @param _rewardTokenAddresses Array of reward token addresses\n */\n function setRewardTokenAddresses(address[] calldata _rewardTokenAddresses)\n external\n onlyGovernor\n {\n uint256 rewardTokenCount = _rewardTokenAddresses.length;\n for (uint256 i = 0; i < rewardTokenCount; ++i) {\n require(\n _rewardTokenAddresses[i] != address(0),\n \"Can not set an empty address as a reward token\"\n );\n }\n\n emit RewardTokenAddressesUpdated(\n rewardTokenAddresses,\n _rewardTokenAddresses\n );\n rewardTokenAddresses = _rewardTokenAddresses;\n }\n\n /**\n * @notice Get the reward token addresses.\n * @return address[] the reward token addresses.\n */\n function getRewardTokenAddresses()\n external\n view\n returns (address[] memory)\n {\n return rewardTokenAddresses;\n }\n\n /**\n * @notice Provide support for asset by passing its pToken address.\n * This method can only be called by the system Governor\n * @param _asset Address for the asset\n * @param _pToken Address for the corresponding platform token\n */\n function setPTokenAddress(address _asset, address _pToken)\n external\n virtual\n onlyGovernor\n {\n _setPTokenAddress(_asset, _pToken);\n }\n\n /**\n * @notice Remove a supported asset by passing its index.\n * This method can only be called by the system Governor\n * @param _assetIndex Index of the asset to be removed\n */\n function removePToken(uint256 _assetIndex) external virtual onlyGovernor {\n require(_assetIndex < assetsMapped.length, \"Invalid index\");\n address asset = assetsMapped[_assetIndex];\n address pToken = assetToPToken[asset];\n\n if (_assetIndex < assetsMapped.length - 1) {\n assetsMapped[_assetIndex] = assetsMapped[assetsMapped.length - 1];\n }\n assetsMapped.pop();\n assetToPToken[asset] = address(0);\n\n emit PTokenRemoved(asset, pToken);\n }\n\n /**\n * @notice Provide support for asset by passing its pToken address.\n * Add to internal mappings and execute the platform specific,\n * abstract method `_abstractSetPToken`\n * @param _asset Address for the asset\n * @param _pToken Address for the corresponding platform token\n */\n function _setPTokenAddress(address _asset, address _pToken) internal {\n require(assetToPToken[_asset] == address(0), \"pToken already set\");\n require(\n _asset != address(0) && _pToken != address(0),\n \"Invalid addresses\"\n );\n\n assetToPToken[_asset] = _pToken;\n assetsMapped.push(_asset);\n\n emit PTokenAdded(_asset, _pToken);\n\n _abstractSetPToken(_asset, _pToken);\n }\n\n /**\n * @notice Transfer token to governor. Intended for recovering tokens stuck in\n * strategy contracts, i.e. mistaken sends.\n * @param _asset Address for the asset\n * @param _amount Amount of the asset to transfer\n */\n function transferToken(address _asset, uint256 _amount)\n public\n onlyGovernor\n {\n require(!supportsAsset(_asset), \"Cannot transfer supported asset\");\n IERC20(_asset).safeTransfer(governor(), _amount);\n }\n\n /**\n * @notice Set the Harvester contract that can collect rewards.\n * @param _harvesterAddress Address of the harvester contract.\n */\n function setHarvesterAddress(address _harvesterAddress)\n external\n onlyGovernor\n {\n emit HarvesterAddressesUpdated(harvesterAddress, _harvesterAddress);\n harvesterAddress = _harvesterAddress;\n }\n\n /***************************************\n Abstract\n ****************************************/\n\n function _abstractSetPToken(address _asset, address _pToken)\n internal\n virtual;\n\n function safeApproveAllTokens() external virtual;\n\n /**\n * @notice Deposit an amount of assets into the platform\n * @param _asset Address for the asset\n * @param _amount Units of asset to deposit\n */\n function deposit(address _asset, uint256 _amount) external virtual;\n\n /**\n * @notice Deposit all supported assets in this strategy contract to the platform\n */\n function depositAll() external virtual;\n\n /**\n * @notice Withdraw an `amount` of assets from the platform and\n * send to the `_recipient`.\n * @param _recipient Address to which the asset should be sent\n * @param _asset Address of the asset\n * @param _amount Units of asset to withdraw\n */\n function withdraw(\n address _recipient,\n address _asset,\n uint256 _amount\n ) external virtual;\n\n /**\n * @notice Withdraw all supported assets from platform and\n * sends to the OToken's Vault.\n */\n function withdrawAll() external virtual;\n\n /**\n * @notice Get the total asset value held in the platform.\n * This includes any interest that was generated since depositing.\n * @param _asset Address of the asset\n * @return balance Total value of the asset in the platform\n */\n function checkBalance(address _asset)\n external\n view\n virtual\n returns (uint256 balance);\n\n /**\n * @notice Check if an asset is supported.\n * @param _asset Address of the asset\n * @return bool Whether asset is supported\n */\n function supportsAsset(address _asset) public view virtual returns (bool);\n}\n" + }, + "contracts/utils/InitializableERC20Detailed.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/**\n * @dev Optional functions from the ERC20 standard.\n * Converted from openzeppelin/contracts/token/ERC20/ERC20Detailed.sol\n * @author Origin Protocol Inc\n */\nabstract contract InitializableERC20Detailed is IERC20 {\n // Storage gap to skip storage from prior to OUSD reset\n uint256[100] private _____gap;\n\n string private _name;\n string private _symbol;\n uint8 private _decimals;\n\n /**\n * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of\n * these values are immutable: they can only be set once during\n * construction.\n * @notice To avoid variable shadowing appended `Arg` after arguments name.\n */\n function _initialize(\n string memory nameArg,\n string memory symbolArg,\n uint8 decimalsArg\n ) internal {\n _name = nameArg;\n _symbol = symbolArg;\n _decimals = decimalsArg;\n }\n\n /**\n * @notice Returns the name of the token.\n */\n function name() public view returns (string memory) {\n return _name;\n }\n\n /**\n * @notice Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view returns (string memory) {\n return _symbol;\n }\n\n /**\n * @notice Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view returns (uint8) {\n return _decimals;\n }\n}\n" + }, + "contracts/utils/StableMath.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { SafeMath } from \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\n\n// Based on StableMath from Stability Labs Pty. Ltd.\n// https://github.com/mstable/mStable-contracts/blob/master/contracts/shared/StableMath.sol\n\nlibrary StableMath {\n using SafeMath for uint256;\n\n /**\n * @dev Scaling unit for use in specific calculations,\n * where 1 * 10**18, or 1e18 represents a unit '1'\n */\n uint256 private constant FULL_SCALE = 1e18;\n\n /***************************************\n Helpers\n ****************************************/\n\n /**\n * @dev Adjust the scale of an integer\n * @param to Decimals to scale to\n * @param from Decimals to scale from\n */\n function scaleBy(\n uint256 x,\n uint256 to,\n uint256 from\n ) internal pure returns (uint256) {\n if (to > from) {\n x = x.mul(10**(to - from));\n } else if (to < from) {\n // slither-disable-next-line divide-before-multiply\n x = x.div(10**(from - to));\n }\n return x;\n }\n\n /***************************************\n Precise Arithmetic\n ****************************************/\n\n /**\n * @dev Multiplies two precise units, and then truncates by the full scale\n * @param x Left hand input to multiplication\n * @param y Right hand input to multiplication\n * @return Result after multiplying the two inputs and then dividing by the shared\n * scale unit\n */\n function mulTruncate(uint256 x, uint256 y) internal pure returns (uint256) {\n return mulTruncateScale(x, y, FULL_SCALE);\n }\n\n /**\n * @dev Multiplies two precise units, and then truncates by the given scale. For example,\n * when calculating 90% of 10e18, (10e18 * 9e17) / 1e18 = (9e36) / 1e18 = 9e18\n * @param x Left hand input to multiplication\n * @param y Right hand input to multiplication\n * @param scale Scale unit\n * @return Result after multiplying the two inputs and then dividing by the shared\n * scale unit\n */\n function mulTruncateScale(\n uint256 x,\n uint256 y,\n uint256 scale\n ) internal pure returns (uint256) {\n // e.g. assume scale = fullScale\n // z = 10e18 * 9e17 = 9e36\n uint256 z = x.mul(y);\n // return 9e36 / 1e18 = 9e18\n return z.div(scale);\n }\n\n /**\n * @dev Multiplies two precise units, and then truncates by the full scale, rounding up the result\n * @param x Left hand input to multiplication\n * @param y Right hand input to multiplication\n * @return Result after multiplying the two inputs and then dividing by the shared\n * scale unit, rounded up to the closest base unit.\n */\n function mulTruncateCeil(uint256 x, uint256 y)\n internal\n pure\n returns (uint256)\n {\n // e.g. 8e17 * 17268172638 = 138145381104e17\n uint256 scaled = x.mul(y);\n // e.g. 138145381104e17 + 9.99...e17 = 138145381113.99...e17\n uint256 ceil = scaled.add(FULL_SCALE.sub(1));\n // e.g. 13814538111.399...e18 / 1e18 = 13814538111\n return ceil.div(FULL_SCALE);\n }\n\n /**\n * @dev Precisely divides two units, by first scaling the left hand operand. Useful\n * for finding percentage weightings, i.e. 8e18/10e18 = 80% (or 8e17)\n * @param x Left hand input to division\n * @param y Right hand input to division\n * @return Result after multiplying the left operand by the scale, and\n * executing the division on the right hand input.\n */\n function divPrecisely(uint256 x, uint256 y)\n internal\n pure\n returns (uint256)\n {\n // e.g. 8e18 * 1e18 = 8e36\n uint256 z = x.mul(FULL_SCALE);\n // e.g. 8e36 / 10e18 = 8e17\n return z.div(y);\n }\n}\n" + }, + "contracts/vault/OETHBaseVaultAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { VaultAdmin } from \"./VaultAdmin.sol\";\n\n/**\n * @title OETH Base VaultAdmin Contract\n * @author Origin Protocol Inc\n */\ncontract OETHBaseVaultAdmin is VaultAdmin {\n /**\n * @notice Adds a strategy to the mint whitelist.\n * Reverts if strategy isn't approved on Vault.\n * @param strategyAddr Strategy address\n */\n function addStrategyToMintWhitelist(address strategyAddr)\n external\n onlyGovernor\n {\n require(strategies[strategyAddr].isSupported, \"Strategy not approved\");\n\n require(\n !isMintWhitelistedStrategy[strategyAddr],\n \"Already whitelisted\"\n );\n\n isMintWhitelistedStrategy[strategyAddr] = true;\n\n emit StrategyAddedToMintWhitelist(strategistAddr);\n }\n\n /**\n * @notice Removes a strategy from the mint whitelist.\n * @param strategyAddr Strategy address\n */\n function removeStrategyFromMintWhitelist(address strategyAddr)\n external\n onlyGovernor\n {\n // Intentionally skipping `strategies.isSupported` check since\n // we may wanna remove an address even after removing the strategy\n\n require(isMintWhitelistedStrategy[strategyAddr], \"Not whitelisted\");\n\n isMintWhitelistedStrategy[strategyAddr] = false;\n\n emit StrategyRemovedFromMintWhitelist(strategistAddr);\n }\n}\n" + }, + "contracts/vault/OETHBaseVaultCore.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { StableMath } from \"../utils/StableMath.sol\";\nimport { OETHVaultCore } from \"./OETHVaultCore.sol\";\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IStrategy } from \"../interfaces/IStrategy.sol\";\n\n/**\n * @title OETH Base VaultCore Contract\n * @author Origin Protocol Inc\n */\ncontract OETHBaseVaultCore is OETHVaultCore {\n using SafeERC20 for IERC20;\n using StableMath for uint256;\n\n constructor(address _weth) OETHVaultCore(_weth) {}\n\n // @inheritdoc VaultCore\n function mintForStrategy(uint256 amount)\n external\n override\n whenNotCapitalPaused\n {\n require(\n strategies[msg.sender].isSupported == true,\n \"Unsupported strategy\"\n );\n require(\n isMintWhitelistedStrategy[msg.sender] == true,\n \"Not whitelisted strategy\"\n );\n\n require(amount < MAX_INT, \"Amount too high\");\n\n emit Mint(msg.sender, amount);\n\n // Mint matching amount of OTokens\n oUSD.mint(msg.sender, amount);\n }\n\n function burnForStrategy(uint256 amount)\n external\n override\n whenNotCapitalPaused\n {\n require(\n strategies[msg.sender].isSupported == true,\n \"Unsupported strategy\"\n );\n require(\n isMintWhitelistedStrategy[msg.sender] == true,\n \"Not whitelisted strategy\"\n );\n\n require(amount < MAX_INT, \"Amount too high\");\n\n emit Redeem(msg.sender, amount);\n\n // Burn OTokens\n oUSD.burn(msg.sender, amount);\n }\n}\n" + }, + "contracts/vault/OETHVault.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { Vault } from \"./Vault.sol\";\n\n/**\n * @title OETH Vault Contract\n * @author Origin Protocol Inc\n */\ncontract OETHVault is Vault {\n\n}\n" + }, + "contracts/vault/OETHVaultAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IStrategy } from \"../interfaces/IStrategy.sol\";\nimport { IVault } from \"../interfaces/IVault.sol\";\nimport { VaultAdmin } from \"./VaultAdmin.sol\";\n\n/**\n * @title OETH VaultAdmin Contract\n * @author Origin Protocol Inc\n */\ncontract OETHVaultAdmin is VaultAdmin {\n using SafeERC20 for IERC20;\n\n address public immutable weth;\n\n constructor(address _weth) {\n weth = _weth;\n }\n\n /// @dev Simplified version of the deposit function as WETH is the only supported asset.\n function _depositToStrategy(\n address _strategyToAddress,\n address[] calldata _assets,\n uint256[] calldata _amounts\n ) internal override {\n require(\n strategies[_strategyToAddress].isSupported,\n \"Invalid to Strategy\"\n );\n require(\n _assets.length == 1 && _amounts.length == 1 && _assets[0] == weth,\n \"Only WETH is supported\"\n );\n\n // Check the there is enough WETH to transfer once the WETH reserved for the withdrawal queue is accounted for\n require(_amounts[0] <= _wethAvailable(), \"Not enough WETH available\");\n\n // Send required amount of funds to the strategy\n IERC20(weth).safeTransfer(_strategyToAddress, _amounts[0]);\n\n // Deposit all the funds that have been sent to the strategy\n IStrategy(_strategyToAddress).depositAll();\n }\n\n function _withdrawFromStrategy(\n address _recipient,\n address _strategyFromAddress,\n address[] calldata _assets,\n uint256[] calldata _amounts\n ) internal override {\n super._withdrawFromStrategy(\n _recipient,\n _strategyFromAddress,\n _assets,\n _amounts\n );\n\n IVault(address(this)).addWithdrawalQueueLiquidity();\n }\n\n function _withdrawAllFromStrategy(address _strategyAddr) internal override {\n super._withdrawAllFromStrategy(_strategyAddr);\n\n IVault(address(this)).addWithdrawalQueueLiquidity();\n }\n\n function _withdrawAllFromStrategies() internal override {\n super._withdrawAllFromStrategies();\n\n IVault(address(this)).addWithdrawalQueueLiquidity();\n }\n\n /// @dev Calculate how much WETH in the vault is not reserved for the withdrawal queue.\n // That is, it is available to be redeemed or deposited into a strategy.\n function _wethAvailable() internal view returns (uint256 wethAvailable) {\n WithdrawalQueueMetadata memory queue = withdrawalQueueMetadata;\n\n // The amount of WETH that is still to be claimed in the withdrawal queue\n uint256 outstandingWithdrawals = queue.queued - queue.claimed;\n\n // The amount of sitting in WETH in the vault\n uint256 wethBalance = IERC20(weth).balanceOf(address(this));\n\n // If there is not enough WETH in the vault to cover the outstanding withdrawals\n if (wethBalance <= outstandingWithdrawals) {\n return 0;\n }\n\n return wethBalance - outstandingWithdrawals;\n }\n\n function _swapCollateral(\n address,\n address,\n uint256,\n uint256,\n bytes calldata\n ) internal pure override returns (uint256) {\n revert(\"Collateral swap not supported\");\n }\n}\n" + }, + "contracts/vault/OETHVaultCore.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\n\nimport { StableMath } from \"../utils/StableMath.sol\";\nimport { VaultCore } from \"./VaultCore.sol\";\nimport { IStrategy } from \"../interfaces/IStrategy.sol\";\nimport { IDripper } from \"../interfaces/IDripper.sol\";\n\n/**\n * @title OETH VaultCore Contract\n * @author Origin Protocol Inc\n */\ncontract OETHVaultCore is VaultCore {\n using SafeERC20 for IERC20;\n using StableMath for uint256;\n\n uint256 public constant CLAIM_DELAY = 10 minutes;\n address public immutable weth;\n uint256 public wethAssetIndex;\n\n // For future use (because OETHBaseVaultCore inherits from this)\n uint256[50] private __gap;\n\n constructor(address _weth) {\n weth = _weth;\n }\n\n /**\n * @dev Caches WETH's index in `allAssets` variable.\n * Reduces gas usage by redeem by caching that.\n */\n function cacheWETHAssetIndex() external onlyGovernor {\n uint256 assetCount = allAssets.length;\n for (uint256 i = 0; i < assetCount; ++i) {\n if (allAssets[i] == weth) {\n wethAssetIndex = i;\n break;\n }\n }\n\n require(allAssets[wethAssetIndex] == weth, \"Invalid WETH Asset Index\");\n }\n\n // @inheritdoc VaultCore\n // slither-disable-start reentrancy-no-eth\n function _mint(\n address _asset,\n uint256 _amount,\n uint256 _minimumOusdAmount\n ) internal virtual override {\n require(_asset == weth, \"Unsupported asset for minting\");\n require(_amount > 0, \"Amount must be greater than 0\");\n require(\n _amount >= _minimumOusdAmount,\n \"Mint amount lower than minimum\"\n );\n\n emit Mint(msg.sender, _amount);\n\n // Rebase must happen before any transfers occur.\n if (!rebasePaused && _amount >= rebaseThreshold) {\n // Stream any harvested rewards (WETH) that are available to the Vault\n IDripper(dripper).collect();\n\n _rebase();\n }\n\n // Mint oTokens\n oUSD.mint(msg.sender, _amount);\n\n // Transfer the deposited coins to the vault\n IERC20(_asset).safeTransferFrom(msg.sender, address(this), _amount);\n\n // Give priority to the withdrawal queue for the new WETH liquidity\n _addWithdrawalQueueLiquidity();\n\n // Auto-allocate if necessary\n if (_amount >= autoAllocateThreshold) {\n _allocate();\n }\n }\n\n // slither-disable-end reentrancy-no-eth\n\n // @inheritdoc VaultCore\n function _calculateRedeemOutputs(uint256 _amount)\n internal\n view\n virtual\n override\n returns (uint256[] memory outputs)\n {\n // Overrides `VaultCore._calculateRedeemOutputs` to redeem with only\n // WETH instead of LST-mix. Doesn't change the function signature\n // for backward compatibility\n\n // Calculate redeem fee\n if (redeemFeeBps > 0) {\n uint256 redeemFee = _amount.mulTruncateScale(redeemFeeBps, 1e4);\n _amount = _amount - redeemFee;\n }\n\n // Ensure that the WETH index is cached\n uint256 _wethAssetIndex = wethAssetIndex;\n require(\n allAssets[_wethAssetIndex] == weth,\n \"WETH Asset index not cached\"\n );\n\n outputs = new uint256[](allAssets.length);\n outputs[_wethAssetIndex] = _amount;\n }\n\n // @inheritdoc VaultCore\n function _redeem(uint256 _amount, uint256 _minimumUnitAmount)\n internal\n virtual\n override\n {\n // Override `VaultCore._redeem` to simplify it. Gets rid of oracle\n // usage and looping through all assets for LST-mix redeem. Instead\n // does a simple WETH-only redeem.\n emit Redeem(msg.sender, _amount);\n\n if (_amount == 0) {\n return;\n }\n\n // Amount excluding fees\n uint256 amountMinusFee = _calculateRedeemOutputs(_amount)[\n wethAssetIndex\n ];\n\n require(\n amountMinusFee >= _minimumUnitAmount,\n \"Redeem amount lower than minimum\"\n );\n\n // Is there enough WETH in the Vault available after accounting for the withdrawal queue\n require(_wethAvailable() >= amountMinusFee, \"Liquidity error\");\n\n // Transfer WETH minus the fee to the redeemer\n IERC20(weth).safeTransfer(msg.sender, amountMinusFee);\n\n // Burn OETH from user (including fees)\n oUSD.burn(msg.sender, _amount);\n\n // Prevent insolvency\n _postRedeem(_amount);\n }\n\n /**\n * @notice Request an asynchronous withdrawal of WETH in exchange for OETH.\n * The OETH is burned on request and the WETH is transferred to the withdrawer on claim.\n * This request can be claimed once the withdrawal queue's `claimable` amount\n * is greater than or equal this request's `queued` amount.\n * There is no minimum time or block number before a request can be claimed. It just needs\n * enough WETH liquidity in the Vault to satisfy all the outstanding requests to that point in the queue.\n * OETH is converted to WETH at 1:1.\n * @param _amount Amount of OETH to burn.\n * @param requestId Unique ID for the withdrawal request\n * @param queued Cumulative total of all WETH queued including already claimed requests.\n */\n function requestWithdrawal(uint256 _amount)\n external\n whenNotCapitalPaused\n nonReentrant\n returns (uint256 requestId, uint256 queued)\n {\n // The check that the requester has enough OETH is done in to later burn call\n\n requestId = withdrawalQueueMetadata.nextWithdrawalIndex;\n queued = withdrawalQueueMetadata.queued + _amount;\n\n // Store the next withdrawal request\n withdrawalQueueMetadata.nextWithdrawalIndex = SafeCast.toUint128(\n requestId + 1\n );\n // Store the updated queued amount which reserves WETH in the withdrawal queue\n // and reduces the vault's total assets\n withdrawalQueueMetadata.queued = SafeCast.toUint128(queued);\n // Store the user's withdrawal request\n withdrawalRequests[requestId] = WithdrawalRequest({\n withdrawer: msg.sender,\n claimed: false,\n timestamp: uint40(block.timestamp),\n amount: SafeCast.toUint128(_amount),\n queued: SafeCast.toUint128(queued)\n });\n\n // Burn the user's OETH\n oUSD.burn(msg.sender, _amount);\n\n // Prevent withdrawal if the vault is solvent by more than the the allowed percentage\n _postRedeem(_amount);\n\n emit WithdrawalRequested(msg.sender, requestId, _amount, queued);\n }\n\n // slither-disable-start reentrancy-no-eth\n /**\n * @notice Claim a previously requested withdrawal once it is claimable.\n * This request can be claimed once the withdrawal queue's `claimable` amount\n * is greater than or equal this request's `queued` amount and 10 minutes has passed.\n * If the requests is not claimable, the transaction will revert with `Queue pending liquidity`.\n * If the request is not older than 10 minutes, the transaction will revert with `Claim delay not met`.\n * OETH is converted to WETH at 1:1.\n * @param _requestId Unique ID for the withdrawal request\n * @return amount Amount of WETH transferred to the withdrawer\n */\n function claimWithdrawal(uint256 _requestId)\n external\n whenNotCapitalPaused\n nonReentrant\n returns (uint256 amount)\n {\n // Try and get more liquidity if there is not enough available\n if (\n withdrawalRequests[_requestId].queued >\n withdrawalQueueMetadata.claimable\n ) {\n // Stream any harvested rewards (WETH) that are available to the Vault\n IDripper(dripper).collect();\n\n // Add any WETH from the Dripper to the withdrawal queue\n _addWithdrawalQueueLiquidity();\n }\n\n amount = _claimWithdrawal(_requestId);\n\n // transfer WETH from the vault to the withdrawer\n IERC20(weth).safeTransfer(msg.sender, amount);\n\n // Prevent insolvency\n _postRedeem(amount);\n }\n\n // slither-disable-end reentrancy-no-eth\n\n /**\n * @notice Claim a previously requested withdrawals once they are claimable.\n * This requests can be claimed once the withdrawal queue's `claimable` amount\n * is greater than or equal each request's `queued` amount and 10 minutes has passed.\n * If one of the requests is not claimable, the whole transaction will revert with `Queue pending liquidity`.\n * If one of the requests is not older than 10 minutes,\n * the whole transaction will revert with `Claim delay not met`.\n * @param _requestIds Unique ID of each withdrawal request\n * @return amounts Amount of WETH received for each request\n * @return totalAmount Total amount of WETH transferred to the withdrawer\n */\n function claimWithdrawals(uint256[] memory _requestIds)\n external\n whenNotCapitalPaused\n nonReentrant\n returns (uint256[] memory amounts, uint256 totalAmount)\n {\n // Just call the Dripper instead of looping through _requestIds to find the highest id\n // and checking it's queued amount is > the queue's claimable amount.\n\n // Stream any harvested rewards (WETH) that are available to the Vault\n IDripper(dripper).collect();\n\n // Add any WETH from the Dripper to the withdrawal queue\n _addWithdrawalQueueLiquidity();\n\n amounts = new uint256[](_requestIds.length);\n for (uint256 i = 0; i < _requestIds.length; ++i) {\n amounts[i] = _claimWithdrawal(_requestIds[i]);\n totalAmount += amounts[i];\n }\n\n // transfer all the claimed WETH from the vault to the withdrawer\n IERC20(weth).safeTransfer(msg.sender, totalAmount);\n\n // Prevent insolvency\n _postRedeem(totalAmount);\n }\n\n function _claimWithdrawal(uint256 requestId)\n internal\n returns (uint256 amount)\n {\n // Load the structs from storage into memory\n WithdrawalRequest memory request = withdrawalRequests[requestId];\n WithdrawalQueueMetadata memory queue = withdrawalQueueMetadata;\n\n require(\n request.timestamp + CLAIM_DELAY <= block.timestamp,\n \"Claim delay not met\"\n );\n // If there isn't enough reserved liquidity in the queue to claim\n require(request.queued <= queue.claimable, \"Queue pending liquidity\");\n require(request.withdrawer == msg.sender, \"Not requester\");\n require(request.claimed == false, \"Already claimed\");\n\n // Store the request as claimed\n withdrawalRequests[requestId].claimed = true;\n // Store the updated claimed amount\n withdrawalQueueMetadata.claimed = queue.claimed + request.amount;\n\n emit WithdrawalClaimed(msg.sender, requestId, request.amount);\n\n return request.amount;\n }\n\n /// @notice Collects harvested rewards from the Dripper as WETH then\n /// adds WETH to the withdrawal queue if there is a funding shortfall.\n /// @dev is called from the Native Staking strategy when validator withdrawals are processed.\n /// It also called before any WETH is allocated to a strategy.\n function addWithdrawalQueueLiquidity() external {\n // Stream any harvested rewards (WETH) that are available to the Vault\n IDripper(dripper).collect();\n\n _addWithdrawalQueueLiquidity();\n }\n\n /// @dev Adds WETH to the withdrawal queue if there is a funding shortfall.\n /// This assumes 1 WETH equal 1 OETH.\n function _addWithdrawalQueueLiquidity()\n internal\n returns (uint256 addedClaimable)\n {\n WithdrawalQueueMetadata memory queue = withdrawalQueueMetadata;\n\n // Check if the claimable WETH is less than the queued amount\n uint256 queueShortfall = queue.queued - queue.claimable;\n\n // No need to do anything is the withdrawal queue is full funded\n if (queueShortfall == 0) {\n return 0;\n }\n\n uint256 wethBalance = IERC20(weth).balanceOf(address(this));\n\n // Of the claimable withdrawal requests, how much is unclaimed?\n // That is, the amount of WETH that is currently allocated for the withdrawal queue\n uint256 allocatedWeth = queue.claimable - queue.claimed;\n\n // If there is no unallocated WETH then there is nothing to add to the queue\n if (wethBalance <= allocatedWeth) {\n return 0;\n }\n\n uint256 unallocatedWeth = wethBalance - allocatedWeth;\n\n // the new claimable amount is the smaller of the queue shortfall or unallocated weth\n addedClaimable = queueShortfall < unallocatedWeth\n ? queueShortfall\n : unallocatedWeth;\n uint256 newClaimable = queue.claimable + addedClaimable;\n\n // Store the new claimable amount back to storage\n withdrawalQueueMetadata.claimable = SafeCast.toUint128(newClaimable);\n\n // emit a WithdrawalClaimable event\n emit WithdrawalClaimable(newClaimable, addedClaimable);\n }\n\n /***************************************\n View Functions\n ****************************************/\n\n /// @dev Calculate how much WETH in the vault is not reserved for the withdrawal queue.\n // That is, it is available to be redeemed or deposited into a strategy.\n function _wethAvailable() internal view returns (uint256 wethAvailable) {\n WithdrawalQueueMetadata memory queue = withdrawalQueueMetadata;\n\n // The amount of WETH that is still to be claimed in the withdrawal queue\n uint256 outstandingWithdrawals = queue.queued - queue.claimed;\n\n // The amount of sitting in WETH in the vault\n uint256 wethBalance = IERC20(weth).balanceOf(address(this));\n\n // If there is not enough WETH in the vault to cover the outstanding withdrawals\n if (wethBalance <= outstandingWithdrawals) {\n return 0;\n }\n\n return wethBalance - outstandingWithdrawals;\n }\n\n /// @dev Get the balance of an asset held in Vault and all strategies\n /// less any WETH that is reserved for the withdrawal queue.\n /// This will only return a non-zero balance for WETH.\n /// All other assets will return 0 even if there is some dust amounts left in the Vault.\n /// For example, there is 1 wei left of stETH in the OETH Vault but will return 0 in this function.\n ///\n /// If there is not enough WETH in the vault and all strategies to cover all outstanding\n /// withdrawal requests then return a WETH balance of 0\n function _checkBalance(address _asset)\n internal\n view\n override\n returns (uint256 balance)\n {\n if (_asset != weth) {\n return 0;\n }\n\n // Get the WETH in the vault and the strategies\n balance = super._checkBalance(_asset);\n\n WithdrawalQueueMetadata memory queue = withdrawalQueueMetadata;\n\n // If the vault becomes insolvent enough that the total value in the vault and all strategies\n // is less than the outstanding withdrawals.\n // For example, there was a mass slashing event and most users request a withdrawal.\n if (balance + queue.claimed < queue.queued) {\n return 0;\n }\n\n // Need to remove WETH that is reserved for the withdrawal queue\n return balance + queue.claimed - queue.queued;\n }\n\n /**\n * @notice Allocate unallocated funds on Vault to strategies.\n **/\n function allocate() external override whenNotCapitalPaused nonReentrant {\n // Add any unallocated WETH to the withdrawal queue first\n _addWithdrawalQueueLiquidity();\n\n _allocate();\n }\n\n /// @dev Allocate WETH to the default WETH strategy if there is excess to the Vault buffer.\n /// This is called from either `mint` or `allocate` and assumes `_addWithdrawalQueueLiquidity`\n /// has been called before this function.\n function _allocate() internal override {\n // No need to do anything if no default strategy for WETH\n address depositStrategyAddr = assetDefaultStrategies[weth];\n if (depositStrategyAddr == address(0)) return;\n\n uint256 wethAvailableInVault = _wethAvailable();\n // No need to do anything if there isn't any WETH in the vault to allocate\n if (wethAvailableInVault == 0) return;\n\n // Calculate the target buffer for the vault using the total supply\n uint256 totalSupply = oUSD.totalSupply();\n uint256 targetBuffer = totalSupply.mulTruncate(vaultBuffer);\n\n // If available WETH in the Vault is below or equal the target buffer then there's nothing to allocate\n if (wethAvailableInVault <= targetBuffer) return;\n\n // The amount of assets to allocate to the default strategy\n uint256 allocateAmount = wethAvailableInVault - targetBuffer;\n\n IStrategy strategy = IStrategy(depositStrategyAddr);\n // Transfer WETH to the strategy and call the strategy's deposit function\n IERC20(weth).safeTransfer(address(strategy), allocateAmount);\n strategy.deposit(weth, allocateAmount);\n\n emit AssetAllocated(weth, depositStrategyAddr, allocateAmount);\n }\n\n /// @dev The total value of all WETH held by the vault and all its strategies\n /// less any WETH that is reserved for the withdrawal queue.\n ///\n // If there is not enough WETH in the vault and all strategies to cover all outstanding\n // withdrawal requests then return a total value of 0.\n function _totalValue() internal view override returns (uint256 value) {\n // As WETH is the only asset, just return the WETH balance\n return _checkBalance(weth);\n }\n\n /// @dev Only WETH is supported in the OETH Vault so return the WETH balance only\n /// Any ETH balances in the Vault will be ignored.\n /// Amounts from previously supported vault assets will also be ignored.\n /// For example, there is 1 wei left of stETH in the OETH Vault but is will be ignored.\n function _totalValueInVault()\n internal\n view\n override\n returns (uint256 value)\n {\n value = IERC20(weth).balanceOf(address(this));\n }\n}\n" + }, + "contracts/vault/OETHZapper.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IVault } from \"../interfaces/IVault.sol\";\nimport { IWETH9 } from \"../interfaces/IWETH9.sol\";\nimport { ISfrxETH } from \"../interfaces/ISfrxETH.sol\";\n\ncontract OETHZapper {\n IERC20 public immutable oeth;\n IVault public immutable vault;\n\n IWETH9 public constant weth =\n IWETH9(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);\n IERC20 public constant frxeth =\n IERC20(0x5E8422345238F34275888049021821E8E08CAa1f);\n ISfrxETH public constant sfrxeth =\n ISfrxETH(0xac3E018457B222d93114458476f3E3416Abbe38F);\n address private constant ETH_MARKER =\n 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\n\n event Zap(address indexed minter, address indexed asset, uint256 amount);\n\n constructor(address _oeth, address _vault) {\n oeth = IERC20(_oeth);\n vault = IVault(_vault);\n\n weth.approve(address(_vault), type(uint256).max);\n frxeth.approve(address(_vault), type(uint256).max);\n }\n\n /**\n * @dev Deposit ETH and receive OETH in return.\n * Will verify that the user is sent 1:1 for ETH.\n */\n receive() external payable {\n deposit();\n }\n\n /**\n * @dev Deposit ETH and receive OETH in return\n * Will verify that the user is sent 1:1 for ETH.\n * @return Amount of OETH sent to user\n */\n function deposit() public payable returns (uint256) {\n uint256 balance = address(this).balance;\n weth.deposit{ value: balance }();\n emit Zap(msg.sender, ETH_MARKER, balance);\n return _mint(address(weth), balance);\n }\n\n /**\n * @dev Deposit SFRXETH to the vault and receive OETH in return\n * @param amount Amount of SFRXETH to deposit\n * @param minOETH Minimum amount of OETH to receive\n * @return Amount of OETH sent to user\n */\n function depositSFRXETH(uint256 amount, uint256 minOETH)\n external\n returns (uint256)\n {\n sfrxeth.redeem(amount, address(this), msg.sender);\n emit Zap(msg.sender, address(sfrxeth), amount);\n return _mint(address(frxeth), minOETH);\n }\n\n /**\n * @dev Internal function to mint OETH from an asset\n * @param asset Address of asset for the vault to mint from\n * @param minOETH Minimum amount of OETH to for user to receive\n * @return Amount of OETH sent to user\n */\n function _mint(address asset, uint256 minOETH) internal returns (uint256) {\n uint256 toMint = IERC20(asset).balanceOf(address(this));\n vault.mint(asset, toMint, minOETH);\n uint256 mintedAmount = oeth.balanceOf(address(this));\n require(mintedAmount >= minOETH, \"Zapper: not enough minted\");\n require(oeth.transfer(msg.sender, mintedAmount));\n return mintedAmount;\n }\n}\n" + }, + "contracts/vault/Vault.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title OUSD VaultInitializer Contract\n * @notice The VaultInitializer sets up the initial contract.\n * @author Origin Protocol Inc\n */\nimport { VaultInitializer } from \"./VaultInitializer.sol\";\nimport { VaultAdmin } from \"./VaultAdmin.sol\";\n\ncontract Vault is VaultInitializer, VaultAdmin {}\n" + }, + "contracts/vault/VaultAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title OToken VaultAdmin contract\n * @notice The VaultAdmin contract makes configuration and admin calls on the vault.\n * @author Origin Protocol Inc\n */\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport { IOracle } from \"../interfaces/IOracle.sol\";\nimport { ISwapper } from \"../interfaces/ISwapper.sol\";\nimport { IVault } from \"../interfaces/IVault.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\n\nimport \"./VaultStorage.sol\";\n\ncontract VaultAdmin is VaultStorage {\n using SafeERC20 for IERC20;\n using StableMath for uint256;\n\n /**\n * @dev Verifies that the caller is the Governor or Strategist.\n */\n modifier onlyGovernorOrStrategist() {\n require(\n msg.sender == strategistAddr || isGovernor(),\n \"Caller is not the Strategist or Governor\"\n );\n _;\n }\n\n /***************************************\n Configuration\n ****************************************/\n\n /**\n * @notice Set address of price provider.\n * @param _priceProvider Address of price provider\n */\n function setPriceProvider(address _priceProvider) external onlyGovernor {\n priceProvider = _priceProvider;\n emit PriceProviderUpdated(_priceProvider);\n }\n\n /**\n * @notice Set a fee in basis points to be charged for a redeem.\n * @param _redeemFeeBps Basis point fee to be charged\n */\n function setRedeemFeeBps(uint256 _redeemFeeBps) external onlyGovernor {\n require(_redeemFeeBps <= 1000, \"Redeem fee should not be over 10%\");\n redeemFeeBps = _redeemFeeBps;\n emit RedeemFeeUpdated(_redeemFeeBps);\n }\n\n /**\n * @notice Set a buffer of assets to keep in the Vault to handle most\n * redemptions without needing to spend gas unwinding assets from a Strategy.\n * @param _vaultBuffer Percentage using 18 decimals. 100% = 1e18.\n */\n function setVaultBuffer(uint256 _vaultBuffer)\n external\n onlyGovernorOrStrategist\n {\n require(_vaultBuffer <= 1e18, \"Invalid value\");\n vaultBuffer = _vaultBuffer;\n emit VaultBufferUpdated(_vaultBuffer);\n }\n\n /**\n * @notice Sets the minimum amount of OTokens in a mint to trigger an\n * automatic allocation of funds afterwords.\n * @param _threshold OToken amount with 18 fixed decimals.\n */\n function setAutoAllocateThreshold(uint256 _threshold)\n external\n onlyGovernor\n {\n autoAllocateThreshold = _threshold;\n emit AllocateThresholdUpdated(_threshold);\n }\n\n /**\n * @notice Set a minimum amount of OTokens in a mint or redeem that triggers a\n * rebase\n * @param _threshold OToken amount with 18 fixed decimals.\n */\n function setRebaseThreshold(uint256 _threshold) external onlyGovernor {\n rebaseThreshold = _threshold;\n emit RebaseThresholdUpdated(_threshold);\n }\n\n /**\n * @notice Set address of Strategist\n * @param _address Address of Strategist\n */\n function setStrategistAddr(address _address) external onlyGovernor {\n strategistAddr = _address;\n emit StrategistUpdated(_address);\n }\n\n /**\n * @notice Set the default Strategy for an asset, i.e. the one which the asset\n will be automatically allocated to and withdrawn from\n * @param _asset Address of the asset\n * @param _strategy Address of the Strategy\n */\n function setAssetDefaultStrategy(address _asset, address _strategy)\n external\n onlyGovernorOrStrategist\n {\n emit AssetDefaultStrategyUpdated(_asset, _strategy);\n // If its a zero address being passed for the strategy we are removing\n // the default strategy\n if (_strategy != address(0)) {\n // Make sure the strategy meets some criteria\n require(strategies[_strategy].isSupported, \"Strategy not approved\");\n IStrategy strategy = IStrategy(_strategy);\n require(assets[_asset].isSupported, \"Asset is not supported\");\n require(\n strategy.supportsAsset(_asset),\n \"Asset not supported by Strategy\"\n );\n }\n assetDefaultStrategies[_asset] = _strategy;\n }\n\n /**\n * @notice Set maximum amount of OTokens that can at any point be minted and deployed\n * to strategy (used only by ConvexOUSDMetaStrategy for now).\n * @param _threshold OToken amount with 18 fixed decimals.\n */\n function setNetOusdMintForStrategyThreshold(uint256 _threshold)\n external\n onlyGovernor\n {\n /**\n * Because `netOusdMintedForStrategy` check in vault core works both ways\n * (positive and negative) the actual impact of the amount of OToken minted\n * could be double the threshold. E.g.:\n * - contract has threshold set to 100\n * - state of netOusdMinted is -90\n * - in effect it can mint 190 OToken and still be within limits\n *\n * We are somewhat mitigating this behaviour by resetting the netOusdMinted\n * counter whenever new threshold is set. So it can only move one threshold\n * amount in each direction. This also enables us to reduce the threshold\n * amount and not have problems with current netOusdMinted being near\n * limits on either side.\n */\n netOusdMintedForStrategy = 0;\n netOusdMintForStrategyThreshold = _threshold;\n emit NetOusdMintForStrategyThresholdChanged(_threshold);\n }\n\n /**\n * @notice Set the Dripper contract that streams harvested rewards to the vault.\n * @param _dripper Address of the Dripper contract.\n */\n function setDripper(address _dripper) external onlyGovernor {\n dripper = _dripper;\n emit DripperChanged(_dripper);\n }\n\n /***************************************\n Swaps\n ****************************************/\n\n /**\n * @notice Strategist swaps collateral assets sitting in the vault.\n * @param _fromAsset The token address of the asset being sold by the vault.\n * @param _toAsset The token address of the asset being purchased by the vault.\n * @param _fromAssetAmount The amount of assets being sold by the vault.\n * @param _minToAssetAmount The minimum amount of assets to be purchased.\n * @param _data implementation specific data. eg 1Inch swap data\n * @return toAssetAmount The amount of toAssets that was received from the swap\n */\n function swapCollateral(\n address _fromAsset,\n address _toAsset,\n uint256 _fromAssetAmount,\n uint256 _minToAssetAmount,\n bytes calldata _data\n )\n external\n nonReentrant\n onlyGovernorOrStrategist\n returns (uint256 toAssetAmount)\n {\n toAssetAmount = _swapCollateral(\n _fromAsset,\n _toAsset,\n _fromAssetAmount,\n _minToAssetAmount,\n _data\n );\n }\n\n function _swapCollateral(\n address _fromAsset,\n address _toAsset,\n uint256 _fromAssetAmount,\n uint256 _minToAssetAmount,\n bytes calldata _data\n ) internal virtual returns (uint256 toAssetAmount) {\n // Check fromAsset and toAsset are valid\n Asset memory fromAssetConfig = assets[address(_fromAsset)];\n Asset memory toAssetConfig = assets[_toAsset];\n require(fromAssetConfig.isSupported, \"From asset is not supported\");\n require(toAssetConfig.isSupported, \"To asset is not supported\");\n\n // Load swap config into memory to avoid separate SLOADs\n SwapConfig memory config = swapConfig;\n\n // Scope a new block to remove toAssetBalBefore from the scope of swapCollateral.\n // This avoids a stack too deep error.\n {\n uint256 toAssetBalBefore = IERC20(_toAsset).balanceOf(\n address(this)\n );\n\n // Transfer from assets to the swapper contract\n IERC20(_fromAsset).safeTransfer(config.swapper, _fromAssetAmount);\n\n // Call to the Swapper contract to do the actual swap\n // The -1 is required for stETH which sometimes transfers 1 wei less than what was specified.\n // slither-disable-next-line unused-return\n ISwapper(config.swapper).swap(\n _fromAsset,\n _toAsset,\n _fromAssetAmount - 1,\n _minToAssetAmount,\n _data\n );\n\n // Compute the change in asset balance held by the Vault\n toAssetAmount =\n IERC20(_toAsset).balanceOf(address(this)) -\n toAssetBalBefore;\n }\n\n // Check the to assets returned is above slippage amount specified by the strategist\n require(\n toAssetAmount >= _minToAssetAmount,\n \"Strategist slippage limit\"\n );\n\n // Scope a new block to remove minOracleToAssetAmount from the scope of swapCollateral.\n // This avoids a stack too deep error.\n {\n // Check the slippage against the Oracle in case the strategist made a mistake or has become malicious.\n // to asset amount = from asset amount * from asset price / to asset price\n uint256 minOracleToAssetAmount = (_fromAssetAmount *\n (1e4 - fromAssetConfig.allowedOracleSlippageBps) *\n IOracle(priceProvider).price(_fromAsset)) /\n (IOracle(priceProvider).price(_toAsset) *\n (1e4 + toAssetConfig.allowedOracleSlippageBps));\n\n // Scale both sides up to 18 decimals to compare\n require(\n toAssetAmount.scaleBy(18, toAssetConfig.decimals) >=\n minOracleToAssetAmount.scaleBy(\n 18,\n fromAssetConfig.decimals\n ),\n \"Oracle slippage limit exceeded\"\n );\n }\n\n // Check the vault's total value hasn't gone below the OToken total supply\n // by more than the allowed percentage.\n require(\n IVault(address(this)).totalValue() >=\n (oUSD.totalSupply() * ((1e4 - config.allowedUndervalueBps))) /\n 1e4,\n \"Allowed value < supply\"\n );\n\n emit Swapped(_fromAsset, _toAsset, _fromAssetAmount, toAssetAmount);\n }\n\n /***************************************\n Swap Config\n ****************************************/\n\n /**\n * @notice Set the contract the performs swaps of collateral assets.\n * @param _swapperAddr Address of the Swapper contract that implements the ISwapper interface.\n */\n function setSwapper(address _swapperAddr) external onlyGovernor {\n swapConfig.swapper = _swapperAddr;\n emit SwapperChanged(_swapperAddr);\n }\n\n /// @notice Contract that swaps the vault's collateral assets\n function swapper() external view returns (address swapper_) {\n swapper_ = swapConfig.swapper;\n }\n\n /**\n * @notice Set max allowed percentage the vault total value can drop below the OToken total supply in basis points\n * when executing collateral swaps.\n * @param _basis Percentage in basis points. eg 100 == 1%\n */\n function setSwapAllowedUndervalue(uint16 _basis) external onlyGovernor {\n require(_basis < 10001, \"Invalid basis points\");\n swapConfig.allowedUndervalueBps = _basis;\n emit SwapAllowedUndervalueChanged(_basis);\n }\n\n /**\n * @notice Max allowed percentage the vault total value can drop below the OToken total supply in basis points\n * when executing a collateral swap.\n * For example 100 == 1%\n * @return value Percentage in basis points.\n */\n function allowedSwapUndervalue() external view returns (uint256 value) {\n value = swapConfig.allowedUndervalueBps;\n }\n\n /**\n * @notice Set the allowed slippage from the Oracle price for collateral asset swaps.\n * @param _asset Address of the asset token.\n * @param _allowedOracleSlippageBps allowed slippage from Oracle in basis points. eg 20 = 0.2%. Max 10%.\n */\n function setOracleSlippage(address _asset, uint16 _allowedOracleSlippageBps)\n external\n onlyGovernor\n {\n require(assets[_asset].isSupported, \"Asset not supported\");\n require(_allowedOracleSlippageBps < 1000, \"Slippage too high\");\n\n assets[_asset].allowedOracleSlippageBps = _allowedOracleSlippageBps;\n\n emit SwapSlippageChanged(_asset, _allowedOracleSlippageBps);\n }\n\n /***************************************\n Asset Config\n ****************************************/\n\n /**\n * @notice Add a supported asset to the contract, i.e. one that can be\n * to mint OTokens.\n * @param _asset Address of asset\n */\n function supportAsset(address _asset, uint8 _unitConversion)\n external\n onlyGovernor\n {\n require(!assets[_asset].isSupported, \"Asset already supported\");\n\n assets[_asset] = Asset({\n isSupported: true,\n unitConversion: UnitConversion(_unitConversion),\n decimals: 0, // will be overridden in _cacheDecimals\n allowedOracleSlippageBps: 0 // 0% by default\n });\n\n _cacheDecimals(_asset);\n allAssets.push(_asset);\n\n // Verify that our oracle supports the asset\n // slither-disable-next-line unused-return\n IOracle(priceProvider).price(_asset);\n\n emit AssetSupported(_asset);\n }\n\n /**\n * @notice Remove a supported asset from the Vault\n * @param _asset Address of asset\n */\n function removeAsset(address _asset) external onlyGovernor {\n require(assets[_asset].isSupported, \"Asset not supported\");\n require(\n IVault(address(this)).checkBalance(_asset) <= 1e13,\n \"Vault still holds asset\"\n );\n\n uint256 assetsCount = allAssets.length;\n uint256 assetIndex = assetsCount; // initialize at invaid index\n for (uint256 i = 0; i < assetsCount; ++i) {\n if (allAssets[i] == _asset) {\n assetIndex = i;\n break;\n }\n }\n\n // Note: If asset is not found in `allAssets`, the following line\n // will revert with an out-of-bound error. However, there's no\n // reason why an asset would have `Asset.isSupported = true` but\n // not exist in `allAssets`.\n\n // Update allAssets array\n allAssets[assetIndex] = allAssets[assetsCount - 1];\n allAssets.pop();\n\n // Reset default strategy\n assetDefaultStrategies[_asset] = address(0);\n emit AssetDefaultStrategyUpdated(_asset, address(0));\n\n // Remove asset from storage\n delete assets[_asset];\n\n emit AssetRemoved(_asset);\n }\n\n /**\n * @notice Cache decimals on OracleRouter for a particular asset. This action\n * is required before that asset's price can be accessed.\n * @param _asset Address of asset token\n */\n function cacheDecimals(address _asset) external onlyGovernor {\n _cacheDecimals(_asset);\n }\n\n /***************************************\n Strategy Config\n ****************************************/\n\n /**\n * @notice Add a strategy to the Vault.\n * @param _addr Address of the strategy to add\n */\n function approveStrategy(address _addr) external onlyGovernor {\n require(!strategies[_addr].isSupported, \"Strategy already approved\");\n strategies[_addr] = Strategy({ isSupported: true, _deprecated: 0 });\n allStrategies.push(_addr);\n emit StrategyApproved(_addr);\n }\n\n /**\n * @notice Remove a strategy from the Vault.\n * @param _addr Address of the strategy to remove\n */\n\n function removeStrategy(address _addr) external onlyGovernor {\n require(strategies[_addr].isSupported, \"Strategy not approved\");\n\n uint256 assetCount = allAssets.length;\n for (uint256 i = 0; i < assetCount; ++i) {\n require(\n assetDefaultStrategies[allAssets[i]] != _addr,\n \"Strategy is default for an asset\"\n );\n }\n\n // Initialize strategyIndex with out of bounds result so function will\n // revert if no valid index found\n uint256 stratCount = allStrategies.length;\n uint256 strategyIndex = stratCount;\n for (uint256 i = 0; i < stratCount; ++i) {\n if (allStrategies[i] == _addr) {\n strategyIndex = i;\n break;\n }\n }\n\n if (strategyIndex < stratCount) {\n allStrategies[strategyIndex] = allStrategies[stratCount - 1];\n allStrategies.pop();\n\n // Mark the strategy as not supported\n strategies[_addr].isSupported = false;\n\n // Withdraw all assets\n IStrategy strategy = IStrategy(_addr);\n strategy.withdrawAll();\n\n emit StrategyRemoved(_addr);\n }\n }\n\n /***************************************\n Strategies\n ****************************************/\n\n /**\n * @notice Deposit multiple assets from the vault into the strategy.\n * @param _strategyToAddress Address of the Strategy to deposit assets into.\n * @param _assets Array of asset address that will be deposited into the strategy.\n * @param _amounts Array of amounts of each corresponding asset to deposit.\n */\n function depositToStrategy(\n address _strategyToAddress,\n address[] calldata _assets,\n uint256[] calldata _amounts\n ) external onlyGovernorOrStrategist nonReentrant {\n _depositToStrategy(_strategyToAddress, _assets, _amounts);\n }\n\n function _depositToStrategy(\n address _strategyToAddress,\n address[] calldata _assets,\n uint256[] calldata _amounts\n ) internal virtual {\n require(\n strategies[_strategyToAddress].isSupported,\n \"Invalid to Strategy\"\n );\n require(_assets.length == _amounts.length, \"Parameter length mismatch\");\n\n uint256 assetCount = _assets.length;\n for (uint256 i = 0; i < assetCount; ++i) {\n address assetAddr = _assets[i];\n require(\n IStrategy(_strategyToAddress).supportsAsset(assetAddr),\n \"Asset unsupported\"\n );\n // Send required amount of funds to the strategy\n IERC20(assetAddr).safeTransfer(_strategyToAddress, _amounts[i]);\n }\n\n // Deposit all the funds that have been sent to the strategy\n IStrategy(_strategyToAddress).depositAll();\n }\n\n /**\n * @notice Withdraw multiple assets from the strategy to the vault.\n * @param _strategyFromAddress Address of the Strategy to withdraw assets from.\n * @param _assets Array of asset address that will be withdrawn from the strategy.\n * @param _amounts Array of amounts of each corresponding asset to withdraw.\n */\n function withdrawFromStrategy(\n address _strategyFromAddress,\n address[] calldata _assets,\n uint256[] calldata _amounts\n ) external onlyGovernorOrStrategist nonReentrant {\n _withdrawFromStrategy(\n address(this),\n _strategyFromAddress,\n _assets,\n _amounts\n );\n }\n\n /**\n * @param _recipient can either be a strategy or the Vault\n */\n function _withdrawFromStrategy(\n address _recipient,\n address _strategyFromAddress,\n address[] calldata _assets,\n uint256[] calldata _amounts\n ) internal virtual {\n require(\n strategies[_strategyFromAddress].isSupported,\n \"Invalid from Strategy\"\n );\n require(_assets.length == _amounts.length, \"Parameter length mismatch\");\n\n uint256 assetCount = _assets.length;\n for (uint256 i = 0; i < assetCount; ++i) {\n // Withdraw from Strategy to the recipient\n IStrategy(_strategyFromAddress).withdraw(\n _recipient,\n _assets[i],\n _amounts[i]\n );\n }\n }\n\n /**\n * @notice Sets the maximum allowable difference between\n * total supply and backing assets' value.\n */\n function setMaxSupplyDiff(uint256 _maxSupplyDiff) external onlyGovernor {\n maxSupplyDiff = _maxSupplyDiff;\n emit MaxSupplyDiffChanged(_maxSupplyDiff);\n }\n\n /**\n * @notice Sets the trusteeAddress that can receive a portion of yield.\n * Setting to the zero address disables this feature.\n */\n function setTrusteeAddress(address _address) external onlyGovernor {\n trusteeAddress = _address;\n emit TrusteeAddressChanged(_address);\n }\n\n /**\n * @notice Sets the TrusteeFeeBps to the percentage of yield that should be\n * received in basis points.\n */\n function setTrusteeFeeBps(uint256 _basis) external onlyGovernor {\n require(_basis <= 5000, \"basis cannot exceed 50%\");\n trusteeFeeBps = _basis;\n emit TrusteeFeeBpsChanged(_basis);\n }\n\n /**\n * @notice Set OToken Metapool strategy\n * @param _ousdMetaStrategy Address of OToken metapool strategy\n */\n function setOusdMetaStrategy(address _ousdMetaStrategy)\n external\n onlyGovernor\n {\n ousdMetaStrategy = _ousdMetaStrategy;\n emit OusdMetaStrategyUpdated(_ousdMetaStrategy);\n }\n\n /***************************************\n Pause\n ****************************************/\n\n /**\n * @notice Set the deposit paused flag to true to prevent rebasing.\n */\n function pauseRebase() external onlyGovernorOrStrategist {\n rebasePaused = true;\n emit RebasePaused();\n }\n\n /**\n * @notice Set the deposit paused flag to true to allow rebasing.\n */\n function unpauseRebase() external onlyGovernorOrStrategist {\n rebasePaused = false;\n emit RebaseUnpaused();\n }\n\n /**\n * @notice Set the deposit paused flag to true to prevent capital movement.\n */\n function pauseCapital() external onlyGovernorOrStrategist {\n capitalPaused = true;\n emit CapitalPaused();\n }\n\n /**\n * @notice Set the deposit paused flag to false to enable capital movement.\n */\n function unpauseCapital() external onlyGovernorOrStrategist {\n capitalPaused = false;\n emit CapitalUnpaused();\n }\n\n /***************************************\n Utils\n ****************************************/\n\n /**\n * @notice Transfer token to governor. Intended for recovering tokens stuck in\n * contract, i.e. mistaken sends.\n * @param _asset Address for the asset\n * @param _amount Amount of the asset to transfer\n */\n function transferToken(address _asset, uint256 _amount)\n external\n onlyGovernor\n {\n require(!assets[_asset].isSupported, \"Only unsupported assets\");\n IERC20(_asset).safeTransfer(governor(), _amount);\n }\n\n /***************************************\n Strategies Admin\n ****************************************/\n\n /**\n * @notice Withdraws all assets from the strategy and sends assets to the Vault.\n * @param _strategyAddr Strategy address.\n */\n function withdrawAllFromStrategy(address _strategyAddr)\n external\n onlyGovernorOrStrategist\n {\n _withdrawAllFromStrategy(_strategyAddr);\n }\n\n function _withdrawAllFromStrategy(address _strategyAddr) internal virtual {\n require(\n strategies[_strategyAddr].isSupported,\n \"Strategy is not supported\"\n );\n IStrategy strategy = IStrategy(_strategyAddr);\n strategy.withdrawAll();\n }\n\n /**\n * @notice Withdraws all assets from all the strategies and sends assets to the Vault.\n */\n function withdrawAllFromStrategies() external onlyGovernorOrStrategist {\n _withdrawAllFromStrategies();\n }\n\n function _withdrawAllFromStrategies() internal virtual {\n uint256 stratCount = allStrategies.length;\n for (uint256 i = 0; i < stratCount; ++i) {\n IStrategy(allStrategies[i]).withdrawAll();\n }\n }\n\n /***************************************\n Utils\n ****************************************/\n\n function _cacheDecimals(address token) internal {\n Asset storage tokenAsset = assets[token];\n if (tokenAsset.decimals != 0) {\n return;\n }\n uint8 decimals = IBasicToken(token).decimals();\n require(decimals >= 6 && decimals <= 18, \"Unexpected precision\");\n tokenAsset.decimals = decimals;\n }\n}\n" + }, + "contracts/vault/VaultCore.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title OToken VaultCore contract\n * @notice The Vault contract stores assets. On a deposit, OTokens will be minted\n and sent to the depositor. On a withdrawal, OTokens will be burned and\n assets will be sent to the withdrawer. The Vault accepts deposits of\n interest from yield bearing strategies which will modify the supply\n of OTokens.\n * @author Origin Protocol Inc\n */\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport { StableMath } from \"../utils/StableMath.sol\";\nimport { IOracle } from \"../interfaces/IOracle.sol\";\nimport { IGetExchangeRateToken } from \"../interfaces/IGetExchangeRateToken.sol\";\nimport { IDripper } from \"../interfaces/IDripper.sol\";\n\nimport \"./VaultInitializer.sol\";\n\ncontract VaultCore is VaultInitializer {\n using SafeERC20 for IERC20;\n using StableMath for uint256;\n // max signed int\n uint256 internal constant MAX_INT = 2**255 - 1;\n // max un-signed int\n uint256 internal constant MAX_UINT =\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\n\n /**\n * @dev Verifies that the rebasing is not paused.\n */\n modifier whenNotRebasePaused() {\n require(!rebasePaused, \"Rebasing paused\");\n _;\n }\n\n /**\n * @dev Verifies that the deposits are not paused.\n */\n modifier whenNotCapitalPaused() {\n require(!capitalPaused, \"Capital paused\");\n _;\n }\n\n modifier onlyOusdMetaStrategy() {\n require(\n msg.sender == ousdMetaStrategy,\n \"Caller is not the OUSD meta strategy\"\n );\n _;\n }\n\n /**\n * @notice Deposit a supported asset and mint OTokens.\n * @param _asset Address of the asset being deposited\n * @param _amount Amount of the asset being deposited\n * @param _minimumOusdAmount Minimum OTokens to mint\n */\n function mint(\n address _asset,\n uint256 _amount,\n uint256 _minimumOusdAmount\n ) external whenNotCapitalPaused nonReentrant {\n _mint(_asset, _amount, _minimumOusdAmount);\n }\n\n function _mint(\n address _asset,\n uint256 _amount,\n uint256 _minimumOusdAmount\n ) internal virtual {\n require(assets[_asset].isSupported, \"Asset is not supported\");\n require(_amount > 0, \"Amount must be greater than 0\");\n\n uint256 units = _toUnits(_amount, _asset);\n uint256 unitPrice = _toUnitPrice(_asset, true);\n uint256 priceAdjustedDeposit = (units * unitPrice) / 1e18;\n\n if (_minimumOusdAmount > 0) {\n require(\n priceAdjustedDeposit >= _minimumOusdAmount,\n \"Mint amount lower than minimum\"\n );\n }\n\n emit Mint(msg.sender, priceAdjustedDeposit);\n\n // Rebase must happen before any transfers occur.\n if (priceAdjustedDeposit >= rebaseThreshold && !rebasePaused) {\n if (dripper != address(0)) {\n // Stream any harvested rewards that are available\n IDripper(dripper).collect();\n }\n _rebase();\n }\n\n // Mint matching amount of OTokens\n oUSD.mint(msg.sender, priceAdjustedDeposit);\n\n // Transfer the deposited coins to the vault\n IERC20 asset = IERC20(_asset);\n asset.safeTransferFrom(msg.sender, address(this), _amount);\n\n if (priceAdjustedDeposit >= autoAllocateThreshold) {\n _allocate();\n }\n }\n\n /**\n * @notice Mint OTokens for a Metapool Strategy\n * @param _amount Amount of the asset being deposited\n *\n * Notice: can't use `nonReentrant` modifier since the `mint` function can\n * call `allocate`, and that can trigger `ConvexOUSDMetaStrategy` to call this function\n * while the execution of the `mint` has not yet completed -> causing a `nonReentrant` collision.\n *\n * Also important to understand is that this is a limitation imposed by the test suite.\n * Production / mainnet contracts should never be configured in a way where mint/redeem functions\n * that are moving funds between the Vault and end user wallets can influence strategies\n * utilizing this function.\n */\n function mintForStrategy(uint256 _amount)\n external\n virtual\n whenNotCapitalPaused\n onlyOusdMetaStrategy\n {\n require(_amount < MAX_INT, \"Amount too high\");\n\n emit Mint(msg.sender, _amount);\n\n // safe to cast because of the require check at the beginning of the function\n netOusdMintedForStrategy += int256(_amount);\n\n require(\n abs(netOusdMintedForStrategy) < netOusdMintForStrategyThreshold,\n \"Minted ousd surpassed netOusdMintForStrategyThreshold.\"\n );\n\n // Mint matching amount of OTokens\n oUSD.mint(msg.sender, _amount);\n }\n\n // In memoriam\n\n /**\n * @notice Withdraw a supported asset and burn OTokens.\n * @param _amount Amount of OTokens to burn\n * @param _minimumUnitAmount Minimum stablecoin units to receive in return\n */\n function redeem(uint256 _amount, uint256 _minimumUnitAmount)\n external\n whenNotCapitalPaused\n nonReentrant\n {\n _redeem(_amount, _minimumUnitAmount);\n }\n\n /**\n * @notice Withdraw a supported asset and burn OTokens.\n * @param _amount Amount of OTokens to burn\n * @param _minimumUnitAmount Minimum stablecoin units to receive in return\n */\n function _redeem(uint256 _amount, uint256 _minimumUnitAmount)\n internal\n virtual\n {\n // Calculate redemption outputs\n uint256[] memory outputs = _calculateRedeemOutputs(_amount);\n\n emit Redeem(msg.sender, _amount);\n\n // Send outputs\n uint256 assetCount = allAssets.length;\n for (uint256 i = 0; i < assetCount; ++i) {\n if (outputs[i] == 0) continue;\n\n address assetAddr = allAssets[i];\n\n if (IERC20(assetAddr).balanceOf(address(this)) >= outputs[i]) {\n // Use Vault funds first if sufficient\n IERC20(assetAddr).safeTransfer(msg.sender, outputs[i]);\n } else {\n address strategyAddr = assetDefaultStrategies[assetAddr];\n if (strategyAddr != address(0)) {\n // Nothing in Vault, but something in Strategy, send from there\n IStrategy strategy = IStrategy(strategyAddr);\n strategy.withdraw(msg.sender, assetAddr, outputs[i]);\n } else {\n // Cant find funds anywhere\n revert(\"Liquidity error\");\n }\n }\n }\n\n if (_minimumUnitAmount > 0) {\n uint256 unitTotal = 0;\n for (uint256 i = 0; i < outputs.length; ++i) {\n unitTotal += _toUnits(outputs[i], allAssets[i]);\n }\n require(\n unitTotal >= _minimumUnitAmount,\n \"Redeem amount lower than minimum\"\n );\n }\n\n oUSD.burn(msg.sender, _amount);\n\n _postRedeem(_amount);\n }\n\n function _postRedeem(uint256 _amount) internal {\n // Until we can prove that we won't affect the prices of our assets\n // by withdrawing them, this should be here.\n // It's possible that a strategy was off on its asset total, perhaps\n // a reward token sold for more or for less than anticipated.\n uint256 totalUnits = 0;\n if (_amount >= rebaseThreshold && !rebasePaused) {\n totalUnits = _rebase();\n } else {\n totalUnits = _totalValue();\n }\n\n // Check that the OTokens are backed by enough assets\n if (maxSupplyDiff > 0) {\n // If there are more outstanding withdrawal requests than assets in the vault and strategies\n // then the available assets will be negative and totalUnits will be rounded up to zero.\n // As we don't know the exact shortfall amount, we will reject all redeem and withdrawals\n require(totalUnits > 0, \"Too many outstanding requests\");\n\n // Allow a max difference of maxSupplyDiff% between\n // backing assets value and OUSD total supply\n uint256 diff = oUSD.totalSupply().divPrecisely(totalUnits);\n require(\n (diff > 1e18 ? diff - 1e18 : 1e18 - diff) <= maxSupplyDiff,\n \"Backing supply liquidity error\"\n );\n }\n }\n\n /**\n * @notice Burn OTokens for Metapool Strategy\n * @param _amount Amount of OUSD to burn\n *\n * @dev Notice: can't use `nonReentrant` modifier since the `redeem` function could\n * require withdrawal on `ConvexOUSDMetaStrategy` and that one can call `burnForStrategy`\n * while the execution of the `redeem` has not yet completed -> causing a `nonReentrant` collision.\n *\n * Also important to understand is that this is a limitation imposed by the test suite.\n * Production / mainnet contracts should never be configured in a way where mint/redeem functions\n * that are moving funds between the Vault and end user wallets can influence strategies\n * utilizing this function.\n */\n function burnForStrategy(uint256 _amount)\n external\n virtual\n whenNotCapitalPaused\n onlyOusdMetaStrategy\n {\n require(_amount < MAX_INT, \"Amount too high\");\n\n emit Redeem(msg.sender, _amount);\n\n // safe to cast because of the require check at the beginning of the function\n netOusdMintedForStrategy -= int256(_amount);\n\n require(\n abs(netOusdMintedForStrategy) < netOusdMintForStrategyThreshold,\n \"Attempting to burn too much OUSD.\"\n );\n\n // Burn OTokens\n oUSD.burn(msg.sender, _amount);\n }\n\n /**\n * @notice Withdraw a supported asset and burn all OTokens.\n * @param _minimumUnitAmount Minimum stablecoin units to receive in return\n */\n function redeemAll(uint256 _minimumUnitAmount)\n external\n whenNotCapitalPaused\n nonReentrant\n {\n _redeem(oUSD.balanceOf(msg.sender), _minimumUnitAmount);\n }\n\n /**\n * @notice Allocate unallocated funds on Vault to strategies.\n **/\n function allocate() external virtual whenNotCapitalPaused nonReentrant {\n _allocate();\n }\n\n /**\n * @dev Allocate unallocated funds on Vault to strategies.\n **/\n function _allocate() internal virtual {\n uint256 vaultValue = _totalValueInVault();\n // Nothing in vault to allocate\n if (vaultValue == 0) return;\n uint256 strategiesValue = _totalValueInStrategies();\n // We have a method that does the same as this, gas optimisation\n uint256 calculatedTotalValue = vaultValue + strategiesValue;\n\n // We want to maintain a buffer on the Vault so calculate a percentage\n // modifier to multiply each amount being allocated by to enforce the\n // vault buffer\n uint256 vaultBufferModifier;\n if (strategiesValue == 0) {\n // Nothing in Strategies, allocate 100% minus the vault buffer to\n // strategies\n vaultBufferModifier = uint256(1e18) - vaultBuffer;\n } else {\n vaultBufferModifier =\n (vaultBuffer * calculatedTotalValue) /\n vaultValue;\n if (1e18 > vaultBufferModifier) {\n // E.g. 1e18 - (1e17 * 10e18)/5e18 = 8e17\n // (5e18 * 8e17) / 1e18 = 4e18 allocated from Vault\n vaultBufferModifier = uint256(1e18) - vaultBufferModifier;\n } else {\n // We need to let the buffer fill\n return;\n }\n }\n if (vaultBufferModifier == 0) return;\n\n // Iterate over all assets in the Vault and allocate to the appropriate\n // strategy\n uint256 assetCount = allAssets.length;\n for (uint256 i = 0; i < assetCount; ++i) {\n IERC20 asset = IERC20(allAssets[i]);\n uint256 assetBalance = asset.balanceOf(address(this));\n // No balance, nothing to do here\n if (assetBalance == 0) continue;\n\n // Multiply the balance by the vault buffer modifier and truncate\n // to the scale of the asset decimals\n uint256 allocateAmount = assetBalance.mulTruncate(\n vaultBufferModifier\n );\n\n address depositStrategyAddr = assetDefaultStrategies[\n address(asset)\n ];\n\n if (depositStrategyAddr != address(0) && allocateAmount > 0) {\n IStrategy strategy = IStrategy(depositStrategyAddr);\n // Transfer asset to Strategy and call deposit method to\n // mint or take required action\n asset.safeTransfer(address(strategy), allocateAmount);\n strategy.deposit(address(asset), allocateAmount);\n emit AssetAllocated(\n address(asset),\n depositStrategyAddr,\n allocateAmount\n );\n }\n }\n }\n\n /**\n * @notice Calculate the total value of assets held by the Vault and all\n * strategies and update the supply of OTokens.\n */\n function rebase() external virtual nonReentrant {\n _rebase();\n }\n\n /**\n * @dev Calculate the total value of assets held by the Vault and all\n * strategies and update the supply of OTokens, optionally sending a\n * portion of the yield to the trustee.\n * @return totalUnits Total balance of Vault in units\n */\n function _rebase() internal whenNotRebasePaused returns (uint256) {\n uint256 ousdSupply = oUSD.totalSupply();\n uint256 vaultValue = _totalValue();\n if (ousdSupply == 0) {\n return vaultValue;\n }\n\n // Yield fee collection\n address _trusteeAddress = trusteeAddress; // gas savings\n if (_trusteeAddress != address(0) && (vaultValue > ousdSupply)) {\n uint256 yield = vaultValue - ousdSupply;\n uint256 fee = yield.mulTruncateScale(trusteeFeeBps, 1e4);\n require(yield > fee, \"Fee must not be greater than yield\");\n if (fee > 0) {\n oUSD.mint(_trusteeAddress, fee);\n }\n emit YieldDistribution(_trusteeAddress, yield, fee);\n }\n\n // Only rachet OToken supply upwards\n ousdSupply = oUSD.totalSupply(); // Final check should use latest value\n if (vaultValue > ousdSupply) {\n oUSD.changeSupply(vaultValue);\n }\n return vaultValue;\n }\n\n /**\n * @notice Determine the total value of assets held by the vault and its\n * strategies.\n * @return value Total value in USD/ETH (1e18)\n */\n function totalValue() external view virtual returns (uint256 value) {\n value = _totalValue();\n }\n\n /**\n * @dev Internal Calculate the total value of the assets held by the\n * vault and its strategies.\n * @return value Total value in USD/ETH (1e18)\n */\n function _totalValue() internal view virtual returns (uint256 value) {\n return _totalValueInVault() + _totalValueInStrategies();\n }\n\n /**\n * @dev Internal to calculate total value of all assets held in Vault.\n * @return value Total value in USD/ETH (1e18)\n */\n function _totalValueInVault()\n internal\n view\n virtual\n returns (uint256 value)\n {\n uint256 assetCount = allAssets.length;\n for (uint256 y = 0; y < assetCount; ++y) {\n address assetAddr = allAssets[y];\n uint256 balance = IERC20(assetAddr).balanceOf(address(this));\n if (balance > 0) {\n value += _toUnits(balance, assetAddr);\n }\n }\n }\n\n /**\n * @dev Internal to calculate total value of all assets held in Strategies.\n * @return value Total value in USD/ETH (1e18)\n */\n function _totalValueInStrategies() internal view returns (uint256 value) {\n uint256 stratCount = allStrategies.length;\n for (uint256 i = 0; i < stratCount; ++i) {\n value = value + _totalValueInStrategy(allStrategies[i]);\n }\n }\n\n /**\n * @dev Internal to calculate total value of all assets held by strategy.\n * @param _strategyAddr Address of the strategy\n * @return value Total value in USD/ETH (1e18)\n */\n function _totalValueInStrategy(address _strategyAddr)\n internal\n view\n returns (uint256 value)\n {\n IStrategy strategy = IStrategy(_strategyAddr);\n uint256 assetCount = allAssets.length;\n for (uint256 y = 0; y < assetCount; ++y) {\n address assetAddr = allAssets[y];\n if (strategy.supportsAsset(assetAddr)) {\n uint256 balance = strategy.checkBalance(assetAddr);\n if (balance > 0) {\n value += _toUnits(balance, assetAddr);\n }\n }\n }\n }\n\n /**\n * @notice Get the balance of an asset held in Vault and all strategies.\n * @param _asset Address of asset\n * @return uint256 Balance of asset in decimals of asset\n */\n function checkBalance(address _asset) external view returns (uint256) {\n return _checkBalance(_asset);\n }\n\n /**\n * @notice Get the balance of an asset held in Vault and all strategies.\n * @param _asset Address of asset\n * @return balance Balance of asset in decimals of asset\n */\n function _checkBalance(address _asset)\n internal\n view\n virtual\n returns (uint256 balance)\n {\n IERC20 asset = IERC20(_asset);\n balance = asset.balanceOf(address(this));\n uint256 stratCount = allStrategies.length;\n for (uint256 i = 0; i < stratCount; ++i) {\n IStrategy strategy = IStrategy(allStrategies[i]);\n if (strategy.supportsAsset(_asset)) {\n balance = balance + strategy.checkBalance(_asset);\n }\n }\n }\n\n /**\n * @notice Calculate the outputs for a redeem function, i.e. the mix of\n * coins that will be returned\n */\n function calculateRedeemOutputs(uint256 _amount)\n external\n view\n returns (uint256[] memory)\n {\n return _calculateRedeemOutputs(_amount);\n }\n\n /**\n * @dev Calculate the outputs for a redeem function, i.e. the mix of\n * coins that will be returned.\n * @return outputs Array of amounts respective to the supported assets\n */\n function _calculateRedeemOutputs(uint256 _amount)\n internal\n view\n virtual\n returns (uint256[] memory outputs)\n {\n // We always give out coins in proportion to how many we have,\n // Now if all coins were the same value, this math would easy,\n // just take the percentage of each coin, and multiply by the\n // value to be given out. But if coins are worth more than $1,\n // then we would end up handing out too many coins. We need to\n // adjust by the total value of coins.\n //\n // To do this, we total up the value of our coins, by their\n // percentages. Then divide what we would otherwise give out by\n // this number.\n //\n // Let say we have 100 DAI at $1.06 and 200 USDT at $1.00.\n // So for every 1 DAI we give out, we'll be handing out 2 USDT\n // Our total output ratio is: 33% * 1.06 + 66% * 1.00 = 1.02\n //\n // So when calculating the output, we take the percentage of\n // each coin, times the desired output value, divided by the\n // totalOutputRatio.\n //\n // For example, withdrawing: 30 OUSD:\n // DAI 33% * 30 / 1.02 = 9.80 DAI\n // USDT = 66 % * 30 / 1.02 = 19.60 USDT\n //\n // Checking these numbers:\n // 9.80 DAI * 1.06 = $10.40\n // 19.60 USDT * 1.00 = $19.60\n //\n // And so the user gets $10.40 + $19.60 = $30 worth of value.\n\n uint256 assetCount = allAssets.length;\n uint256[] memory assetUnits = new uint256[](assetCount);\n uint256[] memory assetBalances = new uint256[](assetCount);\n outputs = new uint256[](assetCount);\n\n // Calculate redeem fee\n if (redeemFeeBps > 0) {\n uint256 redeemFee = _amount.mulTruncateScale(redeemFeeBps, 1e4);\n _amount = _amount - redeemFee;\n }\n\n // Calculate assets balances and decimals once,\n // for a large gas savings.\n uint256 totalUnits = 0;\n for (uint256 i = 0; i < assetCount; ++i) {\n address assetAddr = allAssets[i];\n uint256 balance = _checkBalance(assetAddr);\n assetBalances[i] = balance;\n assetUnits[i] = _toUnits(balance, assetAddr);\n totalUnits = totalUnits + assetUnits[i];\n }\n // Calculate totalOutputRatio\n uint256 totalOutputRatio = 0;\n for (uint256 i = 0; i < assetCount; ++i) {\n uint256 unitPrice = _toUnitPrice(allAssets[i], false);\n uint256 ratio = (assetUnits[i] * unitPrice) / totalUnits;\n totalOutputRatio = totalOutputRatio + ratio;\n }\n // Calculate final outputs\n uint256 factor = _amount.divPrecisely(totalOutputRatio);\n for (uint256 i = 0; i < assetCount; ++i) {\n outputs[i] = (assetBalances[i] * factor) / totalUnits;\n }\n }\n\n /***************************************\n Pricing\n ****************************************/\n\n /**\n * @notice Returns the total price in 18 digit units for a given asset.\n * Never goes above 1, since that is how we price mints.\n * @param asset address of the asset\n * @return price uint256: unit (USD / ETH) price for 1 unit of the asset, in 18 decimal fixed\n */\n function priceUnitMint(address asset)\n external\n view\n returns (uint256 price)\n {\n /* need to supply 1 asset unit in asset's decimals and can not just hard-code\n * to 1e18 and ignore calling `_toUnits` since we need to consider assets\n * with the exchange rate\n */\n uint256 units = _toUnits(\n uint256(1e18).scaleBy(_getDecimals(asset), 18),\n asset\n );\n price = (_toUnitPrice(asset, true) * units) / 1e18;\n }\n\n /**\n * @notice Returns the total price in 18 digit unit for a given asset.\n * Never goes below 1, since that is how we price redeems\n * @param asset Address of the asset\n * @return price uint256: unit (USD / ETH) price for 1 unit of the asset, in 18 decimal fixed\n */\n function priceUnitRedeem(address asset)\n external\n view\n returns (uint256 price)\n {\n /* need to supply 1 asset unit in asset's decimals and can not just hard-code\n * to 1e18 and ignore calling `_toUnits` since we need to consider assets\n * with the exchange rate\n */\n uint256 units = _toUnits(\n uint256(1e18).scaleBy(_getDecimals(asset), 18),\n asset\n );\n price = (_toUnitPrice(asset, false) * units) / 1e18;\n }\n\n /***************************************\n Utils\n ****************************************/\n\n /**\n * @dev Convert a quantity of a token into 1e18 fixed decimal \"units\"\n * in the underlying base (USD/ETH) used by the vault.\n * Price is not taken into account, only quantity.\n *\n * Examples of this conversion:\n *\n * - 1e18 DAI becomes 1e18 units (same decimals)\n * - 1e6 USDC becomes 1e18 units (decimal conversion)\n * - 1e18 rETH becomes 1.2e18 units (exchange rate conversion)\n *\n * @param _raw Quantity of asset\n * @param _asset Core Asset address\n * @return value 1e18 normalized quantity of units\n */\n function _toUnits(uint256 _raw, address _asset)\n internal\n view\n returns (uint256)\n {\n UnitConversion conversion = assets[_asset].unitConversion;\n if (conversion == UnitConversion.DECIMALS) {\n return _raw.scaleBy(18, _getDecimals(_asset));\n } else if (conversion == UnitConversion.GETEXCHANGERATE) {\n uint256 exchangeRate = IGetExchangeRateToken(_asset)\n .getExchangeRate();\n return (_raw * exchangeRate) / 1e18;\n } else {\n revert(\"Unsupported conversion type\");\n }\n }\n\n /**\n * @dev Returns asset's unit price accounting for different asset types\n * and takes into account the context in which that price exists -\n * - mint or redeem.\n *\n * Note: since we are returning the price of the unit and not the one of the\n * asset (see comment above how 1 rETH exchanges for 1.2 units) we need\n * to make the Oracle price adjustment as well since we are pricing the\n * units and not the assets.\n *\n * The price also snaps to a \"full unit price\" in case a mint or redeem\n * action would be unfavourable to the protocol.\n *\n */\n function _toUnitPrice(address _asset, bool isMint)\n internal\n view\n returns (uint256 price)\n {\n UnitConversion conversion = assets[_asset].unitConversion;\n price = IOracle(priceProvider).price(_asset);\n\n if (conversion == UnitConversion.GETEXCHANGERATE) {\n uint256 exchangeRate = IGetExchangeRateToken(_asset)\n .getExchangeRate();\n price = (price * 1e18) / exchangeRate;\n } else if (conversion != UnitConversion.DECIMALS) {\n revert(\"Unsupported conversion type\");\n }\n\n /* At this stage the price is already adjusted to the unit\n * so the price checks are agnostic to underlying asset being\n * pegged to a USD or to an ETH or having a custom exchange rate.\n */\n require(price <= MAX_UNIT_PRICE_DRIFT, \"Vault: Price exceeds max\");\n require(price >= MIN_UNIT_PRICE_DRIFT, \"Vault: Price under min\");\n\n if (isMint) {\n /* Never price a normalized unit price for more than one\n * unit of OETH/OUSD when minting.\n */\n if (price > 1e18) {\n price = 1e18;\n }\n require(price >= MINT_MINIMUM_UNIT_PRICE, \"Asset price below peg\");\n } else {\n /* Never give out more than 1 normalized unit amount of assets\n * for one unit of OETH/OUSD when redeeming.\n */\n if (price < 1e18) {\n price = 1e18;\n }\n }\n }\n\n function _getDecimals(address _asset)\n internal\n view\n returns (uint256 decimals)\n {\n decimals = assets[_asset].decimals;\n require(decimals > 0, \"Decimals not cached\");\n }\n\n /**\n * @notice Return the number of assets supported by the Vault.\n */\n function getAssetCount() public view returns (uint256) {\n return allAssets.length;\n }\n\n /**\n * @notice Gets the vault configuration of a supported asset.\n */\n function getAssetConfig(address _asset)\n public\n view\n returns (Asset memory config)\n {\n config = assets[_asset];\n }\n\n /**\n * @notice Return all vault asset addresses in order\n */\n function getAllAssets() external view returns (address[] memory) {\n return allAssets;\n }\n\n /**\n * @notice Return the number of strategies active on the Vault.\n */\n function getStrategyCount() external view returns (uint256) {\n return allStrategies.length;\n }\n\n /**\n * @notice Return the array of all strategies\n */\n function getAllStrategies() external view returns (address[] memory) {\n return allStrategies;\n }\n\n /**\n * @notice Returns whether the vault supports the asset\n * @param _asset address of the asset\n * @return true if supported\n */\n function isSupportedAsset(address _asset) external view returns (bool) {\n return assets[_asset].isSupported;\n }\n\n /**\n * @dev Falldown to the admin implementation\n * @notice This is a catch all for all functions not declared in core\n */\n // solhint-disable-next-line no-complex-fallback\n fallback() external {\n bytes32 slot = adminImplPosition;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(\n gas(),\n sload(slot),\n 0,\n calldatasize(),\n 0,\n 0\n )\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n function abs(int256 x) private pure returns (uint256) {\n require(x < int256(MAX_INT), \"Amount too high\");\n return x >= 0 ? uint256(x) : uint256(-x);\n }\n}\n" + }, + "contracts/vault/VaultInitializer.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title OToken VaultInitializer contract\n * @notice The Vault contract initializes the vault.\n * @author Origin Protocol Inc\n */\n\nimport \"./VaultStorage.sol\";\n\ncontract VaultInitializer is VaultStorage {\n function initialize(address _priceProvider, address _oToken)\n external\n onlyGovernor\n initializer\n {\n require(_priceProvider != address(0), \"PriceProvider address is zero\");\n require(_oToken != address(0), \"oToken address is zero\");\n\n oUSD = OUSD(_oToken);\n\n priceProvider = _priceProvider;\n\n rebasePaused = false;\n capitalPaused = true;\n\n // Initial redeem fee of 0 basis points\n redeemFeeBps = 0;\n // Initial Vault buffer of 0%\n vaultBuffer = 0;\n // Initial allocate threshold of 25,000 OUSD\n autoAllocateThreshold = 25000e18;\n // Threshold for rebasing\n rebaseThreshold = 1000e18;\n // Initialize all strategies\n allStrategies = new address[](0);\n }\n}\n" + }, + "contracts/vault/VaultStorage.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title OToken VaultStorage contract\n * @notice The VaultStorage contract defines the storage for the Vault contracts\n * @author Origin Protocol Inc\n */\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport { IStrategy } from \"../interfaces/IStrategy.sol\";\nimport { Governable } from \"../governance/Governable.sol\";\nimport { OUSD } from \"../token/OUSD.sol\";\nimport { Initializable } from \"../utils/Initializable.sol\";\nimport \"../utils/Helpers.sol\";\n\ncontract VaultStorage is Initializable, Governable {\n using SafeERC20 for IERC20;\n\n event AssetSupported(address _asset);\n event AssetRemoved(address _asset);\n event AssetDefaultStrategyUpdated(address _asset, address _strategy);\n event AssetAllocated(address _asset, address _strategy, uint256 _amount);\n event StrategyApproved(address _addr);\n event StrategyRemoved(address _addr);\n event Mint(address _addr, uint256 _value);\n event Redeem(address _addr, uint256 _value);\n event CapitalPaused();\n event CapitalUnpaused();\n event RebasePaused();\n event RebaseUnpaused();\n event VaultBufferUpdated(uint256 _vaultBuffer);\n event OusdMetaStrategyUpdated(address _ousdMetaStrategy);\n event RedeemFeeUpdated(uint256 _redeemFeeBps);\n event PriceProviderUpdated(address _priceProvider);\n event AllocateThresholdUpdated(uint256 _threshold);\n event RebaseThresholdUpdated(uint256 _threshold);\n event StrategistUpdated(address _address);\n event MaxSupplyDiffChanged(uint256 maxSupplyDiff);\n event YieldDistribution(address _to, uint256 _yield, uint256 _fee);\n event TrusteeFeeBpsChanged(uint256 _basis);\n event TrusteeAddressChanged(address _address);\n event NetOusdMintForStrategyThresholdChanged(uint256 _threshold);\n event SwapperChanged(address _address);\n event SwapAllowedUndervalueChanged(uint256 _basis);\n event SwapSlippageChanged(address _asset, uint256 _basis);\n event Swapped(\n address indexed _fromAsset,\n address indexed _toAsset,\n uint256 _fromAssetAmount,\n uint256 _toAssetAmount\n );\n event DripperChanged(address indexed _dripper);\n event StrategyAddedToMintWhitelist(address indexed strategy);\n event StrategyRemovedFromMintWhitelist(address indexed strategy);\n event WithdrawalRequested(\n address indexed _withdrawer,\n uint256 indexed _requestId,\n uint256 _amount,\n uint256 _queued\n );\n event WithdrawalClaimed(\n address indexed _withdrawer,\n uint256 indexed _requestId,\n uint256 _amount\n );\n event WithdrawalClaimable(uint256 _claimable, uint256 _newClaimable);\n\n // Assets supported by the Vault, i.e. Stablecoins\n enum UnitConversion {\n DECIMALS,\n GETEXCHANGERATE\n }\n // Changed to fit into a single storage slot so the decimals needs to be recached\n struct Asset {\n // Note: OETHVaultCore doesn't use `isSupported` when minting,\n // redeeming or checking balance of assets.\n bool isSupported;\n UnitConversion unitConversion;\n uint8 decimals;\n // Max allowed slippage from the Oracle price when swapping collateral assets in basis points.\n // For example 40 == 0.4% slippage\n uint16 allowedOracleSlippageBps;\n }\n\n /// @dev mapping of supported vault assets to their configuration\n // slither-disable-next-line uninitialized-state\n mapping(address => Asset) internal assets;\n /// @dev list of all assets supported by the vault.\n // slither-disable-next-line uninitialized-state\n address[] internal allAssets;\n\n // Strategies approved for use by the Vault\n struct Strategy {\n bool isSupported;\n uint256 _deprecated; // Deprecated storage slot\n }\n /// @dev mapping of strategy contracts to their configuration\n // slither-disable-next-line uninitialized-state\n mapping(address => Strategy) internal strategies;\n /// @dev list of all vault strategies\n address[] internal allStrategies;\n\n /// @notice Address of the Oracle price provider contract\n // slither-disable-next-line uninitialized-state\n address public priceProvider;\n /// @notice pause rebasing if true\n bool public rebasePaused = false;\n /// @notice pause operations that change the OToken supply.\n /// eg mint, redeem, allocate, mint/burn for strategy\n bool public capitalPaused = true;\n /// @notice Redemption fee in basis points. eg 50 = 0.5%\n uint256 public redeemFeeBps;\n /// @notice Percentage of assets to keep in Vault to handle (most) withdrawals. 100% = 1e18.\n uint256 public vaultBuffer;\n /// @notice OToken mints over this amount automatically allocate funds. 18 decimals.\n uint256 public autoAllocateThreshold;\n /// @notice OToken mints over this amount automatically rebase. 18 decimals.\n uint256 public rebaseThreshold;\n\n /// @dev Address of the OToken token. eg OUSD or OETH.\n // slither-disable-next-line uninitialized-state\n OUSD internal oUSD;\n\n //keccak256(\"OUSD.vault.governor.admin.impl\");\n bytes32 constant adminImplPosition =\n 0xa2bd3d3cf188a41358c8b401076eb59066b09dec5775650c0de4c55187d17bd9;\n\n // Address of the contract responsible for post rebase syncs with AMMs\n address private _deprecated_rebaseHooksAddr = address(0);\n\n // Deprecated: Address of Uniswap\n // slither-disable-next-line constable-states\n address private _deprecated_uniswapAddr = address(0);\n\n /// @notice Address of the Strategist\n address public strategistAddr = address(0);\n\n /// @notice Mapping of asset address to the Strategy that they should automatically\n // be allocated to\n // slither-disable-next-line uninitialized-state\n mapping(address => address) public assetDefaultStrategies;\n\n /// @notice Max difference between total supply and total value of assets. 18 decimals.\n // slither-disable-next-line uninitialized-state\n uint256 public maxSupplyDiff;\n\n /// @notice Trustee contract that can collect a percentage of yield\n address public trusteeAddress;\n\n /// @notice Amount of yield collected in basis points. eg 2000 = 20%\n uint256 public trusteeFeeBps;\n\n /// @dev Deprecated: Tokens that should be swapped for stablecoins\n address[] private _deprecated_swapTokens;\n\n uint256 constant MINT_MINIMUM_UNIT_PRICE = 0.998e18;\n\n /// @notice Metapool strategy that is allowed to mint/burn OTokens without changing collateral\n\n // slither-disable-start constable-states\n // slither-disable-next-line uninitialized-state\n address public ousdMetaStrategy;\n\n /// @notice How much OTokens are currently minted by the strategy\n // slither-disable-next-line uninitialized-state\n int256 public netOusdMintedForStrategy;\n\n /// @notice How much net total OTokens are allowed to be minted by all strategies\n // slither-disable-next-line uninitialized-state\n uint256 public netOusdMintForStrategyThreshold;\n\n // slither-disable-end constable-states\n\n uint256 constant MIN_UNIT_PRICE_DRIFT = 0.7e18;\n uint256 constant MAX_UNIT_PRICE_DRIFT = 1.3e18;\n\n /// @notice Collateral swap configuration.\n /// @dev is packed into a single storage slot to save gas.\n struct SwapConfig {\n // Contract that swaps the vault's collateral assets\n address swapper;\n // Max allowed percentage the total value can drop below the total supply in basis points.\n // For example 100 == 1%\n uint16 allowedUndervalueBps;\n }\n SwapConfig internal swapConfig = SwapConfig(address(0), 0);\n\n // List of strategies that can mint oTokens directly\n // Used in OETHBaseVaultCore\n // slither-disable-next-line uninitialized-state\n mapping(address => bool) public isMintWhitelistedStrategy;\n\n /// @notice Address of the Dripper contract that streams harvested rewards to the Vault\n /// @dev The vault is proxied so needs to be set with setDripper against the proxy contract.\n // slither-disable-start constable-states\n // slither-disable-next-line uninitialized-state\n address public dripper;\n // slither-disable-end constable-states\n\n /// Withdrawal Queue Storage /////\n\n struct WithdrawalQueueMetadata {\n // cumulative total of all withdrawal requests included the ones that have already been claimed\n uint128 queued;\n // cumulative total of all the requests that can be claimed including the ones that have already been claimed\n uint128 claimable;\n // total of all the requests that have been claimed\n uint128 claimed;\n // index of the next withdrawal request starting at 0\n uint128 nextWithdrawalIndex;\n }\n\n /// @notice Global metadata for the withdrawal queue including:\n /// queued - cumulative total of all withdrawal requests included the ones that have already been claimed\n /// claimable - cumulative total of all the requests that can be claimed including the ones already claimed\n /// claimed - total of all the requests that have been claimed\n /// nextWithdrawalIndex - index of the next withdrawal request starting at 0\n // slither-disable-next-line uninitialized-state\n WithdrawalQueueMetadata public withdrawalQueueMetadata;\n\n struct WithdrawalRequest {\n address withdrawer;\n bool claimed;\n uint40 timestamp; // timestamp of the withdrawal request\n // Amount of oTokens to redeem. eg OETH\n uint128 amount;\n // cumulative total of all withdrawal requests including this one.\n // this request can be claimed when this queued amount is less than or equal to the queue's claimable amount.\n uint128 queued;\n }\n\n /// @notice Mapping of withdrawal request indices to the user withdrawal request data\n mapping(uint256 => WithdrawalRequest) public withdrawalRequests;\n\n // For future use\n uint256[45] private __gap;\n\n /**\n * @notice set the implementation for the admin, this needs to be in a base class else we cannot set it\n * @param newImpl address of the implementation\n */\n function setAdminImpl(address newImpl) external onlyGovernor {\n require(\n Address.isContract(newImpl),\n \"new implementation is not a contract\"\n );\n bytes32 position = adminImplPosition;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(position, newImpl)\n }\n }\n}\n" + }, + "contracts/zapper/WOETHCCIPZapper.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IRouterClient } from \"@chainlink/contracts-ccip/src/v0.8/ccip/interfaces/IRouterClient.sol\";\nimport { Client } from \"@chainlink/contracts-ccip/src/v0.8/ccip/libraries/Client.sol\";\n// solhint-disable-next-line max-line-length\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IERC4626 } from \"./../../lib/openzeppelin/interfaces/IERC4626.sol\";\nimport { IOETHZapper } from \"./../interfaces/IOETHZapper.sol\";\n\n/**\n * @title WOETH CCIP Zapper Contract\n * @notice Helps to directly convert ETH on mainnet into WOETH on L2s.\n * @author Origin Protocol Inc\n */\n\ncontract WOETHCCIPZapper {\n /**\n * @dev Event emitted when a zap occurs\n * @param messageId Unique message identifier for each zap\n * @param sender Address initiating the zap\n * @param recipient Recipient address at destination chain\n * @param amount Amount of ETH zapped\n */\n event Zap(\n bytes32 indexed messageId,\n address sender,\n address recipient,\n uint256 amount\n );\n\n // @dev Thrown when Zap amount is less than fee.\n error AmountLessThanFee();\n\n /**\n * @dev The destination chain selector\n */\n uint64 public immutable destinationChainSelector;\n\n /**\n * @dev The WOETH source chain (Mainnet)\n */\n IERC4626 public immutable woethOnSourceChain;\n\n /**\n * @dev The WOETH destination chain (Arbitrum)\n */\n IERC20 public immutable woethOnDestinationChain;\n\n /**\n * @dev The OETH zapper contract address\n */\n IOETHZapper public immutable oethZapper;\n\n /**\n * @dev The CCIP router contract address\n */\n IRouterClient public immutable ccipRouter;\n\n /**\n * @dev The OETH token contract address\n */\n IERC20 public immutable oeth;\n\n constructor(\n address _ccipRouter,\n uint64 _destinationChainSelector,\n IERC4626 _woethOnSourceChain,\n IERC20 _woethOnDestinationChain,\n IOETHZapper _oethZapper,\n IERC20 _oeth\n ) {\n ccipRouter = IRouterClient(_ccipRouter);\n destinationChainSelector = _destinationChainSelector;\n woethOnSourceChain = _woethOnSourceChain;\n woethOnDestinationChain = _woethOnDestinationChain;\n oethZapper = _oethZapper;\n oeth = _oeth;\n\n // Max allowance for Router and WOETH contracts\n _oeth.approve(address(_woethOnSourceChain), type(uint256).max); // for wrapping\n _woethOnSourceChain.approve(address(_ccipRouter), type(uint256).max); // for zapping\n }\n\n /**\n * @notice Accepts ETH, zaps for OETH, wraps it for WOETH and sends it to the destination chain (arbitrum)\n * @param receiver The address of the EOA on the destination chain\n * @return messageId The ID of the message that was sent\n */\n function zap(address receiver)\n external\n payable\n returns (bytes32 messageId)\n {\n return _zap(receiver, msg.value);\n }\n\n /**\n * @notice Used to estimate fee for CCIP transaction\n * @param amount The amount of ETH to be zapped\n * @param receiver The address of the EOA on the destination chain\n * @return feeAmount The CCIP tx fee in ETH.\n */\n\n function getFee(uint256 amount, address receiver)\n public\n view\n returns (uint256 feeAmount)\n {\n Client.EVMTokenAmount[]\n memory tokenAmounts = new Client.EVMTokenAmount[](1);\n Client.EVMTokenAmount memory tokenAmount = Client.EVMTokenAmount({\n token: address(woethOnSourceChain),\n amount: amount\n });\n tokenAmounts[0] = tokenAmount;\n\n Client.EVM2AnyMessage memory message = Client.EVM2AnyMessage({\n receiver: abi.encode(receiver), // ABI-encoded receiver address\n data: abi.encode(\"\"),\n tokenAmounts: tokenAmounts,\n extraArgs: Client._argsToBytes(\n Client.EVMExtraArgsV1({ gasLimit: 0 })\n ),\n feeToken: address(0)\n });\n\n feeAmount = ccipRouter.getFee(destinationChainSelector, message);\n }\n\n /**\n * @dev Deposit ETH and receive WOETH in L2.\n * @dev Note that the WOETH will be sent to the msg.sender at destination chain as well.\n */\n receive() external payable {\n _zap(msg.sender, msg.value);\n }\n\n function _zap(address receiver, uint256 amount)\n internal\n returns (bytes32 messageId)\n {\n // Estimate fee for zapping.\n uint256 feeAmount = getFee(amount, receiver);\n if (amount < feeAmount) {\n revert AmountLessThanFee();\n }\n\n // Convert only the msg.value - fees amount to WOETH.\n amount -= feeAmount;\n\n // 1.) Zap for OETH\n uint256 oethReceived = oethZapper.deposit{ value: amount }();\n\n // 2.) Wrap the received woeth\n uint256 woethReceived = woethOnSourceChain.deposit(\n oethReceived,\n address(this)\n );\n\n // 3.) Setup params for CCIP transfer\n\n Client.EVMTokenAmount[]\n memory tokenAmounts = new Client.EVMTokenAmount[](1);\n Client.EVMTokenAmount memory tokenAmount = Client.EVMTokenAmount({\n token: address(woethOnSourceChain),\n amount: woethReceived\n });\n tokenAmounts[0] = tokenAmount;\n\n Client.EVM2AnyMessage memory message = Client.EVM2AnyMessage({\n receiver: abi.encode(receiver), // ABI-encoded receiver address\n data: abi.encode(\"\"),\n tokenAmounts: tokenAmounts,\n extraArgs: Client._argsToBytes(\n // See: https://docs.chain.link/ccip/best-practices#setting-gaslimit\n Client.EVMExtraArgsV1({ gasLimit: 0 })\n ),\n feeToken: address(0)\n });\n\n // ZAP ϟ\n //slither-disable-next-line arbitrary-send-eth\n messageId = ccipRouter.ccipSend{ value: feeAmount }(\n destinationChainSelector,\n message\n );\n\n // Emit Zap event with message details\n emit Zap(messageId, msg.sender, receiver, amount);\n\n // Return the message ID\n return messageId;\n }\n}\n" + }, + "hardhat/console.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity >= 0.4.22 <0.9.0;\n\nlibrary console {\n\taddress constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);\n\n\tfunction _sendLogPayload(bytes memory payload) private view {\n\t\tuint256 payloadLength = payload.length;\n\t\taddress consoleAddress = CONSOLE_ADDRESS;\n\t\tassembly {\n\t\t\tlet payloadStart := add(payload, 32)\n\t\t\tlet r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)\n\t\t}\n\t}\n\n\tfunction log() internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log()\"));\n\t}\n\n\tfunction logInt(int256 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(int256)\", p0));\n\t}\n\n\tfunction logUint(uint256 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n\t}\n\n\tfunction logString(string memory p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n\t}\n\n\tfunction logBool(bool p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n\t}\n\n\tfunction logAddress(address p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n\t}\n\n\tfunction logBytes(bytes memory p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes)\", p0));\n\t}\n\n\tfunction logBytes1(bytes1 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes1)\", p0));\n\t}\n\n\tfunction logBytes2(bytes2 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes2)\", p0));\n\t}\n\n\tfunction logBytes3(bytes3 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes3)\", p0));\n\t}\n\n\tfunction logBytes4(bytes4 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes4)\", p0));\n\t}\n\n\tfunction logBytes5(bytes5 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes5)\", p0));\n\t}\n\n\tfunction logBytes6(bytes6 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes6)\", p0));\n\t}\n\n\tfunction logBytes7(bytes7 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes7)\", p0));\n\t}\n\n\tfunction logBytes8(bytes8 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes8)\", p0));\n\t}\n\n\tfunction logBytes9(bytes9 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes9)\", p0));\n\t}\n\n\tfunction logBytes10(bytes10 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes10)\", p0));\n\t}\n\n\tfunction logBytes11(bytes11 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes11)\", p0));\n\t}\n\n\tfunction logBytes12(bytes12 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes12)\", p0));\n\t}\n\n\tfunction logBytes13(bytes13 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes13)\", p0));\n\t}\n\n\tfunction logBytes14(bytes14 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes14)\", p0));\n\t}\n\n\tfunction logBytes15(bytes15 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes15)\", p0));\n\t}\n\n\tfunction logBytes16(bytes16 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes16)\", p0));\n\t}\n\n\tfunction logBytes17(bytes17 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes17)\", p0));\n\t}\n\n\tfunction logBytes18(bytes18 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes18)\", p0));\n\t}\n\n\tfunction logBytes19(bytes19 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes19)\", p0));\n\t}\n\n\tfunction logBytes20(bytes20 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes20)\", p0));\n\t}\n\n\tfunction logBytes21(bytes21 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes21)\", p0));\n\t}\n\n\tfunction logBytes22(bytes22 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes22)\", p0));\n\t}\n\n\tfunction logBytes23(bytes23 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes23)\", p0));\n\t}\n\n\tfunction logBytes24(bytes24 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes24)\", p0));\n\t}\n\n\tfunction logBytes25(bytes25 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes25)\", p0));\n\t}\n\n\tfunction logBytes26(bytes26 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes26)\", p0));\n\t}\n\n\tfunction logBytes27(bytes27 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes27)\", p0));\n\t}\n\n\tfunction logBytes28(bytes28 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes28)\", p0));\n\t}\n\n\tfunction logBytes29(bytes29 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes29)\", p0));\n\t}\n\n\tfunction logBytes30(bytes30 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes30)\", p0));\n\t}\n\n\tfunction logBytes31(bytes31 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes31)\", p0));\n\t}\n\n\tfunction logBytes32(bytes32 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bytes32)\", p0));\n\t}\n\n\tfunction log(uint256 p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n\t}\n\n\tfunction log(string memory p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n\t}\n\n\tfunction log(bool p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n\t}\n\n\tfunction log(address p0) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256)\", p0, p1));\n\t}\n\n\tfunction log(uint256 p0, string memory p1) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string)\", p0, p1));\n\t}\n\n\tfunction log(uint256 p0, bool p1) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool)\", p0, p1));\n\t}\n\n\tfunction log(uint256 p0, address p1) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address)\", p0, p1));\n\t}\n\n\tfunction log(string memory p0, uint256 p1) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256)\", p0, p1));\n\t}\n\n\tfunction log(string memory p0, string memory p1) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string)\", p0, p1));\n\t}\n\n\tfunction log(string memory p0, bool p1) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool)\", p0, p1));\n\t}\n\n\tfunction log(string memory p0, address p1) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address)\", p0, p1));\n\t}\n\n\tfunction log(bool p0, uint256 p1) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256)\", p0, p1));\n\t}\n\n\tfunction log(bool p0, string memory p1) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string)\", p0, p1));\n\t}\n\n\tfunction log(bool p0, bool p1) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool)\", p0, p1));\n\t}\n\n\tfunction log(bool p0, address p1) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address)\", p0, p1));\n\t}\n\n\tfunction log(address p0, uint256 p1) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256)\", p0, p1));\n\t}\n\n\tfunction log(address p0, string memory p1) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string)\", p0, p1));\n\t}\n\n\tfunction log(address p0, bool p1) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool)\", p0, p1));\n\t}\n\n\tfunction log(address p0, address p1) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address)\", p0, p1));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1, uint256 p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256)\", p0, p1, p2));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1, string memory p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string)\", p0, p1, p2));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1, bool p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool)\", p0, p1, p2));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1, address p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address)\", p0, p1, p2));\n\t}\n\n\tfunction log(uint256 p0, string memory p1, uint256 p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256)\", p0, p1, p2));\n\t}\n\n\tfunction log(uint256 p0, string memory p1, string memory p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string)\", p0, p1, p2));\n\t}\n\n\tfunction log(uint256 p0, string memory p1, bool p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool)\", p0, p1, p2));\n\t}\n\n\tfunction log(uint256 p0, string memory p1, address p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address)\", p0, p1, p2));\n\t}\n\n\tfunction log(uint256 p0, bool p1, uint256 p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256)\", p0, p1, p2));\n\t}\n\n\tfunction log(uint256 p0, bool p1, string memory p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string)\", p0, p1, p2));\n\t}\n\n\tfunction log(uint256 p0, bool p1, bool p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool)\", p0, p1, p2));\n\t}\n\n\tfunction log(uint256 p0, bool p1, address p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address)\", p0, p1, p2));\n\t}\n\n\tfunction log(uint256 p0, address p1, uint256 p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256)\", p0, p1, p2));\n\t}\n\n\tfunction log(uint256 p0, address p1, string memory p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string)\", p0, p1, p2));\n\t}\n\n\tfunction log(uint256 p0, address p1, bool p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool)\", p0, p1, p2));\n\t}\n\n\tfunction log(uint256 p0, address p1, address p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address)\", p0, p1, p2));\n\t}\n\n\tfunction log(string memory p0, uint256 p1, uint256 p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256)\", p0, p1, p2));\n\t}\n\n\tfunction log(string memory p0, uint256 p1, string memory p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string)\", p0, p1, p2));\n\t}\n\n\tfunction log(string memory p0, uint256 p1, bool p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool)\", p0, p1, p2));\n\t}\n\n\tfunction log(string memory p0, uint256 p1, address p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address)\", p0, p1, p2));\n\t}\n\n\tfunction log(string memory p0, string memory p1, uint256 p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256)\", p0, p1, p2));\n\t}\n\n\tfunction log(string memory p0, string memory p1, string memory p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string,string)\", p0, p1, p2));\n\t}\n\n\tfunction log(string memory p0, string memory p1, bool p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool)\", p0, p1, p2));\n\t}\n\n\tfunction log(string memory p0, string memory p1, address p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string,address)\", p0, p1, p2));\n\t}\n\n\tfunction log(string memory p0, bool p1, uint256 p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256)\", p0, p1, p2));\n\t}\n\n\tfunction log(string memory p0, bool p1, string memory p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string)\", p0, p1, p2));\n\t}\n\n\tfunction log(string memory p0, bool p1, bool p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool)\", p0, p1, p2));\n\t}\n\n\tfunction log(string memory p0, bool p1, address p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address)\", p0, p1, p2));\n\t}\n\n\tfunction log(string memory p0, address p1, uint256 p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256)\", p0, p1, p2));\n\t}\n\n\tfunction log(string memory p0, address p1, string memory p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address,string)\", p0, p1, p2));\n\t}\n\n\tfunction log(string memory p0, address p1, bool p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool)\", p0, p1, p2));\n\t}\n\n\tfunction log(string memory p0, address p1, address p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address,address)\", p0, p1, p2));\n\t}\n\n\tfunction log(bool p0, uint256 p1, uint256 p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256)\", p0, p1, p2));\n\t}\n\n\tfunction log(bool p0, uint256 p1, string memory p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string)\", p0, p1, p2));\n\t}\n\n\tfunction log(bool p0, uint256 p1, bool p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool)\", p0, p1, p2));\n\t}\n\n\tfunction log(bool p0, uint256 p1, address p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address)\", p0, p1, p2));\n\t}\n\n\tfunction log(bool p0, string memory p1, uint256 p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256)\", p0, p1, p2));\n\t}\n\n\tfunction log(bool p0, string memory p1, string memory p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string)\", p0, p1, p2));\n\t}\n\n\tfunction log(bool p0, string memory p1, bool p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool)\", p0, p1, p2));\n\t}\n\n\tfunction log(bool p0, string memory p1, address p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address)\", p0, p1, p2));\n\t}\n\n\tfunction log(bool p0, bool p1, uint256 p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256)\", p0, p1, p2));\n\t}\n\n\tfunction log(bool p0, bool p1, string memory p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string)\", p0, p1, p2));\n\t}\n\n\tfunction log(bool p0, bool p1, bool p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool)\", p0, p1, p2));\n\t}\n\n\tfunction log(bool p0, bool p1, address p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address)\", p0, p1, p2));\n\t}\n\n\tfunction log(bool p0, address p1, uint256 p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256)\", p0, p1, p2));\n\t}\n\n\tfunction log(bool p0, address p1, string memory p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string)\", p0, p1, p2));\n\t}\n\n\tfunction log(bool p0, address p1, bool p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool)\", p0, p1, p2));\n\t}\n\n\tfunction log(bool p0, address p1, address p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address)\", p0, p1, p2));\n\t}\n\n\tfunction log(address p0, uint256 p1, uint256 p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256)\", p0, p1, p2));\n\t}\n\n\tfunction log(address p0, uint256 p1, string memory p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string)\", p0, p1, p2));\n\t}\n\n\tfunction log(address p0, uint256 p1, bool p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool)\", p0, p1, p2));\n\t}\n\n\tfunction log(address p0, uint256 p1, address p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address)\", p0, p1, p2));\n\t}\n\n\tfunction log(address p0, string memory p1, uint256 p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256)\", p0, p1, p2));\n\t}\n\n\tfunction log(address p0, string memory p1, string memory p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string,string)\", p0, p1, p2));\n\t}\n\n\tfunction log(address p0, string memory p1, bool p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool)\", p0, p1, p2));\n\t}\n\n\tfunction log(address p0, string memory p1, address p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string,address)\", p0, p1, p2));\n\t}\n\n\tfunction log(address p0, bool p1, uint256 p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256)\", p0, p1, p2));\n\t}\n\n\tfunction log(address p0, bool p1, string memory p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string)\", p0, p1, p2));\n\t}\n\n\tfunction log(address p0, bool p1, bool p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool)\", p0, p1, p2));\n\t}\n\n\tfunction log(address p0, bool p1, address p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address)\", p0, p1, p2));\n\t}\n\n\tfunction log(address p0, address p1, uint256 p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256)\", p0, p1, p2));\n\t}\n\n\tfunction log(address p0, address p1, string memory p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address,string)\", p0, p1, p2));\n\t}\n\n\tfunction log(address p0, address p1, bool p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool)\", p0, p1, p2));\n\t}\n\n\tfunction log(address p0, address p1, address p2) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address,address)\", p0, p1, p2));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1, string memory p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1, bool p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1, bool p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1, address p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1, address p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, uint256 p1, address p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, string memory p1, uint256 p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, string memory p1, string memory p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, string memory p1, string memory p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, string memory p1, bool p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, string memory p1, bool p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, string memory p1, bool p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, string memory p1, address p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, string memory p1, address p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, string memory p1, address p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, string memory p1, address p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, bool p1, uint256 p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, bool p1, uint256 p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, bool p1, string memory p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, bool p1, string memory p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, bool p1, string memory p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, bool p1, bool p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, bool p1, bool p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, bool p1, bool p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, bool p1, bool p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, bool p1, address p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, bool p1, address p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, bool p1, address p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, bool p1, address p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, address p1, uint256 p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, address p1, uint256 p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, address p1, uint256 p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, address p1, string memory p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, address p1, string memory p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, address p1, string memory p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, address p1, string memory p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, address p1, bool p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, address p1, bool p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, address p1, bool p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, address p1, bool p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, address p1, address p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, address p1, address p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, address p1, address p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(uint256 p0, address p1, address p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, uint256 p1, uint256 p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, uint256 p1, string memory p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, uint256 p1, string memory p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, uint256 p1, bool p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, uint256 p1, bool p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, uint256 p1, bool p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, uint256 p1, address p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, uint256 p1, address p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, uint256 p1, address p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, uint256 p1, address p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, string memory p1, uint256 p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, string memory p1, uint256 p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, string memory p1, string memory p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, string memory p1, string memory p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, string memory p1, bool p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, string memory p1, bool p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, string memory p1, bool p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, string memory p1, bool p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, string memory p1, address p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, string memory p1, address p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, string memory p1, address p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, string memory p1, address p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, bool p1, uint256 p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, bool p1, uint256 p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, bool p1, uint256 p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, bool p1, string memory p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, bool p1, string memory p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, bool p1, string memory p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, bool p1, string memory p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, bool p1, bool p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, bool p1, bool p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, bool p1, bool p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, bool p1, bool p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, bool p1, address p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, bool p1, address p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, bool p1, address p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, bool p1, address p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, address p1, uint256 p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, address p1, uint256 p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, address p1, uint256 p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, address p1, uint256 p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, address p1, string memory p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, address p1, string memory p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, address p1, string memory p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, address p1, string memory p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, address p1, bool p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, address p1, bool p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, address p1, bool p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, address p1, bool p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, address p1, address p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, address p1, address p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, address p1, address p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(string memory p0, address p1, address p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, uint256 p1, uint256 p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, uint256 p1, uint256 p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, uint256 p1, string memory p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, uint256 p1, string memory p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, uint256 p1, string memory p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, uint256 p1, bool p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, uint256 p1, bool p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, uint256 p1, bool p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, uint256 p1, bool p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, uint256 p1, address p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, uint256 p1, address p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, uint256 p1, address p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, uint256 p1, address p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, string memory p1, uint256 p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, string memory p1, uint256 p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, string memory p1, uint256 p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, string memory p1, string memory p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, string memory p1, string memory p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, string memory p1, string memory p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, string memory p1, string memory p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, string memory p1, bool p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, string memory p1, bool p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, string memory p1, bool p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, string memory p1, bool p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, string memory p1, address p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, string memory p1, address p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, string memory p1, address p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, string memory p1, address p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, bool p1, uint256 p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, bool p1, uint256 p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, bool p1, uint256 p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, bool p1, uint256 p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, bool p1, string memory p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, bool p1, string memory p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, bool p1, string memory p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, bool p1, string memory p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, bool p1, bool p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, bool p1, bool p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, bool p1, bool p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, bool p1, bool p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, bool p1, address p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, bool p1, address p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, bool p1, address p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, bool p1, address p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, address p1, uint256 p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, address p1, uint256 p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, address p1, uint256 p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, address p1, uint256 p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, address p1, string memory p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, address p1, string memory p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, address p1, string memory p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, address p1, string memory p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, address p1, bool p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, address p1, bool p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, address p1, bool p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, address p1, bool p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, address p1, address p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, address p1, address p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, address p1, address p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(bool p0, address p1, address p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, uint256 p1, uint256 p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, uint256 p1, uint256 p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, uint256 p1, uint256 p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, uint256 p1, string memory p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, uint256 p1, string memory p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, uint256 p1, string memory p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, uint256 p1, string memory p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, uint256 p1, bool p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, uint256 p1, bool p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, uint256 p1, bool p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, uint256 p1, bool p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, uint256 p1, address p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, uint256 p1, address p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, uint256 p1, address p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, uint256 p1, address p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, string memory p1, uint256 p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, string memory p1, uint256 p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, string memory p1, uint256 p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, string memory p1, uint256 p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, string memory p1, string memory p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, string memory p1, string memory p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, string memory p1, string memory p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, string memory p1, string memory p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, string memory p1, bool p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, string memory p1, bool p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, string memory p1, bool p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, string memory p1, bool p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, string memory p1, address p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, string memory p1, address p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, string memory p1, address p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, string memory p1, address p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, bool p1, uint256 p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, bool p1, uint256 p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, bool p1, uint256 p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, bool p1, uint256 p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, bool p1, string memory p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, bool p1, string memory p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, bool p1, string memory p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, bool p1, string memory p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, bool p1, bool p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, bool p1, bool p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, bool p1, bool p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, bool p1, bool p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, bool p1, address p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, bool p1, address p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, bool p1, address p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, bool p1, address p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, address p1, uint256 p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, address p1, uint256 p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, address p1, uint256 p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, address p1, uint256 p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, address p1, string memory p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, address p1, string memory p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, address p1, string memory p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, address p1, string memory p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, address p1, bool p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, address p1, bool p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, address p1, bool p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, address p1, bool p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,address)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, address p1, address p2, uint256 p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,uint256)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, address p1, address p2, string memory p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,string)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, address p1, address p2, bool p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,bool)\", p0, p1, p2, p3));\n\t}\n\n\tfunction log(address p0, address p1, address p2, address p3) internal view {\n\t\t_sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,address)\", p0, p1, p2, p3));\n\t}\n\n}\n" + }, + "lib/openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport { IERC4626 } from \"../../../../interfaces/IERC4626.sol\";\nimport { ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC20Metadata } from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\n\n// From Open Zeppelin draft PR commit:\n// fac43034dca85ff539db3fc8aa2a7084b843d454\n// https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3171\n\nabstract contract ERC4626 is ERC20, IERC4626 {\n IERC20Metadata private immutable _asset;\n\n constructor(IERC20Metadata __asset) {\n _asset = __asset;\n }\n\n /** @dev See {IERC4262-asset} */\n function asset() public view virtual override returns (address) {\n return address(_asset);\n }\n\n /** @dev See {IERC4262-totalAssets} */\n function totalAssets() public view virtual override returns (uint256) {\n return _asset.balanceOf(address(this));\n }\n\n /**\n * @dev See {IERC4262-convertToShares}\n *\n * Will revert if asserts > 0, totalSupply > 0 and totalAssets = 0. That corresponds to a case where any asset\n * would represent an infinite amout of shares.\n */\n function convertToShares(uint256 assets) public view virtual override returns (uint256 shares) {\n uint256 supply = totalSupply();\n\n return\n (assets == 0 || supply == 0)\n ? (assets * 10**decimals()) / 10**_asset.decimals()\n : (assets * supply) / totalAssets();\n }\n\n /** @dev See {IERC4262-convertToAssets} */\n function convertToAssets(uint256 shares) public view virtual override returns (uint256 assets) {\n uint256 supply = totalSupply();\n\n return (supply == 0) ? (shares * 10**_asset.decimals()) / 10**decimals() : (shares * totalAssets()) / supply;\n }\n\n /** @dev See {IERC4262-maxDeposit} */\n function maxDeposit(address) public view virtual override returns (uint256) {\n return type(uint256).max;\n }\n\n /** @dev See {IERC4262-maxMint} */\n function maxMint(address) public view virtual override returns (uint256) {\n return type(uint256).max;\n }\n\n /** @dev See {IERC4262-maxWithdraw} */\n function maxWithdraw(address owner) public view virtual override returns (uint256) {\n return convertToAssets(balanceOf(owner));\n }\n\n /** @dev See {IERC4262-maxRedeem} */\n function maxRedeem(address owner) public view virtual override returns (uint256) {\n return balanceOf(owner);\n }\n\n /** @dev See {IERC4262-previewDeposit} */\n function previewDeposit(uint256 assets) public view virtual override returns (uint256) {\n return convertToShares(assets);\n }\n\n /** @dev See {IERC4262-previewMint} */\n function previewMint(uint256 shares) public view virtual override returns (uint256) {\n uint256 assets = convertToAssets(shares);\n return assets + (convertToShares(assets) < shares ? 1 : 0);\n }\n\n /** @dev See {IERC4262-previewWithdraw} */\n function previewWithdraw(uint256 assets) public view virtual override returns (uint256) {\n uint256 shares = convertToShares(assets);\n return shares + (convertToAssets(shares) < assets ? 1 : 0);\n }\n\n /** @dev See {IERC4262-previewRedeem} */\n function previewRedeem(uint256 shares) public view virtual override returns (uint256) {\n return convertToAssets(shares);\n }\n\n /** @dev See {IERC4262-deposit} */\n function deposit(uint256 assets, address receiver) public virtual override returns (uint256) {\n require(assets <= maxDeposit(receiver), \"ERC4626: deposit more then max\");\n\n address caller = _msgSender();\n uint256 shares = previewDeposit(assets);\n\n // if _asset is ERC777, transferFrom can call reenter BEFORE the transfer happens through\n // the tokensToSend hook, so we need to transfer before we mint to keep the invariants.\n SafeERC20.safeTransferFrom(_asset, caller, address(this), assets);\n _mint(receiver, shares);\n\n emit Deposit(caller, receiver, assets, shares);\n\n return shares;\n }\n\n /** @dev See {IERC4262-mint} */\n function mint(uint256 shares, address receiver) public virtual override returns (uint256) {\n require(shares <= maxMint(receiver), \"ERC4626: mint more then max\");\n\n address caller = _msgSender();\n uint256 assets = previewMint(shares);\n\n // if _asset is ERC777, transferFrom can call reenter BEFORE the transfer happens through\n // the tokensToSend hook, so we need to transfer before we mint to keep the invariants.\n SafeERC20.safeTransferFrom(_asset, caller, address(this), assets);\n _mint(receiver, shares);\n\n emit Deposit(caller, receiver, assets, shares);\n\n return assets;\n }\n\n /** @dev See {IERC4262-withdraw} */\n function withdraw(\n uint256 assets,\n address receiver,\n address owner\n ) public virtual override returns (uint256) {\n require(assets <= maxWithdraw(owner), \"ERC4626: withdraw more then max\");\n\n address caller = _msgSender();\n uint256 shares = previewWithdraw(assets);\n\n if (caller != owner) {\n _spendAllowance(owner, caller, shares);\n }\n\n // if _asset is ERC777, transfer can call reenter AFTER the transfer happens through\n // the tokensReceived hook, so we need to transfer after we burn to keep the invariants.\n _burn(owner, shares);\n SafeERC20.safeTransfer(_asset, receiver, assets);\n\n emit Withdraw(caller, receiver, owner, assets, shares);\n\n return shares;\n }\n\n /** @dev See {IERC4262-redeem} */\n function redeem(\n uint256 shares,\n address receiver,\n address owner\n ) public virtual override returns (uint256) {\n require(shares <= maxRedeem(owner), \"ERC4626: redeem more then max\");\n\n address caller = _msgSender();\n uint256 assets = previewRedeem(shares);\n\n if (caller != owner) {\n _spendAllowance(owner, caller, shares);\n }\n\n // if _asset is ERC777, transfer can call reenter AFTER the transfer happens through\n // the tokensReceived hook, so we need to transfer after we burn to keep the invariants.\n _burn(owner, shares);\n SafeERC20.safeTransfer(_asset, receiver, assets);\n\n emit Withdraw(caller, receiver, owner, assets, shares);\n\n return assets;\n }\n\n // Included here, since this method was not yet present in\n // the version of Open Zeppelin ERC20 code we use.\n function _spendAllowance(\n address owner,\n address spender,\n uint256 amount\n ) internal virtual {\n uint256 currentAllowance = allowance(owner, spender);\n if (currentAllowance != type(uint256).max) {\n require(currentAllowance >= amount, \"ERC20: insufficient allowance\");\n unchecked {\n _approve(owner, spender, currentAllowance - amount);\n }\n }\n }\n}" + }, + "lib/openzeppelin/interfaces/IERC4626.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport { IERC20Metadata } from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\ninterface IERC4626 is IERC20, IERC20Metadata {\n event Deposit(address indexed caller, address indexed owner, uint256 assets, uint256 shares);\n\n event Withdraw(\n address indexed caller,\n address indexed receiver,\n address indexed owner,\n uint256 assets,\n uint256 shares\n );\n\n /**\n * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n *\n * - MUST be an ERC-20 token contract.\n * - MUST NOT revert.\n */\n function asset() external view returns (address assetTokenAddress);\n\n /**\n * @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n *\n * - SHOULD include any compounding that occurs from yield.\n * - MUST be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT revert.\n */\n function totalAssets() external view returns (uint256 totalManagedAssets);\n\n /**\n * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToShares(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToAssets(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n * through a deposit call.\n *\n * - MUST return a limited value if receiver is subject to some deposit limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n * - MUST NOT revert.\n */\n function maxDeposit(address receiver) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n * call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n * in the same transaction.\n * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n * deposit would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewDeposit(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * deposit execution, and are accounted for during deposit.\n * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function deposit(uint256 assets, address receiver) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n * - MUST return a limited value if receiver is subject to some mint limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n * - MUST NOT revert.\n */\n function maxMint(address receiver) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n * in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n * same transaction.\n * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n * would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by minting.\n */\n function previewMint(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n * execution, and are accounted for during mint.\n * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function mint(uint256 shares, address receiver) external returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n * Vault, through a withdraw call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxWithdraw(address owner) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n * call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n * called\n * in the same transaction.\n * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n * the withdrawal would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewWithdraw(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * withdraw execution, and are accounted for during withdraw.\n * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function withdraw(\n uint256 assets,\n address receiver,\n address owner\n ) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n * through a redeem call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxRedeem(address owner) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n * in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n * same transaction.\n * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n * redemption would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by redeeming.\n */\n function previewRedeem(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * redeem execution, and are accounted for during redeem.\n * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function redeem(\n uint256 shares,\n address receiver,\n address owner\n ) external returns (uint256 assets);\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/contracts/test/behaviour/ssvStrategy.js b/contracts/test/behaviour/ssvStrategy.js index fd952bba56..bcc7167d9a 100644 --- a/contracts/test/behaviour/ssvStrategy.js +++ b/contracts/test/behaviour/ssvStrategy.js @@ -92,7 +92,7 @@ const shouldBehaveLikeAnSsvStrategy = (context) => { ); expect(await nativeStakingSSVStrategy.MAX_VALIDATORS()).to.equal(500); }); - it("Anyone should be able to set the MEV fee recipent", async () => { + it("Anyone should be able to set the MEV fee recipient", async () => { const { nativeStakingSSVStrategy, nativeStakingFeeAccumulator, matt } = await context(); From 61236b7efc1673c2640f2edb2f0e5e2cdb5f2eda Mon Sep 17 00:00:00 2001 From: Nicholas Addison Date: Fri, 9 Aug 2024 12:19:20 +1000 Subject: [PATCH 5/7] Updated value flows --- .../oethValueFlows-native-staking.png | Bin 179573 -> 129953 bytes contracts/docs/plantuml/oethValueFlows.png | Bin 490197 -> 501019 bytes contracts/docs/plantuml/oethValueFlows.puml | 8 ++++++-- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/contracts/docs/plantuml/oethValueFlows-native-staking.png b/contracts/docs/plantuml/oethValueFlows-native-staking.png index 9042fa5f33bea1a619db13f9e5183602d5d71ab2..fd97a86ac9610203f1c20f989ffc8dbd6b019f97 100644 GIT binary patch literal 129953 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ɗ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Χ-oj=oUMlK;|xX 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 x2_*FS&j&?dxs?JQ^;F{raKT2gxa_hAr z>J4K2xDN12;Vy9ew*R>%JL@R-j)im91y*-P9L~GBc9ja_^MULSoy#sbcHS11HW@W5 z;A(f{{dA)GE@OK4cKOFZT5NoM#rhf}U%YlR-T?~Ul-cy|O|C6&E^c0N%LhKlCvLDe z^5q-7_~)!NbE|w&o{L=`f^WBvw#4~ zGfcDdVy?}|z4ky#c){=xU)-wFThd3A)YrlxlZIx$0?F549Pt^*gW^tbZ@Dds<(LEF zsgJDlwwk@VlpuL?M{|Nn*BqW+Ph;j~yyJgl+X(o;(BDu0HPpg3>IhQ9f&U^=O(8lOyo=l&b2L$^pGUiDmxq9x9o>pcV z;rOA z)d=!d)o%_^5jCi}JVlvpkZ$-~EOj2+?f#;Xf??a%q=h|nE+W_8+}Dn(s!*7Hu@2Ok z=kBxVAEY=uu<1F5N-FJN|@A9FLuQ@tyD2mBif?$JiQo9o5$Pn zDn(B-`tZfI6}gONde)~^nwb}jig$m39r`AT)%LIAB8M9k+_rS_In?}RDsf@+nBvgV zmq?n6Fx=vdIL3Kmc|hDj&AN{}Jy%DMPsRHvDlHcmFv`|13RNBwKhZl--xczgiS|0| zjDVFRTHX?$b)OnSw(@L5?e_km@E|Y(RFdQtmd@D_u6%XbML^4G`lFr2z`HabYDc|j zZ%u5!C2cFLU`S8WC0M3q)c*_vgy~QReNhx|_ zA{{}F+EhT9r_;Y+EGozF?VT(}*MzHKvjSue>qpGm2Hdlr4B^LGO{%#J`! zCq0d_vm@Z#+!QmC zyp$baY*B6A)l&AOB2r4eV%-(clut=%kdw45cN{%;FYCC_2p#S8p9&7nTY7ue3KUmt zzVk&$L`t5>4{7qvBm#vKq6P2Phi>9x@h(l?lknN|P_)LLQ|Yf5M@L@f^4QBJzj$;c zZz{safmND&qfWKne{b?C?_+1Rg0ifwuwz#+OKjxugOC25RFleQ70EpJcN|)*|HwD` z)O&x)J;(_VwZ|2yX&3PkxMyi$;Qp|$4lxINu1qqZk-oL_QvsceM%*oj!I}0$qs{jp z(3v+~*NrlG$ zHT`@Dow`%XB_%J;PHhRrKbTNW_lZnQlnN29WxkP{EoFO5{qXhQQAiJNvpMuWaK9t- zmHW|&?X!qd#!{hZnR;=atqEQHD{C90U7~BuyrbKz1MR28{KiK}?{8o7^_Rs&b@E${ zH|7uZ13nTfHhE?D*f04P6+;WC7)oBd&-%CqaqFjds=+koYDJI^rQHkQQq*~+{B8cE zUF8#bk~N;|?{V%I!V$`azkFd>TbeVszPemY=o$w4l8z)SnoTEk4Oy;!e?MdYhXE-c zPD2@zQoX`l;**BV$*hOD(P3ol3%S7 zkk^nu8&^%bAIT2{mQC6=p<97sBM!B886LJ*V7V&UC zOEVGiyv}|*23l-Z+&mqxS^?yO{elMtwdy7YuqUF0sf57BFoP-u>$87qn*u5G< zjvU1R!o?g%?INf&mm4RawL@(v5dlnoX-#NzsJWuxng9ahE_BJD;{FkekPVEfkY4wP zd$}!omlPXxVnGk-{_8~B>(=Nz8BkoyA&3Wy81@pK02zDYTVy!+>3GC!24{CPJfDN^ zhxdrVLdn=sDz#L~s0NEQLyTAmMc$jkvtbs8=z`wl17}(Dr29%E4d4L-yJO7;HD(3Y zSNZUuf&^{GR@STQ?oVmD1U?06LIT5wVUKqNS0eUN*ln9*7}!etGSrH((rD=a2PSM>W`2TXy41S;Y{%DCMZF>-8w?-?8@fauG#0BU|!?G zt~W!FFk!{(!C!0w2&X>X$l&7gm2AvgnOu{Q>4*|~x9Dq7AH-E6KpsA*_qmA!L!iU3 zf?E6XMj&<}IDi(hH-aWn!=vKlSDy~Pi?KSVI*9*x?VI+EP$tUcnd{Ajb=N*QJkL+OJD0I&1&^9Lo z1+)i{PHBAZYER#6Rl4Ey7bzfrIX6VS94n$;cu>MIvFnJ4B5r(jUD1?~F_)#Xfv$Q& zf<$&jOD|%+E9$iT{DOcOpt+fqa^UVXEoqWb57Oo6f_5p};gz~ELZAjagh#F3Ig{Vv zWyUHN)?IhrmwIwev6N%;Yx9g^3wBo@|F*Ptn^?yw@qJ z3dIhO=y%iG$0wX_iUDIE+crTXR4KOfRL+FO71%48CNVF})c4b51vJSHS27m(_n9OQ z9LCNHRuvL>uy2F-{fga&^Rj0>$fzp?u{8lx0q}=N?`LK#&X~V*uTabgX!;V(PYcXB zOgWAGR|VX5nqJ{^c$>KXCUPb3T=JlT++4%b>>G z`-IgyqSs!cIi~UYy1P3Y>DMTvw~km>auSW#*M;Q1RFnXJ3FZlI=^6Mcx|l=g8EAK4S08-u!Rr~bYhLAL4nS=&%m?WsBHPpySv~^ zkb44+46&0{8F+Q@0;bRqzK#Ae@gi-%d(O-$22~s$^eeJ_V z(?J2AMj0ZZEqu{nva2P4r=oQQxr*RGcM6C39t$BV4t)Zh} zo#21Dz3RYLzqZ0Fgy@s&h_Q+TW|w3~`w5dnH}*8$65dGnwRhvRjfTj}!Y73^igu!H zu{Ez5cQ13w`Gs{LcSzOx>z@itdEf83= zu(1)hWJ-A;fdK*!IDiUXygZu3HLfb*Iiz)GGmF697|%&aB@OnO8La8KWL4NRIc)n?n z2rX{yd%C!zp@i&) z-45#;$&)|{9zEC@_7>9vbIZW=Y{VEBPmFciOnwX$T!EG3*W?TxOA#2 z+E<$IM_z&lwcyaT%0QbolX0y>PRZ=BjThYyD9&1;ceZvX=ds~-*!0XFV(1Bu;S{EN z>JJCwoZ@AAmMgD3miMtB)1$@1T~(no3@52graNCgWGVC58>yPER%FJrC(2+8{xua; z^cw>!_wDCv#V(s6UZjfykHah88H2BYh+W{yaFwg~rv!KL6h=eFHT z(I|AcvDo2oFJ!UZMe)OuoPb5sK)m{9cPDqgFLPYRf;N+r((1ZRu>nfPTTY1eN{m$C zm}4V&H?Mzb`*6wh=C?-267sgF=bfJ4TG%0?4}Ovzep9-m5#|EPya95ZEnN)K`bg5ty%#+L4hEqCVi9Jc{(ygg zgGm1g!MVgN*T?BMcj1}bYc(a(0`i#E!KbG0S7bx{d-g-Z z4Y5XmZ*uN?+4?$|pGV&^+59X0u37gM1?LL=Zov1o_upQiQgMEe{KXg_)xE0)yPEH9 z@!Rt|5z@;`{{}byh;EH*OK)~2+S2#v$L*C%I8l0!$wKUeEW|?@CgOwg53O2Bv}$iD zy{FeYg(Cm*dj+Da{SQ&8@KMM2IX|&4R&Pjpa!f5U#a;3J9z82pVr28v3tUbK=gbeB+oY}?W#Cele$x3zcFxD& zBcc10X3D?0K<8pw64~*tvt#|=etFEqZ>GZEO7vev)#rkTUyybL^^{xd|ZJB|+@b2*{_)KY)~S*Kr|89#pwZ#ox!YP`uhlYthK zp%bwIpL-;hx#%_<=iQz@+^AaLqT-bH;_MCQv#d4=9T8f5r;F4P_AD4P=aJ^!G|w@l z6|L(-!M{YE1W3ikyu4?*v;XcQ{gsYZM87Mhke5`$4tixGE zVfN4u`vYlpT0Z5&t_LwCiyf)D>rOwfFXuAolBM?L>W|zvseUy(UA5%t$0O*rVN$}_ z7oJ6$aYGFUVqFd)eLSBkp~trD()zkE*N^r2Apl!ixTD6L9#AXYVJ$Fy$M)1-aV?Jk!k6U3=WhELv>aWMyj`D=BB8(fJI$ z1Z3y^T+#d@)MFOf4-aIDlMbWGtoi2KppJ*;3&&mAz1^qKNQ2u!?5`S_<7hG&+5U>Z z^+y21*SjSnelyD1F=Uw&(4*FO6q~w-?v%l?_8cZ!>0DH=tKjHW`JzZ@jMQ|SGxSn? zbxob1evZHBXqIhScj7=EtldDU*!j=s@~zzM_n>7}F&d-4?f}N%e{8V%%373`Q3gNO z^D4oXqV&?bV1)n~=?^B_aYL;=ZSl5hMvKwLNtAaR2`+JV?>mH6uG3G{f(tu-1||cY z5B>GN@>~0cGuK-QO# z=Te8-othpeh(^g(LgaqMQ@P3x{?>3T$3@4ahlk(HKc4KzH#80A7H-WA5|TdXHvD`} z{LXfoZZOm5*WqwC)Gszz5y8iNwf17nNWx7k_7SFKLXtPlK zF+E|2=A5XQNnOTuVgKFtG^}gnCEOBjZFrW{Uo{%_9x|O0luC)is+Zmj9L(yDd?p(G ztwm-!n|=o2ytwZFsy8CCbMp1`WKa<@Bb;BEz@g4Tdb$@x_Gtg2rBo!*`Q{U?zL0;d zAn!Q2ER|kvoEWq?DHjsz-@fHP1gZ|0;`Cl`q*BfQy)igO9iVY3BuAS@@~dI(*qt+O zm11#z5)wYDJl0liChGrRbCTg3V=bHFg%bzzH_an{vz_xHW)&nK@#f)J8;AGO;>}Co z-^4b~4fN{HR{FVBH#6scOrc>xRmb8L^fNtqmd})1eU1s1 z6=(N{t{6{5Km6@_`)To)E+mxGiN4%84Z8)J<`ye<3+~MV;Qv#5kSN*X-A=H*FmHq@ z{agRE+5W8oG`>2XC#wo0^iw1~nhKRgl0p&%RDZw;f6~)>vLp%B=Cy53n+_)}uHG(4 z9u@sH;nJu_<8C%IulI&l1kwb`{ZUK-YWQ&Uy4N6NM!9kb*68hagQQ+ecH7tR%$AhI@YQ-O0{ocB97 zWT_6JbB>jFvA@ zEgR8Kcg!U0#&3zn#ENxe#h$KXTAA3MM$fte29`C)1=OJsp;G(|s>7@)qCVf|84`+M zP>bE2jC1+D%RKQ)`H`pNbJhr;Z!PE~fNO^wj)QB^!&|ygc`E5hc3xrZyfU$2tl=wj znN4BSs`)IMCRgp=TA)XAVDZ)q7`qe6Zs+O7_Zk7(Jph=**Y$v)T+ns3I;b|U73k+_ z+@djqi4B6H8=tGdPRD-RH|DRC-JOX|Q@)by$Hc@$gNM73E@GD7c{i^^e`WDaAcXLS zHg_vex+K2ZadddKU43%+sype$O8Kl>d*@|8Z+?=qMu25VG%HPuPJIDoOmsDCK`8pD z>?D|c_rH-hApAbDBrvS*xEM$X6agXWWg8tuX$&xPnSPV+flJ_^zr_(|DFgIZ=)39w z+CwpdiyJ|E0#CQY|i?c%Rp#S(C9gG^W;|FI9%qz@8K>px0S#n6r0}W zj|#lj2hmPQTkQIV?bE9EJPefq>?=LsC7osf35ONkQS>|-5OswZ2(ftu@o(v1yjyXx z!Mo~AFIn`Z0H5`jK#&tN86KKw7Y)iy=K+xXD6$HBn};m{X1q)a949C!{wYzIXG{){ zPun?{jSKQHz7B9PPU}WnkL^Sy86Ztp)=;dHPlPdHRFq3ghJ?V9Wig)JZ56Uotq=D^ zb04CiNdO0coR%0|Do2B?X48WZPb8q5PqYEN!f)Su`u%P|w3t3Ut^FA)5cFasxJ7P^ z8*-B!raM~M&^P!z;NMU zZT274j)C^V4^LHQYe!wQK0rXx}8f`^U zD!MZm>iH&Dc?hO;FZPmRx{K-RNU$iwBNl;WhPiOgGU5A= z0qWexC?3FXon*TKbX)ggQoZ3M#veKD=cHONxJze1>^!{;|05X*c~R`4^zh(5yx@2! z)GA&4z7xm=8NqR!H9>Bn3WW7%Q_9c=M(kL8OpQp2a2~liFNv1dJ}=Dz;^QX6)GGFr z^W}RS;f-iua%ws&l`!MoovhKeB7#H0A92l!B=-luIIxscV@)(3v7@b(9UfHM^-sQJ zMODxsKWC0~cfR4Z28C_&S%QU^L^PpG$k2sxa6O=jAkC;!Hsr3yz%*d_ie2>X(wjS@ zSpU>^ceL2Vp=-TCxlFFab`=pqIWa<~`=$2rBM6F* zbl$_wr{Pg+_?R60#pFGoajV4RzyRqa6B`+QMd_=!?JsVEe@)w&Ux-uD1fxFptn`TO2_8_ zs5t}xC~59tX4Ue|i8M1GCG1gOGTdB(^V!ha7#5(n-^ktlP@aS&OWS`IEMH!U6oUlj zIa&sEXmw$W3b>y_5MIh)pwpZ|n2jGWxf)=aHj~<)Da%x`vkm{MsDX@tZ#9zvpiCY) zx3MI)4UJ?Vn`}v{d?q;3FxNx(a|k_GN4&?iU&IC4wYRylaHWUd(3`(@HklCzi;Wm9 z<5e+QqM2C+xU+$aGnj9wiJGFu2Ygp{mwcc+rhT})Jz60TwAMO?mbVJC*!a?iea-L@ z0qBtzYz?M!31-UiZk?90I7yLSE{zCi3*5*;S}y|C^$D{6Wv{QfLrLh^<>*lmc=_s8 zqP$gHHl5E-)F=r3UW!eY_tNRyrW@mQ!FUjiNF@YuZbXns_`n92xZp+R>j9fF{ssCT<5d0$1`bH&#InTK2@tJT9L@*Wo{ zsF&5vn;exQkhGeJ}Vayt#8!x~X7#C5ss#HL$T4>GVex<7)SkKKCGl_4!D>{M> zfJ-BGwmm{)R`hne^Zq8u&(Wx(97bdz5yHitOsa1)kQ5nIb6eB4qg}Gl^UmBQLeN<} zd&=(uNMGLHGVtjGimGFm=C#Cq^H~%<7YA|7rZ4G1IM`gF-;Rb+BHmwztWMVM}x&L5wuw-hRqKNmV@q{G%&}smS%HIbNY8Feo1E`|c>O@o>S2~AIuZ^|}5$5xIFsX>}W7eu{-#9yg=GI z7UY%GmftKa`F)T-ni`;sq;IE8g@ zerAtX=`TQ})%d7mw3s&L=D{8e^4~*`XX);O_pl@iQw@NUNeT!|OP{^LuUY7$239Go zbjY9{ZTU`-kuafaVT-evhe-iY)&AVE1)nTOoWA(uiyLk$#HINxvf4%}FqooLVj+zzs1y!bQuv%K}flKi4*a z>GKf%+RF>&v)h*|k2DH=nOPQ!8T~|LSZh>N0%Ve~X6TV2fFz>#1m!F*6Sam3b`{Sk z{6zLPHj83)#uDp^jcniB56Ko%jvnArX_fFt}3kwL*i8C}QDbMD3Aj5G%@0if4u0 z8WFqfsUv+R5P*XgUGPOnu`^RRAjb&jfsNe`W@jsxUb+*Wc?&vlPv1bc`XM4K!r2fe zp8evUfgN=pBZ^4nL^5h?KS`17h65Dqx0)GNU>+d zR$xCs!g=+d$w)Nh_qvC&Dn7vkNEF*;(Jol9cvO%<(2vi}>Tz4UP{MI%NKj9|c zBvj!rbi!8;k}p?imi^_};f}4kGOM*b zCk@Uo4QJWWnDcHWOVUw$jAaTzu@9ri=;2Z;-T2am|Hfou61I4~(2ZOkl(Secm!(93 z6CM6nmJ2ify1z3>$>ppr6&(_>O^R zrFzek5-!oI1N&?r5=G?Bhj7m$0k*-BKhU#vHhl`zGND^R_FcOGWvD=5Gtr(1Dg@VN z!^x+VD76ohxKt_mt1djsmtGa%n{kol&m(BxTCMcZkvRpb3MR-T??<7~C-RF1M`^ve z(a^^29AkWZ`3$eM*b4o#9k2_@sH>`Re;+oOa&pBh2?6J%rOwQfE1>Y$@ruhNrTqf&@HWOx&u=U& zWp0%*#-b8ULm`9=Z-vfb@Hi=TNLPeDIZ2$xjCPIkjV|qr8KZvt5V_?Hm8H; z;nFJVzMKEj2~Z0vKazsB*gBEi(LUhDf4z|ho99(%g-hB#NgSgJ#o%5j1|=$9-UTf*TNn6A{0HQt96(6j4!c{z82{=}-i>>8a5BKzYm zagb!_y?A>LI?p4g(mkXMN@#dRR7iXQ;yH;#8wBKvRt_ev8B7uy4V~L=Kg0MIp=hFg z^8h(O_@dJ7Lc%Af`{LSQaTr#RG%D+DG@#Sy-wWx{2xuKF<=SJS*c^* zalngU7Ri-zFi27*$X4-el*>pBFt*vuNcu0>Z=%D()w+LAA!KYfn=B;7vmtoHSb$(l zYm}KV(zPY|2~^t*-`{^9mC4H`%tpQ4feV^Y2~lzsdui+u)LA8!4{{OLU2tlw!AgGR zI#1Xyu2$3x|0pWOiEo`LvE4~u4WUO1Q23h9GAU>jRljP2k_8Y1@3?25iCU^IgV%eU z5eUt)Ym@CaPV-?np%#u!iSg37a9Ic<4RoZlw@3TxY?FP98ajOScncXXuBe*#WxWC za3wDZ*>0CH#Z2QP<4#VCti!tlpHBJf@jg=N5)3K)J*a@y!GCRUb*C=_Q;UUKJ15K1 zm#{)hJXi&X_1bgPCz?s)8FOMHY2H8moQHGuV!3^*6)b{cHOB|ddtc|N&WvRp3IRLSJ`@by^dhV8&3&^84A8zmiK+w4C0 zUWAc=A&bTkbDxxhK)P;x_x%C0VWQ#CQivjqd**zWT~~IeNDW`=UgYlla^=#6YNOr- zf&2AAhWI{qHqriwB@pmQj7F(#(H!X{2*Z-`2Ec&wf29F{IijE5=&qQB@cwX@cPp=9 zGybsG%$ieXP}R|<0STey=zy@xPMgdtKX6ib#~%K6<5=S3vzxRz4;^aAKkisM7^Ul1 zF>3Sf8gS6ww|xTRb>sKi`nC9cmckmg+viU=vEQ~V|0t;WaJ<%hv66s7q}JRR1H3^7 z44#UM{%kEZ^}qg%`=AR1=cx-=c%2)s&IvF+0f+vg5?xU;ca6XuU8l4iy#hX{$*X@` zldGk<&f(F)(Yr4f^iw^ZEsmMNqwpXSlcvWOYFqdF4#-OkEXuL&>B&haaLX9rnf8~8 zv6}W%t557Xhp&C0bJ6xnLzpRS@hLy~d(6Uy_Z&7(NZy49#fsfX1Q16Gcyc_+>1M{Qn|A5r9HRp#wwF_-F|Mb~k+fKjS zbu8}#P2a9hnZs;WC&TlWF(Urh#%2XwhhYJLx`kA6)6YvQp9^$bRA1EM9VZAKJ@t>P z?t&u=Am!l_2%v-dfb6%spV`v6acRKYbzj2efn~-OEMCMnf}#$~6l&P}hj^BI>vi8HGo!Bp9LFmu2gm*o#T`LyP;f5c7Ej%3RU z+hnbXsgAwTPU$zn6G8G-5lI=L#O@m^AIej;wy_$m+fw-#)Co{&OIv5RgNrnac{+Fg zDkHHkV#pRwS;e`lmQ^I#*7Hg`XzUktF&548aF<`vev+ZYe)D+i?Hl&B#4<-XcJI6+ z$W`Dl*uv_v2aOqRD~t?9ohHLxbwe*C7L?&V=0nt7SZB>_ezzNYI}>`i*xvq1K_IF& zWoYykhR*^qFG1O$(+R@S#fr}lKLpT=@o_usH18XoZamBKNS+_lGX`!O!`O@dGPB-E z%zhrc_2L&=x}6Plu?Yslm%-ohmIVxmEB8Ap=Z!u39(-;4PmXZJ>_s7U;cogcVpyib zQ>ZOOw!=MPs5rjDu4}v1#U$jo88hx&tI_Wet=6vw?RU6IzmG?rKROSO zR(OBdXGt0Mes|;ogP4Ns2BG+&_QkQT36!i|pJ?gJ_NxoBZCEm!{?cNRwcionfdvzY z?mlC-`LR&%kya{-R}Hq2HedHWtQ$pt(O)yjJ8( zVW_>o_|S0IfO?aJ&`k;IbJZK8#|vwwrwf+UEKdhF?E_>1&|%aYYAK;)m6lqpUw;u# z*o<*@sgd0CZ6A`jG(TEa)KUDfy=5NSwx^Objq~u`!j))cBgp}(YOYOSe%x8gv zQK6`FFkF|6-aR=K4Yk|TmD5FB{Q`vi90=9P4;?`y%;i2|ZYJ6K=FomfyBUA_IJM_) z4v@S8=y*id1iyS2e>&%4O#aiOSHaMlcNhdpnB@&^5u2E?FCa3py;Yu6{e%}hmUCut zZR1uA;u11{8SKiEV!FaBTrPDi@K2Bdpw2rER^O-|Lxz7yBiQ6oRl-TeCRZHZ1}0UG zy9}K+p>oIDr~a8nF!Xv}w2!woe! zk99^4pM9UAv+4+Jmp%KI+2et_HH$8^(QeOqiV0usKCo zMMk^tQ>qnl<~gBe3a`H3--N%4|ECUb0aE{VnZ@#JDY%xQ2gUt^VA%w1;iD!=B{zZR zM03ysFZ9-_?BxN&nP}h68@fVAyFmUZ45>&6AQ{6La=zdR06h$-xH>ZAn&8HAS%=Ar ziz5Or>0HnW(n{Q@QxF*0WDGrxrdyWOdt+3UGv*=ViN^~l=U(ym_rH2o41(WBX+Car zN_(6jy>9rfsYMc$VkR09niKW(lfO`YDnKk3sL;(5xH9;e7bqJ}exeCd%MZZ($}RyS zXN*aj2oxx&+p@E=jur&JWDrSQut?IsIMhdap%1uA?ukbNMi(!SAjkE$;QdVH5&FZ4 zKcuNSD?Ex7mSI@sKH3`v)A?bTt6_QW*7jzN?3lUqCtxIBA?DcgAQ?r|L(LPhQ1RH4 zLZSE$e5|+Tzh%A)q|&q&pPiQm`q;%nTrfd=UQS{-ul7d3J4~!V9LKREG&6VrqA2-6 zZWb8Uxeow-;B)$oU_WJqeec*j6J6iKT<4Si!$JOHN=>}24s<&55Ng4Wb*i|2z&QrAXp!fLIENmW4 z6h=S|1v-bC?~!ANXF%qBmKe#zSy1#C+daQ7M5;h04D@(7SX*g%P&}bMjlqoO$$K=z zCxX_Gq+96rxafX(+|pN((u1(YzuiGp1)a#uH@a+YwGj5+8LCtp;x*cs5!Q;{p_v!2 zEKuc6EG4(-=cgddlGXXkPE0m;R*q$Bq9Y!+KG%M*%5$i`X3ZtuRXxJaB`D=r8Rjo7 z=mru}j4N{++ocp2g?s2)Qb+lvhf3uu?5R7d6bUW0AxP_yLv$Jd5>*CE)%CT$*feWZ zW^wv(GWV0}|hSX%CMw+fcB zBmK7Z++&_tv?q^2bYM5v|)hzIF1~q$U_vyqR=7A3{X4{ zWR~%~of%-?8kFHjRDt3pZQuHs_GQiN+uD||Z>~-?gqQtZzGv*4x6>dwWM%_{pd1n= z%q6drhs4{6yoxxb%6`&!+tjR1&yxiq6wSwb2f!d+*O4Jpx$y0}>O0Ik8knyG-l8B^ zqdXdF<>Tgkj5Lz+61ZOR;SfDHi3*#TjZT|Zq$9Y7(oL2S{mKJeJ3+tysmiTcgPXBJcfl&XS5vMS-R*&m7O+b?owIJ^*}n<=&zYmbKpU zj4gjfR9vCZbg`@054%euNjyE=p)iZXRHwf{FyfNC{f4v(SG|3PPH9Bv=(-=#IVvMM zM}GxImQ@~7b2|6?I_xqVDzHBmJbJqXwnAt(0ZCaldjZ#yF$E%@U#SEU+Bi}-axBXF zZU-O>abj%!giBg9I=uJXY1u>x$S#EjB*hri5}kybj-!nQ*AtLF-+d!PwR6~|En!su zE|mHy2oZf#9BjE*Q>Q!1V*g~5?;QX8m{E=!g8Y|T z!qsK69CwM@7POTv%VQ^ha2T>U`^Ht*lWlvtDp>RFed_W^P&wBM+*wV67P+?;yqjq7 z&c$$N51`3JqmQfAX=?QhknsusP4=g&PWD4kxkuZ#TOcWC2`~})pb4iQ9GWh%vdO;**!AHzmuKktx(DMIk=hS5g&!w&mcsb_TIJYa08L;KWOl~d*OyP=<~eVSd5wL~2H#8( zo5(+Q+Ubrot?h!C(1Mc=z5_3x?0H$9hWcmO9HFfArO!iUyc=T1C4(aLDJ`)k>^<6C z;tuVozplSVY$GceDfs<&0ML&M%|i>D{D-BA|B43uW7?sl{Y6W(8q#r_e(J|vJ27KE z3j*sULRTe`PRy11cvKEn}KaME~dC*$4Hh|IF|B_piew{&-U#h_#wpFfr~Oou=Z^*~}HY z=U~N^?G|avJk*2tZ@l0d7?&w*ox!@+L)UI^NHFt^$Mb@>UQo}N#xjqEg;s@yW$mT; z64yDlYmT+tSlLvaUOsnx~nhxt}aj|CwhkxYSEW4OpdHL6nuvRarsOF7xZSLfqBuX1# zRIRp{g$^dCjGYx-o#xr8f~y|$*z@G*IiPT$rKMfpUo8sPpEj%j&7N&!{XP<6jAB3z zG5wmd7d?(;7Z(0WtObWd&;ul&MW{)sgi+`60p09b@4$_+2K7z;45WI{eUt`n(g!~D<{Z^O*DNmuSG5U!>R981 z+hzD%bWQmwQNGYdhyv*r9D^hftgGr7x!1L$3+8zjx+UT;>#1VMbUe4o>N@ldT>QMG zIu+692L9FtrtYgj8YWFCq+)3vcz7~%9w!N-An-Tdqn^@FaVXGlQQ(@TI$wM(C}G9n z!2?iNI^G`(kG}%>m+UK(Q<XnZohqrMlkdPNSqhn0aD6#iMuVusP1vxNzsb3jOciyQyGWIJolgm=(G zVFb~YaAJzQF`P*a&d|#@TqLEeos6#wX2an72#5D@<{>Q9@Nj{BSs+If_OR#O^d^oT zZI+5t9c3bwr>QL_j{Y}p)Nco&Ye5b!tAE|XGLq*uz^Vv&$CF1T8|XF}poNx(e$_s( zs|is#0sK2h(8nKxjRU#81wzr-7!6*Z31@18!4ZG^R;0GwX3Pwj7ZWF)a_|Pgj>_bn zzsexv%pX(JGVq;CV6+J75PlVYp_}cjj1&WO+h@;TV};f@u^~hv>dcDK0G9v5-j_#n zxvpVrw;PaDrYNKmkxU_(8dX#jqD&E@GL|`1NJx~q6d9sq%v7c_j|qj$vy^$BebbH4+@AEwObKlo}-Pd(T2to{Qbs+4wL!Cwmi3-FKAQXGl zV0JFvrYXaQFmmC!Nh}e(UvfbAmq0H$_Q8N|Ru-#4Y|bsm8(A)dYDFa#+bQVucU9>( zJzU3>PEe$8l9Q9Wy12N6zXhu+w)HoTMXiJHu4gqhwn}-;Azxi6QztG2cR+s2JWFtp z`wKyERC`g=z!QrK`bedQ$Z3fK7Uyut24WwyQjiUDOJ#A^fxk=qN&U65C@5)x5rr|fA1R?W!#`~2(<$JVklptXFh`!y>fi=({bTdZRPN^%ed%2&GDtvWE%MRAz! z)1}f!-myl`n|2vrz{H>^HkO7ry8QW16D(fh-1mS>j81k|q}&WECszgEN@g9Oy*;h= z&OQ?D9*5TMZN52CS}~78cz>FeMgUX7E=(k@fb#EAVM8x z0)%YIc?eNwgSl4OSSYVe10!DXb7mi;59>JZ3eHRHO35fKK$QA3EMP? zr_l9@zdm{3zyW91T!%?Cj+uo`+VKXdqUjAA#@wgt{HsMoTGpo7DA9^}h9T4udD2VI!5 zrmv~nY24E48%It?mX#AAd<|%i4YW}X+mNt|7lS3kt5*@aAj|<64z|PAAm0gr;=eZB&bya93u} z28lpzW;ur@x70%lvTiBj5T3X@)~h>{o2-)8M^{$>2ho_+zJ2`!G4mX-g5R$AZ3b^T ze9-(NR7e(B`1^Wdvy*J?NG)5k95t-Kv59kENfT)q+hHA-~o7Vz*N47ST_*{XkX`g+kDANd~uJkoh_E@!muqxiz`qxJV{9nS_!)WNQJ;|=HRQ+xr<$hdHsAA(a_rI-2B2|Ct} z*{FM3c?y%Kou|uiu!&KwsqZnqaUJpInJw8)?u;T;{VPHj$7CxOC)*ZEuHTZ_LV+-w z(dE2^5imlLO81>vV#*4qy1}1|7~@j2!K-)``gTSY@neYG~>_}X(ih|z;h3IwAY z^L{__vcJ#E|MhKJrF#5DdtU7eLGb=@U;X!4{(n4B#Z?n;@tv;}PG92xf3NHaJ!flc zi>(MHwaX!;_e(ziW$Aq9<{o!|HxPJl4 z`%;~$@}tg71s;-IWJ^9hFh$X?ZrvLO=GHis+hR4yA+mIV)zARc(LO+Ey~veo28R5o z7H=+f=KexgZ~Z{56LFz>%eOUkE|U=lC)~(~5TC2S|paihy754m^op!e@uQWFJzq}`F!?nUdi@WZgj2ecAWp;Jw7Fjl2_niW zXLO-a#N{(_u(PiwCx$ZPOcA)L)E+=I&f*9$#V!BMK>*)V&i)|n2)hMkNuSog)v^*` z44ECFAr)IS_+j7oS5Of1iHlvif|yMI^1!G{i2aqy=!eY4S?i%fD_k`v$XAD@jTqy)wz@C1Cp0E&M9pb~S-Y53a(CNg#?zXJxh=caG)i+83qmjNU zn=+czgyB<5X1k#?GbMFLRX6EK`u2vb&`kD!%{0^2kUf8+=_G00WJ5u5SH|8KnlWlk z=JTa3y;j3MtcAPMdR*-=clHv>5@+4Y`*OOWlhVA~!zAfI%c!0BdV{#sRg4MqhPKz{c3+l_ zNNXBx7UN0v{6}(^4_KH#!p`E3LIN?mzAnJ5R&VhO;7+H?G{-c6{4x83W@%dqavmRB z3+nu=%s648#_LDC^))HTz$rDE;gA-$ibF?mkU1E$(p|mj=G9uedHQFXTEo9zo;pJJ zr1AA7ocUW4mo`y@6>C~`j_tXPsHLUvoraX0x`GFa#Hct@#Kz^bW(Dj1CF-pvf@K3o zo1!R5sG=SP8S*)@ev_DVajr*|QOfX8wUw6yy3J@(fNC;Dea|f37Fzw5-}N((D|Oaf zv@@F>rK4oJaTS@g#MDHt%-rx0#vD{q&7$rz)`<_c+i2Vx*k$fc&&0Kvmb~uX^S}UG z3q`}aQ1EWUG~wB3iMb@zR57%rga#joNcXVqou83AcoRLrHLkNAG0AlO{OrAN z#Akaxg9HB+sKT9Jv-VaST1eRDmXWKIx6Bx{cjN}{S;NQO|FBi&k(OK75e7A{n(wAv zs+MupkrR6X`K0kQ1RY2>8h_?AzfR25LZCQ$d|q3m)eh4(ikQ%;GjC#g-6fjV78ujq zzuoBA!sM2A@Iva*84Wp$Ak+`ahSMj}?8GGdy!n^u#OmF(d40mu=Hb|cud|_ub-c&Z$Z}(2d zZmO;I@vKfmYPwY~O{eH|y@PO>43uie??peSvq?ryNSIB}O?dk1lv!GgKAI%G$f-0{ zub1O&M=|GAXR~R&sR3N@P@kZvW)VKX9t!! zEsPp!@h;wX=8h2f3%p)&oY}4)BlPZKp$C=~tPc}luOH2C!jy9%*ZH0dJY6nb;NWl| z<&B;}Ybfwy+}Sb*!7jP-)U;(nm0jkfBK$F8-stH1VS0mV<(jX`t=dDeQhR2Qu zUFZ-CH3l$o!A@>@F!@;5)9KLTW)WuFC6&~1`isHkaa zPX+89#MEwmISl|h3yr?e0ZF0R7t`iV>4Q`;vbahxiPG^Xk^CD%e6zZ( zI^Jnb@J(bzO#?@w7d^aIyrDH|jx$~e3eQ7lAqWJAaRpCWF>gehU|1-cZ zzZ($bLBKG!1NO{bPc*VZwD+)IZHy1KnXa<#DG$bJ-6Uk=0Yx`gZZQTQhfmx>)3tSB`?S#R2+q6hK%r*QqKEofYc<#5goc%l8v+yVb#ZO0h_zm`$?WtV ziL^d+KK0sq>XH?EtM1yl z_mP={G)K;hPPThSC4tap(+?$Q@ZJoB7Ov(T$l7eQomMgX@u?Y5pcbP10XC_?RLYmS0Xs)eG%rV%m-Z_!D~jD5I~=&fTWj z=XO|(gMN};<NQw`5BPn5+I8vDh3e)j6dZ|-*WkCy+Qmle;28=syEJPHKjQwL-)AfTzCtl;q)l#~ z+Lr2wqHoA8JKa+`Tb(&KzmHUWu08C~T4A1D#O=4^ zB*RI&Z*x4?S~BNoJ5?+@VuH1;#^*F#X;Y6j^~WMAm)TZvi`IgR``92O-k@Qhb>Eja z6FSWP*A?;BvNbgV(05Y1E?|TE41Yi_1F@LW?6u$3Q+h^Qv%yWO9BW8Esu%J^$gY!! zB~oi$OVxQICp2+F?uVV0w9g{$O(KPOk3qpLV}-vC*6r+lLu)s2aP{^_P2f3btIzP; z=3)`*GUu12_BUFTue#1c5 z;9Erb&+I>_lPHD@;yt=^fL8S1K+ z5wHFKfD!EF?w>jxV%wh-X{e}T?7xmz1Q*aj~$|% zEd=B_J7G;peUSFw-uNEq0?GdgKD%^~8r^`p_|a`b$to!g*M~o2;&g(^c(I!Xyy3JQ*C!ibLlrdhc{?zXZ@PQ|? ztIq|V5Z?SZx*0{ph#lWSknz2qU+ek+|LDy#>4bD%fd@Qe8Y6T1kh zDKRpLdA&&fWhn>0{}DMjxZ3T{O$=l=&N^wxoXWIQjMh031))$_u0wf{5TbO_8XZNMfcMeSJ0x{~ytb^Sv#+n3eFgkQ8N;S1Ab=eYUg^oBm zS{I0lc9yBWv-~Ktn_UFbU8tkgkEX+(29s(Yp&PirWXzSZW$7!b#EE|mngywGSWZp* z=&CW_%tp0L+lGEYJHN4mW(__d{naGhz)`5IUcD_Q6BOmN@6_xrzjcbmV~tc zcR^h9F%*Hh=AL0l1vU|Ot>c8G8ou{2uHTmZh_mliOw|%di%#>nK+o5Aa6=k-DwfJx zvTM+4^1j+(ZsTGM%6$%sbsc+`mL{FOR=pJ&*k?iQsPiG!#b-G?zs)*+df~u~@ zBmo|F-WUq>%|4IK_pK(bmq={6&bF4&^XD_(FzSyrfHM)D4G-J1npWjg8?VuaQ83$f zqa2Q#?sFTjjV#_|cq;R|dnSc3dh7X+D#URJQgx! zI7r^6lG!plL4$<0_ucaGX#kY25_%80we`xTk!-I)iiAAPdgQCgP~p)$2I{GCiRM1u z>=5m~G|ql>$9JLld`{+!+x8mGO?P47Q8W{_4GM^cyk+ftR`M#geTlHU# z@&be}RKIksAta&(!c1SQ`1ExNjI9wRHWDaFKmJy8Uj%ywR)?6|0qESUF1DNc5~LJ zjuOCaPTEod^m$cjmX*&At+Jablzs-mfKE2*$FUs_ymqrqj@n+ddBPS0ab+{TF;7I2 z4Sz>to<#uD>yv${ouBd#n9H+oiiym7zC26 z<7`hx2FD4bo|;1p)P$64IIoLVMym!QQT}HBAh^RxOqDn0Gfls)$Pgj!ox9KHNBf$x zQ$HrK&227~XuTUqJ@0a>S}l;)$9Z&L{SQb)Ee|hTc}mX~A_hm@GIpO($4~?+80X#c z`AxfVMwsV}%5VC-SAuZX9d}cphXBeYv zHRDhYkj?AK<-dkb0!yUN)ecLZWCBLBt?5@EQdG!SQB%IZ2Q15S- zt}6!~BFEMHCX4IDVYd~eo4_=yJS9F^0O+p_h|I#y*u*7aTAN-z!#jTOuA%Hk!Jc5< zIlb^%Q4Gfu@o(gQA4a-~cW}vbr_-T-Y(+;ztXy$(j}=(w=k=k~8Azz}fhu388iq?6 z@*5dfs_&y7bnRQqJeUc>+AOMeqI{lN)x)OpxvxB=xURoMY3{S~??^<{Jp=pEO^x&K zDQic8ET_)fnl;Y&!x1cIx9UCze{CqKu6gw}H5c5%HHW5hx$lE&#Cw(Fd>Tl9U|4kb zm))n7p?*3dv0|Rxxbv;yycobLGM|hMmr3g=H+@-nP15lPp7qE}TSv<(ZiKo^DVyjX zt1oo(1f1OT%33I?^^TkC{k^Shh{&!Pn^_!v{3T^Wpr2dcONh#TbKE2U^%9 zx+`Ov+_SP!I2rh15Wq|Dg9Dw_QS(hi38zMl3V_6GiG{L71hQb^$c&Is^x;+I-)AH= zI^s8N1ae(qXL{Lbt-e`Z)YS4egD2Cip*(}*m-3HNs#}l(91ll+Yht= zAW`D!kd@e5O_u`uGUrC;tM%8}nd2>4_csVkZGCJr-pgzE{#9@E28q}j-xUs@1MONK zY~U7F2XLlQ9G8l|UIiFD8*LPipdIpD!qm>0UopnN>4jXXk&wJqjmE6>%+)&%Tx|D* z{VPC9s*kK5+eB?URmtp29H>NOi3CovClf8c;*5z)GcI^*$#(P0%>b~X{SrEM#%C`GHo<>s!QX(^jPs5O5qQU5G4s~5AUwu!C1?Y=S_ zYrqPuNS~%O`?_xg2yd|auk6;HFFy}wl`y6kr1OW-WJam+&)1Fivw9NWXeKiG?5p}X z-ky)r=URu+4fy)HOr0xZ0PwSypkHg-E^EsA$*ThFOWkS{&xLgTN$J%UvELH`3_XJM zv1C@NERMX0mGp$#ouM~e^WUOy>Y4z^cFd%Gv5EBX<)Z@S`W?%Hh{v1#m@7Ct=H&1D zJotmobHUo41woFX-9wPwnQdMrp$ie8PhKA}Bm+B5=ph{m4Dwia3;i#xkr$+c z%>J@w5R$B~-@`s(`VK<|iz0?gTB7YsI^?347C4zd(I)sf(=p|TJ%1Tw~UsWh90$7PJ^w-u7Np@LHOEF7sdDhyVN>;*O4v1XZ~rOxk=8^r#K67Bl-Uz_odi zYxCzJ4*mtY2$Trrlp^t>&itU~3sVIb6i=5%oECZ;HfVOJQQ=_3y*RATf0-E)MIOS! zA}+(u{NJ#J?yY-LO8AWRL&%cjnGsLS;*@JV`23{{&j+jrKawL+wHB7c<5s(=nAm}sQ1byabG0i_a5iAWe z7GvhbWQric{H*b^-s>(Q?~YL$%rgJ3wlV~aj6h0+&MPcw?dRUdkjbAc1b)b-pZeVk zfDp4M0yObYYQUoM0RHC%-$fB>;*Wbw77M}~AqtL*kD}D`pH|XKQ$Nw|zY?Fu3#R|C zECSe2L7$o@*g-!l1K!@SeraTTL62@pO;$x5m3$?!o6Q;_pv#Ao32nr#*6Uz`&gTkm zIa*XQ_|ROBnlKH0;?+9Q=1zBeL7sleyWz+W3yq=V>)mIn_p0naotTB$p=Ap{G79Q` z3*0r5oAqPx-YgebOD9XX7+jGJN<;f-lm00MWBfXY<$t zYv+e2-%E)>6%xK2$l#vCzeVDW%>F_+dN14El&-)lkF;_y`t7%uJo7G`(Gj~8A4zkDJ}gQwi8l!> z4*qc}vEoNo6ku+|k6RlVDDJK3IE zXhQxN0qKS6Rq@ul+XxCd44=s|D^$+2h)8@Qd%>F#aALLa!t=fv&f5*K;RAesGFge) z@B-P_g5`XhqhbXS@O0oo$X6TiQuF90YH?5_K~i#Bum#Zl09y8@z6|)0YD@)O`#|Uz zB7H{DYzyvp-lL7J+=AoivVheO0r<@95$rM(=tNdUDngEPOa#<%e8M;71u>xl&ap-u z-Vx!DSmKW)-8i3-E(ww)*??tEKvVj>n3WG<9?iuJv3XJjYP%7F>J7r}qdj^X1Zke` zGvk_pX0?kO!RDv90!~@!;3j9XN%)7&L0d8n+;k0cn0LrHAL5z|O-;z#z-a{?v}_KI zNf;_Rr4quD*(79SWUa+J#c#HLW@Ya+br){C$Dfs#J!o^?9Ln1*ec+OFl#7Gunj)`@SUY+u2xr4+IW)LtVV-Q%|Zh{1B)*TV*<#EnOgb?ZDN>~1Cvic_Se#f z6G3D+3k|=m*kCWGS%_OlrtRWQ{;=QWQ%4n8cxFzU+Lc)>Odf?CFuv79^&37VXFp}7id4|Q7Buqh3W$>UTByp>-R|Y-;-vwiiNzkI= zIGaMW%?>W0y|ff1{S5g*OTq1ry7qjyrbN66QMuzC(0w?+XBf)#HX~mM{ZQxGFbjIR$C&0ATp7J^+VCKEj%OV;|GC5?+{vtg~s{k8ejTL1qmh zWy_O^H~=-V)sz&_&jjP?0yOY3&2V2lV9Vx$9cvONh7cMmILNXpk8rMpIKI31=3tba zH3ibIc0a#&u+?!^RFtsqK+uapVDmNz9Q;DsSo2r;LA*dZge?~={e;ylSh+A=87p_@ zitGfoA!fX3RNHMKphyHs%)Oidsh{NpvqkeQ!rwxV?lHs(&q9KbM-2BeCg^x;&(Gv` zZV;kT^(1BnvW9o7rKMoXrKJx+Zy(MmqzN6mv3`BHCxG%(M_EI69}IOfxDT`V@YsP( zj*%#9zosy0UnKvao`{`LhgSsYrk(8Udm-NnJ&wlA`PqI@UgTdrowf;m%jggEi* zIvuJFI!pY^zd_pb+TaNo#-2ANr66OaeHa9xBXj*{x@2sd}#IS_acx?wPdP?Cm3hSz{DVqcbImM$zjHYRdA_@j5OipVkeY=>xf zbaY&fOK=%w3YIu~1XC~}?t3hTONFSCXeDk|yp--Vm02fdt#kpx#EYv>d}WWQ-|qf1 z2D0p>!AD$!V`wJe%0SG$_3qBR`X!!F={_oyc;WqRVql1JjRk~E&20y;-rbPo&xBP< zO#qZKk1E?@7Al0i1~H92%7bu~$?alWlNfMim)hx}g;&2bv+vyNvWXt#?j$4;J-_|x zipC%h?O<*JUFi6ZtQxnO8aX~OLoz@}Vy)M4+E*;rpJGmq!kz4RV}O^MVE#$xf4}o3~g(YipGn z@d*--tzCu79>R<2&mUMAVcv)o^+DtEn4U%UHPre3Gf!tRuZa9p!bIXd^p1St$MfA9 zZYL>3>c4kjL2ckBwXn=u4+v=8T+Y4lfnyK;<^!Q$+Bs~9cY3V~{%ZTSe@Ecem&k zet&4e-+W+UmV?MTL&x87im0vsTPw4IC;zb@_J@fQU-#}CY-l2gwH{g=pH6{`LXGLq zPax||STWDU5UxJuIXDAt%uo0)ovM6(vRFx|CTzKD-fQW=)g(7vIz)wuT$p5S8pdU$ zcHvTbjyca{sCQ2sEjEzVt%+@cz0%w7d9<6#qHVXLZ1wp0#qxbZ(nX|=x>is`hvxVi zDk59Ps1%`<1vNDN*-Yr#fLDRb;Xg)@!L0ko5#%^`vDLqgAWz&v+VBD+X7~?c@70uP z3>OooP?sNCAlOfh_Y*^cH5MD5;(P6CTl`)gI-ZduyhyRPrms@_GU)P0TeYxah|#ZH zvvJ)HBGZO~6k)KgF@^C+WO6aYm5AI~zcEd?1@yxl{5`yc20&M}0sj-MK~heG+JqOl zQ-L5iq@2Xi7ZWZSB!cQj?^nRxs=caTnHhZUX}}nc%W@7jLRfjkc{MZS%xkg`M6*f= ziG5skSj8_F-Nk^>zlkz_LNzF(<$EZ0$#N~8`#-Ka*`1WcYN-q$;LGE(nGvy_nP^P6 zKFY5MnH$LNf!?OwBC!orc<#m^!t))E?v$!L->)c&;k-^_{BWw%5h<^O0%X89KhLHm zq@*z0e0US#y-g)4fcS>QkmAd8)S4i4QShVZxpv>zAdG^knG~{?YYsMvt+&Q@hEZlS1g-z;nb!9wIk4y*u$HbpUkIGWK~m6CA_Q+o-zC@#H70t4fM7RAMjD~}PwwwUEdkLK%P|TsNBMUe4 zYwluWewg3%BjmDiQDf9M9g}e&6t|$$_+`pYWKAo)x>7KZghwGKcc745o(frc42>3G zmcQzy!gr)>GD>1&hcW-j{B!iviU!avp!=~I4TpPuwA9oXW{AVKA^adf)^gwXEh2*Q z0tOr7oMV-6ed77EU66|#EI!#V5rvD_Fz(xP!kwOfhbRLrF^d4piGfwCc>J+>{dV7Jo`e@iVn zD-dfg*ue|&TH1ird9Wse&M+-S%pFGm<&E*@D`jE0(Y?G=o~B!DpyCf>R5A?S;#-Fd0e_prW^@W|0#IUQJlunH2Eb5oE>(XLofE#5-E00JJ0J?ODy zs}N&?;h1ok33>SC**lr~dzz`O7V{|J2g0?~|A4v+Eq+jfsIZ^p}Kdj*R|768jk^ni0bc z3&~c`E5dtXo&h!`Jdf6z>ByCTi_@2+BB$MTOyihF)I?k^(b__RQ^$Dda+%*PJzrJi zOd{Do$5K5gucTpo-^m$OHA;!dorY|-qq>hp!2FR&@{8xL2|s)A4WzU@k^sftRL%eS zUuOMY8D0jie|C;NrFc!c^*Dxc?sUU=6b?DFC=+^6Od=EMfBQW;sxG?J{M#pD=AZEG zn~)$_?kg#oHrIUsi(;Qyj}p+D=h<%wMTaO8I3OaVhadqUhW`ENGp(*Z&gGu@v+4=Y z=^Mx5WMuCqQR#?74FWJu11bgNBn+t+0%J7~lH!+thwcIpwdv9CbkiSi$G#s3)sXXK zlezE4VU-72xosK2t#$5s^-H=XFYgkg{YuH0#Kdqpg*h>G420-#q6Dftl(LjD2le#W zUMZhX$2s<0yb=E~OvLX928=oj<%zntQ7l_FPiCTL0xpj!j2DPY9Dbut-9VnwAR-CW z@4o4BOfD~_8g6gtx8g045g65;6EXpNKhxrgRNEV15-)b9?Tg?@vCgI)K7wWQT;liE%=c;EZ-W0uuvP&(#66VDA;9di_ z4*6sQR2qm|2{2!vWv4$9s9iJeTUwMiLi)~gAZ$4XBM9py4XeC+^k_Ld)83C#192Oa z-9=@OMKuq`(p~z;;+#dEFzC?I&@f*AcmUUZdiz7^)i$#{f2Mm@&Ddp6eo3 ziAeu=0k{1P!UVIPoZB2k#DIjtI$EEG}MAeARX?tu4R=qM7?C|CU z8FNrsDb2!owI$3NUU;LFMMb=?xouGw*z+h8voNwA!KN%5n-(|Ny%xZYfhar0g{^8d20j_Fl z(5OLz3uojbs2$2V@PA!kt9Es?=9fX~yjRM}yLXv^HZEyiyz$J;H+ZcPavz*TO|bBd zcX;stiuy^HBCDXyTj}&*FSk-`5EQJ?4M4B77$?nl5o`oa5b`|G9eK>BT?9;zCTSRM zQjSgpCILh%M?CA9MJ?%fA0S?>?M>AN@6ZC2WwG6S;H9uMsLX zJlCMxr4gkisMh*TL^#wBE2x9*T&If7h~ZWB8-quRSbS4vJBodM<8FY11a5?9z3q&w zYm9OlVuGzt*uTYu|2YTQ009-ke1?eA!^6Y;`d62v$INuS0op?m!Yhv8>-oU5bgg|L zZN+H8IfAZIh=OS2|?pa-z|$$WG$8 zJ`ep6pF&>p4w4$nrG)73@*VA~t07lH>a-h}dwt(SLeU)sG?Zb6U<#xq&v%-XxTbBr zfxI!II|g&l<9g&HSX;brgtKmR0A9Jb+$P^0F_ca;z*Jd4TQf!FS>&OrTP#=@K82!~ z86gOVh_KWgJX(Bgm!l$=fcx2Q&l#%RqNXD+o@@7WISDy1GM1T*XU8{*0e!55MA8Ut zJZI9mTDk2rH+{1=P2Zmj&?&Hu_srCmA{P|&+t8#}+(=b1x-D?VutIgVHrIW-|F_Ne zNDnW_y_&uFGaS2Eqn_bkOd|}<>k#T9&`61pmsBsJn+=NM=tvyzftZc)bJ+LsSdH9>)TAZV+#OVRpjy;6{H!5JV$Fo@G zkYZ6{?j@@LVsBN8iOS4;O)6Ci$G6$}HZqPauKWG&x@^3AWvgP?;nL`H8fS$PtqrS6 zukt2*-c_9T;BJ`DS+&I6sL0M=T%-)<&s^jDq;e*~L_L=C4NJk;=n z2sIWjFKXqBvY)T)xU4_)_Ew~11)S3!XjxcTK)|_!vJ9QMt#(@Mf)RB!aO9sBbQ?5Rdc+0KdyIwxsx&ZY&*I7g4nIn?ekoI(-PPlZ~+n$i?!Wy9smV;K@or~)#%U=1NIiA zaAs#`GpGARKKou2(yP!y-U>wvJ@C>@wjsT8adn00f0?wDl$5mep@RpXpYT5;EBi6i zZXOZLdBukS;caK31{dM?RN%^4IHz@}0-2d3%$F<%gVO}!)_1F$!L;pTb+zIvPA-2h zuLNkFp%?7puW8x9===byyOv=OF}RBhY3Qi-%Lj1F+Fw#1ckw7t735Fei8J{9@87>4 zk{eWdO?-=Cg;TPN>h z=#lC7#$r%&@H#@nR*#{fAu@H5qS9~Csn9!Ms=g~+Yadqs=(1^>C`B;8xT1pbmwk2# z-1^Ef=O!Btz0taGp&7}PJF`Ue%<6LrL1QEQd#m2o?U^*VI3y69O5R3iVQg%?fB(&b zb`WK^Qhm-rWs00%mz(weK<@zHHeGo^J?Qacr-xhvd+y(bscaxBe7cP4T!pM(p zFi9oLD~7}`C+D!9?bWMSB_;2CyGUFJ&JtYb;zNOoz3k1&&zE^Dcyj8Bkx}eOO9UY` zd>M33!HK(9fcv~WsjaO&IWaMkzJrH{ho4_=QoFh$p99NZ*-#D(vRouBw_fi5T!6iK zgm^j}XN6u>rpC`#GG*7%(6G{CKTSdNfe;kq-PkRI80L2OuIy~2`sq%1x8{(5k9}>` zoir?&cA3M&BsKoikxy&MR75sNNJxCHcAv+M+t}EM!i9GFa%0+?zAgF!?DBqomr2Y5 z&#!b+9{*I)@I3y8{fr}K+>j2SfRnu%nv#-|Rej&&_1o`eef4ipwNn zazI5PPy72!c}9Y%d(cqBp(K+IskqQjNx?H4Y!z>FH<`|H{n>=)u4zU0;SaAmkh-4ixA1k$qIoQSb-(yNYs^4|5>m!JznJ!f|48EuLF zZu5NT{*%7IqN1XG*T2dlMT0x-@#*{FHis%tN{;{fvF}5>rponYBwi^pYe_mmC|M;P z^YEQ6mxAL(?ljT1yRti2saB9ui5x3*W?`3zCaz$_fUwE8fls7exm4eNf+^7}Q^=l3 z@uR!f+tK0e>l;4vRTI@pk$Xx)W}KK_#dbS8yExyDYS`9t`0nCDy_Cx-BBE@56gk7l z;GnSGT$;hHq6c);)b}>>Ze?dbHu{|ul!r`oYeKt0|1bmQ@5`-DoOsk`PvH-afAQ`l z8glDWKNJ;JxQ%ezO-jStd-KL2NXWG-$R~_)gxEeS(tnF(WLOow**WRJffIN>F=1h0 zUf%L5)@YEs{Bzou)fc?b{%%wj^)N^@@rI2}?u)S0(nzboF1=y8$7HKlACs1*VvQ7M zP8_X$Aav!5>H{MsB|r9a;}__AYWJ3rh4AlH^fsmslqgE(YuIL?&~M)b`1ezcy80s@ z3HHxiver{y_Td=58feHn;bs#0HdQwLoy4n(GjF7DZS{pOIv_OSRQ#kU#tzoyj5w)$3sd|MtnnuOs zL|aL9t)VPC2glI(xH{+ymX?#S{;dS~8(E!^SC0@{QlDyWsHGKZY@dbu7_4J)({J)| z`_G;G;z&*x%9;<0il;g{I#NxUQK=yhA3khuZbpFj_3?SS&$Os2KN}1qRDJ8IcJACc zlsW5tHwp>0^r&I0caG0vLH#K-YXdSRCwXJ#ZPDRvm$Bcx!Q}k;T4<|ropdcOK&nxs zT=gTWUO9ROs}BR@h$IhhZ`QNp!^5v>9=$wpK;fXHbK&yX=}&xn>)(d^^a*-*Y-*PP z(qe3NH>%W+_s~^g35iUc#I$qvrk+Qk?U0taFd0bf@;s>j^WKE~&H(zPce{>_6caovJ!EumWWsTBRVF3YC zT)|6?97kt=iID5Qd-gik_ld&3C17V`oc-nVgM)()Y~7B%IoG@CkpbUZwwq?=JLuYi$w`88Y)nXa+yP3d5IA!gi;YSg!dqmu zIN_k=xkr6c*mEM%Bo6s>;e5dvT4v^X)MiqZ=m-ytj#5xiAkd)$@MI4`T!}=p+`?i4 z)*wMMccp8e7lCtf+ur{Brx#STv^yxP1T8Igad9!Kz)V-F9TF1irm^k4x{5J8GHqY4K0z+E<^wZL!?uVU;~rt5p}($J z;j9HYlylwoXBvJ{2oD^TR!%)R+%LF8eOs-n{KW1l@ab^laqZlxhrVEIu9}8sXBoS) zbnQOJ`a#k4{T{(J@SU%*qWRish~S&i?nde0KTgj-FMWADu5zv$$vy2Akh7#_2zpH# z3i1v^8xO(A={wJ-8Om)WKHbl0*MzL{k1%|bIG;Dkyu7^`C2Um$hH<%9xGO(q@hK@T z_Ou;Vo;w=YRTjv-bLR`Aqi^{Wk!-&ZA-qYEii{H>Q&x8+a>^NI z$27UR1J&v1=v+HWsaXxH+TSLv^d6gE=WB_4Yx|JsJ7w`@Y`;*~ZezN&-}0ZZBO^*j%4Vn%`$d8QGT+ zs@2Y%$+LG^LMs0oC}?i@Lq6I3Jbv_Kvv(Kr7a*S|jRgptksB(L@l&SrKdM*;bJZ>&o7=4^upTA;ITmRvew$ zQ{%(zo)4XGJ2*3j9$rmTR9c!2f?Z)s^Umv2BYNF|j8y9lYzw@Nr*<~!8ysX{Wn~3Z zXrI*xdpKE)b~VeXV&IT&^1`JBPB#jiMmW4*Gf?ksx_kE}ms-kWpA+y8NKRX9>m%mA zqcIBHOi~g85;ff-wE%xu<2>C?a)Ajwz?9!VcxvfUN!~dw_TceBvsQ6o5XAA4WE%djyZauhzV%@G68&*$xP)@$v*Zp@F0Dd9~ ziOMn}V-v;eF=|;PKVa)U`NK|J_#8>kA7jzNA6{TvTBUdID24 zc;Vp#SvhOZZ2k2i3;WisS`{SkA9CEn^LS9c@_hP#_Z8i=e^c%L#3C=Id~Y&YzM93k z_VHU2^xGS^;|WelIgtFv6Nv5*yClGFl(Bxjf^wRX5SKp!tbyh4U!Svi={=L|Mr(TU zpIEB@^*!xXvhw~_^2!U2&DJd)^hX`|cKWj)^Q$=^<*=Xc*CU4=PB3gyI>Wkdh=qCR zmTAScv-ZDqZCZaiF_+xD@*%hw%|5^Hkd$Bka2gh$NW}Pm+)Dqj>$e}0J$$$zblGiI zg{n6Fp#{$K7Ra2wn``eROu@v`q8r$vYh=})Y2?Y6Y4Gs$Tl0Fg=h4>JGO2&?C2n@_b{mv_9H#ZX-8#^>) zGU+)7F3jZAR5afI)LxaXI(fOdHgl6*xIZ*)j~y#Ol7$8Zh(1kG%0lZOBv@gB-wp!N z5YgsP^h(~r1&=gOWWgZ1ha%C}To!krTfK`})IxTbWoHS!Wy7aWpU^W?Ngrb|Ckp4v z4M}&nWbQJqSh*5F$uL?&MJrc)b}720$N6^ZsP!%5BX2p2Lbq1I~sfR~)0g z6{^)OKCpUSLO>|is;j9zy}a%1bcLAL%G{T0-43k{hCmh+j1mDcW7kkWu25C7zMgZ7 zNTvODx^QuF%2A}6dY{+16IFXRs>4l&L%FW2cWtQDmi9y9?T4(Q-<_i%3otx<_%khc z{YmNPkf%{rTcAxCXrVMl`n+@3t~KQ3-+}oP%F5V;gkJj0P6-LS$)OHds8d&e&dtp& zGR#EUUpcpX|BV|nfOvCq(6vJXi$pIsK`CPqH1Ijwl%)UIY|T(rsJ5Vf?RI?vV$j^m z$yuDAAKou;>((uQfBzvDl+9yfW3=;6kZa;L5A`SB-7A$hXV%DwrcY%`3kDENH^n8U4IbBC2Yl>iO%fN^YYf9FVPfky}h8M>amX<0+*MZ54%`(5gXSeqN8(?~9liLo>4^<8+9Av|hk}AxGZ0S-e;B`goW%JLj&m;(OK#-yM<>z1vNQ z2kqW{Dm8ZOD;o44^Ygo4x*)`N6`%DLf>XK+Qi|Wt)x^0|2QDa^z`(o5z(2z zvWg&f14~9>c>e5J!Haooj8&fm2FA?nN&@r;JCxJ(Ax;(}uO`yTu8Z#tp zk^(4F2Nijr0wrLtejD-@a$BVwDg{wir3sKBqYSaQB++$4!r9A{rk3<_6RN0gk#3es0|x8`UM2Msy~I@ zPf%}9%J}gdc(sXvfnojnIJ~4tyBqSmqM{jZCJ1!!AzFH7c3nW6#&ekz ztt>CUy^4|N!p)IS7ix;!!WWAl8mI`LdvV}EYVgYw(;V3IJM>##gg?EEYH;tb6~6m7 zeu9f7)rJiluwqnHuQhYY?6bog?k2<_@0L#_j)2Omp^x*oH;b@gNTWucf$7>y#On&Gm zCoiuRYXu-;ur2?jq`v7+p>LBQ;eP^BqU_fcrTYbE6?J|2}2i``KJ9PkDhdKVPRZiAC@&IPq@Q^%U+(;0d>xeV`a_(pM%~_N*@ZdCz$bj?46BJo`W00+L1IR7f7Tx`5R!?Q-|zC5>X~yGWdL6fAON;NPGEd|JTZ0$ z49h!0P~-T@uNsM|-RJB6NX#l-~G1bh_DIaIH?C1~P1&oi%QVrm5F zW!YckUvVDy(1RU0^Zn~Ky}}p`;y=;7My7_L2w!h+J##kCDb7!HJK#c?2Q!$CTTNaJ*v5m5 z6)o5s85tRxOeAvlO3#?0`HuXtXjuV&SfYuENvQKb^mlsu+M^1U z_Zl_d^g~qt(OqG^qWFKQ5qr!|=JnS@op zO;Aub^pU0EK6=!vmGneJqzV>LCc8e~YI*v;zP|oUH}sJLn$_3f)0qQ+5{Q2M zWICsLSQ79snd}qLC=Aea?u})26l&8R04ylhgxzB%!n=AH*YOkYeK>p-6nX&U$y@>b z^-SigSLIv=MmIN#Z&+Dvz?*RoouauVr>OXGcQ26c?1diH5t$<=;=*H|jNADAK|wK?KMTjM3P94`RCc# zWHYUO^;K+bQdYs81jwC+;R4*5#?<<^Gu3!`3&B}|t5r%$>TPztQZD>WbaXV#Q4sS3 zCnG;c8Tr`T$DmDi;QROQeSM==QMcfl#Kgozp!<5Y6|g8)P}p+1u@MhyZ@hirQ2@gM zC41>>ryyZ1wO(v{LIE~IxK<`F?>OH$BLjn|&Q0iHNai2MVj?qZBoMQA4-!06ab^E2 z!tq8%O6tg|Q=GsrtgEX7U+Snz|JYbIPG~=#)9{tFLvXI)`Y60> z%Lja%;VQpS5?juC4O<%{Fgu{TD=r{uKsch_BU7$zfZ0+O@NF_^o7K8C^0MvBQBQrBo z?I5t=j)4AcsC`55MaY;#^_mm!S6Cc0D*%`rS8Q2eORKW|ew7rU0OLMGNl6K*v9o89 z8&>TrluzCTM16XC8frp$;oP9U#hZZwj4SV6TwGAnrKYE+KXc|rW&xPA0n`#V_#sK5 z0|Od^7z2K@@)eC`t`s1~L9Hc(cmy1#(z8yGI0WVFao&7X z*L;y?2YMac_CBco;`^kiUlxN7P8f^5zXLL8#LmM(q#FjKJ_PK!=G4PU7Jx9Dnr6ijqd3^uKsqUJ8pS0b|9BB!!CoD>S``$=5?OE@!0Xk1 zUw51uwxIJ_-PhHW`0%wYFa7}L)}ZZ@0OV3#;I{>zcCE{Q3>h81NKrvZAivtR=lGpy z_5QbKc0eCU%?SPL4GLe55pVs+x5Lj0{v#~-H@NCQ+5+OkhncmkRfW8G5bzSWNvP)E zLN(-pdhm8fykk$1AO1&Ja61c(ybUP1yAjVJZ{>3@YUN`PsLr(X@CT9G=kbo5H*z~d z<#v$w@L?)XoPFLqPKIj0{QrE4tZg4We0cePj7gr-0n6ypBqeiov8eL$n|%+Ym?hmV zCfUB-_d;Wzlfyng7M{eN7#C|SZ1_(XQ8@nybc9Vkzyy7j{b+c$kVqb8$}KFEQjU*u z2WP7@U}B+pA|=UcC;bW769sh%AmpGpQRIw+4buYO=ZQ?q_V?}cCKTLWDf{`30}xZ+ zxg*;9RtJFN#CbYUWtGjI2AO^j$2|ZA1Co6fYa0r-Ik)$RE4##JyNCLyjP%uW{#!6I z2Z#S(R>H%N&}?!1l4cbyXR-RX;1@5S^z%Z@HUsVUaw<$>sWj>+<=l4A+>uU;ui6ql z7H3Y!q?z>U$uk3t-7$-BKr*r~slQUrG;_lx5a7C%vor*?gQBib@r7aS@A});76UmN zg0kzyC!c?KGzIUnoE;ESRzWt6-ud6`-BnC{JkC>H!IT>cQf6*blE_=0chaeNR6;qTt#RT=?-R1%;oIlTZHTV)WY&^GEL05Ue^#j@_jVi@WdG4*)}~ z_s_+}CB3Y9@NfA0WvXw%1);Mf#Psc<1q%4EmkVuvILsIR+{>yXvU~9H;*EOwp}Q~< zHh{xI<=3b(^daH89_u=&8%9-t=qfJIj9U)*MT!Sos?xFbS)dWQfX)cx{;n&X} zCts`m#(&SVV?7zQk|F3CUKxQ;wrcb24f?8gx+MMkz)Q-?=@}a7zMD4|(f-}Rl;r2a zaTyl4@NyannY9S%f9%Njpo{xoJ_-f3fPes^&uF=}4B(lmxjDtPoUfgv#McZT%?

sIJ&7PcKn@nGNb{?G60 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 Z)>RV6)8C3{$B`u@dP(ZyTOo}H{{uo?Tm1k4 literal 490197 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ⅇ3oY^QqHuk( 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

fE3Iy66Q~Uu%?F$bVc3{JN)E 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≦8^kfq9A^9!Yv3#un* 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

=ML50e37J{6NCsPTUA~ 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 #DeepSkyBlue participant "Zapper" as zap <> #DeepSkyBlue participant "OETH\nVault" as vault <> #DeepSkyBlue @@ -134,8 +135,11 @@ note right : Beacon chain\nconsensus rewards ... when a validator produces a block (~4 times a year) ... -val -> feeAcc : ETH -note right : execution rewards\nincluding MEV +mev -> feeAcc : ETH +note right : MEV rewards from block production + +anyone -> nativeStrat : ETH +note right : tx priority fees from block production end From 8cec3de61e163b72ff09a60017573f907803280f Mon Sep 17 00:00:00 2001 From: Nicholas Addison Date: Fri, 9 Aug 2024 12:24:28 +1000 Subject: [PATCH 6/7] Generated new NativeStakingStrategy diagram --- .../docs/NativeStakingSSVStrategySquashed.svg | 215 +++++++++--------- 1 file changed, 108 insertions(+), 107 deletions(-) diff --git a/contracts/docs/NativeStakingSSVStrategySquashed.svg b/contracts/docs/NativeStakingSSVStrategySquashed.svg index 85ae337af5..c4ba4dcb15 100644 --- a/contracts/docs/NativeStakingSSVStrategySquashed.svg +++ b/contracts/docs/NativeStakingSSVStrategySquashed.svg @@ -4,115 +4,116 @@ - - + + UmlClassDiagram - - + + -288 - -NativeStakingSSVStrategy -../contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol - -Private: -   governorPosition: bytes32 <<Governable>> -   pendingGovernorPosition: bytes32 <<Governable>> -   reentryStatusPosition: bytes32 <<Governable>> -   _paused: bool <<Pausable>> -   __gap: uint256[47] <<ValidatorRegistrator>> -   __gap: uint256[49] <<ValidatorAccountant>> -   initialized: bool <<Initializable>> -   initializing: bool <<Initializable>> -   ______gap: uint256[50] <<Initializable>> -   _deprecated_platformAddress: address <<InitializableAbstractStrategy>> -   _deprecated_vaultAddress: address <<InitializableAbstractStrategy>> -   _deprecated_rewardTokenAddress: address <<InitializableAbstractStrategy>> -   _deprecated_rewardLiquidationThreshold: uint256 <<InitializableAbstractStrategy>> -   _reserved: int256[98] <<InitializableAbstractStrategy>> -   __gap: uint256[49] <<NativeStakingSSVStrategy>> -Internal: -   assetsMapped: address[] <<InitializableAbstractStrategy>> -Public: -   _NOT_ENTERED: uint256 <<Governable>> -   _ENTERED: uint256 <<Governable>> -   FULL_STAKE: uint256 <<ValidatorRegistrator>> -   WETH: address <<ValidatorRegistrator>> -   BEACON_CHAIN_DEPOSIT_CONTRACT: address <<ValidatorRegistrator>> -   SSV_NETWORK: address <<ValidatorRegistrator>> -   VAULT_ADDRESS: address <<ValidatorRegistrator>> -   MAX_VALIDATORS: uint256 <<ValidatorRegistrator>> -   validatorRegistrator: address <<ValidatorRegistrator>> -   activeDepositedValidators: uint256 <<ValidatorRegistrator>> -   validatorsStates: mapping(bytes32=>VALIDATOR_STATE) <<ValidatorRegistrator>> -   stakingMonitor: address <<ValidatorRegistrator>> -   stakeETHThreshold: uint256 <<ValidatorRegistrator>> -   stakeETHTally: uint256 <<ValidatorRegistrator>> -   MIN_FIX_ACCOUNTING_CADENCE: uint256 <<ValidatorAccountant>> -   consensusRewards: uint256 <<ValidatorAccountant>> -   fuseIntervalStart: uint256 <<ValidatorAccountant>> -   fuseIntervalEnd: uint256 <<ValidatorAccountant>> -   lastFixAccountingBlockNumber: uint256 <<ValidatorAccountant>> -   platformAddress: address <<InitializableAbstractStrategy>> -   vaultAddress: address <<InitializableAbstractStrategy>> -   assetToPToken: mapping(address=>address) <<InitializableAbstractStrategy>> -   harvesterAddress: address <<InitializableAbstractStrategy>> -   rewardTokenAddresses: address[] <<InitializableAbstractStrategy>> -   SSV_TOKEN: address <<NativeStakingSSVStrategy>> -   FEE_ACCUMULATOR_ADDRESS: address <<NativeStakingSSVStrategy>> -   depositedWethAccountedFor: uint256 <<NativeStakingSSVStrategy>> - -Internal: -    _governor(): (governorOut: address) <<Governable>> -    _pendingGovernor(): (pendingGovernor: address) <<Governable>> -    _setGovernor(newGovernor: address) <<Governable>> -    _setPendingGovernor(newGovernor: address) <<Governable>> -    _changeGovernor(_newGovernor: address) <<Governable>> -    _msgSender(): address <<Context>> -    _msgData(): bytes <<Context>> -    _pause() <<whenNotPaused>> <<Pausable>> -    _unpause() <<whenPaused>> <<Pausable>> -    _wethWithdrawn(_amount: uint256) <<NativeStakingSSVStrategy>> -    _doAccounting(pauseOnFail: bool): (accountingValid: bool) <<ValidatorAccountant>> -    _failAccounting(pauseOnFail: bool): (accountingValid: bool) <<ValidatorAccountant>> -    _wethWithdrawnToVault(_amount: uint256) <<NativeStakingSSVStrategy>> -    _initialize(_rewardTokenAddresses: address[], _assets: address[], _pTokens: address[]) <<InitializableAbstractStrategy>> -    _collectRewardTokens() <<whenNotPaused>> <<NativeStakingSSVStrategy>> -    _setPTokenAddress(_asset: address, _pToken: address) <<InitializableAbstractStrategy>> -    _abstractSetPToken(_asset: address, address) <<NativeStakingSSVStrategy>> -    _deposit(_asset: address, _amount: uint256) <<NativeStakingSSVStrategy>> -    _withdraw(_recipient: address, _asset: address, _amount: uint256) <<NativeStakingSSVStrategy>> -External: -    <<payable>> null() <<NativeStakingSSVStrategy>> -    transferGovernance(_newGovernor: address) <<onlyGovernor>> <<Governable>> -    claimGovernance() <<Governable>> -    setRegistrator(_address: address) <<onlyGovernor>> <<ValidatorRegistrator>> -    setStakingMonitor(_address: address) <<onlyGovernor>> <<ValidatorRegistrator>> -    setStakeETHThreshold(_amount: uint256) <<onlyGovernor>> <<ValidatorRegistrator>> -    resetStakeETHTally() <<onlyStakingMonitor>> <<ValidatorRegistrator>> -    stakeEth(validators: ValidatorStakeData[]) <<onlyRegistrator, whenNotPaused, nonReentrant>> <<ValidatorRegistrator>> -    registerSsvValidators(publicKeys: bytes[], operatorIds: uint64[], sharesData: bytes[], ssvAmount: uint256, cluster: Cluster) <<onlyRegistrator, whenNotPaused>> <<ValidatorRegistrator>> -    exitSsvValidator(publicKey: bytes, operatorIds: uint64[]) <<onlyRegistrator, whenNotPaused>> <<ValidatorRegistrator>> -    removeSsvValidator(publicKey: bytes, operatorIds: uint64[], cluster: Cluster) <<onlyRegistrator, whenNotPaused>> <<ValidatorRegistrator>> -    depositSSV(operatorIds: uint64[], ssvAmount: uint256, cluster: Cluster) <<onlyStrategist>> <<ValidatorRegistrator>> -    setFuseInterval(_fuseIntervalStart: uint256, _fuseIntervalEnd: uint256) <<onlyGovernor>> <<ValidatorAccountant>> -    doAccounting(): (accountingValid: bool) <<onlyRegistrator, whenNotPaused, nonReentrant>> <<ValidatorAccountant>> -    manuallyFixAccounting(_validatorsDelta: int256, _consensusRewardsDelta: int256, _ethToVaultAmount: uint256) <<onlyStrategist, whenPaused, nonReentrant>> <<ValidatorAccountant>> -    collectRewardTokens() <<onlyHarvester, nonReentrant>> <<InitializableAbstractStrategy>> -    setRewardTokenAddresses(_rewardTokenAddresses: address[]) <<onlyGovernor>> <<InitializableAbstractStrategy>> -    getRewardTokenAddresses(): address[] <<InitializableAbstractStrategy>> -    setPTokenAddress(_asset: address, _pToken: address) <<onlyGovernor>> <<InitializableAbstractStrategy>> -    removePToken(_assetIndex: uint256) <<onlyGovernor>> <<InitializableAbstractStrategy>> -    setHarvesterAddress(_harvesterAddress: address) <<onlyGovernor>> <<InitializableAbstractStrategy>> -    safeApproveAllTokens() <<NativeStakingSSVStrategy>> -    deposit(_asset: address, _amount: uint256) <<onlyVault, nonReentrant>> <<NativeStakingSSVStrategy>> -    depositAll() <<onlyVault, nonReentrant>> <<NativeStakingSSVStrategy>> -    withdraw(_recipient: address, _asset: address, _amount: uint256) <<onlyVault, nonReentrant>> <<NativeStakingSSVStrategy>> -    withdrawAll() <<onlyVaultOrGovernor, nonReentrant>> <<NativeStakingSSVStrategy>> -    checkBalance(_asset: address): (balance: uint256) <<NativeStakingSSVStrategy>> -    initialize(_rewardTokenAddresses: address[], _assets: address[], _pTokens: address[]) <<onlyGovernor, initializer>> <<NativeStakingSSVStrategy>> -    pause() <<onlyStrategist>> <<NativeStakingSSVStrategy>> +301 + +NativeStakingSSVStrategy +../contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol + +Private: +   governorPosition: bytes32 <<Governable>> +   pendingGovernorPosition: bytes32 <<Governable>> +   reentryStatusPosition: bytes32 <<Governable>> +   _paused: bool <<Pausable>> +   __gap: uint256[47] <<ValidatorRegistrator>> +   __gap: uint256[49] <<ValidatorAccountant>> +   initialized: bool <<Initializable>> +   initializing: bool <<Initializable>> +   ______gap: uint256[50] <<Initializable>> +   _deprecated_platformAddress: address <<InitializableAbstractStrategy>> +   _deprecated_vaultAddress: address <<InitializableAbstractStrategy>> +   _deprecated_rewardTokenAddress: address <<InitializableAbstractStrategy>> +   _deprecated_rewardLiquidationThreshold: uint256 <<InitializableAbstractStrategy>> +   _reserved: int256[98] <<InitializableAbstractStrategy>> +   __gap: uint256[49] <<NativeStakingSSVStrategy>> +Internal: +   assetsMapped: address[] <<InitializableAbstractStrategy>> +Public: +   _NOT_ENTERED: uint256 <<Governable>> +   _ENTERED: uint256 <<Governable>> +   FULL_STAKE: uint256 <<ValidatorRegistrator>> +   WETH: address <<ValidatorRegistrator>> +   BEACON_CHAIN_DEPOSIT_CONTRACT: address <<ValidatorRegistrator>> +   SSV_NETWORK: address <<ValidatorRegistrator>> +   VAULT_ADDRESS: address <<ValidatorRegistrator>> +   MAX_VALIDATORS: uint256 <<ValidatorRegistrator>> +   validatorRegistrator: address <<ValidatorRegistrator>> +   activeDepositedValidators: uint256 <<ValidatorRegistrator>> +   validatorsStates: mapping(bytes32=>VALIDATOR_STATE) <<ValidatorRegistrator>> +   stakingMonitor: address <<ValidatorRegistrator>> +   stakeETHThreshold: uint256 <<ValidatorRegistrator>> +   stakeETHTally: uint256 <<ValidatorRegistrator>> +   MIN_FIX_ACCOUNTING_CADENCE: uint256 <<ValidatorAccountant>> +   consensusRewards: uint256 <<ValidatorAccountant>> +   fuseIntervalStart: uint256 <<ValidatorAccountant>> +   fuseIntervalEnd: uint256 <<ValidatorAccountant>> +   lastFixAccountingBlockNumber: uint256 <<ValidatorAccountant>> +   platformAddress: address <<InitializableAbstractStrategy>> +   vaultAddress: address <<InitializableAbstractStrategy>> +   assetToPToken: mapping(address=>address) <<InitializableAbstractStrategy>> +   harvesterAddress: address <<InitializableAbstractStrategy>> +   rewardTokenAddresses: address[] <<InitializableAbstractStrategy>> +   SSV_TOKEN: address <<NativeStakingSSVStrategy>> +   FEE_ACCUMULATOR_ADDRESS: address <<NativeStakingSSVStrategy>> +   depositedWethAccountedFor: uint256 <<NativeStakingSSVStrategy>> + +Internal: +    _governor(): (governorOut: address) <<Governable>> +    _pendingGovernor(): (pendingGovernor: address) <<Governable>> +    _setGovernor(newGovernor: address) <<Governable>> +    _setPendingGovernor(newGovernor: address) <<Governable>> +    _changeGovernor(_newGovernor: address) <<Governable>> +    _msgSender(): address <<Context>> +    _msgData(): bytes <<Context>> +    _pause() <<whenNotPaused>> <<Pausable>> +    _unpause() <<whenPaused>> <<Pausable>> +    _wethWithdrawn(_amount: uint256) <<NativeStakingSSVStrategy>> +    _doAccounting(pauseOnFail: bool): (accountingValid: bool) <<ValidatorAccountant>> +    _failAccounting(pauseOnFail: bool): (accountingValid: bool) <<ValidatorAccountant>> +    _wethWithdrawnToVault(_amount: uint256) <<NativeStakingSSVStrategy>> +    _initialize(_rewardTokenAddresses: address[], _assets: address[], _pTokens: address[]) <<InitializableAbstractStrategy>> +    _collectRewardTokens() <<whenNotPaused>> <<NativeStakingSSVStrategy>> +    _setPTokenAddress(_asset: address, _pToken: address) <<InitializableAbstractStrategy>> +    _abstractSetPToken(_asset: address, address) <<NativeStakingSSVStrategy>> +    _deposit(_asset: address, _amount: uint256) <<NativeStakingSSVStrategy>> +    _withdraw(_recipient: address, _asset: address, _amount: uint256) <<NativeStakingSSVStrategy>> +External: +    <<payable>> null() <<NativeStakingSSVStrategy>> +    transferGovernance(_newGovernor: address) <<onlyGovernor>> <<Governable>> +    claimGovernance() <<Governable>> +    setRegistrator(_address: address) <<onlyGovernor>> <<ValidatorRegistrator>> +    setStakingMonitor(_address: address) <<onlyGovernor>> <<ValidatorRegistrator>> +    setStakeETHThreshold(_amount: uint256) <<onlyGovernor>> <<ValidatorRegistrator>> +    resetStakeETHTally() <<onlyStakingMonitor>> <<ValidatorRegistrator>> +    stakeEth(validators: ValidatorStakeData[]) <<onlyRegistrator, whenNotPaused, nonReentrant>> <<ValidatorRegistrator>> +    registerSsvValidators(publicKeys: bytes[], operatorIds: uint64[], sharesData: bytes[], ssvAmount: uint256, cluster: Cluster) <<onlyRegistrator, whenNotPaused>> <<ValidatorRegistrator>> +    exitSsvValidator(publicKey: bytes, operatorIds: uint64[]) <<onlyRegistrator, whenNotPaused>> <<ValidatorRegistrator>> +    removeSsvValidator(publicKey: bytes, operatorIds: uint64[], cluster: Cluster) <<onlyRegistrator, whenNotPaused>> <<ValidatorRegistrator>> +    depositSSV(operatorIds: uint64[], ssvAmount: uint256, cluster: Cluster) <<onlyStrategist>> <<ValidatorRegistrator>> +    setFuseInterval(_fuseIntervalStart: uint256, _fuseIntervalEnd: uint256) <<onlyGovernor>> <<ValidatorAccountant>> +    doAccounting(): (accountingValid: bool) <<onlyRegistrator, whenNotPaused, nonReentrant>> <<ValidatorAccountant>> +    manuallyFixAccounting(_validatorsDelta: int256, _consensusRewardsDelta: int256, _ethToVaultAmount: uint256) <<onlyStrategist, whenPaused, nonReentrant>> <<ValidatorAccountant>> +    collectRewardTokens() <<onlyHarvester, nonReentrant>> <<InitializableAbstractStrategy>> +    setRewardTokenAddresses(_rewardTokenAddresses: address[]) <<onlyGovernor>> <<InitializableAbstractStrategy>> +    getRewardTokenAddresses(): address[] <<InitializableAbstractStrategy>> +    setPTokenAddress(_asset: address, _pToken: address) <<onlyGovernor>> <<InitializableAbstractStrategy>> +    removePToken(_assetIndex: uint256) <<onlyGovernor>> <<InitializableAbstractStrategy>> +    setHarvesterAddress(_harvesterAddress: address) <<onlyGovernor>> <<InitializableAbstractStrategy>> +    safeApproveAllTokens() <<NativeStakingSSVStrategy>> +    deposit(_asset: address, _amount: uint256) <<onlyVault, nonReentrant>> <<NativeStakingSSVStrategy>> +    depositAll() <<onlyVault, nonReentrant>> <<NativeStakingSSVStrategy>> +    withdraw(_recipient: address, _asset: address, _amount: uint256) <<onlyVault, nonReentrant>> <<NativeStakingSSVStrategy>> +    withdrawAll() <<onlyVaultOrGovernor, nonReentrant>> <<NativeStakingSSVStrategy>> +    checkBalance(_asset: address): (balance: uint256) <<NativeStakingSSVStrategy>> +    initialize(_rewardTokenAddresses: address[], _assets: address[], _pTokens: address[]) <<onlyGovernor, initializer>> <<NativeStakingSSVStrategy>> +    pause() <<onlyStrategist>> <<NativeStakingSSVStrategy>> +    setFeeRecipient() <<NativeStakingSSVStrategy>> Public:    <<event>> PendingGovernorshipTransfer(previousGovernor: address, newGovernor: address) <<Governable>>    <<event>> GovernorshipTransferred(previousGovernor: address, newGovernor: address) <<Governable>> From e5ba8b323812ef6f48a4b0f5f0184a1c6714e251 Mon Sep 17 00:00:00 2001 From: Nicholas Addison Date: Mon, 12 Aug 2024 17:02:56 +1000 Subject: [PATCH 7/7] Changed exit and remove validators to be bulk functions --- .../NativeStaking/ValidatorRegistrator.sol | 102 ++++++++++-------- .../deploy/holesky/019_upgrade_strategy.js | 17 +++ .../NativeStakingSSVStrategyHierarchy.svg | 68 ++++++------ .../docs/NativeStakingSSVStrategySquashed.svg | 4 +- contracts/tasks/ssv.js | 22 ++-- contracts/tasks/taskUtils.js | 14 --- contracts/tasks/tasks.js | 26 ++--- contracts/tasks/validator.js | 37 ++++--- contracts/test/behaviour/ssvStrategy.js | 13 ++- 9 files changed, 169 insertions(+), 134 deletions(-) create mode 100644 contracts/deploy/holesky/019_upgrade_strategy.js delete mode 100644 contracts/tasks/taskUtils.js diff --git a/contracts/contracts/strategies/NativeStaking/ValidatorRegistrator.sol b/contracts/contracts/strategies/NativeStaking/ValidatorRegistrator.sol index 5636c8a0a0..977c7764c5 100644 --- a/contracts/contracts/strategies/NativeStaking/ValidatorRegistrator.sol +++ b/contracts/contracts/strategies/NativeStaking/ValidatorRegistrator.sol @@ -156,12 +156,9 @@ abstract contract ValidatorRegistrator is Governable, Pausable { /// The `ValidatorStakeData` struct contains the pubkey, signature and depositDataRoot. /// Only the registrator can call this function. // slither-disable-start reentrancy-eth - function stakeEth(ValidatorStakeData[] calldata validators) - external - onlyRegistrator - whenNotPaused - nonReentrant - { + function stakeEth( + ValidatorStakeData[] calldata validators + ) external onlyRegistrator whenNotPaused nonReentrant { uint256 requiredETH = validators.length * FULL_STAKE; // Check there is enough WETH from the deposits sitting in this strategy contract @@ -267,66 +264,87 @@ abstract contract ValidatorRegistrator is Governable, Pausable { ); } - // slither-disable-end reentrancy-no-eth - - /// @notice Exit a validator from the Beacon chain. + /// @notice Exit validators from the Beacon chain. /// The staked ETH will eventually swept to this native staking strategy. /// Only the registrator can call this function. - /// @param publicKey The public key of the validator + /// @param publicKeys List of SSV validator public keys /// @param operatorIds The operator IDs of the SSV Cluster // slither-disable-start reentrancy-no-eth - function exitSsvValidator( - bytes calldata publicKey, + function exitSsvValidators( + bytes[] calldata publicKeys, uint64[] calldata operatorIds - ) external onlyRegistrator whenNotPaused { - bytes32 pubKeyHash = keccak256(publicKey); - VALIDATOR_STATE currentState = validatorsStates[pubKeyHash]; - require(currentState == VALIDATOR_STATE.STAKED, "Validator not staked"); + ) external onlyRegistrator whenNotPaused nonReentrant { + ISSVNetwork(SSV_NETWORK).bulkExitValidator(publicKeys, operatorIds); - ISSVNetwork(SSV_NETWORK).exitValidator(publicKey, operatorIds); + bytes32 pubKeyHash; + VALIDATOR_STATE currentState; + for (uint256 i = 0; i < publicKeys.length; ++i) { + pubKeyHash = keccak256(publicKeys[i]); + currentState = validatorsStates[pubKeyHash]; - validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXITING; + // Check each validator has not already been staked. + // This would normally be done before the external call but is after + // so only one for loop of the validators is needed. + require( + currentState == VALIDATOR_STATE.STAKED, + "Validator not staked" + ); - emit SSVValidatorExitInitiated(pubKeyHash, publicKey, operatorIds); - } + // Store the new validator state + validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXITING; - // slither-disable-end reentrancy-no-eth + emit SSVValidatorExitInitiated( + pubKeyHash, + publicKeys[i], + operatorIds + ); + } + } - /// @notice Remove a validator from the SSV Cluster. + /// @notice Remove validators from the SSV Cluster. /// Make sure `exitSsvValidator` is called before and the validate has exited the Beacon chain. /// If removed before the validator has exited the beacon chain will result in the validator being slashed. /// Only the registrator can call this function. - /// @param publicKey The public key of the validator + /// @param publicKeys List of SSV validator public keys /// @param operatorIds The operator IDs of the SSV Cluster /// @param cluster The SSV cluster details including the validator count and SSV balance - // slither-disable-start reentrancy-no-eth - function removeSsvValidator( - bytes calldata publicKey, + function removeSsvValidators( + bytes[] calldata publicKeys, uint64[] calldata operatorIds, Cluster calldata cluster - ) external onlyRegistrator whenNotPaused { - bytes32 pubKeyHash = keccak256(publicKey); - VALIDATOR_STATE currentState = validatorsStates[pubKeyHash]; - // Can remove SSV validators that were incorrectly registered and can not be deposited to. - require( - currentState == VALIDATOR_STATE.EXITING || - currentState == VALIDATOR_STATE.REGISTERED, - "Validator not regd or exiting" - ); - - ISSVNetwork(SSV_NETWORK).removeValidator( - publicKey, + ) external onlyRegistrator whenNotPaused nonReentrant { + ISSVNetwork(SSV_NETWORK).bulkRemoveValidator( + publicKeys, operatorIds, cluster ); - validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXIT_COMPLETE; + bytes32 pubKeyHash; + VALIDATOR_STATE currentState; + for (uint256 i = 0; i < publicKeys.length; ++i) { + pubKeyHash = keccak256(publicKeys[i]); + currentState = validatorsStates[pubKeyHash]; + + // Check each validator is either registered or exited. + // This would normally be done before the external call but is after + // so only one for loop of the validators is needed. + require( + currentState == VALIDATOR_STATE.EXITING || + currentState == VALIDATOR_STATE.REGISTERED, + "Validator not regd or exiting" + ); + + // Store the new validator state + validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXIT_COMPLETE; - emit SSVValidatorExitCompleted(pubKeyHash, publicKey, operatorIds); + emit SSVValidatorExitCompleted( + pubKeyHash, + publicKeys[i], + operatorIds + ); + } } - // slither-disable-end reentrancy-no-eth - /// @notice Deposits more SSV Tokens to the SSV Network contract which is used to pay the SSV Operators. /// @dev A SSV cluster is defined by the SSVOwnerAddress and the set of operatorIds. /// uses "onlyStrategist" modifier so continuous front-running can't DOS our maintenance service diff --git a/contracts/deploy/holesky/019_upgrade_strategy.js b/contracts/deploy/holesky/019_upgrade_strategy.js new file mode 100644 index 0000000000..9f514276ac --- /dev/null +++ b/contracts/deploy/holesky/019_upgrade_strategy.js @@ -0,0 +1,17 @@ +const { upgradeNativeStakingSSVStrategy } = require("../deployActions"); + +const mainExport = async () => { + console.log("Running 019 deployment on Holesky..."); + + await upgradeNativeStakingSSVStrategy(); + + console.log("Running 019 deployment done"); + return true; +}; + +mainExport.id = "019_upgrade_strategy"; +mainExport.tags = []; +mainExport.dependencies = []; +mainExport.skip = () => false; + +module.exports = mainExport; diff --git a/contracts/docs/NativeStakingSSVStrategyHierarchy.svg b/contracts/docs/NativeStakingSSVStrategyHierarchy.svg index 68f386df5c..c270349d0f 100644 --- a/contracts/docs/NativeStakingSSVStrategyHierarchy.svg +++ b/contracts/docs/NativeStakingSSVStrategyHierarchy.svg @@ -16,119 +16,119 @@ Governable ../contracts/governance/Governable.sol - + -286 +299 FeeAccumulator ../contracts/strategies/NativeStaking/FeeAccumulator.sol - + -288 +301 NativeStakingSSVStrategy ../contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol - + -288->286 +301->299 - + -289 +302 <<Abstract>> ValidatorAccountant ../contracts/strategies/NativeStaking/ValidatorAccountant.sol - + -288->289 +301->302 - + -217 +226 <<Abstract>> InitializableAbstractStrategy ../contracts/utils/InitializableAbstractStrategy.sol - + -288->217 +301->226 - + -291 +304 <<Abstract>> ValidatorRegistrator ../contracts/strategies/NativeStaking/ValidatorRegistrator.sol - + -289->291 +302->304 - + -291->20 +304->20 - + -348 +361 <<Abstract>> Pausable ../node_modules/@openzeppelin/contracts/security/Pausable.sol - + -291->348 +304->361 - + -216 +225 <<Abstract>> Initializable ../contracts/utils/Initializable.sol - + -217->20 +226->20 - + -217->216 +226->225 - + -353 +366 <<Abstract>> Context ../node_modules/@openzeppelin/contracts/utils/Context.sol - + -348->353 +361->366 diff --git a/contracts/docs/NativeStakingSSVStrategySquashed.svg b/contracts/docs/NativeStakingSSVStrategySquashed.svg index c4ba4dcb15..35836684bf 100644 --- a/contracts/docs/NativeStakingSSVStrategySquashed.svg +++ b/contracts/docs/NativeStakingSSVStrategySquashed.svg @@ -93,8 +93,8 @@    resetStakeETHTally() <<onlyStakingMonitor>> <<ValidatorRegistrator>>    stakeEth(validators: ValidatorStakeData[]) <<onlyRegistrator, whenNotPaused, nonReentrant>> <<ValidatorRegistrator>>    registerSsvValidators(publicKeys: bytes[], operatorIds: uint64[], sharesData: bytes[], ssvAmount: uint256, cluster: Cluster) <<onlyRegistrator, whenNotPaused>> <<ValidatorRegistrator>> -    exitSsvValidator(publicKey: bytes, operatorIds: uint64[]) <<onlyRegistrator, whenNotPaused>> <<ValidatorRegistrator>> -    removeSsvValidator(publicKey: bytes, operatorIds: uint64[], cluster: Cluster) <<onlyRegistrator, whenNotPaused>> <<ValidatorRegistrator>> +    exitSsvValidators(publicKeys: bytes[], operatorIds: uint64[]) <<onlyRegistrator, whenNotPaused, nonReentrant>> <<ValidatorRegistrator>> +    removeSsvValidators(publicKeys: bytes[], operatorIds: uint64[], cluster: Cluster) <<onlyRegistrator, whenNotPaused, nonReentrant>> <<ValidatorRegistrator>>    depositSSV(operatorIds: uint64[], ssvAmount: uint256, cluster: Cluster) <<onlyStrategist>> <<ValidatorRegistrator>>    setFuseInterval(_fuseIntervalStart: uint256, _fuseIntervalEnd: uint256) <<onlyGovernor>> <<ValidatorAccountant>>    doAccounting(): (accountingValid: bool) <<onlyRegistrator, whenNotPaused, nonReentrant>> <<ValidatorAccountant>> diff --git a/contracts/tasks/ssv.js b/contracts/tasks/ssv.js index e1c69916a8..2e5bb68383 100644 --- a/contracts/tasks/ssv.js +++ b/contracts/tasks/ssv.js @@ -1,4 +1,9 @@ -const { parseUnits, formatUnits, solidityPack } = require("ethers/lib/utils"); +const { + parseUnits, + formatUnits, + solidityPack, + hexlify, +} = require("ethers/lib/utils"); const addresses = require("../utils/addresses"); const { resolveContract } = require("../utils/resolvers"); @@ -7,11 +12,10 @@ const { getClusterInfo } = require("../utils/ssv"); const { networkMap } = require("../utils/hardhat-helpers"); const { logTxDetails } = require("../utils/txLogger"); const { resolveNativeStakingStrategyProxy } = require("./validator"); -const { checkPubkeyFormat } = require("./taskUtils"); const log = require("../utils/logger")("task:ssv"); -async function removeValidator({ index, pubkey, operatorids }) { +async function removeValidators({ index, pubkeys, operatorids }) { const signer = await getSigner(); log(`Splitting operator IDs ${operatorids}`); @@ -29,12 +33,14 @@ async function removeValidator({ index, pubkey, operatorids }) { ownerAddress: strategy.address, }); - log(`About to remove validator`); - pubkey = checkPubkeyFormat(pubkey); + log(`Splitting public keys ${pubkeys}`); + const pubKeys = pubkeys.split(",").map((pubkey) => hexlify(pubkey)); + + log(`About to remove validators: ${pubKeys}`); const tx = await strategy .connect(signer) - .removeSsvValidator(pubkey, operatorIds, cluster); - await logTxDetails(tx, "removeSsvValidator"); + .removeSsvValidators(pubKeys, operatorIds, cluster); + await logTxDetails(tx, "removeSsvValidators"); } const printClusterInfo = async (options) => { @@ -121,5 +127,5 @@ module.exports = { printClusterInfo, depositSSV, calcDepositRoot, - removeValidator, + removeValidators, }; diff --git a/contracts/tasks/taskUtils.js b/contracts/tasks/taskUtils.js deleted file mode 100644 index 5dfa5e519c..0000000000 --- a/contracts/tasks/taskUtils.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * A separate file for small utils other files can use. The purpose of this being separate is also to not mess up the - * dependency graph too much, since there is a source file limit of 5MB on Defender actions - */ -const checkPubkeyFormat = (pubkey) => { - if (!pubkey.startsWith("0x")) { - pubkey = `0x${pubkey}`; - } - return pubkey; -}; - -module.exports = { - checkPubkeyFormat, -}; diff --git a/contracts/tasks/tasks.js b/contracts/tasks/tasks.js index 2eec633f97..f79a474584 100644 --- a/contracts/tasks/tasks.js +++ b/contracts/tasks/tasks.js @@ -69,7 +69,7 @@ const { calcDepositRoot, depositSSV, printClusterInfo, - removeValidator, + removeValidators, } = require("./ssv"); const { amoStrategyTask, @@ -90,7 +90,7 @@ const { } = require("./strategy"); const { validatorOperationsConfig, - exitValidator, + exitValidators, doAccounting, resetStakeETHTally, setStakeETHThreshold, @@ -1218,10 +1218,10 @@ task("stakeValidators").setAction(async (_, __, runSuper) => { return runSuper(); }); -subtask("exitValidator", "Starts the exit process from a validator") +subtask("exitValidators", "Starts the exit process from validators") .addParam( - "pubkey", - "Public key of the validator to exit", + "pubkeys", + "Comma separated validator public keys", undefined, types.string ) @@ -1239,15 +1239,15 @@ subtask("exitValidator", "Starts the exit process from a validator") ) .setAction(async (taskArgs) => { const signer = await getSigner(); - await exitValidator({ ...taskArgs, signer }); + await exitValidators({ ...taskArgs, signer }); }); -task("exitValidator").setAction(async (_, __, runSuper) => { +task("exitValidators").setAction(async (_, __, runSuper) => { return runSuper(); }); subtask( - "removeValidator", - "Removes a validator from the SSV cluster after it has exited the beacon chain" + "removeValidators", + "Removes validators from the SSV cluster after they have exited the beacon chain" ) .addOptionalParam( "index", @@ -1256,8 +1256,8 @@ subtask( types.int ) .addParam( - "pubkey", - "Public key of the validator to exit", + "pubkeys", + "Comma separated validator public keys", undefined, types.string ) @@ -1269,9 +1269,9 @@ subtask( ) .setAction(async (taskArgs) => { const signer = await getSigner(); - await removeValidator({ ...taskArgs, signer }); + await removeValidators({ ...taskArgs, signer }); }); -task("removeValidator").setAction(async (_, __, runSuper) => { +task("removeValidators").setAction(async (_, __, runSuper) => { return runSuper(); }); diff --git a/contracts/tasks/validator.js b/contracts/tasks/validator.js index cad5bf8312..39fe466e04 100644 --- a/contracts/tasks/validator.js +++ b/contracts/tasks/validator.js @@ -1,10 +1,9 @@ -const { formatUnits, parseEther } = require("ethers").utils; +const { formatUnits, hexlify, parseEther } = require("ethers").utils; const { KeyValueStoreClient, } = require("@openzeppelin/defender-kvstore-client"); const { getBlock } = require("./block"); -const { checkPubkeyFormat } = require("./taskUtils"); const { getValidator, getEpoch } = require("./beaconchain"); const addresses = require("../utils/addresses"); const { resolveContract } = require("../utils/resolvers"); @@ -97,34 +96,40 @@ const validatorOperationsConfig = async (taskArgs) => { // @dev check validator is eligible for exit - // has been active for at least 256 epochs -async function verifyMinActivationTime({ pubkey }) { +async function verifyMinActivationTimes({ pubkeys }) { const latestEpoch = await getEpoch("latest"); - const validator = await getValidator(pubkey); - const epochDiff = latestEpoch.epoch - validator.activationepoch; + log(`Splitting public keys ${pubkeys}`); + const pubKeys = pubkeys.split(",").map((id) => hexlify(id)); - if (epochDiff < 256) { - throw new Error( - `Can not exit validator. Validator needs to be ` + - `active for 256 epoch. Current one active for ${epochDiff}` - ); + for (const pubkey of pubKeys) { + const validator = await getValidator(pubkey); + + const epochDiff = latestEpoch.epoch - validator.activationepoch; + + if (epochDiff < 256) { + throw new Error( + `Can not exit validator. Validator needs to be ` + + `active for 256 epoch. ${pubkey} has only been active for ${epochDiff}` + ); + } } } -async function exitValidator({ index, pubkey, operatorids, signer }) { - await verifyMinActivationTime({ pubkey }); +async function exitValidators({ index, pubkeys, operatorids, signer }) { + await verifyMinActivationTimes({ pubkeys }); log(`Splitting operator IDs ${operatorids}`); const operatorIds = operatorids.split(",").map((id) => parseInt(id)); const strategy = await resolveNativeStakingStrategyProxy(index); - log(`About to exit validator`); - pubkey = checkPubkeyFormat(pubkey); + const pubKeys = pubkeys.split(",").map((pubkey) => hexlify(pubkey)); + log(`About to exit validators: ${pubKeys}`); const tx = await strategy .connect(signer) - .exitSsvValidator(pubkey, operatorIds); + .exitSsvValidators(pubKeys, operatorIds); await logTxDetails(tx, "exitSsvValidator"); } @@ -297,7 +302,7 @@ const resolveFeeAccumulatorProxy = async (index) => { module.exports = { validatorOperationsConfig, - exitValidator, + exitValidators, doAccounting, resetStakeETHTally, setStakeETHThreshold, diff --git a/contracts/test/behaviour/ssvStrategy.js b/contracts/test/behaviour/ssvStrategy.js index bcc7167d9a..a375cb7700 100644 --- a/contracts/test/behaviour/ssvStrategy.js +++ b/contracts/test/behaviour/ssvStrategy.js @@ -434,7 +434,10 @@ const shouldBehaveLikeAnSsvStrategy = (context) => { // exit validator from SSV network const exitTx = await nativeStakingSSVStrategy .connect(validatorRegistrator) - .exitSsvValidator(testValidator.publicKey, testValidator.operatorIds); + .exitSsvValidators( + [testValidator.publicKey], + testValidator.operatorIds + ); await expect(exitTx) .to.emit(nativeStakingSSVStrategy, "SSVValidatorExitInitiated") @@ -446,8 +449,8 @@ const shouldBehaveLikeAnSsvStrategy = (context) => { const removeTx = await nativeStakingSSVStrategy .connect(validatorRegistrator) - .removeSsvValidator( - testValidator.publicKey, + .removeSsvValidators( + [testValidator.publicKey], testValidator.operatorIds, newCluster ); @@ -508,8 +511,8 @@ const shouldBehaveLikeAnSsvStrategy = (context) => { const removeTx = await nativeStakingSSVStrategy .connect(validatorRegistrator) - .removeSsvValidator( - testValidator.publicKey, + .removeSsvValidators( + [testValidator.publicKey], testValidator.operatorIds, newCluster );