Demo Discussion
Forum Config Examples Contributions Vulnerabilities
  Discussion forum about ELOG, Page 143 of 238  Not logged in ELOG logo
icon4.gif   elog client can set arbitrary values to locked attributes, posted by David Potterveld on Mon Nov 10 16:56:08 2008 

When submitting entries via the elog client, I find that I can set arbitrary values for attributes that are supposedly "preset" and "locked".

As an example, I have in my elogd.cfg file:

[global]

...

Group Operations = Accelerator

Top group ATLAS = Operations

...

[global ATLAS]

Attributes = Experiment, Author, Author Email, Category, Subject
Required Attributes = Category, Subject
Options Category = Routine entry, Shift summary, Problem, Fix, Question, Info, Other
Extendable Options = Category

Preset Experiment =
Preset Author = $long_name
Preset Author Email = $user_email
Locked Attributes = Experiment, Author, Author Email

...

[Accelerator]
Attributes = Author, Author Email, Category, Subject
Options Category = Routine entry, Shift summary, Problem, Fix, Question, Info, Other

...

This works as intended with a web client (firefox). The Author and Author Email attributes are preset and unchangeable.

However, if I use the elog client, as in:

elog -v -h my.apache-proxy.server -d elog -l Accelerator -p 443 -s -u johndoe xxxxx -a Category=LN -a Subject=Test -a Author=IDoNotExist -n 1 -m entry.txt 
(johndoe is an existing user)

 
The entry is created with "IDoNotExist" as the Author name, instead of the correct name for the user johndoe,
and the Author Email attribute is blank.

Is there a way to enforce preset and locked attributes in the elogd server? (As a client could connect
with any arbitrary software, not just elog.)



    icon2.gif   Re: elog client can set arbitrary values to locked attributes, posted by Stefan Ritt on Mon Nov 17 11:20:28 2008 

 

David Potterveld wrote:

When submitting entries via the elog client, I find that I can set arbitrary values for attributes that are supposedly "preset" and "locked".

As an example, I have in my elogd.cfg file:

[global]

...

Group Operations = Accelerator

Top group ATLAS = Operations

...

[global ATLAS]

Attributes = Experiment, Author, Author Email, Category, Subject
Required Attributes = Category, Subject
Options Category = Routine entry, Shift summary, Problem, Fix, Question, Info, Other
Extendable Options = Category

Preset Experiment =
Preset Author = $long_name
Preset Author Email = $user_email
Locked Attributes = Experiment, Author, Author Email

...

[Accelerator]
Attributes = Author, Author Email, Category, Subject
Options Category = Routine entry, Shift summary, Problem, Fix, Question, Info, Other

...

This works as intended with a web client (firefox). The Author and Author Email attributes are preset and unchangeable.

However, if I use the elog client, as in:

elog -v -h my.apache-proxy.server -d elog -l Accelerator -p 443 -s -u johndoe xxxxx -a Category=LN -a Subject=Test -a Author=IDoNotExist -n 1 -m entry.txt 
(johndoe is an existing user)

 
The entry is created with "IDoNotExist" as the Author name, instead of the correct name for the user johndoe,
and the Author Email attribute is blank.

Is there a way to enforce preset and locked attributes in the elogd server? (As a client could connect
with any arbitrary software, not just elog.)

 

Indeed "preset" and "locked" attributes are not obeyed if entries are submitted via the elog tool. The is because if you use a browser, the input form is created by elogd. If you use a locked attribute, the input filed for that attribute is not shown for example. If you use the elog tool, it directly submits an entry not knowing anything about the input form. To make this work, elog would first have to request the input form, then interprete all the HTML, figure out if an attribute is locked or not, then display an error if you try to submit that attribute. Since parsing of HTML is not implemented in elog, this is currently not possible. 

Originally I thought that this is not such a problem. Mostly elog is used to produce some automatic entries, where the authorship is of minor interest. But I guess you are afraid that one use could submit an entry under another user's name, right? Well, I hoped that in scientific collaborations nobody is that evil ;-)

Well, I will try to do something here in order to fix this. Will come back to you.

       icon2.gif   Re: elog client can set arbitrary values to locked attributes, posted by Stefan Ritt on Mon Nov 17 11:39:03 2008 

Actually I found a way around. The "Subst xxx" is evaluated after you submit an entry, so it also works for the elog tool. So all you need in your config file is:

Subst Author = $long_name

and it will do the job.

icon3.gif   thumbnails in list and entry views?, posted by Dennis Seitz on Thu Jun 5 02:06:31 2008 

It would be very cool to be able to select Full from the view menu and then scroll rapidly through all entries looking for that high res photo of a SQUID chip I took two months ago. Presently the photos are all full size so the Full view is slow to load and it takes a lot of scrolling to navigate. Can you implement thumbnails in Full view, and also in the single entry view? Clicking on the thumbnail should, of course, open the full size image.

For now, I'm just using the wysiwyg html entry format and dropping images into the entry, then right-clicking to set a small image size. Clicking on the image gives me a new window with the full size image, which works great.

I hope you don't mind the barrage of suggestions, and thanks again.

    icon2.gif   Re: thumbnails in list and entry views?, posted by Stefan Ritt on Thu Jun 5 08:25:11 2008 Capture.png

Dennis Seitz wrote:

It would be very cool to be able to select Full from the view menu and then scroll rapidly through all entries looking for that high res photo of a SQUID chip I took two months ago. Presently the photos are all full size so the Full view is slow to load and it takes a lot of scrolling to navigate. Can you implement thumbnails in Full view, and also in the single entry view? Clicking on the thumbnail should, of course, open the full size image.

For now, I'm just using the wysiwyg html entry format and dropping images into the entry, then right-clicking to set a small image size. Clicking on the image gives me a new window with the full size image, which works great.

I hope you don't mind the barrage of suggestions, and thanks again.

Thumbnail display in "full view" is implemented already. Let's take this entry: I insert a picture and scale it down via the "smaller" button:

Capture.png

Now if you display this forum in full view, the image is still shown as a thumbnail, which you are able to click in order to get the full resolution display. I don't know what is different in your case, maybe you are using an oder version of ELOG?

       icon2.gif   Re: thumbnails in list and entry views?, posted by Dennis Seitz on Mon Nov 10 19:10:44 2008 

 

Stefan Ritt wrote:

 

Dennis Seitz wrote:

It would be very cool to be able to select Full from the view menu and then scroll rapidly through all entries looking for that high res photo of a SQUID chip I took two months ago. Presently the photos are all full size so the Full view is slow to load and it takes a lot of scrolling to navigate. Can you implement thumbnails in Full view, and also in the single entry view? Clicking on the thumbnail should, of course, open the full size image.

For now, I'm just using the wysiwyg html entry format and dropping images into the entry, then right-clicking to set a small image size. Clicking on the image gives me a new window with the full size image, which works great.

I hope you don't mind the barrage of suggestions, and thanks again.

 

Thumbnail display in "full view" is implemented already. Let's take this entry: I insert a picture and scale it down via the "smaller" button:

Capture.png

Now if you display this forum in full view, the image is still shown as a thumbnail, which you are able to click in order to get the full resolution display. I don't know what is different in your case, maybe you are using an oder version of ELOG?

 

 Sorry for the delayed reply.

Ideally I'd like a config setting so that by default all graphics are presented at a fixed thumbnail size, so the users don't have to edit the image size every time they add one. Clicking on the thumbnail would open the image full size.

This would by default streamline loading and scanning through pages with many large images, whether in Full view of an entire logbook, or when viewing individual entries.

 

          icon2.gif   Re: thumbnails in list and entry views?, posted by Stefan Ritt on Mon Nov 17 11:10:24 2008 
Dennis Seitz wrote:

Sorry for the delayed reply.

Ideally I'd like a config setting so that by default all graphics are presented at a fixed thumbnail size, so the users don't have to edit the image size every time they add one. Clicking on the thumbnail would open the image full size.

This would by default streamline loading and scanning through pages with many large images, whether in Full view of an entire logbook, or when viewing individual entries.

Have you tried Thumbnail size = xxx in your config file?

icon1.gif   Show/Hide links are displayed but don't work if Show attachments = 0, posted by Dennis Seitz on Mon Nov 10 19:40:43 2008 

If I add this statement to a logbook config file:

Show attachments = 0

When viewing and individual entry, attached images are not displayed, which is as intended, but the links Show/Hide and Show All/Hide All are still displayed although they do nothing when clicked except switch between Show and Hide. Clicking on an image opens it in a separate window.

Could you make show/hide and show/hide all work? This way, by default the images are not displayed, but the default could be overridden on a case by case basis as desired, and the images displayed inline in the same window with the entry. 

Thanks!

 

    icon2.gif   Re: Show/Hide links are displayed but don't work if Show attachments = 0, posted by Stefan Ritt on Mon Nov 17 11:06:29 2008 

 

Dennis Seitz wrote:

If I add this statement to a logbook config file:

Show attachments = 0

When viewing and individual entry, attached images are not displayed, which is as intended, but the links Show/Hide and Show All/Hide All are still displayed although they do nothing when clicked except switch between Show and Hide. Clicking on an image opens it in a separate window.

Could you make show/hide and show/hide all work? This way, by default the images are not displayed, but the default could be overridden on a case by case basis as desired, and the images displayed inline in the same window with the entry. 

 

Very good idea! I changed that in ELOG V2.7.5-2139. The fix will be contained in the next release.

icon1.gif   Proxy Error, posted by Glen MacLachlan on Wed Nov 5 20:37:37 2008 

A problem recently developed for our elog...after running without much problem the elog daemon was restarted on an ubuntu server running apache2. Now the server gives 502 Proxy Error messages:

 

Proxy Error

The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /elog.

Reason: Error reading from remote server

I did a force-reload of apache after making sure the modules are enabled. I also restarted elogd but to no avail. One symptom seems to be that the GET request is empty...that is before it was:

"GET /elog/sample_elog/etcetera HTTP/1.1"

but now it is just

"GET /elog HTTP/1.1"

 

Just started out of the blue...

 

Any ideas?

    icon2.gif   Re: Proxy Error, posted by Stefan Ritt on Thu Nov 6 08:11:57 2008 

 

Glen MacLachlan wrote:

A problem recently developed for our elog...after running without much problem the elog daemon was restarted on an ubuntu server running apache2. Now the server gives 502 Proxy Error messages:

 

Proxy Error

The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /elog.

Reason: Error reading from remote server

I did a force-reload of apache after making sure the modules are enabled. I also restarted elogd but to no avail. One symptom seems to be that the GET request is empty...that is before it was:

"GET /elog/sample_elog/etcetera HTTP/1.1"

but now it is just

"GET /elog HTTP/1.1"

 

Just started out of the blue...

 

Any ideas?

 

 I have a similar problem when I restart the elogd daemon. To fix that, I usually also restart Apache.

icon3.gif   Server derived time, posted by Grant Jeffcote on Thu Oct 23 10:21:06 2008 

Hi Stefan,

Is it possible to derive the time in a 'date/time' attribute from the Elog server?
We would like all our entries in GMT/UTC time and unfortunately as the time is currently derived from the client machines there are often entry descrepancies if the regional settings are not set correctly.

The '$entry time' variable can be used but seems to put a 1970 date in the field so bears no relevancy to an 'Event' time?

I'm also having issues with conditional entries in the Find page. If a conditional statement is used to hide attributes or change displayed attributes in the entry page then the attribute that is used in the conditional statement is not permanently selectable in the 'Find' page. It is available as a choice but as soon as selected the conditional action removes it? Is it possible to make conditional options/actions in the 'Find' page optional?

Hope that makes a little sense?

Many thanks

    icon2.gif   Re: Server derived time, posted by Stefan Ritt on Thu Oct 30 03:30:59 2008 

 

Grant Jeffcote wrote:

Hi Stefan,

Is it possible to derive the time in a 'date/time' attribute from the Elog server?
We would like all our entries in GMT/UTC time and unfortunately as the time is currently derived from the client machines there are often entry descrepancies if the regional settings are not set correctly.

The '$entry time' variable can be used but seems to put a 1970 date in the field so bears no relevancy to an 'Event' time?

I'm also having issues with conditional entries in the Find page. If a conditional statement is used to hide attributes or change displayed attributes in the entry page then the attribute that is used in the conditional statement is not permanently selectable in the 'Find' page. It is available as a choice but as soon as selected the conditional action removes it? Is it possible to make conditional options/actions in the 'Find' page optional?

Hope that makes a little sense?

Many thanks

 

There are several methods to get the server time:

 

Via presets of attributes

Attributes = Author, Event time, ...
Preset Event time = $utcdate

which gives you actually the UTC time.

 

Via the editor

The editor toolbar contains a little clock. If you click on it, you insert the current server time (but localized, not UTC).

 

Hope one of the two methods work for you.

The problem with the conditional attributes in the find page is I believe fixed in the current version.

       icon14.gif   Re: Server derived time, posted by Grant Jeffcote on Thu Oct 30 08:39:34 2008 

Stefan Ritt wrote:

 

Grant Jeffcote wrote:

Hi Stefan,

Is it possible to derive the time in a 'date/time' attribute from the Elog server?
We would like all our entries in GMT/UTC time and unfortunately as the time is currently derived from the client machines there are often entry descrepancies if the regional settings are not set correctly.

The '$entry time' variable can be used but seems to put a 1970 date in the field so bears no relevancy to an 'Event' time?

I'm also having issues with conditional entries in the Find page. If a conditional statement is used to hide attributes or change displayed attributes in the entry page then the attribute that is used in the conditional statement is not permanently selectable in the 'Find' page. It is available as a choice but as soon as selected the conditional action removes it? Is it possible to make conditional options/actions in the 'Find' page optional?

Hope that makes a little sense?

Many thanks

 

There are several methods to get the server time:

 

Via presets of attributes

Attributes = Author, Event time, ...
Preset Event time = $utcdate

which gives you actually the UTC time.

 

Via the editor

The editor toolbar contains a little clock. If you click on it, you insert the current server time (but localized, not UTC).

 

Hope one of the two methods work for you.

The problem with the conditional attributes in the find page is I believe fixed in the current version.

Thanks Stefan, the preset UTC date works well. RTFM on my part perhaps.

I'm running version 2.7.5.2127 and am still having the issue with conditional attributes in the find area as mentioned above though.
Is it the latest SVN  **.2135 that addresses this?

Many thanks

          icon2.gif   Re: Server derived time, posted by Stefan Ritt on Mon Nov 3 13:15:52 2008 
Grant Jeffcote wrote:

I'm also having issues with conditional entries in the Find page. If a conditional statement is used to hide attributes or change displayed attributes in the entry page then the attribute that is used in the conditional statement is not permanently selectable in the 'Find' page. It is available as a choice but as soon as selected the conditional action removes it? Is it possible to make conditional options/actions in the 'Find' page optional?

Hope that makes a little sense?

Many thanks

 

Many people want conditional attributes on the find page, so I cannot remove it. Before adding another parameter to disable this optionally, I would like to ask you to first try the "Show attributes edit = ..." option, which is not evaluated in the "find" page. Maybe you can achieve what you want with this option.

icon5.gif   (How) can I hide columns in List view?, posted by T. Ribbrock on Mon Oct 20 15:32:19 2008 

Originally, all information about our machines was stored in a spreadsheet with one sheet for the hardware of the machines and one for the software. By now, I've sucessfully moved the software part to an elog logbook and am now looking at transferring the hardware part as well.

As both lists are machine-name based, one of the options would be to merge both lists, as this would place all machine-related info into one logbook. The downside of this is that I get so many columns in list view that the result is quite unwieldy. Hence, I would like to hide some columns - ideally creating a "hardware view" and a "software view".

From the documentation, the only option I could find that seemed suitable was "List conditions". Unfortunately, I do not quite understand from the manual how this is supposed to work, so I'm quite possibly doing something wrong. I've tried this:

; General settings
List conditions = 1

; Attributes
Attributes = Type, Created, StatusA, StatusB, Archived

; Options & Tooltips
Options Type = Type1{10}, Type2{11}

; Conditionals
{10}List display = Edit, Type, Created, Status
{11}List display = Edit, Type, Created, StatusA, StatusB, Archived

but no matter how I set "Type", it does not seem to have any effect on the List display. One thing I don't understand for example is how does elog decide in List view which entry sets the condition? If all entries are set to the same value (in this example e.g. "Type1")? The first entry? Or am I missing something altogether?

Also, if there are alternative ways how I could accomplish my goal, I'd also be most grateful for suggestions.

Thanks in advance,

Thomas

    icon13.gif   Re: (How) can I hide columns in List view?, posted by T. Ribbrock on Thu Oct 23 11:45:51 2008 

T. Ribbrock wrote:
[...]

One thing I don't understand for example is how does elog decide in List view which entry sets the condition? If all entries are set to the same value (in this example e.g. "Type1")? The first entry? Or am I missing something altogether?

[...]

 By now, I'm one step further. List conditions = 1 does have some effect in some cases - the following works:

Options Type = Type1{10}, Type2{11}
Options StatusA = Status-A-red, Status-A-orange, Status-A
{10}Style StatusA Status-A-red = background-color:red
{11}Style StatusA Status-A-red = background-color:green

This seems to get evaluated "top-down", i.e. the value of "Type" in the first row in the list sets the handling of StatusA and the background-color, the second row for the third and so on. Unfortunately, this really only depends on the order of the rows on the screen - if I sort the list differently, I get a different result.

I am also quite certain that List conditions = 1 has no effect whatsover on List display - which is what I was hoping for.

Hence, I'd like to repeat my question: Is there any way to hide columns in List view (short of editing the conf file...) - and if so, how?

Regards,

Thomas

    icon2.gif   Re: (How) can I hide columns in List view?, posted by Stefan Ritt on Thu Oct 30 04:17:09 2008 

 

T. Ribbrock wrote:

Originally, all information about our machines was stored in a spreadsheet with one sheet for the hardware of the machines and one for the software. By now, I've sucessfully moved the software part to an elog logbook and am now looking at transferring the hardware part as well.

As both lists are machine-name based, one of the options would be to merge both lists, as this would place all machine-related info into one logbook. The downside of this is that I get so many columns in list view that the result is quite unwieldy. Hence, I would like to hide some columns - ideally creating a "hardware view" and a "software view".

From the documentation, the only option I could find that seemed suitable was "List conditions". Unfortunately, I do not quite understand from the manual how this is supposed to work, so I'm quite possibly doing something wrong. I've tried this:

; General settings
List conditions = 1

; Attributes
Attributes = Type, Created, StatusA, StatusB, Archived

; Options & Tooltips
Options Type = Type1{10}, Type2{11}

; Conditionals
{10}List display = Edit, Type, Created, Status
{11}List display = Edit, Type, Created, StatusA, StatusB, Archived

but no matter how I set "Type", it does not seem to have any effect on the List display. One thing I don't understand for example is how does elog decide in List view which entry sets the condition? If all entries are set to the same value (in this example e.g. "Type1")? The first entry? Or am I missing something altogether?

Also, if there are alternative ways how I could accomplish my goal, I'd also be most grateful for suggestions.

Thanks in advance,

Thomas

 

 Indeed you got something wrong. The conditional attributes are meant for the input form, so you can turn some attributes on and off or choose different options for an attribute depending on the value of another attribute.

The only way I see how you can achieve what you want is to define two separate logbooks, but serve them from the same directory (via the "Data dir" option). Both logbooks should share the same attribute definition, but use different "List display" options.

       icon3.gif   Re: (How) can I hide columns in List view?, posted by T. Ribbrock on Thu Oct 30 09:44:25 2008 

Thanks for the response! BTW: I did get a notification - but thanks for the "personal heads-up"!

Stefan Ritt wrote:

 Indeed you got something wrong. The conditional attributes are meant for the input form, so you can turn some attributes on and off or choose different options for an attribute depending on the value of another attribute.

[...]

 I see. In that case, could you maybe please give a quick explanation what "List conditions" is supposed to do? In conjunction with your statement above I'm now thoroughly confused as to what it should/could be used for...

Stefan Ritt wrote:

[...]

The only way I see how you can achieve what you want is to define two separate logbooks, but serve them from the same directory (via the "Data dir" option). Both logbooks should share the same attribute definition, but use different "List display" options.

 Ah, that's an idea - I'll look into that. Thanks a mil for the suggestion!

Regards,

Thomas

          icon14.gif   Re: (How) can I hide columns in List view?, posted by T. Ribbrock on Thu Oct 30 11:05:11 2008 

Stefan Ritt wrote:

[...]

The only way I see how you can achieve what you want is to define two separate logbooks, but serve them from the same directory (via the "Data dir" option). Both logbooks should share the same attribute definition, but use different "List display" options.

 I take it you mean the "Subdir" option (the manual mentions "Data dir" as obsolete)? I tried it with that and it works like a charm - gives me now two logbooks, i.e. two tabs with the same data and two different views - which is precisely what we need. Thanks!

Regards,

Thomas

icon13.gif   Error Message During Uploads, posted by Kevin O'Sullivan on Mon Oct 13 17:02:17 2008 

We've been having toruble with uploads not working and I notice that every time someone uploads to our elog the same error message appears in /var/log/syslog:

Cannot restore original GID/UID.

How can I fix thsi error? Or, perhaps more importantly, could it cause elog to "lock up" (note, it doesn't crash)?

I'm runing elog on Ubuntu kernel version 2.6.24-server.

    icon2.gif   Re: Error Message During Uploads, posted by Stefan Ritt on Thu Oct 30 04:33:43 2008 

 

Kevin O'Sullivan wrote:

We've been having toruble with uploads not working and I notice that every time someone uploads to our elog the same error message appears in /var/log/syslog:

Cannot restore original GID/UID.

How can I fix thsi error? Or, perhaps more importantly, could it cause elog to "lock up" (note, it doesn't crash)?

I'm runing elog on Ubuntu kernel version 2.6.24-server.

 

 Probably something is wrong with the account under which you run elog. Normally (at least if you install elog from the RPM) you have an account "elog" and group "elog" under which you run elogd. You compile and install elogd under root (so that it can bind to port 80 for example), and then you put 

usr = elog
grp = elog

into the configuration file. So when you start elogd, it binds to the server port, then falls down to user "elog" and gives up root privileges. If the elog account for example does not exist, you get the above error message. The only problem I see there is if elog stays as root, it can do more harmful things in case it misbehaves.

icon4.gif   elogd crashes when creating new logbook using existing logbook as template, posted by David Potterveld on Thu Oct 23 23:45:01 2008 elogd.cfg
elogd is crashing with a segv when I try to create a new logbook by clicking the "Create new logbook" button
with an existing logbook selected in the dropdown list as a template. I've attached my config file for
reference. As a specific example, I'm logged in as the admin user, viewing logbook "1248", which has no entries,
and I click "Config" -> "Change config file" -> "Create new logbook", Select "1248" from dropdown list, enter
"1250" for the new logbook name, and click "Create new logbook".

The server crashes, and my web browser has the following as the (incorrect) URL it's trying to load:
(Incorrect because the "/ATLAS" shouldn't be there.)

https://localhost:8080/ATLAS/1250/?cmd=Config

Nevertheless, the config file and logbook directory are properly modified for the new logbook, and on restarting
the server, everything is fine.

Oh, just noticed that if I manually enter the URL:

https://localhost:8080/ATLAS/1250/

or actually, any text in place of the "1250", it also crashes the elogd process. So, perhaps there are two bugs?

(1) Incorrect URL being given to the web client after logbook creation
(2) Requesting any incorrect URL of this form crashes elogd
    icon2.gif   Re: elogd crashes when creating new logbook using existing logbook as template, posted by Stefan Ritt on Thu Oct 30 03:10:00 2008 
> elogd is crashing with a segv when I try to create a new logbook by clicking the "Create new logbook" button
> with an existing logbook selected in the dropdown list as a template. I've attached my config file for
> reference. As a specific example, I'm logged in as the admin user, viewing logbook "1248", which has no entries,
> and I click "Config" -> "Change config file" -> "Create new logbook", Select "1248" from dropdown list, enter
> "1250" for the new logbook name, and click "Create new logbook".
> 
> The server crashes, and my web browser has the following as the (incorrect) URL it's trying to load:
> (Incorrect because the "/ATLAS" shouldn't be there.)
> 
> https://localhost:8080/ATLAS/1250/?cmd=Config
> 
> Nevertheless, the config file and logbook directory are properly modified for the new logbook, and on restarting
> the server, everything is fine.
> 
> Oh, just noticed that if I manually enter the URL:
> 
> https://localhost:8080/ATLAS/1250/
> 
> or actually, any text in place of the "1250", it also crashes the elogd process. So, perhaps there are two bugs?
> 
> (1) Incorrect URL being given to the web client after logbook creation
> (2) Requesting any incorrect URL of this form crashes elogd

This problems have been fixed in SVN revision 2135.
ELOG V3.1.5-3fb85fa6