* BUG: Convert to uppercase or lowercase now works as expected in the code
editor.
* BUG: Fix the offline 'To Do' and 'Last Changes' page.
[INTERPRETER]
* NEW: Add GB_DECLARE_STATIC() macro to declare native classes, and use it
in many class declarations.
[GB.FORM]
* NEW: Add an history in the FileChooser and DirChooser controls.
* NEW: Add a 'link' stock icon.
[GB.GUI.BASE]
* BUG: IconView: Fix mouse handling during rubberband selection.
* NEW: IconView: Use a lighter selection colour.
* BUG: ScrollArea: Shadows are now correctly drawn whatever is done during
the Draw event it raises.
git-svn-id: svn://localhost/gambas/trunk@6458 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: Use the new WebSettings.Cache.Clear() method.
* BUG: Fix project lists layout when they are filtered.
[WIKI CGI SCRIPT]
* BUG: Workaround the thttpd cgi interface bug.
[INTERPRETER]
* NEW: A new API for browsing a directory recursively.
* NEW: Js$() is a new function that quotes javascript strings.
[GB.FORM]
* BUG: ColorChooser: Don't memorize custom colors spuriously.
[GB.GUI.BASE]
* BUG: GridView: Don't take hidden columns into account when layouting
expanded columns.
git-svn-id: svn://localhost/gambas/trunk@6447 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: Set Cygwin Shared Library Extension to dll
[GB.JIT]
* NEW: Add conditional defines for Cygwin to allow compile:
Use finite in place of _finite, __isnand in place of __isnan
and __isinfd in place of __isinf.
* NEW: Remove jit_gambas_pass_dummy.cpp as this is no longer
required to compile with later versions of llvm. Also fixes
issue with Cygwin compile.
[GB.NET]
* NEW: Redefine TIOCOUTQ for Cygwin
[GB.SDL.SOUND]
* NEW: -lSDL needed for Cygwin linker
[INTERPRETER]
* NEW: Redefine FIONREAD for Cygwin
* NEW: Cygwin needs <strings.h> to avoid compiler issues when
redefining strcasecmp etc.
[DEVELOPMENT ENVIRONMENT]
* NEW: Make the environment Cygwin aware
git-svn-id: svn://localhost/gambas/trunk@6435 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: Fix the custom browser support.
* NEW: Add Chromimum to the list of browsers.
[INTERPRETER]
* NEW: GB.GetProperty() and GB.SetProperty() API now return TRUE when they
have raised an error. FALSE is everything was ok.
[GB.FORM.MDI]
* NEW: Redesign the shortcuts configuration dialog.
* NEW: Shortcuts now can be exported and imported.
[GB.GTK]
* BUG: DrawingArea: Clipping is correctly established now before raising
the Draw event.
* BUG: Keyboard events have been fixed. Key array accessor and Key.Code now
behave the same way as in gb.qt4.
* BUG: The Key.Meta property works correctly now.
* BUG: Now keyboard events seem to be sent twice by GDK. Found a workaround
for that new weird behaviour.
* BUG: Automatic window minimum size now works correctly.
* BUG: Windows can take focus as in gb.qt4.
[GB.GUI.BASE]
* BUG: GridView: Do not use Draw.Clip to preserve the clipping of the Draw
event. Otherwise you get drawing artifacts with gb.gtk.
* BUG: GridView: Setting the column width to -1 is taken into account by
the layout routine.
git-svn-id: svn://localhost/gambas/trunk@6306 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: Allows last changes to be displayed for everyone.
* NEW: Display last changes as a table with links.
[GB.FORM]
* BUG: Draw.Line() correctly takes into account the LineStyle property in
all cases now.
* BUG: Fix the dash patterns used for implementing the Draw.LineStyle
property.
git-svn-id: svn://localhost/gambas/trunk@6296 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* OPT: Define the TZ environment variable at startup if it not defined to
prevent the glibc to stat the '/etc/localtime' file again and again.
* OPT: Cache the last value of System.TimeZone during at most 10 minutes.
[GB.FORM]
* OPT: Implement a directory cache to minimize the number of calls to the
Stat() function.
[GB.SETTINGS]
* BUG: Do not mark the settings file as modified if the stored value is not
really changed.
git-svn-id: svn://localhost/gambas/trunk@6290 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: Don't check conflict on project configuration file if that files
does not exist.
[INTERPRETER]
* OPT: Move the string splitting routine in its own file and optimize it.
[INFORMER]
* BUG: Remove unneeded parenthesis on a test.
[GB.CLIPPER]
* BUG: Remove an unused variable.
[GB.DESKTOP]
* BUG: Fix error message in DesktopMime.
[GB.FORM]
* BUG: MaskBox: Raise the Change event after moving the cursor, so that it
behaves exactly like a TextBox.
[GB.FORM.MDI]
* NEW: Workspace: Count the number of detached windows so that the "detach
current tab" menu entry is disabled when needed.
[GB.GTK]
* BUG: Window.Utility should work even if the window is mapped now.
[GB.GTK3]
* BUG: Window.Utility should work even if the window is mapped now.
[GB.NET.PO3]
* NEW: Add a void constructor to the Pop3Client class for the
documentation.
git-svn-id: svn://localhost/gambas/trunk@6285 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: Rand() is a new function that returns an integer random number.
Rand(X) returns a integer random number between 0 and X included.
Rand(X,Y) returns a integer random number between X and Y included.
* BUG: System.TimeZone now returns the accurate value, i.e. the number of
seconds that must be *added* to go to UTC.
git-svn-id: svn://localhost/gambas/trunk@6282 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: IsMissing() is a new function that returns if an optional argument
is missing. It always returns FALSE on a non-optional argument.
[INTERPRETER]
* NEW: Support for IsMissing().
git-svn-id: svn://localhost/gambas/trunk@6258 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: Correctly drop arguments when using the new '...' symbol syntax.
[COMPILER]
* BUG: Correctly drop arguments when using the new '...' symbol syntax.
git-svn-id: svn://localhost/gambas/trunk@6252 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: Support for the new '...' symbol usage in function calls.
[COMPILER]
* NEW: '...' can be used for passing all the variables arguments of the
current function to another function. The '...' symbol must be the last
argument of the function call.
git-svn-id: svn://localhost/gambas/trunk@6251 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: Add a echo button in the output console, that echoes the entered
command.
[WIKI]
* NEW: Add a HTTP server requests graph.
[INTERPRETER]
* BUG: The debugger does not change the Key property of collections when
displaying them.
* NEW: Collection.Key is writable now.
[GB.FORM]
* NEW: FontChooser: Always reset sample text at first use.
* BUG: FontChooser: Fix the behaviour when size changes.
git-svn-id: svn://localhost/gambas/trunk@6222 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: Fix maximum number of array declaration in the same class.
* NEW: Array and Collection constructor operator [ ... ] now can take any
number of arguments. It is only limited by the maximum function size,
which leads for example to about 32000 elements for a short array.
git-svn-id: svn://localhost/gambas/trunk@6110 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: Support for the GB_PATH environment variable, that gives the Gambas
interpreter path if set.
git-svn-id: svn://localhost/gambas/trunk@5918 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: Add the description of 'gb.memcached' and 'gb.logging' components.
* NEW: Update error messages translation.
[INTERPRETER]
* NEW: Allow some error messages to be untranslatable by using a void macro
named '$(...)' around the string.
[GB.FORM]
* BUG: The status of FileChooser and DirChooser toolbar icons is correctly
initialized now.
* BUG: Reading the FileChooser.ShowPreview property does not crash anymore.
git-svn-id: svn://localhost/gambas/trunk@5912 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: Synchronize the 'gambas.h' header with the internal date management
changes of rev. #5871.
git-svn-id: svn://localhost/gambas/trunk@5873 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: Fix the "search" link.
[INTERPRETER]
* NEW: Date() and Time() now takes the milliseconds as an extra optional
argument.
* BUG: Time() with one argument correctly converts it to a date.
* NEW: Date() and Time() now always check the range validity of their
arguments.
[GB.DB.FORM]
* NEW: DataControl does not change the background of mandatory field and
the font of primary key fields anymore.
* NEW: DateControl.Control is a new property that returns the underlying
control used for editing the field data.
[GB.GUI.BASE]
* NEW: HSplit and VSplit have a new Border property that define if the
splitter separator is visible or not.
* NEW: HSplit and VSplit now take the Spacing property into account.
git-svn-id: svn://localhost/gambas/trunk@5871 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: Always use "svn --force" when deleting a file in a project under
version control.
[INTERPRETER]
* BUG: Fix a structure alignment for ARM architecture.
[GB.FORM]
* NEW: The image preview background task is now run with a lower priority.
git-svn-id: svn://localhost/gambas/trunk@5868 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: Task.Stop now behaves correctly if the task has not been yet
actually started.
* NEW: Stopped task temporary files are automatically removed.
git-svn-id: svn://localhost/gambas/trunk@5861 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: Remove as much "packed" structure declaration as possible, to
prevent possible bugs on ARM architecture.
git-svn-id: svn://localhost/gambas/trunk@5860 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: Fix a structure declaration that prevented the compiler to work
correctly on the ARM architecture.
git-svn-id: svn://localhost/gambas/trunk@5856 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: Complete the french translation.
[INTERPRETER]
* BUG: Class reimplementation of Abs() now can return an object or a
floating-point number.
[GB.COMPLEX]
* BUG: Abs() on a Complex returns a Float.
[GB.GEOM]
* BUG: Abs() on a Point or a PointF returns a Float.
[GB.GSL]
* BUG: Abs() on a Complex returns a Float.
git-svn-id: svn://localhost/gambas/trunk@5835 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: Support for inequality operators in the operator interface.
* NEW: The Sgn() function can be implemented by the operator interface.
[GB.GMP]
* NEW: BigInt now supports inequality operators.
* NEW: New methods: Odd(), Even()
* NEW: Logical operators as static methods: And, Or, Xor, Not.
* NEW: Bit manipulation as static methods: BSet, BClr, BChg, BTst.
git-svn-id: svn://localhost/gambas/trunk@5828 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: Fix Abs() when that operator is implemented at class level, so that
it returns an object and not necesarrily a floating point value.
[GB.GMP]
* NEW: New component based on the Gnu Multiple Precision Arithmetic
Library. Only big integers (BigInt class) are partially implemented at
the moment.
git-svn-id: svn://localhost/gambas/trunk@5826 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: SliderBox is a new control that displays a Slider and a SpinBox,
both being synchronized.
* NEW: The SidePanel transparent handle is now smaller when the SidePanel
is hidden.
git-svn-id: svn://localhost/gambas/trunk@5804 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: Update copyright year to 2013.
[GB.FORM]
* NEW: ImageView is a new control that allows to view an image inside a
scrolled view, at different zoom levels.
* BUG: FileProperties now works correctly if 'gb.desktop' is not used.
* NEW: The FileProperties preview tab now uses an ImageView control and has
a toolbar to zoom the preview.
* BUG: Add the 'linux' and 'gnu' icon in the stock icon list.
git-svn-id: svn://localhost/gambas/trunk@5770 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: When the 'gb.web' component is selected, a new option is available
in the project property dialog: "Run in an embedded HTTP server".
(INTERPRETER]
* NEW: GB.System.Debug() is a new API that allows to know if the
interpreter is run in debugging mode.
[GB.DEBUG]
* NEW: The debugger tells the IDE when its prompt is the first one.
[GB.HTTPD]
* NEW: Reset locale to "C" before running the http server.
* BUG: The CGI "SCRIPT_NAME" variable is set to "/".
* NEW: The default CGI timeout is now 10 minutes.
* NEW: Behave accurately when run in debugging mode : only one CGI script
at a time is allowed.
* NEW: When run in debugging mode, there is no CGI timeout.
git-svn-id: svn://localhost/gambas/trunk@5765 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: GB.ReturnSingle() is a new API that allows to return a Single from a
method or property implementation routine.
[GB.NET.POP3]
* NEW: Pop3Client has a new Remove() method to delete a message from its
index. Pop3Client.Remove(n) is just a synonymous for
Pop3Client[n].Delete.
[GB.OPENAL]
* NEW: New component for the OpenAL 3D audio library. Work in progress...
[GB.OPENGL]
* BUG: Fix a possible crash in GL.GenTextures(). I guess that bug will have
to be fixed in other equivalent routines.
git-svn-id: svn://localhost/gambas/trunk@5753 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: MATCH is a new operator that automatically load the gb.pcre
component to implement PCRE pattern matching. The syntax is the same as
the LIKE operator.
[COMPILER]
* NEW: Add a new MATCH operator.
[GB.FORM]
* BUG: The directory contents size task does not abort anymore when
accessing an unreadable files or directory. It now ignore them.
* NEW: When errors are raised while browsing the contents of a directory,
the file properties dialog display them is a new tab.
[GB.PCRE]
* NEW: Create an API interface for allowing other components to use PCRE
regular expressions.
git-svn-id: svn://localhost/gambas/trunk@5730 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: Fix the frame position when dragging a control from the toolbar on
a container.
* NEW: The project file properties dialog is now based on the new
FileProperties control.
[INTERPRETER]
* NEW: GB.OnErrorBegin() and GB.OnErrorEnd() are two new APIs that allow to
register cleanup routines that are called when an error is raised between
the GB.OnErrorBegin() call and the GB.OnErrorEnd() call.
[INFORMER]
* BUG: The value of Float constants is now correctly dumped in *.info
files.
[GB.COMPLEX]
* NEW: Implement the same Complex.ToString() method as in gb.gsl.
[GB.DESKTOP]
* NEW: Desktop.DataDir is a new property that returns the directory where
the application must store its user-specific data.
* NEW: Desktop.ConfigDir is a new property that returns the directory where
the application must store its user-specific configuration.
* NEW: Desktop.CacheDir is a new property that returns the directory where
the application must store its user-specific cached data.
* NEW: Desktop.RuntimeDir is a new property that returns the directory
where the application must store its temporary runtime files.
* BUG: Fix a possible crash when searching a mimetype from the file
extension.
[GB.FORM]
* NEW: FileProperties is a new control that displays the properties of a
specific file or directory. It automatically computes the size of
directory contents through a background task.
* BUG: Setting the TabPanel.Border property now correctly refreshes its
layout.
* NEW: The stock icon map now can declare specific icons for specific
widget themes.
[GB.FORM.STOCK]
* NEW: Fix the 'tools' icon for elementary icon theme.
[GB.GSL]
* BUG: Fix the Vector.ToString() declaration.
[GB.QT4.EXT]
* NEW: The Editor.LineOffset property has been renamed as
Editor.LineNumberOffset.
git-svn-id: svn://localhost/gambas/trunk@5725 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: "Compress all" and "Uncompress all" action on project sub-
directories.
* BUG: Do not crash when checking for completion in text editor.
[INTERPRETER]
* BUG: Void string contants work correctly now.
[COMPILER]
* BUG: Functions now can have up to 65536 bytecode operations instead of
32768.
* NEW: Support for the Parent property of WebPage.
* NEW: WebPage markups attributes can use the <%...%> syntax.
[GB.EVAL.HIGHLIGHT]
* NEW: HTML highlighting has be rewritten. <%...%> markups are taken into
account inside <style> and <script> markups.
[GB.FORM]
* NEW: FileView and DirView now display hidden files lightly, and symbolic
links in italic.
* NEW: File properties dialog in FileChooser and DirChooser.
[GB.FORM.STOCK]
* NEW: Default icons for some mime types.
[GB.GTK]
* BUG: Menu click event is now triggered the same way as in gb.qt4.
* BUG: Control.HasFocus() works correctly now.
* BUG: Modal windows cannot be shrinked less then their initial size
anymore.
[GB.GUI.BASE]
* NEW: IconView, TreeView, ListView and ColumnView items now have a
RichText property.
[GB.WEB]
* NEW: WebPage.Parent property returns the parent webpage that includes the
current webpage with the <<...>> markup.
git-svn-id: svn://localhost/gambas/trunk@5623 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: The previous fix was incorrect. We can now really create an
executable when the project directory and the target directory are not on
the same device.
git-svn-id: svn://localhost/gambas/trunk@5604 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: Be able to create the executable file if /tmp and the target
directory are not on the same device.
git-svn-id: svn://localhost/gambas/trunk@5603 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: GB.Stream.Eof() is a new API that returns if there is something to
read on a stream, by taking the 'Line Input' internal buffer into
account.
[GB.NET.CURL]
* NEW: Now the Read event is raised again and again while there is
something to read.
git-svn-id: svn://localhost/gambas/trunk@5554 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: A new interpreter API that allows a component to tell that its
custom stream data is immediately available.
* BUG: GB.Stream.SetBytesRead() now increments the internal number of read
bytes, so that the 'Line Input' buffer is taken into account.
[GB.NET.CURL]
* NEW: The FtpClient or HttpClient Read event is now called as long as
there is something to read *and* the event handler actually read at least
one byte.
* BUG: The handle of a curl object is now -1 (i.e. it is not available).
* BUG: The data received by a curl object is immediately available to the
READ instruction.
git-svn-id: svn://localhost/gambas/trunk@5553 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: Correctly raise an error if we use the New keyword inside an
embedded array declaration.
git-svn-id: svn://localhost/gambas/trunk@5506 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: Fixes of bugs detected by Coverity Scan.
* BUG: Process output is correctly flushed at process exit now.
[COMPILER]
* BUG: Fixes of bugs detected by Coverity Scan.
[ARCHIVER]
* BUG: Fixes of bugs detected by Coverity Scan.
[INFORMER]
* BUG: Fixes of bugs detected by Coverity Scan.
[GB.COMPRESS]
* BUG: Fixes of bugs detected by Coverity Scan.
[GB.DEBUG]
* BUG: Fixes of bugs detected by Coverity Scan.
[GB.EVAL]
* BUG: Fixes of bugs detected by Coverity Scan.
[GB.IMAGE]
* BUG: Fixes of bugs detected by Coverity Scan.
[GB.IMAGE.EFFECT]
* BUG: Fixes of bugs detected by Coverity Scan.
[GB.VB]
* BUG: Fixes of bugs detected by Coverity Scan.
git-svn-id: svn://localhost/gambas/trunk@5493 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: Some fixes of bugs detected by Coverity Scan.
* NEW: Raise a 'Filename too long' error now when a too long file path is
detected inside a file management function.
* NEW: System.TimeZone is a new property that returns the current timezone
as an offset in seconds that must be added to a local time to get UTC.
[COMPILER]
* BUG: Some fixes of bugs detected by Coverity Scan.
[GB.IMAGE]
* BUG: Some fixes of bugs detected by Coverity Scan.
git-svn-id: svn://localhost/gambas/trunk@5490 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: Check at startup that temporary directories are really directories
and not symbolic links.
git-svn-id: svn://localhost/gambas/trunk@5464 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: Do 'svn cleanup' in the parent directory of the project.
[COMPILER]
* BUG: Do not emit inaccurate line number information for forms and global
variables with no initialization.
[INTERPRETER]
* BUG: When creating the process temporary directory, check the permissions
of both the top directory (gambas.<userid>) and the process directory
inside.
git-svn-id: svn://localhost/gambas/trunk@5461 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: Ensure that the interpreter temporary directory is owned by the
current user and that its rights are accurate. Otherwise abort.
git-svn-id: svn://localhost/gambas/trunk@5438 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* BUG: Fix how documentation pages of code and libraries written in Gambas
are generated.
* NEW: Some little fixes in Gambas terminal fonts.
[GB.COMPRESS.ZLIB]
* BUG: Fix the driver that was not working anymore.
[GB.COMPRESS.BZLIB2]
* BUG: Fix the driver that was not working anymore.
git-svn-id: svn://localhost/gambas/trunk@5435 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: The RAISE instruction now can raise events defined in a parent
class.
* NEW: Timer: The Trigger method now does nothing if there is an already
pending trigger. This behaviour is not backward-compatible, so it may be
removed if problems arise.
[COMPILER]
* NEW: The RAISE instruction now can raise events defined in a parent
class.
[GB.DRAW]
* NEW: Implement standard operators in Point and PointF classes.
* NEW: Automatic conversion between Point and PointF.
* NEW: 'CDraw.c' and 'CDraw.h' source files have been renamed as 'cdraw.c'
and 'cdraw.h'.
* NEW: Rect.Center() and RectF.Center() are two new methods that return the
center of the rectangle.
[GB.FORM]
* NEW: FileChooser: tar archives now can be uncompressed.
git-svn-id: svn://localhost/gambas/trunk@5359 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: Use DesltopMime.FromFile() method to handle project data files.
* BUG: Installing the Gambas fonts override the old ones that could be
already installed.
* NEW: Update the Gambas fonts.
[GB.DESKTOP]
* BUG: DesktopFile.Run() now handle programs that does not specify any
argument pattern (%u, %f, and so on) in its command description.
[GB.DRAW]
* NEW: Add a RectF class, that is a rectangle with Float coordinates.
* NEW: Add a Point class, that is just a point with two Integer
coordinates.
* NEW: Add a PointF class, that is just a point with two Float
coordinates.
[GB.GUI.BASE]
* BUG: GridView and TreeView controls should not lose any MouseDown event
anymore.
* BUG: Fix previous TreeView optimizations.
[GB.MAP]
* BUG: Rename the "map" class as "Map".
git-svn-id: svn://localhost/gambas/trunk@5354 867c0c6c-44f3-4631-809d-bfa615b0a4ec
* NEW: Move the '.SubCollection' virtual class to the gb.db. component.
[GB.DB]
* NEW: Move the '.SubCollection' virtual class to the gb.db. component.
[GB.FORM]
* BUG: TabPanel: Fix the algorithm ensuring that the current tab is
visible.
git-svn-id: svn://localhost/gambas/trunk@5326 867c0c6c-44f3-4631-809d-bfa615b0a4ec