Performance issue

Geoffroy Arnoud via xslt <[email protected]> Thu, 10 Feb 2022 13:59:58 +0100
Newsgroups gmane.comp.gnome.lib.xslt
Message-ID <[email protected]>
--===============3252938640707496124==
Content-Type: multipart/signed;
	boundary="Apple-Mail=_3CB374FB-3B59-48C5-B00B-824AC719A30B";
	protocol="application/pkcs7-signature";
	micalg=sha-256


--Apple-Mail=_3CB374FB-3B59-48C5-B00B-824AC719A30B
Content-Type: multipart/alternative;
	boundary="Apple-Mail=_93C37015-211A-4AFE-AF3B-D0E1D11F0152"


--Apple-Mail=_93C37015-211A-4AFE-AF3B-D0E1D11F0152
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8

Hello

Sorry for the very vague subject=E2=80=A6

We are facing a performance issue on a processing using Python lxml.

The legacy, running on CentOS 7, with lxml 4.3.4 / libxml 2.9.1 / =
libxslt 1.1.28 works fine (5'' to 10=E2=80=99=E2=80=99 in biggest =
use-case)

We are deploying this process to CentOS 8 Stream, which bumped our libs =
to lxml 4.7.1 / libxml 2.9.7 / libxslt 1.1.32.

And then, our Python processing time increased by a x20 factor.

After digging further, we pinned the performance issue to be in libxslt, =
by comparing the time taken by xsltproc for the same xml and xslt files =
on CentOS 7 and CentOS 8 Stream.

The xslt used is at the end of this message.

I=E2=80=99m not an expert of XSL, but is there any chance that this =
would be linked to https://gitlab.gnome.org/GNOME/libxslt/-/issues/24 =
<https://gitlab.gnome.org/GNOME/libxslt/-/issues/24> and =
https://bugzilla.gnome.org/show_bug.cgi?id=3D777432 =
<https://bugzilla.gnome.org/show_bug.cgi?id=3D777432> (fixed after =
1.1.28)?

Best regards

Geoffroy

The XSL used:

<xsl:stylesheet version=3D"1.0" =
xmlns:xsl=3D"http://www.w3.org/1999/XSL/Transform">
  <xsl:output method=3D"xml" encoding=3D"UTF-8"/>
  <xsl:param name=3D"indent-increment" select=3D"'  '"/>

  <xsl:template name=3D"newline">
    <xsl:text disable-output-escaping=3D"yes">
</xsl:text>
  </xsl:template>

  <xsl:template match=3D"comment() | processing-instruction()">
    <xsl:param name=3D"indent" select=3D"''"/>
    <xsl:call-template name=3D"newline"/>
    <xsl:value-of select=3D"$indent"/>
    <xsl:copy />
  </xsl:template>

  <xsl:template match=3D"text()">
    <xsl:param name=3D"indent" select=3D"''"/>
    <xsl:call-template name=3D"newline"/>
    <xsl:value-of select=3D"$indent"/>
    <xsl:value-of select=3D"normalize-space(.)"/>
  </xsl:template>

  <xsl:template match=3D"text()[normalize-space(.)=3D'']"/>

  <xsl:template match=3D"*">
    <xsl:param name=3D"indent" select=3D"''"/>
    <xsl:call-template name=3D"newline"/>
    <xsl:value-of select=3D"$indent"/>
      <xsl:choose>
       <xsl:when test=3D"count(child::*) > 0">
        <xsl:copy>
         <xsl:copy-of select=3D"@*"/>
         <xsl:apply-templates select=3D"*|text()">
           <xsl:with-param name=3D"indent" select=3D"concat ($indent, =
$indent-increment)"/>
         </xsl:apply-templates>
         <xsl:call-template name=3D"newline"/>
         <xsl:value-of select=3D"$indent"/>
        </xsl:copy>
       </xsl:when>
       <xsl:otherwise>
        <xsl:copy-of select=3D"."/>
       </xsl:otherwise>
     </xsl:choose>
  </xsl:template>
</xsl:stylesheet>



--Apple-Mail=_93C37015-211A-4AFE-AF3B-D0E1D11F0152
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=utf-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; =
charset=3Dutf-8"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; line-break: after-white-space;" =
class=3D"">Hello<div class=3D""><br class=3D""></div><div class=3D"">Sorry=
 for the very vague subject=E2=80=A6</div><div class=3D""><br =
class=3D""></div><div class=3D"">We are facing a performance issue on a =
processing using Python lxml.</div><div class=3D""><br =
class=3D""></div><div class=3D"">The legacy, running on CentOS 7, with =
lxml 4.3.4 / libxml 2.9.1 / libxslt 1.1.28 works fine (5'' to 10=E2=80=99=E2=
=80=99 in biggest use-case)</div><div class=3D""><br class=3D""></div><div=
 class=3D"">We are deploying this process to CentOS 8 Stream, which =
bumped our libs to lxml 4.7.1 / libxml 2.9.7 / libxslt 1.1.32.</div><div =
class=3D""><br class=3D""></div><div class=3D"">And then, our Python =
processing time increased by a x20 factor.</div><div class=3D""><br =
class=3D""></div><div class=3D"">After digging further, we pinned the =
performance issue to be in libxslt, by comparing the time taken by =
xsltproc for the same xml and xslt files on CentOS 7 and CentOS 8 =
Stream.</div><div class=3D""><br class=3D""></div><div class=3D"">The =
xslt used is at the end of this message.</div><div class=3D""><br =
class=3D""></div><div class=3D"">I=E2=80=99m not an expert of XSL, but =
is there any chance that this would be linked to&nbsp;<a =
href=3D"https://gitlab.gnome.org/GNOME/libxslt/-/issues/24" =
class=3D"">https://gitlab.gnome.org/GNOME/libxslt/-/issues/24</a>&nbsp;and=
&nbsp;<a href=3D"https://bugzilla.gnome.org/show_bug.cgi?id=3D777432" =
class=3D"">https://bugzilla.gnome.org/show_bug.cgi?id=3D777432</a>&nbsp;(f=
ixed after 1.1.28)?</div><div class=3D""><br class=3D""></div><div =
class=3D"">Best regards</div><div class=3D""><br class=3D""></div><div =
class=3D"">Geoffroy</div><div class=3D""><br class=3D""></div><div =
class=3D"">The XSL used:</div><div class=3D""><br class=3D""></div><div =
class=3D""><div class=3D"">&lt;xsl:stylesheet version=3D"1.0" =
xmlns:xsl=3D"<a href=3D"http://www.w3.org/1999/XSL/Transform" =
class=3D"">http://www.w3.org/1999/XSL/Transform</a>"&gt;</div><div =
class=3D"">&nbsp; &lt;xsl:output method=3D"xml" =
encoding=3D"UTF-8"/&gt;</div><div class=3D"">&nbsp; &lt;xsl:param =
name=3D"indent-increment" select=3D"' &nbsp;'"/&gt;</div><div =
class=3D""><br class=3D""></div><div class=3D"">&nbsp; &lt;xsl:template =
name=3D"newline"&gt;</div><div class=3D"">&nbsp; &nbsp; &lt;xsl:text =
disable-output-escaping=3D"yes"&gt;</div><div =
class=3D"">&lt;/xsl:text&gt;</div><div class=3D"">&nbsp; =
&lt;/xsl:template&gt;</div><div class=3D""><br class=3D""></div><div =
class=3D"">&nbsp; &lt;xsl:template match=3D"comment() | =
processing-instruction()"&gt;</div><div class=3D"">&nbsp; &nbsp; =
&lt;xsl:param name=3D"indent" select=3D"''"/&gt;</div><div =
class=3D"">&nbsp; &nbsp; &lt;xsl:call-template =
name=3D"newline"/&gt;</div><div class=3D"">&nbsp; &nbsp; =
&lt;xsl:value-of select=3D"$indent"/&gt;</div><div class=3D"">&nbsp; =
&nbsp; &lt;xsl:copy /&gt;</div><div class=3D"">&nbsp; =
&lt;/xsl:template&gt;</div><div class=3D""><br class=3D""></div><div =
class=3D"">&nbsp; &lt;xsl:template match=3D"text()"&gt;</div><div =
class=3D"">&nbsp; &nbsp; &lt;xsl:param name=3D"indent" =
select=3D"''"/&gt;</div><div class=3D"">&nbsp; &nbsp; =
&lt;xsl:call-template name=3D"newline"/&gt;</div><div class=3D"">&nbsp; =
&nbsp; &lt;xsl:value-of select=3D"$indent"/&gt;</div><div =
class=3D"">&nbsp; &nbsp; &lt;xsl:value-of =
select=3D"normalize-space(.)"/&gt;</div><div class=3D"">&nbsp; =
&lt;/xsl:template&gt;</div><div class=3D""><br class=3D""></div><div =
class=3D"">&nbsp; &lt;xsl:template =
match=3D"text()[normalize-space(.)=3D'']"/&gt;</div><div class=3D""><br =
class=3D""></div><div class=3D"">&nbsp; &lt;xsl:template =
match=3D"*"&gt;</div><div class=3D"">&nbsp; &nbsp; &lt;xsl:param =
name=3D"indent" select=3D"''"/&gt;</div><div class=3D"">&nbsp; &nbsp; =
&lt;xsl:call-template name=3D"newline"/&gt;</div><div class=3D"">&nbsp; =
&nbsp; &lt;xsl:value-of select=3D"$indent"/&gt;</div><div =
class=3D"">&nbsp; &nbsp; &nbsp; &lt;xsl:choose&gt;</div><div =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;&lt;xsl:when test=3D"count(child::*)=
 &gt; 0"&gt;</div><div class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; =
&lt;xsl:copy&gt;</div><div class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;&lt;xsl:copy-of select=3D"@*"/&gt;</div><div class=3D"">&nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp;&lt;xsl:apply-templates =
select=3D"*|text()"&gt;</div><div class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp;&lt;xsl:with-param name=3D"indent" select=3D"concat =
($indent, $indent-increment)"/&gt;</div><div class=3D"">&nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp;&lt;/xsl:apply-templates&gt;</div><div =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;xsl:call-template =
name=3D"newline"/&gt;</div><div class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;&lt;xsl:value-of select=3D"$indent"/&gt;</div><div class=3D"">&nbsp;=
 &nbsp; &nbsp; &nbsp; &lt;/xsl:copy&gt;</div><div class=3D"">&nbsp; =
&nbsp; &nbsp; &nbsp;&lt;/xsl:when&gt;</div><div class=3D"">&nbsp; &nbsp; =
&nbsp; &nbsp;&lt;xsl:otherwise&gt;</div><div class=3D"">&nbsp; &nbsp; =
&nbsp; &nbsp; &lt;xsl:copy-of select=3D"."/&gt;</div><div =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;&lt;/xsl:otherwise&gt;</div><div =
class=3D"">&nbsp; &nbsp; &nbsp;&lt;/xsl:choose&gt;</div><div =
class=3D"">&nbsp; &lt;/xsl:template&gt;</div><div =
class=3D"">&lt;/xsl:stylesheet&gt;</div></div><div class=3D""><br =
class=3D""></div><div class=3D""><br class=3D""></div></body></html>=

--Apple-Mail=_93C37015-211A-4AFE-AF3B-D0E1D11F0152--

--Apple-Mail=_3CB374FB-3B59-48C5-B00B-824AC719A30B
Content-Disposition: attachment;
	filename=smime.p7s
Content-Type: application/pkcs7-signature;
	name=smime.p7s
Content-Transfer-Encoding: base64

MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0BBwEAAKCCDNEw
ggXjMIIDy6ADAgECAhBK8Nish63t1eXlYQXMR38sMA0GCSqGSIb3DQEBDAUAMEYxCzAJBgNVBAYT
Ak5MMRkwFwYDVQQKExBHRUFOVCBWZXJlbmlnaW5nMRwwGgYDVQQDExNHRUFOVCBQZXJzb25hbCBD
QSA0MB4XDTIyMDIwMjAwMDAwMFoXDTI1MDIwMTIzNTk1OVowajEWMBQGA1UECRMNMjMgUnVlIERh
dmllbDEXMBUGA1UECAwOw45sZS1kZS1GcmFuY2UxCzAJBgNVBAYTAkZSMRAwDgYDVQQKEwdSZW5h
dGVyMRgwFgYDVQQDEw9HZW9mZnJveSBBUk5PVUQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQCqqW/cLFsd67+BJ6wvsv4ucim6Y+QbPwTzp9hGW/yaInlh6b7TXerbVLktFboNcbxxULXg
zVr0i/uvyz65HoTXLM3kpUAHwrLjQ8SMeKTuHRxHFmHwogEQV3UAhMhDHEKnRJ5lRX7eaKzi+e7Y
DIgyZ/O1Ii0dm0J7mz3zL+XI8AMyl2U+rSKC4FZEiSDXDF15z77JmgOT0gtmQCDvPXCUBEHMBlwp
WXr+iq5HO1I8hLYrsV1t1b4K4u6KozHd6rgutYOFsDH2TA7mfC9otYbRcWllKhCJpU6X8p1VcrsR
uDbB3TMEm4vU4najUtt+Lsmi3b8yPy0x6+Z1OqkQ48zNAgMBAAGjggGnMIIBozAfBgNVHSMEGDAW
gBRpAKHHIVj44MUbILAK3adRvxPZ5DAdBgNVHQ4EFgQUR1Yj5I4EvqD4e8aOrC505FQr5eIwDgYD
VR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwQGCCsGAQUFBwMC
MD8GA1UdIAQ4MDYwNAYLKwYBBAGyMQECAk8wJTAjBggrBgEFBQcCARYXaHR0cHM6Ly9zZWN0aWdv
LmNvbS9DUFMwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL0dFQU5ULmNybC5zZWN0aWdvLmNvbS9H
RUFOVFBlcnNvbmFsQ0E0LmNybDB4BggrBgEFBQcBAQRsMGowPQYIKwYBBQUHMAKGMWh0dHA6Ly9H
RUFOVC5jcnQuc2VjdGlnby5jb20vR0VBTlRQZXJzb25hbENBNC5jcnQwKQYIKwYBBQUHMAGGHWh0
dHA6Ly9HRUFOVC5vY3NwLnNlY3RpZ28uY29tMCUGA1UdEQQeMByBGmdlb2Zmcm95LmFybm91ZEBy
ZW5hdGVyLmZyMA0GCSqGSIb3DQEBDAUAA4ICAQBOUvc/SxW3JoWCapboIVDTN0Pu+In8hhG3BNpJ
zNiMT06k1ODywt9+gM3ttqUyhoFiliYKT7A0qdH9cT9CLBNlXhORyyI6a2kRiy/uge5s7TA2m7tn
+Kr91isdDXe09WJvp8l6Nke+Dq4dUdH+7lkk9mE0/ZdcSl2FNb2SIkkS7pfaUTqhY6dIYckM3t/i
BIgVXC4fQ3eDJvdBToKLzT9hMJ7G2FrWa8GAGLT3KOafzDpGTLHnMJpXWLRT7psBlnvWs85cpA/+
ip8InrOQ9wzq0IxcZZzc54fEd73O9tT73cLeSH/G5TK8KbsHHto748dwARnANL4jgatgYXljQzin
HvdCwEnI57AaLfvltjmY8jSPZS4PKhkDNjRkgy4IklMw1Ndn8YSgUYizmt6DT/hu1KP9nyRJpt2i
miEHN2ghMuD6TZRyPIi91YusUyOM0ah/648eCf++faqQiYNre9gsFtxXsjitnHXqZ/ioU6L9OERk
AWtGlUqCeWMLqFuoKWC4B7eWu+Oet58upHQpBgXs5g3s4sKLg8ur+l2LSPhM5zCZkTSV7eane2+5
HLda4CQxC+EoDVCRroYY/UBxzB7Mt4dSsmlIQZrTQJmxgxCza4Crjp89qURoNTJcJkYP8PRyI1Xm
47+Kbv203ITFglmvndoBGqrNg1A+7vo/P4Hi/jCCBuYwggTOoAMCAQICEDECcNQ1vpskmvhW0OHi
hUkwDQYJKoZIhvcNAQEMBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQw
EgYDVQQHEwtKZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYD
VQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTIwMDIxODAwMDAw
MFoXDTMzMDUwMTIzNTk1OVowRjELMAkGA1UEBhMCTkwxGTAXBgNVBAoTEEdFQU5UIFZlcmVuaWdp
bmcxHDAaBgNVBAMTE0dFQU5UIFBlcnNvbmFsIENBIDQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
ggIKAoICAQCzSuIiXidb6QRbFAQ1MiAUrrTSMUDGzVDAHqFEyq+eSmF/LZDeYpszai2kQsqWATz/
cBA9gGjunvJ45G48ycC4D6gwZFvbBt5JotxlunBeB8K+crGar3v+RCQ4VfvToX07v+HTJ6EeEONR
3IzJPTMyzgAwENGsAWf9va9HePQFJiChCzXqhKpp0zen53S+8f9itEy06GS8aku7Mvyb4tMBBa9A
n3Y3ALIqIeymg/iYs8m9WkSkMyekNtFRB1+1KlnNUpM05G8+sY9EucnQQRUIdHzYsvqjP3XlaSuB
4Jj0ia66UGfi5Wx31mm5sKAz8Re9UGVWIqq6wKFKxkSfuO4iwYiIPJoiGEux3dqabwFLduAroDF1
IxE40PqGIdPXzYuZ/wL6BEfFAb0xy8bfm5S9G7y/ts9mIlFpPtkLZ/nQ/iVOWdsu9ale/nK/uGF4
7xsxeW2LIvB4sH5U2+D4ad8vpNbcCrXIXXKtkBnNHgxumNNZ0R1Isq/Pz7TALCxxDzWdsM7AO32/
Jn7R4ldtGRZmKpJyfACDn8HU1QPhOtiWsjifrMWnanJhQ6K7M/5qz8BmfPrca+MUrr1Y4NHZb9Mr
gPtWKQQyGDXy+G5F/iHGdZk7LS+F8NH+Ddolt2wZpz52JqGMTDPIH5Qok4LLO95wbxtn+79Tw+wQ
xmDTuIg+LwIDAQABo4IBizCCAYcwHwYDVR0jBBgwFoAUU3m/WqorSs9UgOHYm8Cd8rIDZsswHQYD
VR0OBBYEFGkAocchWPjgxRsgsArdp1G/E9nkMA4GA1UdDwEB/wQEAwIBhjASBgNVHRMBAf8ECDAG
AQH/AgEAMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDA4BgNVHSAEMTAvMC0GBFUdIAAw
JTAjBggrBgEFBQcCARYXaHR0cHM6Ly9zZWN0aWdvLmNvbS9DUFMwUAYDVR0fBEkwRzBFoEOgQYY/
aHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VTRVJUcnVzdFJTQUNlcnRpZmljYXRpb25BdXRob3Jp
dHkuY3JsMHYGCCsGAQUFBwEBBGowaDA/BggrBgEFBQcwAoYzaHR0cDovL2NydC51c2VydHJ1c3Qu
Y29tL1VTRVJUcnVzdFJTQUFkZFRydXN0Q0EuY3J0MCUGCCsGAQUFBzABhhlodHRwOi8vb2NzcC51
c2VydHJ1c3QuY29tMA0GCSqGSIb3DQEBDAUAA4ICAQAKBU57DY8fEzkA/W/sYsbD7e0XquMBzHjc
P0eXXXRD4EAEAGCWSs+QRL9XIxmx+52zx9wMa8YTejlR+NKejiyKPTF0q63zMxrO/z/hUwo8IDcR
RLS0NSgvTW6AN2rCXJe5iLN5fIfYgIBB9cy1L6trPuZ/vjUJm87nQ7ExQzGqWN5F9U8MlAk0c5iL
anG7GCMoNjHiF1n0baj6guUeG7n5qcwOQTyDS19+NEqfwjUPUGasN1ZH8h1sE6PrzvRpti+rKzWp
iU+i2/k3l2b5fFDy+Wu9jv6R9BoBh47es/UMzwEZ2kSrIVVr4jSukk+FpmR5ZbtwiYNAV6sdb1sr
MGsILzXlrdasSE2nGHvZklk2zUdgn7b01MHq67g0mNozGmT6Dam41Kbhv25WMFs871XqwVIb4gGo
T1yRf/VePMm1jwauqijhKJFvrNweGnebGPeipaLxIo2iEA4qdRztEg/qyzWGogXK/TFdmivg322f
MPQWjQkMhRGMM8SCjlZN22L8x0ZOYoVA2rHJm5P25IjZe+HPyn7ikJiSJmqlqFmUeowXF3D1dFlC
Cs/5yC06RYRqI2REFu+28t2nswIvY6xCFAR0RtS8Mz2yXNld0js2MmiRUGrc7imWzdUPbPcv9sdU
F7SsERGPIzYL8dIiHzit+YCoGCSXMg6peF37hHNp1TGCAsowggLGAgEBMFowRjELMAkGA1UEBhMC
TkwxGTAXBgNVBAoTEEdFQU5UIFZlcmVuaWdpbmcxHDAaBgNVBAMTE0dFQU5UIFBlcnNvbmFsIENB
IDQCEErw2KyHre3V5eVhBcxHfywwDQYJYIZIAWUDBAIBBQCgggFBMBgGCSqGSIb3DQEJAzELBgkq
hkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTIyMDIxMDEyNTk1OFowLwYJKoZIhvcNAQkEMSIEIMYS
+Bd497RO5cMw324E71JAzVj7YxOTW8RTJw6+Dw+7MGkGCSsGAQQBgjcQBDFcMFowRjELMAkGA1UE
BhMCTkwxGTAXBgNVBAoTEEdFQU5UIFZlcmVuaWdpbmcxHDAaBgNVBAMTE0dFQU5UIFBlcnNvbmFs
IENBIDQCEErw2KyHre3V5eVhBcxHfywwawYLKoZIhvcNAQkQAgsxXKBaMEYxCzAJBgNVBAYTAk5M
MRkwFwYDVQQKExBHRUFOVCBWZXJlbmlnaW5nMRwwGgYDVQQDExNHRUFOVCBQZXJzb25hbCBDQSA0
AhBK8Nish63t1eXlYQXMR38sMA0GCSqGSIb3DQEBCwUABIIBAGG6i3xVWKMoTu3j00cFj9qew62K
snHq6YF9xBT9nEg0RzquGYpTaNEucwsPnYHowRgH2pdFSTjJ1Dz8pEldgiXSEsTFlgiaKLAiEot0
DRlpmrB3G5X7WzrObVsxmPdktfLb5HamMQ87YqI4OeYEXZh5Ml6ztS0+exy4sKp3nBVzAiP7biwa
y46tkxdBJe+HFsTn0MdamZfpcsb6obMbrBwZoCdZd0CWqn2Hvs5w55Kn+yVvhg/IUZRRz5zy21yL
SF2lsyruYr0g5T8Knyf2ZJaT/asHF1hhH3vQ9cu6c2CioB53OQ8wJhFY4heOFg7ZbMfkMTS6XhYt
lH83idgVqV4AAAAAAAA=
--Apple-Mail=_3CB374FB-3B59-48C5-B00B-824AC719A30B--

--===============3252938640707496124==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
xslt mailing list, project page http://xmlsoft.org/XSLT/
[email protected]
https://mail.gnome.org/mailman/listinfo/xslt

--===============3252938640707496124==--