Jump to content

Recommended Posts

Ok! AWSOME! I managed to get windows 8 running and my th05 to, well I guess it works since I can use an external display with the gfx card that sits in the th05. I haven't bought a better gfx card yet so no benchmarks can be run. The problem with the "IRQL_Less_or_equal" was in fact the built in webcam, I unplugged it and it booted like a charm, dunno why but I am going to test it again now that the drivers are installed. So I guess maybe that should be added to the guide as well. Will get back to you when I have managed to get a better gfx to try with.

Link to comment
Share on other sites

Yeah I know this driver for quite a while. That's basically why I haven't lost hope yet.

Linux apple_gmux is part of vgaswitcheroo so it's not that simple.

I allready tried to trigger the IOports via EFI shell and form within Windows (using a tool called RW Everything) without results.

In my case all ports triggered by the Linux driver are set to 0xFF and nothing happens if set.

BootCamp Drivers by default installs a NullDevice driver which has to be replaced by something like vgaswitcheroo I guess.

I tried to get in touch with some Linux developers involved in vgaswitcheroo/apple_gmux but didn't receive any response yet.

Let me know if you have some more hints as I'm not _that_ much into Linux.

Link to comment
Share on other sites

Yeah I know this driver for quite a while. That's basically why I haven't lost hope yet.

Linux apple_gmux is part of vgaswitcheroo so it's not that simple.

I allready tried to trigger the IOports via EFI shell and form within Windows (using a tool called RW Everything) without results.

In my case all ports triggered by the Linux driver are set to 0xFF and nothing happens if set.

BootCamp Drivers by default installs a NullDevice driver which has to be replaced by something like vgaswitcheroo I guess.

I tried to get in touch with some Linux developers involved in vgaswitcheroo/apple_gmux but didn't receive any response yet.

Let me know if you have some more hints as I'm not _that_ much into Linux.

I wrote a good part of the apple_gmux driver :). The driver you linked previously is my old version that doesn't support the newest apple hardware. I don't remember if it's just the retina mbps, but apple changed how you have to communicate with the gmux chip. That's why poking at the old IOports doesn't do anything.

See LXR linux/drivers/platform/x86/apple-gmux.c and [PATCH] apple-gmux: Add support for message box interface (as found in MBP10,1/Retina MacBook Pro) -- Linux x86 Platform Driver Development for more. Unfortunately I don't have access to a retina mbp so I can't help with testing/developing directly. When using any code from this, use the first link (or a recent mainline kernel), not the patch.

Edit: So what you need to do to hopefully get a minimal version to work is to take the part so that

gmux_write8(apple_gmux_data, GMUX_PORT_SWITCH_DDC, 2); gmux_write8(apple_gmux_data, GMUX_PORT_SWITCH_DISPLAY, 3);

gmux_write8(apple_gmux_data, GMUX_PORT_SWITCH_EXTERNAL, 3);

runs. For that you need gmux_index_write8 (that's the same as the outbs, but with the message box interface), which requires gmux_index_wait_ready and gmux_index_wait_complete. I'm not sure about this, but maybe you can even skip the wait functions and for a rough first version just replace them with a long enough sleep.

  • Thumbs Up 2
Link to comment
Share on other sites

Oh great! I'll take a look at it tonight.

As far as I know it's not that easy to trigger IO Ports in Windows cause it's blocked by default for some security reasons. It can be done using some libs though. For now RW Everything was the most useful (out of the box) IO Tool I could find.

I'm not really sure how to make use of the message box interface in Windows.

Bootcamps NullDevice allocates 0x700 - 0x7FE IO space so I tried to trigger 0x728, 0x710, 0x740 and 0x750 after uninstalling the NullDevice drivers.

Maybe my conclusions where totally wrong?!:(

Link to comment
Share on other sites

Oh great! I'll take a look at it tonight.

As far as I know it's not that easy to trigger IO Ports in Windows cause it's blocked by default for some security reasons. It can be done using some libs though. For now RW Everything was the most useful (out of the box) IO Tool I could find.

I'm not really sure how to make use of the message box interface in Windows.

Bootcamps NullDevice allocates 0x700 - 0x7FE IO space so I tried to trigger 0x728, 0x710, 0x740 and 0x750 after uninstalling the NullDevice drivers.

Maybe my conclusions where totally wrong?!:(

You could also try switching the gmux before booting windows, for example in startup.nsh or using GRUB. But yeah maybe for the beginning it's easiest to just do it in windows because it's more interactive than rebooting all the time to see if anything happens.

In the long run it might be necessary to do the switching before booting, so Windows sees the internal display connected to the intel card during boot.

The following should switch the gmux to integrated (based on what the linux driver does):


// new version of outb(2, 0x728) - switch ddc
outb(2, 0x7c2) // write the value to the value register
sleep 100ms // instead of gmux_index_wait_ready, just to be on the safe side
outb(0x28, 0x7d4) // write the port to GMUX_PORT_WRITE
sleep 100ms // instead of gmux_index_wait_complete

// new version of outb(3, 0x710) - switch internal display
outb(3, 0x7c2) // write the value to the value register
sleep 100ms // instead of gmux_index_wait_ready, just to be on the safe side
outb(0x10, 0x7d4) // write the port to GMUX_PORT_WRITE
sleep 100ms // instead of gmux_index_wait_complete

// new version of outb(3, 0x740) - switch external display
outb(3, 0x7c2) // write the value to the value register
sleep 100ms // instead of gmux_index_wait_ready, just to be on the safe side
outb(0x40, 0x7d4) // write the port to GMUX_PORT_WRITE
sleep 100ms // instead of gmux_index_wait_complete

  • Thumbs Up 2
Link to comment
Share on other sites

Okay did some quick tests.

I tried to set IO in EFI shell using mm command but everything's set to 0xFF as mentioned before and can't be written. (maybe there's no efi driver for the device?)

Booted eGPU Setup's freedos and used "pt IO peek/poke" commands which show everything's set to 0xFF and nothing can be written aswell.

After that I used RW Everything. Here's a screen of my IO Space:

36242036.png

Guess this looks pretty nice and matches your updated commands.

>wait{1,100,o 0x7c2 2}; o 0x7d4 0x28; 
>wait{1,100,o 0x7c2 3}; o 0x7d4 0x10;
>wait{1,100,o 0x7c2 3}; o 0x7d4 0x40;

This actually does nothing as far as I can tell.

>wait{1,100,o 0x7c2 1}; o 0x7d4 0x28; 
>wait{1,100,o 0x7c2 2}; o 0x7d4 0x10;
>wait{1,100,o 0x7c2 2}; o 0x7d4 0x40;

This will turn off my LCD. It's still connected to GT650m though.

Added 0x7c2 0; 0x7d4 0x50; which should shutdown the dGPU if I got it right. My LCD turns black, windows freezes shortly after that and reboots. if my egpu is connected my external screen shows "VIDEO_DXGKRNL_FATAL_ERROR"

Thanks a lot for your help!

Link to comment
Share on other sites

Okay did some quick tests.

I tried to set IO in EFI shell using mm command but everything's set to 0xFF as mentioned before and can't be written. (maybe there's no efi driver for the device?)

Booted eGPU Setup's freedos and used "pt IO peek/poke" commands which show everything's set to 0xFF and nothing can be written aswell.

That's strange, things like "mm 07c2 -IO 2" should work in the EFI shell.

After that I used RW Everything. Here's a screen of my IO Space:

Guess this looks pretty nice and matches your updated commands.

>wait{1,100,o 0x7c2 2}; o 0x7d4 0x28; 
>wait{1,100,o 0x7c2 3}; o 0x7d4 0x10;
>wait{1,100,o 0x7c2 3}; o 0x7d4 0x40;

This actually does nothing as far as I can tell.

>wait{1,100,o 0x7c2 1}; o 0x7d4 0x28; 
>wait{1,100,o 0x7c2 2}; o 0x7d4 0x10;
>wait{1,100,o 0x7c2 2}; o 0x7d4 0x40;

This will turn off my LCD. It's still connected to GT650m though.

Added 0x7c2 0; 0x7d4 0x50; which should shutdown the dGPU if I got it right. My LCD turns black, windows freezes shortly after that and reboots. if my egpu is connected my external screen shows "VIDEO_DXGKRNL_FATAL_ERROR"

Thanks a lot for your help!

That's pretty cool, it's no big surprise that Windows crashes if you cut the power to the dGPU while it's in use :). The gmux just switches the data lines for the internal display without giving the OS any notification, so it's also no surprise the LCD turns black because the Intel driver doesn't know that suddenly there is a display connected to it.

But you could try to just switch the external display (with just wait{1,100,o 0x7c2 2}; o 0x7d4 0x40;) and then connect an external display. This way there's a hotplug notification and maybe you get a picture from the Intel card on the external display.

And it's probably a good idea to leave out powering off the dGPU for now, if you want that you should do it before booting Windows. So the next major step would be to get the gmux switched before booting, if it works in Windows it has to work outside of it as well.

Link to comment
Share on other sites

But you could try to just switch the external display (with just wait{1,100,o 0x7c2 2}; o 0x7d4 0x40wink.png and then connect an external display. This way there's a hotplug notification and maybe you get a picture from the Intel card on the external display.

I'll do some more tests regarding this later today.

That's strange, things like "mm 07c2 -IO 2" should work in the EFI shell.

Well as far as I can tell it doesn't :( I'll also do some more tests. Maybe I missed something.

Which model do you have? Does it work for you?

Guess we're getting closer.

Danke nochmal!

Link to comment
Share on other sites

Ok. I have to use mm -IO commands before "mm 0001013E 1 ;PCI :8" to make them work.

My startup.nsh looks like this:

mm 7c2 ;IO :1
mm 7d4 ;IO :28
mm 7c2 ;IO :2
mm 7d4 ;IO :10
mm 7c2 ;IO :2
mm 7d4 ;IO :40
mm 0001013E 1 ;PCI :8

This switches my LCD off again. Device manager shows no screen connected to my GT650m + Intel HD!

If I hot plug a screen it still gets connected to GT650m though. (As far I know HDMI is connected to GT650m so I used my second Thunderbolt port.)

mm 7c2 ;IO :1
mm 7d4 ;IO :50
mm 7c2 ;IO :0
mm 7d4 ;IO :50

Adding this to startup.nsh makes my fans spin up and windows wont boot.

Link to comment
Share on other sites

Just found posts about bernard froemels last patch gmux patch (25 Aug 2012). [i know its already included in the version you posted.]

Waiting for the device seems to pretty important for current models. I'll do some more tests regarding this.

I'll also try to install an old version of gfxCardStatus (2.2.1), activate Intel HD in Mac OS and reboot, as suggested by some forum posts.

Link to comment
Share on other sites

You could try that, but the screen going black means that at least the display switching worked. External doesn't really matter, so it just might be that the ddc switch didn't happen. You don't have any sleeps in your startup.nsh so adding some after each mm might help. I think it might be "stall".

Another thing might be that it could work better with the eGPU disconnected, just to rule out one possible source of errors.

Link to comment
Share on other sites

Ok. I guess now my LCD gets recognized in Device Manager. It's still not connected to Intel HD though.

post-6707-14494994029371_thumb.jpg

If I try to activate it nothing happens.

post-6707-14494994029582_thumb.jpg

I read about some patches for Intel i915 on Linux systems.

This kinda matches what happens to current MacBooks booting Windows EFI Mode; based on my experience with previous versions of Intel Drivers and I've even seen single GPU machines (booty posted an image in the "eGPU expierence" thread) with the same problem.

Especially the "screen looks for a second scaled to 2/3 (black border)" part.

I'll try to uninstall Intel Drivers as Basic Display Port drivers seem to work without problems.

Link to comment
Share on other sites

Same results without Intel HD drivers. Screen can't be activated

EDIT: Screen can now be activated without screenoutput. Not connected to Intel HD in Device Manager.

post-6707-14494994032174_thumb.png

EDIT2: Using gfxCardStatus 2.2.1 my MacBook definitely boots with Intel HD. LCD-Output is cut at Loginscreen and systems reboots after some time.

So i guess its igdkmd64.sys again.

EDIT3: Got LCD-Output by deactivating Intel HD in Device Manager and using Basic Display Driver (Just like the 13" single GPU guys). Does anyone know where to find a tool which is able to measure energy consumption in windows (aida or sandra maybe)? This allready should save some energy.

We still have to fix Intel drivers for functional Optimus. For some reason it's unable the build in LCD. Don't know if its possible to fix this without Intels help.

post-6707-14494994032406_thumb.png

post-6707-14494994031884_thumb.png

Link to comment
Share on other sites

  • 3 weeks later...

Did you guys have to do anything special to get the TH05+560TI to detect on the mbpr 15 for Win8 EFI? I thought it would be plug-and-play :fatigue:. I've tried the following to get windows to see it

- Startup with thunderbolt plugged in (get stuck on windows login screen circle thingy spinning)

- Boot Windows, plug-in thunderbolt, refresh in device manager (no detection)

- Upgraded to latest Nvidia + Intel drivers (note, i do see both the 650m + the intel 4000 in device manager and both are working)

- Use modified startup.nsh

# This will show a crazy RGB snowy screen on the MBPr's screen. 560 TI output never kicks in

mm 00020004 1 ;PCI :0

mm 0001013E 1 ;PCI :8

# The longer one in the "Update (experimental)" code will cause my fan to spin, but screen is always black

- Boot into OSX and plug/unplug thunderbolt cable (i see in the system see's the thunderbolt device so cable and TH05 are good)

- Tried modifying the switches on the TH05. Set SW1=3, SW2=2-3, also tried SW1=2, SW2=2-3. No luck

- Disabled the intel video card in device manager

I'm tempted to completely scrap and try Bootcamp/BIOS mode. Gaming in Win8 EFI in this mode feels incredibly slow like it's only utilizing the intel video card (LCD or external display) even though GPU-z shows my Nvidia GPU kicking in for the 650m.

Link to comment
Share on other sites

- Startup with thunderbolt plugged in (get stuck on windows login screen circle thingy spinning)

same for me. enabling thunderbolts vga out via efi shell fixes this problem.

- Boot Windows, plug-in thunderbolt, refresh in device manager (no detection)

can't work as thunderbolt doesn't support hotplug

- Upgraded to latest Nvidia + Intel drivers (note, i do see both the 650m + the intel 4000 in device manager and both are working)

I doubt your intel hd is actually working properly (see previous posts)

- Use modified startup.nsh

this should enable your egpu (without any glitches). try to use only mm 0001013E 1 ;PCI :8 (you might want to check if your mbp uses the same pci bus by using "PCI -i -b")

the experimental part can be skipped until working intel drivers are released as it's only purpose is to enable intel hd as primary vga device which would allow us to use optimus

- Boot into OSX and plug/unplug thunderbolt cable (i see in the system see's the thunderbolt device so cable and TH05 are good)

how about your 560 ti? do you have a desktop pc to test its functionality?

- Tried modifying the switches on the TH05. Set SW1=3, SW2=2-3, also tried SW1=2, SW2=2-3. No luck

I'm using sw1=1 sw2=2-3 but this shouldn't matter anyways

- Disabled the intel video card in device manager

yeah did so to as its broken anyways for now

I'm tempted to completely scrap and try Bootcamp/BIOS mode. Gaming in Win8 EFI in this mode feels incredibly slow like it's only utilizing the intel video card (LCD or external display) even though GPU-z shows my Nvidia GPU kicking in for the 650m.

I didn't notice any performance differences in game and again i doubt your intel video card works properly in windows. what cpu and ram do you have? what games did you test? whats your 3dMark score?

Link to comment
Share on other sites

@Tech Inferno Fan or @Shelltoe - After purchasing eGPU Setup 1.1x and installing it to a USB stick, I'm kind of stuck on step 2 (Configuring the \config\pci.bat file on the USB bootdrive). My pci.bat file looks a lot different from the code you provided in your earlier posts. Please see below:

REM r:/core/compact.exe pciend F8000000 useonly 10de:1189 10de:0e0a makebatch R:\config\pci.batREM created Tue Jan  1 16:24:21 2013
echo Performing PCI write (compact@Tue Jan 1 16:24:21 2013)


@echo -s 8:0.0 COMMAND=0 BASE_ADDRESS_1=d800000c BASE_ADDRESS_2=0 COMMAND=0 BASE_ADDRESS_3=d600000c BASE_ADDRESS_4=0 COMMAND=0 BASE_ADDRESS_0=f7000000 > setpci.arg
@echo -s 8:0.1 COMMAND=0 BASE_ADDRESS_0=f6ffc000 >> setpci.arg
@echo -s 7:0.0 MEMORY_BASE=f6f0 MEMORY_LIMIT=f7f0 PREF_MEMORY_BASE=d601 PREF_BASE_UPPER32=0 PREF_MEMORY_LIMIT=dff1 PREF_LIMIT_UPPER32=0 >> setpci.arg
@echo -s 6:0.0 MEMORY_BASE=f6f0 MEMORY_LIMIT=f7f0 PREF_MEMORY_BASE=d601 PREF_BASE_UPPER32=0 PREF_MEMORY_LIMIT=dff1 PREF_LIMIT_UPPER32=0 >> setpci.arg
@echo -s 4:0.0 MEMORY_BASE=a090 MEMORY_LIMIT=a090 PREF_MEMORY_BASE=fff1 PREF_BASE_UPPER32=0 PREF_MEMORY_LIMIT=1 PREF_LIMIT_UPPER32=0 >> setpci.arg
@echo -s 4:3.0 MEMORY_BASE=f6f0 MEMORY_LIMIT=f7f0 PREF_MEMORY_BASE=d601 PREF_BASE_UPPER32=0 PREF_MEMORY_LIMIT=dff1 PREF_LIMIT_UPPER32=0 >> setpci.arg
@echo -s 4:4.0 MEMORY_BASE=fff0 MEMORY_LIMIT=0 PREF_MEMORY_BASE=fff1 PREF_BASE_UPPER32=0 PREF_MEMORY_LIMIT=1 PREF_LIMIT_UPPER32=0 >> setpci.arg
@echo -s 4:5.0 MEMORY_BASE=fff0 MEMORY_LIMIT=0 PREF_MEMORY_BASE=fff1 PREF_BASE_UPPER32=0 PREF_MEMORY_LIMIT=1 PREF_LIMIT_UPPER32=0 >> setpci.arg
@echo -s 4:6.0 MEMORY_BASE=fff0 MEMORY_LIMIT=0 PREF_MEMORY_BASE=fff1 PREF_BASE_UPPER32=0 PREF_MEMORY_LIMIT=1 PREF_LIMIT_UPPER32=0 >> setpci.arg
@echo -s 3:0.0 MEMORY_BASE=a090 MEMORY_LIMIT=f7f0 PREF_MEMORY_BASE=d601 PREF_BASE_UPPER32=0 PREF_MEMORY_LIMIT=dff1 PREF_LIMIT_UPPER32=0 >> setpci.arg
@echo -s 0:1c.0 MEMORY_BASE=fff0 MEMORY_LIMIT=0 PREF_MEMORY_BASE=fff1 PREF_BASE_UPPER32=0 PREF_MEMORY_LIMIT=1 PREF_LIMIT_UPPER32=0 >> setpci.arg
@echo -s 0:1c.1 MEMORY_BASE=a040 MEMORY_LIMIT=a040 PREF_MEMORY_BASE=fff1 PREF_BASE_UPPER32=0 PREF_MEMORY_LIMIT=1 PREF_LIMIT_UPPER32=0 >> setpci.arg
@echo -s 0:1c.4 MEMORY_BASE=a090 MEMORY_LIMIT=f7f0 PREF_MEMORY_BASE=d601 PREF_BASE_UPPER32=0 PREF_MEMORY_LIMIT=dff1 PREF_LIMIT_UPPER32=0 >> setpci.arg
@echo -s 8:0.0 COMMAND=0 COMMAND=0 COMMAND=0 >> setpci.arg
@echo -s 8:0.1 COMMAND=0 >> setpci.arg


setpci @setpci.arg
set pci_written=yes

Should I completely erase my pci.bat code and simply copy/paste what you have in here?

Thank you, I really appreciate your help.

Link to comment
Share on other sites

@Tech Inferno Fan or @Shelltoe - After purchasing eGPU Setup 1.1x and installing it to a USB stick, I'm kind of stuck on step 2 (Configuring the \config\pci.bat file on the USB bootdrive). My pci.bat file looks a lot different from the code you provided in your earlier posts. Please see below:

...

Should I completely erase my pci.bat code and simply copy/paste what you have in here?

Thank you, I really appreciate your help.

Yes, you should completely erase your pci.bat and paste the example I've given here. That's because the compact tool doesn't correctly perform the allocation for Win7/8 to work across the multitude of bridges in a Apple Thunderbolt implementation.

Link to comment
Share on other sites

Well - I got somewhere that time @Tech Inferno Fan.

I was able to boot into Windows and I could even see that my 670GTX was working properly in device manager (no error 12) >> however, this was only on my internal screen... I was wondering why it wasn't showing up on my external monitor so I clicked the Nvidia Control panel on my start menu and my computer went black. Which causes me to think that this situation may have been a fluke.

I also noticed that my eGPU is not detected in the DiY eGPU 1.1x software boot interface. Why might that be? Might this be the root of the problem...?

What am I doing wrong here???

- I have two USB boot drives: a) is the original Windows boot created when I first downloaded that 2.8Gb Windows install B) the second one is the one created with the DIYEGPUIMG image... Which one do i need to boot up???

- I usually boot by holding alt/option and clicking the Windows EFI (HDD) logo (not a USB drive).

- I don't have any V-drive installed as it was mentioned quite a few times that they don't mount properly on Macs >> hence the need for a thumbdrive

Problem is, I can't boot into windows with the DIYEGPUIMG bootdrive because my screen goes black (as mentioned above)...

what to do...? So close, yet so far.

Link to comment
Share on other sites

Well - I got somewhere that time @Tech Inferno Fan.

I was able to boot into Windows and I could even see that my 670GTX was working properly in device manager (no error 12) >> however, this was only on my internal screen... I was wondering why it wasn't showing up on my external monitor so I clicked the Nvidia Control panel on my start menu and my computer went black. Which causes me to think that this situation may have been a fluke.

I also noticed that my eGPU is not detected in the DiY eGPU 1.1x software boot interface. Why might that be? Might this be the root of the problem...?

What am I doing wrong here???

- I have two USB boot drives: a) is the original Windows boot created when I first downloaded that 2.8Gb Windows install B) the second one is the one created with the DIYEGPUIMG image... Which one do i need to boot up???

- I usually boot by holding alt/option and clicking the Windows EFI (HDD) logo (not a USB drive).

- I don't have any V-drive installed as it was mentioned quite a few times that they don't mount properly on Macs >> hence the need for a thumbdrive

Problem is, I can't boot into windows with the DIYEGPUIMG bootdrive because my screen goes black (as mentioned above)...

what to do...? So close, yet so far.

DIY eGPU Setup 1.1x will not be able to chainload to your Windows (EFI) partition, nor should it be necessary. It would work if you bootcamped your MBA where it runs a MBR partitioning scheme. Besides, you've already had the NVidia control panel successfully run which indicates it worked without error 12 so pci-e allocation was fine.

Only slightly dodgy part of your config is your PSU - it has only a 12V/18A (216W) first 12V rail. Usually that would be OK but you have a GX670OC version. Depending on how high of an OC MSI did with what overvoltage used, it may get near or beyond what your PSU can provide leading to black screens as you are seeing.

Link to comment
Share on other sites

Your setup isn't really clear to me.

If you're trying to run your eGPU with Windows in EFI mode I'd recommand installing rEFInd.

Startup EFI shell and find your Thunderbolt controllers address using "pci -i -b" (you can also use Windows Device Manager to do so). In my case it's "00 01 01".

After that follow the first steps of my openingpost (omitting the experimental part as well as "mm 00020004 1 ;PCI :0" ).

(you probably won't have to do this if you're using a midrange card but atleast I have to using a GTX 660 TI. I'd guess is the same for a GTX 670 as they're almost the same.)

Be sure to deactivate Intel HD. Your internal screen will fallback to basic display drivers.

Your Startup script should like this:


mm (YOUR_ADDRESS_HERE)<youraddresshere>3E 1 ;PCI :8
fs0:\EFI\Boot\bootx64.efi

If you're trying to run your eGPU with Windows in BIOS mode (eg. BootCamp) use eGPU Setup with Nandos intructions.

Your can't/shouldn't combine both methods.</youraddresshere> If you're not really sure whether you installed EFI or BIOS mode check back and we'll tell you how to find out.

Link to comment
Share on other sites

  • Tech Inferno Fan changed the title to 2012 15" rMBP GT650M + GTX560Ti@8Gbps-TB1 (TH05) + Win8.1 [Shelltoe]

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.