From 4092eaea115eae2039b92fb28f5471b425bc36ff Mon Sep 17 00:00:00 2001 From: wonson <1182742989@qq.com> Date: Sun, 3 Apr 2022 12:17:55 +0800 Subject: [PATCH 1/3] add string encrypt --- app/build.gradle | 1 - app/src/main/AndroidManifest.xml | 1 - build.gradle | 6 +- local.properties | 8 +- .../plugin/1.0.0/plugin-1.0.0.jar | Bin 23607 -> 32529 bytes .../plugin/1.0.0/plugin-1.0.0.jar.md5 | 2 +- .../plugin/1.0.0/plugin-1.0.0.jar.sha1 | 2 +- .../plugin/1.0.0/plugin-1.0.0.pom | 6 - .../plugin/1.0.0/plugin-1.0.0.pom.md5 | 2 +- .../plugin/1.0.0/plugin-1.0.0.pom.sha1 | 2 +- .../plugin/1.0.1/plugin-1.0.1.jar | Bin 0 -> 32529 bytes .../plugin/1.0.1/plugin-1.0.1.jar.md5 | 1 + .../plugin/1.0.1/plugin-1.0.1.jar.sha1 | 1 + .../plugin/1.0.1/plugin-1.0.1.pom | 28 +++ .../plugin/1.0.1/plugin-1.0.1.pom.md5 | 1 + .../plugin/1.0.1/plugin-1.0.1.pom.sha1 | 1 + .../plugin/1.0.2/plugin-1.0.2.jar | Bin 0 -> 31507 bytes .../plugin/1.0.2/plugin-1.0.2.jar.md5 | 1 + .../plugin/1.0.2/plugin-1.0.2.jar.sha1 | 1 + .../plugin/1.0.2/plugin-1.0.2.pom | 28 +++ .../plugin/1.0.2/plugin-1.0.2.pom.md5 | 1 + .../plugin/1.0.2/plugin-1.0.2.pom.sha1 | 1 + .../plugin/1.0.3/plugin-1.0.3.jar | Bin 0 -> 32660 bytes .../plugin/1.0.3/plugin-1.0.3.jar.md5 | 1 + .../plugin/1.0.3/plugin-1.0.3.jar.sha1 | 1 + .../plugin/1.0.3/plugin-1.0.3.pom | 28 +++ .../plugin/1.0.3/plugin-1.0.3.pom.md5 | 1 + .../plugin/1.0.3/plugin-1.0.3.pom.sha1 | 1 + .../plugin/1.0.4/plugin-1.0.4.jar | Bin 0 -> 32991 bytes .../plugin/1.0.4/plugin-1.0.4.jar.md5 | 1 + .../plugin/1.0.4/plugin-1.0.4.jar.sha1 | 1 + .../plugin/1.0.4/plugin-1.0.4.pom | 28 +++ .../plugin/1.0.4/plugin-1.0.4.pom.md5 | 1 + .../plugin/1.0.4/plugin-1.0.4.pom.sha1 | 1 + .../blackobfuscator/plugin/maven-metadata.xml | 8 +- .../plugin/maven-metadata.xml.md5 | 2 +- .../plugin/maven-metadata.xml.sha1 | 2 +- plugin/build.gradle | 29 ++- .../blackobfuscator/ObfPlugin.groovy | 52 ++--- plugin/src/main/java/com/wonson/Operator.java | 187 ++++++++++++++++++ .../main/java/com/wonson/ZipFileHelper.java | 130 ++++++++++++ .../blackobfuscator/core/ObfDex.java | 30 +-- 42 files changed, 523 insertions(+), 75 deletions(-) create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.1/plugin-1.0.1.jar create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.1/plugin-1.0.1.jar.md5 create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.1/plugin-1.0.1.jar.sha1 create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.1/plugin-1.0.1.pom create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.1/plugin-1.0.1.pom.md5 create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.1/plugin-1.0.1.pom.sha1 create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.jar create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.jar.md5 create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.jar.sha1 create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.pom create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.pom.md5 create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.pom.sha1 create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.jar create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.jar.md5 create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.jar.sha1 create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.pom create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.pom.md5 create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.pom.sha1 create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar.md5 create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar.sha1 create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.pom create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.pom.md5 create mode 100644 localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.pom.sha1 create mode 100644 plugin/src/main/java/com/wonson/Operator.java create mode 100644 plugin/src/main/java/com/wonson/ZipFileHelper.java diff --git a/app/build.gradle b/app/build.gradle index 4b23991..cf3ac34 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -56,7 +56,6 @@ BlackObfuscator { } dependencies { - implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.2' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f96d65e..d09a485 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,5 +17,4 @@ - \ No newline at end of file diff --git a/build.gradle b/build.gradle index 6378090..265019d 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,6 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { + repositories { google() mavenCentral() @@ -8,13 +9,16 @@ buildscript { url uri('./localRepo') } } + dependencies { classpath "com.android.tools.build:gradle:4.2.0" - classpath "top.niunaijun.blackobfuscator:plugin:1.0.0" + //classpath "com.github.CodingGay:BlackObfuscator-ASPlugin:3.7" + classpath "top.niunaijun.blackobfuscator:plugin:1.0.3" classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } + } allprojects { diff --git a/local.properties b/local.properties index 9fffe5f..ed22404 100644 --- a/local.properties +++ b/local.properties @@ -1,10 +1,8 @@ -## This file is automatically generated by Android Studio. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file should *NOT* be checked into Version Control Systems, +## This file must *NOT* be checked into Version Control Systems, # as it contains information specific to your local configuration. # # Location of the SDK. This is only used by Gradle. # For customization when using a Version Control System, please read the # header note. -sdk.dir=/Users/milk/Library/Android/sdk \ No newline at end of file +#Sat Apr 02 12:21:53 CST 2022 +sdk.dir=H\:\\AS\\SDK diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.0/plugin-1.0.0.jar b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.0/plugin-1.0.0.jar index 66e87395c5e42089311b6a370e056332de23e1b4..151f2aa4d19d50a5caabd39682ba57b3cc5d0f01 100644 GIT binary patch delta 27671 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 Xd+dg$1RVMYZ~WCqWkWgtKK1_qSoALg delta 18663 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 1.0.0 - - com.android.tools.build - gradle - 3.3.1 - runtime - com.android.tools.build transform-api diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.0/plugin-1.0.0.pom.md5 b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.0/plugin-1.0.0.pom.md5 index 21ccd4a..a8029e7 100644 --- a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.0/plugin-1.0.0.pom.md5 +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.0/plugin-1.0.0.pom.md5 @@ -1 +1 @@ -e072c183806d331aa32ac8863534a4ce \ No newline at end of file +4dfa616d9a3575f09dc1336592899ea6 \ No newline at end of file diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.0/plugin-1.0.0.pom.sha1 b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.0/plugin-1.0.0.pom.sha1 index 1fa3344..14fccfe 100644 --- a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.0/plugin-1.0.0.pom.sha1 +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.0/plugin-1.0.0.pom.sha1 @@ -1 +1 @@ -76b4be6ced264f6379d490e0d7331dd732df1641 \ No newline at end of file +3770cd6d1e57dc5269842e67e496ecb2fa313479 \ No newline at end of file diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.1/plugin-1.0.1.jar b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.1/plugin-1.0.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..31aed35ee7ecc92b6ff33536b044e40de2b2a567 GIT binary patch literal 32529 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%0D{|7*sr;H7de-3TW!JLJd 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 hp!L5&`A + + 4.0.0 + top.niunaijun.blackobfuscator + plugin + 1.0.1 + + + com.android.tools.build + transform-api + 1.5.0 + runtime + + + commons-io + commons-io + 2.5 + runtime + + + com.github.CodingGay.BlackObfuscator + dex-tools + 2.1 + runtime + + + diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.1/plugin-1.0.1.pom.md5 b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.1/plugin-1.0.1.pom.md5 new file mode 100644 index 0000000..eebbc3e --- /dev/null +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.1/plugin-1.0.1.pom.md5 @@ -0,0 +1 @@ +6393228b2c72a38d646a5e7b0eea4456 \ No newline at end of file diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.1/plugin-1.0.1.pom.sha1 b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.1/plugin-1.0.1.pom.sha1 new file mode 100644 index 0000000..bdd2047 --- /dev/null +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.1/plugin-1.0.1.pom.sha1 @@ -0,0 +1 @@ +87072021313e113b29a7ea4025008259e99ae6b1 \ No newline at end of file diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.jar b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..2a3936231259237c38254473a93862d5566f8430 GIT binary patch literal 31507 zcmb5VW0WRcmn~XpSK791tJ2OVZQHhO+qP{#Y1_7|vXYf~>b>24y1%~nj6OF;MEr;` zW9=O=)?Rz=IU^Khz`$X@eS?PnrXCig^6l>i`p@a_2J`oj6H^hUmy#D}1pB7=zkwlc zK`KrDptrbx0oZ>JwEqf}6PA|}7Xzp;$cg`yo1T)Dp=Ve?kfEoUot|q}W?E+5KRG-B z{V%~tL;tl^@V~)~?QQ?1!T;VfxPQmE+uJ$Y+x@?wwT7y#`yk)G{rUSO|Mc;naQ_Zf za4>Z;bg_3LV`eb6F?4peRhF|yWk&L~2%;v42Fb1+1-|tbAPy0E|@MOUb*K*vP@pr{gMrLS*%@7Hk*x^SUDG3 zZzSmQxITh$^U(=DBe_Q|Ix@yokW%8DFzxm@Esl;T>{Q_$7B8eau|mT~kQWn?TV{+d zF%31epc`Crn31Kw$b!7pk7KHtyl!RtQ9rYGC}+WRE4e;w#GoyV^|iFn9_DqeyTB2@ zz!ZvOMp%LmkQn^RxCi&Hm_I9!exs&svEXpgD%Jgwm&oYe7wk*BD6k=oY-1c-BgiO( zfO}lYx{SFWuadje>c-gM6ej0X+T|Shh&@^Ae3qkJ8dN7vur3S+l68*OvgLdp#IeWT zAT}}sI+|tD2FFjYLwUCkX=jw{*7-{sr1BHwKa=*K96Dn`Gq(Mk6iyJ|zTy8L5`*PG zQX?0jtAHwu#@|j)pF)BT@$rpXs|C#v?oBNS@rQA;7y;4KVEKica+;0##O&jP1RL{% z!i#~V&pp&jag4i}wU`B%V{&FrFX369xB2N={hi>qo{?x~6U7;0a9T6(ykV>F)*&`N z`&Ul%P~nOeROH1sLKgJwhO19Qbb5$c%91d_DI&3BBI70>7Xh{?>Q? zJ6ez zpLasF&u{mjCwIscNn((AKpJgl9K{OX72G{7X?EEQt9{MfXXAQ;chSG?Y5iyXQb6-F zldNhkf0XW)8A{)g@7%HXFqLCRC+%fJIR(W$Kj=OoG*Qes;|zX?l1@@+tTjy*uL|$|PGAC)CTkEU&e(l@# z^?5ee|IH_`Es#+LYgAnnYj6$Lmo>zm+1{Wq1Qa9sMZQ*j`N|4r?Y?(Wlcgai6eLA) z%oU6iejAM`TbQW$Bn}nGf-!!}ofu#Ni-yrVAX5h|t2v{Fb+dW!8}))h;iT!#cg zDLk-uH8oMx9gvO*&N64VVl8j*_*DdV{EUXC(V8{0ifTUB$SdDqZBLPidCkxhZ*o;3 zNp5;QLG^nm0C><*7bC@u$<;S|84)<3czpvYzZhLI#DCgcl`5l`Fn*qRR7FZ46G`qM zTi!sD3_OSnu=gF{Q=Y9SJX--dbu+n6D)%{^v>OVUXuj^RBXcPB+S1Ef%HX&aJP#Q8%M*W?fPL&;>`BBs*OPo&o<~4|*SeB` zo@=KLew~d~P3vLLk%ogVTh+nGPW_LqX$j5_3Bna4J%XG3(! zcG{^b)@lCXvzi6f^tItKC5J@oNKa}qHZmG&oK4*C18ifDYJ8ux;vwyzdvv2ch-Se= zADhq^bpD(z7dBQvICfKneR1GbAtxaxv4WFAeon=C#i!LFVEb;oU+CZfBu3hiP?Xi@ zx6&rCQQa{9is{P53lX!SP;~FMn+IMOm??bDGmB!%#uH9$s}1xl$`Qwmc*I#TWJWLK zaS?hjzm3+hp4JEO1#s(o1U?RnpL7)Q^4Y7z>hBq?QZy5eA7Ree6yF^rXv+OW#-SF# zjupUVs>WxjJ|KBLzOY7P?f5}~y4(;6U)RiYipStQbKv}`sv1F)5_?W1wt2DF|F44* zLl@kr6Z+e?-$?()dj3CH#lH>7P<3+yz#95z9(&%?M@%ec#>Gg;I2;HFN{nbwX4#M# zx|PM1z!c*t@~c#8o(BGfq`UNU0q>G!7m<`{gm%^~8@>zTV&-jG_n!s*!oAL>kPy?M zj=LT2IsPNwJ#O{833EbTL<98C>Z4jnF9&7d7W~WoZ=`T{m4jRlb@biX=ka?z{JZLr zcZ3iJX%hhh1AGB0d%~oHVIBda0t~{`17nu$+9LumgbsCz=ZlWL0lb`)2{0!YoiHd@ zpX~uqzLFzUNQ?twYyoQ8{KW@Lu(e4`LIKjIa@QQ@1~kMgj}alP_{*0XL>_|ze9eu_ zgp+2TS?q}YMkI;{Zv1@C1{6wKN4-4#gabz~{gHGRpN#=IF6^Sq`tz5nxOz*bcbzqP z+ZgSOmfTe&S0nP`J2|Tqc%MGk(w6)+LLh~tA#s!CyPR69GMugIErnTp;&mbo0JoB<>eb0Qym2Q zgB)E-}Hrj z(b~5bAwzMz(uQBQaUI;%%Ozo#sPf8s?Hi6>)rNYG-=LzNsdPjS3a84j>}`<~lqheM zDi$A{46QAwHgA5y8d$hVDS~Ckk6xFYk?Guq;zc^1H;f*MlN_N_oJQcc^LtC)0DvF} za;1@6dDE1}6X<$RvJxizwxLrUoWT}P1anb4eZ$f;aCEfz`fCs1G9ts*v`sXYH8D%q z7!aMr<3CrL8A(~lv$RX!0>+VMvw};jG(vd#3Xhn?7V}b#_Ss3ahT>0?SWEFL(Jw$C zjP-o;VU>mQ3M&7VC~SO{McNxOR$3muzHq!+9`be=9Cp7D zR63A1Mt-uOr$^o$K~eZc5N0|!j*P@VprQ(*JDV}%%YMLPj?Mxo{NmtnE~owuaD9W| zNc~Aa<4m&-lh8>0gEfk_Aq;15!&&$bbij5VFRH%W2c$ywOD$K|eN_+p18?NiD2%jT zDxT5Li_B1`7^K3zIiy|bjgR0+!9xX#&zSyWC7P3lNOK1z;NM#j{O3p&Q?hqsP}Ozv zS~pUEwUZrXDgkde9uPm4M*5HM`{h2M6i!gJUD7i(;W4y`PuoNE_#4X#85mC5SCE4yfTZiHSMyvZk5A*N*UP<32Imi$j)< z!wx*ia~{9tWqfF#`W!6NT{YQGZbhu5on`>;OS>uP$@1qVoZQrq`AFs>uhtO}dYBCE z&n@^pkC?*y6%ILb4zo8xba|4_yDG~w&lDxkc9NxZI1l0PKkTGB?m9P%9(SUo5F$RD zBWYVz^(yIIwXuFUNPG@a+1UV>@@B4IuT`pEILBu3WC0hjS`%cRg@x64eM@O&R!Zx~ zRxMQS3ey15#jt7Q7*< z1S@60%zDvko00ZygB#{Y4j7Q)0N3U&BcQ+kN(sE{&&;PYwAJ}{HmF(QH3!)0<67n6 zBWPEs>|j@M4ApX`{%Y>?xuNUT?5F06+q&bPPL^oRqx8J<$s)5sYBsqdw+8;`4b+O{ zWXw)@@-8i1O6?iv{ekiN?=|=QsY%~1TqC7p$0>s$$QH8MH zjA%^7!_W*UsGpVQ%a5NoAy-b$tz z99XYePCkTBTN2|Vnf{0y9KBw39=?evLtm;1H#;K*6l(2;Y`X!=`SyFUpPS! zZ_h(DmnM(2pUV{J5((y~3A|D~oY8cseku;+A?ZnS0(mJt<(*sHqu(Ze!+M0iRPRS$ zjN7P6rEtY7299jVC^@bhFr-PwtmQJGRTR3lA)VGvCYI%pMRx0=TL*+hJ$^XOe)w=u z%}|!XrvHhK1M8+}RAK5C;EB91@CUX1(dgSySL_U$`v+e)kPdv>RC%G?blk|(ecw>n zkNnj|bf=0=jT2zyiecT<(fEfAp#`N>{*ffyh8ICbH!MOHUso%lo7$0a(}A$`mNK1y z$bM`h97>gFYrK&o5B>Siwq`(j<1A>3_2|?CZ0d`y2f2GGrtL7k2fFPlvta$0HS~~3 z&5*StCHrxeSU1_gl}B#e+LcFe94Bn$?g);bb0JI{&3#6s)b>cjszA^!Yn8d4U1-p= zHrkteB1XX=Y#4<pG`0CF zr~Dh~iPeDd&{0MI+@tfHIA*ubHnX&(E|oGvDMLG#FQgtVE1^yhkwPAleN2+ioW?cV zolg@}L>u%4l0-#msi@GnETVvKqeHll_zt3vqN}I9rus&;QEt zzReYQI|M@n;lc+H=Y(#FcyNAKHAJ;rd&olq?GS~$TX_(`cMnsHcC%2^l;SlEiC{kYtqs(2# zueiufbr+vjl=!d)={DWada0kT`0=3)kk1z$d?BtP!#qkl;r5cwvOrE(9~sf&R6Oi1 zibMhyfZOT5A`OR~8T<0nO|&k4^y&2vmd*6>OSo072FqK0v@%)!)XMamCL@>AyfdO3xSwBEyNAI|+~ zQ(KiG2--3yS~3fL?YI#I>@@eC85ts>FniB#%5%vRS%A59IdXLCcqg918pW| z`F|PnqKzK4Ps~uW*p6B2+XK4)H&GP0E(;`K6h4r%fiNgcjX%-o+D_E-R~8-Q;qalO)YU|8)M}q>EqE9lO<=k zZIT9EI=rccl@lAAK1~W~Bhpj6rz={%c|ak0j%S^Ls?jl9=TlEj3~SPIiK@WmLUhct z1=|BALwYsl;(B2?C4K}3)^e#2AEwjo(WRH7*Sbi>e9R9_HN;M^+x`ele+Le1tlRA4 zSuza9YdFGxU5xZuWHD!;=}>$){Y=x@tS> zH9jj&`kl$Ffn3vynv_OoZuQjuvfyq7qhZxMtIX*Y4uD}>uimPf@E5#x7fDqG_x1uD2Nr7}i<_If$e~8+%xE)gyW-*% z_HvYnSP2Acnj`eN<878uIE}ZkE8u?XVAmF$>F~Q|v8$iAw`rl%y7We4h*#Liq9vL-&NQ0`y#<*P5!g7N+#`R=j zQ!rAzu-(=-0I(vmN}_o+Ys@TVjl5g+2bD{>&y$Xu&vp5N-jz$xF{@_4v9;m7a%cP3n2rg+YX{iz(`s#4)-t4Rgt@s}WQw$sJ@zU&=RpnjSt< z%9Gf6nw<4V6R;uu7Bj-x4CNZeapj&rJ|WI`E-_QN&4aR$TpRr0h;SaqQX>s06|RU* z3^DZ{!q?>5g!t^RQjb@2fEl6^3Q&q(Lc6Ds=*HSni&=s&_ZDo?as$A}Hg9P8k>3+j zveB~PDM6L#zmkNl&cA4xt~-$F4&%^KWE-ErVmf7Wnn+!evNG8d?Z%F{nZca4k({<| zWYmj{Nm2HMl|a1Q!2eWidzR{ISXyP&oTr~yWG59Z)3s9d^x)W<+3pWNGlyF`!Ydn8 z3njhAVmLf^ag2g5U#cGpY(qcIaWjHJ9o)BC6Ts%Jwaue8s>zD`);TR}tiat9mLb13J z`+xQhoOkpVGeiq0hxyR9cv`2V%b`Ru&ye@-cw&;$$6XRgN=Jsk*&(+0GwbpFv4RDX`3ks}%n}}OdQz2%wtz{0u)a;q21y_S z&(%*hm;9b!-E+iF^tNt+04UluC{p@CzAh+rC?EHtwrcWoeIW&TZoVfrW(iEfpjo1N zJ{GVStj^8o(i+t%>{x~&nq^@e2GBdTdA5~qn0hs+_H6SVfkbxS!1V=sAtvnlW_ z*DBxr58}U))4zQ5fBTgGIEF6v4*y~U{&!dL`@duCEM4skEv;Pt)inI?=zr+$KN0^E zZDeC;Y;A93=IU(xkA3(rZT)w5lJtMP+t}X8^j|{!(*eKYCDY`;&vNirV`Tcj3n6Fd z;9zNI{_hN2)fRxOisr|l*@Tp)2pT)ur&Nlxn}wk*ETqz~Zt)ErR=K4MMy84FdTd9o zRMngZ@Fdux|1qwf*{JAJc0`H)2k!IR*AMjkZYe6_3t7tK?z6v?n|sc4wzJ#+&+`=O zxAX@&XiDbN!yTkcrj>|vN7Ydm=qC>anl%v}6lGt*5X1y{L&#>ijNx#(7ihvMQ@v3U zu)6U1pixLV_I*@phN+V<9kr}`Y5{;FKtNFaArw}(z|VMd8XNTBxXVvFKHE*_(irqI zEN?DbO}wDAL-l@I$47k5x!!SiTBA$d!Q)=~H!!fo{Ol-Av%$r= z*I*RD&F?!UUyHuoa=RhVXUiKFLQP8wZ8}3IUL!&@&v*Ag=lcgf6)4&8lB zET5%dl#CG5a=HPf7$sDpvqKSJSgZqw4~=bmOr3^MrU ztKe?*tQK@s$7)BiS@mEN!xUFdjqYoKfS0dBZ1wm@XWp&HZPJBl{!d6^IsVq`Rz|DY z1{M~ySGfk0_5>RJ9Sgd|3QzYe+FQ{0Q@9aclUN>)pF+7&An3sY zEP9(H6p2C!do26!effo-ab~aU!bhT!5r@Vh1jW=F{ZMiSW(J5epok5U#B}$#T4qqB zK)3lfhp+rW$&ev1@b=$d1Tif)1->d5ih0XlRP_EV7_9?};YIKe$4$XUlb7F%ygjG` zN^Aer(o;>?21V@?+`g|&Zb~4ZZbqslVG}2o!+2%z!l>n%)WX#`ho6eS zn>+3uB+bbX9!cg$FQez>j3L>Aj7c4_``v`n^^R_OBz4xp`an+D|&lS=sN$!SD^@Bp%r#NQpl^u*=rAJ?6JCB|fl#;sVQ8 zyK856!QZu2z?N-SnrpJX!QGHVs^|~JMf^9kAP=18_ zA8hH(lgyWaT69?N6Qm*N3^WA7-&%VZ>=P3(%jV296Lja1iiAyf@o_-RRt?pdAn=XB zs`^d}Ay?z%VQCBlz|@&16kp<#nCU*Rd?y{>e{4g4@V8@x^ErX#5AwN#R+;3!$5EzS zyIkHurq!r6{%Y%P;g>zL43yioshX;;&@Sh8rkMq*k>Ru;k1RtRQIhE?y+kBI?@~>2 zSaO8kDb77vpf*n}cjAGT6&2VTVNJR6CIKztW8k#_Rs`rSJ?dky7#F7B7f4MrV{9;! z-YiTUke5?0A1KbjetjHsHheInk#!DMLFfC&)sBqh8;_zEU$^NW9t4nJCl=NB?n{uin2pUl2e1J$wp zE0vM{{Su1t|4(NB+svJ+4&#Hig8kJ$aXWi^ZGs9K`Q78k_Z{#dX|#~opoEA3;(|z{ zk*ee!DHcO_^W0nr5!+gIZSM`yt)dk#fVOtXsvHw~?Nf!8*58XV-W%@%s<40hGIw&c zvrp4~fA-$_-g$rB`LNF6dma-7EQKlz;^gJ1aae?ed)PEk==j3oq-V|_mqLW*bNMj63G=ZgwvApjtmBRR(0p8`#N zqz0w=3iqcxl*a%pc^Hao<}6`5S&Poxq?AZpOVb&%(t%MH!(yO)YP6QnDy`Yr#iaSS z%-0OPlwvtqZnTBv42!nOXJTb@7o1YSAvfUU7>k)eaW>eiYz<{8Wt%2{@2if8I~{LY zgAHk0WqJF|`i2P9LX?n1i?7gL9Z=b;jB)j1-K?zM^v`N#4@*rYp7<>%>qZYL(nFdY zZQH6Wwo6`rdR|DA)zxuoREcG?Dd5*aSxKVn8^nlLAQ6b$A9AKz^B?bJ zS2JH=@!7;_wn_LPy%zOakMiA_q|fT!l*jn2=*HhSkg%QODFL0udoJ*0-8R8JfHk`f z-^M^ad-Zf%oN4o`om}IfRC%6mvz&UdC_mhD32AF!=IV;QHt)J&iKttQi(9aK;P=xe z>Lo{C^oDJl5)0E9{PcL~WjWc$K^y9YGlizh=}JGH4U!{lD{z)R5m$*U*R55kZo0W+ zhy|89`;1H4{_g0W9H;hBo|(Rw+hg0I1|uGtNzh{Wo0dnnp?fEm>(oP|G?j%gXR3%J z)^N``ST=b{^A^j_r)|EJI`ZJNDrPo7hGUuC7G zX>W{R)eCA~X+`x5>!-+!Ast#ZcN89?_`5o`Kfv(l4z!swmZxEN=HM;nWcgX^RaSXa z@V;k&8ip4Cs=1~wC9yyaj}*wBe8CKCQts5q=Cqchth|!%zL?b?V)~pI?guX^(<7im zuRm~oq*D)w;Z(sJ>!)7Y`{h%WbjtDl1R0MWo3HUu1tf^jFbI}dCUvgpb3-em)RYnt-3zln#n=kbS?ZG)Ez<-1!rCBPC6aIA=`-xYBpP) zR3$L1xs%+i>;)}BV*k@9 zJ(GhYs}gOmGQBV?9-LqB-;Bdo7MvSE&jn z>P86lRI^H$Tk<;vxePKgWi-cbd97L$>;iLb%+*HbsJO(_qTO#ceMyoO+G>iOj}tRv zQ)LpMAOjhQrR14>k-PXUN*i=;QW46Ll1bk8Eo>1AnmN$-n@Q^ zskE^jGk&M?W_OhA!k`_cRnE%4{rGN0!B<}HQtMLu-Xq$ToUfvyvs-Tj5vxS=2&n>4 zni~$+A3Q1;bo7Z4bsKW&V){9smA7xn3DGO19Hkg^a{i`4+HYk+$818Ks`c{-8V;VK zsMt6vJ1YSd)JNJKaZW&2_+NfW)#SREJB~~)nrs&?s*-RBy1XQhc=lT5C&-f_cs-clj48`U!Vy#COBFGq z*P8avOItxa8%tvSP&5pM`xA8O$HvVz5r(qAhsCcjrR^2k36m`ZKrUr$d!qG=AN;}1 zvB5#sw0jwFLwbFTG7f1C6(qY;|t-xuE{PUGfI=7zJ04e{`QUUe`KyA z|EOSp*JS^$f{A&!nA$m8+S~mbjm=em*T+*w|N2e`PX|VfOSC~@DWx;fG;b%m#1>eF zW0AE;M-B;_RKZ0DCfhV!)7;FaVNGb&y4v2_ce(XegPue|99yeoUG&NP3Gt_5kCk=G znIq|w$^3NJd$#k;=Z^a1yxH-53<{Ch;DF=0h_ zOX_*j!@<+%y2n}rVyR7q3KnPX(%FlrTzlzaFtS;ERaL3d0N7%@<^1#W!||@WMXPkb z&I#x4VHB+*tW@DRMharm5<)dud^h*Ny*~&CXEl8Z4gz9p)sATrX&O-j z2NgoyeWr%qB7=2w!Haw33D+f+{J(*Fk^CoZ!wPteyT@<9Rw`gH;^2sf$<*|vBKiy?fa9}NIe1S{*#CT&qP z*GJd2tmel9bwuV z>eeUk=c>tU3Ta*=zIz61JR~cPK%LOkC4{>NH_fIMgLWBZE9qASt(ejtv~ILMpRcBp6%|t>>)?zC3)@;R>|vBBSOVhJzXi$M_R06;e{G zvevT#<_=C{c{=I2!ag=Myrs~Kr9ivfo%Uj-;pP_|{JgQVOyiJ*P)2*M+mEh}?gscBk@l7Muk?q{Ucb z$77mP!c%5M=09>`Gs96(#%ZO|<7e42w-t%HEll9VXK;ggp98>c#5cgzBuS}s<68oE zvv2aA?GoILRq9~+^heYVtbO!0IqmZtlIt_QviROO<7U0z0+MAS5KHO|)K5ga0Y~W$ zXSWOEgObia`n0o2i&O25?cG&-q{kvXQU&Yc)TcV=_4u>8VpQ63)J?as)g>@Xxre(; z=(jcV)} z8U}T((LJ!7e&%#fik<3fbm}lGN@{x_s8@tZyogLfGr01j#vSQu1F!6@?&(XTW zsZ`Tay&?5UyWdaHBDN*Ky#Y?J##+7m2SH(@vnNxxp@T-+m(^3v{uxr;_+@#sIV0#h z_j~Dx%~ht>z0v2P<+iZOKLUP8MI4O{flu5YNcCa4)+Dkw@ggg2p_P9eJ2u-8tUSF0 zHD_PZTh;Gb73gKq?g|Y&6C`M-d@I*|8}$)NjiC6v`Xvy(eu2ajJf0iIyLq<&ixo!v zwrE19BxSbVmXs!LdOt8AUzPhPqZLJ+0K^y`5J7INmvs+Eud;PsB{I^ibXJ4k= zx`{jSLA(#^`;7OV_uca>V|<^>m*}^&NKH`JxZF5xv)RR&T5j6i^hMOI>%LDNjzV5H zioUvfe_t9-1FcpWH0Z#C-?eWI1PT|c-}-IYQRJPwbFm{3O@5h7MqF94?j||NZgmy# z8zPRn(q=Z!nDj83mnES_EMBBYA(w1dn9J@sWvR2ZBbwNFdxX2c;XLy*iWXQk=|K1e zUM4l6gG0#Ex@QC-#p7~b+r-No9H1pCGKmruEPZ2{iI(T^_Z@Rnt=p z73NQmJ$q#l_n&lNj)-4M(%)zbrF3b5jgSL9ARb=WnM+Q+#Cj)6?HXv2H4hcy(^9Tx zSzWe8<0^F`w4rUCfUY=B4`o^CV&kgP{ZPr%FF#~k9tT`P zd@N#vKHUK1;e%8Y_2|;cLpIm#$eiMc8|Zj$&?>ghjrBwrrd!39f@B7{K~tT)V-J|1 zm&C`2Z_UM`S=;J7WJWu=>><;Rd;(K}$ye8s&U?~jvMl;Gzpgq{mS%cyW9&@dZ>AG& zO^Jk+-fehI&sR^>@_Ta!b)}Q#Xc$JKpcw|LOIOg3og!s<`!;14DpEmZ;>s1&NsP;K zQ+e@3m0QT3T8vH5bm)+z&Na)o(k5YYv_(7y<1mrP9W`Uwk!yy?mHG2^KAd2nrxP^V zPg!ETCH9LfUN70j5M2rYUIw{*f>fBH3sj*M=Z`r{^aY(U+(6mUEsM$+F^FkyQ^h$q zoGpA#;fPD?d0sGngRXaacW?QYl6hK((h~1lA?FPXc6#ZiUn#h4xbXa)v(h&P5#-J= z=C0C&X*4?I=-(&E>C&P9=r##a6>$2%LX`;o2FPO!`79p^88`DFTHx=YEsD=vfz%WNsnGLrPxW4%j@yun4B%6^G=ZJ=sx ztTS;2^*WK^xsr~$z={vNB`N9HQS}hMmyScJObfT-!4jfG$h)qqIV4asl~r+8>1)JD z>@1hNqw5cmBgK2+_2x0f9Vy#FI*Yt#kuBuw7MEVpeayiII zKsZn!R+Lj!pjhJ$7B9f5L&-Yn;c;=y1_WLUX7w8xkgh|2`B#b_Hc&9v-evGZ)6whf1?ot^< zL*pQaH3vsn9;9Z)NC}yJ*#(C5XMrB`ErN4tr0qL@?w9U{otC({U4;VZ_3g6Fz0Hn= znVemVM%qnBF&e9aZF9zKog<{bT3r(go})#2x*Z-x_cVx%JJ&CV>8mE^%n)LrEM37W z$R{;4sRsG6EB1aerq$p7oW>qJ!A=iV1nSc<4c+sK{ZpsRRz9{F9=R!FUgnt*G*0`6r*8o>@>9rWlfD%WsE@GOmc>{aI7Ydb=c zLx0!h6AeH==%X)lLiaI$^dK2+hBkui?-feKFLG8=2ySa>6xLqV=tq=8cSu*#X+iyo z+miNCrXp*NFSaGz;-=gQd9ygC5!{yMa}(MD zsul08tN^H>XhF<|a4XX8vrWW=cur<`eJhC=;VS0i)uVH~=EYVV=x=@`-9;*_zAbHj zJ*w;jHFXa@I|%4u;*WKHfS(;U%(>%vLg8fi9?$#4wCI74k3Hf%P9&3VKV<8WU`(eM zs?9WQ0rz;@j<5bxVUU1srD#*`x<46P)<{?_k9%TyckC20Vu^ zeWH^pBnj;Cya@yKGs*uzyNpDxKp)zGM!QqckW z%J18pm2m|d`GYr}u3kUQ)G@Pt&-f{=pUxiD{QY#M&3@=Gvt;vL@?u6(Z}3Mk($kEa z&E<_bdgJH{=kdFrLDZ7QGTJLh1oD%1ltb5Sj2g@kw41k?$6JrCAMgw@te_C=3W)8+ z9`=z8K8Orf!D($bS4}d0DP&-_Ck>T!gwi>@w?y$GMa3Qt>UKL8^nN1IoZM3N?QZ!o zexL8Nzjg{t5~(<;ANtsE&Wd`5n8e;V=9u0>A7e6>jWuf-yG)?On?8>j#mZlGw9k;xZy#94 zV$%)N33S8BEWuha-U=stpLE(8b)coZF851WZ46aCo8Z%S-7Ryd`6Q~tADoM8L_(Pu zG8@GvxyzrT7Cqd+SW2_%zm2k-YBBFDN~);oP$ox=qm6PAa7!*w3HGwVts> z-HtEFIYX}Cj09xEo1*jLjxINTco(rZ=!bfEaW}}HFvP59&}P&*8XqKwMr1m4WPvvS ztFv!_uB=P9tyCqc*tTuks@S$wv8{@2+pbh>+qP{RFZH@#*WbB)`}Tb+V`S`%oNs<> z?Y+-FYpwImIfFfbP4lD;aDMR*+hs((ec)vS8t^jhzH_pN-^p4a#Cx|BNKg7KHpY$+9WbexlL9bMMCLC< zitxe6)Wr;#zt5^wjEqPx6fG4>zPGGVD}O)IkTd3=%^Bb5y|$T3{1QBgH|AUzFFZv9OX^4ep7)l~tqW%5Y>rD)DCM zMI(l7ay~y2;=agA$)x4U=p^`LsodahDoLD^=1U)$;)siTf0+|lgY0qKvFJ?g=RVu3 zlB(&sL4$M}S$Sz}g?XE4>$LUy&I|K{Xy=~L<1k5$Y(q~7;?12I%hLwa5j$!vmHChc~c5A3dQIrB(S(MJUuh;!Mh z`PrmkaJWfpet3J8ollw{`HadObEV&$ABq#~dnbuYv)@{!)At`;DPQgsV`2w3J1hICC^YHWe(TBs1I>@-6K0xq;SSHY z2JA~tSk&J1jS7MunBm8k3j9g=R-;KdR!0agx%gfj28SsjBHFKrYl6Gvw-5H!0y&cA zW(-JDp$p`y^YXiG4Oa6A;=)_EPF{}}WAIOg(e*B{h~D{dnV=ud=v$w6{TQl>IgOe^ zC966K3>Zb)(7prK2;r!(8v_4=7*16wVLcs2D{w!V4pLcjolK2}F#0lyau`&&L%VEU zCZn?^x&-PrRi?z@X;CI++r%j(#;=lf=3tFh=T?A}nh0$kg_6i*R%!#8&$mc-)ZxcW ztF`rl)!^RWIf@3I{NsQjzny+Dk1;$z!?hb~SXwwM=1xQFbBWsI_L_4#urMwmCX=ki znlyS;a`;eTzBQ;V*iv3u1^q1MQsCyu(YZAI9CuL;Bzs=krQflkQK&z#+Cp&2gdbac zScmx(zgS;PeR412u<+N4#^SB1#JI4rN-3k#ur8xFwipg3?o$Py8(%vqqT&%q`jX|o zu;a%@6lga?8B_7DNtdpg1W)pq%n5*tI2-GcKt1Y_}xm{N?O zLA)PE%G~9wMg`}P4(v?X29v9&cSO$U= zmvn2MNxh8CnOn9_qHvdU7)*7b75)j6PN;o$&oJC@)Sg4m@JgRI7TS;(xM4i$`Hni+ zJ*%HVJy%7)zI8f|Q$~RFHumRi@2tx>PF`c0c*6537nwuE>kC~qm2KDGCiO1Io-nhf z8R2)uNUq@OwcB$Z5Dp9M&O{Cgq39Z2{W^&yR|G{j)1OT-^a*u^T&v21&xzn6co?1c z*&ao5CIw)hlHGiE2X4~#TN6;;#ok$*;B`sU+KbFY8gKAx5sq#+O;4#WxDzomGAn;Z zyLGHh_at;{U&a}k0IWnl>u}vs=$d)5qQ29&$5x`;5Dg{ncju;y0<8fr8t(>Ypq9irPY{ETr|>$Ytyfzy$4_uM@^&f1h~uT5;iUw)YDyobe{N2N1@bRWRJV|v;o5L@ zC==8AE*SbrF^q91s`;5!H~Yz3fWE$eZsncUjT0>sx*hTz0Q;N@x;fy6)}iP#o;snQ zpq0}&&ci3~X+U&=hwg@c=}qXh6`FNQuGV&oyT;uz%MA#vh{0k?C*(BYkYY1-3%RD< zV$bF8y%WKPp6lv`7719x}FXXMAYEtldSAqb(=^$vWp$}5a?Lx4yXLA) z^8&HvOPQ5iX_7d*$4tEX<7>bxD*)$cCNRK#4+wdF`+gLt|)fjh+hf zk`!nDjcLAoLN(K3a`F_z3Z{H|0rU3_rn1l>XZqbi)Inv%pQyd@bJ5K-bbM&<&$f9O z{*heWfmQA7CRJUcXhakr%|%C6P< z%j7&svY!ZL%qH&U-zxdL9gaad15yO0^=u(ITYhw4??Ns5tN9joO8Ns^Q0P2mS^nU$ zt^a4OU_s5Fnn~@IL8j*FQg=o9MW#uN#&GexF>zU0<1X?U zUhw+9vU-tK3o4|W1Y`b=I2||(=%T8OWs$`a2k@eW65Z^yFn%DSlU_tpvS?y?k^3p; z`olA8ijk$mkm2Z${Flb@ksLglR(AzajHQlc32vO>BdY`IitYWyFG~-2Jcc}sveQPL zU3p&qVi)YBnSd8Ky(m!SMytuA6V36X#p-VA%%!}^4P$ArG^05A`cr7rm@9KsAjrOf z^obyRKr_-yE+BBE{39yD1(ZK3_Qi)-#b^PI^;yaiS^1-;tif=*Hq3r%B_DpjNJNb4 za`he8ksf3@7&i(i%GmJM6&?W(diN6tA*`Z`aBe&O!P;z0^z3EQA--!ltWN7D)MiMUKz zHW&Jh_^VCY-PAn<^MeX39GcVK3kQGwUDJe zart1(22S-}Gme>_&Btw{1f%k#>bWU#0giw(^KRyg6|>vE8~DQ~^#N!UsAUqSCJ&G9 znrG#1i)x#4Zi7O|JjDzmORDI+@m{#cM1^I~IzQQJDb>MZ{(TX2cM#XwuclVPsc03w zA$FN!2P*00Gl{mMTbhg|i8F~tAd^cxtAjg~E?Sva2??nFFB^2}48W5M>wJ+=3+fbE%O4Gs!Wmjwjt zL7G`Wl9a!MPK~H^q2hy>`F6VhS(hK**7yt`{-tbk^;XdY`{gu$?e%u$7fXF0{}sz& z*I=cW-hhby9fr%UbsKiA3HGb#7O<>VNDfn|+R0HrEiy1a^3R~9aTLxQ?}=Ewj(VK;=wf;c%wrS%##hB+Ze=f-hE>Y%hf zqBR>WjOHLfwzdYi%3prl{EQ_IOqE4;5J6B(rNeNLFd3xp<NRudk$=e0AGUhr z*#0U|p}WbePgU%)*gZ+A>3jc%?JOe$kJ&R-Mk^lIuY2X7UudFfGnK;y9UFSTlx3-M zdNpT+2DcD<%e@LjA^L(LLu#jVp-LV4gqvOWbSZ4FKvtB}C!io%`*Ft7|HzR)_Ol=NrA3hL?E>1j5 z7%T0UL%ac-UVfDvbGvhke{GXoM``_G*)&LiyzDO$yFIqVMXvFdiV4%&nzT9g><#sg*t7{E{Qdt75#Y zqlgX^L=(0U#@>fjle?XRd2<=s-=1F9V0xd3|D*LL!@{`Ns( zP<8NSMdn>ykmy~alJkGDL!kA}4&N>66Li|sh|J^jg=h7 zsS8FKzuI0-hBnSTJzg-|WuDuu@UDyf&F0jn(#slz-YX`}G=HjtQ_x?#>18W(olTR~ zF3Hi9C>XVBvua9TIST>k?HAvtJG!r0iP!1s=U@U^`&aKNK@5>!p#DNau_tfa^}oen z9<@$*GVB)%gD->dI}5gq$FN9LSYkPI{k07C)rFX` z&=_Bdlh@e4HqL$+2gP~_i=S)`frgshZt_+=M~A&V69LSwOF7mcH}O^C-w7L-M>PPyxE46z&lp&LB# zXfAUloAO>TK7)m}2F%>per}Q-ArJxSL6AV45SV=K;Q_IiWOrT8kY6k7AgQ--`0q0B z(UBO$8H^(v0bPQa#Im^?eiD=`ne6kc*0T}#1cSmNXA1@@{v`Kq#^YiJ&7$Bpy-jEb z^-q*&b|`adWY}_L9?s_f**aKBxc~^%b*i3LG|s$|dHi5Y{vw2<)vhT+D_^dW4RTcl z+v{XJ_?cM5?&vVz!W^>no7}c!2Ms^pw2fW88D#E$qCc~>kRXx~DxK7j@#^J?DGLX- zjSj6mU5UI8*sAV49-28~Z)-l{EJlrg9c{5LASM6<)>WXDUHt=1kMX?#TIiamabSvNR}H#fDt7ux2GF>Pxyi)*IqHL*a-W zThWW;EZP2XAsd&O3Agm;w)}Or8OVmVP3D7*Pu4gIIcI{!?HC zvCl{+3|DC-irsi{CgHF`Wg(lj|bXlFseX?d^@$4cZ@Sm?ttoypO7`GqCA zQ0e}p>aaDJxSS+XI+_4+dZ|@~S^iUGeCl)UGDu#Qbmo?dg_9$~ows@yrh?s=&bJG1 zq+Cnl%G?D-ck_S+I`MfS-SfBm+qnlzx~A%IK8-;xtBp*CibrdhtV=svH4S)oN6Dul zQA^+0E5FfhH>RV&r;Bx%;!{Dwf5R&n3#TtX7k!q&9CIQBW;~m53(2U#42PH)|LlSe zb0#nN1dvuY;Vt>70Mw%kG0DZLNzj&E!RrF2x?lGll)YEZ{lL}f)#yTK9cjS*vPF6# zEN$~5bB5|TpY!J;e+f#NN$X6-BWT&=E13pk{OsLL!OhFdqu5`-xk^^>h6_q9Pi=Sl&FIX2f&1;&b7UhlOCWLbV(DD)J-* zTpy*=7k+y-|D!rAamvk9tS8u@X}DgbQ*FGtI~Yv9CO^k~8%NrSx8{8r~;- zJJNa{)*M6iIMNN~n8~|?vpu;-kC!je{_5CKN1>Vo3l#|>STT=VxyTO)2L((;S~Xfo zpp_aG&%my+RvNBe4Wyj$jRA*zE2*zDMJYx{=`oJ$Z$HWikgd0**k~SM9^rO{v2jwf zb265HWIO_Cm4X^9;a8JSGg-S4f76SOr7i+&LyllfGOni_P<;Kcn;Yz*X+!qD5OsPN z^!xvRR{vvJy5I@_F8WtaL0^?PPvZ~BoW)o~Q>CAinNRT3yPL_MEq(+~Z*Y_7%${QSL^K7McsNKc)*sR%4Vu9m~LQ{;q+ zqHBUPhsHBUQG2F2e*~bZJ>MWX9|uqRD23R{k^|p9g4HFjFSL1XfvprT zIPP<>1tP{01;}!Y%5l4g-n112xuxA?YU0sBdeRx`Vfm6#*y86PafO1=3B0_N+PLJs z9d`qLKR93)z-}FH#3k{eYX^|yK%?*j;v1f|^i)fwxR^u58YuA6@Gw-(2u%t@iLref zj5Ml(tuo=_B}D)ZDUXEbqK1$(vf0g362AHX8tNgUAWi(_Y>+K?vQs{HOv^Q5nA=_n zrS+)cw7pN}|fkHT$7`{M~QPW<)VbpGEXVp zwJAFhkm%;A?xQUgYuATT-LeXA&{BV_i#v`AArb>jIL;XD2c(*yMxcgpj4aYauYh)3 zw&ZJPKoU#=RY`T_;mpy@;aZ~O0)riQ!DaW=(3T7XR#|D~xV<$(&>8_d!D(6)(L?lr z;^9Z^;nlWXWfHdY?S%CTCWGY9O|wlng)ceeGVLgs)lQ|I0^(R0dSq+UcL8>H^*-71 zHGFV_(SZc^$7kSBM#LIpiPGyJPW&)v%@@F_soeAsk3v9v8mN%z|u{ z8JWwne25~{yx1ZZpX5lY51?!6r5M3j7h4nK=0Pe=tR1RKtmD^bSk?ibp)j#zCo74b zy>oShjGjH9)95YRs4D##2X&2>VC3`c(r)TP<90IE+ExM>ty2o6bA#JiRykh@ZP#W| zCDmJ-%uVupQv~WQGw*e0IR&>bWBt%;`XOOE2~ZC=A@Z{3WM&aAA;|Gfdd_{?e(}e^ z_-gmK9{LkArF%4(FA99L6sT`}fNMJ__Q-U2C1vxm?$4l|6JIx*Y`0`H}Ez z1kUw@%4Lxz`*c=l?T2jf?@4pa6bD&+lwPdUbaEorA#Rc_&IAThLe~@ANGGr=L=@Wc z<-2g7EKMXBjR0$VEdj2|s#e?fEWb?T5uW8_u9pT+ISHQfR@jC$+D?Ftt}(#*m=^}u zAA3y6sJDj(TW+z_!5TFXEfbZ3tp;zxVJTg>ihm=o=$~7$S%_Oycm|c4ky+0`%}bdj zV}fzO@=T~QX~ISWb`^n}g&$(}bmO5`SVgDHH-LyIw(*x^HCe=F;WBR|f^MX!<>Brx z<*FIeWj^O*yk8tQ`&MQboy1}B%Uj@=!@>Z1({Of&0)BT~6sp&GapW?(w}OmH;PV@v zBLCG|P{8r{wplmYWQiMlJER5B8?%I-hA>N%d6Spx61!=NDLlTVw!7R($K1A0K;1WZ zd4STcrwf3Fhl?Uq^m_@em9c`zH-fmi^K0KgAhPZzc^n1xf?#pkr9??nN|Q1R;P1G@ zIEbALT+d*!=cs;Wl2=ND^0G_Gvsmf8Mj(r~CfDj6w<_0ISPfng5Y?FC&EYqD6V&-X z_ZU>87c~c$63SB_`HZ4CV>9u)=vmZ#eSfjIkXQrY`<{Fi6lN*njIzKd{xOOp3<;#g z&-=*XYu%w9Hb5K>^u6 zYe@H9#LnQsGWVsh$^Qw_ZIc$Z)t?urW$x#<4jG`-h#%dM)!+IN-7bM~HL`F76zN86 zKQX&a6N0a9@PEaHrYE6<5J~k8gn!hS55!I92>Sl)iZG^&O{L5IC3+|A%l$jSQ>z>p z+`B~)^jOlxHX4rq9wL2r1(M;3)xxxZ=3sBWfP`~?KDl>8BknW^E3Z5{>-$HWrmQhrOWHko4L znIbr0OXkG=)&Z6G&URI+GdM{Z+J!#ED>VY?@a| zhS96hN?l8si zZ8c^X5J0z2PZ#cxFg!O}6<@AuTooicnngHjk-S(lbBBBm3OF&IVOx|W5WQ^m@G46E z7uJqt)pfI#mHDi)q##F{IOxRMto$TH2suMFhtDhqLpc|PEj~pI(k*ERv&Vc(bel!1 zevB~cM!gb4l_MaEQbmXKCx-Y)M}domIR>cX@+8tNzi8qP>M=2Ce055tblhn|>W78v zCd{eh#!tAC1?!v!By4f}Vd?J1)3}Opv{;c=6~MT0V5}snj>6=*b4z5rieCLk=L&%f zK{Y8(`iA4%n-Hn@$PXHPO@+GGe9 z=Y5DLw2=d>O0=kQnv*0?+SJaa?%;`FJTrHZl1kjAx@;ANLa`msLwko1lcMP)nKQ$c z%mcr3Uz6<~pHGleZ=WA#|81%&;@;RdCn8MT@dx}DUVN;da1$bx#F$}%RqV_}F|63L zg^i+mNg!wl%w-c;J>$YaY@oE_y!26$ zBW~h`MD#03V$GkJRX1Mud4JKH-ffjgSe4d9qj2Mv6yUf*ctb( zzJtc5F^DH-u=u=))m_4EqHVi*T3K2FO>DL!Tx?tIqmRaHBau9JXg0@Tuur$QlLv1En3A)w2GL&QOev{4z1GT6jT=9N4n^kd#8<1&cF<*T{m^^ zo@D_;Gwhv3Z^^^9IP;_YM5Q0=-k%Utcha4 z(a-E>5CRC|NoqC}cm*JiGCZj0cisH#9VPFw70P4y#bXJ85caBJXz4BB3Kx`U(%m=7 z@_fs^&n>w1MyOmTnwN+of)>A!UO9&$5+cy2BBEXLmh~3L_xQDH=KJJu{H}w^ZhIz9 zH!B}r=iw8`B7Wc+(i*lDM(~giV?dYTB<)fL*rmG3Y2>b?NpY@BLW=X`Z~_rdPwnJ* zwU3WLH9d0nEGDbUzI;$=S6mM5A)Zz%5ra_rWL|RxAIGnf>1dssJpVR{?fDEliB!@lB$ZL@42lgMdao!c^V{sMY6FhDPIMhK zok*jrlTMh@#j?o}n$0JS&5DFjTeq=&a-pX$+!-!lhnrOC#JOX_6C`JFqdl|Og;@5{ z5hV@1Vix6sDg@A2&d3{!J{t}FGl@se-WaIY6Y|OabY8e=?M`dP46R?&qX=i5HyS*v z)rn6o(5&9DUJ7$WGwWg1m^LqyyXNjajuYvw2pP$x z1t@fDTHV^N`Dh^L%7iQkvhVAoQplZvDuhTEjCN6H?Jdsr7RFRHiPg&c;)|Xs&ze*k zHzd)Wa*h`cbBIilSaBF6O2ME#>6<8_kzF7i2wYB{(bunwX><#|L%EtBX_DA$cc?+T zIXElaFX}1IfI(XtT;2+8MdjnaUjmenX2V+(oSluY9W{^PxwEQ401?fo@vMC=PRN11 z9xW5C)p^BKIL81K!A&WwUS1_$SgRq0utJ8l9Lrzk=v;IZ%?LsZHSn+=!yBK4wj3Zz zWFQpgL5m;|`LV*u+H1`Z&U6SknX8wKU7bF4>8nC+5bby|VVd;Sbas8^xW-e*x?T{H zCyD9AL|y3mO8Y51z&gi8g=&(sNPyydN(yAtS{F2}1SNrTKA|@rmr`lJtkdD8%*htz zGH!71cSgId6yxXl!0q*W`JYRa+^0Kw&$!r@yI%=j-2h)X{b@~}0re+|LP zVTLpD7m=CG-EiKR_{T3_vBFYL4!p6PsSl!t@>Y|*O6$-Sn~RnS*jiuNZWYL|I*%(wN~II-fx*=rAHtKmG4ZJK4U`5MpQjF^gL;NBG&6L3VF@N#RdBA*w1EhI8FBd|Vc6>PI0BiRQ%hPRl(;&&(=A5-yVwE{kfJ zn{k{yIO4Z=5i4{ER237k#LlM7v-7S!-RF`@5s0X9f6`xC?3}h+WN-f{>E&q9 zo&;>Qe%#xg-hA_@8QNuGYNgb8(-Q30QW2$c(7U(_qqxj0@IvT=3OS>h`J%xXsl?Hw z#;5)DQ;A&~@shVD{GfT|zE5X9zls=cI!f#{N2>?uptG+bxy}gg#YF{sr)&-b!bo+Z zVXxG+Y~g$l|izg~1)2EhydtYq+Ok%T9_h9=P?wnp_EOatTtW2K^360U1K zObrW$y@RfrxN=;VNr^NbmtvC1sh+5G(%|chO_4Dq!AE`T+`V8tcea4*XOUcZC|MOO z*@ULanJm`CKAXe>w#LC!`hb1gu4zW_Z2KuH)6A9FOwQ|&X^FM$7LF*0ykfyk`exh` zvQW+3gzi~d7gR;9Y@v+4Liw;(FHCh*=$B6(T7H|DOO86kKVOi$Z;!60bR%f!UJwmD zE2`%lp(ZU;Gn0I;4?!oj^5&$XEh9%Wa;v7Q>m{)v4lJh+koj)%e6Ldm_vNS7i>KD? zyzmm&ta)k5N2lzR(ma4r=q_q_ANh^Snp&$TIYm6_L_D+1Us7;ij9*}03`ij-*R=9; zjP|3SH@vi>3s7xd{E$qprO;ZctWFgG;mM-(~Q%B9_Kh`c%a6a&0uU0OkSAVjN}hh9YR z-y}tD1WJ33{iIB&DqDoA(|f1fi<23N6cjaQg-XgDm|QX#$1UbfT^r^NMWj+vBIm8h z9UR0W5@wFmC*K1kk&lcR6ji`ilJmD_tl%aoT|YIL1Ag(C?H%EDj{jnrcQ>h`d?4Q# z=&7XO3FOi&lA!R$guRpFCFY5d%pOd)sc))F8%Pd;7A8m7EE;#}}(zmhZmo z0i>Y)050(q&$5ASOdcl654bMq^p<)j&?KX5gich14ardFNLA-z7hU>W3A@4vk#r}N zBE#KMd!IX|247Ud2nb>eqv}0LSH$|}yLK`U;8NFy5Md6QuKj$RD|5b(kNE|8rVMi= z6|m^|r2EO$k5~MVt3D$9A@4*{z}NR(jP_)(n`cg`StBnm1=x8JM~UrKJv;V`YQ^MX zDZG~L>)Dx z$XA$2a%bDc!$nUxkSd;afFl=JC@4L5K5nfAA?2S2Wh>jWw5!Bk`O;YHK+W`Lo|A3W z3liL-I2e81?vj*Pr&XVjB;fXOs83AY!}x3VoEA`fR>g`H$&>E69vC$NxvW%15wv)Z zi8w~R&dQG)`O4|j7&S;rrDZ|4(YT89ksz5li!!$>b_z3{8lE8olrD>h4PE@}tCCgM zGZc1NT-@=+2UWB{ePunreOZuTtg+{B?iDl&&Mf8BY^ww^v+tz8>LOP3wCsjm$5p0**ZZ9#dIYO&+!5?qg%5c58RGXe&(~ zTz;nk9`8c^!XB@m8nK@qbnMQG;3H)b@S=k|1rDVPMc~1Zoq2Kb$w|x!0Dput;M|KQ zN8(WFp@O%4ae)g-J>AQ($_=YL6Q(}@NyW0@{CbXR)bbpWJp5=Vyoulx7on9!YCLv9 zpWt12K{@&LVGEu5JVt}Z{g#nS^NNj|d6+Q2RSKSw%b(+-%9g=XwE^quN-{!Q-0d^r z6~HyIi6{|6{N6 zdJ-*`E3Ex>^7T`0&mv@Tn zf8&Pv-nsV%^XcSw@&BLk{Wa`gd1L;5@$Z)FP5S=(AE)InPMLp2_$WsEu9o=s_B*k| z`|)q*slP^i6rlZWkNLOuJ0ki0@Go9f9|J#{W&Xd=T<@NL4*Y1H`4Q-&x#Az7)pyay zzx3cAK>x5>{0Q~Y|LzZz|9fr4zl8eRhS*1-kDgtBfY9IFP5%YZe}(ydIX+rp{DA?7 z`zM%xVT|$DF8%vUTZr*D)!}~^@mt6EZ|(P`9sYa7Ki(DpbX$DP_FL8XPweA=iT&`7 z`X{W9x7cru<3Cs|?`E3+UN8CoDjt6v*hj_V{|A}t?fRbq{*(UkU(tVe_oLkCA9QuR z|ERnFEI#@X{-fsOA9yCh{{{Siz2ScM{i7_;AMo>c=KjAw)&E|k=i@LwiURz}w9NcJ zW%@&K`a7NJBlt(Y)E{sx{{I~OzhzH-O!u*}{7*VP(f>ude|uEKK;5>R9>zH`U+E6h5Z<`1Qk|RMtBGajO4%!v58C;BU~sA6pzYfB6*rFgf^Z n2mjUN;7+24_$DMx literal 0 HcmV?d00001 diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.jar.md5 b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.jar.md5 new file mode 100644 index 0000000..e5aea0a --- /dev/null +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.jar.md5 @@ -0,0 +1 @@ +27c6777a52f527a7efbb4df32c2512e5 \ No newline at end of file diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.jar.sha1 b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.jar.sha1 new file mode 100644 index 0000000..603e638 --- /dev/null +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.jar.sha1 @@ -0,0 +1 @@ +598f1ed21cb1b5d89a1ea9ee0123211f21ed67d3 \ No newline at end of file diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.pom b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.pom new file mode 100644 index 0000000..90901f2 --- /dev/null +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.pom @@ -0,0 +1,28 @@ + + + 4.0.0 + top.niunaijun.blackobfuscator + plugin + 1.0.2 + + + com.android.tools.build + transform-api + 1.5.0 + runtime + + + commons-io + commons-io + 2.5 + runtime + + + com.github.CodingGay.BlackObfuscator + dex-tools + 2.1 + runtime + + + diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.pom.md5 b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.pom.md5 new file mode 100644 index 0000000..778f831 --- /dev/null +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.pom.md5 @@ -0,0 +1 @@ +8a8b34cb96bc02a875597ce209302e46 \ No newline at end of file diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.pom.sha1 b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.pom.sha1 new file mode 100644 index 0000000..d6f396e --- /dev/null +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.2/plugin-1.0.2.pom.sha1 @@ -0,0 +1 @@ +655283ab363374fc0ea086307d4a4ed80c7c1572 \ No newline at end of file diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.jar b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..c7bc6958384eb6887986617f50519b6ca4c090e4 GIT binary patch literal 32660 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 literal 0 HcmV?d00001 diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.jar.md5 b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.jar.md5 new file mode 100644 index 0000000..815c7a3 --- /dev/null +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.jar.md5 @@ -0,0 +1 @@ +249debbf4b43fda9b1264184482cc43c \ No newline at end of file diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.jar.sha1 b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.jar.sha1 new file mode 100644 index 0000000..3ce9e30 --- /dev/null +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.jar.sha1 @@ -0,0 +1 @@ +531ad837be966650c1987f0a234c1550eda92cd8 \ No newline at end of file diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.pom b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.pom new file mode 100644 index 0000000..b578892 --- /dev/null +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.pom @@ -0,0 +1,28 @@ + + + 4.0.0 + top.niunaijun.blackobfuscator + plugin + 1.0.3 + + + com.android.tools.build + transform-api + 1.5.0 + runtime + + + commons-io + commons-io + 2.5 + runtime + + + com.github.CodingGay.BlackObfuscator + dex-tools + 2.1 + runtime + + + diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.pom.md5 b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.pom.md5 new file mode 100644 index 0000000..0f82cbb --- /dev/null +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.pom.md5 @@ -0,0 +1 @@ +8ddca8ad0f0d91ee7c7e3e2dd68db17a \ No newline at end of file diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.pom.sha1 b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.pom.sha1 new file mode 100644 index 0000000..64164fe --- /dev/null +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.3/plugin-1.0.3.pom.sha1 @@ -0,0 +1 @@ +91ebe6cff18e41e3cf495bd2b5f70eafb98a8da9 \ No newline at end of file diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar new file mode 100644 index 0000000000000000000000000000000000000000..83f0115d9f51debbe32c29d89131c7bcc6e5980a GIT binary patch literal 32991 zcmb5Vb9iOV*DV^`HaoU$W5>2_yJOq7ZFijP*j5J}bEiA#B%Pdo@5kSF?|II->sht_ znl-EHS##AKbJSQW3Xo6;U|?`?V2Ea68eo4fh<_e`FZjO=Af+M3B&Q_J0tu$_pN8RH zp&G4UA#Mr(8sPtJSpVG+Af_ZIEv2r(43Pc_n4M8nU}9cER$!u^pIvBEV_oGqI5|3j z_;1cABSQaWRH(ns%$*(oWk7`gF*C$}xAAs%a(8z6f0>@-7#tpfgMt0|yOMwA_>a4P zH&u4AbTjpEcKgD{Z0=y{?(V1taK>aq3v}Y%YTm1KT;>c=FOJyjw1^vHidF!Jx7{HL z)vGx=a;P7(G?y`gT^(HhzKEDb;d%gjUxwC}N2Zq&W__LGyWl+W@%RQ*25V|Q8y*)z zeFl;7pw{{PFojGq6m$ixj#EpVbZ9IOn9@QYvW2xZy@i_cWy%vNNeh_@KN!iU_|;<; zlDJd;{KESRQLn39|G2I@UI5FZxP=`9oL!<6Bulne4kjMmc|) zoeSBu%Cn)vZ=c9BVW(kt^cT368*|vc^6G*gt%m*gOVVSD`E>=R6)Nd&T+xYs))Xbw zmm5;cts|_Qrw6v(R;8yN0LbSi89W@zCoO`~jnjS~OoDg;w5R6m89lU#PY;iV5)uKP zc7QpjV#(`POuNJ-?F%Vpp&2UnE0Knrh-C=QT%=N5d)y?)!^zE^$@kcH}8x)82mf85$>_o=OSFz$Sj&&P-c-%2dwMPcrMv?b0btKDq4$;Bhg?`WTt zFV9$`Xx9`TSD(^Ut0o*iLgj#ibY;8;hPvt}0+OYB+V4V@hslwn1c}u?yK!Ja6FoATf+Zyz zkdeLvUsG9>K_|8els3a01l;yMnQ05Ya7#bwjZ{GHFy2n|raaE7uJK~1`k6U76w7lDEu}H^cPohqC;Hs1-ENc}u%u?(7zu zHH#!1JQ;}zU#_91eznK5P718BrIm1}HqU-std{2xb5o~{fn=6dDf!GSFawNDrith! zid$z+Q6Q-2oJ>tjl{{E?e|3=2p5iM>n=Lh4>LVo#PX?J!z)>MHkPx8dLeMF&(!w)X z&9ir-WV?@DoJ?`Fx^e(PMr#DqmY7=kiVSJ)e1$T$@o~9Y8c+;W0zOC#DN^xr98>19 zPA3X9#+{%OFE{*-rk`p<6Dl0(9Hp>Nc=#z)cD&f%O1qU+%nAoxF!9o4d_ z;qbkH6xXE0kOwo?FJTO2f28y666;99p})+?rf56QwwG;5Mov#0v|zf2$0s_xpMuzm;IUSRGL(;a`ERX(pZH@lgV<@Fs9{`Xpe;vfHbm;@>ef}cc z>-i4hT${ZDQs}QRQw1s!ErGZvJp04EJ^Q1mhzCb}mc~7pQ;;4BI=7^Vk1BBbcYc`A zasY-iCm$*1B34LfSE(T@gIDm-OR@Bn+lL-kDav@I<8Y;tMirxuey zXX@Gma^y4*9%@x$8vlfr{1pIO6*ys4NQgAIk#%wBR?hpC3gKFVZ$1mUxrB) zTff<5TfOE@K6jqA5-;EMn$Cfb33fb#`Lr_Z%*wIDnUrL}Jgzdc%vgUN4W;UAhkN`F z5!^}ksOu@^AgbW)r-0s?%cslt+W|3p{~Q3q`acWo^s*dp-;tzraIgf>gSu}BO8oCU z=#R%vuSek-^ae-^XR_x%BIR2UB{*qlQUg?!X7O|#ilgKazu9Lm0D(lR2!EWVqm2mk zqX{D8NLYjSx4qES?A71c4bE&?O2V{wZ(}cbx}$ zPu)Flyb&7w4mBw@SVW(CbG~nSYNCrVFu%ftlFn-B+?h*)fN~Au7?!+@pcXqTuex!F`8nt7 zz_`||cQEsj_h;@y-^XyitCLCnOqH-t^50Xo{o=%b+CuJ-kTJ=~&5|=zN zNYRw#3G)n$UDgZ*=QO2~Mkdk-3Uy^82&ZWIE_4v>vnhL6#0Bkhg0ZX!%7KZ*ln_L_ z6E5LEh|*@rI|6ghyAxN&sE{=1JKKiolUgvWe$7~Dg$qLJi?`k)1rfaw7Fru0KtHj( zLc2f%zhDC^`1@%aMnhNQv&y~t89fiNZF!6`B3;A@fO577O>%tssVIl-9z;zF*7uRW zaQ4&p%Xkn64}Mmc*!RN-wbT2=A8jk86Fx4p?Z)(-hc;!Mwm^y$zkA5z1pN&*c>fC4 zZ=QZ7%?a16x6-7$4#CJ~xT^GrAE;iK73dFx$0VhK;Y?Aisz$qh{q05)g++CBGWjEG30qu z+ekJf)o4YPQ7F06g(9f6o>GQD8r>`&6mFZ*~eW*mydsDu$z zfoldwjU^{W=hhKo!lbAVT;1lZyx6$>LPesZK;tN`TXu(Xwos`h47u<>^Sm-pH8mO% z42B@IrIurSPJ%$hVb_EW> zQf3cDQ7Il#dNL-Oz|X)4GnWM0O9hlR7S$fNVQ4kidIuDl?vaKUD=%r4ke~Kue}*TQ??Ir z8w@}7dh>jZe~UB&WLFoBL`C25yj;-}7EA8t*amfHv*ST#jPoMbl4Kl-+DbJOEov8Z zr8+61#%EwEA0b^N(H(84M51>|OWX3UE_${Pb%=~AqtHP2a4^A&+}qyJwuKQ}TUsY@ zz=F^&7tw2wB`|TrfYMP>sRm&#&NVq2YMxt(Ud^1IirKhmp!W*&n4=UYD?d{Okldd4 z4cg8%oOOp+a-(unuQtLwc`+ZQ1iclR8(g3|rm9#-us&4-K;bhkl@PrQge8P@4> ziTGKNcl0v(ydbhb<)}wbr1LSx?fD`PrZ%wTs+$+d5J)JApRg|p*jWeRs4A5yNctvR z+OT4mNPEbFVE1u-8(P6~kI-kwN6h2*9W#JfdmyPYv-fw1He&X-Ou?Y#*-i{p;B0Mf z(xNPA%I4QovhHKHE_T)wjk0lC_9!-cPD!Mcg(B8gZv?qaoc0OR_gCZ`(xe)!b{7S8 zR!nFw3DwD?+I7FEuMxG!cZY%LG1KV)n^-BBwW2}r|Ee$l0qQrN*-D6iE6_ajf2%S7 zKWeyt`+Os`VLdR_g2VzyfsHm1iLDUr9ZS44$HF5&@?MO}jJ>Opf0&y+y0Qg`kJ5nXu#484@vNaXbg|Dk z8OP;X_*lk_&_@5zvlD2UsEtb@GqBM`DjfX)$5toMgYF_kMc7`b?ye_~U#Rtwm4GTz z2l?V^EN-s7gm(Wf<^4#FWwAdW!^bvWa!I>?HpMp9EPkfOu(EUCm93gUtu^5tQ5hc@_Qb@S}7sfz)M zGFV|Jq-ADToy@;DA%uiFC#AHG345P=q3Et|FXDE{P#$|xIMPsr$#Gcndd0pP)U%V%p^K=99el^I2A4G*;D7Qg7zidX17kt70op!XVb8W6>=)eip{*y4Y2sDe z4qSF+iQInkVr^=nGj*0Dwf9NLanfV&=9` zi8Mb|ZF(kVkvU2>C4UdIKh2BlbXisF@s#XusIm5fHK08>u#}i_mt9iv++s(_*zb5c9P9=%L8`~zXB3z2a zSQQ4S!ux`VFS0TWP&Vha{29?1;0-i1HnnWGurgq0tgP!Mr{(K56&EI5WnOBq%VX$~ zZ|_ptNf^*Ml2rS12AO^&BFVMDYc7YA#Li?^^N*k*CsEa??q72zWP=6h78UU0waB34 zsao$6#o%2mO`g_4?fJfbqnpV|6IKxQGhDuFSN-CEmR)CfomjGHH1 zs?JgB^6>CrB@b;l@k?`-;4Hk7+-CM?#O7+7(#W`@se{5SDXIxz#iydMB_?c<12T~{ zBU;zFyM9(DI-BCE>j9kt@_ZYP1-eU*`(8-g&$dHNy0zrMJOW5X7C{p4vQY`H#7T!h z{-98j%!tIIquAJ@ixkmFvl<+UU6`#~3dP}TAC zOIYYDyP+hIbgArExqC!|ZpBMq>&l1d>v{_@YQIrouGWhV``GQYGO)r ze1B>%s(ct;`Et-S(9-J6LKjOSwTkY-9U*hxkiLF^k5pz!=L+-mRp(ON6ayO>K7ZEz>>P2G)82T3qyx*vc0Bv9A+@#J48TOr9O* zF*DttIq{ZwTgVsHS%>%?Hg!C2PZ{e+pmuY$rWu@t!?kBmSZD*yA6%(&e&u8a^Evo3 zJ+)uV)tkK=?TgIM^2F$pBa8_iEs@MvQ_XOdXG56_8s)4mwr0Gm;;ZTQlYTX5#U8dm z8+^RCO=mYDW%?`VTlW_ix~fX$hv}LKEp->14z!$GZac;bMq{YZ{CuI; z7oT>1DkrljLfnI;f02H9G!u38veK0&a?J1|kY$+1FlZB+AE+XUc-EcM2WK78R^^D% z*p_;zm1yL94#Y|H%LLPJ0TepQIA`kiB#E^C5%k}}+LdrDk@JBW!9BQfgWb(4raymx z63jYKe@SRos((iy30*%y_PL_xSX4H3e8;y6C<(H`_<2RZZX*~4jn6nsmONYv{{kbsKDR9!Rsv2H75Kj1g2(v(dUKZDV8!nTR z9TWgzwEqK@1X@Lw_{m$lvP_sOcGk);7NBDu%Zd&MQq4W67X(tYF1lW5QRhz&F z@Nh>YQldxg|hT}$rTBf ztAfP)qZ#~$a&NLozR%lXlCS{j`|()FWum8E)z(|%^dRaxvR3TDU*x+#U^T}X(m&1i zIY;hYm_Chbjx_0wn3iw3I)wXinr12t(&7n91fvkpp(@I)U+-VV{gJ0c!MN1BW2n4; z`dZ!jGVR_|E7%^@Gbk&&t-8u0qZVqY~>}sf2F4 zvYakiTn>Fi@gY?yXO_@ve=$=^1#37END&*Wr=dabv5Wz=iw*5P7C4MOj;)>fQuMa3 zXqAd9Jou~cj`=MAt>`n~|F%H*^#~FboR?UgJU?Pb+=mB6(-hNb15}6x(JcXUw+0d> z_KsAE5fEPl1?9X4C!$809B||BQq4t49*(ZPz@aF(cO@o8E=DJ59v^qhO~|Q%{AEIo zO(2Vni?OJse+i$)yr$(mxInIag4>}~-h6sjWXG!`Lo2N;<_my{k!^hIyioGhfLWz4 zbF_d@prFlmIX=N&hh4u@L(~gvGzP0G{dbAS?0#K|DYqapHX&wB__r7>f&7zjY)yfz zBz~54v`w=FG&@IQ3d^UniDN4(ZARt;!q@skorfbGYI1Y$)>ORC*inL9Ye+2y@v5Wp zqV&aqZ#-gVdT)^ppz|Pxj1DzulFpo|_MDOcK#z4kE%4%=%YshW0NwCO7VfNq(HU?u zF{e1Iq(f)NmC@(IYUpB~(KS6WX&@{&c80v!a>(F4wmcm@-Qs-pk{G$T4moP2hlB=z z{zIg^N$^e_yPxhG99DdhtkuxZI2ItbG`Fu|Th4&lN!H3vaGFJS>1j>3bjWs-Q_Vk6 zH$0hryuNmtjA$kXbeNhK`en|a;VW-Ypu?`an3u&C#h2kLC-AF>o||1Q8Qy==$B!xY z#vNf{m%@ZW57&>@V7m-T+RRHa>~5I^`O&GtB6N4lmK@R_rIv&b|%%3)^C-rCoO(>wt+!&0t&bVbRvwO;WW z{S3LTzMa!I?jahLrlFosgW1qDA<+tuTKDLNwvdpRi%Zm@oOm{^uuvWc@GI`;ME>I%3}P^m{oz@;2{_PzBn|~ zoG``ZC>fIV1{~VjbT}ZgWgbq_aYcH^6Jfhoe~%aR!)1gN0jBW>nI2^MOb_7&jfT{z7PjFAK1PR4>5q~A-_uQ4sk?tP?f@bgqMei9J9cD&{uv^ z$29>7k=}_H2wq@6Y!CeUM~3o1IFQ;DQx-h;Ebn>nUuHhp?u`Y8<(Ny`4o$Nc z|Clg=m}4HRAX7kn2xu~&>`TD5bQiRza_{sV=v_JU_9?7*P2Ae>o^qv|@vv@ipRa52 za%SusozB)zJLQct)Y{Xo4_I?E?n&ba;hj~{r7=76YNGqfu!La$8J{<-iFpOEjF!LU zC~$ezlxt#K)kZdS$Hi~bjuN{YkF48UXUnQ~Q6F{m`&L^Y^+MF;A*-qE-BnEB!fp>_ z_ww=x)v}C+Xxm5O3_PLgY~T!SILi;{om=W+4;`S%~O& zbHuT`RlF|R7OE^j-8fSv=uGug@RzC;Y_X#_^k*>PDCXiwieP}uA*wP3D_)N1JuUs_ z1}u##-zHZ`Eqr)lX|DRj0n{n6)SO2bcYp}}L-p02aH1b_RC8(p402MjYhW=|GVuLT zEOxaWD#<(qwQsA5=@+W9ke4L+wRIl}m%|mG-N8b+G^e>Rg--CAP3c#}3n>ofA9qZkN<&I^u`*ev@bf_EcDB;;t~8d{Xz*(YjXMehMUwKaJR#DCMpIqV za8iF>dzZPKo^%eDGeyh*^?Zc$Zbjh9<##j}m`0Uuu4%hy^4r$!F+NjIMM2?2YUIF_ zV;$Od2lFaj8`~}Nc+ZoiZIKx1k}k)7d-VOtU2zAxC6|8$|nLfNdt@ssa zYk!e;Juh{ngtjfcAgX(E8cqgIB30N*OAuk1YEZ~9t*ik zN)A?Mvi*cHFDv-dPKwjct?VZ82|1en$a3hH8>F8qozHT;%`59Hx{FLx%UqNam4#`WpnZ)3hdO4CJ((+hWdq+KsH z)23tRE+vVe-hu#)R^b z#YCww)fqhf6>?x3w^q%U0W-v%)*|OxAAFM*Y*(K3 z1HpE!`FKBm6BS-Tjw@mh3O#P-&?iKd$1cAV55sDMYgyukEkRW|ZKmJ2b>G$6o>S+O zPgaI{V87_LCf#%3l?a=`yRwT?v|-(2P4{*7 z7{4&;`cJc~)O!ar4?8^w!;f)a2VTL)cmq$uw{jtlS>B9dqe%HqSes`u|BVMB7h=@) z$1fk)I^%soTpZ^7GwZczQ!Tm)UF>iHBA~=>DdJHp7#;B+RS91G$j;tvjEp>fLZS4m zUGh2}{gBy5>gIk*>h6}nvjV#!??3+ooc_h5|EV+iNAcm|?D8)%j{m6&LHTzZCtFV^ zQ(HUFe-(ZFPwRi+?mr&?%i7Gr)ZE_L%*xZ<{2%$pzl`+{-T1e|f6j;U|Jd8y+0F7_ zT>LYEpt2Rqw7+XPgaZR({l9YoFm-XUb+Z0<1g`0*PN<0$#H`zjmZ<`fFg~DKfwrHE zqc0|^(Y$E`hK-=s-V3kL%6UDp2dL1r=2w3dX*YhK)Xr&9@u)neA^wB-0rn}0UDPK> zOMan9lh$|k7jpA0_|EtAef{%1g9(-e0>II*RUGZ1U9zr4XSr&Qd%!*VDAR9<8(^pf ziiD#kBbmaq0kTJ<055Q)GnPi<;*gC|i=pE%j9dqpbj&j+kp^11_jJPQuIj=f+Moyo z!{Q+G?OA+?!ymmt`bl|S2AAd#myv}Fd0NuN72TTmvjzdu3+_#>`?ET|+Aco#@+Y@G zs&f}w)WUasNUU0pIVSN3-L^UV;X@#u4vD+cV0OzU0`@*z{I-aM^h3sTI(V+s_7y)T zRd2OxU=_hGfEBEyY07IN`j68k>PX1{ z0>9k=hB5*6E&^**P`&LC=k%(K6Q4Le2?~TAqO~ z)i)9T#JOFFO53zbxmxmWV!d`g(5{vKIM2DaRu?6QNb}3T?=|Glw7K#}Y>{!%HkuKh zECCWQy4aPGp1Typ1a6yTGz5(I@d<*qBC!ghtgBfjG*UFMCGIYz>Z4NK1cF$cyA#^< z++4fhHMR_8va^PJiiExk?M%q#FM7py<7W*J;|6wnvTd4&(>U%pMfeznhm*8KU(D0; z8bv&Lpp;&Oalk9u+=#xtXn>}C>LzlHCVgQe)lVANT&(Tqx0R?H&mKM2$u<*^cid(? zjA>vh9XyZ%HI2ll%UY&4#(q*hYc2SO`KlO0oxs(UAtaS^#D7KNt0+pL0seWG*}EQnD2fmeLA>AsrXUP}*1j4 z7($VVU3@}Lb3eYGd>BHJik$?FauY-HE<7S>G}8F+PB+QGZfAEE#0ccH$JzGv5Hi6? zqnZV?JeDTezR`7wUjGy=hy}+E6J|Hsrl3v{P5#b)@HS9X@{wrudsFOKA}0FCJe;JA zZfg)0U}9y0ItPK;EKAOKPpD@FO9}K^e0BLO8kP+ofrRRM`Xq^OzbOvXxKJrv{iJ33 z%8t`9q!Lw%1pT8m?0EVTrPSYtF1VuMPXiO}lw)Y@0m<##+Vr*z`ssFzRw_PuN)^0c zwg9|Vfkgviy?aE)zJ=-c)_VT{_g!n(?}w=i3Z%!fMRBXxh4~X`j^Gn=$6P@-5scr) zwy{6B^kV&+vNq#NO0YjmHOHG{Q>xC%qm(ONCxqGHQxOzvq2xc=;NM-G9%Ky zCGtCoJwdlQ6RhAP3`%)I)wgZ#$1bN!p z$Ic@WT;&q74L;(ZI>}C%ky6MC zNEeW|0D)5cHGG{IQm7Rc5QZs_IlVv6Fla=fz5bAP4s~y%_K(3lc7_ih^WR@ zfe8x@Z+#@`sb{I~TacDQGQV+RXyr*?%fjBb&8}LKuII2zr`=Xxtnf_Y@R9A>TVYJn z%B)zVFfMdD&6dlVoK)N{$7Osg_YPJN8cAIRgKGZA9W z(bXipj;MhG(GvRoE+>32I}SKsqES9~yS^1m6(d70y6g-QGZOMfnL^_4uDL7>1qzyE z^A=b$c?rpcBjs@UIw0h0M(9ov_(WsZzNUvzXmJU$-{UDG8BBbUI24heXntvWh6gs7 zy9(WV@97ae{5{5n`8f+;o$7fjP^i+nQZq=X)2cPTymPz!#9B}R&F#}x!`xKrRB$>Q z!%M24VzVfXrj8p=n&u;SNGVU@Q%1W}zJ)a)A+%8jm}OQ!bA!u{4eg9EW!$)tB`FhP zXSV^=_-ZVIjPMzB%Cq<+lhQ5OTMcC|%Tk7YRkUk?dBv!UKhwSsJ;=xgP&0+7=E6?G z`XsRBB2!)A0mI`XGM-jL_hY7K8n-75;TlxC&za94j?)<;M?SBe3?&~S2S1-ANP@HY!V zTJ!L!CORLuH!8t;vSB!k*{wL4F9C+b2munqJfP}uXE`55QO6d>QCs<|t@;#fIA$Iu zjxOw?3pQi931Bs@ApJ^%dN!#HpXEl_DGVsfiH{d;*wV zv;7r$fxZm;8S8yKJBC8P9l8qJ3Vgb5@Ia4-LUR+H()`g{P}^n=fv-41h3gF({X%Ei zTD2{fD;`Gh>mDeSsM%W7MVQfkGnK@~=9S3&EQ=D#;<^L2m-4#H9-FPUuQuw-lRx~R zCF6n>gAKpJ&oYC{h`J(^V8cIOa=0g3Af`4g-mEU?J|UCx$UDtbiNyj}jXKT?v^W%Qo9>k+&t^UH z`79(nc7+NRE$o|eII?eDkRFsg>u$=A0)_S)QGlG;3+sIXKxoRIkJ(H30UX;`V};N1 zcDqnp;%|xHGKi)5%k!6tbnDcMPaLQnPYsNr9eD`p^fFr>r`cjIr{si_>8M{r>9m-N zZh_bd7$jB9WQXvz0?YLRiNcGf{?tWS42Q4V7Xt|0eUme`-ul&hin@NxcW9AqR;8t1 zSf>}g1nxWtjg%t4sTs_s(&xIOK)afqvfjys^ybh+#zOkYk9UFEW396<#k*qf4*ni% zmu1xJ=5uz|yf6<`9liNz9aPuQYM;${EW3Om(f~oetBkw9preXtfiU+EXxbBFi(03x z-s6c*VA61SgX#A}yb)&UGNkDXfeV`N5QFLW4A_Gch!{p1Aj0=dii#s|r03@sNXuId zMS3H%p|4{_8t?dD$ypM$Tmhw#YSonk13^*=;e)j=goWh?buR)&l_YE=DVjuzD2QPn zQQ==}UG7;z%-55Cw@d&|2xjKjer@_P)Er?8Qn|=??U5>PdC@z1sLLd#eG*JUg7O`! z+CWy$>#IfOrvk_OeJ1duFFdGC2rrlZKFyl%uuXD4hU0`UES9hOB#N5Li?bzy;iFOt zG}`&}!R}wkH4ZT?Av!pudFa5d`d;ImoKDl)@^T+}%c!h*>%-*-#|%dr=pC%`08v<5 z^TGbZhVt0s5gikK=vL!)ReSJa99NohzSENpm($x90rQ*1KMh%FwDfD=W+F3Yoj7$% zzn}@HdpIrB4ETKid zs=*FM^h*YB{|aJPpWoW2I5B{ysvss@O`FoRwHs(NSJ%g5VJHtY1dZfj=WUin&jkiz zg#B{lhS^To)i5;!;CNYDxHI0brH#eG4?jI#ZgHFEZIHgO@p&2fxwf}O-g>D2m{zNQ z{ej=J6c{y?WXzW?NElsIrYUjf%(y;o!EHKy|5wc9A2^s0#^3pC{}NQ_SY=_ z9`w^IE3q6QQr~#?+PYfE8)`X#KW8;`W^^>XyehIKTPhWDuk}|DXFWXC293($&(kw( zSva#1J%njDJaV{*xlSlCFZh&{cu?@6~X19!Lw39q))y1d!6)QMv-&m~N_UKUV? zaTyZqZE&h+I;5a3Bgvl74o7=9VGK`+@@2{{;ftZ|FYu4-S9TbYj%vqtgdvP+=x7z7 zqz~>^-zDI_gz6OsA21t?DbtbLE+60DEtQAYPrYSDOlQ(*%4?o8bK1CNEGNU+A42>v ztX>>($6d1@HVudIRSO<*|70E6pfkI_UkQu02`Po6WOheqkqDo#qvb`=r!+zO5aF!H+!`q>mt#5A*!Lh?>^+_SgV=J;GKMzY@Uqh7UuW9UaBx|CdX-q^@Q zUB%pV!{MeCWpB%BB0%DOK;~E(<9D8`EcIDET_sm zJ-{7jNGg%C(nvs@ii>39L9abi#UB<-707fKL&SE;KV><12`uKx4dfLgE3vy2&Zlig z%wpv-K0s%bm6YXI8Cr<6(Xha9%n0*D5x~PrxQxEDBAR?;EGnYqVUY# zAI%|&XB|tQPn9SkJ}Xnki#sz8twYD(EN_swMiE18TBdtlzL2cnEWI1!J|4)cOe7k| zEBhT~!8FVV95*`4rNjq6@JQ1ECo1{r_tKsE;w_?i*&UY0Z-SIxT*LQ{(n&0F!r#HT z-x{fVh`)FXF}8A_^nrgH$g{cO*6T}Khq1j0(%S*_n;zZJ?3axRi1t_2_`2@!2lIso z(xtBYm0HXZ*zw^~i1P{=L6blGocKuZDm1W2CEONwLw=K_^D){*!VH9qn~~z;#;icl zf2k3wl$}BB2LIEHM&$s`&nDqtbJq>PVCLFJiy?4~mQ3K5EbadNTUBiG`z`m_)&TnJ zh)tQScAC`R?bK!fHknesk{6t-ePy)A66p+wwk*3-CB7%a3O$ji(zy)IbF#(DH)4kw z7^J`VojZnK&n>lO~lH?4T@sV_b3yxS7HTqjY_Rd*K+c`s`;tz(O7@<>p zBJxt8POV#X#2TqbGY?w^0RE@HAPQvd2*tN%*o1pkj9R{S4E>~DSc?~Is~kB6m` zyREa+zaiQJ?Kfj0ZR}4JMkGc^aze5#YFjyjsn$g&i51R}N&=hQWkxC(gw$$YMo7ih z+4{CNP91wvyN>m)j)BXa*Lv(!YVw2zRr}Hpwh!n()!#WdX56_`KUl3#_x9~Rq~uVQMmxj5Y_%_y9_*m8dw(`ZRvGu)ATp7wF^4Y=;N*MVN? z)SyKmSh#fe){CIc0>ucAmIB0YuxC4!2RYz7R|A?1^ zp0xMSGk@)gi!y*7lyO=eh2xbbzjj zzfr7edn#uu!$rIpQUPX9F9~iZ8=Y3Ldj{kaz`SCu&J#3}*z6VR-t3FohPeK zB`QRM-+0KwcNDNbSDcoC+sQ9vAP7@O&`Yh- zu7k_2K34rD<4TmYR5Gu{GI*|Hl`s)B!&QkaGk#oJ^|hnWWNO8oJytA0Qq0iWo{p!+ zPIj@LY209m%iWe`5s^L{?6IJM!B+k@3BfxZ|HA`$p7wkIyY@Dq@aMY4d^%-e3$b@L zM-mJNy>O%G%q6t94&uMNFoJlgih1D1AC~ zBt;VlTxlYZ3Lagst?Ij zEInJXRY&SjO+QMES(3i+@NNzK#;7d;<3WIxG6uEQ5EQ1z9v<|E8d5nM$aEp7cXH$j zJLyE0^-X;F>3=q186yH*b~kWDkrE%b?lv9PLHr?bCylMK@__#x9At@sl!pO@3(QapGIU=?>gkq}WTG;6bnc2Aq& zsZ1euTp645ORN1`$X*?{sa-|XHQjSMnu^HY%-VQ*h^4v<^nb%mrnx> z5od&J%dtY{)S(+s7R}jSxhFwTj5gKm*M-WHr;O^C(cW`V8Y`B@h0O=vIHAtsz5BcP zFfdQ3`j*oB?uN(q z>%^m8?>#OFfOH&djGg6fo#3^;cKVUqj zb!Z=8w9VsO=#tiyiXrg^0(Wic#<#KkrG&wBmE;*o|M_HEP zZ0_u>*)Km4bA++29Vo31s zsg$jS(t6J;gxg?fr&vMnYpSF43SRgVfb!rQyg)7-_1oj;#YHS}OyD_vq9(;7^{v4O z{G9-|O0J#Z2;En^O@Gg^!t>Y!H}XT|KNT$|7wvia>xv$`;jZf+aJ>cUSzMh$PKsNa|IGLJsPOob+ywYH{ZZKbia; ztCS1OdC+w600|%uA7=J83gfv!mW+y*N=`ehSI+OsOT5rU;~XKaIwl65wP6o&``}JL zzTzxEzq>+^Q&kjNi4JH9P8YZnOSuL2s-Fe^3M{lpQc6=Xy9$D>- ztob7xgjUMk(j4;0_m0*SSzu40c#|Z)))`Ur$F+OA6WPw!PegbAH+F~iJ%=)r0@huL ziEpwD!%Se!W?+jka)lYJpx>Yjs^2g0B$9`7(@ueq1es|0!Mq@#Dq=GqC z;28xoM)_dl)Kca1V(~+($~~%VhSq=QV*knYJIL($kADfPy}$oo|DOq~ziD2@!PDB- z=|7m*0v%rytP||dz%6sHtdOygVszUIfMpvzGn6DCoq)pR3%o3at!P}@o*a8~&erX` zbaO|;(<;gO{^t6&mc6}xTr_z!!c+44_I96^zW?T1Yt)ly`o};HVAH~z{4gni<899W zyZ_zuJWJAm$EO5XW{fU`XJSF3zSaElTmv7&e%3PP&h@~D0e6Xj7xh46)7L5MVW)kI#b+AE4E(|62z5@JcREu90)6rM99Q&y*iaWi&jHj=;e!aIrQ?~YHP(kw_I(`E>sH#f1fDtSAu6D7KviJRs-mukjvCoY$#|Y2Jh@p zv?M~FYlkEylS8Z&6;=td;uSFVxi}^6uYnU@nvFZvX4KIxLrZNttq@g8tj=Le&K5`v zri-1$95z<=xGVYaUmEBH@@8a1Yq#qq>M$Nj2VTjiB*pM~DVM9FmVN?JcBbT;jcvW%LfUD_Td03hJrVv9GT>V)0gZ4Y}w& zYShkn#Ahl>)2JjY_0Cmj&g&-fS&U(pFQf_!Pi)p7A=jKM@%(ER*E1?R*d=MFK{t1Vya4XUiV&RyF>MGW-f4Idc3Jh#3E>&khC?r-XYg3q47GwwzNvO4dd2Bbg zz%pP&lRMX~+R2=T&(|0C8BWASqjJ?v;6kq-p;8knGI)1`hnr2-={jYP_m?>+wfTL? zC57rytnO!0ASgnM8?i(iQGNc9zrs}96VC@!9N)32iI;+&<+D^-@FLhD<`Ij&v|ki} z6f)_3WAgS_YA;`8aH%NwZxD6gvf*NqZ~c`{*hz>a)H5%CV-ii}4sY!#Pnt<@K!uGm zMa7r}_s6hRl(v{BKv4r5vYS0L2&uJB5wSmQhYs?$R?HQ54SOBGcr#p!QF;#2h%F5V zrA0Iio3h0h#92F*c!waAzA7J34YoaS-V~|A5(W0nFd3Sev1u$Oa14@iU##F2O^UhD zNl42Dxo?=$ROKE<>(qS06V>Xv?ol{r+Zii+N{iEmMqt(ZVl%xj`yH|vKtRzURH21D-t7R@b*FR?}d6luc2=;jn=sx)_jDOe|_cI0);EZ&Y? z9Yagqk@-tE<6u!SsSv4Wx2!jU0Xh@?0k8qm*HA&0PM1J9W~cl>xuvG^=iaYu|0msFgi1;}{?>?e(1iy7rUqCtxI69uS;E`V7t|!x z^ywxD1sFkvf%v`(s=n$A(UM9>nzQUwqs;{Wic)_lakt7}(!E=ldRv>UJfYv*z7Tm* zj(Z?T551rW4 zlSr8lFSbxzgMq7r@gwp@hB8P5HK~WC*_CiPbjGFfJBuB$){?#Y&R@Qo>ox-22s-tL zgO2j5t}H)41aj>JGRRYt$7RUso+CfGo9k{W8o2{~)WkWfd`j&+T3=oSJ<8XUsOLA| zSkbkp)_;jNk3m>#(~Bj>G-dGB{;}@c?xmwdGm>LAQ`Kw27`?Ml(eW;i94y!MrM>YuSys#vj+E2Dyu}qvNnp3x4a0r`zzk;Ued!=5S+R$6Cx*H0oafSF z-c67~eb(q2ERV9$N}Xqe;tIHQBs*$q(13iq(&WcHtgQ6&&+~NipCj407gZ z`HjuMYT+(&(((l))t{2VzGtbonn$97-9^(pJmv&+vt@I!Yarzv>+4a~eguTJmq5;e zem)VT2*6pp6t(viAmnzK?Ch3$l* zK-M@iA7=zYka3Lfl5Oy$vg8nB3ob<7r&-}bAXtG?=nUsrb<+)rb7so+@&Ig!H4^eG zFN*<=d*oa{4xNLJcE~r=afjMoz>Ie3q?~cwAhOcHg>&A}O*&#@qj%f(NEp1M(u}TzqSd3Cn{wYK3U6` zzwv`QyZtO{_o;7~%U{rJai?*)=#X8ufoFZXUmz?zyX1vGxOtcj-JF$mZ4~{f_#XJJx+<2?yv5i-hK*3H4VM6J;j&4^+XeCHl2$b?{VRvrk9m2iCO}Dcurz-Q#DE%wm zmt^n0FDkFLKP1++uVm|@JdzU+u=93ep?ePpXj6R=ufrKvxgRkewK)t)W?n5yT6J*U z*ZayC%$gt@`o3c%=Ag~!E&1a<4ce^qSW%K5=ex(u{`{f1H^8NCznW)N@`_i6-7yyS z6CQD()367f;4FQJTyS&Y^HiKk+i8&TP&J^w)~Id6x$u^=%(Q0B*4*KacIvg?-scuj z=5{*gdy883^~6%czrJyk%o~JHs~Z@DKuE##?VDq1?%P`p?%16PikbJ@N-QZa$ko+$ zsZ(fHll479N~b+2Ee=uFqTsl&wcUw3)HE|CTm zk(XJJJGe=%i~(Mi;ILhKgfun(* zy`6!!o|&bsy^R6=-$G`&%10pXHsg4Aco@>z-!fn6jh;iFU|$CL&~KE)Nn*r>WbLg@V0gIrlEu z6n0Ktqo!I*@Z0Mm;o{CwMbl4THlZ|=ze@{>@tZalRIsWeJ~6hkYt~#DjtodA+zh>F zMsrNg=S9HW7g{MBw>$w(f=-so4DO~9CAjH8`Y4n}oZb3M9ibZJj$@C-W@>@^Y_Ezd zr{@L@(&*$AWN;PdZKkbL*Xuhk%nqWQdP0svr8Kh)Jzz*zi_5dQG-lW<{bqu2+)(D7WX{dLYZZ>>Kf01Z?v&!fK1Rgr;Ud4O z`4agOp`0R6`egbDhkm%7%i>ixLoFnRVt3%d-aU zONw9ow&@cY_-SB95LY_jC-qy67WG&iF_P5cd!iU3wxp<7zY@MN{*v!L)JF@{2)dgw zFe$|@h^x*^bK4r6<`I;Iw{D%>9#7_=pG>3cT~Oh@^I@`qKbkSOfOmbFDvP)QO(9a1 zokRxAqHP%Fpf$pHs+@-4RWQRTs>ST5!x;H)C)0tdYc7*1Q7{0INwmYjf*ty0>rz>r zHL)c~*QruvE)R=RY1<}lVR1p#%(L&-7>b9d`kLpz?9d{xR}cv=CA3}4L2+!k{NxcsSRALKDoW-lm;$>PmIkXXR#)O z8JQF|RFG#4X$!TKTUyRIi@g-EIdXI^gEYrmm<`LBn|kScYzPSP16N-NDxUD=hzsp7 zn-Uc7i>^=VMHv?PSl(E)HI)z>I#wYKC<*NXym3TxvGATMdf)iiNs|H;sk2cy7I2d78% zGo;6=*vGd{hjHp~h~CEj?CqU(S%=AMY-0~30hK~Cm^gjmtESTJ`rE|b<(Lyz_EZ32 zSG3d$zFxaM_W|+nm))6&Az?IKz*W^r45bnzrm6mHvY~f~3+!5DE>dUZGCq$t__l~dHJqj;*XQ4fngUGAo-uA6 zYSTQ3UE7!OMkYWjP|rGCb`-m2o~&r^^zCt#sW-$zNc-J*86qKTpbN*lp_%9>^{~j$ zKDvaMWxAlZP^$=Q0|T7L?$CY+SoX6=9ZOtZWeS8_7euJ{5>oHe!=c)g>%I|$(dzNV z1VIKw$8f6BNjZ?XgzyjY&c;|$z((HO3(wN2=H8Ty&Jw3+_BMciK6h|BUsrU3;(JNv z&%eT;*<_}H(c%dtxZNP~-z5*xqXXT6SNmFC>TLrXjZfyVWt_4{;YH=LEK)C~8zT4w ztX#VMhQ=e+P6V9)KskPb&y~AN9ZDJ}yudVQ`V^Z}u*Vt?PEz=zTkn(68mNa5+V=ie9BiG<-`Yp~J z!QMMj+)r~|y`MzIHN?}tMpc$1`<=qdW6YaB-xc0n-Mi2ib<{4nnJ)afoZVF4Wmvv5|#sspsFjPHZK=>bnfz zuk}vMG60f5z;PuckooeLys2L|Q5A#r(untbXJVB9T^Q;=saH~!AG9(1P~O6bn(@kk zXun}{8gG6H{Gm_agU!lPs~!T0|9M?)x(tt6HAkofq3Q56$XCmFvzFbtuFxg-AoiN4 zBGnVZS|E8=YNbi??3Q;R|0H<@3{*{Lf!C;-lk=?Q><;_NuHp_VMjP?RIcK z^PL#T0uuY7^)s7U`s1RAQqNErMH`xU;!Ny~8VxD5M%ad(m;lKFgZXdo6|zR3yfk~t zDT|Yx1UIGy@`%+bO&w$ex=1!x72QUiLm|(k~Luw$(?BhYEtxOa0bZ5;-iL0MY(nueiE)rUDREx z^Os4vQWQUtOIeNG%)V9#c7H#H==4wiGOcF|%iZ#$19um0(NEo{pi{~Z+=5EyDbw-? zpKX0E3>ZQkVRy|czAkjFO=%Mv@bVnYgkw*lc;yEB!M3bFAB7AH;Kml9Pm2u7BI!sm`fvyBoC0p3M9KZ>EV4L#3nsSq~$Qgb0hYX z&Gd(7)|4VjhGD}n9|bRs;v%^Cw5;y(BbiGaO51;7nB}Gc zon5(}e&QFLQ@!2aK*0q8>bDP<)2uKk+5274z?juVt(E9Dne_8%lJIi7*U`yj@lK#+7}}mbT89u3xZwvUrdTTg)*i*Z0iE)6sN7dLkiP zn#F^8Bk^jJdN*|s!}_3#fQaF^_rfJuKM4}-Nhr2(?W~<~6(5i8_p-t8Rpr#xV95SFTa&L_ zsJY#kb~5qdF&5(fA&Gl>AgfaH0+qknPdkV$9Qyt8CnH?Gr3TanwMhXNQ17eEHn?^^ z$KqaUU2xX$D)@SK;g8XIF4D*vlk!UT&R!FQ%VihEO^ivws|j=IbvsgDME>$HAlqXF zV3`oYW1b-0TfWQTlmG&4{qtQ+O9WN*SKl(&+w(g|yr%XZ7H~Z>t)U@->N3F) z+{rWY$rAIHFlkYgFI2rzGTu)2fprB5ZH>+dkzPtCS8tV!abHgJ)?RN{s@UoS1h3c* zy9O&f^#(-s@35SAt=n*Gjd5Saw!r1IgR@ye)K8B3=~2N2QGW(5jiYhjctuJ-(ys$! zWX)iWe}*Hx1hz=*StsZw!)N36Q8tJ6$d(0t!fgnPfpBz)Ozkyj40S|}%8BKL)j?~0 z#ApUAjAkRlwzm4aC|rKs1jdm7r^%!^2q!9{(P27>pA6LZ^kdhDO3>&oNax`c&kAfG z>d0B+mGM+<7bI?P4EAET-ml$gci*&PJMpJK>HOMQoh)YTvHl!d`I<5GC^%&3hfqCo zY=0G?*xlsWrzU<`84-hGm2$VS(k4{eY1z|JO>naGAzf#@px*&Gg?V^Q!w$Ol{a_zGPJ& z4C@*S`C3wqEiMt=aI^9_M8KYo?FLjUCrN(Eag+1vZOV-|TBdDDsp$FYn-oD=8SQBu zNphel7Qcl&_CBndob7Dvo6C?USI+PCLrogc8_M@?H800Q1>SnU>cH9 z`)4$p_D~z?O1XSn$pt6{dSK_DShf20-^Qv@p3Kx>-g4;qAXWT579bD%+D_iq-~Py_ zQ5$?&kp=tkf#jWTnEQVbA<%xW>N0csBRY_(q^^vljQlDEEQKZ9&ToDpSCfk&UA!EMz_qE1&o8yn2puX;}zW{C0vz3MZXJ!RXj-z^sF zsCE34VZV4NQYlO-th7I&t)CC3ZysL9IK>A2vDmKfS&(HMmPLZ%65E+e)iTsaXHw<@ zBSK|vej~rySo>i-H0vQ8L5ewKI$BP<$y<$V9nSU)WGK5Xl{ha=oq4;(?5EhIZ23x=_%s=Lm;;zdH_G3jIEbSJa;9bT& z=4U1eCZmW(Q0G7v@hskkpG0NK#`}V5^&CXrL68WjSwaCyKPkPM33yl`GpPhkZsXe_ z{SqXbzn3~TGHtoA4rdAeY#pqiUH}E_I@L%m9A{n0IDW9Dd=bXeZr75fS18lWg1D+g z=yfz21SS==J37p>FoP}mD!(n&K_@6MZDUt&3Y)W^;Kyn$Ec6+G&LBNxw0e1B!p4Pb zqeHL2P^{n$wW>Q$fMJHx+nR?mi&f)SM_;51$_}eO-kPY33lO!aUP4I$jK>j%81{U# z(Tr%p#KnD2r!C(ErV&DA%`i#mj+n2PfSuPXO@(t&YREASZB~Y(y=1s!zah;v6baw4 z6}w2vlk^&Z3qsQkhLzk_CaTXYqnv3votW0TzgE=hQnG{8kS5T}A zm*z*Vflzaa&rK$+qXiVJmr_}f={H3opfT4j``Ocy!OT*rU~)vH^H%S|M5r6v>2~3b zoM%Zwg*U(OZXPsWCoVU*d;WHRJLh0Y*F*!+yD`vtwUNb8>1Yj`eQ9T_rh(w@DCsmf za_K8)#aH_6#xyjfH1Q4-LK;}4uLSvHVT@(xV$ZVJV~)h&%x5#M!Ra;FVK5Wpz|NTP zX9_}3K&f>TUQ&;WU_H7plRVs7L~U8+{LYAK`*r4!oW1gH2QH4UfD7UE&jW6kEix0K zshbxWGc?C}+&>oui_uDrTW882AxkG;DKwemX76tDZ(d#=#qT0R_@!6+HrQzL?R}<2 z;%1Dw1=HU@Fnn;r75NbW6FxC|(fbfB*W$^$O?b=v74}%WNU^i%+lRIBEY03YNj!&1 zm}O$Yd44>8!y$Z$tr!^o54@5t!1ebiN*F+6x$^{C;m_Sl&jmy77D7pi)vlDQsFN^= zebkO1g7zGKM|C(7)SD?dPY8k2h`parzY)yc!D9NqLgKMLVp&{U{|uwce8EpnHUWMBEj@#Y@S` zPGA0!{s^XB0%@>BSWP+2V(m)$RWB-rwh*)pHJmxosGfR2>Gh9jZjif{4aNIL)Diyw z=UV;uZRvss(j3Zb85Lt?!aSWHC~GEjAzh_@c19l2Pp@tkKaRK&0=>aW4nkwIPyLMV zHEvc(G+&cRjFa6nC03CaeFL}hQ_Tlzt^*xNL$!h{^T-L`-#w^Kp_>j z9bBvaJ){~Kf1GW1{&rwMLAI_}j=KXDj2YOxmN9N{2~1Cewy6**UcQ#gwo~+kg{o_U zJDbiUTj|?ObKVG0Q+u94QXU?G%uzC_l_eLUeK@;wrcusyRN~^%d|ycO+yX}lK~OAk zkOd0X5*5U9wCZuYyWX@F45g*rWJH<6fMD}Tp3$P*(mse#NbX3S1*XnHSV6M-sC9~A$V#LWR=bA40L22y z)W5aj*EdX#9wri?Ui3{ts60rCNQoef2x$U!vlzOS2C*QEdwq#&+>P_8c>r;&RA3?} zDz&#ji^f@y3)9AK2)iZ~QqwTa`y=Rdia9Fm3dgsdV|ifHVpUfaAq?CgU1*$`eP5Lh z9{B~vU~=AMhP)$k#{zHu@R0HKx%M{6Z$l@`{kzyz+xF7Ve%t#L z`^3HKK+pt9bDEa@aXdd!S9p+K9*f|f^!9@`W$mWUifXdI?NQ@hOgSqfx6D(^bZyE_ z_$Rn}Xn222|_;1)E9g=cef~={tYByL#^|g&F}w zp{M{N`{OfcH~^{USc1$tgrlGt{fJk{ZnWQ4Wqp#9?t)g8nYy9Y7)t2Kh>NOG*~D?2 zEmEEcc%51ONZt(BsS|M>VJrq?%Y}^vV-@L)9;!-H)6IZFov-;Am)VKt!iO4&ea%u4 z(*+Ub{a30;x7d%v3(5J3*Fh`iUYsZQP-#iU-`9>Zt^3^NoU_-B#E8SDSFrXL)-6A$-r6RaR-MqwK69E=**r03N4%{T5CoKXE9 z-(7!Vreu!}`$bWJo(la<0Ca5!%^sDZ>MjPL!f-=)&*QRQtKzN$)BXL+x!`BQnlI;i z!ew%wC;N0(=<9Q+2Y#*I{mwEY7|RB!{fWyOK}fl#431W|&0 zWHs7Df-JW<84v&sB+DcvP^&?kh&aj@E)riU%lqe6Y!+e{6`vucXJpsY(Q}h$DOljY z<9NhZ8aLr$fV+qy&LR!5dbsk@Dz0KOf z(`7y9X1-q>H~m^_7nR6mQRVfe>ifa~X47z1hazEjY$Uqpc~QhNrkA3uYQXawfs)|W zTA=^&__k>`#$>T8XFIF~*c+>)o~8&}q*;@v%MzzavI!EQvIa!UzPCe+5I7U1Ui!+0p2 zOgzs}G3V&MrczhRg9>s>NwYX<`~Zl>TjOhuj$74h9GnKvaF}XriRQ4Iy$Ra9pLsW9q(4USL}04rI&?wJQO`vte9fE8<&3C{Vd^ zvRxQw9B4K$oo`PKkJ8m}%MT1#tj6205|3^N+%*YE;Z>9r&I32 zkG{9Ia^g>5g{3b+)j2PI*S@z+B_$xLU(66ueqy?^dDbkNT5f3Yn!DKK5)`#?Sy_&&XnBx^iow%bafrRcTUprJcL*`t0CCZNuuD> zHpHV2l%{+Bso^?GsE5~WJ@(HH~EeXABlTUJznz_;ZBm@>>(u4RngV1WK}cU8$+@nT4g9dRNZg#gvZvgd=Xi zIgEZl&u!2Ax1^-SnCQu*u3B_yAtdX(+)}-vs;{lk-*iRR+LZ`v+D1f4_&-h&`PWus zhk^lhd-rtV4~Zc0VpIy`sKr*oa$;D7p%*HMH?wvqWTQco5*W5cN`W!TRS&PC)q}8i zEUT@XuB^;wmL>)|(8YdAsLjkvG=z~iRR0dlW-yd}QPARD$RyK}dN6w|u*9%gxa!Lc zuL0{CpI!Xqat)KCVC}(^5qjdr*&!P3NOiBCX>_7hFFqQa52n z8#{i&lO$BH=fE2 z9YK0Qi6dkxVHZr;Me@cdBK)wR)!W1vXv$Y7Xm;Ns?}uLGBtmW0*QSF2^TD9rfXHe| z@oe~LR-A(F=B_Vx0eyyfgn1{{9lIq34*Hni0n@(f(UegseGg)!J@uX|-koMQkr|sCp8E zF_SUZWDFy9LxW1LEbCO6HT}IULIelmuljX@hs;7`&d-!G{jhYJC=YWAq~| z^yqROf)2FEev+oOYN9c^QpoL{=vkvdnh2gC{;a_DMWbPbuv*h?p6sZ$6w<^ul3G+R zY0tdgAonAzZ+k`qXIPT4gg1RH z*AQ+H%)U?;#?UrDwh6s9QAXaf1zml^f>(I)ffFGxkXcJ7aC*i?z&If3CHNU5rAAyO z3`rPQ62+T8u&Qmm?(B#Jd5xk8TAx89 zlW3F^Qv^bOl#HnFzdT|XW*qtw zQJTQV{h`rETY+^2qK)S36-yOi72;R?#MC%y)9DiUIZ|8gj)RY(DvQh0!9?gr0|1^X zh{Jmd&C5xlMk-86z@k<3M60OT8@23><Vx)^r|2Jjwm<>VG&4#VIJvynz$o#K+)+Hvobx*iuq z|KJ>zh+F$dzxdaHS2htRf0;7Koe@N`*O*rc(KlNi%RB{pid2u_LY?I=->*rjgf<^x zzGSxvJbyP~?-MB3RyL$s5b+T7ILd9yYx6-DxG;i+HaJ*eRns)RKGC_YtyvSpLS&rT zPbUTvB9PK*$oKR|8D)A<)$h9b**i+vWhy22YPAoS8O%x+;A+2H#OEmaPpQ`A$;q#SKU_#Ea{5PravUmZY5z7PMgeaE*IdcD$cs_34Ae}=|t$c*q6(2JZ^_X zV2rJnAS3`Vta!A5rh(Ncpn5*40C=Z6AabU#FX4@!kRl~7B%CdkAKbQ4j5P*mx|F^2 zpuvRFMj3sh5@n)vZgTzFB)8|&?Icskr#`EW;-*t==rDRlN}JtgbyXX1-F0H>VCX~u zu1-4POBPEfN9Z=6ur|x%Lu_5g_9=y*KzP%gp$<1`(nxd0L?+125J!7vaSL$lqr!_D zdc`fugj9(>;W(jgEP8J=^v@(5IeB5BUr#6``7wCnr?xw;88NkfOp7F*aoT9`sMaXz zd)wdI>S^vC3cl9@Y?*>Vtoe&`kziQ8;k*=Ni)GX!sIzQdCUwo-yB{YoToE%<%6y^H zt!Z^_yB45>ohuc#Aj-P0k4&a?1S=ONUjXc)&)Qp@>n)6_X_2az^~DuFQ=c`dHf~5^ zI%Xd)9A=Z4d}haEk}QGx_B)aD$us8qbrGFzzB!zW$&nVB{kIPFPp;pc z6z>=HlxCnlSsGm43U5W`5x!3WT5z-Btufxt#>bAD$FQ7PwLqZoX7o7rK4(YNfL`~O ziPq}eA{xA7AgZ9IWOh%_Vo#ja-~t3;!&^OGYk^AG-9_U^hs1JXx@f`)WG7K5|_XXy9Bg2rH09 zcVeS2bbX}%5aw^4?W{^O$zAw`$~-w4wrQ>F6TKugkxCx17XgoQNxz)q;ic@!7WFcI zP_H?&-Bz;E^L)Ve`n|%>C2HQ&9ld9KT+7{$M6a%(uiSq0#?PSolccd{(|r7-jzPSK zJERZBxV)XX$UHoL(u*`>4g%@ny!>l4eUa(i%&yI2~n$F>4G=n!{T*@x( zu&-!t&%C0Y=VYH+^Y|R0#r>rN(WHD16>hR6-Z*o3MR`rtHtf{WO0jX<)*!d|s>GSj zjXw?fXInbOz3nBHAN_=wnoua-bTD4O>t{Ut?Csk?>t_K#AY4hHRs z;8yF$z1?ZeH;-B&T^1%*%8fTILB1{Jk*Wv1i>vTT%dB5sh`rHaXS6b2G?^omxti1k zzJ2^qY?n&9JB;R`7ZaaJ=t3|v3Hn+z{)wQWN$iNDQR4>N0QJB~x$u>Y=UNY2 z(}HR5psOaf4BvTDGL_G{h-`AICo+vZ==x$)bnLUxqrP>{UJ!vBhyV4nXbuvboGOl7 zeADDiCVN7kO+r3L<6sJ-|GsV4G&6LT{S=K!#!5^E_jT~JS0qeskXLTIZewg&pAmk;jRzMI%f4mzYiUr@VmkFKY5!|51aPz*fE ztLGfxCM{Dk5`C@@At$wS=cJ=7BSzD6DyORJrEp;mET<1p1#WVEu9FA%6{gmUrq=8{ z2@=+<`RU3=r|gtd-NDcpE^7E61p%c^t<{s+Pwl9Dbek97&&Jo%7%i1nr;4CR=NS`iWQ7NGvZ#pxEG>s?)`vrk$MWo5JVI|7 z1YI!BDX)>Oz6*$ta4*Gr^Tf(J^Cdv?b64aK z4q{M>9vJ7Y3h>YaQd8|5H&q#IQa6&CQ z+%3Ha+%Yxyq8ds>6jKmc??JvI-Z$U1lW~BUvNnVQf6#R8>+MvL4MI8Q8|aZd%$1nW zrsJLFD_=ie{zJa{i1>$sBUQdYpSd{w$zV6%oN}{fZf-KT(;}WS$E!wG42W9!-O)~C}w4f3d0 z*opFI+eO2LPk6AZ9(AB27dU8WJ$K%&t@*)a9|q+r+B3gZioXh^ve!YH>d!nU*=pp+ zyGC*``?%gEDzi_kJ$;r$+{dFmF>wnOtl4v1K<`-{nlzq_&=} zxXb43Mkq0;stxHQ=kXO}L6W(~Ua+}W2oRJ}`r{b8I*~#{&>L zY*8COzBD6g#-}@EFKz5u*m1s?Wi0Kuo_ycEWrJvOhszFrT=)`i)#(4c9DGWi@6vma zX5YA%a_XD@G?99H#bf8=9+ug(zQ@+c`jYa+p$Eu)D)Xwzy>{GfY>eD)?amfsrOBPg z_tf8=$NN;o{q;j5?$d*g-B}@0gd8$KR8Z%aLzx0mBq&rTetbeoGBYC3A7M;*_hLyA zcr<$G&}|^jh`}kRd)Zbwp%rH$wC6u**cO~#&(Q%b&*4eKkA@xGpMfnLN}QaIUVT!oNwl0ux^W zU6UG%kub$w?kS$Vp#RQ}|0VDH9=-TGA1d1W@!xfT0X91NW(L$&|4~kA`wt|jzwE}^ z2RJ$2zyFJWg7070y|c5@{GFYZ<_~sO8Y>&icVPlMV*^{T4lh_wItbAAKz$HE0j10& zMhs7A`|Ik#BFikFP0<$oRsf?LQg!A~ND{w|vPC)A%xe7~Xk-zVpvLj5fu_9xJvieSHi0^dtG{t3{3hxs)ff68L~h8aTr z2bg~%lJVCr{p+bUBKR8v@xQY8#cBMv_G@ZG{?p>`|B8P&E&lZOi{bdUZR3Bl{o^0? z4_JSmV!!x~e`DSMk68b~e*EXa{$xM?FUTA(&UgHOO~(8mfd9aS{8#i}-Tjk#^fx*d z*}sMUk3^(@!v9JC_#6I?;(r1E-%q%IM$7XXyqWob0{_<}J%1g>KO+VB?Wy2Bf9YS( z!S4d6|14+v6a3G5so&s-qW?bl|FwGRPj`Q2mj8A~EAzi__s^%~&&;mh;4rHHKKMV) z^ZIifeL(-i)6_2=V<->$d;|F*0D{)7Fq<-p&de_gg99RG3`{9|$O p*AD)(#li0m^8E{xe|M=MBM$an&i6|#68*!)I}O(SJLZQE{|EH>;-~-s literal 0 HcmV?d00001 diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar.md5 b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar.md5 new file mode 100644 index 0000000..69808c9 --- /dev/null +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar.md5 @@ -0,0 +1 @@ +6923a584935d5958249d1d2c46cd5fe3 \ No newline at end of file diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar.sha1 b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar.sha1 new file mode 100644 index 0000000..cd1fcd2 --- /dev/null +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar.sha1 @@ -0,0 +1 @@ +fad3f1b796f066a110c5537220a78ad82915baf7 \ No newline at end of file diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.pom b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.pom new file mode 100644 index 0000000..6d35597 --- /dev/null +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.pom @@ -0,0 +1,28 @@ + + + 4.0.0 + top.niunaijun.blackobfuscator + plugin + 1.0.4 + + + com.android.tools.build + transform-api + 1.5.0 + runtime + + + commons-io + commons-io + 2.5 + runtime + + + com.github.CodingGay.BlackObfuscator + dex-tools + 2.1 + runtime + + + diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.pom.md5 b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.pom.md5 new file mode 100644 index 0000000..54032d8 --- /dev/null +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.pom.md5 @@ -0,0 +1 @@ +c4ff871445e1f4271eb1e4194c7ecbd8 \ No newline at end of file diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.pom.sha1 b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.pom.sha1 new file mode 100644 index 0000000..bf4b8b3 --- /dev/null +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.pom.sha1 @@ -0,0 +1 @@ +dd6612e814a361a39f252c50871c47300f8aafaa \ No newline at end of file diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml b/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml index 39d1a89..795eaac 100644 --- a/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml @@ -3,10 +3,14 @@ top.niunaijun.blackobfuscator plugin - 1.0.0 + 1.0.4 1.0.0 + 1.0.1 + 1.0.2 + 1.0.3 + 1.0.4 - 20220113045741 + 20220403041623 diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml.md5 b/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml.md5 index 3dfae95..483d8ed 100644 --- a/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml.md5 +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml.md5 @@ -1 +1 @@ -a4e0ad7fcf21d4047bf1348dbbbeae58 \ No newline at end of file +fcf82da2c787f0b55176a27ef42363af \ No newline at end of file diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml.sha1 b/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml.sha1 index fd40176..bc23bf9 100644 --- a/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml.sha1 +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml.sha1 @@ -1 +1 @@ -ef65fe9ba949d79e0d61ed67e5197027f3a5221b \ No newline at end of file +e4906dd3c922fb6181dba4f91dc2712c8e282522 \ No newline at end of file diff --git a/plugin/build.gradle b/plugin/build.gradle index f003331..2a1d03e 100644 --- a/plugin/build.gradle +++ b/plugin/build.gradle @@ -1,10 +1,10 @@ apply plugin: 'groovy' -//apply plugin: 'maven' -apply plugin: 'com.github.dcendents.android-maven' - +apply plugin: 'maven' +//apply plugin: 'com.github.dcendents.android-maven' group='top.niunaijun.blackobfuscator' dependencies { - implementation "com.android.tools.build:gradle:3.3.1" + //implementation "com.android.tools.build:gradle:3.3.1" + compileOnly "com.android.tools.build:gradle:4.0.1" implementation "com.android.tools.build:transform-api:1.5.0" implementation "commons-io:commons-io:2.5" //gradle sdk @@ -22,16 +22,11 @@ repositories { } group='top.niunaijun.blackobfuscator' -version='1.0.0' -//uploadArchives { -// repositories { -// mavenDeployer { -// //提交到远程服务器: -// // repository(url: "http://www.xxx.com/repos") { -// // authentication(userName: "admin", password: "admin") -// // } -// //本地的Maven地址设置为E:/Maven -// repository(url: uri('../localRepo')) -// } -// } -//} \ No newline at end of file +version='1.0.4' +uploadArchives { + repositories{ + mavenDeployer { + repository(url: uri('../localRepo')) + } + } +} \ No newline at end of file diff --git a/plugin/src/main/groovy/top/niunaijun/blackobfuscator/ObfPlugin.groovy b/plugin/src/main/groovy/top/niunaijun/blackobfuscator/ObfPlugin.groovy index fe8d123..3b03bf3 100644 --- a/plugin/src/main/groovy/top/niunaijun/blackobfuscator/ObfPlugin.groovy +++ b/plugin/src/main/groovy/top/niunaijun/blackobfuscator/ObfPlugin.groovy @@ -1,15 +1,9 @@ package top.niunaijun.blackobfuscator - import com.android.build.gradle.AppExtension import com.android.build.gradle.api.ApplicationVariant import com.android.build.gradle.internal.api.ReadOnlyProductFlavor -import com.android.build.gradle.internal.dsl.BuildType -import com.android.build.gradle.internal.dsl.ProductFlavor -import com.android.build.gradle.internal.tasks.DexMergingTask import org.gradle.api.* -import org.gradle.api.internal.file.DefaultFilePropertyFactory import top.niunaijun.blackobfuscator.core.ObfDex - public class ObfPlugin implements Plugin { private String PLUGIN_NAME = "BlackObfuscator" private Project mProject @@ -17,35 +11,28 @@ public class ObfPlugin implements Plugin { public Map mTaskMapping = new HashMap<>() void apply(Project project) { + // 缓存project this.mProject = project + // 获取android:AppExtension def android = project.extensions.findByType(AppExtension) + // 自定义配置 project.configurations.create(PLUGIN_NAME).extendsFrom(project.configurations.implementation) sObfuscatorExtension = project.extensions.create(PLUGIN_NAME, BlackObfuscatorExtension, project) - + // 清理任务映射 mTaskMapping.clear() + // 输出日志提示信息 project.afterEvaluate { System.out.println("=====BlackObfuscator=====") System.out.println(sObfuscatorExtension.toString()) System.out.println("=========================") } - + // 配置自定义任务 project.afterEvaluate { -> if (!sObfuscatorExtension.enabled) { return } - def action = new Action() { - @Override - void execute(Task task) { - task.getOutputs().getFiles().collect().each() { element -> - def file = new File(element.toString()) - ObfDex.obf(file.getAbsolutePath(), - sObfuscatorExtension.depth, - sObfuscatorExtension.obfClass, - sObfuscatorExtension.blackClass, - mTaskMapping.get(task.name)) - } - } - } + + //初始化任务列表 List tasks = new ArrayList<>() if (android != null) { android.applicationVariants.all(new Action() { @@ -55,7 +42,9 @@ public class ObfPlugin implements Plugin { if (applicationVariant.buildType.minifyEnabled) { mappingFile = applicationVariant.mappingFile } + def buildType = upperCaseFirst(applicationVariant.buildType.name) + boolean empty = true for (ReadOnlyProductFlavor flavor : applicationVariant.productFlavors) { def flavorName = upperCaseFirst(applicationVariant.flavorName) @@ -70,9 +59,29 @@ public class ObfPlugin implements Plugin { }) } + // 自定义action + def action = new Action() { + @Override + void execute(Task task) { + task.getOutputs().getFiles().collect().each() { element -> + def file = new File(element.toString()) + def taskOutputFilePath = file.getAbsolutePath() + def mappingFilePath = mTaskMapping.get(task.name) + // 混淆核心逻辑 + ObfDex.obf(taskOutputFilePath, + sObfuscatorExtension.depth, + sObfuscatorExtension.obfClass, + sObfuscatorExtension.blackClass, + mappingFilePath) + } + } + } + + // 遍历任务列表 通过doLast 追加自定义action for (Task task : tasks) { task.doLast(action) } + if (tasks.isEmpty()) { System.err.println("This gradle version is not applicable. Please submit issues in https://github.com/CodingGay/BlackObfuscator-ASPlugin") } @@ -85,7 +94,6 @@ public class ObfPlugin implements Plugin { addTask("mergeProjectDex${name}${buildType}", tasks, mappingFile) addTask("transformDexArchiveWithDexMergerFor${name}${buildType}", tasks, mappingFile) addTask("minify${name}${buildType}WithR8", tasks, mappingFile) - println("$name$buildType mappingFile $mappingFile") } diff --git a/plugin/src/main/java/com/wonson/Operator.java b/plugin/src/main/java/com/wonson/Operator.java new file mode 100644 index 0000000..e7c21cc --- /dev/null +++ b/plugin/src/main/java/com/wonson/Operator.java @@ -0,0 +1,187 @@ +package com.wonson; +import org.objectweb.asm.*; +import java.io.*; +import java.util.Base64; +import java.util.Iterator; +import java.util.List; +import java.util.Random; +import static org.objectweb.asm.Opcodes.*; +public class Operator { + private static Random random = new Random(); + public static int max_local_var = 0; + public static void run(File input_jar,File output_jar,boolean delete_input){ + try { + ZipFileHelper zipFileHelper = new ZipFileHelper(input_jar, output_jar); + List zip_entry_names = zipFileHelper.new_zip_entry_names; + Iterator iterator = zip_entry_names.iterator(); + while (iterator.hasNext()){ + String entry_name = iterator.next(); + if(entry_name.endsWith(".class")){ + InputStream entryInputStream = zipFileHelper.getEntryInputStream(entry_name,true); + byte[] ret = start(entryInputStream); + zipFileHelper.add_entry(entry_name,ret); + } + } + zipFileHelper.commit(); + if(delete_input) { + input_jar.delete(); + } + System.out.println("max_local_var:" + max_local_var); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void run(File file){ + if(file.isDirectory()){ + FileFilter fileFilter = new FileFilter() { + @Override + public boolean accept(File pathname) { + if (!pathname.isDirectory() && !pathname.getName().endsWith(".class")) { + return false; + } else { + return true; + } + } + }; + File[] files = file.listFiles(fileFilter); + for (File listFile : files) { + run(listFile); + } + }else { + start(file); + } + } + + private static void start(File classFile) { + try { + FileInputStream fileInputStream = new FileInputStream(classFile); + byte[] ret = start(fileInputStream); + FileOutputStream fileOutputStream = new FileOutputStream(classFile); + fileOutputStream.write(ret); + fileInputStream.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private static byte[] start(InputStream inputStream) throws IOException { + byte[] bytes = ZipFileHelper.inputStreamToByteArray(inputStream); + return start(bytes); + } + + private static byte[] start(byte[] classByteCode){ + byte[] back_up = new byte[classByteCode.length]; + for (int index = 0; index < back_up.length; index++){ + back_up[index] = classByteCode[index]; + } + ClassReader classReader = new ClassReader(classByteCode); + ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS); + ClassVisitor classVisitor = new ClassVisitor(ASM7,classWriter){ + private int var = 256; + @Override + public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { + super.visit(version, access, name, signature, superName, interfaces); + System.out.println("encoding:" + name); + } + @Override + public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { + MethodVisitor methodVisitor = super.visitMethod(access, name, desc, signature, exceptions); + MethodVisitor myMethodVisitor = new MethodVisitor(ASM7, methodVisitor) { + @Override + public void visitLdcInsn(Object cst) { + if(cst != null && cst instanceof String){ + byte key = (byte) random.nextInt(); + String target = String.class.cast(cst); + if(target.length() == 0){ + mv.visitLdcInsn(cst); + return; + } + byte[] bytes = target.getBytes(); + for(int i = 0;i < bytes.length; i++) bytes[i] ^= key; + byte[] encode = Base64.getEncoder().encode(bytes); + // + mv.visitIntInsn(BIPUSH,encode.length); + mv.visitIntInsn(NEWARRAY, T_BYTE); + mv.visitInsn(DUP); + //ֵ + for(int index = 0; index < encode.length;index++){ + mv.visitIntInsn(BIPUSH,index); + mv.visitIntInsn(BIPUSH,encode[index]); + mv.visitInsn(BASTORE); + if(index < encode.length - 1) mv.visitInsn(DUP); + else mv.visitVarInsn(ASTORE,var + 1); + } + // + mv.visitMethodInsn(INVOKESTATIC, "java/util/Base64", "getDecoder", "()Ljava/util/Base64$Decoder;", false); + mv.visitVarInsn(ALOAD, var + 1); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/util/Base64$Decoder", "decode", "([B)[B", false); + mv.visitVarInsn(ASTORE,var + 1); + Label l1 = new Label(); + mv.visitLabel(l1); + + mv.visitInsn(ICONST_0); + mv.visitVarInsn(ISTORE, var + 2); + Label l2 = new Label(); + mv.visitLabel(l2); + + mv.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"[B", Opcodes.INTEGER}, 0, null); + mv.visitVarInsn(ILOAD, var + 2); + mv.visitVarInsn(ALOAD, var + 1); + mv.visitInsn(ARRAYLENGTH); + Label l3 = new Label(); + mv.visitJumpInsn(IF_ICMPGE, l3); + Label l4 = new Label(); + mv.visitLabel(l4); + mv.visitVarInsn(ALOAD, var + 1); + mv.visitVarInsn(ILOAD, var + 2); + mv.visitInsn(DUP2); + mv.visitInsn(BALOAD); + mv.visitIntInsn(BIPUSH,key); + mv.visitInsn(IXOR); + mv.visitInsn(I2B); + mv.visitInsn(BASTORE); + Label l5 = new Label(); + mv.visitLabel(l5); + mv.visitIincInsn(var + 2, 1); + mv.visitJumpInsn(GOTO, l2); + mv.visitLabel(l3); + mv.visitFrame(Opcodes.F_CHOP, 1, null, 0, null); + mv.visitTypeInsn(NEW, "java/lang/String"); + mv.visitInsn(DUP); + mv.visitVarInsn(ALOAD, var + 1); + mv.visitMethodInsn(INVOKESPECIAL, "java/lang/String", "", "([B)V", false); + return; + } + super.visitLdcInsn(cst); + } + + @Override + public void visitLineNumber(int line, Label start) {} + + @Override + public void visitLocalVariable(String name, String descriptor, String signature, Label start, Label end, int index) {} + + @Override + public void visitMaxs(int maxStack, int maxLocals) { + super.visitMaxs(maxStack,maxLocals + 2); + if(max_local_var < maxLocals){ + max_local_var = maxLocals; + } + } + }; + return myMethodVisitor; + } + }; + classReader.accept(classVisitor,ClassReader.SKIP_DEBUG); + try { + byte[] bytes = classWriter.toByteArray(); + return bytes; + }catch (Exception exception){ + exception.printStackTrace(); + return back_up; + } + } +} \ No newline at end of file diff --git a/plugin/src/main/java/com/wonson/ZipFileHelper.java b/plugin/src/main/java/com/wonson/ZipFileHelper.java new file mode 100644 index 0000000..47c32eb --- /dev/null +++ b/plugin/src/main/java/com/wonson/ZipFileHelper.java @@ -0,0 +1,130 @@ +package com.wonson; +import java.io.*; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.Iterator; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipOutputStream; +public class ZipFileHelper { + protected List old_zip_entry_names; + protected List new_zip_entry_names; + protected ZipFile op_zip_file; + protected ZipOutputStream zipOutputStream; + protected String zip_input_file_path; + + public ZipFileHelper(File zip_input_file,File zip_output_file) throws IOException { + this.zip_input_file_path = zip_input_file.getAbsolutePath(); + this.op_zip_file = new ZipFile(zip_input_file); + this.zipOutputStream = new ZipOutputStream(new FileOutputStream(zip_output_file)); + this.old_zip_entry_names = new ArrayList<>(); + this.new_zip_entry_names = new ArrayList<>(); + Enumeration entries = op_zip_file.entries(); + while (entries.hasMoreElements()){ + ZipEntry zipEntry = entries.nextElement(); + String entryName = zipEntry.getName(); + old_zip_entry_names.add(entryName); + new_zip_entry_names.add(entryName); + } + } + + public void commit() throws IOException { + Iterator iterator = old_zip_entry_names.iterator(); + while (iterator.hasNext()){ + String next = iterator.next(); + ZipEntry entry = op_zip_file.getEntry(next); + ZipEntry zipEntry = new ZipEntry(next); + zipOutputStream.putNextEntry(zipEntry); + InputStream inputStream = op_zip_file.getInputStream(entry); + write_to_outputStream_from_inputStream(inputStream,zipOutputStream,false); + zipOutputStream.closeEntry(); + } + zipOutputStream.close(); + op_zip_file.close(); + } + + public boolean remove_entry(String entry_name){ + if(entry_name.startsWith("/")){ + entry_name = entry_name.substring(1); + } + return old_zip_entry_names.remove(entry_name); + } + + public void remove_all_entry(){ + old_zip_entry_names.clear(); + } + + public void recover_entry(String entry_name){ + if(entry_name.startsWith("/")) entry_name = entry_name.substring(1); + old_zip_entry_names.add(entry_name); + } + + public void add_entry(String entry_name,InputStream inputStream) throws IOException { + entry_name = filter(entry_name); + ZipEntry zipEntry = new ZipEntry(entry_name); + zipOutputStream.putNextEntry(zipEntry); + write_to_outputStream_from_inputStream(inputStream,zipOutputStream,false); + zipOutputStream.closeEntry(); + } + + public void add_entry(String entry_name,String text) throws IOException { + entry_name = filter(entry_name); + ZipEntry zipEntry = new ZipEntry(entry_name); + zipOutputStream.putNextEntry(zipEntry); + zipOutputStream.write(text.getBytes()); + zipOutputStream.closeEntry(); + } + + public void add_entry(String entry_name,byte[] data) throws IOException { + entry_name = filter(entry_name); + ZipEntry zipEntry = new ZipEntry(entry_name); + zipOutputStream.putNextEntry(zipEntry); + zipOutputStream.write(data); + zipOutputStream.closeEntry(); + } + + public byte[] getEntryByteArray(String entry_name,boolean remove_entry) throws IOException { + InputStream entryInputStream = getEntryInputStream(entry_name,remove_entry); + byte[] bytes = inputStreamToByteArray(entryInputStream); + return bytes; + } + + public InputStream getEntryInputStream(String entry_name,boolean remove_entry) throws IOException { + if(entry_name.startsWith("/")) entry_name.substring(1); + ZipEntry zipEntry = op_zip_file.getEntry(entry_name); + InputStream inputStream = op_zip_file.getInputStream(zipEntry); + if(remove_entry) remove_entry(entry_name); + return inputStream; + } + + private void write_to_outputStream_from_inputStream(InputStream inputStream, OutputStream outputStream,boolean close_outputStream) throws IOException { + int offset; + byte[] buffer = new byte[1024]; + while ((offset = inputStream.read(buffer)) != -1) outputStream.write(buffer,0,offset); + inputStream.close(); + if(close_outputStream) outputStream.close(); + } + + private String filter(String entry_name) throws IOException { + if(entry_name.startsWith("/")) entry_name = entry_name.substring(1); + if(old_zip_entry_names.contains(entry_name)){ + boolean ok = remove_entry(entry_name); + String failed_to_remove = new StringBuilder("failed to remove ").append(entry_name).toString(); + if(!ok) throw new IOException(failed_to_remove); + } + return entry_name; + } + + public static byte[] inputStreamToByteArray(InputStream inputStream) throws IOException { + byte[] result = null; + byte[] buffer = new byte[1024]; + int offset; + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + while ((offset = inputStream.read(buffer)) != -1) byteArrayOutputStream.write(buffer,0,offset); + result = byteArrayOutputStream.toByteArray(); + byteArrayOutputStream.close(); + inputStream.close(); + return result; + } +} \ No newline at end of file diff --git a/plugin/src/main/java/top/niunaijun/blackobfuscator/core/ObfDex.java b/plugin/src/main/java/top/niunaijun/blackobfuscator/core/ObfDex.java index e33e521..910c592 100644 --- a/plugin/src/main/java/top/niunaijun/blackobfuscator/core/ObfDex.java +++ b/plugin/src/main/java/top/niunaijun/blackobfuscator/core/ObfDex.java @@ -1,18 +1,14 @@ package top.niunaijun.blackobfuscator.core; - import com.googlecode.dex2jar.tools.Dex2jarCmd; import com.googlecode.dex2jar.tools.Jar2Dex; - +import com.wonson.Operator; import org.jf.DexLib2Utils; import org.jf.util.TrieTree; - import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.List; - import top.niunaijun.obfuscator.ObfuscatorConfiguration; - /** * Created by Milk on 2021/12/17. * * ∧_∧ @@ -27,8 +23,7 @@ public static void obf(String dir, int depth, String[] obfClass, String[] blackC Mapping mapping = new Mapping(mappingFile); if (file.isDirectory()) { File[] files = file.listFiles(); - if (files == null) - return; + if (files == null) return; for (File input : files) { if (input.isFile()) { handleDex(input, depth, obfClass, blackClass, mapping); @@ -42,21 +37,21 @@ public static void obf(String dir, int depth, String[] obfClass, String[] blackC } private static void handleDex(File input, int depth, String[] obfClass, String[] blackClass, Mapping mapping) { - if (!input.getAbsolutePath().endsWith(".dex")) - return; + if (!input.getAbsolutePath().endsWith(".dex")) return; File tempJar = null; File splitDex = null; File obfDex = null; + File new_tempJar = null; try { tempJar = new File(input.getParent(), System.currentTimeMillis() + "obf" + input.getName() + ".jar"); splitDex = new File(input.getParent(), System.currentTimeMillis() + "split" + input.getName() + ".dex"); obfDex = new File(input.getParent(), System.currentTimeMillis() + "obf" + input.getName() + ".dex"); + new_tempJar = new File(tempJar.getParent(), "new_" + tempJar.getName()); List obfClassList = arrayToList(obfClass); List blackClassList = arrayToList(blackClass); - + // 解析官方的类名混淆文件 获取白名单中被映射后的类名 TrieTree whiteListTree = new TrieTree(); whiteListTree.addAll(obfClassList); - for (String aClass : mapping.getMapping().keySet()) { if (whiteListTree.search(aClass)) { String orig = mapping.get(aClass); @@ -66,7 +61,7 @@ private static void handleDex(File input, int depth, String[] obfClass, String[] } } } - + // 解析官方的类名混淆文件 获取黑名单中被映射后的类名 TrieTree blackListTree = new TrieTree(); blackListTree.addAll(blackClassList); List tmpBlackClass = new ArrayList<>(blackClassList); @@ -79,12 +74,16 @@ private static void handleDex(File input, int depth, String[] obfClass, String[] } } } + + // 通过dexLib2 解析出在obfClassList&&不在blackClassList中的类 分别编译成smali文件 再合并成新的dex文件 + // 并输出到splitDex指定的路径 long l = DexLib2Utils.splitDex(input, splitDex, obfClassList, blackClassList); if (l <= 0) { System.out.println("Obfuscator Class not found"); return; } - + // 使用dex2jar 将.dex转换成.class(.jar) + // 具体就是把 splitDex->tempJar new Dex2jarCmd(new ObfuscatorConfiguration() { @Override public int getObfDepth() { @@ -97,12 +96,15 @@ public boolean accept(String className, String methodName) { return super.accept(className, methodName); } }).doMain("-f", splitDex.getAbsolutePath(), "-o", tempJar.getAbsolutePath()); - new Jar2Dex().doMain("-f", "-o", obfDex.getAbsolutePath(), tempJar.getAbsolutePath()); + // 字符串混淆 string->byte[] 异或 + Base64 异或因子随机 内联解密以防hook + Operator.run(tempJar,new_tempJar,true); + new Jar2Dex().doMain("-f", "-o", obfDex.getAbsolutePath(), new_tempJar.getAbsolutePath()); DexLib2Utils.mergerAndCoverDexFile(input, obfDex, input); } catch (Throwable t) { t.printStackTrace(); } finally { tempJar.delete(); + new_tempJar.delete(); splitDex.delete(); obfDex.delete(); } From ea1c11ae7be48c233c313e617d54bd3c024638de Mon Sep 17 00:00:00 2001 From: wonson <1182742989@qq.com> Date: Sun, 3 Apr 2022 12:22:44 +0800 Subject: [PATCH 2/3] add string encrypt --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 481f81b..6c56cd9 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,4 @@ app/.DS_Store .idea/* gradle/.DS_Store build/ +localRepo/ \ No newline at end of file From 6ed2687f8cde1397312f8a53d676bd4194408675 Mon Sep 17 00:00:00 2001 From: wonson <1182742989@qq.com> Date: Sun, 3 Apr 2022 16:08:46 +0800 Subject: [PATCH 3/3] add string decode --- .../plugin/1.0.4/plugin-1.0.4.jar | Bin 32991 -> 33437 bytes .../plugin/1.0.4/plugin-1.0.4.jar.md5 | 2 +- .../plugin/1.0.4/plugin-1.0.4.jar.sha1 | 2 +- .../blackobfuscator/plugin/maven-metadata.xml | 6 +- .../plugin/maven-metadata.xml.md5 | 2 +- .../plugin/maven-metadata.xml.sha1 | 2 +- plugin/build.gradle | 2 +- .../src/main/java/com/wonson/CommonUtil.java | 9 ++ .../java/com/wonson/EncodeClassVisitor.java | 61 ++++++++++ .../java/com/wonson/EncodeMethodVisitor.java | 35 ++++++ .../com/wonson/EncodePlanAMethodVisitor.java | 13 +++ .../com/wonson/EncodePlanBMethodVisitor.java | 52 +++++++++ plugin/src/main/java/com/wonson/Operator.java | 108 +----------------- .../blackobfuscator/core/ObfDex.java | 34 ++++-- 14 files changed, 209 insertions(+), 119 deletions(-) create mode 100644 plugin/src/main/java/com/wonson/CommonUtil.java create mode 100644 plugin/src/main/java/com/wonson/EncodeClassVisitor.java create mode 100644 plugin/src/main/java/com/wonson/EncodeMethodVisitor.java create mode 100644 plugin/src/main/java/com/wonson/EncodePlanAMethodVisitor.java create mode 100644 plugin/src/main/java/com/wonson/EncodePlanBMethodVisitor.java diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar index 83f0115d9f51debbe32c29d89131c7bcc6e5980a..c6c8df752dc15e9d46878bd4ee4bd0cf45b40fb4 100644 GIT binary patch delta 4315 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 delta 3861 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 diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar.md5 b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar.md5 index 69808c9..3343cc4 100644 --- a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar.md5 +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar.md5 @@ -1 +1 @@ -6923a584935d5958249d1d2c46cd5fe3 \ No newline at end of file +fa2641d8ceb1ad8dfd89cf2cd2e99592 \ No newline at end of file diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar.sha1 b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar.sha1 index cd1fcd2..783f5d4 100644 --- a/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar.sha1 +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/1.0.4/plugin-1.0.4.jar.sha1 @@ -1 +1 @@ -fad3f1b796f066a110c5537220a78ad82915baf7 \ No newline at end of file +50300b26c1c185a9f17a1b8af740311877f352a6 \ No newline at end of file diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml b/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml index 795eaac..71c0d3e 100644 --- a/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml @@ -3,14 +3,16 @@ top.niunaijun.blackobfuscator plugin - 1.0.4 + 1.0.6 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 + 1.0.5 + 1.0.6 - 20220403041623 + 20220403075502 diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml.md5 b/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml.md5 index 483d8ed..e19b24c 100644 --- a/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml.md5 +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml.md5 @@ -1 +1 @@ -fcf82da2c787f0b55176a27ef42363af \ No newline at end of file +4b729cb58ee37a658cdbdeaec5886621 \ No newline at end of file diff --git a/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml.sha1 b/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml.sha1 index bc23bf9..7c2a1eb 100644 --- a/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml.sha1 +++ b/localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml.sha1 @@ -1 +1 @@ -e4906dd3c922fb6181dba4f91dc2712c8e282522 \ No newline at end of file +7e2a31627f480aa71549c5dcdff74da5746fba66 \ No newline at end of file diff --git a/plugin/build.gradle b/plugin/build.gradle index 2a1d03e..f3df135 100644 --- a/plugin/build.gradle +++ b/plugin/build.gradle @@ -22,7 +22,7 @@ repositories { } group='top.niunaijun.blackobfuscator' -version='1.0.4' +version='1.0.6' uploadArchives { repositories{ mavenDeployer { diff --git a/plugin/src/main/java/com/wonson/CommonUtil.java b/plugin/src/main/java/com/wonson/CommonUtil.java new file mode 100644 index 0000000..df5359c --- /dev/null +++ b/plugin/src/main/java/com/wonson/CommonUtil.java @@ -0,0 +1,9 @@ +package com.wonson; +import java.util.UUID; +public class CommonUtil { + public static String getRandomString(){ + String s = UUID.randomUUID().toString(); + String substring = s.substring(0, 8); + return substring; + } +} diff --git a/plugin/src/main/java/com/wonson/EncodeClassVisitor.java b/plugin/src/main/java/com/wonson/EncodeClassVisitor.java new file mode 100644 index 0000000..e4e8169 --- /dev/null +++ b/plugin/src/main/java/com/wonson/EncodeClassVisitor.java @@ -0,0 +1,61 @@ +package com.wonson; +import org.objectweb.asm.*; +import java.lang.reflect.Constructor; +import java.util.Random; +import static org.objectweb.asm.Opcodes.*; +public class EncodeClassVisitor extends ClassVisitor { + private String owner; + private boolean on; + private String data_name; + private String index_name; + private Random random = new Random(); + private Class encodeMethodVisitorClass; + + public EncodeClassVisitor(int api, ClassVisitor classVisitor, Class encodeMethodVisitorClass) { + super(api, classVisitor); + this.encodeMethodVisitorClass = encodeMethodVisitorClass; + } + + @Override + public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { + super.visit(version, access, name, signature, superName, interfaces); + if ((access & ACC_ABSTRACT) != 0 || (access & ACC_INTERFACE) != 0 || (access & ACC_ENUM) != 0 || (access & ACC_ANNOTATION) != 0) { + on = false; + } else { + on = true; + } + System.out.println("encoding:" + name); + this.owner = name; + if(encodeMethodVisitorClass == EncodePlanAMethodVisitor.class && on){ + data_name = "d_" + CommonUtil.getRandomString(); + index_name = "i_" + CommonUtil.getRandomString(); + FieldVisitor fv = cv.visitField(ACC_PUBLIC + ACC_STATIC, data_name, "[B", null, null); + fv.visitEnd(); + fv = cv.visitField(ACC_PUBLIC + ACC_STATIC, index_name, "I", null, null); + fv.visitEnd(); + } + } + + @Override + public void visitSource(String source, String debug) { + super.visitSource("null", "null"); + } + + @Override + public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { + MethodVisitor methodVisitor = super.visitMethod(access, name, desc, signature, exceptions); + try { + Constructor constructor = encodeMethodVisitorClass.getConstructor(int.class, MethodVisitor.class); + EncodeMethodVisitor encodeMethodVisitor = constructor.newInstance(ASM7, methodVisitor); + encodeMethodVisitor.setOn(on); + encodeMethodVisitor.setData_name(data_name); + encodeMethodVisitor.setIndex_name(index_name); + encodeMethodVisitor.setOwner(owner); + encodeMethodVisitor.setRandom(random); + return encodeMethodVisitor; + } catch (Exception e) { + e.printStackTrace(); + return methodVisitor; + } + } +} diff --git a/plugin/src/main/java/com/wonson/EncodeMethodVisitor.java b/plugin/src/main/java/com/wonson/EncodeMethodVisitor.java new file mode 100644 index 0000000..8a6514a --- /dev/null +++ b/plugin/src/main/java/com/wonson/EncodeMethodVisitor.java @@ -0,0 +1,35 @@ +package com.wonson; +import org.objectweb.asm.MethodVisitor; +import java.util.Random; +public abstract class EncodeMethodVisitor extends MethodVisitor{ + protected boolean on; + protected Random random; + protected String owner; + protected String data_name; + protected String index_name; + + public void setOn(boolean on) { + this.on = on; + } + + public void setRandom(Random random) { + this.random = random; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public void setData_name(String data_name) { + this.data_name = data_name; + } + + public void setIndex_name(String index_name) { + this.index_name = index_name; + } + + public EncodeMethodVisitor(int api, MethodVisitor methodVisitor) { + super(api, methodVisitor); + } + +} diff --git a/plugin/src/main/java/com/wonson/EncodePlanAMethodVisitor.java b/plugin/src/main/java/com/wonson/EncodePlanAMethodVisitor.java new file mode 100644 index 0000000..0cafe2c --- /dev/null +++ b/plugin/src/main/java/com/wonson/EncodePlanAMethodVisitor.java @@ -0,0 +1,13 @@ +package com.wonson; +import org.objectweb.asm.Label; +import org.objectweb.asm.MethodVisitor; +public class EncodePlanAMethodVisitor extends EncodeMethodVisitor{ + public EncodePlanAMethodVisitor(int api, MethodVisitor methodVisitor) { + super(api, methodVisitor); + } + @Override + public void visitLineNumber(int line, Label start) {} + + @Override + public void visitLocalVariable(String name, String descriptor, String signature, org.objectweb.asm.Label start, org.objectweb.asm.Label end, int index) {} +} diff --git a/plugin/src/main/java/com/wonson/EncodePlanBMethodVisitor.java b/plugin/src/main/java/com/wonson/EncodePlanBMethodVisitor.java new file mode 100644 index 0000000..5aa4773 --- /dev/null +++ b/plugin/src/main/java/com/wonson/EncodePlanBMethodVisitor.java @@ -0,0 +1,52 @@ +package com.wonson; +import org.objectweb.asm.MethodVisitor; +import java.util.Base64; +import static org.objectweb.asm.Opcodes.*; +import static org.objectweb.asm.Opcodes.INVOKESPECIAL; +public class EncodePlanBMethodVisitor extends EncodePlanAMethodVisitor{ + + public EncodePlanBMethodVisitor(int api, MethodVisitor methodVisitor) { + super(api, methodVisitor); + } + + @Override + public void visitLdcInsn(Object cst) { + if(cst != null && cst instanceof String){ + String target = String.class.cast(cst); + //˵ַ + if(target.length() == 0) { + mv.visitLdcInsn(cst); + } else { + // һ ýջ + mv.visitTypeInsn(NEW, "java/lang/String"); + mv.visitInsn(DUP); + mv.visitMethodInsn(INVOKESTATIC, "java/util/Base64", "getDecoder", "()Ljava/util/Base64$Decoder;", false); + byte[] encode = Base64.getEncoder().encode(target.getBytes()); + // + // BIPUSH: һbyteͳֵջ + // mv.visitIntInsn(BIPUSH,encode.length); + mv.visitLdcInsn(encode.length); + // ջֵcountΪ鳤ȣһ顣ջֵջýջ + mv.visitIntInsn(NEWARRAY,T_BYTE); + //ջֵҸֵջ + mv.visitInsn(DUP); + //ֵ + for(int index = 0; index < encode.length;index++){ + mv.visitLdcInsn(index); + mv.visitIntInsn(BIPUSH,encode[index]); + //ջbooleanbyteֵָָ±괦 + mv.visitInsn(BASTORE); + if(index < encode.length - 1) { + mv.visitInsn(DUP); + } + } + // + mv.visitMethodInsn(INVOKEVIRTUAL, "java/util/Base64$Decoder", "decode", "([B)[B", false); + // ó๹췽ʵʼ˽з + mv.visitMethodInsn(INVOKESPECIAL, "java/lang/String", "", "([B)V", false); + } + } else { + super.visitLdcInsn(cst); + } + } +} diff --git a/plugin/src/main/java/com/wonson/Operator.java b/plugin/src/main/java/com/wonson/Operator.java index e7c21cc..c2574cc 100644 --- a/plugin/src/main/java/com/wonson/Operator.java +++ b/plugin/src/main/java/com/wonson/Operator.java @@ -1,14 +1,9 @@ package com.wonson; import org.objectweb.asm.*; import java.io.*; -import java.util.Base64; -import java.util.Iterator; -import java.util.List; -import java.util.Random; +import java.util.*; import static org.objectweb.asm.Opcodes.*; public class Operator { - private static Random random = new Random(); - public static int max_local_var = 0; public static void run(File input_jar,File output_jar,boolean delete_input){ try { ZipFileHelper zipFileHelper = new ZipFileHelper(input_jar, output_jar); @@ -26,7 +21,6 @@ public static void run(File input_jar,File output_jar,boolean delete_input){ if(delete_input) { input_jar.delete(); } - System.out.println("max_local_var:" + max_local_var); } catch (IOException e) { e.printStackTrace(); } @@ -79,106 +73,10 @@ private static byte[] start(byte[] classByteCode){ } ClassReader classReader = new ClassReader(classByteCode); ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS); - ClassVisitor classVisitor = new ClassVisitor(ASM7,classWriter){ - private int var = 256; - @Override - public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { - super.visit(version, access, name, signature, superName, interfaces); - System.out.println("encoding:" + name); - } - @Override - public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { - MethodVisitor methodVisitor = super.visitMethod(access, name, desc, signature, exceptions); - MethodVisitor myMethodVisitor = new MethodVisitor(ASM7, methodVisitor) { - @Override - public void visitLdcInsn(Object cst) { - if(cst != null && cst instanceof String){ - byte key = (byte) random.nextInt(); - String target = String.class.cast(cst); - if(target.length() == 0){ - mv.visitLdcInsn(cst); - return; - } - byte[] bytes = target.getBytes(); - for(int i = 0;i < bytes.length; i++) bytes[i] ^= key; - byte[] encode = Base64.getEncoder().encode(bytes); - // - mv.visitIntInsn(BIPUSH,encode.length); - mv.visitIntInsn(NEWARRAY, T_BYTE); - mv.visitInsn(DUP); - //ֵ - for(int index = 0; index < encode.length;index++){ - mv.visitIntInsn(BIPUSH,index); - mv.visitIntInsn(BIPUSH,encode[index]); - mv.visitInsn(BASTORE); - if(index < encode.length - 1) mv.visitInsn(DUP); - else mv.visitVarInsn(ASTORE,var + 1); - } - // - mv.visitMethodInsn(INVOKESTATIC, "java/util/Base64", "getDecoder", "()Ljava/util/Base64$Decoder;", false); - mv.visitVarInsn(ALOAD, var + 1); - mv.visitMethodInsn(INVOKEVIRTUAL, "java/util/Base64$Decoder", "decode", "([B)[B", false); - mv.visitVarInsn(ASTORE,var + 1); - Label l1 = new Label(); - mv.visitLabel(l1); - - mv.visitInsn(ICONST_0); - mv.visitVarInsn(ISTORE, var + 2); - Label l2 = new Label(); - mv.visitLabel(l2); - - mv.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"[B", Opcodes.INTEGER}, 0, null); - mv.visitVarInsn(ILOAD, var + 2); - mv.visitVarInsn(ALOAD, var + 1); - mv.visitInsn(ARRAYLENGTH); - Label l3 = new Label(); - mv.visitJumpInsn(IF_ICMPGE, l3); - Label l4 = new Label(); - mv.visitLabel(l4); - mv.visitVarInsn(ALOAD, var + 1); - mv.visitVarInsn(ILOAD, var + 2); - mv.visitInsn(DUP2); - mv.visitInsn(BALOAD); - mv.visitIntInsn(BIPUSH,key); - mv.visitInsn(IXOR); - mv.visitInsn(I2B); - mv.visitInsn(BASTORE); - Label l5 = new Label(); - mv.visitLabel(l5); - mv.visitIincInsn(var + 2, 1); - mv.visitJumpInsn(GOTO, l2); - mv.visitLabel(l3); - mv.visitFrame(Opcodes.F_CHOP, 1, null, 0, null); - mv.visitTypeInsn(NEW, "java/lang/String"); - mv.visitInsn(DUP); - mv.visitVarInsn(ALOAD, var + 1); - mv.visitMethodInsn(INVOKESPECIAL, "java/lang/String", "", "([B)V", false); - return; - } - super.visitLdcInsn(cst); - } - - @Override - public void visitLineNumber(int line, Label start) {} - - @Override - public void visitLocalVariable(String name, String descriptor, String signature, Label start, Label end, int index) {} - - @Override - public void visitMaxs(int maxStack, int maxLocals) { - super.visitMaxs(maxStack,maxLocals + 2); - if(max_local_var < maxLocals){ - max_local_var = maxLocals; - } - } - }; - return myMethodVisitor; - } - }; + ClassVisitor classVisitor = new EncodeClassVisitor(ASM7,classWriter,EncodePlanBMethodVisitor.class); classReader.accept(classVisitor,ClassReader.SKIP_DEBUG); try { - byte[] bytes = classWriter.toByteArray(); - return bytes; + return classWriter.toByteArray(); }catch (Exception exception){ exception.printStackTrace(); return back_up; diff --git a/plugin/src/main/java/top/niunaijun/blackobfuscator/core/ObfDex.java b/plugin/src/main/java/top/niunaijun/blackobfuscator/core/ObfDex.java index 910c592..2725167 100644 --- a/plugin/src/main/java/top/niunaijun/blackobfuscator/core/ObfDex.java +++ b/plugin/src/main/java/top/niunaijun/blackobfuscator/core/ObfDex.java @@ -5,6 +5,7 @@ import org.jf.DexLib2Utils; import org.jf.util.TrieTree; import java.io.File; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -82,9 +83,12 @@ private static void handleDex(File input, int depth, String[] obfClass, String[] System.out.println("Obfuscator Class not found"); return; } - // 使用dex2jar 将.dex转换成.class(.jar) - // 具体就是把 splitDex->tempJar - new Dex2jarCmd(new ObfuscatorConfiguration() { + + // 实例化混淆配置 + ObfuscatorConfiguration obfuscatorConfiguration = new ObfuscatorConfiguration() { + private int depth; + private boolean accept; + @Override public int getObfDepth() { return depth; @@ -92,13 +96,29 @@ public int getObfDepth() { @Override public boolean accept(String className, String methodName) { - System.out.println("BlackObf Class: " + className + "#" + methodName); - return super.accept(className, methodName); + if(accept) System.out.println("BlackObf Class: " + className + "#" + methodName); + return accept; + } + + public void setAccept(boolean accept) { + this.accept = accept; + } + + public void setDepth(int depth){ + this.depth = depth; } - }).doMain("-f", splitDex.getAbsolutePath(), "-o", tempJar.getAbsolutePath()); - // 字符串混淆 string->byte[] 异或 + Base64 异或因子随机 内联解密以防hook + }; + Class obfuscatorConfigurationClass = obfuscatorConfiguration.getClass(); + Method setDepth = obfuscatorConfigurationClass.getDeclaredMethod("setDepth", int.class); + Method setAccept = obfuscatorConfigurationClass.getDeclaredMethod("setAccept", boolean.class); + // 控制流混淆 + setDepth.invoke(obfuscatorConfiguration,depth); + setAccept.invoke(obfuscatorConfiguration,true); + new Dex2jarCmd(obfuscatorConfiguration).doMain("-f", splitDex.getAbsolutePath(), "-o", tempJar.getAbsolutePath()); + // 字符串加密 Operator.run(tempJar,new_tempJar,true); new Jar2Dex().doMain("-f", "-o", obfDex.getAbsolutePath(), new_tempJar.getAbsolutePath()); + // 合并 DexLib2Utils.mergerAndCoverDexFile(input, obfDex, input); } catch (Throwable t) { t.printStackTrace();