expose verison words to do a more strict version check in rt-setup-database
if LANG is not english then tests got confused
Add an add_after method

This allows you to call PageMenu->child('foo') and insert
a new menu item after it from an extension without doing all the
sort_order math yourself.
Add an add_before method

This is basically a clone of add_after except it doesn't skip to the
next item before beginning to shift sort order.
These want to be refactored together somehow.
User autocomplete: Add the class autocompletes-user for easier selecting later

This is nice because it means you can select/iterate all user
autocompleters using basic jQuery / CSS.

For the bespoke implementations, I add the class from JS so that if JS
doesn't run, the elements aren't tagged incorrectly.  That really only
matters if you're selecting elements with CSS (since your custom JS
won't be running either).
User autocomplete: Override the item render to conditionally use HTML from the server

Combined with the recent ModifySuggestion callback for
/Helpers/Autocomplete/Users, this lets customizers fully affect
rendering of the autocomplete suggestions.
Ensure that I18N::LangTags::Detect only finds the "C" locale in tests

The I18N::LangTags::Detect package, which RT uses to auto-detect the
user's language preference in the browser, also looks at several
environment variables which are more commonly set on the command line.
This is only an issue during tests, as we expect the language to always
be English.

Explicitly always remove all of the environment variables which
I18N::LangTags::Detect looks at, and set LANG=C to provide a reference
point.
With the Pg FTS, catch and skip attachments which contain invalid UTF8 bytes
Strengthen wording about our ability (or lack thereof) to FTS index on Pg
If we fail to index on Pg, ensure that we continue indexing past that point

Previously, failure to index (because of invalid bytes, or too-long
content) left the content index NULL.  As our check for where to resume
indexing is based on rows where the index IS NOT NULL, this could lead
to a pessimal condition where a large number of failures to index in a
row would prevent forward progress of the indexer.
When updating "text" fields "text", don't display old and new values

Fields which are stored as "text", such as the content of templates, or
custom actions or conditions on scrips, do not benefit from displaying
"xxx changed from yyy to zzz", as yyy and zzz are generally long
multi-line blocks of text, whose newlines are stripped during HTML
rendering.

Update the message to simply say the more concise "xxx updated", which
is already a locstring in use elsewhere in RT.
Remove all whitespace separating adjacent encoded-word chunks

RFC 2047 says:

   When displaying a particular header field that contains multiple
   'encoded-word's, any 'linear-white-space' that separates a pair of
   adjacent 'encoded-word's is ignored.

Implement this by explicitly removing all such whitespace.
Join all adjacent QP encoded-word chunks, in case octets were split

Though not allowed by RFC 2047, some mail clients split multiple octets
of a multibyte encoding across different encoded-word chunks.
Reassemble adjacent encoded-word chunks into one, as long as they match
in encoding, language, and transfer encoding.  Only quoted-printable
chunks are joined, as joining base64 hunks is much more complex.
convert text part to binary when we can not decode

If we couldn't find or guess charset or if charset
is not supported or failed to parse properly then
RT was dropping email.

Now instead of dropping we set content type to
'application/octet-stream' and save original value
to X-RT-Original-Content-Type header. In this
case users can download part and deal with it.

In most cases it would be related to spam, but
there are valid charsets that are not supported
by Encode module.
test ?Q? header encoding with not supported charset
use lookahead in s/// instead of while loop
Merge branch '4.0/encoded-word-whitespace' into 4.0/unknown-email-charset
handle not supported charsets in Q/B encoded words

There is no good way to save original content. We
preserve only printable ascii characters, everything
else replaced with \x{FFFD} unicode code point.
Scrub javascript from dashboard emails rather than relying on imperfect flags

Both Outlook and Lotus render <script> tags poorly, so they're useful to
remove.
Remove the bottom margin that superfish adds to menus

This caused nearby elements, such as column headings in search results,
to not be clickable.

See http://issues.bestpractical.com/Ticket/Display.html?id=19307