This week i came down with a cold and by the weekend my friend Lian suggested I try some supermarket remedy that will cure my cold in one day. Turns out the stuff kept me awake it didn’t “cure” my cold in one day it made me impervious to sleep and when in an insomnia induced zomby state there is only a limited number of things to do:
- Hack on a software project
- Learn how to package .debs
- Try something that doesn’t actually matter when looking at the grand scheme of things
- Read all the books in the “A Gothic Treasury Of The Supernatural Series”
I went for a combination of option 3 and 4. Below you will find the fruit of my labour:
The application I tried was Ascgen2.net more info here
Files I have changed to get ascgen2 to sort off work under mono .net platform
1. FileListbox.cs
2. FormConvertImage.cs
3. FormConvertImage.Designer.cs
4. FormEditSettings.cs
5. NativeMethods.cs
The Viual Studio project opened just fine in monodevelop (AscGenDotNet.csproj)
After the first time I tried to run the ap I got this error:
File=/home/fredre/Desktop/ascgen2/Source/Controls/FileListbox.cs, Line=76, Column=58, Type=Error, Priority=Normal, Description=`System.Windows.Forms.List Box.StringFormat' is inaccessible due to its protection level(CS0122)
Fix: Comment out line 75 an 76 of FileListbox.cs
Tried to run the app again and ran into the following three problems:
File=/home/fredre/Desktop/ascgen2/Source/Forms/FormConvertImage.cs, Line=1882, Column=41, Type=Error, Priority=Normal, Description=`System.Net.HttpWebRequest' does not contain a definition for `CachePolicy'(CS0117)
Fix: Comment out line 1882 of FormConvertImage.cs
File=/home/fredre/Desktop/ascgen2/Source/Forms/FormConvertImage.Designer.cs, Line=345, Column=48, Type=Error, Priority=Normal, Description=`JMSoftwar e.CustomControl.TextViewerRichTextBox' does not contain a definition for `EnableAutoDragDrop'(CS0117)
Fix: Comment out line 345 of file FormConvertImage.Designer.cs
File=/home/fredre/Desktop/ascgen2/Source/Forms/FormConvertImage.Designer.cs, Line=1413, Column=42, Type=Error, Priority=Normal, Description=`System.Windows.Forms.PrintDialog' does not contain a definition for `UseEXDialog'(CS0117)
Fix: Comment out line 1413 of FormConvertImage.Designer.cs
Tried to run again but got this error:
File=/home/fredre/Desktop/ascgen2/Source/Forms/FormEditSettings.cs, Line=125, Column=48, Type=Error, Priority=Normal, Description=`System.Windows.Forms.ErrorProvider' does not contain a definition for `Clear'(CS0117)
Fix: Comment out line 125 of FormEditSettings.cs
Going to run the application one more time. Whooo no more errors this time but the application does not start I get this stack trace:
Unhandled Exception: System.Resources.MissingManifestResourceException: Could not find any resource appropiate for the specified culture or its parents. Make sure "AscGenDotNet.Properties.Resources.resources" was correctly embedded or linked into assembly "Ascgen dotNET".
at System.Resources.ResourceManager.InternalGetResourceSet (System.Globalization.CultureInfo culture, Boolean Createifnotexists, Boolean tryParents) [0x00000]
at System.Resources.ResourceManager.InternalGetResourceSet (System.Globalization.CultureInfo culture, Boolean Createifnotexists, Boolean tryParents) [0x00000]
at System.Resources.ResourceManager.InternalGetResourceSet (System.Globalization.CultureInfo culture, Boolean Createifnotexists, Boolean tryParents) [0x00000]
at System.Resources.ResourceManager.GetObject (System.String name, System.Globalization.CultureInfo culture) [0x00000]
at AscGenDotNet.Properties.Resources.get_folder () [0x00000] in /home/fredre/Desktop/ascgen2/Properties/Resources.Designer.cs:163
at JMSoftware.AsciiGeneratorDotNet.FormConvertImage.InitializeComponent () [0x0079b] in /home/fredre/Desktop/ascgen2/Source/Forms/FormConvertImage.Designer.cs:229
at JMSoftware.AsciiGeneratorDotNet.FormConvertImage..ctor (System.String[] args) [0x00000]
at (wrapper remoting-invoke-with-check) JMSoftware.AsciiGeneratorDotNet.FormConvertImage:.ctor (string[])
at JMSoftware.AsciiGeneratorDotNet.AsciiGenDotNet.Main (System.String[] args) [0x0000a] in /home/fredre/Desktop/ascgen2/Source/Main.cs:46
It seems a resource is not found ? I looked at the build output and saw the following interesting things:
Building Project: AscGenDotNet (Debug|Any CPU)
Performing main compilation...
Compiling resource /home/fredre/Desktop/ascgen2/Properties/Resources.resx with resgen2
Unable to compile (resgen2) /home/fredre/Desktop/ascgen2/Properties/Resources.resx to .resources. Ignoring.
Reason:
Error: Invalid ResX input.
Inner exception: Could not find file "/home/fredre/Desktop/ascgen2/Properties/..\Resources\lightbulb.png". Line 123, position 5.
I looked at /ascgen2/Resources and lightbulb.png was there so this means the resgen2 cant find the file. My first thought must be a path thing so I opened /ascgen2/Properties/Resources.resx and noticed the following lines:
<data name="lightbulb" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\lightbulb.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
So I did a search and replace searching for \Resources\ and replacing with /Resources/ and built again this time I go a actual window. Great more of Lian’s cold remedy please.
Ok all of the controls had weird names and things I am thinking this has something to do with translations. But there is a bigger problem. Right after the application starts I get the following exception and the main window closes when i want to open a new window…
System.DllNotFoundException: gdi32.dll
at (wrapper managed-to-native) JMSoftware.NativeMethods:SelectObject (intptr,intptr)
at JMSoftware.NativeMethods.IsFixedPitch (System.Drawing.Font font) [0x0001e] in /home/fredre/Desktop/ascgen2/Source/Functions/NativeMethods.cs:56
at JMSoftware.FontFunctions.IsFixedWidth (System.Drawing.Font font) [0x00000] in /home/fredre/Desktop/ascgen2/Source/Functions/FontFunctions.cs:64
at JMSoftware.AsciiConversion.TextProcessingSettings.set_Font (System.Drawing.Font value) [0x00007] in /home/fredre/Desktop/ascgen2/Source/AsciiConversion/TextProcessingSettings.cs:300
at JMSoftware.AsciiConversion.TextProcessingSettings..ctor (Size size, System.Drawing.Font font) [0x00000]
at JMSoftware.AsciiConversion.TextProcessingSettings..ctor (Size size) [0x00000]
at JMSoftware.AsciiConversion.TextProcessingSettings..ctor () [0x00000]
at JMSoftware.AsciiGeneratorDotNet.FormBatchConvert..ctor () [0x00000]
at (wrapper remoting-invoke-with-check) JMSoftware.AsciiGeneratorDotNet.FormBatchConvert:.ctor ()
at JMSoftware.AsciiGeneratorDotNet.FormConvertImage.formMain_Load (System.Object sender, System.EventArgs e) [0x00067] in /home/fredre/Desktop/ascgen2/Source/Forms/FormConvertImage.cs:78
at (wrapper delegate-invoke) System.MulticastDelegate:invoke_void_object_EventArgs (object,System.EventArgs)
at System.Windows.Forms.Form.OnLoad (System.EventArgs e) [0x00000]
at System.Windows.Forms.Form.OnCreateControl () [0x00000]
at System.Windows.Forms.Control.CreateControl () [0x00000]
at System.Windows.Forms.Control.WmShowWindow (System.Windows.Forms.Message& m) [0x00000]
at System.Windows.Forms.Control.WndProc (System.Windows.Forms.Message& m) [0x00000]
at System.Windows.Forms.ScrollableControl.WndProc (System.Windows.Forms.Message& m) [0x00000]
at System.Windows.Forms.ContainerControl.WndProc (System.Windows.Forms.Message& m) [0x00000]
at System.Windows.Forms.Form.WndProc (System.Windows.Forms.Message& m) [0x00000]
at System.Windows.Forms.Control+ControlWindowTarget.OnMessage (System.Windows.Forms.Message& m) [0x00000]
at System.Windows.Forms.Control+ControlNativeWindow.WndProc (System.Windows.Forms.Message& m) [0x00000]
at System.Windows.Forms.NativeWindow.WndProc (IntPtr hWnd, Msg msg, IntPtr wParam, IntPtr lParam) [0x00000]
System.NullReferenceException: A null value was found where an object instance was required.
at JMSoftware.AsciiGeneratorDotNet.FormConvertImage.menuFileBatchConversion_Click (System.Object sender, System.EventArgs e) [0x00000] in /home/fredre/Desktop/ascgen2/Source/Forms/FormConvertImage.cs:1749
at (wrapper delegate-invoke) System.MulticastDelegate:invoke_void_object_EventArgs (object,System.EventArgs)
at System.Windows.Forms.ToolStripItem.OnClick (System.EventArgs e) [0x00000]
at System.Windows.Forms.ToolStripMenuItem.OnClick (System.EventArgs e) [0x00000]
at System.Windows.Forms.ToolStripItem.FireEvent (System.EventArgs e, ToolStripItemEventType met) [0x00000]
at (wrapper remoting-invoke-with-check) System.Windows.Forms.ToolStripItem:FireEvent (System.EventArgs,System.Windows.Forms.ToolStripItemEventType)
at System.Windows.Forms.ToolStrip.OnMouseUp (System.Windows.Forms.MouseEventArgs mea) [0x00000]
at System.Windows.Forms.ToolStripDropDown.OnMouseUp (System.Windows.Forms.MouseEventArgs mea) [0x00000]
at System.Windows.Forms.Control.WmLButtonUp (System.Windows.Forms.Message& m) [0x00000]
at System.Windows.Forms.Control.WndProc (System.Windows.Forms.Message& m) [0x00000]
at System.Windows.Forms.ScrollableControl.WndProc (System.Windows.Forms.Message& m) [0x00000]
at System.Windows.Forms.ToolStrip.WndProc (System.Windows.Forms.Message& m) [0x00000]
at System.Windows.Forms.ToolStripDropDown.WndProc (System.Windows.Forms.Message& m) [0x00000]
at System.Windows.Forms.Control+ControlWindowTarget.OnMessage (System.Windows.Forms.Message& m) [0x00000]
at System.Windows.Forms.Control+ControlNativeWindow.WndProc (System.Windows.Forms.Message& m) [0x00000]
at System.Windows.Forms.NativeWindow.WndProc (IntPtr hWnd, Msg msg, IntPtr wParam, IntPtr lParam) [0x00000]
I read this hoping it would shed some light on my ghastly situation (To much Gothic reading I am starting to sound like Dr. Frankenstein) :
http://www.mono-project.com/DllNotFoundException
Since the .exe is compiled I headed over to my terminal and tried the following command mentioned on the site to get more debug info:
MONO_LOG_LEVEL=debug mono Ascgen\ dotNET.exe | grep Mono-WARNING **
After the command I notices three “Mono-WARNING **: DllImport unable to load library” errors namely:
(Ascgen dotNET.exe:10580): Mono-WARNING **: DllImport unable to load library 'libgdi32.dll: cannot open shared object file: No such file or directory'.
(Ascgen dotNET.exe:10580): Mono-WARNING **: DllImport unable to load library 'libuxtheme: cannot open shared object file: No such file or directory'
(Ascgen dotNET.exe:10580): Mono-WARNING **: DllImport unable to load library 'lib/System/Library/Frameworks/Carbon.framework/Versions/Current/Carbon: cannot open shared object file: No such file or directory'.
I don’t know much about the third one so I decided to look at the second one first maybe my package manager knows something about libuxtheme. Searching for libuxtheme didn’t bring up any hits heading over to Google. Ok Google didn’t give any extra hints maybe I will try a mailing list sometime.
Ok so lets try the first one namely: (Ascgen dotNET.exe:10580): Mono-WARNING **: DllImport unable to load library ‘libgdi32.dll: cannot open shared object file: No such file or directory’. Again over to package manager to see if I can become any more knowledgeable in my efforts with search term libgdi32. Nothing. Over to Google. I found this message from a mailing list:
http://osdir.com/ml/debian.packages.mono/2004-04/msg00011.html
Following the advice I executed command: cd /usr/lib && ln -s /usr/lib/wine/gdi32.dll.so libgdi32.dll.so and tried to run the app again.
This time the missing dll didnt appear but the window didn’t even start. Go this stack trace:
Stacktrace:
at (wrapper managed-to-native) JMSoftware.NativeMethods.SelectObject (intptr,intptr) <0x00004>
at (wrapper managed-to-native) JMSoftware.NativeMethods.SelectObject (intptr,intptr) <0xffffffff>
at JMSoftware.NativeMethods.IsFixedPitch (System.Drawing.Font) [0x0001e] in /home/fredre/Desktop/ascgen2/Source/Functions/NativeMethods.cs:56
at JMSoftware.FontFunctions.IsFixedWidth (System.Drawing.Font) [0x00000] in /home/fredre/Desktop/ascgen2/Source/Functions/FontFunctions.cs:64
at JMSoftware.AsciiConversion.TextProcessingSettings.set_Font (System.Drawing.Font) [0x00007] in /home/fredre/Desktop/ascgen2/Source/AsciiConversion/TextProcessingSettings.cs:300
at JMSoftware.AsciiConversion.TextProcessingSettings..ctor (System.Drawing.Size,System.Drawing.Font) <0x00194>
at JMSoftware.AsciiConversion.TextProcessingSettings..ctor (System.Drawing.Size) <0x00021>
at JMSoftware.AsciiConversion.TextProcessingSettings..ctor () <0x00055>
at JMSoftware.AsciiGeneratorDotNet.FormBatchConvert..ctor () <0x0010a>
at (wrapper remoting-invoke-with-check) JMSoftware.AsciiGeneratorDotNet.FormBatchConvert..ctor () <0xffffffff>
at JMSoftware.AsciiGeneratorDotNet.FormConvertImage.formMain_Load (object,System.EventArgs) [0x00067] in /home/fredre/Desktop/ascgen2/Source/Forms/FormConvertImage.cs:78
at (wrapper delegate-invoke) System.MulticastDelegate.invoke_void_object_EventArgs (object,System.EventArgs) <0xffffffff>
at System.Windows.Forms.Form.OnLoad (System.EventArgs) <0x0007d>
at System.Windows.Forms.Form.OnCreateControl () <0x00047>
at System.Windows.Forms.Control.CreateControl () <0x00233>
at System.Windows.Forms.Control.WmShowWindow (System.Windows.Forms.Message&) <0x00091>
at System.Windows.Forms.Control.WndProc (System.Windows.Forms.Message&) <0x0022b>
at System.Windows.Forms.ScrollableControl.WndProc (System.Windows.Forms.Message&) <0x0000d>
at System.Windows.Forms.ContainerControl.WndProc (System.Windows.Forms.Message&) <0x0005b>
at System.Windows.Forms.Form.WndProc (System.Windows.Forms.Message&) <0x02833>
at ControlWindowTarget.OnMessage (System.Windows.Forms.Message&) <0x00014>
at ControlNativeWindow.WndProc (System.Windows.Forms.Message&) <0x00023>
at System.Windows.Forms.NativeWindow.WndProc (intptr,System.Windows.Forms.Msg,intptr,intptr) <0x00180>
at System.Windows.Forms.XplatUIX11.SendMessage (intptr,System.Windows.Forms.Msg,intptr,intptr) <0x00194>
at System.Windows.Forms.XplatUIX11.MapWindow (System.Windows.Forms.Hwnd,System.Windows.Forms.WindowType) <0x00202>
at System.Windows.Forms.XplatUIX11.CreateWindow (System.Windows.Forms.CreateParams) <0x01c29>
at System.Windows.Forms.XplatUI.CreateWindow (System.Windows.Forms.CreateParams) <0x00015>
at System.Windows.Forms.NativeWindow.CreateHandle (System.Windows.Forms.CreateParams) <0x00037>
at System.Windows.Forms.Control.CreateHandle () <0x0006a>
at System.Windows.Forms.Form.CreateHandle () <0x00013>
at System.Windows.Forms.Control.CreateControl () <0x00066>
at System.Windows.Forms.Control.SetVisibleCore (bool) <0x0005b>
at System.Windows.Forms.Form.SetVisibleCore (bool) <0x00164>
at System.Windows.Forms.Control.set_Visible (bool) <0x00013>
at (wrapper remoting-invoke-with-check) System.Windows.Forms.Control.set_Visible (bool) <0xffffffff>
at System.Windows.Forms.Application.RunLoop (bool,System.Windows.Forms.ApplicationContext) <0x00225>
at System.Windows.Forms.Application.Run (System.Windows.Forms.Form) <0x00024>
at JMSoftware.AsciiGeneratorDotNet.AsciiGenDotNet.Main (string[]) [0x0000a] in /home/fredre/Desktop/ascgen2/Source/Main.cs:46
at (wrapper runtime-invoke) System.Object.runtime_invoke_void_string[] (object,intptr,intptr,intptr) <0xffffffff>
Native stacktrace:
/usr/bin/mono [0x8194ca6]
/usr/bin/mono [0x81770ed]
[0xffffe440]
/usr/lib/libgdi32.dll.so(DC_GetDCPtr+0x2f) [0xb580447f]
/usr/lib/libgdi32.dll.so(SelectObject+0x31) [0xb582d091]
[0xb5aece20]
[0xb589ebee]
[0xb589eb4b]
[0xb589eacb]
[0xb589e4b5]
[0xb589e2da]
[0xb589e296]
[0xb589c03b]
[0xb589bf02]
[0xb58976ad]
[0xb6215a04]
[0xb6184c66]
[0xb6184910]
[0xb621e98c]
[0xb6184472]
[0xb617e6fc]
[0xb617e4c6]
[0xb617e49c]
[0xb617dfcc]
[0xb617b75d]
[0xb617b73c]
[0xb617b1b1]
[0xb617afad]
[0xb618427b]
[0xb6220d6a]
[0xb621f136]
[0xb621f018]
[0xb621ee23]
[0xb621ea14]
[0xb621e7bf]
[0xb621305c]
[0xb621e4cd]
[0xb6242fb4]
[0xb6242f80]
[0xb5ac950e]
[0xb5ac90d5]
[0xb73514e7]
[0xb7350075]
/usr/bin/mono [0x8176f50]
/usr/bin/mono(mono_runtime_invoke+0x27) [0x80b0b2f]
/usr/bin/mono(mono_runtime_exec_main+0x142) [0x80b5383]
/usr/bin/mono(mono_runtime_run_main+0x27e) [0x80b5631]
/usr/bin/mono(mono_jit_exec+0xbd) [0x805a4cb]
/usr/bin/mono [0x805a5a8]
/usr/bin/mono(mono_main+0x1683) [0x805bdc9]
/usr/bin/mono [0x8059636]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe0) [0xb7ce4050]
/usr/bin/mono [0x80595b1]
Debug info from gdb:
(no debugging symbols found)
Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
[Thread debugging using libthread_db enabled]
[New Thread -1211316528 (LWP 7416)]
[New Thread -1221272688 (LWP 7420)]
[New Thread -1215497328 (LWP 7419)]
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
0xffffe410 in __kernel_vsyscall ()
3 Thread -1215497328 (LWP 7419) 0xffffe410 in __kernel_vsyscall ()
2 Thread -1221272688 (LWP 7420) 0xffffe410 in __kernel_vsyscall ()
1 Thread -1211316528 (LWP 7416) 0xffffe410 in __kernel_vsyscall ()
Thread 3 (Thread -1215497328 (LWP 7419)):
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xb7e499f6 in ?? () from /lib/tls/i686/cmov/libpthread.so.0
#2 0×0811bc9f in ?? ()
#3 0xb78cf3ac in ?? ()
#4 0×00000000 in ?? ()
Thread 2 (Thread -1221272688 (LWP 7420)):
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xb7e46676 in pthread_cond_wait@@GLIBC_2.3.2 ()
from /lib/tls/i686/cmov/libpthread.so.0
#2 0×08120dde in ?? ()
#3 0xb78371dc in ?? ()
#4 0xb78371c4 in ?? ()
#5 0xb7e44541 in pthread_mutex_lock ()
from /lib/tls/i686/cmov/libpthread.so.0
#6 0×081210eb in ?? ()
#7 0xb78371dc in ?? ()
#8 0xb78371c4 in ?? ()
#9 0×00000000 in ?? ()
Thread 1 (Thread -1211316528 (LWP 7416)):
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xb7d9a301 in select () from /lib/tls/i686/cmov/libc.so.6
#2 0xb7eb9780 in g_spawn_sync () from /usr/lib/libglib-2.0.so.0
#3 0xb7eb9b4c in g_spawn_command_line_sync () from /usr/lib/libglib-2.0.so.0
#4 0×08194d84 in ?? ()
#5 0xb7b8c844 in ?? ()
#6 0xb7b8c82c in ?? ()
#7 0xb7b8c828 in ?? ()
#8 0xb7b8c824 in ?? ()
#9 0×00000000 in ?? ()
#0 0xffffe410 in __kernel_vsyscall ()
=================================================================
Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================
Ok I am done. Last thing I am going to try is comment out all the code that causes the exceptions, here goes I commented out lines 60, 56 and 65 of the file NativeMethods.cs (The name of the file says it all right…). This time the app started but was very buggy. I could load a image but only by dragging that image on the form and the generated ASCII didnt look so good but at least it ran sort off (Its alive !!!!! That line isn’t actually in the book only the movie).
This were I am going to stop. Maby when the next version of mono apears I will try again. But does this mean all .net aps is off limits to mono. I dont think so. You can probably find a lot of .net projects on sourceforge that will happely run on mono this one just didnt want to sortoff. Most of the problems was with Winforms and i bet if you replace the Winforms with some GTK goodness you wont be far off. Maby if you know more then me about mono and C# that wouldnt even be necassary. Maby the solution is staring me in the face but I just cant see it. Hope this helps someone who is realy serios about getting a .net ap to work with with mono.
Enough of option 3 and option 4 for that matter. Next time I am going to read Dances with Wolves again.