### The function "lowerUTF8" handles some sequences of cyrillic characters incorrectly

How to reproduce:
ClickHouse server version >=22.9

execute: 
```SELECT lowerUTF8('АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ')```

this will works fine and return correct result:
> абвгдеёжзийклмнопрстуфхцчшщъыьэюя

but executing this:
```SELECT lowerUTF8('КВ АМ И СЖ')```

will result:
> кв ам и сЖ

https://fiddle.clickhouse.com/34a76c87-4dfa-4fc8-808f-376b4b7a183b

last symbol "Ж" will not convert to lower case "ж"

another example:
```SELECT lowerUTF8('ЗАДАЧИ КПЗ')```

this will result:
> задачи кПз

https://fiddle.clickhouse.com/e3c6650a-52ea-4819-ae72-fad8c838d62c

penultimate symbol "П" will not convert to lower case "п"



{
        /// а-п
        st++ = *src++;
        st++ = xor_or_identiwer>(*src++, 0x20);
    }
    else if (src[0] == 0xD0u && (src[1] >= 0xA0u && src[1] <= 0xAFu))
    {
        /// Р-Я
        st++ = xor_or_idenower>(*src++, 0x1);
        st++ = xor_or_idenower>(*src++, 0x20);
    }
    else if (src[0] == 0xD1u && (src[1] >= 0x80u && src[1] <= 0x8Fu))
    {
        /// р-я
        st++ = xor_or_identiwer>(*src++, 0x1);
        st++ = xor_or_identiwer>(*src++, 0x20);
    }
}
/** If the string contains UTF-8 encoded text, convert it to the lower (upper) case.
  * Note: It is assumed that after the character is converted to another case,
  *  the length of its multibyte sequence in UTF-8 does not change.
  * Otherwise, the behavior is undefined.
  */
template <char not_case_lower_bound,
    char not_case_upper_bound,
    int to_case(int),
    void cyrillic_to_case(const UInt8 *&, UInt8 *&)>
struct LowerUpperUTF8Impl
{
    static void vector(