From mboxrd@z Thu Jan 1 00:00:00 1970 From: konrad.wilk@oracle.com (Konrad Rzeszutek Wilk) Date: Wed, 25 Nov 2015 09:53:27 -0500 Subject: [Cocci] [Xen-devel] [PATCH 2/9] Use gnutls_priority_set_direct() to deprecate gnutls_*_set() In-Reply-To: <1448041672-3986-3-git-send-email-mcgrof@do-not-panic.com> References: <1448041672-3986-1-git-send-email-mcgrof@do-not-panic.com> <1448041672-3986-3-git-send-email-mcgrof@do-not-panic.com> Message-ID: <20151125145322.GA24630@x230.dumpdata.com> To: cocci@systeme.lip6.fr List-Id: cocci@systeme.lip6.fr On Fri, Nov 20, 2015 at 09:47:45AM -0800, Luis R. Rodriguez wrote: > From: "Luis R. Rodriguez" > > Using deprecate gnutls_*_set() triggers a failure to compile > with gnutls30-3.4.4, used on OpenSUSE factory: > > ../libqemu_common.a(vnc.o): In function `vnc_start_tls': > ~/devel/xen/tools/qemu-xen-traditional-dir/vnc.c:2164: undefined reference to `gnutls_kx_set_priority' > ~/devel/xen/tools/qemu-xen-traditional-dir/vnc.c:2171: undefined reference to `gnutls_certificate_type_set_priority' > ~/devel/xen/tools/qemu-xen-traditional-dir/vnc.c:2178: undefined reference to `gnutls_protocol_set_priority' > > This compilation issue can be fixed by using the new routine > gnutls_priority_set_direct() which replaces the deprecated calls > which also simplifies the code considerably. Thanks for posting that! It certainly fixes that issue. I was wondering if you had seen these as well: /home/konrad/qemu-trad.git/vnc.c:1929:1: warning: ?gnutls_anon_server_credentials? is deprecated [-Wdeprecated-declarations] { ^ /home/konrad/qemu-trad.git/vnc.c: In function ?vnc_tls_initialize_anon_cred?: /home/konrad/qemu-trad.git/vnc.c:1930:5: warning: ?gnutls_anon_server_credentials? is deprecated [-Wdeprecated-declarations] gnutls_anon_server_credentials anon_cred; ^ /home/konrad/qemu-trad.git/vnc.c: In function ?vnc_start_tls?: /home/konrad/qemu-trad.git/vnc.c:2203:6: warning: ?gnutls_anon_server_credentials? is deprecated [-Wdeprecated-declarations] gnutls_anon_server_credentials anon_cred = vnc_tls_initialize_anon_cred(); ^ ? (This is Fedora 23) > > The following Coccinelle rule expresses the change in a general > grammar form, this could be used should the code be rebased, or > to do the transformation in other projects using the same gnutls > library. > > @ vars @ > identifier kx_x509, kx_anon, cert_type_priority, protocol_priority; > declarer name NEED_X509_AUTH; > @@ > > -int cert_type_priority[] = { GNUTLS_CRT_X509, 0 }; > -int protocol_priority[]= { GNUTLS_TLS1_1, GNUTLS_TLS1_0, GNUTLS_SSL3, 0 }; > -int kx_anon[] = { GNUTLS_KX_ANON_DH, 0}; > -int kx_x509[] = { GNUTLS_KX_DHE_DSS, GNUTLS_KX_RSA, GNUTLS_KX_DHE_RSA, GNUTLS_KX_SRP, 0}; > > @ calls_kx_set_priority @ > identifier vars.kx_x509, vars.kx_anon; > expression need_x509; > struct VncState *vs; > @@ > > -if (gnutls_kx_set_priority(vs->tls_session, need_x509 ? kx_x509 : kx_anon) < 0) { > - gnutls_deinit(vs->tls_session); > - vs->tls_session = NULL; > - vnc_client_error(vs); > - return -1; > -} > > @ calls_certificate_type_set_priority depends on calls_kx_set_priority @ > identifier vars.cert_type_priority; > struct VncState *calls_kx_set_priority.vs; > @@ > -if (gnutls_certificate_type_set_priority(vs->tls_session, cert_type_priority) < 0) { > - gnutls_deinit(vs->tls_session); > - vs->tls_session = NULL; > - vnc_client_error(vs); > - return -1; > -} > > @ calls_protocol_set_priority depends on calls_certificate_type_set_priority @ > identifier vars.protocol_priority; > struct VncState *calls_kx_set_priority.vs; > expression calls_kx_set_priority.need_x509; > @@ > > -if (gnutls_protocol_set_priority(vs->tls_session, protocol_priority) < 0) { > - gnutls_deinit(vs->tls_session); > - vs->tls_session = NULL; > - vnc_client_error(vs); > - return -1; > -} > +if (gnutls_priority_set_direct(vs->tls_session, need_x509 ? "NORMAL" : "NORMAL:+ANON-DH", NULL) < 0) { > + gnutls_deinit(vs->tls_session); > + vs->tls_session = NULL; > + vnc_client_error(vs); > + return -1; > +} > > Generated-by: Coccinelle SmPL > Cc: cocci at systeme.lip6.fr > Signed-off-by: Luis R. Rodriguez > --- > vnc.c | 21 +-------------------- > 1 file changed, 1 insertion(+), 20 deletions(-) > > diff --git a/vnc.c b/vnc.c > index 7629dfa18645..32c604084a5b 100644 > --- a/vnc.c > +++ b/vnc.c > @@ -2137,11 +2137,6 @@ static void vnc_handshake_io(void *opaque) { > > > static int vnc_start_tls(struct VncState *vs) { > - static const int cert_type_priority[] = { GNUTLS_CRT_X509, 0 }; > - static const int protocol_priority[]= { GNUTLS_TLS1_1, GNUTLS_TLS1_0, GNUTLS_SSL3, 0 }; > - static const int kx_anon[] = {GNUTLS_KX_ANON_DH, 0}; > - static const int kx_x509[] = {GNUTLS_KX_DHE_DSS, GNUTLS_KX_RSA, GNUTLS_KX_DHE_RSA, GNUTLS_KX_SRP, 0}; > - > VNC_DEBUG("Do TLS setup\n"); > if (vnc_tls_initialize() < 0) { > VNC_DEBUG("Failed to init TLS\n"); > @@ -2161,21 +2156,7 @@ static int vnc_start_tls(struct VncState *vs) { > return -1; > } > > - if (gnutls_kx_set_priority(vs->tls_session, NEED_X509_AUTH(vs) ? kx_x509 : kx_anon) < 0) { > - gnutls_deinit(vs->tls_session); > - vs->tls_session = NULL; > - vnc_client_error(vs); > - return -1; > - } > - > - if (gnutls_certificate_type_set_priority(vs->tls_session, cert_type_priority) < 0) { > - gnutls_deinit(vs->tls_session); > - vs->tls_session = NULL; > - vnc_client_error(vs); > - return -1; > - } > - > - if (gnutls_protocol_set_priority(vs->tls_session, protocol_priority) < 0) { > + if (gnutls_priority_set_direct(vs->tls_session, NEED_X509_AUTH(vs) ? "NORMAL" : "NORMAL:+ANON-DH", NULL) < 0) { > gnutls_deinit(vs->tls_session); > vs->tls_session = NULL; > vnc_client_error(vs); > -- > 2.6.2 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel at lists.xen.org > http://lists.xen.org/xen-devel From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH 2/9] Use gnutls_priority_set_direct() to deprecate gnutls_*_set() Date: Wed, 25 Nov 2015 09:53:27 -0500 Message-ID: <20151125145322.GA24630@x230.dumpdata.com> References: <1448041672-3986-1-git-send-email-mcgrof@do-not-panic.com> <1448041672-3986-3-git-send-email-mcgrof@do-not-panic.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1448041672-3986-3-git-send-email-mcgrof@do-not-panic.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: "Luis R. Rodriguez" Cc: xen-devel@lists.xensource.com, ian.campbell@citrix.com, "Luis R. Rodriguez" , pryorm09@gmail.com, cfergeau@redhat.com, JBeulich@suse.com, samuel.thibault@ens-lyon.org, cocci@systeme.lip6.fr List-Id: xen-devel@lists.xenproject.org T24gRnJpLCBOb3YgMjAsIDIwMTUgYXQgMDk6NDc6NDVBTSAtMDgwMCwgTHVpcyBSLiBSb2RyaWd1 ZXogd3JvdGU6Cj4gRnJvbTogIkx1aXMgUi4gUm9kcmlndWV6IiA8bWNncm9mQHN1c2UuY29tPgo+ IAo+IFVzaW5nIGRlcHJlY2F0ZSBnbnV0bHNfKl9zZXQoKSB0cmlnZ2VycyBhIGZhaWx1cmUgdG8g Y29tcGlsZQo+IHdpdGggZ251dGxzMzAtMy40LjQsIHVzZWQgb24gT3BlblNVU0UgZmFjdG9yeToK PiAKPiAuLi9saWJxZW11X2NvbW1vbi5hKHZuYy5vKTogSW4gZnVuY3Rpb24gYHZuY19zdGFydF90 bHMnOgo+IH4vZGV2ZWwveGVuL3Rvb2xzL3FlbXUteGVuLXRyYWRpdGlvbmFsLWRpci92bmMuYzoy MTY0OiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBnbnV0bHNfa3hfc2V0X3ByaW9yaXR5Jwo+IH4v ZGV2ZWwveGVuL3Rvb2xzL3FlbXUteGVuLXRyYWRpdGlvbmFsLWRpci92bmMuYzoyMTcxOiB1bmRl ZmluZWQgcmVmZXJlbmNlIHRvIGBnbnV0bHNfY2VydGlmaWNhdGVfdHlwZV9zZXRfcHJpb3JpdHkn Cj4gfi9kZXZlbC94ZW4vdG9vbHMvcWVtdS14ZW4tdHJhZGl0aW9uYWwtZGlyL3ZuYy5jOjIxNzg6 IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGdudXRsc19wcm90b2NvbF9zZXRfcHJpb3JpdHknCj4g Cj4gVGhpcyBjb21waWxhdGlvbiBpc3N1ZSBjYW4gYmUgZml4ZWQgYnkgdXNpbmcgdGhlIG5ldyBy b3V0aW5lCj4gZ251dGxzX3ByaW9yaXR5X3NldF9kaXJlY3QoKSB3aGljaCByZXBsYWNlcyB0aGUg ZGVwcmVjYXRlZCBjYWxscwo+IHdoaWNoIGFsc28gc2ltcGxpZmllcyB0aGUgY29kZSBjb25zaWRl cmFibHkuCgoKVGhhbmtzIGZvciBwb3N0aW5nIHRoYXQhIEl0IGNlcnRhaW5seSBmaXhlcyB0aGF0 IGlzc3VlLgoKSSB3YXMgd29uZGVyaW5nIGlmIHlvdSBoYWQgc2VlbiB0aGVzZSBhcyB3ZWxsOgoK L2hvbWUva29ucmFkL3FlbXUtdHJhZC5naXQvdm5jLmM6MTkyOToxOiB3YXJuaW5nOgrigJhnbnV0 bHNfYW5vbl9zZXJ2ZXJfY3JlZGVudGlhbHPigJkgaXMgZGVwcmVjYXRlZApbLVdkZXByZWNhdGVk LWRlY2xhcmF0aW9uc10KIHsKIF4KL2hvbWUva29ucmFkL3FlbXUtdHJhZC5naXQvdm5jLmM6IElu IGZ1bmN0aW9uCuKAmHZuY190bHNfaW5pdGlhbGl6ZV9hbm9uX2NyZWTigJk6Ci9ob21lL2tvbnJh ZC9xZW11LXRyYWQuZ2l0L3ZuYy5jOjE5MzA6NTogd2FybmluZzoK4oCYZ251dGxzX2Fub25fc2Vy dmVyX2NyZWRlbnRpYWxz4oCZIGlzIGRlcHJlY2F0ZWQKWy1XZGVwcmVjYXRlZC1kZWNsYXJhdGlv bnNdCiAgICAgZ251dGxzX2Fub25fc2VydmVyX2NyZWRlbnRpYWxzIGFub25fY3JlZDsKICAgICBe Ci9ob21lL2tvbnJhZC9xZW11LXRyYWQuZ2l0L3ZuYy5jOiBJbiBmdW5jdGlvbiDigJh2bmNfc3Rh cnRfdGxz4oCZOgovaG9tZS9rb25yYWQvcWVtdS10cmFkLmdpdC92bmMuYzoyMjAzOjY6IHdhcm5p bmc6CuKAmGdudXRsc19hbm9uX3NlcnZlcl9jcmVkZW50aWFsc+KAmSBpcyBkZXByZWNhdGVkClst V2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zXQogICAgICBnbnV0bHNfYW5vbl9zZXJ2ZXJfY3JlZGVu dGlhbHMgYW5vbl9jcmVkID0Kdm5jX3Rsc19pbml0aWFsaXplX2Fub25fY3JlZCgpOwogICAgICBe Cj8KCihUaGlzIGlzIEZlZG9yYSAyMykKPiAKPiBUaGUgZm9sbG93aW5nIENvY2NpbmVsbGUgcnVs ZSBleHByZXNzZXMgdGhlIGNoYW5nZSBpbiBhIGdlbmVyYWwKPiBncmFtbWFyIGZvcm0sIHRoaXMg Y291bGQgYmUgdXNlZCBzaG91bGQgdGhlIGNvZGUgYmUgcmViYXNlZCwgb3IKPiB0byBkbyB0aGUg dHJhbnNmb3JtYXRpb24gaW4gb3RoZXIgcHJvamVjdHMgdXNpbmcgdGhlIHNhbWUgZ251dGxzCj4g bGlicmFyeS4KPiAKPiBAIHZhcnMgQAo+IGlkZW50aWZpZXIga3hfeDUwOSwga3hfYW5vbiwgY2Vy dF90eXBlX3ByaW9yaXR5LCBwcm90b2NvbF9wcmlvcml0eTsKPiBkZWNsYXJlciBuYW1lIE5FRURf WDUwOV9BVVRIOwo+IEBACj4gCj4gLWludCBjZXJ0X3R5cGVfcHJpb3JpdHlbXSA9IHsgR05VVExT X0NSVF9YNTA5LCAwIH07Cj4gLWludCBwcm90b2NvbF9wcmlvcml0eVtdPSB7IEdOVVRMU19UTFMx XzEsIEdOVVRMU19UTFMxXzAsIEdOVVRMU19TU0wzLCAwIH07Cj4gLWludCBreF9hbm9uW10gPSB7 IEdOVVRMU19LWF9BTk9OX0RILCAwfTsKPiAtaW50IGt4X3g1MDlbXSA9IHsgR05VVExTX0tYX0RI RV9EU1MsIEdOVVRMU19LWF9SU0EsIEdOVVRMU19LWF9ESEVfUlNBLCBHTlVUTFNfS1hfU1JQLCAw fTsKPiAKPiBAIGNhbGxzX2t4X3NldF9wcmlvcml0eSBACj4gaWRlbnRpZmllciB2YXJzLmt4X3g1 MDksIHZhcnMua3hfYW5vbjsKPiBleHByZXNzaW9uIG5lZWRfeDUwOTsKPiBzdHJ1Y3QgVm5jU3Rh dGUgKnZzOwo+IEBACj4gCj4gLWlmIChnbnV0bHNfa3hfc2V0X3ByaW9yaXR5KHZzLT50bHNfc2Vz c2lvbiwgbmVlZF94NTA5ID8ga3hfeDUwOSA6IGt4X2Fub24pIDwgMCkgewo+IC0JZ251dGxzX2Rl aW5pdCh2cy0+dGxzX3Nlc3Npb24pOwo+IC0JdnMtPnRsc19zZXNzaW9uID0gTlVMTDsKPiAtCXZu Y19jbGllbnRfZXJyb3IodnMpOwo+IC0JcmV0dXJuIC0xOwo+IC19Cj4gCj4gQCBjYWxsc19jZXJ0 aWZpY2F0ZV90eXBlX3NldF9wcmlvcml0eSBkZXBlbmRzIG9uIGNhbGxzX2t4X3NldF9wcmlvcml0 eSBACj4gaWRlbnRpZmllciB2YXJzLmNlcnRfdHlwZV9wcmlvcml0eTsKPiBzdHJ1Y3QgVm5jU3Rh dGUgKmNhbGxzX2t4X3NldF9wcmlvcml0eS52czsKPiBAQAo+IC1pZiAoZ251dGxzX2NlcnRpZmlj YXRlX3R5cGVfc2V0X3ByaW9yaXR5KHZzLT50bHNfc2Vzc2lvbiwgY2VydF90eXBlX3ByaW9yaXR5 KSA8IDApIHsKPiAtCWdudXRsc19kZWluaXQodnMtPnRsc19zZXNzaW9uKTsKPiAtCXZzLT50bHNf c2Vzc2lvbiA9IE5VTEw7Cj4gLQl2bmNfY2xpZW50X2Vycm9yKHZzKTsKPiAtCXJldHVybiAtMTsK PiAtfQo+IAo+IEAgY2FsbHNfcHJvdG9jb2xfc2V0X3ByaW9yaXR5IGRlcGVuZHMgb24gY2FsbHNf Y2VydGlmaWNhdGVfdHlwZV9zZXRfcHJpb3JpdHkgQAo+IGlkZW50aWZpZXIgdmFycy5wcm90b2Nv bF9wcmlvcml0eTsKPiBzdHJ1Y3QgVm5jU3RhdGUgKmNhbGxzX2t4X3NldF9wcmlvcml0eS52czsK PiBleHByZXNzaW9uIGNhbGxzX2t4X3NldF9wcmlvcml0eS5uZWVkX3g1MDk7Cj4gQEAKPiAKPiAt aWYgKGdudXRsc19wcm90b2NvbF9zZXRfcHJpb3JpdHkodnMtPnRsc19zZXNzaW9uLCBwcm90b2Nv bF9wcmlvcml0eSkgPCAwKSB7Cj4gLQlnbnV0bHNfZGVpbml0KHZzLT50bHNfc2Vzc2lvbik7Cj4g LQl2cy0+dGxzX3Nlc3Npb24gPSBOVUxMOwo+IC0Jdm5jX2NsaWVudF9lcnJvcih2cyk7Cj4gLQly ZXR1cm4gLTE7Cj4gLX0KPiAraWYgKGdudXRsc19wcmlvcml0eV9zZXRfZGlyZWN0KHZzLT50bHNf c2Vzc2lvbiwgbmVlZF94NTA5ID8gIk5PUk1BTCIgOiAiTk9STUFMOitBTk9OLURIIiwgTlVMTCkg PCAwKSB7Cj4gKwlnbnV0bHNfZGVpbml0KHZzLT50bHNfc2Vzc2lvbik7Cj4gKwl2cy0+dGxzX3Nl c3Npb24gPSBOVUxMOwo+ICsJdm5jX2NsaWVudF9lcnJvcih2cyk7Cj4gKwlyZXR1cm4gLTE7Cj4g K30KPiAKPiBHZW5lcmF0ZWQtYnk6IENvY2NpbmVsbGUgU21QTAo+IENjOiBjb2NjaUBzeXN0ZW1l LmxpcDYuZnIKPiBTaWduZWQtb2ZmLWJ5OiBMdWlzIFIuIFJvZHJpZ3VleiA8bWNncm9mQHN1c2Uu Y29tPgo+IC0tLQo+ICB2bmMuYyB8IDIxICstLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICAxIGZpbGUg Y2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDIwIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQg YS92bmMuYyBiL3ZuYy5jCj4gaW5kZXggNzYyOWRmYTE4NjQ1Li4zMmM2MDQwODRhNWIgMTAwNjQ0 Cj4gLS0tIGEvdm5jLmMKPiArKysgYi92bmMuYwo+IEBAIC0yMTM3LDExICsyMTM3LDYgQEAgc3Rh dGljIHZvaWQgdm5jX2hhbmRzaGFrZV9pbyh2b2lkICpvcGFxdWUpIHsKPiAgCj4gIAo+ICBzdGF0 aWMgaW50IHZuY19zdGFydF90bHMoc3RydWN0IFZuY1N0YXRlICp2cykgewo+IC0gICAgc3RhdGlj IGNvbnN0IGludCBjZXJ0X3R5cGVfcHJpb3JpdHlbXSA9IHsgR05VVExTX0NSVF9YNTA5LCAwIH07 Cj4gLSAgICBzdGF0aWMgY29uc3QgaW50IHByb3RvY29sX3ByaW9yaXR5W109IHsgR05VVExTX1RM UzFfMSwgR05VVExTX1RMUzFfMCwgR05VVExTX1NTTDMsIDAgfTsKPiAtICAgIHN0YXRpYyBjb25z dCBpbnQga3hfYW5vbltdID0ge0dOVVRMU19LWF9BTk9OX0RILCAwfTsKPiAtICAgIHN0YXRpYyBj b25zdCBpbnQga3hfeDUwOVtdID0ge0dOVVRMU19LWF9ESEVfRFNTLCBHTlVUTFNfS1hfUlNBLCBH TlVUTFNfS1hfREhFX1JTQSwgR05VVExTX0tYX1NSUCwgMH07Cj4gLQo+ICAgICAgVk5DX0RFQlVH KCJEbyBUTFMgc2V0dXBcbiIpOwo+ICAgICAgaWYgKHZuY190bHNfaW5pdGlhbGl6ZSgpIDwgMCkg ewo+ICAJVk5DX0RFQlVHKCJGYWlsZWQgdG8gaW5pdCBUTFNcbiIpOwo+IEBAIC0yMTYxLDIxICsy MTU2LDcgQEAgc3RhdGljIGludCB2bmNfc3RhcnRfdGxzKHN0cnVjdCBWbmNTdGF0ZSAqdnMpIHsK PiAgCSAgICByZXR1cm4gLTE7Cj4gIAl9Cj4gIAo+IC0JaWYgKGdudXRsc19reF9zZXRfcHJpb3Jp dHkodnMtPnRsc19zZXNzaW9uLCBORUVEX1g1MDlfQVVUSCh2cykgPyBreF94NTA5IDoga3hfYW5v bikgPCAwKSB7Cj4gLQkgICAgZ251dGxzX2RlaW5pdCh2cy0+dGxzX3Nlc3Npb24pOwo+IC0JICAg IHZzLT50bHNfc2Vzc2lvbiA9IE5VTEw7Cj4gLQkgICAgdm5jX2NsaWVudF9lcnJvcih2cyk7Cj4g LQkgICAgcmV0dXJuIC0xOwo+IC0JfQo+IC0KPiAtCWlmIChnbnV0bHNfY2VydGlmaWNhdGVfdHlw ZV9zZXRfcHJpb3JpdHkodnMtPnRsc19zZXNzaW9uLCBjZXJ0X3R5cGVfcHJpb3JpdHkpIDwgMCkg ewo+IC0JICAgIGdudXRsc19kZWluaXQodnMtPnRsc19zZXNzaW9uKTsKPiAtCSAgICB2cy0+dGxz X3Nlc3Npb24gPSBOVUxMOwo+IC0JICAgIHZuY19jbGllbnRfZXJyb3IodnMpOwo+IC0JICAgIHJl dHVybiAtMTsKPiAtCX0KPiAtCj4gLQlpZiAoZ251dGxzX3Byb3RvY29sX3NldF9wcmlvcml0eSh2 cy0+dGxzX3Nlc3Npb24sIHByb3RvY29sX3ByaW9yaXR5KSA8IDApIHsKPiArCWlmIChnbnV0bHNf cHJpb3JpdHlfc2V0X2RpcmVjdCh2cy0+dGxzX3Nlc3Npb24sIE5FRURfWDUwOV9BVVRIKHZzKSA/ ICJOT1JNQUwiIDogIk5PUk1BTDorQU5PTi1ESCIsIE5VTEwpIDwgMCkgewo+ICAJICAgIGdudXRs c19kZWluaXQodnMtPnRsc19zZXNzaW9uKTsKPiAgCSAgICB2cy0+dGxzX3Nlc3Npb24gPSBOVUxM Owo+ICAJICAgIHZuY19jbGllbnRfZXJyb3IodnMpOwo+IC0tIAo+IDIuNi4yCj4gCj4gCj4gX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBYZW4tZGV2ZWwg bWFpbGluZyBsaXN0Cj4gWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKPiBodHRwOi8vbGlzdHMueGVu Lm9yZy94ZW4tZGV2ZWwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0 cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==