Beta Kernel 21 Jan 11

NOTE: I’m taking this weekend off from working on kernels.  I also will not be checking the site as much as normal.  Same goes for next week during the day, since I’ll be in a training class w/o internet access.  So if you have any issues, please post them, and I will check in when I can.

NOTES on AOSP: It appears that my kernels work for the most part on Froyo based AOSP ROMs.  However, Gingerbread is a totally different issue.  So it may or may not work, best way to find out is to try.  I do have plans to start working on newer kernel sources soon, but I really need some time off, I’ve spent most of my free time since Thanksgiving on this current source tree.

Changelog (since 15 Jan 11):
Hybrid Adaptive Voltage Scaling (HAVS) with sysfs vdd interface working 100%

SVS sysfs interface file for VDD: /sys/devices/system/cpu/cpu0/cpufreq/vdd_levels
HAVS sysfs interface file for VDD: /sys/devices/system/cpu/cpu0/cpufreq/vdd_levels_havs
It’s mostly the same code, but for scripting purposes I named them different
Only one will appear, not both

Sped up lock screen on ALL, damn HTC and Android fdearlysuspend
Fixed some earlysuspend issues
Fixed some wakelock issues
Updated WiMax drivers, ooops, forgot that in the EVO-MR3 update
Fixed a findbit problem

I had updated this to the glacier tree, which doesn’t work as well on our phones

Beta Kernel BRAVO BFS 21 Jan 11 (362)
Beta Kernel BRAVO BFS HAVS 21 Jan 11 (343)
Beta Kernel BRAVO CFS 21 Jan 11 (209)
Beta Kernel BRAVO CFS HAVS 21 Jan 11 (237)
Beta Kernel EVO BFS 21 Jan 11 (346)
Beta Kernel EVO BFS HAVS 21 Jan 11 (734)
Beta Kernel EVO CFS 21 Jan 11 (566)
Beta Kernel EVO CFS HAVS 21 Jan 11 (2013)
Beta Kernel INC BFS 21 Jan 11 (304)
Beta Kernel INC BFS HAVS 21 Jan 11 (1018)
Beta Kernel INC CFS 21 Jan 11 (199)
Beta Kernel INC CFS HAVS 21 Jan 11 (409)



syfs VDD Interface Usage:
Static Voltage Scaling (SVS):”<freq> <vdd>”

echo “128000 875″ > /sys/devices/system/cpu/cpu0/cpufreq/vdd_levels

Hybrid Adaptive Voltage Scaling (HAVS):”<freq> <min_vdd> <max_vdd>”
echo “128000 850 900” > /sys/devices/system/cpu/cpu0/cpufreq/vdd_levels_havs


  1. Ping from Tweets that mention Beta Kernel 21 Jan 11 --

    […] This post was mentioned on Twitter by dbone15, Ziggy 471. Ziggy 471 said: New kernels for the weekend – Beta Kernel 21 Jan 11 – […]

  2. Comment by Daryl S:

    Will these work on AOSP roms?

  3. Comment by Rob L:

    Ziggy, just flashed the new EVO CFS HAVs, and have experiened 2 hard lockups within 15 minutes. Once was when the phone was asleep, went to power it up and nothing. It finally rebooted on its own. The next was just now, cruising the Market, froze, sat there for about 3 minutes before it would reboot again. I have setCPU set on Jackass 1150 max and 245/384 min (1st time it was locked was on 245, changed it to 384 before the 2nd crash). This is on a 0004 EVO running MikFroyo 4.4 with Apps2sd cached to SD. I did nothing with the file in sys/. Are we required to edit this file?

    • Comment by Rob L:

      Just an FYI, I deleted SetCPU, and then redownloaded it, set it to Smartass, and only raised the MAX slider (1152 which I know works). Will give feedback…

      • Comment by Ziggy471:

        My recomendation always is to uninstall SetCPU, try it then, if it works, then slowly start upping the value manually.

        echo “{freq}” > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq

        Where {freq} is one of these:
        1036800, 1075200, 1113600, 1152000, 1190400, 1228800

        The default governor is already set to smartass, so you don’t need to change that.

  4. Comment by nugzo:

    I have 0004 evo, will try that kernel and post back if i have a problem.

  5. Comment by nugzo:

    Oc’d to 1119, no lock ups or issues.. Only been a few hours though. Dunno Rob

  6. Comment by isedMonk:

    Hi Ziggy. Quick question: Im flashing the Evo CFS HAVS on Calk’s EViO v1.7.7 with his 150 mV undervolt script. I have already changed the default governor from conservative (Calk’s default) to smartass since you fixed the scaling levels for this release. Would you recommend disabling the undeevolt script or running the non-HAVS CFS kernel? Thanks in advance.

    • Comment by Ziggy471:

      No reason to disable them, they won’t work. You can modify them to work again, refer up top to the difference between SVS and HAVS vdd sysfs interface.

      • Comment by VisedMonk:

        Thanks. Sorry to bug you again. I would rather use your HAVS scripts, not Calk’s undervolt scripts. So just to clarify, your HAVS scripts override/supersede Calk’s undervolting? And that’s why I don’t need to modify them to work again?

        • Comment by Ziggy471:

          Unless Calkulin has updated his undervolt scripts, then they won’t work. I don’t know if he has. With HAVS, there are 2 levels given to the sysfs interface, both a min and a max voltage.

          I really don’t have any scripts for it, I only set 128 and 245.

  7. Comment by incubus26jc:

    ziggy, dude, 1830 on quadrant stock inc bfs HAVS 1/21.
    Your awesome.

  8. Comment by iknowsquat:

    Hey Zig,
    1/21 bfs havs kernel seems great.
    4G is fine to connect but when I turn OFF 4G phone locks up and reboots.
    002 Device.
    I erased cache and dalvik.
    I erased the two wimax files in system/lib/module that aren’t in 1/19 kernel (Virus’ stab in the dark 😉 )
    Still locked up.
    1/19 bfs havs turns 4G off fine.
    Thanks for all the hard work Bro.

  9. Comment by Hitmankid:

    Ziggy I wanted to thank you for are all your hard work and offering us options not given to us by the big phone manufactorers but my biggest problem in the present is you have posted up several download options and I do not know what they mean like what’s bfs and cfs or bravo so I have not yet chooses which one I should download from all the beta 21.

    • Comment by Ziggy471:

      Alright, here’s the break down:
      EVO – Sprint HTC Evo 4G
      INC – Verizon Droid Incredible
      BRAVO – HTC Bravo (aka HTC Desire)

      Task Schedulers:
      CFS – Completely Fair Scheduler, default in the linux kernel
      BFS – Brain Fuck Scheduler, simpler implementation by Con Kolivas.

      During testing we determined these generalities:
      CFS works better on Older sense ROMs. BFS works better on newer sense ROMs, ie Desire Z/HD ports.

      So in reality, you have 4 choices for your phone, CFS or BFS, and with or without HAVS. Personally, I recommend HAVS, and I use BFS, since I’m running a Desire Z port, Uber Z by gmichaelow.

  10. Comment by IncredibleDude:

    a few things:
    1) glad to see ur using uber rom =) (although i personally am on re-engineered right now, uber is 2nd fav and not by much)

    2)what exactly does HAVS do? by the name it sound like a good option, but hybrid of what?

    3) +1 for all the doctor who stuff =P

  11. Comment by karma:

    Hi Ziggy! Thank you very much for your work! I’ve been using your kernels lately on a Z port (Z rom v 0.6 from xda) on my desire… but I think you made a masterpiece with this latest release. I tried bfs havs version first but I was not kind to my battery.. then I switched to cfs havs and it’s great either on battery life and responsiveness. The only bug I noticed is that I can no longer get the green led blinking on missed calls. While it works with handcent for sms’. Is there anything you can do for it?
    Keep up the good work!

  12. Comment by Cothek:

    First off, thanks ziggy for the kernel and all the hard work that goes with.

    Not sure if I’m the only one experiencing this but wifi tethering doesn’t work with your kernel. I’m running MIUI on an inc. Haven’t tried wifi tether, just the builtin tether in MIUI.

    • Comment by Ziggy471:

      I’m not sure why, I’m currently posting this from Wireless Tether 2.0.6 on my Incredible running Uber Z.

      • Comment by Cothek:

        Here is a logcat dump:
        D/SoftapController( 93): Softap driver stop: 0
        D/SoftapController( 93): Softap fwReload – Ok
        D/ ( 525): found .nomedia, skipping directory
        D/AutoLcdLight( 131): SensorValue: 1280, Brightness: 94
        D/installd( 99): DexInv: — BEGIN ‘/mnt/asec/com.skyvu.battlebearszombies-1/pkg.apk’ —
        D/dalvikvm( 827): creating instr width table
        D/dalvikvm( 827): DexOpt: load 38ms, verify 80ms, opt 2ms
        I/CheckinService( 372): From server: Intent { act=android.server.checkin.FOTA_CANCEL }
        D/installd( 99): DexInv: — END ‘/mnt/asec/com.skyvu.battlebearszombies-1/pkg.apk’ (success) —
        D/ ( 525): found .nomedia, skipping directory
        D/ ( 525): found .nomedia, skipping directory
        D/SoftapController( 93): Softap driver start: 0
        D/SoftapController( 93): Softap set – Ok
        D/dalvikvm( 525): GC_FOR_MALLOC freed 8315 objects / 516656 bytes in 49ms
        D/AutoLcdLight( 131): SensorValue: 1280, Brightness: 94
        E/SoftapController( 93): SIOCGIPRIV failed: -1
        E/SoftapController( 93): Softap startap – function not supported

        I tried running it twice…i think there’s a mod in miui to have the wireless to show up as a regular wireless network as opposed to adhoc. Any ideas?

        • Comment by Ziggy471:

          Here’s my ‘logcat | grep TETHER’ output:

          D/TETHER -> MainActivity( 9365): StartBtn pressed …
          D/TETHER -> CoreTask( 9365): Writing 336 bytes to file: /data/data/android.tether/conf/tether.conf
          D/TETHER -> CoreTask( 9365): Writing 195 bytes to file: /data/data/android.tether/conf/dnsmasq.conf
          D/TETHER -> CoreTask( 9365): Writing 352 bytes to file: /data/data/android.tether/bin/
          D/TETHER -> TetherApplication( 9365): Creation of configuration-files took ==> 70 milliseconds.
          D/TETHER -> CoreTask( 9365): Writing 47 bytes to file: /data/data/android.tether/conf/resolv.conf
          D/TETHER -> CoreTask( 9365): Root-Command ==> su -c “/data/data/android.tether/bin/tether start 1”
          D/TETHER -> MainActivity( 9365): StopBtn pressed …
          D/TETHER -> CoreTask( 9365): Root-Command ==> su -c “/data/data/android.tether/bin/tether stop 1”

          Works just fine with Wireless Tether,, I’m not sure why it wouldn’t work on MIUI, but I’ve never run MIUI to know.

          I do have softap enabled in ALL kernel configs:

          Again, I’m not sure why it’s not working.

      • Comment by Cothek:

        Wireless tether has a similar problem it looks like. When I go into the logs everything else starts up but the access point. It also looks like it uses all the settings from the MIUI wireless tether…

  13. Comment by Jase:


    I’m currently running Calk’s rom on my Evo with the latest radios/wimax/pri’s and have come to an issue with your kernels lately.
    Originally the kernel you developed spec. for Calk’s rom caused my phone to reboot randomly and i originally thought it was the uV so i flashed his removeuV and still had it. then tried flashing the last 2 kernels you’ve posted on your site and had it with both of them too.
    Then i finally flashed net’s 4.3.2 cfs/havs/more aggressive kernel and haven’t had the issue come up again. yet. The reboots would be completely random it seemed and not really when the system was under stress, ie. overnight while charging and just the desk clock app running, or just with it sitting on desk screen off.
    I’m NOT oc’d nor do i have any profiles on in setcpu so its not that. I tried to catch a log of the event that maybe caused it but couldn’t with alogcat as it cleared the log each reboot.
    willing to help you debug this if you want just shoot me an email and let me know what you would like me to try out for you.

    sorry for the extreme long post here, figured more info i could give you the better.

    • Comment by Ziggy471:

      First off, which kernel, there’s only 4 per platform now. The one that I did for Calkulin barely had any mods to it, so I’m not sure why that one had an issue.

      And a copy of /proc/last_kmsg after the reboot would be helpful.

      • Comment by Jase:

        i tried the CFS011511, CFS012111, and CFSHAVS012111.

        ill put back on one of them and try and get the file you mentioned above. btw i looked just now on the phone and with root explorer noticed i only had a last_radio_log in the /proc/ folder. there was a “kmsg” file in there too but not a “last_kmsg”
        will that file just appear after a reboot happens?

        • Comment by Jase:

          I have the last_kmsg file you asked for. I’d post it here but after viewing it in text editor its pretty long and dont wanna take away from the other stuff. let me know if i should still post it or email me and ill attach it or put it in the boy of the message there.

  14. Comment by Frankie:

    I want to switch kernels from calk’s rom. But when we flash a new kernel, what should we wipe?

  15. Comment by Luigi:

    I know Ziggy you do not like the SBC script, and already stated you will NOT include it in your kernels, but I was very interested in trying your amazing kernels and combining it with the SBC script, I have asked around how to compile such a kernel and I know I would have to do it myself, but a few people have posted and told me to just asking the dev themselves, so would this be possible as it would be a very quick and easy thing for you to add the SBC script.

    Thank You…

    I greatly appriciate your time and would love if you could help me out

  16. Comment by dccoh:

    When I try to edit the voltage file using Root explorer, it saves, but when i go back to edit it, its back to what it was originally.

    Do i have to edit this file another way for it to stick? Wanted to try out lower voltages using the smartass governor by editing the /sys/devices/system/cpu/cpu0/cpufreq/vdd_levels_havs file

  17. Comment by bad--dog:

    can i get a quick script to keep screen off frequency to the lowest possible setting to achieve the race to idle efficiently say around 537000 or so…. seeing as im a script noob

    • Comment by Ziggy471:

      Smartass does this by default, it’s set to use 128-245 with the screen off. I went with those freqs due to a few lag issues using just 128.

      • Comment by bad--dog:

        so is it your view that the theory of the race to idle where the higher freq like 576 gets to idle faster and therefore saves more energy then a lower freq like 245 taking longer to get to idle and therefore wasting more energy like explained here
        is true or false im a complete noob regarding this so just trying to get the best battery life possible here.. and btw just flashed your kernel for the first time yesterday and its now my daily blows away all others i do wish it had sbc but ill take it anyway i can get it

        • Comment by Ziggy471:

          I agree with that completely, numbers don’t lie, okay, sometimes they do, but in that case they don’t. Most governors are based on CPU load for scaling, for example, smartass in my kernels is set for 55% load to scale up, and 35% load to scale down. So if a process or processes are causing the CPU load to be over 55%, it will either scale up or stay at the current freq if it’s at the maximum freq already. Once the load falls below 35%, it will scale down. I have it set to scale to what it calculates is the best frequency, instead of just scaling one step, 38400, at a time. I found this is better for battery.

          If you are using Smartass, you can tweak it via the sysfs interface, /sys/devices/system/cpu/cpu0/cpufreq/smartass, to scale faster, slower, smaller steps, load, etc…. Right now I have it set for a good middle ground of battery vs. performance.

  18. Comment by Vince:

    Another excellent kernel Ziggy. Keep up the good work. HTC Incredible, stock rom, kernel no issues to report.

  19. Comment by Aaron:

    Currently been on havs evo cfs kernel since release. But as of late ive been getting random rebots like crazy. Had to do a battery pull yesterday. And today three reboots so far.

    • Comment by Ziggy471:

      That’s odd, but a /proc/last_kmsg may help me figure out why. When you get one, just comment here, and as long as you use a real email, I’ll just email you directly so you can get me a copy.

      • Comment by Tim85:

        Hey Ziggy, it’s been happening to me too lately, i’m running CFS Havs for the Evo. Today I had like 4 reboots. What i’ve noticed when I get these reboots is it usually happens when the phone is coming out from screen off. Do you think it has to do with the default screen off which you have set 128-245? I know sometimes when I turn the screen back on it feels a little laggy for a few seconds. If there’s anything you need me to do i’ll be gladly to help out to try and figure this out.

  20. Comment by Aaron:

    How do I get a last_kmsg? Thanks.

  21. Comment by strongsteve:

    When I do an echo to change max cpu, it doesn’t stick after a reboot.. how can I make it so? I hate using SetCPU.

    • Comment by strongsteve:

      nevermind.. I just edited the file

      • Comment by minieod:

        tutorial on how to write the file?

        • Comment by minieod:

          mainly, i cant replace only view – it says error when i try to edit the file

          • Comment by Ziggy471:

            Anything under the sysfs filesystem, /sys, ARE NOT real files. They are interfaces to the kernel and operating system. So you don’t edit a file, you echo something to it. When you /view/ a file, the kernel just prints information back to you, so it’s really not in the file.

            For example, to modify the max cpu, you would create an init script, ie. a file under /system/etc/init.d/. Most ROMs now have run-parts enabled in them, so init scripts should run just fine. The file would contain something similar to the following:

            echo 1152000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq

            Name the file something like 99setmaxfreq and make sure you set it as executable, ie. chmod 755 99setmaxfreq.

          • Comment by minieod:

            sorry for all the problems ziggy – im not a computer dev or anything, just with what ive learned online through you guys and the forums

            so , i got all that setup – but not sure hwo to get it to be an exec file….i setup a file just like you said and put it in init.d but , not working

          • Comment by minieod:

            a little bit of googling and i think ive got it!

          • Comment by minieod:

            ok so no, i tried to adb shell into the directory /system/etc/init.d/

            and then i ran “chmod 755 filename” and no go.

          • Comment by minieod:

            when i am trying to chmod it is saying that i cant ch that file because it is read only, but if i look at the file nothing about it is read only… :/

            sorry im cloggin up this part of the thread, it wont let me edit or delete posts

          • Comment by Ziggy471:

            Did you remount /system as read-write??? To do that do either of these:
            adb remount
            or while in a shell on the phone
            mount -orw,remount /system

          • Comment by minieod:

            now its working (not giving me an error)

            but when i check its still only running at 998 at 100% cpu

            i relayed the file as you said and put it where you said

          • Comment by Ziggy471:

            init scripts only run on boot, and only run if your ROM has run-parts enabled. So if after a reboot, it’s still at 998, then you don’t have run-parts enabled on your ROM. You can either ask the dev to add that, or extract your boot image and modify it yourself.

          • Comment by minieod:

            and now im completely lost. im gonna research though

  22. Comment by Philyteach:

    Ziggy, not sure what you did, as most of the stuff you guys are discussing sounds like greek or russian to me. Having said that, the EVO CFS with HAVS Kernal is positively awesome. I forgot to charge my phone saturday night and had to be at a meeting on sunday. The battery lasted from 6 am Saturday morning to 8pm Sunday night. Granted I was in meetings on both days and not using the phone much, but even on idle that’s impressive time. None of the previous kernals have even come close to that for me. Thank you for your great work.

  23. Comment by Paul:

    Using the latest version for Inc with CFS/HAVS. This is a fantastic kernel. Using setCPU, maxing at 1075 and screen off 245/386–all smartass, battery use at night is close to zero, but very snappy during use. This is the best kernel out of many that i’ve tried.

    Droid Incredible AMOLED
    11.19 radio
    Ziggy 1/21/11 kernel + SetCPU
    Virtuous 3.2 ROM

  24. Comment by bikercr:

    Quick question: Is wireless-N enabled in the Incredible kernel? I know you had disabled it in earlier kernels.

  25. Comment by m1l4droid:

    I’ve been using your BFS HAVS kernel on my Desire with HD ROM and I have to say it’s awesome, decent battery life, and great speed!

  26. Comment by IonutIT:

    Amazing kernel Ziggy!

    One question though, is there a way to make cpu freq changes persistent. I’m using RCMixHD v2.0 and with your HAVS kernel and as far as I see it has smartass (245/998) with screen on and ondemand (245/384) with screen off. I want to change the freq for the ondemand and make them persistent. Echo-ing it will overwrite it after i turn on/off the display


    • Comment by Ziggy471:

      Smartass is the default all around, unless something is changing it on you. The defaults are as follows:
      Screen on – 128-998
      Screen off – 128-245

      To make changes to the settings you need to make an init script that would echo the changes on boot. It sounds like you have a screen state init script already running, look in /system/etc/init.d, and you’ll find one. I used to do that, but find no reason now with smartass tweaked the way I like it.

  27. Comment by Dustin:

    Hey Z, I have an Incredible, 0002 with amoled screen, running Skyraider 3.5. I have tried all 4 flavors of this latest kernel. I should also mention that I am up to date on all apps, including flash, which I have modded with Almighty1’s Hulu mod for flash. For me, CFS runs much smoother than BFS. Everything works perfectly on the plain CFS kernel, but when using either of the HAVS kernels and playing a flash video in the stock browser, on a zoomed in screen, or full screen video, the video plays for a few seconds, then the browser just closes, like a force close, without a force close notice. Reopening the browser starts fresh at the home screen. I have tested each kernel repeatedly, clearing caches every time, and fixing permissions, but the HAVS kernels always produce the same result. I’m very happy with the plain CFS kernel, and will continue using it! I just wanted to share my results with you, hoping that they help with future kernels. I don’t have a PayPal account, but I’m setting one up now, donation on the way! Thanks for all of the awesome work!

    • Comment by Ziggy471:

      It sounds like you have an issue with voltage. I went with a fairly conservative voltage table in my HAVS kernels, but doesn’t work for everyone in every situation. Since the SVS kernels appear to work, you can either stick with those, or start playing around with the voltages on the HAVS kernels, all depends on how much you like to hack things.

      Also, thanks for the donation.

  28. Comment by Aaron:

    Hey ziggy, not sure if you ever got my last email with my last rebot stat… Since I didnt get an email saying you did. I had another random reboot just now if you need that info as well.

  29. Comment by Quick:

    I’ve actually been having random reboot problems like the user above mentions.

    I recently installed the latest CFS on my wife’s EVO, and she started having random reboots a few days later.

    I get them even after a full wipe.

  30. Comment by Steve:

    I’m trying to change the max frequency and voltages for the 21jan evo CFS HAVS kernel using a file in /system/etc/init.d/ I’m using Koni Elite ROM. hdwr 003,

    The file called 99setmaxfreq looks like this:
    echo ‘1152000’ > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
    echo ‘128000 875 900’ > /sys/devices/system/cpu/cpu0/cpufreq/vdd_levels_havs
    echo ‘245000 900 925’ > /sys/devices/system/cpu/cpu0/cpufreq/vdd_levels_havs

    then chmod 755 /system/etc/init.d//99setmaxfreq in adb shell.
    I don’t get any errors but values in /sys/devices/system/cpu/cpu0/cpufreq don’t change before or after reboot.

  31. Comment by GPz1100:

    Steve, you’re changing voltage levels, not cpu frequencies.

    You want scaling_min_freq and scaling_max_freq. Those take a single integer value each, in terms of KHz (ie 128000).

    • Comment by Ziggy471:

      If you look at his entire script, which he didn’t post here, but he sent me, it does both. Right now I’m waiting on him to try a few things I sent him, it appears that it may be an issue with his rom not supporting run-parts, even though it’s in the ramdisk image. But I won’t know until he tries a few more things.

  32. Comment by strongsteve:

    I have been getting the reboots and I have a last_kmsg to send you.. how? Thanks.

  33. Comment by Steve:

    Just wanted to say thanks for your work on these kernels. I recently flashed MIUI Rom on my evo and couldn’t find a complete kernel for my needs til your latest CFS build. Thanks!!

  34. Comment by TT:

    I’ve been using your CFS w/o HAVS Evo kernel w/Mikfroyo 4.4 and the user experience has been exceptional.Thank you so much for such good work.

  35. Comment by Raks1024:

    I have found that I get substantial battery loss on 4g when using CFS HAVS on the evo (newest kernal). The battery life is great with 4g off but it just drains with it on.

  36. Comment by billfnbragg:

    When is the next release gonna take place ziggy?

  37. Comment by Tarik:

    I really hope you are still working on these kernels. They are the only kernels that have everything working in my evo including cameras and BT. Please dont give up on us.

    • Comment by Ziggy471:

      I haven’t completely stopped, just been really busy with other things, like work and family. I just sent a few some test kernels tonight, if they test out fine in private beta, I’ll post them this weekend.


  38. Comment by blediot:

    Ziggy I have the same problem as Steve. I did the
    chmod 755 /system/etc/init.d//99setmaxfreq in adb shell.
    I didn’t get any errors but values in /sys/devices/system/cpu/cpu0/cpufreq don’t change before or after reboot.

    What would you suggest I do next?

Leave a Reply