Jump to content

Recommended Posts

Posted

 Is there a reason why you output to the papyrus log instead of a stand-alone one?

 

It is because it uses the partner Java app that runs the controller.

Without the logging function turned on the Java app would do nothing at all and the mod would not work. And with all that without the Java app running in the background it dose nothing more than disable the controller for use as controls in game.

 

If it seems a bit simplistic that is because it really is. Well all except the coding of the app that is, and the esp, oh and the scripting. But Mr. Private has done a wonderful job on that.

Posted

So I made a thing. Someone suggested I should post it here.

 

Works better than expected. a diode on each motor output joined into one quick-detach cable for running any 3v toy. With this mod, it has a full range of power since it goes off with power to either motor, and stronger with both.

 

 

I'm glad you posted it. It feels good someone is actually using my program. Its funny because i study mechanical engineering, not programming. It took a lot of work to get to here and I like the results so far. 

 

 

is there a way it can work with 2 controllers?^^

 

Some one was asking me on private message: can you make animation specific vibration? 

 

This is my message back on 11-10-2014:

Its possible but i didnt have any plans yet. This is because i dont know what vibration there should be with specific animations. If you can give me a few examples please let me now.

 

I just had i new idea XD. multi controller support hahaha.

 

Thanks for the ideas.

..........

 

It is possible and good be added easily. Question to you do you really want it or was it just a idea?

 

@Mr. private The new part added to the Captured Dreams Shop works like an actual dream. Thanks so much.

 

Took me some time to start and find the mission. But after i found it it was added quickly. The problem how ever is that there was no mod event. This means i needed to edit the Captured Dream mission my self. This has one problem every time the mod updates i need to make a update as well.

 

Mr. Private. I really like this mod, thank you for working on it!

 

Is there a reason why you output to the papyrus log instead of a stand-alone one?

 

Skyrim has 2 problems with controllers.

1. you can play with keyboard and mouse or with controller. but not at the same time.

2. There was no commands in skyrim to make the controller vibrate.

 

Maybe you can do it in a skse plugin where you can use C++ programming, but i didnt know this language. So i started to seek for other options and found out you can make skyrim post lines of text in papyrus. After i found this i started to work in java to make the program. I am a mechanical engineer and learned some java on internet. 

Posted

 

So I made a thing. Someone suggested I should post it here.

 

NSFW below the jump

 

 

 

BzzhfTNCYAAjqQu.jpg

Works better than expected. a diode on each motor output joined into one quick-detach cable for running any 3v toy. With this mod, it has a full range of power since it goes off with power to either motor, and stronger with both.

 

 

 

Nice, now all it needs is mass production and a cheap price.

 

 

 

altogether under $40 including a second pair of motors so I wouldn't have to cut up the old ones to get the wiring harnesses. Not too expensive... cheaper if you buy the cheapest knockoff controller you can find. Pretty easy, too.

Posted

 

 

So I made a thing. Someone suggested I should post it here.

 

NSFW below the jump

 

 

 

BzzhfTNCYAAjqQu.jpg

Works better than expected. a diode on each motor output joined into one quick-detach cable for running any 3v toy. With this mod, it has a full range of power since it goes off with power to either motor, and stronger with both.

 

 

 

Nice, now all it needs is mass production and a cheap price.

 

 

 

altogether under $40 including a second pair of motors so I wouldn't have to cut up the old ones to get the wiring harnesses. Not too expensive... cheaper if you buy the cheapest knockoff controller you can find. Pretty easy, too.

 

 

Probably even cheaper if you have a few old PS3 controllers like I do that I never use any more (well not before this mod any way). In fact I think I only played my PS3 once and the only game I have for it is New Vegas but I mostly play my PC version with a mass of mods. My PS3 just gathers dust. That DS3 tool is a Goddess send as it works really well with this.

Posted

 

 

 

So I made a thing. Someone suggested I should post it here.

 

NSFW below the jump

 

 

 

BzzhfTNCYAAjqQu.jpg

Works better than expected. a diode on each motor output joined into one quick-detach cable for running any 3v toy. With this mod, it has a full range of power since it goes off with power to either motor, and stronger with both.

 

 

 

Nice, now all it needs is mass production and a cheap price.

 

 

 

altogether under $40 including a second pair of motors so I wouldn't have to cut up the old ones to get the wiring harnesses. Not too expensive... cheaper if you buy the cheapest knockoff controller you can find. Pretty easy, too.

 

 

Probably even cheaper if you have a few old PS3 controllers like I do that I never use any more (well not before this mod any way). In fact I think I only played my PS3 once and the only game I have for it is New Vegas but I mostly play my PC version with a mass of mods. My PS3 just gathers dust. That DS3 tool is a Goddess send as it works really well with this.

 

 

Oke here we go AGAIN! Xbox vs PS vs PC.

PC FOR THE WIN!

Posted

 

 

 

 

So I made a thing. Someone suggested I should post it here.

 

NSFW below the jump

 

 

 

BzzhfTNCYAAjqQu.jpg

Works better than expected. a diode on each motor output joined into one quick-detach cable for running any 3v toy. With this mod, it has a full range of power since it goes off with power to either motor, and stronger with both.

 

 

 

Nice, now all it needs is mass production and a cheap price.

 

 

 

altogether under $40 including a second pair of motors so I wouldn't have to cut up the old ones to get the wiring harnesses. Not too expensive... cheaper if you buy the cheapest knockoff controller you can find. Pretty easy, too.

 

 

Probably even cheaper if you have a few old PS3 controllers like I do that I never use any more (well not before this mod any way). In fact I think I only played my PS3 once and the only game I have for it is New Vegas but I mostly play my PC version with a mass of mods. My PS3 just gathers dust. That DS3 tool is a Goddess send as it works really well with this.

 

 

Oke here we go AGAIN! Xbox vs PS vs PC.

PC FOR THE WIN!

 

 

No, no, no, no. I was saying that I only played my PS3 one time. Then went back to PC, it has been gathering dust ever since. PC is way better than any console can dream to be, especially when the console makers use 5 to 10 year old hardware like they do.

Posted

 

No, no, no, no. I was saying that I only played my PS3 one time. Then went back to PC, it has been gathering dust ever since. PC is way better than any console can dream to be, especially when the console makers use 5 to 10 year old hardware like they do.

 

 

I was just making a joke. But right now i hate pc, BSOD. i think its my motherboard or gpu :(

Posted

 

 

No, no, no, no. I was saying that I only played my PS3 one time. Then went back to PC, it has been gathering dust ever since. PC is way better than any console can dream to be, especially when the console makers use 5 to 10 year old hardware like they do.

 

 

I was just making a joke. But right now i hate pc, BSOD. i think its my motherboard or gpu :(

 

 

Ouch I had that a few months back. My CPU was dieing to old age and I could not keep the thing running for more than 10 to 20 minutes at a time without a BSOD. Had to replace the motherboard and CPU. But it was time for an update any way as I needed more ram.

Posted

Sorry, I should have been much clearer. I was wondering why the mod outputs to the Papyrus.N.log rather than a dedicated log (Apropos does the latter).

 

I tried a wired 3rd party PS3 and a 3rd party original xbox controller using the XBCD drivers but unfortunately neither worked (I tried it with the test version of the mod but neither pad is detected).

 

Regardless of neither pad working I'm sooo glad you decided to make this mod, Mr. private. :3

Posted

Sorry, I should have been much clearer. I was wondering why the mod outputs to the Papyrus.N.log rather than a dedicated log (Apropos does the latter).

 

I tried a wired 3rd party PS3 and a 3rd party original xbox controller using the XBCD drivers but unfortunately neither worked (I tried it with the test version of the mod but neither pad is detected).

 

Regardless of neither pad working I'm sooo glad you decided to make this mod, Mr. private. :3

 

I could not find a way to do it when i was creating the program. But now i think this(how its now) is a better way to do it, its easier to debug a problem.

 

 

To every one!

I need some help to make this program work on more then the Xbox controller. I made a small program to test if it can find your controller and its rumble motors. It will give you back a number and a name, copy paste this on the forum. https://www.dropbox.com/s/dyf615j5nuh0gne/test.jar?dl=0

 

No need to do this with a org. xbox controller. I already did it.

 

Thanks!

Posted

 

 

-snip-

Awesome. 

 

Tell me this: 5 vibrators found on Logitech Rumblepad 2 USB

 

 

I found 0 on my xbox controller and you 5. Oke i upload a new program to test if i can connect to the motors.

https://www.dropbox.com/s/dyf615j5nuh0gne/test.jar?dl=0

 

If the controller starts to vibrate and wont stop. Stop the program and unplug your controller.

 

Sorry, it only says the same "5 vibrators found on logitech rumblepad 2" message. No vibration.

Posted

The new rumble test file works, but says "ERROR: rumble motor 0speed5 on controllerLogitech RumblePad 2 USB" when vibrating the small motor. It didn't vibrate the strong motor, not sure why. Is there any info that you need that I can provide?

Posted

The new rumble test file works, but says "ERROR: rumble motor 0speed5 on controllerLogitech RumblePad 2 USB" when vibrating the small motor. It didn't vibrate the strong motor, not sure why. Is there any info that you need that I can provide?

 

Yes, you just gave it to me. Its not really a error but more a test how hard the vibrator can run before you get a error. But you only get a error with first test? There was no motor 1,2,3,4?

 

Edit: computers start to count on 0 so 0 means motor 1.

 

Edit 2: never mind i am stupid: https://www.dropbox.com/s/87vwpju52svnuvx/rumble%20test%20without%20typos.jar?dl=0

 

Didnt code in a long time and made a mistake.

Posted

I got another controller from a friend (I didn't use it for naughty stuff though!):

 

5 Vibrators found on XBCD Mad Catz Xbox 360 GamePad

 

 

Also, I was experimenting with your skyrim scripts, I modified them to output to a seperate log. The results were a little confusing. The messages are sent in bursts rather than when they happen. I see lots of messages written to the log long after the event occurred.

 

Edit: I realised that the method I was using to look at the file might not be working very well. Do you constantly poll the file for changes or do you use something like the windows api to tell your program when changes happen?

 

Thank you. :)

Posted

I got another controller from a friend (I didn't use it for naughty stuff though!):

 

5 Vibrators found on XBCD Mad Catz Xbox 360 GamePad

 

 

Also, I was experimenting with your skyrim scripts, I modified them to output to a seperate log. The results were a little confusing. The messages are sent in bursts rather than when they happen. I see lots of messages written to the log long after the event occurred.

 

Edit: I realised that the method I was using to look at the file might not be working very well. Do you constantly poll the file for changes or do you use something like the windows api to tell your program when changes happen?

 

Thank you. :)

 

java has its own file reader. i only let it try to read a new line every 0.2 seconds or so(maybe more or less). when it find something it will read the next line as well, till there is no more lines to read.

 

So, this means you joined the dev team?

what is the reason to place it in a different file?

 

so there are always 5 rumble types. I will try to make some vibrate examples, so you can tell me if they work on every controller. i already tested 1 controller but every rumble type is different and you cant change the strength.

Posted

Oh, you keep checking the file. I think I'll try that.

 

I must admit that I'm not very good at coding so I don't think I'd be very helpful. I really only know some python and I just wanted to experiment.

 

I outputted the lines to a seperate file so that I could read it more easily with python.

 

I'm always glad to test and help out if I can.

 

Thank you. :3

Posted

Apologies! I forgot to attach the script that allowed me to output all of the events to a seperate userlog. I don't know if it's terribly useful to anyone...

 

 

ScriptName SexLabControllerRumble extends Quest



Actor Property PlayerREF Auto

Keyword Property Plugs auto



event OnInit()

    Debug.OpenUserLog("Rumble")

    Debug.Notification("Rumble started.")

    RegisterForSingleUpdate(0.1)

    RegModEvents()

endEvent



Function ToUserLog(String mess) Global

    Debug.TraceUser("Rumble", mess)

EndFunction



Function RegModEvents()

    ToUserLog("jeroen register mod events")

    RegisterForModEvent("PlayerAnimationStart", "AnimationStartRumble")

    RegisterForModEvent("PlayerAnimationEnding", "AnimationEndingRumble")

    

    RegisterForModEvent("PlayerStageStart", "StageStartRumble")

    RegisterForModEvent("PlayerStageEnd", "StageEndRumble")

    

    RegisterForModEvent("PlayerOrgasmStart", "OrgasmStartRumble")

    RegisterForModEvent("PlayerOrgasmEnd", "OrgasmEndRumble")

    

    RegisterForModEvent("DeviceVibrateEffectStart", "StartVibrateEffect")

    RegisterForModEvent("DeviceVibrateEffectStop", "StopVibrateEffect")



    RegisterForModEvent("DeviousEventDrip", "StartDrip")

    RegisterForModEvent("DeviousEventPlug Moan", "StartPlugMoan")

    RegisterForModEvent("DeviousEventBump Pumps", "StartBumpPumps")

    

    RegisterForModEvent("DeviceEquippedPumps", "StartPumps")

    RegisterForModEvent("DeviceEquippedPlugs", "StartPlugs")

    RegisterForModEvent("DeviceEquippedAnal Plug", "StartPlugs")

    RegisterForModEvent("DeviceEquippedVaginal Plug", "StartPlugs")

    

    RegisterForModEvent("DeviceRemovedPumps", "StopPumps")

    RegisterForModEvent("DeviceRemovedPlugs", "StopPlugs")

    RegisterForModEvent("DeviceRemovedAnal Plug", "StopPlugs")

    RegisterForModEvent("DeviceRemovedVaginal Plug", "StopPlugs")

    

    RegisterForSingleUpdate(0.1)

EndFunction



event StartPumps(string eventName, string argString, float argNum, form sender)

    ToUserLog("JN01 StartDevice NAME=DDPlug1, TYPE=Up, TIME=3, STRENGTH=100, INTERVAL=0, STARTDELAY=0, AMOUNT=1;")

    ToUserLog("JN01 UpdateDevice NAME=DDPlug1, TYPE=Constant, TIME=1, STRENGTH=100, INTERVAL=0, STARTDELAY=0, AMOUNT=1, UPDATEDELAY=3;")

    ToUserLog("JN01 UpdateDevice NAME=DDPlug1, TYPE=Down, TIME=15, STRENGTH=20, INTERVAL=0, STARTDELAY=0, AMOUNT=1, UPDATEDELAY=4;")

    ToUserLog("JN01 StartDevice NAME=DDPlug2, TYPE=Down, TIME=3, STRENGTH=100, INTERVAL=1, STARTDELAY=6, AMOUNT=2;")

endEvent



event StartPlugs(string eventName, string argString, float argNum, form sender)

    ToUserLog("JN01 StartDevice NAME=DDPlug, TYPE=Up, TIME=3, STRENGTH=100, INTERVAL=0, STARTDELAY=0, AMOUNT=1;")

    ToUserLog("JN01 UpdateDevice NAME=DDPlug, TYPE=Constant, TIME=1, STRENGTH=100, INTERVAL=0, STARTDELAY=0, AMOUNT=1, UPDATEDELAY=3;")

    ToUserLog("JN01 UpdateDevice NAME=DDPlug, TYPE=Down, TIME=15, STRENGTH=20, INTERVAL=0, STARTDELAY=0, AMOUNT=1, UPDATEDELAY=4;")

endEvent



event StopPumps(string eventName, string argString, float argNum, form sender)

    ToUserLog("JN01 StartDevice NAME=DDPumpsRemove, TYPE=Down, TIME=3, STRENGTH=100, INTERVAL=0, STARTDELAY=0, AMOUNT=1;")

endEvent



event StopPlugs(string eventName, string argString, float argNum, form sender)

    ToUserLog("JN01 StartDevice NAME=DDPlugsRemove, TYPE=Down, TIME=3, STRENGTH=100, INTERVAL=0, STARTDELAY=0, AMOUNT=1;")

endEvent





int stage

event AnimationStartRumble(string eventName, string argString, float argNum, form sender)

    ToUserLog("JN01 StartDevice NAME=SexLabAnimation1, TYPE=Constant, TIME=1.6, STRENGTH=20, INTERVAL=0.2, STARTDELAY=0, AMOUNT=-1;")

    ToUserLog("JN01 StartDevice NAME=SexLabAnimation2, TYPE=Constant, TIME=1.6, STRENGTH=20, INTERVAL=0.4, STARTDELAY=0.4, AMOUNT=-1;")

endEvent





event AnimationEndingRumble(string eventName, string argString, float argNum, form sender)

    ToUserLog("JN01 StopDevice NAME=SexLabAnimation1, STOPDELAY=0;")

    ToUserLog("JN01 StopDevice NAME=SexLabAnimation2, STOPDELAY=0;")

    stage = 0

endEvent





event StageStartRumble(string eventName, string argString, float argNum, form sender)

    

endEvent





event StageEndRumble(string eventName, string argString, float argNum, form sender)

    stage = stage + 1

    

    if(stage == 1)

        ToUserLog("JN01 UpdateDevice NAME=SexLabAnimation1, TYPE=Constant, TIME=1.2, STRENGTH=50, INTERVAL=0.3, STARTDELAY=0, AMOUNT=-1, UPDATEDELAY=0;")

        ToUserLog("JN01 UpdateDevice NAME=SexLabAnimation2, TYPE=Constant, TIME=1.2, STRENGTH=50, INTERVAL=0.3, STARTDELAY=0.4, AMOUNT=-1, UPDATEDELAY=0;")

    endIf

    

    if(stage == 2)

        ToUserLog("JN01 UpdateDevice NAME=SexLabAnimation1, TYPE=Constant, TIME=1.2, STRENGTH=70, INTERVAL=0.3, STARTDELAY=0, AMOUNT=-1, UPDATEDELAY=0;")

        ToUserLog("JN01 UpdateDevice NAME=SexLabAnimation2, TYPE=Constant, TIME=1.2, STRENGTH=70, INTERVAL=0.5, STARTDELAY=0.4, AMOUNT=-1, UPDATEDELAY=0;")

    endIf

    

    if(stage == 3)

        ToUserLog("JN01 UpdateDevice NAME=SexLabAnimation1, TYPE=Constant, TIME=0.6, STRENGTH=80, INTERVAL=0.4, STARTDELAY=0, AMOUNT=-1, UPDATEDELAY=0;")

        ToUserLog("JN01 StopDevice NAME=SexLabAnimation2, STOPDELAY=0;")

    endIf

endEvent





event OrgasmStartRumble(string eventName, string argString, float argNum, form sender)

    ToUserLog("JN01 StopDevice NAME=SexLabAnimation1, STOPDELAY=1;")

    ToUserLog("JN01 StartDevice NAME=SexLabOrgasm1, TYPE=Up, TIME=2, STRENGTH=100, INTERVAL=0, STARTDELAY=0, AMOUNT=-1;")

    ToUserLog("JN01 UpdateDevice NAME=SexLabOrgasm1, TYPE=Sinus, TIME=0.5, STRENGTH=100, INTERVAL=0, STARTDELAY=0, AMOUNT=-1, UPDATEDELAY=2;")

    ToUserLog("JN01 StartDevice NAME=SexLabOrgasm2, TYPE=Constant, TIME=1, STRENGTH=60, INTERVAL=0, STARTDELAY=2, AMOUNT=-1;")

endEvent





event OrgasmEndRumble(string eventName, string argString, float argNum, form sender)

    ToUserLog("JN01 StopDevice NAME=SexLabOrgasm2, STOPDELAY=0;")

    ToUserLog("JN01 UpdateDevice NAME=SexLabOrgasm1, TYPE=Down, TIME=1, STRENGTH=100, INTERVAL=0, STARTDELAY=0, AMOUNT=-1, UPDATEDELAY=0;")

    ToUserLog("JN01 UpdateDevice NAME=SexLabOrgasm1, TYPE=Sinus, TIME=1, STRENGTH=5, INTERVAL=0, STARTDELAY=0, AMOUNT=6, UPDATEDELAY=1;")

endEvent





Event StartVibrateEffect(string eventName, string argString, float argNum, form sender)

    if(argString == PlayerREF.GetLeveledActorBase().GetName())

        int i = (argNum * 20) as int

        if(i>100)

            i=100

        elseIf(i<1)

            i=1

        endIf

        ToUserLog("JN01 StartDevice NAME=DDVibrateEffect, TYPE=Constant, TIME=1, STRENGTH="+i+", INTERVAL=0, STARTDELAY=0, AMOUNT=-1;")

    endIf

endEvent





Event StopVibrateEffect(string eventName, string argString, float argNum, form sender)

    if(argString == PlayerREF.GetLeveledActorBase().GetName())

        ToUserLog("JN01 StopDevice NAME=DDVibrateEffect, STOPDELAY=0;")

    endIf

endEvent



Event StartDrip(string eventName, string argString, float argNum, form sender)

    if(argString == PlayerREF.GetLeveledActorBase().GetName())

        ToUserLog("JN01 StartDevice NAME=DDDrip, TYPE=Sinus, TIME=3, STRENGTH=10, INTERVAL=0, STARTDELAY=0, AMOUNT=1;")

    endIf

endEvent



Event StartBumpPumps(string eventName, string argString, float argNum, form sender)

    if(argString == PlayerREF.GetLeveledActorBase().GetName())

        ToUserLog("JN01 StartDevice NAME=DDDBumpPumps, TYPE=Up, TIME=1, STRENGTH=100, INTERVAL=0, STARTDELAY=0, AMOUNT=1;")

        ToUserLog("JN01 UpdateDevice NAME=DDDBumpPumps, TYPE=Constant, TIME=1, STRENGTH=100, INTERVAL=0, STARTDELAY=0, AMOUNT=-1, UPDATEDELAY=1;")

        ToUserLog("JN01 UpdateDevice NAME=DDDBumpPumps, TYPE=Down, TIME=4, STRENGTH=100, INTERVAL=0, STARTDELAY=0, AMOUNT=1, UPDATEDELAY=3;")

    endIf

endEvent



Event StartPlugMoan(string eventName, string argString, float argNum, form sender)

    if(argString == PlayerREF.GetLeveledActorBase().GetName())

        ToUserLog("JN01 StartDevice NAME=DDPlugMoan, TYPE=Sinus, TIME=1, STRENGTH=5, INTERVAL=0, STARTDELAY=0, AMOUNT=2;")

        ToUserLog("JN01 UpdateDevice NAME=DDPlugMoan, TYPE=Sinus, TIME=1, STRENGTH=15, INTERVAL=0, STARTDELAY=0, AMOUNT=2, UPDATEDELAY=2;")

        ToUserLog("JN01 UpdateDevice NAME=DDPlugMoan, TYPE=Sinus, TIME=1, STRENGTH=5, INTERVAL=0, STARTDELAY=0, AMOUNT=1, UPDATEDELAY=4;")

    endIf

endEvent





bool mountSprint = false

bool mountCreated = false

Event OnUpdate()

    

    If PlayerREF.IsOnMount()

        RegisterForSingleUpdate(0.1)

    else

        RegisterForSingleUpdate(0.5)

    endIf

    

    If (PlayerREF.IsOnMount() && playerref.wornhaskeyword(Plugs) && ((Input.IsKeyPressed(Input.GetMappedKey("Forward"))||Input.IsKeyPressed(Input.GetMappedKey("Strafe Left"))||Input.IsKeyPressed(Input.GetMappedKey("Strafe Right"))||Input.IsKeyPressed(Input.GetMappedKey("Back"))) ))

        if mountCreated == false

            mountCreated = true

            ToUserLog("JN01 StartDevice NAME=DDOnMount, TYPE=Constant, TIME=0.8, STRENGTH=20, INTERVAL=0.4, STARTDELAY=0, AMOUNT=-1;")

        endIf

        

        if Input.IsKeyPressed(Input.GetMappedKey("Sprint"))

            if mountSprint==false

                mountSprint = true

                ToUserLog("JN01 UpdateDevice NAME=DDOnMount, TYPE=Sinus, TIME=0.6, STRENGTH=80, INTERVAL=0, STARTDELAY=0, AMOUNT=-1, UPDATEDELAY=0;")

            endIf

        else

            if mountSprint

                mountSprint = false

                ToUserLog("JN01 UpdateDevice NAME=DDOnMount, TYPE=Constant, TIME=0.8, STRENGTH=20, INTERVAL=0.4, STARTDELAY=0, AMOUNT=-1, UPDATEDELAY=0;")

            endIf

        endIf

    else

        If mountCreated

            ;remove if it was created

            mountCreated = false

            mountSprint = false

            ToUserLog("JN01 StopDevice NAME=DDOnMount, STOPDELAY=0;")

        endIf

        

    endIf

    

EndEvent

 

 

 

I was then able to use python to check for timestamp changes in the file (in other words, when it was modified). From there I guess I can do other fun stuff.

So much to learn!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...