Monday, November 30, 2009

TFT Monitor Repair

A defective 19" Benq TFT monior came to be my posession for a very generous price. It produced the alarming symptom of fading out to white, and being extremely sluggish with screen updates. The best way to describe it would be: A screen update propagated across the display as if someone poured liquid on it then it'd quickly fade out to white. Some of the picture would still be visible but with essentially no colors. This is similar to the "white screen of death" that is a common failure type of TFT monitors.
When you google for this, you'll find an abundance of theories and information about the cause. This is partly a good thing because it means that it usually varies from case to case so with luck it just might be something you can repair.

This was the second time I had to deal with something like this and indeed the first time It had to do with a defective TFT panel. A quick test to do when it comes to this type of failure is to turn the monitor on, time how long it takes for the problem to show itself, then switch it off, and repeat. Do this about 5 times.
If the time needed appears to shorten with every try: Power it off, wait 30 minutes, and try again. If indeed the problem is taking longer to manifest, and again, that time seems to shorten with every try, then you're possibly dealing with an overheating component that is cooling down when the monitor isn't used for a while, but retaining enough heat between the consequtive tries for problems to manifest sooner.
This was the case with my first monitor. As opposed to the second one I started this entry off with - which never really showed a clear picture - this one would start up like there was no problem, then after a while (about 5 minutes at first) switched to a completely white screen. This monitor also had a bad row in it's TFT panel. With exhaustive detective work (It burned my finger) I managed to track down the heat issue to this:

This was likely also the cause of the dead row in the panel. Obviously not something that can be replaced so this TFT panel was garbage.

But back to the Benq. I did the above mentioned test. Got a consistent error pattern, with no variation in time. The problem would always appear instantly after power on, so I took it apart.
I measured the voltage that the panel was getting. It was 4.5V instead of 5V. Now I didn't really know how sensitive TFT panels are to supply voltage, but this made me glance over to the PSU board and that's when I noticed 6 bulging caps.

(photo shamelessly stolen, as I didn't make any)

All off the dead caps were made by the same manufacturer and there was one more from them that wasn't (yet) bulging. I replaced all of them just to be on the safe side.
The replacements were new Sanyos that were left over from the laptop sla psu project and a couple of pulls from a CRT's PSU board.

And this is why I am now sitting in front of a great 19" TFT monitor (non-widescreen).
I have yet to find any dead pixels, but chances are I wouldn't mind if there were any.
As an added bonus I know that it contains an AU Optronics panel, which is not half bad compared to possible alternatives in the panel lottery :)

That said I wouldn't advise anyone to go out and get a WSOD monitor for repairs. I burned myself with the first one, both literally and figuratively. The only reason I even considered this second one was because I was getting it for peanuts, and from a trusted source. Even if it was beyond repair, I could've still sold it for parts and made more than what I bought it for.

Wednesday, November 4, 2009

Nokia 770 & Qt

From the inital setup of scratchbox, all the way to the complete build of Qt and the antico window manager it took the better part of 2 days, because basically everything that could've gone wrong did. But finally, something relatively cool came of it. Above, antico, xkbd, and the qtWebKit browser demo "fancybrowser".

Monday, October 19, 2009

Battery box for Nokia 770 USB Host mode

I picked up a Nokia 770 out of curiosity. Aside from some obvious and annoying quirks (which probably have been corrected in newer models) it's a pretty neat device. The 770 like the N800, and N810 has USB host mode, with the added limitation that it can't supply power to USB devices connected to it. So I set out to build a battery box that does just that. The box contains a 1000mAH Li-Ion battery, the 5v Boost Converter I built previously, and picoChg v2, which is a redesign of my PCB for the Linear LTC4054-4.2 Single Cell Li-Ion charger IC. The video shows it working with a USB keyboard. The charger is a bit quirky, I might just need a bigger capacitor for it, but it could be the switch I have installed (selectable: ON or OFF/Charge). It charges like it's supposed to but it doesn't always turn the charging status led off when it's finished. Otherwise it works fine. I probably will end up selling the device. Sometimes I get the feeling that I buy stuff because of their inherent limitations, and potential. Once they work like they're supposed to, they're not as interesting anymore.

Just a small factoid for anyone working on USB host mode for this device. Something that I didn't really see mentioned on forums. You need to feed 5V into the 770. Some people on forums actually say the opposite, but it just plain needs it, otherwise it won't notice anything plugged into it :) I wasted some time figuring this out.

Thursday, October 1, 2009

Miniature 5V Boost Converter for USB

This is an almost completely "by-the-datasheet" implementation of a Linear Technology LTC3462 Boost Converter. Using an almost perfect copy of the recommended board layout. It should be able to deliver 5V @ close to 1A from a single cell Lithium Ion battery, making it ideal for powering USB devices. It does look a bit convoluted, but it works fine, unlike the board I carelessly designed for it the first time. Truth be told it could've been a diode issue with that board, but I don't feel like tracking it down, now that this works. Sadly my choice of schottkies at home came down to 0.6A, which was insufficient and the 4A I ended up using. Nothing inbetween, and nothing in a regular axial diode package. I'll need to buy some BAT54s the next time I order parts. Now as for what I'm actually going to use this for, I'll write that in a couple of weeks.

For size comparison:

No eagles this time. The recommended pcb layout is on page 6 of the datasheet.

Thursday, September 10, 2009

Running laptop off a single Lead-Acid battery

Laptop batteries are expensive. On the other hand SLAs (VRLAs) aren't. Now of course SLAs are big, and heavy, while LiIon laptop batteries are small and light, but sometimes that isn't the decisive factor.
I have an old laptop with a near-dead battery. It wasn't worth buying a new one for it, but I would've liked some mobility. Since the laptop itself is big and heavy having a big and heavy battery isn't the drawback it would be for a netbook and since our bush trimmer's SLA sits unused 90% of the year (except for the 5 and half times it's used and the occasional top-up charges) I thought I'd use it for something. It also came in a nice plastic case with a shoulder strap, for easy carrying so it was ideal for this application.

The laptop had a 14.8V LiIon battery pack, unloaded it measured some 16.6ish Volts, loaded it drops to 14.5-14.8 as rated. Now the SLA even if fully charged won't be more than 13.8 Volts unloaded. As expected, it wasn't enough to run the lappy, so I had to come up with a solution to boost the SLA's output voltage to 14.8ish volts. First I measured the current such a solution would have to provide. My lappy's top load was at around 4.2A for a few seconds during boot and has an average idle load of around 1.5A so I concluded that I'd build a boost conveter that can supply close to 5Amps. First I went to look at Maxim's lineup, since I've come to like some of the power regulator chips, and noticed the MAX668/669, which I went ahead and free-sampled. Their power supply cookbook was great help in the design. I based mine off CB115. Pretty much all of the components I used are different because the values they used are not standard in the EU at least, so I couldn't get components that mached, except for a couple of resistors.

I also opted to use components I had lying around as-is common in DIY projects. The inductor is a large 5uH/10A inductor with 3 turns unwound and cut to get something close to 4uH, I used a couple of metallized polyester caps in place of ceramics. The 1uF one turned out to be one of those because no local parts shops stock ceramics >= 1uF.. The FET is an IRF840, and the diode is a HFA15TB60. I went all through-hole for this project, and the previous uMAX->DIP converter was indeed used for the MAX668s. This is possibly not ideal for a PWM boost converter, but the fact of the matter is, it worked beautifully. Had a small project box that I've decided to use for this. I replaced the back plate with a heatsink and screwed the FET and Diode on there. It's definitely overcooled, but what the heck.

This is the project's current state. I still have lots to do with it, like replacing dangling cables with DC plugs and receptacles, and adding a battery overdischarge protection circuit, which I plan to do with a bistable latching relay, and an MC 34161 voltage monitor chip. (I'll have to make all that fit in there somehow...) Truth be told if I had to pay for all the materials used in this project it would've been at least as much as the new battery for the lappy, so it's a good thing that I didn't :)
The perhaps most interesting picture came out the worst (my camera is useless in low light), so you'll have to excuse me for this below. It shows the battery hooked up to the boost converter hooked up to the lappy, which is up and running. Running Linux nonetheless.

I'll probably make a video when I'm done with the battery protection and the case.

Of course I lose voltage monitoring in software with this solution, but not sure if it would really make much difference because the MAX668 tries to compensate for declining input voltage and and keep the output voltage constant. The further away the input voltage is from the output, the less current it can supply however (which might be accompanied by voltage drop but I haven't measured this). Either way when the battery nears 10.6V loaded voltage (complete discharge), the backlight inverter is the first to drop out.

I'm going to go ahead and get the most obvious questions out of the way.

Is this practical for the average laptop user?
No, probably not.

Why do it then?
For fun.

Where is this hooked up?
To the battery pin header in the above Clevo laptop's battery compartment.

Can this somehow be modified to act as a charger instead?
It might. The output voltage can be adjusted with a potentiometer. I'm pretty sure it can go to at least 20V, but possibly more, which is my laptop charger's output voltage. Not sure about the constant current draw on a charger though but I'm fairly sure it couldn't supply 20V/4A from an SLA.

Can it be used in a car?
Not without a separate power filter and regulator (like ->this<-), car power is noisy, with possible large fluctuations in voltage. I suspect the first spike would fry this converter if hooked up directly.

Where are the Eagles?
Here. (ver 5.6)

UPDATE: 18 Sept.

I tested the PSU from the 3AH bush trimmer SLA. The results were pretty underwhelming, at 30 minutes run-time (under heavy use). I decided to add the 2 extra caps for good measure, and tried playing around with the output voltage. The higher the output voltage is the less run-time I can get out of the battery. So I'm going to try and lower it and find the lowest voltage the laptop still runs at, to maximize battery time. I've also read that small SLAs don't like constant heavy load (though I'm not sure what they consider to be heavy). But the SLA itself might not be in the greatest shape either. And there's always the fact that as input voltage declines so does the amount of power the PSU can deliver. Sadly, at 11.4V (which is considered to be the SLA's full discharge voltage by some, while others say it's around 10.6) it reaches a point where the backlight inverter drops out. Now of course the input voltage may have been lower at the point where the inverter dropped out (closer to 10.6) and could have just "jumped" back to 11.4 when the inverter's load disappeared, but sadly I don't have a DMM I could do constant monitoring and logging with. I've also come to the realization that a battery overdischarge protection circuit and relay will never fit in the current case, so I've decided to leave those out. The laptop will turn off before the converter has a chance to overdischarge the battery, and it only uses a really small amount of power if no load is connected to it, so at this point I'd probably have to leave it on for a day or two for it do any damage to the battery.

UPDATE:  Anyone still reading this after the 2010, eBay has a wide selection of (VERY) cheap step-up converters nowadays. I wouldn't bother with a DIY PCB these days, it's just not worth it :|

Saturday, September 5, 2009

uMAX to DIP adapter

Not much to say about this at the moment. It's an uMAX to DIP converter for an upcoming project. uMAX is a miniature surface-mount package used by Maxim, that resembles Mini SO (MSOP) . The below adapter is uMAX10 -> DIP14 (there is no DIP10, so I used 14), for comparison a DIP8 and a SO8 chip are on the picture. The uMAX pin spacing was really pushing the boundaries of PnP Blue.

The chosen chips soldered in.

And DIP pins added.

I wouldn't mind using these chips as-is on surface-mount boards, but I don't like working with hybrid boards, and most of the necessary components for the particular design I intend to use these in were available in through-hole packages for me, so I chose to make these adapters instead of making a hybrid board.

Download Eagle brd here (5.6)

Sunday, August 16, 2009

Couple of 08 boards revisited

Finally had time to finish and test two boards from 08.

The SLA smart charger from here.

And the SPI Bios programmer based on this project.

The SPI bios programmer worked fine, I substituted the original design's CD4049 with a 74HC04, which is the same functionality-wise but with a different pinout. The small adapter board was made because the SMD pads in the main PCB design turned out to be the narrow version (I didn't double-check during design), and I needed the wide one. Soldered the SST25VF080B onto the adapter, inserted it into the DIP8 socket, and modified the original program code for the smaller chip (the only difference between the original project's SST25VF016B is size. The 016B is 2 megabytes, while the 080B is only 1.
Erased the chip, wrote the new bios, read it back, compared. It worked just fine. (Though the mobo had other problems)

Finally found an SMD LM339 to finish the the SLA Charger. I substituted several componens from the original design, with ones I had at home. It seems to work just fine at the moment, but the power transistor requires substantial cooling. I will have to find some sort of case for this sooner or later.

Saturday, July 11, 2009

Zipit2 clock, email / twitter monitor

This was my second (and last) project involving the Zipit2.
It culminated in a PHP script that generates images based on dynamic information, called ImgUI. This can then be displayed on any device that is capable of pulling and displaying images from an HTTP server. The idea should be reusable for any device that fits the criteria.
For the ZipIt2, the quick and dirty way to display images on the screen was to switch the tty over to graphical mode, then just dump raw data to /dev/fb0. This has to be the right orientation and format. I've coded up a tool that takes raw RGB888 pixeldata flips it the right way, then converts it to BGR565. This is used by the script. A minimal shell script on the z2 then just pulls a new image every minute or so and dumps it to the framebuffer. Above you see the Z2 displaying the clock "applet". Thanks to PHP's imap extension I also have one that checks specific folders on imap accounts, and displays unread mail.

Plus I also included a sample twitter applet:

I'm releasing this under the MIT license.

Includes applets seen above, z2 output driver and script, plus a readme file that should tell you everything you need to know.

Download here: ImgUI Z2

Wednesday, July 8, 2009

Relay on LPT port

I made this (on a piece of leftover junk PCB) to remotely switch an external HDD connected to my home server on/off.
I went with the "Safer New Design" from here, but then decided to opto-isolate it anyway. An LPT port data pin switches the led in a 4N25 opto-coupler, which then switches an external power brick's connection to the board. The relay then switches the mains on an extension cord. I pulled the NAIS 5v/220V relay from a broken monitor. Although with this design the switching voltage isn't really that important. As long as it's within the accepted ranges of the opto-coupler and transistor.

Coded up this simple command-line tool in FreeBasic to use it with:

dim as string myCmd
dim as ubyte myState

myCmd = ucase(command$(1))
if myCmd <> "ON" and myCmd <> "OFF" then goto state
if myCmd = "ON" then out &h378,1
if myCmd = "OFF" then out &h378,0

myState = inp(&h378)
if myState = 0 then print "Relay is OFF" else print "Relay is ON"

I decided to release my board layout along with some notes on this project, in case anyone wants to build this. The notes say it all.

You can check it out here or download it as an Eagle BRD (v5.6)

In case you build it, leave a comment :)

Tuesday, July 7, 2009

Zipit2 mikmod

Due to the projects I've done with the first iteration, curiosity did bring me to buy a Zipit2 eventually. I loved the free IM forever, or similar text on the box even-though they're selling the services now for $100 a year or so.. that makes the initial impression somewhat negative. :-) Anyway, Aeronix kinda supports re-purposing the device this time around. There's some licensing debacle that's keeping the DIYer community away from the device. There does seem to be progress though. I've done two small projects with the Z2 before selling it. (Yes, I don't actually have it anymore). The first one was trying to get mikmod and mad player to work. Basically nothing compiled for the ZipIt1 worked well on the Z2. Nothing that had to do with audio anyway. I don't really know that much about the intricacies of playback on DMA based audio interfaces, but it seemed to have all kinds of buffer problems if I just dumped data out on /dev/dsp (that worked fine with the Z1). I did somewhat manage to get mikmod playing after trying random buffer sizes for about an hour.. but I think it was mostly luck that it worked, and it still hiccuped from time to time. (Then again, so does the stream player in the official software, so maybe it's a general driver bug? or maybe they didn't fully grasp it either..)

Here's a video of mikmod working on the Z2. I won't release anything because I have no idea where I put the files anymore :-) You'll probably need to crank up the volume to hear anything, sorry about that.

Monday, July 6, 2009

Leather Mouse, Man!

About 10 years ago I was buying noname mice every other month, and they kept breaking one way or another, until I decided to invest in a Logitech iFeel MouseMan.

It was an interesting mouse. Featured force-feedback (which was fun for a whole 5 minutes) There was actually a plugin for Unreal Tournament that made use of it, which was my game of choice at the time, but I decided to remove the vibration motor after a while because it made the mouse a bit heavy. I used this mouse for several years, without a single problem. Then a micro-switch started giving out and I decided to clean the mouse when I took it apart to replace the switch. Washing it with whatever I did turned out to be a rather bad idea, as the rubber parts of the mouse started "rotting" away. It appeared to be breaking down into an oily goo, and was losing it's color in the process. Obviously this made it impractical to use, so I shelved it. Until about a week ago when I got bored and decided to tear the rotted rubber from the plastic inserts and replace them with leather. I might not have started doing it if I knew how much work would be involved. I don't know what kind of glue they used, but it took close to 2 hours with sandpaper, a Dremel-like tool, xacto knife and pliers to get to and clean the plastic pads. The rest was pretty easy, cutting leather to size, gluing it to the pads, then folding it in around the edges.

I''m satisfied with the outcome.

Sunday, June 28, 2009

Moved to Blogger

Moved to Blogger. I think I've managed to mimic the looks of the previous engine/theme satisfactorily. Please update your RSS readers --> and links.

Standard P4 ATX to 14pin Compaq PSU Conversion

Intro: I saw some pretty cheap half-height compaq desktops (EVO d500 SFF) and decided to buy one to replace the browsing pc downstairs.
Problem: It was missing the psu, and as usual when it comes to compaq it's a non-standard proprietary PSU. In this case with a 14 pin connector. (the mobo was a 252299-001 with 90 deg. angled psu connector on the side sitting straight and parallel with the edge of the PCB, ( please note there has been a report of this circuit NOT working with a different type of 14pin Compaq mobo ) , the pinout for this is here. (looking into connector (not the one on the mobo), with tab on top, pin one is top left first pin, pin 2 is top left second pin, pin 8 is bottom left first pin) I'm not sure but I think there are some other 14pin compaq psu connectors that don't match this) Converting a standard ATX psu is mostly just pinswapping except for 1, 3.3v standby voltage 2, inverted PSON signal 3, fan control lines
I decided to ignore the psu fan control lines, having the psu fan on all the time won't bother me and the effort it would take to get it working right is just not worth it. On to the other two problems. The compaq mobo takes 3.3v and 5v standby voltages, but standard ATX psus offer only 5v. With the 3.3v missing the mobo won't be able to turn the PSU on. There's the option of hardwiring the PSON (perhaps to a switch, which would essentially be like an old AT psu functionality-wise, with the added trouble of having to switch the mobo on/off separately) , but that's highly inconvenient and pretty lame :) So the better solution is a voltage regulator. I chose the LM317 because I had one lying around and because it's easy to deal with. It's an adjustable reg, takes 2 resistors to adjust the output voltage, it's relatively high power (which is completely unneeded here as the load on the 3.3v standby is minuscule) 1kOhm and 1.6kOhm adjustment resistors set the output voltage at 3.31volts, assuming a 5v input ( from the standard atx standby voltage pin ) There's no drop whatsoever while in use, and the reg remains stone cold all the way, so the "heatsink" surface on my pcb is pretty pointless (I know it's on the wrong side, but if it got hot it would be minimally useful regardless :) ) also two caps for filtering were thrown in as suggested by the datasheet.

R1: 1kOhm
R2: 1.6kOhm
R3: 1kOhm
C1: 100nF
C2: 1uF
IC1: LM317
OK1: 4Nxx / TIL116
The other problem is the inverted PSON line, standard ATX psus power on if the PSON line is low, apparently the Compaq PSU is the exact opposite. As described here, I used an optocoupler to act as an isolated voltage controlled switch between PSON at the PSU, and ground, triggered by PSON at the mobo. I later removed the TIL116 from the socket and replaced it with a 4N25 as it had straighter pins (and because the TIL fell out and it took me a few minutes to figure out why the thing wasn't working), but pretty much any optocoupler can be used ( of course, only pin compatible ones in my pcb like 4Nxx )

14 pins (16 here with first column empty)
Final thoughts:
Drill the IN hole (one with the purple wires going into it) with a bigger diameter than the rest as you will have to fit two wire endings in it. (that or change the board design, add another wire pad)
If PC shuts down, front led blinking red It's probably the optocoupler.
If no video, check if the 4pin ATX 12v connector is connected.
Don't take my word for output voltage of the LM317, measure it. 3.2-3.5 should be fine but I'd try to get it as close to 3.3 as possible, just to be on the safe side.
Both standby voltage leds on the mobo should light up upon connecting power to the PSU if you've done everything right.
It would be wise to put this higher up on the cable unlike how I did, or it would also be possible to put it into the psu directly. your choice, (however don't use the hole that the tab of the LM317 is screwed into, to fasten it into the PSU case!! or use some insulating plastic screw as the tab of the LM is VOUT, not GND, so connecting it to GND would not be a good idea)

Eagle brd on request :-)

UPDATE 2009 01 30:

So apparently some of you are actually building this and having some trouble. I can't say why. This circuit has been working in two of my Compaqs since I built it without a single problem, and I've been using 4N25s in them.. Either way I'm including two images, hope they help.

They show an extra drill hole in the pcb because I added it after the 3rd PCB I made, but if you read the article you'll know what it is.

UPDATE 2009 06 28:

Below the image shows the mobo that I'm using these with, as stated, it probably won't work if your connector, and surrounding pcb doesn't look like this:

Good luck.

UPDATE 2016 10 01:

Ruslans Vojtko sent in this simplified version of the mod (no PCB necessary, uses cheap regulator module off eBay, search for "lm1117 3v3 module")

Thanks, Ruslans!

Sunday, May 24, 2009

KVMA docks

I guess time will tell whether this project was actually worth the trouble.
The basic idea was to take keyboard, mouse, audio and VGA, and put it on a single connector that connects to "docks" to which the actual peripherals are connected, so that, when moving my pc between 2 fixed locations I don't have to manually reconnect everything, just that one connector(+ lan and mains).

As usual, pcb making method was PnP Blue.

And the end result:

I'm not releasing Eagles because it was a 5 minute autorouter job ;)

Friday, January 2, 2009

A Smarter Label Printer

Some time ago I won a Seiko Smart Label Printer Plus, on an auction, for a good price. This is an ancient thermal-paper label printer from the still running Smart Label Printer line. It comes with DOS, WIN9x label editor software, which does not run on XP, and Seiko dropped support ages ago (According to the description of a later Seiko software download they dropped support because. "The old serial protocol cannot be supported under windows NT" or something along those lines, which is nonsense), so basically there was no software to conveniently use the printer with. At the beginning I used the Win9x software through VmWare but that's too tedious and annoying. After a bit of research I came across this site, that had full protocol descriptions for both newer and older SLP models. So I ended up coding up a tool that, through a virtual serial port receives data from the new SLP software, in the new protocol(or it can just load BMPs), translates to the old protocol, and sends the translated job to the SLP Plus)

During testing I discovered something. The SLP Plus can print to much wider paper than the SLP Labels. And after I realized that I can't buy SLP Labels locally, and that they would be too expensive anyway for printing shipping labels on, I decided to make use of that. I got lucky because standard width thermal paper used in cash-registers fits perfectly into the SLP :) and they cost $0.50 a roll! as opposed to $7+s/h for two rolls of SLP labels, plus I also get to print more labels this way as I don't always need the full length of an SLP label, and with the paper I can just cut it at any length.

karosium logo in glorious 1 bit per pixel.

I also made a simple support for the new roll of paper that goes in the place of the original label holder from a medicine bottle cap and a plastic rod.

Only disadvantages being that I have to use a glue stick as the paper isn't self adhesive, but I don't really mind that, and that I had to cut the front panel as the opening was only long enough for SLP labels to go through(and the cut didn't really turn out so well), as you see in the picture the serrated plastic bit used to cut the paper doesn't go all the way, only to the width of the SLP Label (that's one on top of the paper) I will have to replace it sometime, with one from a broken printer-calculator or something, but for now I just use an xacto knife to cut the paper.

Now, the newer SLPs of course have a higher dot density (almost twice of the slp plus), so printing from the new software will be oversized, as it can't print dots as close together and as small as the newer ones, but as luck would have it that mismatch is perfect when using the cash-register paper, as it gives about the right size for the print. Also, by using another paper setting the correct size for the SLP labels can be achieved. I basically just have to use smaller label settings than what I actually want to use.

While I don't know why Seiko dropped support for this thing, I think it's similar to the Creative driver shenanigans a couple of months or so back (to boost sales of newer models, and from what I've seen they kept on dropping support for older models in their software ever since the SLP Plus). This product would still be useful, despite being 10 years old, as it's only shortcoming is it's lower dot density when compared to newer models, and IMHO that isn't really a problem, as labels are still clearly readable, and any barcodes made are scannable... Does anything else really matter for a monochrome thermo-label?

So basically, I got a hobby project to work on and a label printer for around $25 shipped, not bad especially considering the prices of the newer SLP printers, or label printers in general.