qAvcDvjjBv$
zNW7=y>DIouQsJyajShDn>}&e#Lvd3v1?$xOc$
z6r-LbG#g}y>WThIi+eM0BRb^7(L`LqiE0COt`#+1><6*WWlzMR?Ilu7l1$e_bxVd(
zr5+}7UXMG7B<*y!Kyrc8DYl%~XVvFC#p-A#D>pW9xZ58#LJIz7M3Ir&8j(V?&w`Gv
zdp8RKCm@E^&VyxUC$6Ki%gWZ!U$*|Eqr{UCIIdf@^7Gu9N+&;V03=}Bz@efvxFExk
z+cqF&R#MX4OJ{d8Kb!wd-cHF7q=o!`-Pe?kv+mE0;+oE6wn-dF=49!jG?c<*{prnk
z-8u5YwMOORu?XokkJVj#l}m)ky(6=ZZP#4rOUw8@Qh7TM^4Z_9U+1g{5DEMVf=6(X
zy233o&)|!$iv+-8a=0$))>$Rz-UqAeA6tv9?*_jRIUDV+eXxn;T|F)GWx`hb`+xHxZzz
zDFf}Ltv{Eacr^x8U?f1rSpH;W_*bP#_sC%@?D{&M6+s74m1*|6NZzP%!rb%*X|M<;
zE5*^?aC(K@bElG6*1pa#?TpJ!0N8lmWjI`o-E7v-w->bMAa=KE1RqwvaUE0X#OVr}
ztbHnh%&c4rgh_7J8`U7W72l?A4gTHsa|WI*VgE{5_9?leZ!wEEt9WT0DFr;3hwvLR
zRE0P!@h(4^uZrl@$B{wu>eX9dO}YKbi|F6ci>kk!%Z!qd=Aeqfpk!L#V6gR#QLQ?s
zsTB{YcXHulzn3``D4u^W2g`1D36Lus<}4jro$p?q)laPq;%V587BG$+nSWbr*L&g4
zq?4K|o{cl)6YMGNVE#@&++aHZ_i2OL+=78t3QJn#?{NEY>7h@SEW5K->s(Tv8@{7a
zNLTfKWNJkQ$ls(n-6F?9qowH90R3hu>p-Ny_H2e;!S;MiN+o&-V(78Lb?4-QhOv(e
zvO5CEH2)b_1Wafv!hF{^^PA}Gou3#>99>krEtYdpNSNrPOu}STjx4ZV>!EUfFCSU^
zr8$sk%FO)yyiYX?!9K>+w_g*II4Nxa`y)lr@XrYiQ~i3th~$}yUQyLRB894fHPvlo
z>M;V;6C5P8PlLQLP7z`~0r;4N(hG(Ga5kk>*49xLR*9z~a!W=<#|25a(m?GSqIkzl
zH}B(md|&G4Qbv{q=qD18LN?iXlfv
zcj|d6icmwmsA1_g{w!o^sW+eC4t>v>^ze)q3%tv0S#SF{0SVP##Qt7>z{jLs+sFwcWD+ESj`d>xw7{jMqq(*QD8t+=;Jq2!rn5*7G-eru
zZ7%hzKRYTmah@8$8~F+r7-Z7JxgnKiZBApxrSjW9c*tG!+4HaWypS|2{^O82x9iTn
z+Pfxydw|=mm_j<@gd2O`oFYxPt71pM)LI=Tf~t#t(|F%);^lwJp*f}0DfdI~5Z
zC-CoW47th?jMc!>n*ypD#ikRW7z;0eB#bW@OhUm^8OsOEM{QdKG8k9MbVyROFq9QT9
zDPdTqLO7B#%d2>F*Apg*=vNU$q|Qp^DexKrOAX5rM8Er)e{+zX>@v`e!!R(aq(|rn
zv?ENB=r&nwiswlncvvIG6N2HJj_GR_1gPV4$R4W)hMslH+ypmgkWs4gn2J%zZfL}0
z^($2;(}z6Sg}Y9rjgQ2oR{TAFIM$ay8dexGd*b8cs?1cVHGhDT}_g=DeMq{AAx={JZZ{
z1Qh8TH2(1_Q|82_)3{izHJZ1E6)fLaZ{q%;oxcH>Lwy*4hwvRdGLfqu@ZO4*s860Fz;%X#2NRw3Zlk^5iX!QRT%s)J
zhW{neTcW&m21EaGu*jUl><_C;$T24DzeixEAC08T5nKtm(^iE5!sXG&X>&!vj!`G2
zMFn1Vh=5W2GU`b@1=&64g#1i$(VL9)u{Yobe0t~8#1E^wIgEUli-12!Nx%1f*#?<_+k`%Q2gS6A#71&cDTyH0BSM0Z_gf|+l5c@?w>P^&eP;H@h-lmF!8I)#=%VK#k
zDW}eQ@3UD{mDc2RL+`GHj>LK;Y-4z-W#h<7f4_FF&VZEyF$X?FL!a#uMDXCcrzIJ1
zN3fY^Boww11C4L4xhg5d)CDwaQjG>(vT45do&4P4pX5mSWa{UsGN(#^dTXsuC>b!)&lYPGSKH{xnr
zfYUeqCaYjYyL$2qo?0+3E(K-{8a^D_)a>6;g_+m=$~rQO5Mm`%b>Dj9-Us>$v_a(y
z-EIX7tsDQSr$!Bk4q&%VjAd9zd=xeGmq3tOiFe;}zes(j?&0P4KDo0J^robccSj()
z0_JEi;{2-ZgV!oZpsamOpNE|Q8c&cJh!=ynSM@@-9{x>mDQO(HE!&J5u)U9(@*Zu3
zpPFwU5#rd<&Z|Q|Zp5Albi^+eYxJa5H&Wet-`9h#)q``g+e|6+2r}YUF7%)pd_z+3
z$Z|nndt^67*5iHIRW3QqR!e7q89d~eYY_R-CU<>2sA&hB(&oBRY^e!rzng@B%EViu
zxoZJdCepIgb-b@DwQlb;yyq88C7uKfzdZlaGTfzws<0tpQd<>(Sb1c%P-7
zI8N)r*993)yhFX2jXV`dWrK;1kdyzQEft)(*P;Mrz1o`v?buILy2
zWnKw3GKCWymgSU2nAHUp{Kb1CebjkN-&n7u)9;S;(d
zrp-R+k{3g(XZ;}Rw6I+(;Lt1p#?CSa!BYnXOAohzXTS+1{B4y%vy{xIq7!fZ6R3xT
zpWc*}dfNULPL#4w!6o~fiEBPjbI==EkOz0)0|F--6zyl=s9@8CtIcEgEALJL1qPfTN;&g34&u^&
zAO1^}8;mDEE!$(a6X)qzP;jT6!4BA0#5%c`Zrs0vY6-6sFz13MgcV**)eBgBAwaT7
z-fY$H-K&A0JwZo4u1TxBI9lCo1oVCZg@p$T3x$dm8WaJV%OPk$2{mYh2dBU`2kXh}
z)^AaVnpaO%S-h_0QJ
zoCN4()-($G=3ZO^7gJ`SL1R8iYby$vu?09@AHA(lE~j)~UV!6h&z5V$jo1vy
za4_XC?gXw7seLS0R^4HsH2z!3W)D^J&y;|PF>Zn-$8VY_vBPnXdVMJP#<#5T#6tO)
zj6Y)*HN0mjmcy~_`~|ZWBn=2Pm?&($7l*V6qDF@)VD>MS-MG1{MU|AS3F||}cl)rP
zo~M8ecc5otKD|i~A&KI+Nn*YurUt>NinOkdPTA7gNnJ>-g*r!7rLOe_UwiZ8$HAcC
zMQ^O8QK14&Qw3iwg!rtImU(Q(q~o`@xg1s^5R~D21qR!>lgU=q@1(&T-Bco!7~r^^
zw=sgQ?!$@gQk?3fPV1>@pqx&kcFXE8ru)~oG$czt(qs*T>P>iwziqap87NwFEqZm{
z5>C#nhyX%l&;#iRd~DVU!UKt
zEET6YV^CjoJ_zI121=nD_B%5}Nw&X+f4)_;FrR)t1$h@*uGLwhp3P0J=M(LH#_E2k
zb=2|m^sW$go;^K=ZN0LaPxtcjJ6?8!hZ}g|aT%nO^Q8N!E=^(2C&NF!4M=+eb-gcL
z&74oQE?bNKgk0!_;$ye~S2M}R=13%XuFKS_TnN^L7~|479_6mr8PA`GZ^W}S;oy1_
zkw*FH>L#+Exrd@Vv_D>e=OON&q^Elkjj3@#awC=mxFG4Tg1eAG
zW1p+5xUG`=zq^oK16A>heU)47gz%r9b}zCu^HdppThUhkSV3Xm=Pme`9g!&H!dK1*
zwJ)p{>gR(q9IAA*K?pu}?gn-Q4La=9=y5s@6<2+1bv1ZiDr-JOCD4HiW-=xZRWh>p
z=`e5$h(rpfuZD+*dq+rGLs?04d~DpTzcyct1abQqQX)iEWmGn>6rU;Z8MtCLm
ze%+yt;Jnr3zRve`KYdCy`xClu=LR_jGaZ8nZe6OujgaDevxC~+bJq;z613-ZR4VIn
zYXkud6L)JCFRER+!z1+a<>YydzoFTq5aSZcAOZ~o(G6V7GV>=+ZDmxEXNLcw2xH?9
zn%GR91lo
zt*9<0eMVCmI&}zpzDxv-c~-2qvcAWFi2kFvc?Bf@wN|lhtLuT@`@}|a{z0}AIX7f5
zTB=Q3V#dQHH?W>g0i}NJA}A;bk$hjkX8qx5mE6Zxl68##X{l}U&76zkmzOs_Xc*$&
zw+>3rhtEhF!kS4d?V%xu)k2%|bWiN(PJq)Ma9oArf=Fjo9Ttht>7M>`hr7zV;$f<@
zp8cD*ekQhOTd5(`tKQE%pJd<1g2ZFRsCIRqN3Fy*Ux$NO`pinblFk?U#|&?yQiVLB
z7G9o#qE33ejxNOStzy>4rff_M#|K<*BCGye-#t9>b$n4QAh#7
zjyDpn0cP?$pIqy4e)jQ~bX<9cK2AB;d1m%4g6tmn7A{yKj)KfSHRIu&d2W@pe>mB^
zel(E#T)cI9svgRzVofHHlu^ro%)#DmJ#PGhPfT5ue_t9Z)6)7p1ZZ4|=K?_`5Q(%u
z`bzk_54IQsrztHfOGviMc3ZC;`qSb
zWDCQmOolB40Qx`QE@O)6(WWImQ8)hCEJNG-5JD}wPa5x^c}WSS0$o-ioP`~^B|FUy
z0$+}Ue|iiIjrm^Z(r3IsO-+7YQ8!?H>{ypbsRNu$UH$AHf>Ey+5W0IsFf}{E*gxuB
z?g~qUk?HxKmnJVbFw%RTrH*NWZlm#*+F!6g7q+}^}
zhQUd@hk7WnK@vI!uP|o%p;fO?8pTxgiSwvY`|_F6+_bOdjRb44(73_NvQ3Xs`nF-T
z714z76?>jdH4troFjsrnMVGR4Cwo
zp?B5evmga5F*}ohhje_J(x+BM67J9-Pv~D8UiI;3aa~JYL}jbHy)8}ItZ8-K+1gwS
z9b<*0FaRnZ{97I5N6pFAhB%)$|x>48DSkmUGCN37k<7iM^AsHYH$R|?upk0lw
zb&g`A;kl*5B2J}s9HluZ6qRFSJvov+jt
zqY?({eY9m(DJTYkWpXQe-Rs$;^6R`j9UbyrhaXw3r6q5c(dyBNTAYO1ZtQQ1&)*mOofujDleN9Tsid;+3r^JMs|}7e6?}uuoeEJ8ZA$z!T`!;38X6RQZ@0+=Z_n@t
zsfP!94TaK$`go=c2647>Fn>F>pN5MMea@@0DyshSe*lDlUD^}?3{e{EwZ@7C%ScW1r3y=J$qBf2EZiWWQel)X0pzQ&WythTuWr-e?Xj^c9%
zMH2)k`z^3X$IN!roq(Jzv)JI(oHZi14LlG6nsQ-ed!L`fSz1nR!)=RpstKhR*>6+P
zK#pavy^~dTAK%7iMj$_{AFWoSHQF|A4bFV>0{4`f-s|Y%Dgy7#K)CB?Q22n<>rLqD
zs5a*&VhCd|O&@n8o+LOgnzw=B{kbzq6=W#6LnOZB6j*c+WLRII<?hy4IAcoA|aGw8Oo4(FTe{e7@0+0&Ib@EaNJdY!L^?hV7_qC
zJ}2*5+3MyrW%R*gpCt}8^`KY56)Ayhpj=PBifD{ldzH>?k;W2S$AXl^JUTqOZ#{&v
z+3p>!z{&>bkJb&f5)7YA(rt(v;Xy?<`RarCmGjoKDzSh$;G3#;+Bwm+;89g6U;$fQg)s3(OMIfU1@iRq6agIhp4+F{&MLiHTv3tP)p=0s#p9nyd^`34hy_$}h_M
zT|t_ov+||#!lGADjyP&U@T+O%OCp8*`QF*LHd?D@O3SL=E;by!o*!XiZWEIgGie{<
z4wR3nx-Oxnv+>B?*P1v?ip6N*to12=*7mS;FM{{HS`epg<>Jsx?Nyjrif3iheN!=q
zYV!5i(Km;JOoMj~3^Hej0bAMcb(hME1nu%+Fdv?lTG2F2hgbiDf7H)-myj)xM1(u5
zt!fZn2SO`8#iHS-OG&fXi%VNQr9nDuV@1QJ$@^I06QB{DfVRQTkzx_6M!PpSO8v~8
zSU&d+viKof!@p1?b&tE09_#YuJm{6r^~c*I_s-2{v`a$i{EuHh)QvRrqSzs4Fu@!5
z$8bSjn8A`M497EhYAP-GZQ2gPF6q(it_s8OWNQ*+oer#b8mihNM{GOlY
z+;n0&oTR5ytwQeQaCdI>QY{+NPpLn>mG8@veTSy>)2kQ(LSo20foIPyAWq{XZrObO
zx|W(Y%mEBEcNH>o#22LnYs|3J7dv^qPaGizd4%33hwI-LDm>HJH=10=&~tIdgOq&f
z7z6WqA;?}(2<{Vmg}bgk#C_hRo}Qw3vgtmzGfRKt^sqb>C7@4Hc~Y{|owGy5tl|$+
zNvtO4uEhQrSs}XrN3(1CoT8Q@AyqMgr9K0ZtBYhL9*v5jV)PX(3dNy2{tt)TFZd_HgiW?TnqD%lB&M`3mv2
zxM=Yky#0jiQb%RoEtL8G1%K)8Kb)hD?6u`?oXA9AWwBU+wix)PoPxto0!1k9us74Ti0=BMk
zG^X4doaeU*D?5ra)iz@5_RZ#Y4r9azI7|@&4n#Mx99(|{c+4AN@l5_$;@lYWwP}J!
z$^QEfjXJJh=0hQJC|h)+9nIshXjqUMD}y!uGDotgTCA$@uY~Gu=W6nQDt$SYKKGmQ
zOSkNvgJ=AY`~qh|LeEmIyFt9%E#%7wM-(-~#{yDR6PJ=CoHa6_0{aIUW=4gs7V8>}
z=qE9xEst_v&i%!jzvH=?N3E_RgoWae#s_3f5^O)^??QY>3u;iX9pi;2H-L=a4oRZO
zbbx~%Ve+H-oo~#WhGvIp_Qbhi>HU7o5g84!3O=)#v?p)u)cjl40XZqzYXktThJda%
z0eaXkobwkj6a9Hua{+y75aB99|0yRAn#^dZlk`Cq*Z^w$5+V`F7B5A#xtb`*-_K}|
z#v)|cYziQj4dg&eG2ijJ8k|!i*UL;>m8*L_(|Tm<+t}{zyS*S2D*h^IB#gkjvx!dQ
z7X#!pdgZ2r$xVLKNe)fI!5sfo=~D!b*6o{&Odf|AI{U+McYIf^YOK+2exK55|2
zUCP7idRYrS1{YWB7DO9eKwh3kiivYvj)|oqJ9_tBNi>NOG6W&Gk9WX}z`^K4Nu|rA
zXn#mNaRe+hZZ5AjHno_@?@b#yLK8$xY#YT`w*%Hd8E*Jz(Ra9@_f@Hu>#pm=w9_k2Ctg(dO$oOhImMbU<3YcwCbv%$W
z-xiN?Be67{TTYzY;(hF|e?T8X)0^BCK4wlLE_9Z}KY{)C;U%YB|su+Uceuc~VbltoxnW|P{xNd4!
z*#P8$mUup1mqpN(EN4B5N=lK50U$DM*6JPTMllms&uWaw{*7C#{cG;)m>mx_I&b9_Ul|@>M;}Be>w(CKOY$1Zriaths)ASykBm
zTt`$54>DXAjOXzEv!f%GkSq}gqV5eV>^Y8`3ohvZZkD`b#0i(tmk{e>YUT{rR4?Wu
z1f4VfN;(3LV=TF=6K3TuY&pi=N{hmRxC`XSNyd_)zQEWMeELCGF+wE836Ys=j$y>eRem{dlLauX#QSKx1D)Z9M!?1Q~6gX
z_%t`21wE}NKKXIOx3I->!f#2{z2FKqs-Ux0o0X2f|4L*aRt>ZuMKoAlQcd+Jibxu<
zuso*RU5Q~-q}CG*FK4mZ4$n>3`06JxdW?-S*M!u$W}E5I8Z>RE_Omlk~wjWIg{wR?B
zlO`av$aVU>hYO6gqm3Z7$6F0I7bl~Vm83Z2hG+*#fbJ#isiQsnjroz%vI7;7*am-HG(F&u9)#DA&-gbLsS(Zxk*+$&)IeWF&2Ls6@!8b;+wwM%`1-_af-9BeP8Xsvm
zLhy?dukw1wH(3sI>uL3Fh23iHL5u;lVPQOL7~#Rk`bPxZp)j-h7;E52%{9ro12V7A
zvw!wyPEFA$tMmSMrLR)a*8~K76Vo9oP=Dih+D~iIV#@*hCB(ZB?5mqB?-9j_kd{ov
zC;z1qB`L|M6_L|7?k~`Q%kkiSG%9d{woU8eHs)dr~poPg6S+5>vmP^%GVLzj?8m
zRi9J#D7g!31)AyGyHAd%142G7dNi!zLkk0~TmdI1g4;lWOIg8d<&xSHcYK*Ri-asG
zo^FeJ$?)wTe
z;rmJW1g1)9i4pyxF7EKnmMkHa297ZJ@+2c+aX7(X<8cnwBO03|xjlEFF=_#bcxyJQ
za-%`ZtaYBL4*sVL1bRbS&_>h3n9>Zj*5d-e`*ar3m3}@sZzD&AzCVMwD51})mq?jc
zKfF?8iAkf1WK^`dF_cX68hdG(gTC5`ko*@ml+?bCH6do55VnsnZhZXD=VkuPlQCG_
zc8N$=(u5yeN}iy}_qOZ-CpuR0Z-X^Lg_(B2*&o@)D@)y`$Zpr6*Kk5u=G2_gy%oPJ{SO-?WpDYzefwq2`dzY)yNd2c){R_x~Fn0HCPs_3Y>OGT5A
z5?kJU9!%p{Y)N^xdYuw07s11k8
zYslprH}eC$gdMFe4Q>a4C3ZOBX~cl#86f(#F#8)dxx(qQ*7Ut0I}{AtQh-hqE$_?O
zQ0Oeq>)n>d(hZQ}LLdP*e$RCErTiGk0=2BYZDLwr)6nd2Djf>hK<44<_lc-s*Grbh
zt>dhO01<~*er3Nvqkc|*1q)UFh1j*07#VPW$g73$N2VbL-EHCtOUysZi82Ed9{x&mv
zrk9?@kJ%&gPj>z)D=|eDYwM|urm57Sq|Hc85v&q7YOvehX@TyvD^-yvyvTlNdNZRW
zW)qZO9Fhj(Lleb7D8^0%y(7&zrb6pIJW8Q}O&ulL5KUuSFUxJZj>^~wH^^t^Ja?f_UVGVnZFbemeMg3sB~ZwpOo
zc%x{Pe5wM5nVDqEA>A~}#Dz;O+(KMdwY;)r)bySxtz@+$DR?uhi*IPfAuq&Bxvl#Tmv8{cEM)3V`9n*C^(tHn>*j|!^vb@n9D
z{uooDwHzG#9BTl482o;J<<@ssK8H9S2R+z#fQf@n=Z6&U0vBkBv;Py^gVrqL!mZ0P
zw<6ytlbft-&{uB|rk`gwrrVCu{(e3`qE=+Nw$_HU1aGpS9_rJzcQr~Yue)qNHan{Q
ze7a(33?+KXD#<(@F;z6Os}B6!oXX~Ud(w7f%>?&-;0I1>e5A@G>q4m`k}K6S+ta>K
zzYrFIKE25`s?==;&LSVQf!Wg`*D~Gixz+bCT89-mKkXlG(RV(ZF`I3b+HB0F@qQgX
zX4tRw;5U`8-}FD@2e+Hr@e=%sp981ne>fY;yQy?Zc=3Kr-?{0kQ@8MJPX0Dga}xz(
zwj1|tUM9mZ%Ks4xfY1ZNQ-LDWrl-UvBV#>_GNDAcRZ>QwjJm&Q(%w@n{sQ(4RN;1MLEAOyzID5PVPr
zFI%ii8j_IqnSEW6lfA|yimRiT+ChV@{|b|m(!O>-LfL|B%2do=q~d`5)Bvgu+s;kP
z>NF7BIUeFlR5Sd#>w~UR+kBf#Js2z03I5L9wtA5yMes1GWyIX*8oXeA5EJCtTbmq!>BY0KI1|7Qu%q4%|r+QTy9A>k=IMCimwymVEv98NWZ9
zpVxNJpF`YXD&&LC+1>I^qIY{eP!
zs`)Ub@Pbr+0qXKE41Bh%^Py^`0AKH-j&J9!g}NJJ7p4i^@LRRFNr}Sp+9|xv?Or9d
zZk4#OL|E=?&MPh>vFo7J3MS3JxF98@o=`G64H4*fUZ!~BAp0!c)#z7BvMkc7#~Nh^
zFq3&_rM18W_+HM$n=ZA&5s2J@8KO5VB?TDKFGY3mpkE@i0ZNjKl@qwF
zM7lQI&u((brvPhR?PzH|&ziX3VS=bA@h{5D=(2J|bf{qo(nVI8@+Y=`JxXss)s*A)
z&%CF_%i;fRZ)KHXNVHhqjl84iHKr;SL5k+VA*PeU{Da^ZG!
zwc4LbHpt)j$kU1g^0wWfzy?keHNtlB+gkAI5oR5s8&5dTNff2#l_*#mS-SC@
z{Po-92@DyRlGj;ksw3cQalj@HMs+;KXxQ5zVhpT!RTV0hNbhO*gTbmA?)pA3*TmyY
zsqrD5`$$Ol`RQhsE8}0z$#xY*EzAuCeidXqilIc=*FmcEScO-iodixwywe)#^U`Mq
z>M#`iiw9Fo8pS9F1MLQZtwtx)UxBgG*6NjurYU3yC5P#E&OtJ&h=&&(k692#
zA71J%QbxKn?H_JUO-bGaPUmkZ95c_XP~oxjL65iP30x4lq|*M_dUZK|2kx8bX-8Nl
zI5$;-?l-l46|x|L^`cnJcoBh-_kS~y5y$3hzV+8m5%QYM?Ds(J*A;}hRTOd@F}z5gsem&
zordeA5@>`+A7`IrTuj{mlW%0O`xMu=()Ah@1nqmx!Fs{t!S?WBQ>FJrxMX((`Nr+n
zWD=!}rY0Gbc`hi>S{=9e!<22@g#VS;n)=olY6VyFJw7I!pw}<~BXc1+(6tMvCKL|x
zJVHMYh8B_i_b?@#YhX0p#@om(v*+TsDK%ndg=7dR<_NuU%N&PK<=N8;CX;XzM^A
znpA)?vecd2s@s#acq5@UB7o}tqYIt>(}en&jaV$dm{3&_9RWxiZk^HnJ8{iBa5#1Z
zSL<-JUSPa5X6=QicEVEI2Qp!5WQZXP#E|)GunwNLhvEN02P!A0C;KA*&WSUpVV>At
z%?zXywlUOsI$wLSM#P~rV_VWNbmzBda$Ff<0iPe`*w0*)yFMNt`U9r2oL%n34P0K!
zQL@R!A2#ZnV?wIb4`H!)c!}64epF`Ltl~2X(SQth#)uf9_p|DyV`S=ZYI(h`NTi#O
zUH(0$fhoXQZ*jZLKPq;up#3V_B9|&BqA&(L$ScHs?lVuVNv?gRRPHxj70-Q*cl3+d
zuwv<^&)KvlCXDP>;C?7=BW5;kuM!*exQU!Jlms{aO}J>-eW=5~I1PO3;7B}%18cq0
zJ*hBj9MAkazB#|#ScNH1VgqHe>Ugx^l88X;5+d3z+D-KTj$QFT{ubT8^|XT#TV4tx+y9
z+kovJS2O(xmSf4(JJ7PIWWNu|n|=PGdF%6N&Lq_jOO5hg=1g<`YK)CsNRABd#F=-g
z;lF2Z0`BdpFs4
zUxG~*mL=By{WoCQQOz2v&MFtDTs!In0Y|#NNl#-I;{Iht3>F4YaaLWio=Tn|wFfEU
zvsGhLg1xZd3Ein;d7gv7Sxo6LCaV<7%Wuj25sFhjjuq9(;eDETGV0`cG;z-mAhWwS
zO&R7I_<-oD$NMz=Y-tTe?U=Z}tZ%#nfG7OioylyXYeIMm9DdE_?)Wv*w4RuSoP~vL
z8lm#7agf`uKpW-Hbcm^rBg{%@{H1BXCI%UVJ@$k<>tg$N>gWXd4<|eF#F?Ho*5}
z{)cDuopbrlPHg(mt>@x1y$|o-&h!bnCn-Eeazf_O%_S*B*os=l7|TTM+;s=YsPQz_
z`0yC6vNm&ycS)5v10VaAMK~iuU>T)TA5lc6=sJAAypC2KjqNm3hDEp
zj8;D_ed@saxm{jJnL~v$%G8^F^BCAD7KE6a9p?J5q?9V`*ws7GNJRZ_8f<?qp!Dt83{oo}zx&>8@z#8z
zCr{kym6yhET~xp2x9Odq_=shAA!7xh$$UZN2Wz<9FwXulj(~MXX>c3|_D1^)1qU$o
zAM8qRgFm%GGMiKLZM^(4pAKznr_yeASv(kMN-8DVrySV53hA{7c
zs`^+#O7=5|eWg@+VPLZND8MpsgRG+8OgWO!CDIrw+(f(LnN0?a!I5RX{6)afbvhJy
zZq~mtr>MwPOw>%U#|&!6_Gi?Y!$z
zgHj4pB2Fv5*W*BfD3JB==bbbot{-T3I@u00l?JsW=P8}`Ul1CJN8ZC3RPlC8k;Z0W
z$xpI_a0T{f;)rfrcu2Ug)0+}SIP{B11LDM9kwJvf8CwS5xj?M2SR9#PQxphF)p(6S
zPpxW_!q48XU+^y9TlPXXLqlbZ8o{8d@HB0B9mHM))x44eXrVTDt%1p7#S
z>)ooQZ7C&UcJ2$<_Q+`n;gdy+%lvL;KXN(KbN8a*CG~rh=dX}Y-(qjL^|or=Iy0(6
z^QxO|CUO>(3s1fvM_#vF1zSB{Zj~<0u;W61=;@11A{w7Cie0
z=eD6Slv&YPII1EB1VkBJU*aE{*We~EWTUOX=**7y;w^a#{_)qYjGm8MMa?9f-D=v%
zP!#N}`0oP9eIV0wfi*moXdbMK8JIv(%A}7O_ot5t%(Fc@3a*p0EYRX#!;1Mv;_8(#
zwDp>3LE{Os^V$QUYDH09Jm{V6XLcQN)u9qxqRbOtrd)V#3n^Fz*9e+J38H=fUjcF;
zjo%;}!85t^WU$&OO*J3*D{ob%o5t5FRU_~JJJIql_4|ceAX5;DX^|$=c~THv*4_0j
zpMCBCuHOcch-2#l!^@S<2Jyg!Mppjm`e^n}9zI>JaW4vC3jOojjGBDd@2DtgSI
zvL!Zy`!5ECa5tE)FO@Q8z>uG2Ftcan$p&-
zp{ggj2487s=HjE;%OcI4E*<&$){Doh+iq-ZjbS3k3|b9U*&3O_jrU&+H;~1%Q;nr4
zM9x0XR=sfd=Z@~ad%<1)e=lbKlG6>lLsOs&M=M93
z+j8|>Iot|n7@J7!23wo^K7RRzdm}TrdUm?89On)6dJ@k5owr@N=jV<@u|J1AT
z@?RpRBu$c)Y~Xz2We^I=i!Kax_UM9`&JJ_7+p^*JlC^tLD>ND(E?=VqS@kEfEvX&E
z86&TKkPeM$?CxHUR*IENC~Y*ooUn<)S$^iV>d_ar)E5goZ?4y7+wHdKrk?h^b0Ynt4egc8rk^fJ8G=0l@`1wz)^D3DIYS81J&T<^^)4l
z=2~#-mD;=C+!B7t&O`Oej4nEJ&7iS2-VMUHg-+4xd}aS5=kECINt5?Yz@K#aFKZZ$
zZ1Ew>?IS1cJ_et`7=W}%(a1>O35#trNZ=UeysHB!37ce^a$r;y4n5)aBFtrpES>XV
zU9n($gJ3p62~H^f;w$yH}2
zypKCQT02NdV!AZd6sfWiB_d#aL)xqds;&0lzxu%EFCTnpDSBni^R}QAnN8^V@US7m
z{$H*A+rPCxC~8``%g0ZKov?XoY!g)o!!CuX?PooK1RoMA3tNqFx+_mZ97{(mW%NOXrKNfEl8ed^Y+x9iX*Evj-
zIz_G2itT*{>cwdJuNcM8)CHw%26BuOUPg)(8o=y!R?=a`*@^kl{22^I&6J!q^B=gNI!A~UtdnY8KU^mjzIEs_yd9glVq3|bncfiE5_A9-%e!rAhU{q>nW
zE==Sck@x@o(EHyN&VHl#358(sBbo0u8&0wVy@9(!Gia{i)b}Gc5w#JTK?D=EM0}hs|Nnf~;5B~+
zaNCqwXvMh4;<&u?*|_3bhtw
zj4HBOU>I32h}cB5wpe)YThk|Boi0@<(k80vz#!5fQZN4gp1G5i!E63()H5Yy$kQ+-
z%<=ES7+`jI5L@Rtx{C6&aroy$%2hTAPC
zG=rE;H2*>A=<{1Hy<6LQV`Iyn<~M#fzwB$6Gao(7Fec-xd)z`kw!?=H58VN?$amUu
zE7f+hlt-RxL1^Y1hyTQX-;J4
z{U&e^GIx-4!nFRFF;m#?I5q~Ch5Tc?B{t=4;y$U(PFskO;Z!qGZEthZ+?xo`F;&@G
ztkBxpYQ0_`U>YxP8hLNfvq`7^C#8TsDW1$Vf@R?&Gcmw0F$WQE@qLNuTbQJf9Yq>@
ztt|r%Qf`H~UM?hsYa8g1DaI-`D>(X@3BN+`aL4i=_(&VQH~?wG-)?g=-{yr1dK5l1K>@j*}kK(1!WYTO)gZ49M6=rNk$sfF0UZgC|QO!>ob6ydPy)e!D?R#7s2113L{!FJ;HSS
zVqqmo$@Um?;zEpff_tPJnFgMr;jYYpdyGX-bE%h>?
z0TLsHVoaJ8#tP_Uv2SEl!EJ{xmrw_YxxQhlUAX**2GHX>BQq!jVOT&qFv!CA@CjWB
zZ=D%96iMHX(}1mZqSNv_FShU50G!SMBP4&vD@SWc+S&T
z(J_*Q5R`I@^jR;ljQA4MK_QG%imZ$2%F%Uqdg~fE4BnAkGf}Y^F8`Gco+dPaa_A8S
zL6k7iDR#|PNL5p`v#;?uL(n6u%aR+FQ6DZxHU^M_jf#tm7}ZAbrWT6nl8t`qaD^+y
zx{sQsNfbVa$9Z;efEbFwo)z+knb3o
zSuAt$W6_Is7=j|L4QU#1Y7$33)m`{S*eu&iwKuPQUs2x7TOn(|Xl&`Y&|@i=%R;K(
zH?ebOCQAof8VvX9ROne1OT~mkp@=t+fS(IApd%`YG@dc*Y?#;97DJof`M#WuX1S<{
zUC4>CU`PSo&pH}R$2wg$VM64XD_GqOWH`le4k9P&8u<|}|3SF?v+@VSyti7~ma%UP
z*@8U=Aa%IDTwK2p`a^MsfeeQN!z~C2U7+pCl!{qwjVw+`qY#Dgy(B~2R0LV(9w5C0
zHCkoiEaa9^K$A5XLIYQ`knP*a&DZlnvT=s$p^FkO|3uUWnuT=+3ju;~D~LRzI55DF
zWyTBJBNs@CO~zQR*5`QwvG+gHVU98e#bWs9#^`iC#Q?LJJ0GK$58e`9iFWr~@HVexW*j~C(m6{a
zP$$d#Gkkl1hrUW^oV(UTBWaP@Wxq^bErmz9)NT16&g_h-L@MP_48;tFQxVqt*gK28
zBr{oti*^vY$*zy00LyiI+;v}Q!jWX;Gi&LaA30jM!CG@fd>HE%TMQkdI523p+5;b(
zU?d|dWYcuJdj|E14g}gkAl0$CIE{Q>WV;AR&X8`QO1^A3WppVw%i*{{n$4KJ9J=E{
zPZvwQ|Bm{6h~apKfkCBGsn)7NAsFnFAAtdo{!jlwCdFxaEW`#QE!XE{g|V%X#CpGr
z2Au?bOIF96cx)cuG$Y20!DxFMEXuq=*SUpLzZ~^>RF3~+|3&8Eq@p7#sgF!QK|(>7
z(s=;)nNo5Z{a(`Zgp{2+sYg_+)hg9;T8FvGT_DNiWuAOWMPP{^h{i48jJnZ=B<
z&m?6nG1eB*08WoRAd_$26zhK0`AkdxCD$(U{>$ZJu}D^ZUhESh&^Nhwo3hB(B3Z>M
zOJ_~hN?0p+c5(=XtMsKHh@jGqR$UIo0HlC4W%|M@O9x+Ck__|2NxI=6XV?ARxlU?0GtetOK~v>k4f(v
z_L?30JU09AU3_+uhQZa3;@VM5dB#Qf@Ct;fg*+%>2V;XIKD?ImS+(i
z{eM5`$)F_Cr-XgMo>@Ri#D!zoWsz#f0(IqTwNfYs!`J~J77|uDu46wkT_ssD17Dgp
zMZXZ((qJCGSc~R(1h~8aDBGlLlf|}x>lq9KCv0h!`5hXPST`?lR0U$f;;l_q+
z?=-F5U|f8zCo(>XSojO$S(OZwXuEDj{eg^j4mQQ?M_1fd_?@O&J=LT%a#30`4ZQY)
zq6t)~RA_vem%#)Eh3M!dUC^NeDNILywA8=NaX-I%%gX91Bola
zHQG##Jv-biTyqfh&|sRGb_uW?ycF(=mVX3e%-Idp3?f5F0)yUT0Aia9pWQM*WI#^p
z@*&go-tVst^Zs6v@gNE)HS(*Cy076Ll$KElf=|Cx;J9BQxI);11)+rq7083kXcI
z-N09|FtQV1S{7=${KpF?T@$n4M5d)uDcsY7oLaWPiw&D~!K@TyL_Oi|yiAFK@}~!e
zac?TCBgVBhOt2N}BB$34Cq0*927p9EsWTC7xS_4@%ZbYqkXUCZtuj-hHH5tt2JpbP
zp(L)DpM191JMd5IyR&gYrIBA(idB0v2H>o6Y2y%OYmvZeY=!E4mfkYbG?w9t@Om&k
zAxu_^3}{Ig@hK{7aqF5+|X5bik
zVaJXg=@>e_1`I-Ab%aR)qg@SiR$z#7G0jwyj<8f(Vmd%6IJ+sk)gcdohGKmc*fvI~
z?zZkarPBCDw%O#EmK0xMuwEi-&YefCNyRHqHB_JkKS;J?a+pJAS27$Kf+JK)V(U`K
z^mh_}r=2cz?P9ti5;ECLWJ>g)VlS^?j4V-wFeEj-$Vl)~GXh{&kWqD$?EJbQ-dF}v
zBKu>1C(M^iWsQBJckr^1dHk$+R&fD+t%d|yGA+`J)JYqFV#TXsv9Mu=<%a_(3V=df
zZWe_-N~eFoFflWhWR@94o`*AHH^AtHm~hdeSNBOp2E=yc1GaA!m;8|)L?%(1bGBmN+QyzB$A4@Kgkqmg_=
z$KP1Va`0AXT4jVW^SL;p#&H1gfJ9rk5&QH~AKv(_AonVnZ-NxGB8^8_p#(?=TcQyz
zn>er4mr5XWb-f)a>6N%^Wy)2?>m0yoZ_F<6
zHo-~~lQqiQ$qH}Bi(tdcJ`#5Qfj@oSFp#+tcxl<(LR3cM-12SrN#B;ey$re1GIY9YHTA@%(V`#Dnsk23R
zrW0|v$f71CniysOQGEquj_yT(1Lf5HG(?Q4yc;ZHhmT5xobWh3H*JHRo3WOzg|1
zjxBUd(?O(I#!!agX$3SHMi_AhIlpAGDpMrtD2)&mBlVHdy)<3b{p*8b*Cz^Z4RS=X
zBvrqZTviN&j>XS`2ir71ftANwMwe#o8s%r>`(O;F+kLV@^bI7r*2D79EK*A;ON^W<
ziUiJg`pfn{=X1Kf$K5VsOmGtfuNcPJx}P){?OjQUPr=G34mFcq81%9P<@&-B%G(^z
zO8{5I8N?ioAq`-W@pB|G62=iUbaUJPw*Pz0k^Mo$q92Rk&(HxR>h+|-ux8RJ3#QG0K*PfTM(#tP%%*1x;&@Rg$$J#(K2p4Q)<9-RF#>@g!C>-CIW0p~bn8L#?K9VE=Lxt1%+^dNOMH=BA((v>8W*#sdWYhE0xfk(-p
z9<XmM(IH3*X8O=3kWkCEjZ`i;%bYz{D{tgo
z9F0(dF?{5&SWX|90k`RnNW#UUVs%;qmW5^5n2M&fT!6trLNA7Q_01w-l6S`<9TGq;
zTSLfMWXQIHSI+7I5>;#L)Jj&w*m5}5MQlI@;Bc3eD>q>K)xq*CWN%VW@2Ab6!H)KNVnk&~>1g)2BQY-2{k0~@GYy*XXg?pIap
zeR}8OZ?ZTUCavW*W+z_syqN@Iy?18wGA2_;rV}oi+zcx!R7`CGjI*Xh0i7CmW6FdK
zJUM#Z0XQ7#DYX@yd5IX6jw$?GLinaEx69CHtlOOs=X8$NFz>*(1|qVdJXx6pNFCVT
z0Q?~jPqO@P+Vyyo!l0HxK^*!MeRjz<_i>x!fHfY28wqW)-4ad&%KuI|$AZ{^w23nj
zllJA28dRqGs^k3+d2i6mzsstj4DM(tHmrtA2{E5ssFWPQCp|e7d7va0BI2Np3msAR
zx#R$~`Yev75dT+F5aR^FSxH}SG%xj36^z3#S}pmax=j!>IsP`36W}7##@CiDffWzI
zwue*5hOnEj0Y=38FBAp+m*uF9L>LSF+3sawA-kxFH#1@n>xoCU#X7mAOk^q_tUk2X
zm?f*uL?j=QTZPMN!uahd!yng~8Zr~qvYR3UKn}hqCjlcg+UDyJO}UBu^>&*V7;uq1
zNGT{6lml-)4?ZoFfax~r5vhs?P+h~{QDqyEMH|NA0+DkS!z+89gN=q
zCYX5fK
zhax4EEdLVMaiN$z))DytEbm=Y9w?Jvkd~zr$j$)uJ*v4>oKzm0_A%31|^yDjYN(PDUo2?W{1FL=DA|)EeeRK>A~82Qd46>|cxe?WW2)8
z9kcc(7|h9V&dspAv{w2pN7fo_K+yVk01N^1B}&;H5bhe4eRlx{BfcpQE1h!fATvBDV`
z<#0-q(pKx2m#?rw7P*7CDew=!!+`z`U>JNoQu!Fu#=nL(ba{cOKODc9PR4OD>polG
ziRs4~)fny0fJDD%($!6JcxbaUx*M+d?}aWiG&Zgy1*?oDw8q&dk=ZZVKZvXNWgyfX
zqwuuy^Ur3=UY7mCJNJnTXUUvs{6ld(`sONA80)bF$cz<4*(gKwz;$;>egO|=Ii87Y
z-XR78i0NeUL_KySgrp1*X8NI62QjS)R#wbQcT=MjDpaPyrrwgZXcZ&N6K{k^_H9Tz
z)UZcQr2A74m)p{{<7r)nVl94ji3T_ifs2S40-QAij8GU0z5NEt$u2{*0!S&Dwz)iv
z=c9oj(-X^WPMPi2hiiKIx8k_8{)f|LpY9AgdR|1=H}|`x1@J*@gcxb@WWbKT&x9wGticV6}TMvTP(JPw_d
z^Mq~0r2Eq-ru=QWNTk(8h)l+g$SJM8o?*XWqIcEvJRF(<!Asbfac8$FL4yL*>IeJ(uhHqtDhJprn7V7v7qw6p*To(uosj7b}QyjizLLzzs=<6nb)FJDQ-7E4UqT=c`
z3_95PPWgc^7&b+YdKwAc93vX07k-sOb5ba`CpQPzn*r!?C*nLnvVugm6S5gq3t<|r
zY>Jq1$ajZObK5;G4K0)7eKJMecsnuWkhS
zQFGRH4KfUM+!4r}%zmFc%Tm9a$u2kgW_0y5#ux*z4k%`Rn@-iRHN@$5oR*z9t4&5x
z+0m3>;_1T)%dQ#cXEP25ZS>7Ut+@;OobE2onQ6l_V+2VWH?1{y^ok&<
rA@KLXpv|Q(w5h?L$K{|hhx3T}wTugHSH00000NkvXXu0mjffsd||
diff --git a/app/NvAPIWrapper/NVIDIA.cs b/app/NvAPIWrapper/NVIDIA.cs
deleted file mode 100644
index 5fd58255..00000000
--- a/app/NvAPIWrapper/NVIDIA.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using NvAPIWrapper.Native;
-using NvAPIWrapper.Native.General.Structures;
-using NvAPIWrapper.Native.Interfaces.General;
-
-namespace NvAPIWrapper
-{
- ///
- /// .Net friendly version of system and general functions of NVAPI library
- ///
- public static class NVIDIA
- {
- ///
- /// Gets information about the system's chipset.
- ///
- public static IChipsetInfo ChipsetInfo
- {
- get => GeneralApi.GetChipsetInfo();
- }
-
- ///
- /// Gets NVIDIA driver branch version as string
- ///
- public static string DriverBranchVersion
- {
- get
- {
- GeneralApi.GetDriverAndBranchVersion(out var branchVersion);
-
- return branchVersion;
- }
- }
-
- ///
- /// Gets NVIDIA driver version
- ///
- public static uint DriverVersion
- {
- get => GeneralApi.GetDriverAndBranchVersion(out _);
- }
-
- ///
- /// Gets NVAPI interface version as string
- ///
- public static string InterfaceVersionString
- {
- get => GeneralApi.GetInterfaceVersionString();
- }
-
- ///
- /// Gets the current lid and dock information.
- ///
- public static LidDockParameters LidAndDockParameters
- {
- get => GeneralApi.GetLidAndDockInfo();
- }
-
- ///
- /// Initializes the NvAPI library (if not already initialized) but always increments the ref-counter.
- ///
- public static void Initialize()
- {
- GeneralApi.Initialize();
- }
-
- ///
- /// PRIVATE - Requests to restart the display driver
- ///
- public static void RestartDisplayDriver()
- {
- GeneralApi.RestartDisplayDriver();
- }
-
- ///
- /// Decrements the ref-counter and when it reaches ZERO, unloads NVAPI library.
- ///
- public static void Unload()
- {
- GeneralApi.Unload();
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/Attributes/AcceptsAttribute.cs b/app/NvAPIWrapper/Native/Attributes/AcceptsAttribute.cs
deleted file mode 100644
index 7df15fbb..00000000
--- a/app/NvAPIWrapper/Native/Attributes/AcceptsAttribute.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-
-namespace NvAPIWrapper.Native.Attributes
-{
- [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Delegate)]
- internal class AcceptsAttribute : Attribute
- {
- public AcceptsAttribute(params Type[] types)
- {
- Types = types;
- }
-
- public Type[] Types { get; set; }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/Attributes/FunctionIdAttribute.cs b/app/NvAPIWrapper/Native/Attributes/FunctionIdAttribute.cs
deleted file mode 100644
index 260da7d3..00000000
--- a/app/NvAPIWrapper/Native/Attributes/FunctionIdAttribute.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System;
-using NvAPIWrapper.Native.Helpers;
-
-namespace NvAPIWrapper.Native.Attributes
-{
- [AttributeUsage(AttributeTargets.Delegate)]
- internal class FunctionIdAttribute : Attribute
- {
- public FunctionIdAttribute(FunctionId functionId)
- {
- FunctionId = functionId;
- }
-
- public FunctionId FunctionId { get; set; }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/Attributes/StructureVersionAttribute.cs b/app/NvAPIWrapper/Native/Attributes/StructureVersionAttribute.cs
deleted file mode 100644
index 9752e65c..00000000
--- a/app/NvAPIWrapper/Native/Attributes/StructureVersionAttribute.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-
-namespace NvAPIWrapper.Native.Attributes
-{
- [AttributeUsage(AttributeTargets.Struct)]
- internal class StructureVersionAttribute : Attribute
- {
- public StructureVersionAttribute()
- {
- }
-
- public StructureVersionAttribute(int versionNumber)
- {
- VersionNumber = versionNumber;
- }
-
- public int VersionNumber { get; set; }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/Constants/Display.cs b/app/NvAPIWrapper/Native/Constants/Display.cs
deleted file mode 100644
index c7a01b81..00000000
--- a/app/NvAPIWrapper/Native/Constants/Display.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace NvAPIWrapper.Native.Constants
-{
- internal static class Display
- {
- public const int AdvancedDisplayHeads = 4;
- public const int MaxDisplayHeads = 2;
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/Constants/General.cs b/app/NvAPIWrapper/Native/Constants/General.cs
deleted file mode 100644
index 20468c7e..00000000
--- a/app/NvAPIWrapper/Native/Constants/General.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace NvAPIWrapper.Native.Constants
-{
- internal static class General
- {
- public const int BinaryDataMax = 4096;
- public const int UnicodeStringLength = 2048;
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/DRSSettingLocation.cs b/app/NvAPIWrapper/Native/DRS/DRSSettingLocation.cs
deleted file mode 100644
index 27f9a24d..00000000
--- a/app/NvAPIWrapper/Native/DRS/DRSSettingLocation.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-namespace NvAPIWrapper.Native.DRS
-{
- ///
- /// Holds possible values for the setting location
- ///
- public enum DRSSettingLocation : uint
- {
- ///
- /// Setting is part of the current profile
- ///
- CurrentProfile = 0,
-
- ///
- /// Setting is part of the global profile
- ///
- GlobalProfile,
-
- ///
- /// Setting is part of the base profile
- ///
- BaseProfile,
-
- ///
- /// Setting is part of the default profile
- ///
- DefaultProfile
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/DRSSettingType.cs b/app/NvAPIWrapper/Native/DRS/DRSSettingType.cs
deleted file mode 100644
index 4fc45d0b..00000000
--- a/app/NvAPIWrapper/Native/DRS/DRSSettingType.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-namespace NvAPIWrapper.Native.DRS
-{
- ///
- /// Holds a list of possible setting value types
- ///
- public enum DRSSettingType : uint
- {
- ///
- /// Integer value type
- ///
- Integer = 0,
-
- ///
- /// Binary value type
- ///
- Binary,
-
- ///
- /// ASCII string value type
- ///
- String,
-
- ///
- /// Unicode string value type
- ///
- UnicodeString
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV1.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV1.cs
deleted file mode 100644
index 0371374e..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV1.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-using NvAPIWrapper.Native.Attributes;
-using NvAPIWrapper.Native.General.Structures;
-using NvAPIWrapper.Native.Helpers;
-using NvAPIWrapper.Native.Interfaces;
-using NvAPIWrapper.Native.Interfaces.DRS;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- [StructLayout(LayoutKind.Sequential, Pack = 8)]
- [StructureVersion(1)]
- public struct DRSApplicationV1 : IInitializable, IDRSApplication
- {
- internal StructureVersion _Version;
- internal uint _IsPredefined;
- internal UnicodeString _ApplicationName;
- internal UnicodeString _FriendlyName;
- internal UnicodeString _LauncherName;
-
- ///
- /// Creates a new instance of
- ///
- /// The application file name.
- /// The application friendly name.
- /// The application launcher name.
- public DRSApplicationV1(
- string applicationName,
- string friendlyName = null,
- string launcherName = null
- )
- {
- this = typeof(DRSApplicationV1).Instantiate();
- IsPredefined = false;
- ApplicationName = applicationName;
- FriendlyName = friendlyName ?? string.Empty;
- LauncherName = launcherName ?? string.Empty;
- }
-
- ///
- public bool IsPredefined
- {
- get => _IsPredefined > 0;
- private set => _IsPredefined = value ? 1u : 0u;
- }
-
- ///
- public string ApplicationName
- {
- get => _ApplicationName.Value;
- private set
- {
- if (string.IsNullOrEmpty(value))
- {
- throw new ArgumentException("Name can not be empty or null.");
- }
-
- _ApplicationName = new UnicodeString(value);
- }
- }
-
- ///
- public string FriendlyName
- {
- get => _FriendlyName.Value;
- private set => _FriendlyName = new UnicodeString(value);
- }
-
- ///
- public string LauncherName
- {
- get => _LauncherName.Value;
- private set => _LauncherName = new UnicodeString(value);
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV2.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV2.cs
deleted file mode 100644
index ee3e8c32..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV2.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-using NvAPIWrapper.Native.Attributes;
-using NvAPIWrapper.Native.General.Structures;
-using NvAPIWrapper.Native.Helpers;
-using NvAPIWrapper.Native.Interfaces;
-using NvAPIWrapper.Native.Interfaces.DRS;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- [StructLayout(LayoutKind.Sequential, Pack = 8)]
- [StructureVersion(2)]
- public struct DRSApplicationV2 : IInitializable, IDRSApplication
- {
- internal const char FileInFolderSeparator = ':';
- internal StructureVersion _Version;
- internal uint _IsPredefined;
- internal UnicodeString _ApplicationName;
- internal UnicodeString _FriendlyName;
- internal UnicodeString _LauncherName;
- internal UnicodeString _FileInFolder;
-
- ///
- /// Creates a new instance of
- ///
- /// The application file name.
- /// The application friendly name.
- /// The application launcher name.
- /// The list of files that are necessary to be present in the application parent directory.
- // ReSharper disable once TooManyDependencies
- public DRSApplicationV2(
- string applicationName,
- string friendlyName = null,
- string launcherName = null,
- string[] fileInFolders = null
- )
- {
- this = typeof(DRSApplicationV2).Instantiate();
- IsPredefined = false;
- ApplicationName = applicationName;
- FriendlyName = friendlyName ?? string.Empty;
- LauncherName = launcherName ?? string.Empty;
- FilesInFolder = fileInFolders ?? new string[0];
- }
-
- ///
- public bool IsPredefined
- {
- get => _IsPredefined > 0;
- private set => _IsPredefined = value ? 1u : 0u;
- }
-
- ///
- public string ApplicationName
- {
- get => _ApplicationName.Value;
- private set
- {
- if (string.IsNullOrEmpty(value))
- {
- throw new ArgumentException("Name can not be empty or null.");
- }
-
- _ApplicationName = new UnicodeString(value);
- }
- }
-
- ///
- public string FriendlyName
- {
- get => _FriendlyName.Value;
- private set => _FriendlyName = new UnicodeString(value);
- }
-
- ///
- public string LauncherName
- {
- get => _LauncherName.Value;
- private set => _LauncherName = new UnicodeString(value);
- }
-
- ///
- /// Gets the list of files that are necessary to be present in the application parent directory.
- ///
- public string[] FilesInFolder
- {
- get => _FileInFolder.Value?.Split(new[] {FileInFolderSeparator}, StringSplitOptions.RemoveEmptyEntries) ??
- new string[0];
- private set => _FileInFolder = new UnicodeString(string.Join(FileInFolderSeparator.ToString(), value));
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV3.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV3.cs
deleted file mode 100644
index 207649ea..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV3.cs
+++ /dev/null
@@ -1,114 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-using NvAPIWrapper.Native.Attributes;
-using NvAPIWrapper.Native.General.Structures;
-using NvAPIWrapper.Native.Helpers;
-using NvAPIWrapper.Native.Interfaces;
-using NvAPIWrapper.Native.Interfaces.DRS;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- [StructLayout(LayoutKind.Sequential, Pack = 8)]
- [StructureVersion(3)]
- public struct DRSApplicationV3 : IInitializable, IDRSApplication
- {
- internal const char FileInFolderSeparator = DRSApplicationV2.FileInFolderSeparator;
- internal StructureVersion _Version;
- internal uint _IsPredefined;
- internal UnicodeString _ApplicationName;
- internal UnicodeString _FriendlyName;
- internal UnicodeString _LauncherName;
- internal UnicodeString _FileInFolder;
- internal uint _Flags;
-
- ///
- /// Creates a new instance of
- ///
- /// The application file name.
- /// The application friendly name.
- /// The application launcher name.
- /// The list of files that are necessary to be present in the application parent directory.
- /// A boolean value indicating if this application is a metro application.
- // ReSharper disable once TooManyDependencies
- public DRSApplicationV3(
- string applicationName,
- string friendlyName = null,
- string launcherName = null,
- string[] fileInFolders = null,
- bool isMetro = false
- )
- {
- this = typeof(DRSApplicationV3).Instantiate();
- IsPredefined = false;
- ApplicationName = applicationName;
- FriendlyName = friendlyName ?? string.Empty;
- LauncherName = launcherName ?? string.Empty;
- FilesInFolder = fileInFolders ?? new string[0];
- IsMetroApplication = isMetro;
- }
-
- ///
- public bool IsPredefined
- {
- get => _IsPredefined > 0;
- private set => _IsPredefined = value ? 1u : 0u;
- }
-
- ///
- /// Gets a boolean value indicating if this application is a metro application
- ///
- public bool IsMetroApplication
- {
- get => _Flags.GetBit(0);
- private set => _Flags = _Flags.SetBit(0, value);
- }
-
- ///
- /// Gets a boolean value indicating if this application has command line arguments
- ///
- public bool HasCommandLine
- {
- get => _Flags.GetBit(1);
- }
-
- ///
- public string ApplicationName
- {
- get => _ApplicationName.Value;
- private set
- {
- if (string.IsNullOrEmpty(value))
- {
- throw new ArgumentException("Name can not be empty or null.");
- }
-
- _ApplicationName = new UnicodeString(value);
- }
- }
-
- ///
- public string FriendlyName
- {
- get => _FriendlyName.Value;
- private set => _FriendlyName = new UnicodeString(value);
- }
-
- ///
- public string LauncherName
- {
- get => _LauncherName.Value;
- private set => _LauncherName = new UnicodeString(value);
- }
-
- ///
- /// Gets the list of files that are necessary to be present in the application parent directory.
- ///
- public string[] FilesInFolder
- {
- get => _FileInFolder.Value?.Split(new[] {FileInFolderSeparator}, StringSplitOptions.RemoveEmptyEntries) ??
- new string[0];
- private set => _FileInFolder = new UnicodeString(string.Join(FileInFolderSeparator.ToString(), value));
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV4.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV4.cs
deleted file mode 100644
index debc302e..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV4.cs
+++ /dev/null
@@ -1,148 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-using NvAPIWrapper.Native.Attributes;
-using NvAPIWrapper.Native.General.Structures;
-using NvAPIWrapper.Native.Helpers;
-using NvAPIWrapper.Native.Interfaces;
-using NvAPIWrapper.Native.Interfaces.DRS;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- [StructLayout(LayoutKind.Sequential, Pack = 8)]
- [StructureVersion(4)]
- public struct DRSApplicationV4 : IInitializable, IDRSApplication
- {
- internal const char FileInFolderSeparator = DRSApplicationV3.FileInFolderSeparator;
- internal StructureVersion _Version;
- internal uint _IsPredefined;
- internal UnicodeString _ApplicationName;
- internal UnicodeString _FriendlyName;
- internal UnicodeString _LauncherName;
- internal UnicodeString _FileInFolder;
- internal uint _Flags;
- internal UnicodeString _CommandLine;
-
- ///
- /// Creates a new instance of
- ///
- /// The application file name.
- /// The application friendly name.
- /// The application launcher name.
- /// The list of files that are necessary to be present in the application parent directory.
- /// A boolean value indicating if this application is a metro application.
- /// The application's command line arguments.
- // ReSharper disable once TooManyDependencies
- public DRSApplicationV4(
- string applicationName,
- string friendlyName = null,
- string launcherName = null,
- string[] fileInFolders = null,
- bool isMetro = false,
- string commandLine = null
- )
- {
- this = typeof(DRSApplicationV4).Instantiate();
- IsPredefined = false;
- ApplicationName = applicationName;
- FriendlyName = friendlyName ?? string.Empty;
- LauncherName = launcherName ?? string.Empty;
- FilesInFolder = fileInFolders ?? new string[0];
- IsMetroApplication = isMetro;
- ApplicationCommandLine = commandLine ?? string.Empty;
- }
-
- ///
- public bool IsPredefined
- {
- get => _IsPredefined > 0;
- private set => _IsPredefined = value ? 1u : 0u;
- }
-
- ///
- /// Gets a boolean value indicating if this application is a metro application
- ///
- public bool IsMetroApplication
- {
- get => _Flags.GetBit(0);
- private set => _Flags = _Flags.SetBit(0, value);
- }
-
- ///
- /// Gets a boolean value indicating if this application has command line arguments
- ///
- public bool HasCommandLine
- {
- get => _Flags.GetBit(1);
- private set => _Flags = _Flags.SetBit(1, value);
- }
-
- ///
- public string ApplicationName
- {
- get => _ApplicationName.Value;
- private set
- {
- if (string.IsNullOrEmpty(value))
- {
- throw new ArgumentException("Name can not be empty or null.");
- }
-
- _ApplicationName = new UnicodeString(value);
- }
- }
-
- ///
- /// Gets the application command line arguments
- ///
- public string ApplicationCommandLine
- {
- get => (HasCommandLine ? _CommandLine.Value : null) ?? string.Empty;
- private set
- {
- if (string.IsNullOrEmpty(value))
- {
- _CommandLine = new UnicodeString(null);
-
- if (HasCommandLine)
- {
- HasCommandLine = false;
- }
- }
- else
- {
- _CommandLine = new UnicodeString(value);
-
- if (!HasCommandLine)
- {
- HasCommandLine = true;
- }
- }
- }
- }
-
- ///
- public string FriendlyName
- {
- get => _FriendlyName.Value;
- private set => _FriendlyName = new UnicodeString(value);
- }
-
- ///
- public string LauncherName
- {
- get => _LauncherName.Value;
- private set => _LauncherName = new UnicodeString(value);
- }
-
- ///
- /// Gets the list of files that are necessary to be present in the application parent directory.
- ///
- public string[] FilesInFolder
- {
- get => _FileInFolder.Value?.Split(new[] {FileInFolderSeparator}, StringSplitOptions.RemoveEmptyEntries) ??
- new string[0];
- private set => _FileInFolder = new UnicodeString(string.Join(FileInFolderSeparator.ToString(), value));
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSGPUSupport.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSGPUSupport.cs
deleted file mode 100644
index d229eb86..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSGPUSupport.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-using System.Collections.Generic;
-using System.Linq;
-using System.Runtime.InteropServices;
-using NvAPIWrapper.Native.Helpers;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- /// Contains a list of supported GPU series by a NVIDIA driver setting profile
- ///
- [StructLayout(LayoutKind.Sequential, Pack = 8)]
- public struct DRSGPUSupport
- {
- internal uint _Flags;
-
- ///
- /// Gets or sets a value indicating if the GeForce line of products are supported
- ///
- public bool IsGeForceSupported
- {
- get => _Flags.GetBit(0);
- set => _Flags = _Flags.SetBit(0, value);
- }
-
- ///
- /// Gets or sets a value indicating if the Quadro line of products are supported
- ///
- public bool IsQuadroSupported
- {
- get => _Flags.GetBit(1);
- set => _Flags = _Flags.SetBit(1, value);
- }
-
- ///
- /// Gets or sets a value indicating if the NVS line of products are supported
- ///
- public bool IsNVSSupported
- {
- get => _Flags.GetBit(2);
- set => _Flags = _Flags.SetBit(2, value);
- }
-
- ///
- public override string ToString()
- {
- var supportedGPUs = new List();
-
- if (IsGeForceSupported)
- {
- supportedGPUs.Add("GeForce");
- }
-
- if (IsQuadroSupported)
- {
- supportedGPUs.Add("Quadro");
- }
-
- if (IsNVSSupported)
- {
- supportedGPUs.Add("NVS");
- }
-
- if (supportedGPUs.Any())
- {
- return $"[{_Flags}] = {string.Join(", ", supportedGPUs)}";
- }
-
- return $"[{_Flags}]";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSProfileHandle.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSProfileHandle.cs
deleted file mode 100644
index 011b9f0f..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSProfileHandle.cs
+++ /dev/null
@@ -1,100 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-using NvAPIWrapper.Native.Interfaces;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- /// DRSProfileHandle is a reference to a DRS profile.
- ///
- [StructLayout(LayoutKind.Sequential)]
- public struct DRSProfileHandle : IHandle, IEquatable
- {
- internal readonly IntPtr _MemoryAddress;
-
- private DRSProfileHandle(IntPtr memoryAddress)
- {
- _MemoryAddress = memoryAddress;
- }
-
- ///
- public bool Equals(DRSProfileHandle other)
- {
- return _MemoryAddress.Equals(other._MemoryAddress);
- }
-
- ///
- public override bool Equals(object obj)
- {
- if (ReferenceEquals(null, obj))
- {
- return false;
- }
-
- return obj is DRSProfileHandle handle && Equals(handle);
- }
-
- ///
- public override int GetHashCode()
- {
- return _MemoryAddress.GetHashCode();
- }
-
-
- ///
- public override string ToString()
- {
- return $"DRSProfileHandle #{MemoryAddress.ToInt64()}";
- }
-
- ///
- public IntPtr MemoryAddress
- {
- get => _MemoryAddress;
- }
-
- ///
- public bool IsNull
- {
- get => _MemoryAddress == IntPtr.Zero;
- }
-
- ///
- /// Checks for equality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are equal, otherwise false
- public static bool operator ==(DRSProfileHandle left, DRSProfileHandle right)
- {
- return left.Equals(right);
- }
-
- ///
- /// Checks for inequality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are not equal, otherwise false
- public static bool operator !=(DRSProfileHandle left, DRSProfileHandle right)
- {
- return !left.Equals(right);
- }
-
- ///
- /// Gets default DRSProfileHandle with a null pointer
- ///
- public static DRSProfileHandle DefaultHandle
- {
- get => default(DRSProfileHandle);
- }
-
- ///
- /// Gets the default global profile handle
- ///
- public static DRSProfileHandle DefaultGlobalProfileHandle
- {
- get => new DRSProfileHandle(new IntPtr(-1));
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSProfileV1.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSProfileV1.cs
deleted file mode 100644
index 9b85af23..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSProfileV1.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-using System.Runtime.InteropServices;
-using NvAPIWrapper.Native.Attributes;
-using NvAPIWrapper.Native.General.Structures;
-using NvAPIWrapper.Native.Helpers;
-using NvAPIWrapper.Native.Interfaces;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- /// Represents a NVIDIA driver settings profile
- ///
- [StructLayout(LayoutKind.Sequential, Pack = 8)]
- [StructureVersion(1)]
- public struct DRSProfileV1 : IInitializable
- {
- internal StructureVersion _Version;
- internal UnicodeString _ProfileName;
- internal DRSGPUSupport _GPUSupport;
- internal uint _IsPredefined;
- internal uint _NumberOfApplications;
- internal uint _NumberOfSettings;
-
- ///
- /// Creates a new instance of with the passed name and GPU series support list.
- ///
- /// The name of the profile.
- /// An instance of containing the list of supported GPU series.
- public DRSProfileV1(string name, DRSGPUSupport gpuSupport)
- {
- this = typeof(DRSProfileV1).Instantiate();
- _ProfileName = new UnicodeString(name);
- _GPUSupport = gpuSupport;
- }
-
- ///
- /// Gets the name of the profile
- ///
- public string Name
- {
- get => _ProfileName.Value;
- }
-
- ///
- /// Gets or sets the GPU series support list
- ///
- public DRSGPUSupport GPUSupport
- {
- get => _GPUSupport;
- set => _GPUSupport = value;
- }
-
- ///
- /// Gets a boolean value indicating if this profile is predefined
- ///
- public bool IsPredefined
- {
- get => _IsPredefined > 0;
- }
-
- ///
- /// Gets the number of applications registered under this profile
- ///
- public int NumberOfApplications
- {
- get => (int) _NumberOfApplications;
- }
-
- ///
- /// Gets the number of setting registered under this profile
- ///
- public int NumberOfSettings
- {
- get => (int) _NumberOfSettings;
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSSessionHandle.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSSessionHandle.cs
deleted file mode 100644
index 8b4e570d..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSSessionHandle.cs
+++ /dev/null
@@ -1,87 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-using NvAPIWrapper.Native.Interfaces;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- /// DRSSessionHandle is a reference to a DRS session.
- ///
- [StructLayout(LayoutKind.Sequential)]
- public struct DRSSessionHandle : IHandle, IEquatable
- {
- internal readonly IntPtr _MemoryAddress;
-
- ///
- public bool Equals(DRSSessionHandle other)
- {
- return _MemoryAddress.Equals(other._MemoryAddress);
- }
-
- ///
- public override bool Equals(object obj)
- {
- if (ReferenceEquals(null, obj))
- {
- return false;
- }
-
- return obj is DRSSessionHandle handle && Equals(handle);
- }
-
- ///
- public override int GetHashCode()
- {
- return _MemoryAddress.GetHashCode();
- }
-
-
- ///
- public override string ToString()
- {
- return $"DRSSessionHandle #{MemoryAddress.ToInt64()}";
- }
-
- ///
- public IntPtr MemoryAddress
- {
- get => _MemoryAddress;
- }
-
- ///
- public bool IsNull
- {
- get => _MemoryAddress == IntPtr.Zero;
- }
-
- ///
- /// Checks for equality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are equal, otherwise false
- public static bool operator ==(DRSSessionHandle left, DRSSessionHandle right)
- {
- return left.Equals(right);
- }
-
- ///
- /// Checks for inequality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are not equal, otherwise false
- public static bool operator !=(DRSSessionHandle left, DRSSessionHandle right)
- {
- return !left.Equals(right);
- }
-
- ///
- /// Gets default DRSSessionHandle with a null pointer
- ///
- public static DRSSessionHandle DefaultHandle
- {
- get => default(DRSSessionHandle);
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSSettingV1.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSSettingV1.cs
deleted file mode 100644
index 1c6e9161..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSSettingV1.cs
+++ /dev/null
@@ -1,329 +0,0 @@
-using System;
-using System.Linq;
-using System.Runtime.InteropServices;
-using NvAPIWrapper.Native.Attributes;
-using NvAPIWrapper.Native.General.Structures;
-using NvAPIWrapper.Native.Helpers;
-using NvAPIWrapper.Native.Interfaces;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- /// Represents a NVIDIA driver setting
- ///
- [StructLayout(LayoutKind.Sequential, Pack = 8)]
- [StructureVersion(1)]
- public struct DRSSettingV1 : IInitializable
- {
- internal StructureVersion _Version;
- internal UnicodeString _SettingName;
- internal uint _SettingId;
- internal DRSSettingType _SettingType;
- internal DRSSettingLocation _SettingLocation;
- internal uint _IsCurrentPredefined;
- internal uint _IsPredefinedValid;
- internal DRSSettingValue _PredefinedValue;
- internal DRSSettingValue _CurrentValue;
-
- ///
- /// Creates a new instance of containing the passed value.
- ///
- /// The setting identification number.
- /// The type of the setting's value
- /// The setting's value
- public DRSSettingV1(uint id, DRSSettingType settingType, object value)
- {
- this = typeof(DRSSettingV1).Instantiate();
- Id = id;
- IsPredefinedValueValid = false;
- _SettingType = settingType;
- CurrentValue = value;
- }
-
- ///
- /// Creates a new instance of containing the passed value.
- ///
- /// The setting identification number.
- /// The setting's value
- public DRSSettingV1(uint id, string value) : this(id, DRSSettingType.String, value)
- {
- }
-
- ///
- /// Creates a new instance of containing the passed value.
- ///
- /// The setting identification number.
- /// The setting's value
- public DRSSettingV1(uint id, uint value) : this(id, DRSSettingType.Integer, value)
- {
- }
-
- ///
- /// Creates a new instance of containing the passed value.
- ///
- /// The setting identification number.
- /// The setting's value
- public DRSSettingV1(uint id, byte[] value) : this(id, DRSSettingType.Binary, value)
- {
- }
-
- ///
- /// Gets the name of the setting
- ///
- public string Name
- {
- get => _SettingName.Value;
- }
-
- ///
- /// Gets the identification number of the setting
- ///
- public uint Id
- {
- get => _SettingId;
- private set => _SettingId = value;
- }
-
- ///
- /// Gets the setting's value type
- ///
- public DRSSettingType SettingType
- {
- get => _SettingType;
- private set => _SettingType = value;
- }
-
- ///
- /// Gets the setting location
- ///
- public DRSSettingLocation SettingLocation
- {
- get => _SettingLocation;
- }
-
- ///
- /// Gets a boolean value indicating if the current value is the predefined value
- ///
- public bool IsCurrentValuePredefined
- {
- get => _IsCurrentPredefined > 0;
- private set => _IsCurrentPredefined = value ? 1u : 0u;
- }
-
- ///
- /// Gets a boolean value indicating if the predefined value is available and valid
- ///
- public bool IsPredefinedValueValid
- {
- get => _IsPredefinedValid > 0;
- private set => _IsPredefinedValid = value ? 1u : 0u;
- }
-
- ///
- /// Returns the predefined value as an integer
- ///
- /// An integer representing the predefined value
- public uint GetPredefinedValueAsInteger()
- {
- return _PredefinedValue.AsInteger();
- }
-
- ///
- /// Returns the predefined value as an array of bytes
- ///
- /// An byte array representing the predefined value
- public byte[] GetPredefinedValueAsBinary()
- {
- return _PredefinedValue.AsBinary();
- }
-
- ///
- /// Returns the predefined value as an unicode string
- ///
- /// An unicode string representing the predefined value
- public string GetPredefinedValueAsUnicodeString()
- {
- return _PredefinedValue.AsUnicodeString();
- }
-
- ///
- /// Gets the setting's predefined value
- ///
- public object PredefinedValue
- {
- get
- {
- if (!IsPredefinedValueValid)
- {
- return null;
- }
-
- switch (_SettingType)
- {
- case DRSSettingType.Integer:
-
- return GetPredefinedValueAsInteger();
- case DRSSettingType.Binary:
-
- return GetPredefinedValueAsBinary();
- case DRSSettingType.String:
- case DRSSettingType.UnicodeString:
-
- return GetPredefinedValueAsUnicodeString();
- default:
-
- throw new ArgumentOutOfRangeException(nameof(SettingType));
- }
- }
- }
-
- ///
- /// Returns the current value as an integer
- ///
- /// An integer representing the current value
- public uint GetCurrentValueAsInteger()
- {
- return _CurrentValue.AsInteger();
- }
-
- ///
- /// Returns the current value as an array of bytes
- ///
- /// An byte array representing the current value
- public byte[] GetCurrentValueAsBinary()
- {
- return _CurrentValue.AsBinary();
- }
-
- ///
- /// Returns the current value as an unicode string
- ///
- /// An unicode string representing the current value
- public string GetCurrentValueAsUnicodeString()
- {
- return _CurrentValue.AsUnicodeString();
- }
-
- ///
- /// Sets the passed value as the current value
- ///
- /// The new value for the setting
- public void SetCurrentValueAsInteger(uint value)
- {
- if (SettingType != DRSSettingType.Integer)
- {
- throw new ArgumentOutOfRangeException(nameof(value), "Passed argument is invalid for this setting.");
- }
-
- _CurrentValue = new DRSSettingValue(value);
- IsCurrentValuePredefined = IsPredefinedValueValid && (uint) CurrentValue == (uint) PredefinedValue;
- }
-
- ///
- /// Sets the passed value as the current value
- ///
- /// The new value for the setting
- public void SetCurrentValueAsBinary(byte[] value)
- {
- if (SettingType != DRSSettingType.Binary)
- {
- throw new ArgumentOutOfRangeException(nameof(value), "Passed argument is invalid for this setting.");
- }
-
- _CurrentValue = new DRSSettingValue(value);
- IsCurrentValuePredefined =
- IsPredefinedValueValid &&
- ((byte[]) CurrentValue)?.SequenceEqual((byte[]) PredefinedValue ?? new byte[0]) == true;
- }
-
- ///
- /// Sets the passed value as the current value
- ///
- /// The new value for the setting
- public void SetCurrentValueAsUnicodeString(string value)
- {
- if (SettingType != DRSSettingType.UnicodeString)
- {
- throw new ArgumentOutOfRangeException(nameof(value), "Passed argument is invalid for this setting.");
- }
-
- _CurrentValue = new DRSSettingValue(value);
- IsCurrentValuePredefined =
- IsPredefinedValueValid &&
- string.Equals(
- (string) CurrentValue,
- (string) PredefinedValue,
- StringComparison.InvariantCulture
- );
- }
-
- ///
- /// Gets or sets the setting's current value
- ///
- public object CurrentValue
- {
- get
- {
- switch (_SettingType)
- {
- case DRSSettingType.Integer:
-
- return GetCurrentValueAsInteger();
- case DRSSettingType.Binary:
-
- return GetCurrentValueAsBinary();
- case DRSSettingType.String:
- case DRSSettingType.UnicodeString:
-
- return GetCurrentValueAsUnicodeString();
- default:
-
- throw new ArgumentOutOfRangeException(nameof(SettingType));
- }
- }
- private set
- {
- if (value is int intValue)
- {
- SetCurrentValueAsInteger((uint) intValue);
- }
- else if (value is uint unsignedIntValue)
- {
- SetCurrentValueAsInteger(unsignedIntValue);
- }
- else if (value is short shortValue)
- {
- SetCurrentValueAsInteger((uint) shortValue);
- }
- else if (value is ushort unsignedShortValue)
- {
- SetCurrentValueAsInteger(unsignedShortValue);
- }
- else if (value is long longValue)
- {
- SetCurrentValueAsInteger((uint) longValue);
- }
- else if (value is ulong unsignedLongValue)
- {
- SetCurrentValueAsInteger((uint) unsignedLongValue);
- }
- else if (value is byte byteValue)
- {
- SetCurrentValueAsInteger(byteValue);
- }
- else if (value is string stringValue)
- {
- SetCurrentValueAsUnicodeString(stringValue);
- }
- else if (value is byte[] binaryValue)
- {
- SetCurrentValueAsBinary(binaryValue);
- }
- else
- {
- throw new ArgumentException("Unacceptable argument type.", nameof(value));
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSSettingValue.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSSettingValue.cs
deleted file mode 100644
index c57a59af..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSSettingValue.cs
+++ /dev/null
@@ -1,97 +0,0 @@
-using System;
-using System.Linq;
-using System.Runtime.InteropServices;
-using System.Text;
-using NvAPIWrapper.Native.General.Structures;
-using NvAPIWrapper.Native.Interfaces;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- /// Represents a setting value
- ///
- [StructLayout(LayoutKind.Sequential, Pack = 8)]
- public struct DRSSettingValue : IInitializable
- {
- private const int UnicodeStringLength = UnicodeString.UnicodeStringLength;
- private const int BinaryDataMax = 4096;
-
- // Math.Max(BinaryDataMax + sizeof(uint), UnicodeStringLength * sizeof(ushort))
- private const int FullStructureSize = 4100;
-
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = FullStructureSize, ArraySubType = UnmanagedType.U1)]
- internal byte[] _BinaryValue;
-
- ///
- /// Creates a new instance of containing the passed unicode string as the value
- ///
- /// The unicode string value
- public DRSSettingValue(string value)
- {
- if (value?.Length > UnicodeStringLength)
- {
- value = value.Substring(0, UnicodeStringLength);
- }
-
- _BinaryValue = new byte[FullStructureSize];
-
- var stringBytes = Encoding.Unicode.GetBytes(value ?? string.Empty);
- Array.Copy(stringBytes, 0, _BinaryValue, 0, Math.Min(stringBytes.Length, _BinaryValue.Length));
- }
-
- ///
- /// Creates a new instance of containing the passed byte array as the value
- ///
- /// The byte array value
- public DRSSettingValue(byte[] value)
- {
- _BinaryValue = new byte[FullStructureSize];
-
- if (value?.Length > 0)
- {
- var arrayLength = Math.Min(value.Length, BinaryDataMax);
- var arrayLengthBytes = BitConverter.GetBytes((uint) arrayLength);
- Array.Copy(arrayLengthBytes, 0, _BinaryValue, 0, arrayLengthBytes.Length);
- Array.Copy(value, 0, _BinaryValue, arrayLengthBytes.Length, arrayLength);
- }
- }
-
- ///
- /// Creates a new instance of containing the passed integer as the value
- ///
- /// The integer value
- public DRSSettingValue(uint value)
- {
- _BinaryValue = new byte[FullStructureSize];
- var arrayLengthBytes = BitConverter.GetBytes(value);
- Array.Copy(arrayLengthBytes, 0, _BinaryValue, 0, arrayLengthBytes.Length);
- }
-
- ///
- /// Returns the value as an integer
- ///
- /// An integer representing the value
- public uint AsInteger()
- {
- return BitConverter.ToUInt32(_BinaryValue, 0);
- }
-
- ///
- /// Returns the value as an array of bytes
- ///
- /// An array of bytes representing the value
- public byte[] AsBinary()
- {
- return _BinaryValue.Skip(sizeof(uint)).Take((int) AsInteger()).ToArray();
- }
-
- ///
- /// Returns the value as an unicode string
- ///
- /// An unicode string representing the value
- public string AsUnicodeString()
- {
- return Encoding.Unicode.GetString(_BinaryValue).TrimEnd('\0');
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSSettingValues.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSSettingValues.cs
deleted file mode 100644
index 61dd84a2..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSSettingValues.cs
+++ /dev/null
@@ -1,140 +0,0 @@
-using System;
-using System.Linq;
-using System.Runtime.InteropServices;
-using NvAPIWrapper.Native.Attributes;
-using NvAPIWrapper.Native.General.Structures;
-using NvAPIWrapper.Native.Interfaces;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- /// Contains a list of all possible values for a setting as well as its default value
- ///
- [StructLayout(LayoutKind.Sequential, Pack = 8)]
- [StructureVersion(1)]
- public struct DRSSettingValues : IInitializable
- {
- internal const int MaximumNumberOfValues = 100;
- internal StructureVersion _Version;
- internal uint _NumberOfValues;
- internal DRSSettingType _SettingType;
- internal DRSSettingValue _DefaultValue;
-
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = MaximumNumberOfValues)]
- internal DRSSettingValue[] _Values;
-
- ///
- /// Gets the setting's value type
- ///
- public DRSSettingType SettingType
- {
- get => _SettingType;
- }
-
- ///
- /// Gets a list of possible values for the setting
- ///
- public object[] Values
- {
- get
- {
- switch (_SettingType)
- {
- case DRSSettingType.Integer:
-
- return ValuesAsInteger().Cast