From mboxrd@z Thu Jan 1 00:00:00 1970 From: Victor Kirhenshtein Subject: Re: [BUG] libxl_ctx_free calls close(0) Date: Fri, 21 Jul 2017 13:18:52 +0300 Message-ID: <1500632332.21753.2.camel@radensolutions.com> References: <1500572188.3939.15.camel@radensolutions.com> <20170721082038.hkgunhhhwywwz3ur@citrix.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============4667868062948914982==" Return-path: In-Reply-To: <20170721082038.hkgunhhhwywwz3ur@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Wei Liu Cc: Ian Jackson , xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org --===============4667868062948914982== Content-Type: multipart/signed; micalg="sha-256"; protocol="application/x-pkcs7-signature"; boundary="=-HzkMZJMjZ/LOR5MrJJoh" --=-HzkMZJMjZ/LOR5MrJJoh Content-Type: multipart/alternative; boundary="=-OoskAHVJTz9fH8J96y7g" --=-OoskAHVJTz9fH8J96y7g Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 SXQgaXPCoDQuNC4xICg0LjQuMS05K2RlYjh1OSBmcm9tIERlYmlhbiA4IHJlcG9zaXRvcnkpLiBM b29rcyBsaWtlCkRlYmlhbiBqdXN0IGhhdmUgdG9vIG9sZCB2ZXJzaW9uIGluIHJlcG9zaXRvcnku IFByb2JsZW0gaXMgbm90CnJlcHJvZHVjZXMgb27CoDQuNi41LgpCZXN0IHJlZ2FyZHMsClZpY3Rv ciBLaXJoZW5zaHRlaW4KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KRnJvbTogV2VpIExpdSA8 d2VpLmxpdTJAY2l0cml4LmNvbT4KVG86IFZpY3RvciBLaXJoZW5zaHRlaW4gPHZpY3RvckByYWRl bnNvbHV0aW9ucy5jb20+CkNjOiB4ZW4tZGV2ZWxAbGlzdHMueGVuLm9yZywgV2VpIExpdSA8d2Vp LmxpdTJAY2l0cml4LmNvbT4sIElhbiBKYWNrc29uCjxJYW4uSmFja3NvbkBldS5jaXRyaXguY29t PgpTdWJqZWN0OiBSZTogW1hlbi1kZXZlbF0gW0JVR10gbGlieGxfY3R4X2ZyZWUgY2FsbHMgY2xv c2UoMCkKRGF0ZTogRnJpLCAyMSBKdWwgMjAxNyAwOToyMDozOCArMDEwMApDQyBJYW4gSmFja3Nv bgpJIGRvbid0IGtub3cgd2hpY2ggdmVyc2lvbiBvZiBYZW4geW91J3JlIHVzaW5nLiBDYW4geW91 IGNoZWNrIGlmIGl0CmNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgY29tbWl0Pwpjb21taXQgZmExM2Y3 YjBjMGYzZDAxNzQxZTM1ZDU3MzAwOTUwM2MzYmY3YjZhNgpBdXRob3I6wqDCoMKgwqDCoEFuZHJl dyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+CkF1dGhvckRhdGU6IE1vbiBBdWcg MTggMTQ6MDI6MzcgMjAxNCArMDEwMApDb21taXQ6wqDCoMKgwqDCoElhbiBDYW1wYmVsbCA8aWFu LmNhbXBiZWxsQGNpdHJpeC5jb20+CkNvbW1pdERhdGU6IFdlZCBBdWcgMjcgMDI6MzA6MjUgMjAx NCArMDEwMArCoMKgwqDCoHRvb2xzL2xpYnhsOiBJbml0aWFsaXNlIGJvdGggcGFydHMgb2YgY3R4 LT5zaWdjaGxkX3NlbGZwaXBlW10gdG8gLTEKwqDCoMKgwqBPdGhlcndpc2UsIGlmIGl0IGlzIG5v dCB1c2VkLCBsaWJ4bF9jdHhfZnJlZSgpIHdpbGwgY2xvc2UgZmQgMC4KwqDCoMKgwqBSZXBvcnRl ZC1ieTogQWxleCBCbGlnaCA8YWxleEBhbGV4Lm9yZy51az4KwqDCoMKgwqBTaWduZWQtb2ZmLWJ5 OiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgrCoMKgwqDCoENDOiBJ YW4gQ2FtcGJlbGwgPElhbi5DYW1wYmVsbEBjaXRyaXguY29tPgrCoMKgwqDCoENDOiBJYW4gSmFj a3NvbiA8SWFuLkphY2tzb25AZXUuY2l0cml4LmNvbT4KwqDCoMKgwqBBY2tlZC1ieTogSWFuIENh bXBiZWxsIDxpYW4uY2FtcGJlbGxAY2l0cml4LmNvbT4KT24gVGh1LCBKdWwgMjAsIDIwMTcgYXQg MDg6MzY6MjhQTSArMDMwMCwgVmljdG9yIEtpcmhlbnNodGVpbiB3cm90ZToKPiAKPiBIZWxsbywK PiAKPiBpdCBzZWVtcyB0aGF0IGxpYnhsX2N0eF9mcmVlIGFsd2F5cyBjYWxscyBjbG9zZSgwKSBm b3Igc29tZQo+IHJlYXNvbiwgZXZlbiBpZiBsaWJ4bCBuZXZlciBvcGVucyBmaWxlIGRlc2NyaXB0 b3IgMC4gSXQgc29tZXRpbWVzCj4gY2xvc2VzIHZhbGlkIGRlc2NyaXB0b3IgaW4gYXBwbGljYXRp b24gY2F1c2luZyByYW5kb20gYW5kCj4gaGFyZCB0byBkZWJ1ZyBJL08gZXJyb3JzLgo+IAo+IFRo ZSBmb2xsb3dpbmcgc2ltcGxlIHByb2dyYW0gY2FuIGJlIHVzZWQgdG8gcmVwcm9kdWNlIHRoaXMg YnVnOgo+IAo+ICNpbmNsdWRlIDxzdGRpby5oPgo+ICNpbmNsdWRlIDxsaWJ4bC5oPgo+IAo+IHN0 YXRpYyB2b2lkIExvZ01lc3NhZ2Uoc3RydWN0IHhlbnRvb2xsb2dfbG9nZ2VyICpsb2dnZXIsCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVudG9vbGxvZ19sZXZl bCBsZXZlbCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQg ZXJybm92YWwgLyogb3IgLTEgKi8sCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgY29uc3QgY2hhciAqY29udGV4dCAvKiBlZyAieGMiLCAieGwiLCBtYXkgYmUgMAo+ ICovLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0IGNo YXIgKmZvcm1hdCAvKiB3aXRob3V0IGxldmVsLCBjb250ZXh0LCBcbgo+ICovLAo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhX2xpc3QgYWwpCj4gewo+IH0KPiAK PiBzdGF0aWMgdm9pZCBMb2dQcm9ncmVzcyhzdHJ1Y3QgeGVudG9vbGxvZ19sb2dnZXIgKmxvZ2dl ciwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFy ICpjb250ZXh0IC8qIHNlZSBhYm92ZSAqLywKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpkb2luZ193aGF0IC8qIG5vIFxyLFxuICovLAo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCBwZXJjZW50LCB1bnNp Z25lZCBsb25nIGRvbmUsIHVuc2lnbmVkIGxvbmcKPiB0b3RhbCkKPiB7Cj4gfQo+IAo+IHN0YXRp YyB2b2lkIExvZ0Rlc3Ryb3koc3RydWN0IHhlbnRvb2xsb2dfbG9nZ2VyICpsb2dnZXIpCj4gewo+ IH0KPiAKPiAKPiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+IHsKPiDCoMKgwqB4 ZW50b29sbG9nX2xvZ2dlciBsb2dnZXI7Cj4gwqDCoMKgbG9nZ2VyLnZtZXNzYWdlID0gTG9nTWVz c2FnZTsKPiDCoMKgwqBsb2dnZXIucHJvZ3Jlc3MgPSBMb2dQcm9ncmVzczsKPiDCoMKgwqBsb2dn ZXIuZGVzdHJveSA9IExvZ0Rlc3Ryb3k7Cj4gCj4gwqDCoMKgbGlieGxfY3R4ICpjdHg7Cj4gwqDC oMKgaW50IHJjID0gbGlieGxfY3R4X2FsbG9jKCZjdHgsIExJQlhMX1ZFUlNJT04sIDAsICZsb2dn ZXIpOwo+IMKgwqDCoGlmIChyYyAhPSAwKQo+IMKgwqDCoHsKPiDCoMKgwqDCoMKgwqBwcmludGYo ImxpYnhsX2N0eF9hbGxvYyBmYWlsZWQgKCVkKVxuIiwgcmMpOwo+IMKgwqDCoMKgwqDCoHJldHVy biAxOwo+IMKgwqDCoH0KPiAKPiAKPiDCoMKgwqBsaWJ4bF9jdHhfZnJlZShjdHgpOwo+IMKgwqDC oHJldHVybiAwOwo+IH0KPiAKPiBTdHJhY2Ugb3V0cHV0IGZvciBpdCBpcyBmb2xsb3dpbmcgKEkg b21pdCBzaGFyZWQgbGlicmFyecKgCj4gbG9hZGluZyBvbiBzdGFydHVwKToKPiAKPiBzZXRfdGlk X2FkZHJlc3MoMHg3Zjc4N2RiMjlhNTApwqDCoMKgwqDCoMKgwqDCoMKgPSAxNzk0NAo+IHNldF9y b2J1c3RfbGlzdCgweDdmNzg3ZGIyOWE2MCwgMjQpwqDCoMKgwqDCoD0gMAo+IHJ0X3NpZ2FjdGlv bihTSUdSVE1JTiwgezB4N2Y3ODdjNDgwOWIwLCBbXSwgU0FfUkVTVE9SRVJ8U0FfU0lHSU5GTywK PiAweDdmNzg3YzQ4OTg5MH0sIE5VTEwsIDgpID0gMAo+IHJ0X3NpZ2FjdGlvbihTSUdSVF8xLCB7 MHg3Zjc4N2M0ODBhNDAsIFtdLAo+IFNBX1JFU1RPUkVSfFNBX1JFU1RBUlR8U0FfU0lHSU5GTywg MHg3Zjc4N2M0ODk4OTB9LCBOVUxMLCA4KSA9IDAKPiBydF9zaWdwcm9jbWFzayhTSUdfVU5CTE9D SywgW1JUTUlOIFJUXzFdLCBOVUxMLCA4KSA9IDAKPiBnZXRybGltaXQoUkxJTUlUX1NUQUNLLCB7 cmxpbV9jdXI9ODE5MioxMDI0LAo+IHJsaW1fbWF4PVJMSU02NF9JTkZJTklUWX0pCj4gPSAwCj4g YnJrKDApwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqA9IDB4MTU2ZDAwMAo+IGJyaygweDE1OGUwMDApwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0gMHgxNThlMDAwCj4gcGlw ZShbMywgNF0pwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqA9IDAKPiBmY250bCgzLCBGX0dFVEZMKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqA9IDAgKGZsYWdzIE9fUkRPTkxZKQo+IGZjbnRsKDMsIEZfU0VU RkwsIE9fUkRPTkxZfE9fTk9OQkxPQ0spwqDCoD0gMAo+IGZjbnRsKDQsIEZfR0VURkwpwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0gMHgxIChmbGFncyBPX1dS T05MWSkKPiBmY250bCg0LCBGX1NFVEZMLCBPX1dST05MWXxPX05PTkJMT0NLKcKgwqA9IDAKPiBv cGVuKCIvcHJvYy94ZW4vcHJpdmNtZCIsIE9fUkRXUinCoMKgwqDCoMKgwqDCoD0gNQo+IGZjbnRs KDUsIEZfR0VURkQpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oD0gMAo+IGZjbnRsKDUsIEZfU0VURkQsIEZEX0NMT0VYRUMpwqDCoMKgwqDCoMKgwqDCoMKgwqDC oD0gMAo+IHN0YXQoIi92YXIvcnVuL3hlbnN0b3JlZC9zb2NrZXQiLCB7c3RfbW9kZT1TX0lGU09D S3wwNjAwLCBzdF9zaXplPTAsCj4gLi4ufSkgPSAwCj4gc29ja2V0KFBGX0xPQ0FMLCBTT0NLX1NU UkVBTSwgMCnCoMKgwqDCoMKgwqDCoMKgPSA2Cj4gZmNudGwoNiwgRl9HRVRGRCnCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSAwCj4gZmNudGwoNiwgRl9TRVRG RCwgRkRfQ0xPRVhFQynCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSAwCj4gY29ubmVjdCg2LCB7c2Ff ZmFtaWx5PUFGX0xPQ0FMLAo+IHN1bl9wYXRoPSIvdmFyL3J1bi94ZW5zdG9yZWQvc29ja2V0In0s Cj4gMTEwKSA9IDAKPiBjbG9zZSg1KcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IDAKPiBjbG9zZSg2KcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IDAKPiBj bG9zZSgzKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqA9IDAKPiBjbG9zZSg0KcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IDAKPiBjbG9zZSgwKcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9 IDAKPiBleGl0X2dyb3VwKDApwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgPSA/Cj4gKysrIGV4aXRlZCB3aXRoIDAgKysrCj4gCj4gQmVzdCByZWdh cmRzLAo+IFZpY3RvciBLaXJoZW5zaHRlaW4KPiAKPiAKPiBfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwo+IFhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKPiBYZW4t ZGV2ZWxAbGlzdHMueGVuLm9yZwo+IGh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWw= --=-OoskAHVJTz9fH8J96y7g Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable
It is 4.4.1 (4.4.1-9+deb8u9 from Debian = 8 repository). Looks like Debian just have too old version in repository. P= roblem is not reproduces on 4.6.5.

Best regar= ds,
Victor Kirhenshtein

-----Original Me= ssage-----
From: Wei Liu <wei.liu2@citrix.com>
To= : Victor Kirhenshtein <victor@radensolutions.com>
Subject: Re: [Xen-devel] [BUG] libxl_ctx_free calls close(0)
Date: Fri, 21 Jul 2017 09:20:38 +0100

CC Ian Jackson I don't know which version of Xen you're using. Can you check if it contains the following commit? commit fa13f7b0c0f3d01741e35d573009503c3bf7b6a6 Author: Andrew Cooper <= andrew.cooper3@citrix.com> AuthorDate: Mon Aug 18 14:02:37 2014 +0100 Commit: Ian Campbell <ian= .campbell@citrix.com> CommitDate: Wed Aug 27 02:30:25 2014 +0100 tools/libxl: Initialise both parts of ctx->sigchld_selfpipe[] to -1 Otherwise, if it is not used, libxl_ctx_free() will close fd 0. Reported-by: Alex Bligh <alex@al= ex.org.uk> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> CC: Ian Campbell <Ian.Cam= pbell@citrix.com> CC: Ian Jackson <Ian.Ja= ckson@eu.citrix.com> Acked-by: Ian Campbell <i= an.campbell@citrix.com> On Thu, Jul 20, 2017 at 08:36:28PM +0300, Victor Kirhenshtein wrote:
Hello, it seems that libxl_ctx_free always calls close(0) for some reason, even if libxl never opens file descriptor 0. It sometimes closes valid descriptor in application causing random and hard to debug I/O errors. The following simple program can be used to reproduce this bug: #include <stdio.h> #include <libxl.h> static void LogMessage(struct xentoollog_logger *logger,             &nb= sp;        xentoollog_level level,             &nb= sp;        int errnoval /* or -1 */= ,             &nb= sp;        const char *context /* e= g "xc", "xl", may be 0 */,             &nb= sp;        const char *format /* wi= thout level, context, \n */,             &nb= sp;        va_list al) { } static void LogProgress(struct xentoollog_logger *logger,             &nb= sp;        const char *context /* s= ee above */,             &nb= sp;        const char *doing_what /= * no \r,\n */,             &nb= sp;        int percent, unsigned lo= ng done, unsigned long total) { } static void LogDestroy(struct xentoollog_logger *logger) { } int main(int argc, char *argv[]) {    xentoollog_logger logger;    logger.vmessage =3D LogMessage;    logger.progress =3D LogProgress;    logger.destroy =3D LogDestroy;    libxl_ctx *ctx;    int rc =3D libxl_ctx_alloc(&ctx, LIBXL_VERSION, 0, &a= mp;logger);    if (rc !=3D 0)    {       printf("libxl_ctx_alloc failed (%d)\n",= rc);       return 1;    }    libxl_ctx_free(ctx);    return 0; } Strace output for it is following (I omit shared library  loading on startup): set_tid_address(0x7f787db29a50)       &n= bsp; =3D 17944 set_robust_list(0x7f787db29a60, 24)     =3D 0 rt_sigaction(SIGRTMIN, {0x7f787c4809b0, [], SA_RESTORER|SA_SIGINFO, 0x7f787c489890}, NULL, 8) =3D 0 rt_sigaction(SIGRT_1, {0x7f787c480a40, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7f787c489890}, NULL, 8) =3D 0 rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) =3D 0 getrlimit(RLIMIT_STACK, {rlim_cur=3D8192*1024, rlim_max=3DRLIM64_INFINITY}) =3D 0 brk(0)           &nb= sp;            =           =3D 0x156d000 brk(0x158e000)          &= nbsp;           &nbs= p;   =3D 0x158e000 pipe([3, 4])          &nb= sp;            =      =3D 0 fcntl(3, F_GETFL)         &nbs= p;            &= nbsp;=3D 0 (flags O_RDONLY) fcntl(3, F_SETFL, O_RDONLY|O_NONBLOCK)  =3D 0 fcntl(4, F_GETFL)         &nbs= p;            &= nbsp;=3D 0x1 (flags O_WRONLY) fcntl(4, F_SETFL, O_WRONLY|O_NONBLOCK)  =3D 0 open("/proc/xen/privcmd", O_RDWR)       = =3D 5 fcntl(5, F_GETFD)         &nbs= p;            &= nbsp;=3D 0 fcntl(5, F_SETFD, FD_CLOEXEC)       &nbs= p;   =3D 0 stat("/var/run/xenstored/socket", {st_mode=3DS_IFSOCK|0600, st_size=3D0, ...}) =3D 0 socket(PF_LOCAL, SOCK_STREAM, 0)       &= nbsp;=3D 6 fcntl(6, F_GETFD)         &nbs= p;            &= nbsp;=3D 0 fcntl(6, F_SETFD, FD_CLOEXEC)       &nbs= p;   =3D 0 connect(6, {sa_family=3DAF_LOCAL, sun_path=3D"/var/run/xenstored/socket"}, 110) =3D 0 close(5)           &= nbsp;           &nbs= p;        =3D 0 close(6)           &= nbsp;           &nbs= p;        =3D 0 close(3)           &= nbsp;           &nbs= p;        =3D 0 close(4)           &= nbsp;           &nbs= p;        =3D 0 close(0)           &= nbsp;           &nbs= p;        =3D 0 exit_group(0)          &n= bsp;            = ;    =3D ? +++ exited with 0 +++ Best regards, Victor Kirhenshtein _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org https://lists.xen.org/xen-devel=
--=-OoskAHVJTz9fH8J96y7g-- --=-HzkMZJMjZ/LOR5MrJJoh Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Disposition: attachment; filename="smime.p7s" Content-Transfer-Encoding: base64 MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0BBwEAAKCCD08w ggSvMIIDl6ADAgECAhEA4CPLFRKDU4mtYW56VGdrITANBgkqhkiG9w0BAQsFADBvMQswCQYDVQQG EwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRU UCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTE0MTIyMjAw MDAwMFoXDTIwMDUzMDEwNDgzOFowgZsxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1h bmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMUEw PwYDVQQDEzhDT01PRE8gU0hBLTI1NiBDbGllbnQgQXV0aGVudGljYXRpb24gYW5kIFNlY3VyZSBF bWFpbCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAImxDdp6UxlOcFIdvFamBia3 uEngludRq/HwWhNJFaO0jBtgvHpRQqd5jKQi3xdhTpHVdiMKFNNKAn+2HQmAbqUEPdm6uxb+oYep LkNSQxZ8rzJQyKZPWukI2M+TJZx7iOgwZOak+FaA/SokFDMXmaxE5WmLo0YGS8Iz1OlAnwawsayT QLm1CJM6nCpToxDbPSBhPFUDjtlOdiUCISn6o3xxdk/u4V+B6ftUgNvDezVSt4TeIj0sMC0xf1m9 UjewM2ktQ+v61qXxl3dnUYzZ7ifrvKUHOHaMpKk4/9+M9QOsSb7K93OZOg8yq5yVOhM9DkY6V3Rh UL7GQD/L5OKfoiECAwEAAaOCARcwggETMB8GA1UdIwQYMBaAFK29mHo0tCb3+sQmVO8DveAky1Qa MB0GA1UdDgQWBBSSYWuC4aKgqk/sZ/HCo/e0gADB7DAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/ BAgwBgEB/wIBADAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRV HSAAMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9BZGRUcnVzdEV4 dGVybmFsQ0FSb290LmNybDA1BggrBgEFBQcBAQQpMCcwJQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3Nw LnVzZXJ0cnVzdC5jb20wDQYJKoZIhvcNAQELBQADggEBABsqbqxVwTqriMXY7c1V86prYSvACRAj mQ/FZmpvsfW0tXdeDwJhAN99Bf4Ss6SAgAD8+x1banICCkG8BbrBWNUmwurVTYT7/oKYz1gb4yJj nFL4uwU2q31Ypd6rO2Pl2tVz7+zg+3vio//wQiOcyraNTT7kSxgDsqgt1Ni7QkuQaYUQ26Y3NOh7 4AEQpZzKOsefT4g0bopl0BqKu6ncyso20fT8wmQpNa/WsadxEdIDQ7GPPprsnjJT9HaSyoY0B7ks yuYcStiZDcGG4pCS+1pCaiMhEOllx/XVu37qjIUgAmLq0ToHLFnFmTPyOInltukWeh95FPZKEBom +nyK+5swggVKMIIEMqADAgECAhEAwelKIq4NyAWviCEPnqQu3zANBgkqhkiG9w0BAQsFADCBmzEL MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9y ZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxQTA/BgNVBAMTOENPTU9ETyBTSEEtMjU2IENs aWVudCBBdXRoZW50aWNhdGlvbiBhbmQgU2VjdXJlIEVtYWlsIENBMB4XDTE2MTAxNzAwMDAwMFoX DTE3MTAxNzIzNTk1OVowKjEoMCYGCSqGSIb3DQEJARYZdmljdG9yQHJhZGVuc29sdXRpb25zLmNv bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMKQaGBbE28eN468OValTnb6mGKZrjBV 7qaX/RUSEwZFNvOlC262ySCcZ+yWVIqvvdw/ArhTt5asSCGZIAjJs4e8T3yR23aRpialhG5CKfES aj2JAV5cbt4FS2qL1ABJzeYNpCWnBX1EhqN01wmk4bZElktJjuy6e3Mpuepxw+Wi8JuSL9uzCPIb zhQKlVTSbzO/Keq+lmfCl01ZBDIzg0uCo2Ne0Zyo2XYG6Z15fsB0XB17qitl1Y+5O4m0DTvlvfH+ u4XV8kxnOAd5fYBo+cdtBiI+rRygMEEE9edBCd5RJdxI3y9bCsbgXZiOU5vJNv2Z60RoIhRZiNFa 565VgyMCAwEAAaOCAfcwggHzMB8GA1UdIwQYMBaAFJJha4LhoqCqT+xn8cKj97SAAMHsMB0GA1Ud DgQWBBTg8Cn6Vj86RCPQzFvQg/VkdJ64RzAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAg BgNVHSUEGTAXBggrBgEFBQcDBAYLKwYBBAGyMQEDBQIwEQYJYIZIAYb4QgEBBAQDAgUgMEYGA1Ud IAQ/MD0wOwYMKwYBBAGyMQECAQEBMCswKQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9k by5uZXQvQ1BTMF0GA1UdHwRWMFQwUqBQoE6GTGh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL0NPTU9E T1NIQTI1NkNsaWVudEF1dGhlbnRpY2F0aW9uYW5kU2VjdXJlRW1haWxDQS5jcmwwgZAGCCsGAQUF BwEBBIGDMIGAMFgGCCsGAQUFBzAChkxodHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9DT01PRE9TSEEy NTZDbGllbnRBdXRoZW50aWNhdGlvbmFuZFNlY3VyZUVtYWlsQ0EuY3J0MCQGCCsGAQUFBzABhhho dHRwOi8vb2NzcC5jb21vZG9jYS5jb20wJAYDVR0RBB0wG4EZdmljdG9yQHJhZGVuc29sdXRpb25z LmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAdG6cewOPWGWI6rmfZs8zusqC5p/0LaAOI/p+Dr1XBmFV eJPLfRZgP0syqGMw18Hh3L/ZRUGXoguvrHrm19kH+9yrRJN5snhB5s+G97S/vDsq2O53Sz3sf2kc VBU+7/chXaiC5U7LKLzzilSJQShGfH9GeDVFZbQ17DG2kvK7bWSFpO8fgYtYPcav6T3NgaJl+F4C RAPKXl2p133lVDD8sJBT927T/PtBhaRCbh0NKWYbZfaUGyFXxwJ80go6pTZ/aqWsjYGJ9AHhvqkw OZ/235uwCsJKDA4sM/+fz76UOSaZSEFoNeqsOm8kM2CbipQtuo24/ComlMkHm5n/tm31nzCCBUow ggQyoAMCAQICEQDB6Uoirg3IBa+IIQ+epC7fMA0GCSqGSIb3DQEBCwUAMIGbMQswCQYDVQQGEwJH QjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQK ExFDT01PRE8gQ0EgTGltaXRlZDFBMD8GA1UEAxM4Q09NT0RPIFNIQS0yNTYgQ2xpZW50IEF1dGhl bnRpY2F0aW9uIGFuZCBTZWN1cmUgRW1haWwgQ0EwHhcNMTYxMDE3MDAwMDAwWhcNMTcxMDE3MjM1 OTU5WjAqMSgwJgYJKoZIhvcNAQkBFhl2aWN0b3JAcmFkZW5zb2x1dGlvbnMuY29tMIIBIjANBgkq hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwpBoYFsTbx43jrw5VqVOdvqYYpmuMFXuppf9FRITBkU2 86ULbrbJIJxn7JZUiq+93D8CuFO3lqxIIZkgCMmzh7xPfJHbdpGmJqWEbkIp8RJqPYkBXlxu3gVL aovUAEnN5g2kJacFfUSGo3TXCaThtkSWS0mO7Lp7cym56nHD5aLwm5Iv27MI8hvOFAqVVNJvM78p 6r6WZ8KXTVkEMjODS4KjY17RnKjZdgbpnXl+wHRcHXuqK2XVj7k7ibQNO+W98f67hdXyTGc4B3l9 gGj5x20GIj6tHKAwQQT150EJ3lEl3EjfL1sKxuBdmI5Tm8k2/ZnrRGgiFFmI0VrnrlWDIwIDAQAB o4IB9zCCAfMwHwYDVR0jBBgwFoAUkmFrguGioKpP7GfxwqP3tIAAwewwHQYDVR0OBBYEFODwKfpW PzpEI9DMW9CD9WR0nrhHMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMCAGA1UdJQQZMBcG CCsGAQUFBwMEBgsrBgEEAbIxAQMFAjARBglghkgBhvhCAQEEBAMCBSAwRgYDVR0gBD8wPTA7Bgwr BgEEAbIxAQIBAQEwKzApBggrBgEFBQcCARYdaHR0cHM6Ly9zZWN1cmUuY29tb2RvLm5ldC9DUFMw XQYDVR0fBFYwVDBSoFCgToZMaHR0cDovL2NybC5jb21vZG9jYS5jb20vQ09NT0RPU0hBMjU2Q2xp ZW50QXV0aGVudGljYXRpb25hbmRTZWN1cmVFbWFpbENBLmNybDCBkAYIKwYBBQUHAQEEgYMwgYAw WAYIKwYBBQUHMAKGTGh0dHA6Ly9jcnQuY29tb2RvY2EuY29tL0NPTU9ET1NIQTI1NkNsaWVudEF1 dGhlbnRpY2F0aW9uYW5kU2VjdXJlRW1haWxDQS5jcnQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3Nw LmNvbW9kb2NhLmNvbTAkBgNVHREEHTAbgRl2aWN0b3JAcmFkZW5zb2x1dGlvbnMuY29tMA0GCSqG SIb3DQEBCwUAA4IBAQB0bpx7A49YZYjquZ9mzzO6yoLmn/QtoA4j+n4OvVcGYVV4k8t9FmA/SzKo YzDXweHcv9lFQZeiC6+seubX2Qf73KtEk3myeEHmz4b3tL+8OyrY7ndLPex/aRxUFT7v9yFdqILl TssovPOKVIlBKEZ8f0Z4NUVltDXsMbaS8rttZIWk7x+Bi1g9xq/pPc2BomX4XgJEA8peXanXfeVU MPywkFP3btP8+0GFpEJuHQ0pZhtl9pQbIVfHAnzSCjqlNn9qpayNgYn0AeG+qTA5n/bfm7AKwkoM Diwz/5/PvpQ5JplIQWg16qw6byQzYJuKlC26jbj8KiaUyQebmf+2bfWfMYID1jCCA9ICAQEwgbEw gZsxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1Nh bGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMUEwPwYDVQQDEzhDT01PRE8gU0hBLTI1 NiBDbGllbnQgQXV0aGVudGljYXRpb24gYW5kIFNlY3VyZSBFbWFpbCBDQQIRAMHpSiKuDcgFr4gh D56kLt8wDQYJYIZIAWUDBAIBBQCgggH1MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI hvcNAQkFMQ8XDTE3MDcyMTEwMTg1MlowLwYJKoZIhvcNAQkEMSIEIHQRMwRnaqhp4NM4e+IQm3xJ xy4UjzT+C3KLu3MGpUdNMIHCBgkrBgEEAYI3EAQxgbQwgbEwgZsxCzAJBgNVBAYTAkdCMRswGQYD VQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9E TyBDQSBMaW1pdGVkMUEwPwYDVQQDEzhDT01PRE8gU0hBLTI1NiBDbGllbnQgQXV0aGVudGljYXRp b24gYW5kIFNlY3VyZSBFbWFpbCBDQQIRAMHpSiKuDcgFr4ghD56kLt8wgcQGCyqGSIb3DQEJEAIL MYG0oIGxMIGbMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYD VQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDFBMD8GA1UEAxM4Q09NT0RP IFNIQS0yNTYgQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBTZWN1cmUgRW1haWwgQ0ECEQDB6Uoi rg3IBa+IIQ+epC7fMA0GCSqGSIb3DQEBAQUABIIBADrKvtfBQs3uLnTq/cigx6C8++0N2DUoI/ho c6zVDgRa8jmClLbI8utf1JkmZ0ViXW3GqUbuHubhb8+TAlUFrRWvJaIqOd2uHa9Ga0iK26BajSma wApdgay3Vkt7XyPG4qDW6IPdy5ix2zyFKR5xNFBm5i4AGuhx1AHhC529vtgI4G6jZEoQceqQdvKu 3dJEcEsuKTxKEnvYhL/xgNqBAg9/Yu2sV/2CLvIZpVgz9mrQm9RHxdq/qRCXLAJjrFJd0LLTGmwM QOxPjJurmLIBLLIFedDpPrhZAsIRuMtrmu3F3zdXC4ZhDqyyjRL92FiXSjrJ87Z6/SFamPHVwDz7 ksYAAAAAAAA= --=-HzkMZJMjZ/LOR5MrJJoh-- --===============4667868062948914982== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5v cmcveGVuLWRldmVsCg== --===============4667868062948914982==--