Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vjEK8-00BVFE-1Y for pgsql-hackers@arkaria.postgresql.org; Fri, 23 Jan 2026 10:23:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vjEK7-00H8bs-1z for pgsql-hackers@arkaria.postgresql.org; Fri, 23 Jan 2026 10:23:27 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vjEK7-00H8bk-0e for pgsql-hackers@lists.postgresql.org; Fri, 23 Jan 2026 10:23:27 +0000 Received: from mail-dl1-x1234.google.com ([2607:f8b0:4864:20::1234]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vjEK4-000000004Od-2Sb0 for pgsql-hackers@lists.postgresql.org; Fri, 23 Jan 2026 10:23:27 +0000 Received: by mail-dl1-x1234.google.com with SMTP id a92af1059eb24-1233608c7e9so275458c88.2 for ; Fri, 23 Jan 2026 02:23:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1769163802; cv=none; d=google.com; s=arc-20240605; b=d3x9XsnXEWEnIxoZFBhZpLOnWk/TtM6tlTQzrAtyLY2uVv3vF4bERrNlq2BtATAmeC EXBoMkfULs9TnIcQcZr0sSJxWO9F18diYo8Pq3xUHXwnaotOtoF0Uvo+n7tsF0rCGKeS qaWQrYSW1qp3DyFO/HeeM+nHdFGJIb9qs6yPTNQZvpIzK15N4RDRHPKHDrTeRTsl5Rvw ViqOiI8ssL6bbbgBcfrDPn1JZWaJDXNv17WLqVm0HG+SYxrl1iNyVWZKi9bLb6NE/tnL aOL5Ey1dGBARq8GfVBWejK7Upzrd1i5dmDiB7NQZ5WwibToupXgrLsK7Y3AFllX28OMT IJ9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=UgWZOZGLSlxMONDUnSEuggt7Mhug3uXEu7C3QD4mcqk=; fh=dxJXJbLzq9Nah1LUdsj4QTuQ3JoDScd0wp1YHY64NXM=; b=ZbesbkM7RXqMA24H90/4sf1ipXEkwJOAPiENmzd2Dm3p5MlB7CBQWoqCT9c81UFPZg pdQY2nlATDE3uqIYhNKREsJyJttFPjuKp6lBvT0FUYr+5LfMpfVNYXMy0F+geTAaLyY3 1soLn5ypN9ealKiYUGQmSSwKO1j9VswdXyvE+yRP9l1oEtX4FJmIQ+vacdCy1j3uj1I+ rrhioCv51e3E4kAF9KNJXt5mpV2tmJGH7woBJyQH6dq+4wZkFp6NScsQqwN0WlBH2qQP Oqial/SmYKbrQTvhO80JACXVlLJL9nmPt/ieuCxVSAcb/gNTCLhZr7stvl76msamqGep IsCw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769163802; x=1769768602; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=UgWZOZGLSlxMONDUnSEuggt7Mhug3uXEu7C3QD4mcqk=; b=CEaq4vG7gCsxGR5PJMeH58eNSTLun8nQH+4E7se6i01SxUXHfACrREP+oFaoM820sB 9u6rF7kSa62bFNNneR/X07l9ISXYOIJDrr8VzSC4P78DYEquwPgbI8PG+O29464sFqVo aeDjA1yZx7HGRt2Lchn4JXioBk7lhJi3WwYP9Wz5Aqt7231L2RqnEtzM2G+bMrNkEeIi N9itlKguJJww/MOD7l7budMrq0tTSoV/nmawoYODfjtA8a4zdVKCkVj1Gho1PamSkcxQ QdojKC3IG1Oag62cD7J5PzaqBjRS+Zv3lMHQ7crtsY2FKt0YjA5vHonx0pV0FUj9AA03 sRGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769163802; x=1769768602; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=UgWZOZGLSlxMONDUnSEuggt7Mhug3uXEu7C3QD4mcqk=; b=mB3Ya6V7V1Iuq56CIEtypY8o/iwE99C+1agH2aaZTVsao+dWdHuysAplxY5oT4EvXb 4hkO5Rnl3I3+FCJHPK70C5QSZDhkPKha2TtwGV6cwqQ1/kS3Gn8HM3ShvcLvCi6AQpY0 QIRWIDfXZHCLDSL70ACRHNf7uiLy1FdJ811wTohc6M//HLRnzyUwV0d5QWIXOr8lS0BH VJQJYDl88URcSz5D1FI77pfOYi9onXzjnWU9sH7XqlwHa57jpRZCYzA4kf11qeskXfEI QDzk2WHFqX9VBBl/srU/5Pr1q4ATwVDmQHCPqz2VRf46Ve2r0oBfhJmpv24+N6zHJeDX VQEw== X-Gm-Message-State: AOJu0Yy5CtNL7fCa2fWICo/FkNG1Qh7j011wUk3/LQlVFKdUX3iOidMt 6hJL+E7eDXEymuEABlLZ5vMNpOPoYgtYZgwx+PB+X054ffZZ167VxruJVIzoFfZb6q0+obGh+KM D/vnxsCP0+E0VqecJ+45V2lZWxpnLQgoW2GpX X-Gm-Gg: AZuq6aK/fCFm9sZvpg5otHoYuqJAfiqg99Kor3qb4HtLsiAwh35uL/fde8nQoE2ZCbM ktErXSdYGUxHKJDMsbTST23HHrLDQWou3PxcJ0TjKuuygpvhqCOmjeSSNUYHq628f0J/b7ya27p H+2vRiUcS87+z83DLzlpL7rTBokVDaUeImsU3cIDFubapxUOAymYZ+ZuFlgSOMsiaaNpkHKNVHk HMlQSfwxW6wt/H2YJrpjf9vHT6ISKGgv6OY4LPEKb8qpEqznlR0rx73tk/+pc4xpOH1JflEM1h0 NU5znV9yAi8BRkWBcLk/+iWciw+9q1/cV8fneP14r5N5QHKuGXAH X-Received: by 2002:a05:7022:2491:b0:122:33e:6ec1 with SMTP id a92af1059eb24-1247d90e034mr644009c88.0.1769163802143; Fri, 23 Jan 2026 02:23:22 -0800 (PST) MIME-Version: 1.0 From: Thomas Munro Date: Fri, 23 Jan 2026 23:22:45 +1300 X-Gm-Features: AZwV_Qi6Lt371TdGn0cY0B-uxmcIjP5JUfXYKJcyu_AM0QSExQ9iC8jGGCi4DLg Message-ID: Subject: Time to drop RADIUS support? To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000fa5f2606490b8b21" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000fa5f2606490b8b21 Content-Type: text/plain; charset="UTF-8" Hi, A bit over a year ago, I wrote about a RADIUS vulnerability and a recommended mitigation[1]. I was grateful for the reviews, but I lost steam on those patches because: 1. Our implementation seems to have accidental (?) resilience because it has a short hard-coded timeout. The RADIUS/UDP Considered Harmful[0] people used 47 servers to get "2% of the successful runs to finish before 240s and 16% before 300s", but we time out after 3 seconds. Assuming perfect scaling, maybe they could use 4700 servers to get a 16% chance of success in 3s... or maybe I have the maths wrong but it's fairly extreme anyway... 2. It seems increasingly likely that there are no users, since RADIUS/UDP without the mitigation spews warnings from FreeRADIUS, and Microsoft RADIUS's 2024 update (KB5040456) recommended requiring it (though you didn't have to accept IIUC). I'm pretty sure we'd have heard about it from users if there were any. 3. That mitigation would help, but in the end it's still leaky obfuscation of credentials + MD5-based technology that is being formally deprecated with a mandated replacement[2], and de facto has been for a long time. The real recommendation of the paper was "don't use RADIUS/UDP at all", and I don't want to expend energy writing a RADIUS/TLS client for a hypothetical user, so I think we should just delete it all, and stick a deprecation notice in the release branch documentation, as attached. That'd also mean our Windows select() and non-thread-safe UDP kludges can be VACUUMed. AFAICS you can already do RADIUS better with PAM using a module maintained by the FreeRADIUS project (see below for quick and dirty demo). That way it's not our problem, follows the standards etc. The only issue I can think of with that is that Windows and OpenBSD probably don't have PAM. But then, recall that we are talking about approximately zero users so I think we can still hit 100% of them this way? === Example of RADIUS via PAM === Tell PAM how to authenticate for service postgresql in /etc/pam.d/postgresql: #%PAM-1.0 auth required pam_radius.so require_message_authenticator account required pam_permit.so Tell pam_radius.so how to talk to RADIUS server in /etc/radius.conf: # Server[:port] SharedSecret Timeout Retries 127.0.0.1 shared_secret 3 3 Tell PostgreSQL to use PAM service postgresql in pg_hba.conf: host all all 127.0.0.1/32 pam pamservice=postgresql === Setting up a test server to try it out === Tell FreeRADIUS how to be a RADIUS server in /tmp/radiusd/radiusd.conf: /tmp/radiusd/radiusd.conf client default { ipaddr = "127.0.0.1" secret = "shared_secret" } modules { files { filename = "/tmp/radiusd/users.txt" } pap { } } server default { listen { type = "auth" ipv4addr = "127.0.0.1" port = "1812" } authenticate { Auth-Type PAP { pap } } authorize { files pap } } log { destination = "files" localstatedir = "/tmp/radiusd" logdir = "/tmp/radiusd" file = "/tmp/radiusd/radiusd.log" } pidfile = "/tmp/radiusd/radiusd.pid" Tell FreeRADIUS the passwords in /tmp/radiusd/users.txt: testuser Cleartext-Password := "xxx" Then run it in the foreground with "radiusd -d /tmp/radiusd -f". If you leave out "require_message_authenticator" from /etc/pam.d/postgresql then you'll get log messages just like when PostgreSQL speaks RADIUS natively: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! BlastRADIUS check: Received packet without Message-Authenticator. Setting "require_message_authenticator = false" for client default !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! UPGRADE THE CLIENT AS YOUR NETWORK IS VULNERABLE TO THE BLASTRADIUS ATTACK. Once the client is upgraded, set "require_message_authenticator = true" for client default !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Both client and server should ideally be set to require Message-Authenticator. Presumably with more coffee and man pages you could also configure it to use RADIUS/TLS instead of RADIUS/UDP, etc. [0] https://www.usenix.org/conference/usenixsecurity24/presentation/goldberg [1] https://www.postgresql.org/message-id/flat/CA%2BhUKGLRSPTOC_ygx4_sJjWeKOkOpWGCBCJiRq8cPNuMisuzgw%40mail.gmail.com [2] https://datatracker.ietf.org/doc/draft-ietf-radext-deprecating-radius/ --000000000000fa5f2606490b8b21 Content-Type: application/x-patch; name="0001-Doc-Mark-RADIUS-deprecated.patch" Content-Disposition: attachment; filename="0001-Doc-Mark-RADIUS-deprecated.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkqc4gh20 RnJvbSBkMzQxODU3ZTkyZjY1ZWIxOTExNzIxYjAwNTY0Mjg2MzMyMzNiMjc1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjMgSmFuIDIwMjYgMTQ6MjM6NTMgKzEzMDAKU3ViamVjdDogW1BBVENIIDEv M10gRG9jOiBNYXJrIFJBRElVUyBkZXByZWNhdGVkLgoKUkFESVVTIHN1cHBvcnQgd2lsbCBiZSBk cm9wcGVkIGluIG1hc3Rlci4gIEl0IHdhcyBuZXZlciB1cGRhdGVkIGZvcgpSQURJVVMvVExTIG9y IHRoZSBNZXNzYWdlQXV0aGVudGljYXRvciBhdHRyaWJ1dGUgdGhhdCBtaXRpZ2F0ZXMgYWdhaW5z dAp0aGUgQmxhc3QtUkFESVVTIHZ1bG5lcmFiaWxpdHksIHRob3VnaCBQb3N0Z3JlU1FMIGlzIHRo b3VnaHQgdG8gYmUKYWNjaWRlbnRhbGx5IHJlc2lzdGFudCBiZWNhdXNlIG9mIGl0cyBzaG9ydCB0 aW1lb3V0LiAgVGhlIGF1dGhvcnMKcmVjb21tZW5kIGF2b2lkaW5nIFJBRElVUy9VRFAgY29tcGxl dGVseSwgYW5kIGEgZHJhZnQgUkZDWzFdIGlzIGluIHRoZQpwcm9jZXNzIG9mIGZvcm1hbGl6aW5n IHRoYXQuCgpbMV0gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvZHJhZnQtaWV0Zi1y YWRleHQtZGVwcmVjYXRpbmctcmFkaXVzLwoKQmFja3BhdGNoLXRocm91Z2g6IDE0ClJldmlld2Vk LWJ5OgpEaXNjdXNzaW9uOgotLS0KIGRvYy9zcmMvc2dtbC9jbGllbnQtYXV0aC5zZ21sIHwgOSAr KysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9k b2Mvc3JjL3NnbWwvY2xpZW50LWF1dGguc2dtbCBiL2RvYy9zcmMvc2dtbC9jbGllbnQtYXV0aC5z Z21sCmluZGV4IGEzNDdlZTE4OTgwLi4wMGNmODgyYTczZiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL2NsaWVudC1hdXRoLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NsaWVudC1hdXRoLnNnbWwK QEAgLTIxMTAsNiArMjExMCwxNSBAQCBob3N0IC4uLiBsZGFwIGxkYXBiYXNlZG49ImRjPWV4YW1w bGUsZGM9bmV0IgogICAgIHRoZSB1c2VyIG5hbWUvcGFzc3dvcmQgcGFpcnMuIFRoZXJlZm9yZSB0 aGUgdXNlciBtdXN0IGFscmVhZHkKICAgICBleGlzdCBpbiB0aGUgZGF0YWJhc2UgYmVmb3JlIFJB RElVUyBjYW4gYmUgdXNlZCBmb3IKICAgICBhdXRoZW50aWNhdGlvbi4KKyAgICA8bm90ZT4KKyAg ICAgPHBhcmE+CisgICAgICBPbmx5IHRoZSBvYnNvbGV0ZSBSQURJVVMvVURQIHByb3RvY29sIGlz IHN1cHBvcnRlZC4gIFRoaXMKKyAgICAgIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHByb3ZpZGUg dGhlIE1lc3NhZ2UtQXV0aGVudGljYXRvcgorICAgICAgYXR0cmlidXRlLCB3aGljaCBtYXkgYmUg cmVxdWlyZWQgYnkgbW9kZXJuIFJBRElVUyBzZXJ2ZXJzLgorICAgICAgUkFESVVTL1VEUCBzaG91 bGQgYmUgY29uc2lkZXJlZCBpbnNlY3VyZSBhbmQgZGVwcmVjYXRlZCwgYW5kCisgICAgICB3aWxs IGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4KKyAgICAgPC9wYXJhPgorICAgIDwvbm90 ZT4KICAgIDwvcGFyYT4KIAogICAgPHBhcmE+Ci0tIAoyLjUyLjAKCg== --000000000000fa5f2606490b8b21 Content-Type: application/x-patch; name="0002-Drop-RADIUS-support.patch" Content-Disposition: attachment; filename="0002-Drop-RADIUS-support.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkqc4jdj1 RnJvbSAzZmIzZTJjN2QwMDJkZWVkMTlmODlkNjlmMTViNDljMGQzNTliM2U0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjMgSmFuIDIwMjYgMTI6NDg6MjEgKzEzMDAKU3ViamVjdDogW1BBVENIIDIv M10gRHJvcCBSQURJVVMgc3VwcG9ydC4KCk91ciBSQURJVVMgYXV0aGVudGljYXRpb24gc3VwcG9y dGVkIG9ubHkgUkFESVVTL1VEUCB3aXRoIE1ENSBhbmQgd2Vha2x5CnByb3RlY3RlZCBjcmVkZW50 aWFscywgYW5kIGRpZG4ndCB1c2UgdGhlIHJlY29tbWVuZGVkCk1lc3NhZ2UtQXV0aGVudGljYXRv ciBhdHRyaWJ1dGUgdG8gbWl0aWdhdGUgYWdhaW5zdCB0aGUgQmxhc3QtUkFESVVTCnZ1bG5lcmFi aWxpdHkuICBCeSBub3csIHBvcHVsYXIgUkFESVVTIHNlcnZlcnMgYXJlIGV4cGVjdGVkIHRvIGdl bmVyYXRlCmxvdWQgd2FybmluZ3Mgb3IgcmVqZWN0IG91ciBhdXRoZW50aWNhdGlvbiBhdHRlbXB0 cyBvdXRyaWdodC4KClNpbmNlIHRoZXJlIGhhdmUgYmVlbiBubyB1c2VyIHJlcG9ydHMgYWJvdXQg dGhpcywgaXQgc2VlbXMgdW5saWtlbHkgdGhhdAp0aGVyZSBhcmUgdXNlcnMuCgpSZXZpZXdlZC1i eToKRGlzY3Vzc2lvbjoKLS0tCiBkb2Mvc3JjL3NnbWwvY2xpZW50LWF1dGguc2dtbCAgICAgICAg fCAxMzcgLS0tLS0tLQogc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5jICAgICAgICAgICAgIHwgNTEx ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvbGlicHEvaGJhLmMgICAg ICAgICAgICAgIHwgMjE2IC0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9saWJwcS9wZ19oYmEuY29u Zi5zYW1wbGUgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9oYmFmdW5jcy5jICAgICB8 ICAxOSAtCiBzcmMvaW5jbHVkZS9saWJwcS9oYmEuaCAgICAgICAgICAgICAgfCAgIDkgLQogc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgIHwgICAyIC0KIDcgZmlsZXMgY2hhbmdl ZCwgMyBpbnNlcnRpb25zKCspLCA4OTUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL2NsaWVudC1hdXRoLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY2xpZW50LWF1dGguc2dtbApp bmRleCAwMGNmODgyYTczZi4uMTZhMzg1MTI3ZDcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9j bGllbnQtYXV0aC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jbGllbnQtYXV0aC5zZ21sCkBAIC02 MTYsMTYgKzYxNiw2IEBAIGluY2x1ZGVfZGlyICAgICAgICAgPHJlcGxhY2VhYmxlPmRpcmVjdG9y eTwvcmVwbGFjZWFibGU+CiAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50 cnk+CiAKLSAgICAgICA8dmFybGlzdGVudHJ5PgotICAgICAgICA8dGVybT48bGl0ZXJhbD5yYWRp dXM8L2xpdGVyYWw+PC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICA8cGFyYT4K LSAgICAgICAgICBBdXRoZW50aWNhdGUgdXNpbmcgYSBSQURJVVMgc2VydmVyLiBTZWUgPHhyZWYK LSAgICAgICAgICBsaW5rZW5kPSJhdXRoLXJhZGl1cyIvPiBmb3IgZGV0YWlscy4KLSAgICAgICAg IDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICA8L3Zhcmxpc3RlbnRyeT4KLQog ICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmNlcnQ8L2xpdGVy YWw+PC90ZXJtPgogICAgICAgICA8bGlzdGl0ZW0+CkBAIC0xMTI3LDEyICsxMTE3LDYgQEAgb21p Y3JvbiAgICAgICAgIGJyeWFuaCAgICAgICAgICAgICAgICAgIGd1ZXN0MQogICAgICAgcmVsaWVz IG9uIGFuIExEQVAgYXV0aGVudGljYXRpb24gc2VydmVyLgogICAgICA8L3BhcmE+CiAgICAgPC9s aXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+Ci0gICAgIDxwYXJhPgotICAgICAgPGxpbmsgbGlua2Vu ZD0iYXV0aC1yYWRpdXMiPlJBRElVUyBhdXRoZW50aWNhdGlvbjwvbGluaz4sIHdoaWNoCi0gICAg ICByZWxpZXMgb24gYSBSQURJVVMgYXV0aGVudGljYXRpb24gc2VydmVyLgotICAgICA8L3BhcmE+ Ci0gICAgPC9saXN0aXRlbT4KICAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgogICAgICAgPGxp bmsgbGlua2VuZD0iYXV0aC1jZXJ0Ij5DZXJ0aWZpY2F0ZSBhdXRoZW50aWNhdGlvbjwvbGluaz4s IHdoaWNoCkBAIC0yMDk2LDEyNyArMjA4MCw2IEBAIGhvc3QgLi4uIGxkYXAgbGRhcGJhc2Vkbj0i ZGM9ZXhhbXBsZSxkYz1uZXQiCiAKICAgPC9zZWN0MT4KIAotICA8c2VjdDEgaWQ9ImF1dGgtcmFk aXVzIj4KLSAgIDx0aXRsZT5SQURJVVMgQXV0aGVudGljYXRpb248L3RpdGxlPgotCi0gICA8aW5k ZXh0ZXJtIHpvbmU9ImF1dGgtcmFkaXVzIj4KLSAgICA8cHJpbWFyeT5SQURJVVM8L3ByaW1hcnk+ Ci0gICA8L2luZGV4dGVybT4KLQotICAgPHBhcmE+Ci0gICAgVGhpcyBhdXRoZW50aWNhdGlvbiBt ZXRob2Qgb3BlcmF0ZXMgc2ltaWxhcmx5IHRvCi0gICAgPGxpdGVyYWw+cGFzc3dvcmQ8L2xpdGVy YWw+IGV4Y2VwdCB0aGF0IGl0IHVzZXMgUkFESVVTCi0gICAgYXMgdGhlIHBhc3N3b3JkIHZlcmlm aWNhdGlvbiBtZXRob2QuIFJBRElVUyBpcyB1c2VkIG9ubHkgdG8gdmFsaWRhdGUKLSAgICB0aGUg dXNlciBuYW1lL3Bhc3N3b3JkIHBhaXJzLiBUaGVyZWZvcmUgdGhlIHVzZXIgbXVzdCBhbHJlYWR5 Ci0gICAgZXhpc3QgaW4gdGhlIGRhdGFiYXNlIGJlZm9yZSBSQURJVVMgY2FuIGJlIHVzZWQgZm9y Ci0gICAgYXV0aGVudGljYXRpb24uCi0gICAgPG5vdGU+Ci0gICAgIDxwYXJhPgotICAgICAgT25s eSB0aGUgb2Jzb2xldGUgUkFESVVTL1VEUCBwcm90b2NvbCBpcyBzdXBwb3J0ZWQuICBUaGlzCi0g ICAgICBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBwcm92aWRlIHRoZSBNZXNzYWdlLUF1dGhlbnRp Y2F0b3IKLSAgICAgIGF0dHJpYnV0ZSwgd2hpY2ggbWF5IGJlIHJlcXVpcmVkIGJ5IG1vZGVybiBS QURJVVMgc2VydmVycy4KLSAgICAgIFJBRElVUy9VRFAgc2hvdWxkIGJlIGNvbnNpZGVyZWQgaW5z ZWN1cmUgYW5kIGRlcHJlY2F0ZWQsIGFuZAotICAgICAgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0 dXJlIHJlbGVhc2UuCi0gICAgIDwvcGFyYT4KLSAgICA8L25vdGU+Ci0gICA8L3BhcmE+Ci0KLSAg IDxwYXJhPgotICAgIFdoZW4gdXNpbmcgUkFESVVTIGF1dGhlbnRpY2F0aW9uLCBhbiBBY2Nlc3Mg UmVxdWVzdCBtZXNzYWdlIHdpbGwgYmUgc2VudAotICAgIHRvIHRoZSBjb25maWd1cmVkIFJBRElV UyBzZXJ2ZXIuIFRoaXMgcmVxdWVzdCB3aWxsIGJlIG9mIHR5cGUKLSAgICA8bGl0ZXJhbD5BdXRo ZW50aWNhdGUgT25seTwvbGl0ZXJhbD4sIGFuZCBpbmNsdWRlIHBhcmFtZXRlcnMgZm9yCi0gICAg PGxpdGVyYWw+dXNlciBuYW1lPC9saXRlcmFsPiwgPGxpdGVyYWw+cGFzc3dvcmQ8L2xpdGVyYWw+ IChlbmNyeXB0ZWQpIGFuZAotICAgIDxsaXRlcmFsPk5BUyBJZGVudGlmaWVyPC9saXRlcmFsPi4g VGhlIHJlcXVlc3Qgd2lsbCBiZSBlbmNyeXB0ZWQgdXNpbmcKLSAgICBhIHNlY3JldCBzaGFyZWQg d2l0aCB0aGUgc2VydmVyLiBUaGUgUkFESVVTIHNlcnZlciB3aWxsIHJlc3BvbmQgdG8KLSAgICB0 aGlzIHJlcXVlc3Qgd2l0aCBlaXRoZXIgPGxpdGVyYWw+QWNjZXNzIEFjY2VwdDwvbGl0ZXJhbD4g b3IKLSAgICA8bGl0ZXJhbD5BY2Nlc3MgUmVqZWN0PC9saXRlcmFsPi4gVGhlcmUgaXMgbm8gc3Vw cG9ydCBmb3IgUkFESVVTIGFjY291bnRpbmcuCi0gICA8L3BhcmE+Ci0KLSAgIDxwYXJhPgotICAg IE11bHRpcGxlIFJBRElVUyBzZXJ2ZXJzIGNhbiBiZSBzcGVjaWZpZWQsIGluIHdoaWNoIGNhc2Ug dGhleSB3aWxsCi0gICAgYmUgdHJpZWQgc2VxdWVudGlhbGx5LiBJZiBhIG5lZ2F0aXZlIHJlc3Bv bnNlIGlzIHJlY2VpdmVkIGZyb20KLSAgICBhIHNlcnZlciwgdGhlIGF1dGhlbnRpY2F0aW9uIHdp bGwgZmFpbC4gSWYgbm8gcmVzcG9uc2UgaXMgcmVjZWl2ZWQsCi0gICAgdGhlIG5leHQgc2VydmVy IGluIHRoZSBsaXN0IHdpbGwgYmUgdHJpZWQuIFRvIHNwZWNpZnkgbXVsdGlwbGUKLSAgICBzZXJ2 ZXJzLCBzZXBhcmF0ZSB0aGUgc2VydmVyIG5hbWVzIHdpdGggY29tbWFzIGFuZCBzdXJyb3VuZCB0 aGUgbGlzdAotICAgIHdpdGggZG91YmxlIHF1b3Rlcy4gSWYgbXVsdGlwbGUgc2VydmVycyBhcmUg c3BlY2lmaWVkLCB0aGUgb3RoZXIKLSAgICBSQURJVVMgb3B0aW9ucyBjYW4gYWxzbyBiZSBnaXZl biBhcyBjb21tYS1zZXBhcmF0ZWQgbGlzdHMsIHRvIHByb3ZpZGUKLSAgICBpbmRpdmlkdWFsIHZh bHVlcyBmb3IgZWFjaCBzZXJ2ZXIuIFRoZXkgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGFzCi0gICAg YSBzaW5nbGUgdmFsdWUsIGluIHdoaWNoIGNhc2UgdGhhdCB2YWx1ZSB3aWxsIGFwcGx5IHRvIGFs bCBzZXJ2ZXJzLgotICAgPC9wYXJhPgotCi0gICA8cGFyYT4KLSAgICBUaGUgZm9sbG93aW5nIGNv bmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3VwcG9ydGVkIGZvciBSQURJVVM6Ci0gICAgIDx2YXJp YWJsZWxpc3Q+Ci0gICAgICA8dmFybGlzdGVudHJ5PgotICAgICAgIDx0ZXJtPjxsaXRlcmFsPnJh ZGl1c3NlcnZlcnM8L2xpdGVyYWw+PC90ZXJtPgotICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAg PHBhcmE+Ci0gICAgICAgICBUaGUgRE5TIG5hbWVzIG9yIElQIGFkZHJlc3NlcyBvZiB0aGUgUkFE SVVTIHNlcnZlcnMgdG8gY29ubmVjdCB0by4KLSAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIHJl cXVpcmVkLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDwvdmFy bGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5PgotICAgICAgIDx0ZXJtPjxsaXRlcmFs PnJhZGl1c3NlY3JldHM8L2xpdGVyYWw+PC90ZXJtPgotICAgICAgIDxsaXN0aXRlbT4KLSAgICAg ICAgPHBhcmE+Ci0gICAgICAgICBUaGUgc2hhcmVkIHNlY3JldHMgdXNlZCB3aGVuIHRhbGtpbmcg c2VjdXJlbHkgdG8gdGhlIFJBRElVUwotICAgICAgICAgc2VydmVycy4gVGhpcyBtdXN0IGhhdmUg ZXhhY3RseSB0aGUgc2FtZSB2YWx1ZSBvbiB0aGUgUG9zdGdyZVNRTAotICAgICAgICAgYW5kIFJB RElVUyBzZXJ2ZXJzLiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoaXMgYmUgYSBzdHJpbmcgb2YK LSAgICAgICAgIGF0IGxlYXN0IDE2IGNoYXJhY3RlcnMuIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVp cmVkLgotICAgICAgICAgPG5vdGU+Ci0gICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGUgZW5j cnlwdGlvbiB2ZWN0b3IgdXNlZCB3aWxsIG9ubHkgYmUgY3J5cHRvZ3JhcGhpY2FsbHkKLSAgICAg ICAgICBzdHJvbmcgaWYgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBpcyBi dWlsdCB3aXRoIHN1cHBvcnQgZm9yCi0gICAgICAgICAgPHByb2R1Y3RuYW1lPk9wZW5TU0w8L3By b2R1Y3RuYW1lPi4gSW4gb3RoZXIgY2FzZXMsIHRoZSB0cmFuc21pc3Npb24gdG8gdGhlCi0gICAg ICAgICAgUkFESVVTIHNlcnZlciBzaG91bGQgb25seSBiZSBjb25zaWRlcmVkIG9iZnVzY2F0ZWQs IG5vdCBzZWN1cmVkLCBhbmQKLSAgICAgICAgICBleHRlcm5hbCBzZWN1cml0eSBtZWFzdXJlcyBz aG91bGQgYmUgYXBwbGllZCBpZiBuZWNlc3NhcnkuCi0gICAgICAgICA8L3BhcmE+Ci0gICAgICAg ICA8L25vdGU+Ci0gICAgICAgIDwvcGFyYT4KLSAgICAgICA8L2xpc3RpdGVtPgotICAgICAgPC92 YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnk+Ci0gICAgICAgPHRlcm0+PGxpdGVy YWw+cmFkaXVzcG9ydHM8L2xpdGVyYWw+PC90ZXJtPgotICAgICAgIDxsaXN0aXRlbT4KLSAgICAg ICAgPHBhcmE+Ci0gICAgICAgICBUaGUgcG9ydCBudW1iZXJzIHRvIGNvbm5lY3QgdG8gb24gdGhl IFJBRElVUyBzZXJ2ZXJzLiBJZiBubyBwb3J0Ci0gICAgICAgICBpcyBzcGVjaWZpZWQsIHRoZSBk ZWZhdWx0IFJBRElVUyBwb3J0ICg8bGl0ZXJhbD4xODEyPC9saXRlcmFsPikKLSAgICAgICAgIHdp bGwgYmUgdXNlZC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8 L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgICA8dGVybT48bGl0 ZXJhbD5yYWRpdXNpZGVudGlmaWVyczwvbGl0ZXJhbD48L3Rlcm0+Ci0gICAgICAgPGxpc3RpdGVt PgotICAgICAgICA8cGFyYT4KLSAgICAgICAgIFRoZSBzdHJpbmdzIHRvIGJlIHVzZWQgYXMgPGxp dGVyYWw+TkFTIElkZW50aWZpZXI8L2xpdGVyYWw+IGluIHRoZQotICAgICAgICAgUkFESVVTIHJl cXVlc3RzLiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvCi0gICAg ICAgICBpZGVudGlmeSB3aGljaCBkYXRhYmFzZSBjbHVzdGVyIHRoZSB1c2VyIGlzIGF0dGVtcHRp bmcgdG8gY29ubmVjdAotICAgICAgICAgdG8sIHdoaWNoIGNhbiBiZSB1c2VmdWwgZm9yIHBvbGlj eSBtYXRjaGluZyBvbgotICAgICAgICAgdGhlIFJBRElVUyBzZXJ2ZXIuIElmIG5vIGlkZW50aWZp ZXIgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdAotICAgICAgICAgPGxpdGVyYWw+cG9zdGdyZXNx bDwvbGl0ZXJhbD4gd2lsbCBiZSB1c2VkLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgPC9saXN0 aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgIDwvdmFyaWFibGVsaXN0PgotICAg PC9wYXJhPgotCi0gICA8cGFyYT4KLSAgICBJZiBpdCBpcyBuZWNlc3NhcnkgdG8gaGF2ZSBhIGNv bW1hIG9yIHdoaXRlc3BhY2UgaW4gYSBSQURJVVMgcGFyYW1ldGVyCi0gICAgdmFsdWUsIHRoYXQg Y2FuIGJlIGRvbmUgYnkgcHV0dGluZyBkb3VibGUgcXVvdGVzIGFyb3VuZCB0aGUgdmFsdWUsIGJ1 dAotICAgIGl0IGlzIHRlZGlvdXMgYmVjYXVzZSB0d28gbGF5ZXJzIG9mIGRvdWJsZS1xdW90aW5n IGFyZSBub3cgcmVxdWlyZWQuCi0gICAgQW4gZXhhbXBsZSBvZiBwdXR0aW5nIHdoaXRlc3BhY2Ug aW50byBSQURJVVMgc2VjcmV0IHN0cmluZ3MgaXM6Ci08cHJvZ3JhbWxpc3Rpbmc+Ci1ob3N0IC4u LiByYWRpdXMgcmFkaXVzc2VydmVycz0ic2VydmVyMSxzZXJ2ZXIyIiByYWRpdXNzZWNyZXRzPSIi InNlY3JldCBvbmUiIiwiInNlY3JldCB0d28iIiIKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICA8L3Bh cmE+Ci0gIDwvc2VjdDE+Ci0KICAgPHNlY3QxIGlkPSJhdXRoLWNlcnQiPgogICAgPHRpdGxlPkNl cnRpZmljYXRlIEF1dGhlbnRpY2F0aW9uPC90aXRsZT4KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvbGlicHEvYXV0aC5jIGIvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5jCmluZGV4IDc5NWJmZWQ4 ZDE5Li5kNWI5MTMyNDVmNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5jCisr KyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGguYwpAQCAtMjAyLDEzICsyMDIsNiBAQCBzdGF0aWMg aW50CXBnX1NTUElfbWFrZV91cG4oY2hhciAqYWNjb3VudG5hbWUsCiAJCQkJCQkJIGJvb2wgdXBk YXRlX2FjY291bnRuYW1lKTsKICNlbmRpZgogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFJBRElVUyBBdXRoZW50 aWNhdGlvbgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyBpbnQJQ2hlY2tSQURJVVNBdXRoKFBvcnQg KnBvcnQpOwotc3RhdGljIGludAlQZXJmb3JtUmFkaXVzVHJhbnNhY3Rpb24oY29uc3QgY2hhciAq c2VydmVyLCBjb25zdCBjaGFyICpzZWNyZXQsIGNvbnN0IGNoYXIgKnBvcnRzdHIsIGNvbnN0IGNo YXIgKmlkZW50aWZpZXIsIGNvbnN0IGNoYXIgKnVzZXJfbmFtZSwgY29uc3QgY2hhciAqcGFzc3dk KTsKLQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KICAqIEdsb2JhbCBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbnMKQEAg LTI5NSw5ICsyODgsNiBAQCBhdXRoX2ZhaWxlZChQb3J0ICpwb3J0LCBpbnQgc3RhdHVzLCBjb25z dCBjaGFyICpsb2dkZXRhaWwpCiAJCWNhc2UgdWFDZXJ0OgogCQkJZXJyc3RyID0gZ2V0dGV4dF9u b29wKCJjZXJ0aWZpY2F0ZSBhdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yIHVzZXIgXCIlc1wiIik7 CiAJCQlicmVhazsKLQkJY2FzZSB1YVJBRElVUzoKLQkJCWVycnN0ciA9IGdldHRleHRfbm9vcCgi UkFESVVTIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCBmb3IgdXNlciBcIiVzXCIiKTsKLQkJCWJyZWFr OwogCQljYXNlIHVhT0F1dGg6CiAJCQllcnJzdHIgPSBnZXR0ZXh0X25vb3AoIk9BdXRoIGJlYXJl ciBhdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yIHVzZXIgXCIlc1wiIik7CiAJCQlicmVhazsKQEAg LTYxNiw5ICs2MDYsNiBAQCBDbGllbnRBdXRoZW50aWNhdGlvbihQb3J0ICpwb3J0KQogCQkJQXNz ZXJ0KGZhbHNlKTsKICNlbmRpZgogCQkJYnJlYWs7Ci0JCWNhc2UgdWFSQURJVVM6Ci0JCQlzdGF0 dXMgPSBDaGVja1JBRElVU0F1dGgocG9ydCk7Ci0JCQlicmVhazsKIAkJY2FzZSB1YUNlcnQ6CiAJ CQkvKiB1YUNlcnQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIGNsaWVudGNlcnQ9dmVyaWZ5LWZ1bGwg KHVhVHJ1c3QpICovCiAJCWNhc2UgdWFUcnVzdDoKQEAgLTc1Nyw3ICs3NDQsNyBAQCByZWN2X3Bh c3N3b3JkX3BhY2tldChQb3J0ICpwb3J0KQogCSAqIFdlIHJlbHkgb24gdGhhdCBmb3IgTUQ1IGFu ZCBTQ1JBTSBhdXRoZW50aWNhdGlvbiwgYnV0IHdlIHN0aWxsIG5lZWQKIAkgKiB0aGlzIGNoZWNr IGhlcmUsIHRvIHByZXZlbnQgYW4gZW1wdHkgcGFzc3dvcmQgZnJvbSBiZWluZyB1c2VkIHdpdGgK IAkgKiBhdXRoZW50aWNhdGlvbiBtZXRob2RzIHRoYXQgY2hlY2sgdGhlIHBhc3N3b3JkIGFnYWlu c3QgYW4gZXh0ZXJuYWwKLQkgKiBzeXN0ZW0sIGxpa2UgUEFNLCBMREFQIGFuZCBSQURJVVMuCisJ ICogc3lzdGVtLCBsaWtlIFBBTSBhbmQgTERBUC4KIAkgKi8KIAlpZiAoYnVmLmxlbiA9PSAxKQog CQllcmVwb3J0KEVSUk9SLApAQCAtMjc3Miw0OTkgKzI3NTksMyBAQCBDaGVja0NlcnRBdXRoKFBv cnQgKnBvcnQpCiAJcmV0dXJuIHN0YXR1c19jaGVja191c2VybWFwOwogfQogI2VuZGlmCi0KLQot LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCi0gKiBSQURJVVMgYXV0aGVudGljYXRpb24KLSAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLS8q Ci0gKiBSQURJVVMgYXV0aGVudGljYXRpb24gaXMgZGVzY3JpYmVkIGluIFJGQzI4NjUgKGFuZCBz ZXZlcmFsIG90aGVycykuCi0gKi8KLQotI2RlZmluZSBSQURJVVNfVkVDVE9SX0xFTkdUSCAxNgot I2RlZmluZSBSQURJVVNfSEVBREVSX0xFTkdUSCAyMAotI2RlZmluZSBSQURJVVNfTUFYX1BBU1NX T1JEX0xFTkdUSCAxMjgKLQotLyogTWF4aW11bSBzaXplIG9mIGEgUkFESVVTIHBhY2tldCB3ZSB3 aWxsIGNyZWF0ZSBvciBhY2NlcHQgKi8KLSNkZWZpbmUgUkFESVVTX0JVRkZFUl9TSVpFIDEwMjQK LQotdHlwZWRlZiBzdHJ1Y3QKLXsKLQl1aW50OAkJYXR0cmlidXRlOwotCXVpbnQ4CQlsZW5ndGg7 Ci0JdWludDgJCWRhdGFbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKLX0gcmFkaXVzX2F0dHJpYnV0 ZTsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLQl1aW50OAkJY29kZTsKLQl1aW50OAkJaWQ7Ci0JdWlu dDE2CQlsZW5ndGg7Ci0JdWludDgJCXZlY3RvcltSQURJVVNfVkVDVE9SX0xFTkdUSF07Ci0JLyog dGhpcyBpcyBhIGJpdCBsb25nZXIgdGhhbiBzdHJpY3RseSBuZWNlc3Nhcnk6ICovCi0JY2hhcgkJ cGFkW1JBRElVU19CVUZGRVJfU0laRSAtIFJBRElVU19WRUNUT1JfTEVOR1RIXTsKLX0gcmFkaXVz X3BhY2tldDsKLQotLyogUkFESVVTIHBhY2tldCB0eXBlcyAqLwotI2RlZmluZSBSQURJVVNfQUND RVNTX1JFUVVFU1QJMQotI2RlZmluZSBSQURJVVNfQUNDRVNTX0FDQ0VQVAkyCi0jZGVmaW5lIFJB RElVU19BQ0NFU1NfUkVKRUNUCTMKLQotLyogUkFESVVTIGF0dHJpYnV0ZXMgKi8KLSNkZWZpbmUg UkFESVVTX1VTRVJfTkFNRQkJMQotI2RlZmluZSBSQURJVVNfUEFTU1dPUkQJCQkyCi0jZGVmaW5l IFJBRElVU19TRVJWSUNFX1RZUEUJCTYKLSNkZWZpbmUgUkFESVVTX05BU19JREVOVElGSUVSCTMy Ci0KLS8qIFJBRElVUyBzZXJ2aWNlIHR5cGVzICovCi0jZGVmaW5lIFJBRElVU19BVVRIRU5USUNB VEVfT05MWQk4Ci0KLS8qIFNlY29uZHMgdG8gd2FpdCAtIFhYWDogc2hvdWxkIGJlIGluIGEgY29u ZmlnIHZhcmlhYmxlISAqLwotI2RlZmluZSBSQURJVVNfVElNRU9VVCAzCi0KLXN0YXRpYyB2b2lk Ci1yYWRpdXNfYWRkX2F0dHJpYnV0ZShyYWRpdXNfcGFja2V0ICpwYWNrZXQsIHVpbnQ4IHR5cGUs IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4pCi17Ci0JcmFkaXVzX2F0dHJpYnV0 ZSAqYXR0cjsKLQotCWlmIChwYWNrZXQtPmxlbmd0aCArIGxlbiA+IFJBRElVU19CVUZGRVJfU0la RSkKLQl7Ci0JCS8qCi0JCSAqIFdpdGggcmVtb3RlbHkgcmVhbGlzdGljIGRhdGEsIHRoaXMgY2Fu IG5ldmVyIGhhcHBlbi4gQnV0IGNhdGNoIGl0Ci0JCSAqIGp1c3QgdG8gbWFrZSBzdXJlIHdlIGRv bid0IG92ZXJydW4gYSBidWZmZXIuIFdlJ2xsIGp1c3Qgc2tpcCBhZGRpbmcKLQkJICogdGhlIGJy b2tlbiBhdHRyaWJ1dGUsIHdoaWNoIHdpbGwgaW4gdGhlIGVuZCBjYXVzZSBhdXRoZW50aWNhdGlv biB0bwotCQkgKiBmYWlsLgotCQkgKi8KLQkJZWxvZyhXQVJOSU5HLAotCQkJICJhZGRpbmcgYXR0 cmlidXRlIGNvZGUgJWQgd2l0aCBsZW5ndGggJWQgdG8gcmFkaXVzIHBhY2tldCB3b3VsZCBjcmVh dGUgb3ZlcnNpemUgcGFja2V0LCBpZ25vcmluZyIsCi0JCQkgdHlwZSwgbGVuKTsKLQkJcmV0dXJu OwotCX0KLQotCWF0dHIgPSAocmFkaXVzX2F0dHJpYnV0ZSAqKSAoKHVuc2lnbmVkIGNoYXIgKikg cGFja2V0ICsgcGFja2V0LT5sZW5ndGgpOwotCWF0dHItPmF0dHJpYnV0ZSA9IHR5cGU7Ci0JYXR0 ci0+bGVuZ3RoID0gbGVuICsgMjsJCS8qIHRvdGFsIHNpemUgaW5jbHVkZXMgdHlwZSBhbmQgbGVu Z3RoICovCi0JbWVtY3B5KGF0dHItPmRhdGEsIGRhdGEsIGxlbik7Ci0JcGFja2V0LT5sZW5ndGgg Kz0gYXR0ci0+bGVuZ3RoOwotfQotCi1zdGF0aWMgaW50Ci1DaGVja1JBRElVU0F1dGgoUG9ydCAq cG9ydCkKLXsKLQljaGFyCSAgICpwYXNzd2Q7Ci0JTGlzdENlbGwgICAqc2VydmVyLAotCQkJICAg KnNlY3JldHMsCi0JCQkgICAqcmFkaXVzcG9ydHMsCi0JCQkgICAqaWRlbnRpZmllcnM7Ci0KLQkv KiBNYWtlIHN1cmUgc3RydWN0IGFsaWdubWVudCBpcyBjb3JyZWN0ICovCi0JQXNzZXJ0KG9mZnNl dG9mKHJhZGl1c19wYWNrZXQsIHZlY3RvcikgPT0gNCk7Ci0KLQkvKiBWZXJpZnkgcGFyYW1ldGVy cyAqLwotCWlmIChwb3J0LT5oYmEtPnJhZGl1c3NlcnZlcnMgPT0gTklMKQotCXsKLQkJZXJlcG9y dChMT0csCi0JCQkJKGVycm1zZygiUkFESVVTIHNlcnZlciBub3Qgc3BlY2lmaWVkIikpKTsKLQkJ cmV0dXJuIFNUQVRVU19FUlJPUjsKLQl9Ci0KLQlpZiAocG9ydC0+aGJhLT5yYWRpdXNzZWNyZXRz ID09IE5JTCkKLQl7Ci0JCWVyZXBvcnQoTE9HLAotCQkJCShlcnJtc2coIlJBRElVUyBzZWNyZXQg bm90IHNwZWNpZmllZCIpKSk7Ci0JCXJldHVybiBTVEFUVVNfRVJST1I7Ci0JfQotCi0JLyogU2Vu ZCByZWd1bGFyIHBhc3N3b3JkIHJlcXVlc3QgdG8gY2xpZW50LCBhbmQgZ2V0IHRoZSByZXNwb25z ZSAqLwotCXNlbmRBdXRoUmVxdWVzdChwb3J0LCBBVVRIX1JFUV9QQVNTV09SRCwgTlVMTCwgMCk7 Ci0KLQlwYXNzd2QgPSByZWN2X3Bhc3N3b3JkX3BhY2tldChwb3J0KTsKLQlpZiAocGFzc3dkID09 IE5VTEwpCi0JCXJldHVybiBTVEFUVVNfRU9GOwkJLyogY2xpZW50IHdvdWxkbid0IHNlbmQgcGFz c3dvcmQgKi8KLQotCWlmIChzdHJsZW4ocGFzc3dkKSA+IFJBRElVU19NQVhfUEFTU1dPUkRfTEVO R1RIKQotCXsKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygiUkFESVVTIGF1dGhlbnRpY2F0 aW9uIGRvZXMgbm90IHN1cHBvcnQgcGFzc3dvcmRzIGxvbmdlciB0aGFuICVkIGNoYXJhY3RlcnMi LCBSQURJVVNfTUFYX1BBU1NXT1JEX0xFTkdUSCkpKTsKLQkJcGZyZWUocGFzc3dkKTsKLQkJcmV0 dXJuIFNUQVRVU19FUlJPUjsKLQl9Ci0KLQkvKgotCSAqIExvb3Agb3ZlciBhbmQgdHJ5IGVhY2gg c2VydmVyIGluIG9yZGVyLgotCSAqLwotCXNlY3JldHMgPSBsaXN0X2hlYWQocG9ydC0+aGJhLT5y YWRpdXNzZWNyZXRzKTsKLQlyYWRpdXNwb3J0cyA9IGxpc3RfaGVhZChwb3J0LT5oYmEtPnJhZGl1 c3BvcnRzKTsKLQlpZGVudGlmaWVycyA9IGxpc3RfaGVhZChwb3J0LT5oYmEtPnJhZGl1c2lkZW50 aWZpZXJzKTsKLQlmb3JlYWNoKHNlcnZlciwgcG9ydC0+aGJhLT5yYWRpdXNzZXJ2ZXJzKQotCXsK LQkJaW50CQkJcmV0ID0gUGVyZm9ybVJhZGl1c1RyYW5zYWN0aW9uKGxmaXJzdChzZXJ2ZXIpLAot CQkJCQkJCQkJCQkJICAgbGZpcnN0KHNlY3JldHMpLAotCQkJCQkJCQkJCQkJICAgcmFkaXVzcG9y dHMgPyBsZmlyc3QocmFkaXVzcG9ydHMpIDogTlVMTCwKLQkJCQkJCQkJCQkJCSAgIGlkZW50aWZp ZXJzID8gbGZpcnN0KGlkZW50aWZpZXJzKSA6IE5VTEwsCi0JCQkJCQkJCQkJCQkgICBwb3J0LT51 c2VyX25hbWUsCi0JCQkJCQkJCQkJCQkgICBwYXNzd2QpOwotCi0JCS8qLS0tLS0tCi0JCSAqIFNU QVRVU19PSyA9IExvZ2luIE9LCi0JCSAqIFNUQVRVU19FUlJPUiA9IExvZ2luIG5vdCBPSywgYnV0 IHRyeSBuZXh0IHNlcnZlcgotCQkgKiBTVEFUVVNfRU9GID0gTG9naW4gbm90IE9LLCBhbmQgZG9u J3QgdHJ5IG5leHQgc2VydmVyCi0JCSAqLS0tLS0tCi0JCSAqLwotCQlpZiAocmV0ID09IFNUQVRV U19PSykKLQkJewotCQkJc2V0X2F1dGhuX2lkKHBvcnQsIHBvcnQtPnVzZXJfbmFtZSk7Ci0KLQkJ CXBmcmVlKHBhc3N3ZCk7Ci0JCQlyZXR1cm4gU1RBVFVTX09LOwotCQl9Ci0JCWVsc2UgaWYgKHJl dCA9PSBTVEFUVVNfRU9GKQotCQl7Ci0JCQlwZnJlZShwYXNzd2QpOwotCQkJcmV0dXJuIFNUQVRV U19FUlJPUjsKLQkJfQotCi0JCS8qCi0JCSAqIHNlY3JldCwgcG9ydCBhbmQgaWRlbnRpZmllcnMg ZWl0aGVyIGhhdmUgbGVuZ3RoIDAgKHVzZSBkZWZhdWx0KSwKLQkJICogbGVuZ3RoIDEgKHVzZSB0 aGUgc2FtZSBldmVyeXdoZXJlKSBvciB0aGUgc2FtZSBsZW5ndGggYXMgc2VydmVycy4KLQkJICog U28gaWYgdGhlIGxlbmd0aCBpcyA+MSwgd2UgYWR2YW5jZSBvbmUgc3RlcC4gSW4gb3RoZXIgY2Fz ZXMsIHdlCi0JCSAqIGRvbid0IGFuZCB3aWxsIHRoZW4gcmV1c2UgdGhlIGNvcnJlY3QgdmFsdWUu Ci0JCSAqLwotCQlpZiAobGlzdF9sZW5ndGgocG9ydC0+aGJhLT5yYWRpdXNzZWNyZXRzKSA+IDEp Ci0JCQlzZWNyZXRzID0gbG5leHQocG9ydC0+aGJhLT5yYWRpdXNzZWNyZXRzLCBzZWNyZXRzKTsK LQkJaWYgKGxpc3RfbGVuZ3RoKHBvcnQtPmhiYS0+cmFkaXVzcG9ydHMpID4gMSkKLQkJCXJhZGl1 c3BvcnRzID0gbG5leHQocG9ydC0+aGJhLT5yYWRpdXNwb3J0cywgcmFkaXVzcG9ydHMpOwotCQlp ZiAobGlzdF9sZW5ndGgocG9ydC0+aGJhLT5yYWRpdXNpZGVudGlmaWVycykgPiAxKQotCQkJaWRl bnRpZmllcnMgPSBsbmV4dChwb3J0LT5oYmEtPnJhZGl1c2lkZW50aWZpZXJzLCBpZGVudGlmaWVy cyk7Ci0JfQotCi0JLyogTm8gc2VydmVycyBsZWZ0IHRvIHRyeSwgc28gZ2l2ZSB1cCAqLwotCXBm cmVlKHBhc3N3ZCk7Ci0JcmV0dXJuIFNUQVRVU19FUlJPUjsKLX0KLQotc3RhdGljIGludAotUGVy Zm9ybVJhZGl1c1RyYW5zYWN0aW9uKGNvbnN0IGNoYXIgKnNlcnZlciwgY29uc3QgY2hhciAqc2Vj cmV0LCBjb25zdCBjaGFyICpwb3J0c3RyLCBjb25zdCBjaGFyICppZGVudGlmaWVyLCBjb25zdCBj aGFyICp1c2VyX25hbWUsIGNvbnN0IGNoYXIgKnBhc3N3ZCkKLXsKLQlyYWRpdXNfcGFja2V0IHJh ZGl1c19zZW5kX3BhY2s7Ci0JcmFkaXVzX3BhY2tldCByYWRpdXNfcmVjdl9wYWNrOwotCXJhZGl1 c19wYWNrZXQgKnBhY2tldCA9ICZyYWRpdXNfc2VuZF9wYWNrOwotCXJhZGl1c19wYWNrZXQgKnJl Y2VpdmVwYWNrZXQgPSAmcmFkaXVzX3JlY3ZfcGFjazsKLQl2b2lkCSAgICpyYWRpdXNfYnVmZmVy ID0gJnJhZGl1c19zZW5kX3BhY2s7Ci0Jdm9pZAkgICAqcmVjZWl2ZV9idWZmZXIgPSAmcmFkaXVz X3JlY3ZfcGFjazsKLQlpbnQzMgkJc2VydmljZSA9IHBnX2h0b24zMihSQURJVVNfQVVUSEVOVElD QVRFX09OTFkpOwotCXVpbnQ4CSAgICpjcnlwdHZlY3RvcjsKLQlpbnQJCQllbmNyeXB0ZWRwYXNz d29yZGxlbjsKLQl1aW50OAkJZW5jcnlwdGVkcGFzc3dvcmRbUkFESVVTX01BWF9QQVNTV09SRF9M RU5HVEhdOwotCXVpbnQ4CSAgICptZDV0cmFpbGVyOwotCWludAkJCXBhY2tldGxlbmd0aDsKLQlw Z3NvY2tldAlzb2NrOwotCi0Jc3RydWN0IHNvY2thZGRyX2luNiBsb2NhbGFkZHI7Ci0Jc3RydWN0 IHNvY2thZGRyX2luNiByZW1vdGVhZGRyOwotCXN0cnVjdCBhZGRyaW5mbyBoaW50OwotCXN0cnVj dCBhZGRyaW5mbyAqc2VydmVyYWRkcnM7Ci0JaW50CQkJcG9ydDsKLQlzb2NrbGVuX3QJYWRkcnNp emU7Ci0JZmRfc2V0CQlmZHNldDsKLQlzdHJ1Y3QgdGltZXZhbCBlbmR0aW1lOwotCWludAkJCWks Ci0JCQkJaiwKLQkJCQlyOwotCi0JLyogQXNzaWduIGRlZmF1bHQgdmFsdWVzICovCi0JaWYgKHBv cnRzdHIgPT0gTlVMTCkKLQkJcG9ydHN0ciA9ICIxODEyIjsKLQlpZiAoaWRlbnRpZmllciA9PSBO VUxMKQotCQlpZGVudGlmaWVyID0gInBvc3RncmVzcWwiOwotCi0JTWVtU2V0KCZoaW50LCAwLCBz aXplb2YoaGludCkpOwotCWhpbnQuYWlfc29ja3R5cGUgPSBTT0NLX0RHUkFNOwotCWhpbnQuYWlf ZmFtaWx5ID0gQUZfVU5TUEVDOwotCXBvcnQgPSBhdG9pKHBvcnRzdHIpOwotCi0JciA9IHBnX2dl dGFkZHJpbmZvX2FsbChzZXJ2ZXIsIHBvcnRzdHIsICZoaW50LCAmc2VydmVyYWRkcnMpOwotCWlm IChyIHx8ICFzZXJ2ZXJhZGRycykKLQl7Ci0JCWVyZXBvcnQoTE9HLAotCQkJCShlcnJtc2coImNv dWxkIG5vdCB0cmFuc2xhdGUgUkFESVVTIHNlcnZlciBuYW1lIFwiJXNcIiB0byBhZGRyZXNzOiAl cyIsCi0JCQkJCQlzZXJ2ZXIsIGdhaV9zdHJlcnJvcihyKSkpKTsKLQkJaWYgKHNlcnZlcmFkZHJz KQotCQkJcGdfZnJlZWFkZHJpbmZvX2FsbChoaW50LmFpX2ZhbWlseSwgc2VydmVyYWRkcnMpOwot CQlyZXR1cm4gU1RBVFVTX0VSUk9SOwotCX0KLQkvKiBYWFg6IGFkZCBzdXBwb3J0IGZvciBtdWx0 aXBsZSByZXR1cm5lZCBhZGRyZXNzZXM/ICovCi0KLQkvKiBDb25zdHJ1Y3QgUkFESVVTIHBhY2tl dCAqLwotCXBhY2tldC0+Y29kZSA9IFJBRElVU19BQ0NFU1NfUkVRVUVTVDsKLQlwYWNrZXQtPmxl bmd0aCA9IFJBRElVU19IRUFERVJfTEVOR1RIOwotCWlmICghcGdfc3Ryb25nX3JhbmRvbShwYWNr ZXQtPnZlY3RvciwgUkFESVVTX1ZFQ1RPUl9MRU5HVEgpKQotCXsKLQkJZXJlcG9ydChMT0csCi0J CQkJKGVycm1zZygiY291bGQgbm90IGdlbmVyYXRlIHJhbmRvbSBlbmNyeXB0aW9uIHZlY3RvciIp KSk7Ci0JCXBnX2ZyZWVhZGRyaW5mb19hbGwoaGludC5haV9mYW1pbHksIHNlcnZlcmFkZHJzKTsK LQkJcmV0dXJuIFNUQVRVU19FUlJPUjsKLQl9Ci0JcGFja2V0LT5pZCA9IHBhY2tldC0+dmVjdG9y WzBdOwotCXJhZGl1c19hZGRfYXR0cmlidXRlKHBhY2tldCwgUkFESVVTX1NFUlZJQ0VfVFlQRSwg KGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgJnNlcnZpY2UsIHNpemVvZihzZXJ2aWNlKSk7Ci0JcmFk aXVzX2FkZF9hdHRyaWJ1dGUocGFja2V0LCBSQURJVVNfVVNFUl9OQU1FLCAoY29uc3QgdW5zaWdu ZWQgY2hhciAqKSB1c2VyX25hbWUsIHN0cmxlbih1c2VyX25hbWUpKTsKLQlyYWRpdXNfYWRkX2F0 dHJpYnV0ZShwYWNrZXQsIFJBRElVU19OQVNfSURFTlRJRklFUiwgKGNvbnN0IHVuc2lnbmVkIGNo YXIgKikgaWRlbnRpZmllciwgc3RybGVuKGlkZW50aWZpZXIpKTsKLQotCS8qCi0JICogUkFESVVT IHBhc3N3b3JkIGF0dHJpYnV0ZXMgYXJlIGNhbGN1bGF0ZWQgYXM6IGVbMF0gPSBwWzBdIFhPUgot CSAqIE1ENShzZWNyZXQgKyBSZXF1ZXN0IEF1dGhlbnRpY2F0b3IpIGZvciB0aGUgZmlyc3QgZ3Jv dXAgb2YgMTYgb2N0ZXRzLAotCSAqIGFuZCB0aGVuOiBlW2ldID0gcFtpXSBYT1IgTUQ1KHNlY3Jl dCArIGVbaS0xXSkgZm9yIHRoZSBmb2xsb3dpbmcgb25lcwotCSAqIChpZiBuZWNlc3NhcnkpCi0J ICovCi0JZW5jcnlwdGVkcGFzc3dvcmRsZW4gPSAoKHN0cmxlbihwYXNzd2QpICsgUkFESVVTX1ZF Q1RPUl9MRU5HVEggLSAxKSAvIFJBRElVU19WRUNUT1JfTEVOR1RIKSAqIFJBRElVU19WRUNUT1Jf TEVOR1RIOwotCWNyeXB0dmVjdG9yID0gcGFsbG9jKHN0cmxlbihzZWNyZXQpICsgUkFESVVTX1ZF Q1RPUl9MRU5HVEgpOwotCW1lbWNweShjcnlwdHZlY3Rvciwgc2VjcmV0LCBzdHJsZW4oc2VjcmV0 KSk7Ci0KLQkvKiBmb3IgdGhlIGZpcnN0IGl0ZXJhdGlvbiwgd2UgdXNlIHRoZSBSZXF1ZXN0IEF1 dGhlbnRpY2F0b3IgdmVjdG9yICovCi0JbWQ1dHJhaWxlciA9IHBhY2tldC0+dmVjdG9yOwotCWZv ciAoaSA9IDA7IGkgPCBlbmNyeXB0ZWRwYXNzd29yZGxlbjsgaSArPSBSQURJVVNfVkVDVE9SX0xF TkdUSCkKLQl7Ci0JCWNvbnN0IGNoYXIgKmVycnN0ciA9IE5VTEw7Ci0KLQkJbWVtY3B5KGNyeXB0 dmVjdG9yICsgc3RybGVuKHNlY3JldCksIG1kNXRyYWlsZXIsIFJBRElVU19WRUNUT1JfTEVOR1RI KTsKLQotCQkvKgotCQkgKiAuLiBhbmQgZm9yIHN1YnNlcXVlbnQgaXRlcmF0aW9ucyB0aGUgcmVz dWx0IG9mIHRoZSBwcmV2aW91cyBYT1IKLQkJICogKGNhbGN1bGF0ZWQgYmVsb3cpCi0JCSAqLwot CQltZDV0cmFpbGVyID0gZW5jcnlwdGVkcGFzc3dvcmQgKyBpOwotCi0JCWlmICghcGdfbWQ1X2Jp bmFyeShjcnlwdHZlY3Rvciwgc3RybGVuKHNlY3JldCkgKyBSQURJVVNfVkVDVE9SX0xFTkdUSCwK LQkJCQkJCSAgIGVuY3J5cHRlZHBhc3N3b3JkICsgaSwgJmVycnN0cikpCi0JCXsKLQkJCWVyZXBv cnQoTE9HLAotCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgcGVyZm9ybSBNRDUgZW5jcnlwdGlvbiBv ZiBwYXNzd29yZDogJXMiLAotCQkJCQkJCWVycnN0cikpKTsKLQkJCXBmcmVlKGNyeXB0dmVjdG9y KTsKLQkJCXBnX2ZyZWVhZGRyaW5mb19hbGwoaGludC5haV9mYW1pbHksIHNlcnZlcmFkZHJzKTsK LQkJCXJldHVybiBTVEFUVVNfRVJST1I7Ci0JCX0KLQotCQlmb3IgKGogPSBpOyBqIDwgaSArIFJB RElVU19WRUNUT1JfTEVOR1RIOyBqKyspCi0JCXsKLQkJCWlmIChqIDwgc3RybGVuKHBhc3N3ZCkp Ci0JCQkJZW5jcnlwdGVkcGFzc3dvcmRbal0gPSBwYXNzd2Rbal0gXiBlbmNyeXB0ZWRwYXNzd29y ZFtqXTsKLQkJCWVsc2UKLQkJCQllbmNyeXB0ZWRwYXNzd29yZFtqXSA9ICdcMCcgXiBlbmNyeXB0 ZWRwYXNzd29yZFtqXTsKLQkJfQotCX0KLQlwZnJlZShjcnlwdHZlY3Rvcik7Ci0KLQlyYWRpdXNf YWRkX2F0dHJpYnV0ZShwYWNrZXQsIFJBRElVU19QQVNTV09SRCwgZW5jcnlwdGVkcGFzc3dvcmQs IGVuY3J5cHRlZHBhc3N3b3JkbGVuKTsKLQotCS8qIExlbmd0aCBuZWVkcyB0byBiZSBpbiBuZXR3 b3JrIG9yZGVyIG9uIHRoZSB3aXJlICovCi0JcGFja2V0bGVuZ3RoID0gcGFja2V0LT5sZW5ndGg7 Ci0JcGFja2V0LT5sZW5ndGggPSBwZ19odG9uMTYocGFja2V0LT5sZW5ndGgpOwotCi0Jc29jayA9 IHNvY2tldChzZXJ2ZXJhZGRyc1swXS5haV9mYW1pbHksIFNPQ0tfREdSQU0sIDApOwotCWlmIChz b2NrID09IFBHSU5WQUxJRF9TT0NLRVQpCi0JewotCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNn KCJjb3VsZCBub3QgY3JlYXRlIFJBRElVUyBzb2NrZXQ6ICVtIikpKTsKLQkJcGdfZnJlZWFkZHJp bmZvX2FsbChoaW50LmFpX2ZhbWlseSwgc2VydmVyYWRkcnMpOwotCQlyZXR1cm4gU1RBVFVTX0VS Uk9SOwotCX0KLQotCW1lbXNldCgmbG9jYWxhZGRyLCAwLCBzaXplb2YobG9jYWxhZGRyKSk7Ci0J bG9jYWxhZGRyLnNpbjZfZmFtaWx5ID0gc2VydmVyYWRkcnNbMF0uYWlfZmFtaWx5OwotCWxvY2Fs YWRkci5zaW42X2FkZHIgPSBpbjZhZGRyX2FueTsKLQlpZiAobG9jYWxhZGRyLnNpbjZfZmFtaWx5 ID09IEFGX0lORVQ2KQotCQlhZGRyc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsK LQllbHNlCi0JCWFkZHJzaXplID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0KLQlpZiAo YmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZsb2NhbGFkZHIsIGFkZHJzaXplKSkKLQl7 Ci0JCWVyZXBvcnQoTE9HLAotCQkJCShlcnJtc2coImNvdWxkIG5vdCBiaW5kIGxvY2FsIFJBRElV UyBzb2NrZXQ6ICVtIikpKTsKLQkJY2xvc2Vzb2NrZXQoc29jayk7Ci0JCXBnX2ZyZWVhZGRyaW5m b19hbGwoaGludC5haV9mYW1pbHksIHNlcnZlcmFkZHJzKTsKLQkJcmV0dXJuIFNUQVRVU19FUlJP UjsKLQl9Ci0KLQlpZiAoc2VuZHRvKHNvY2ssIHJhZGl1c19idWZmZXIsIHBhY2tldGxlbmd0aCwg MCwKLQkJCSAgIHNlcnZlcmFkZHJzWzBdLmFpX2FkZHIsIHNlcnZlcmFkZHJzWzBdLmFpX2FkZHJs ZW4pIDwgMCkKLQl7Ci0JCWVyZXBvcnQoTE9HLAotCQkJCShlcnJtc2coImNvdWxkIG5vdCBzZW5k IFJBRElVUyBwYWNrZXQ6ICVtIikpKTsKLQkJY2xvc2Vzb2NrZXQoc29jayk7Ci0JCXBnX2ZyZWVh ZGRyaW5mb19hbGwoaGludC5haV9mYW1pbHksIHNlcnZlcmFkZHJzKTsKLQkJcmV0dXJuIFNUQVRV U19FUlJPUjsKLQl9Ci0KLQkvKiBEb24ndCBuZWVkIHRoZSBzZXJ2ZXIgYWRkcmVzcyBhbnltb3Jl ICovCi0JcGdfZnJlZWFkZHJpbmZvX2FsbChoaW50LmFpX2ZhbWlseSwgc2VydmVyYWRkcnMpOwot Ci0JLyoKLQkgKiBGaWd1cmUgb3V0IGF0IHdoYXQgdGltZSB3ZSBzaG91bGQgdGltZSBvdXQuIFdl IGNhbid0IGp1c3QgdXNlIGEgc2luZ2xlCi0JICogY2FsbCB0byBzZWxlY3QoKSB3aXRoIGEgdGlt ZW91dCwgc2luY2Ugc29tZWJvZHkgY2FuIGJlIHNlbmRpbmcgaW52YWxpZAotCSAqIHBhY2tldHMg dG8gb3VyIHBvcnQgdGh1cyBjYXVzaW5nIHVzIHRvIHJldHJ5IGluIGEgbG9vcCBhbmQgbmV2ZXIg dGltZQotCSAqIG91dC4KLQkgKgotCSAqIFhYWDogVXNpbmcgV2FpdExhdGNoT3JTb2NrZXQoKSBh bmQgZG9pbmcgYSBDSEVDS19GT1JfSU5URVJSVVBUUygpIGlmCi0JICogdGhlIGxhdGNoIHdhcyBz ZXQgd291bGQgaW1wcm92ZSB0aGUgcmVzcG9uc2l2ZW5lc3MgdG8KLQkgKiB0aW1lb3V0cy9jYW5j ZWxsYXRpb25zLgotCSAqLwotCWdldHRpbWVvZmRheSgmZW5kdGltZSwgTlVMTCk7Ci0JZW5kdGlt ZS50dl9zZWMgKz0gUkFESVVTX1RJTUVPVVQ7Ci0KLQl3aGlsZSAodHJ1ZSkKLQl7Ci0JCXN0cnVj dCB0aW1ldmFsIHRpbWVvdXQ7Ci0JCXN0cnVjdCB0aW1ldmFsIG5vdzsKLQkJaW50NjQJCXRpbWVv dXR2YWw7Ci0JCWNvbnN0IGNoYXIgKmVycnN0ciA9IE5VTEw7Ci0KLQkJZ2V0dGltZW9mZGF5KCZu b3csIE5VTEwpOwotCQl0aW1lb3V0dmFsID0gKGVuZHRpbWUudHZfc2VjICogMTAwMDAwMCArIGVu ZHRpbWUudHZfdXNlYykgLSAobm93LnR2X3NlYyAqIDEwMDAwMDAgKyBub3cudHZfdXNlYyk7Ci0J CWlmICh0aW1lb3V0dmFsIDw9IDApCi0JCXsKLQkJCWVyZXBvcnQoTE9HLAotCQkJCQkoZXJybXNn KCJ0aW1lb3V0IHdhaXRpbmcgZm9yIFJBRElVUyByZXNwb25zZSBmcm9tICVzIiwKLQkJCQkJCQlz ZXJ2ZXIpKSk7Ci0JCQljbG9zZXNvY2tldChzb2NrKTsKLQkJCXJldHVybiBTVEFUVVNfRVJST1I7 Ci0JCX0KLQkJdGltZW91dC50dl9zZWMgPSB0aW1lb3V0dmFsIC8gMTAwMDAwMDsKLQkJdGltZW91 dC50dl91c2VjID0gdGltZW91dHZhbCAlIDEwMDAwMDA7Ci0KLQkJRkRfWkVSTygmZmRzZXQpOwot CQlGRF9TRVQoc29jaywgJmZkc2V0KTsKLQotCQlyID0gc2VsZWN0KHNvY2sgKyAxLCAmZmRzZXQs IE5VTEwsIE5VTEwsICZ0aW1lb3V0KTsKLQkJaWYgKHIgPCAwKQotCQl7Ci0JCQlpZiAoZXJybm8g PT0gRUlOVFIpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIEFueXRoaW5nIGVsc2UgaXMgYW4gYWN0 dWFsIGVycm9yICovCi0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVycm1zZygiY291bGQgbm90IGNo ZWNrIHN0YXR1cyBvbiBSQURJVVMgc29ja2V0OiAlbSIpKSk7Ci0JCQljbG9zZXNvY2tldChzb2Nr KTsKLQkJCXJldHVybiBTVEFUVVNfRVJST1I7Ci0JCX0KLQkJaWYgKHIgPT0gMCkKLQkJewotCQkJ ZXJlcG9ydChMT0csCi0JCQkJCShlcnJtc2coInRpbWVvdXQgd2FpdGluZyBmb3IgUkFESVVTIHJl c3BvbnNlIGZyb20gJXMiLAotCQkJCQkJCXNlcnZlcikpKTsKLQkJCWNsb3Nlc29ja2V0KHNvY2sp OwotCQkJcmV0dXJuIFNUQVRVU19FUlJPUjsKLQkJfQotCi0JCS8qCi0JCSAqIEF0dGVtcHQgdG8g cmVhZCB0aGUgcmVzcG9uc2UgcGFja2V0LCBhbmQgdmVyaWZ5IHRoZSBjb250ZW50cy4KLQkJICoK LQkJICogQW55IHBhY2tldCB0aGF0J3Mgbm90IGFjdHVhbGx5IGEgUkFESVVTIHBhY2tldCwgb3Ig b3RoZXJ3aXNlIGRvZXMKLQkJICogbm90IHZhbGlkYXRlIGFzIGFuIGV4cGxpY2l0IHJlamVjdCwg aXMganVzdCBpZ25vcmVkIGFuZCB3ZSByZXRyeQotCQkgKiBmb3IgYW5vdGhlciBwYWNrZXQgKHVu dGlsIHdlIHJlYWNoIHRoZSB0aW1lb3V0KS4gVGhpcyBpcyB0byBhdm9pZAotCQkgKiB0aGUgcG9z c2liaWxpdHkgdG8gZGVuaWFsLW9mLXNlcnZpY2UgdGhlIGxvZ2luIGJ5IGZsb29kaW5nIHRoZQot CQkgKiBzZXJ2ZXIgd2l0aCBpbnZhbGlkIHBhY2tldHMgb24gdGhlIHBvcnQgdGhhdCB3ZSdyZSBl eHBlY3RpbmcgdGhlCi0JCSAqIFJBRElVUyByZXNwb25zZSBvbi4KLQkJICovCi0KLQkJYWRkcnNp emUgPSBzaXplb2YocmVtb3RlYWRkcik7Ci0JCXBhY2tldGxlbmd0aCA9IHJlY3Zmcm9tKHNvY2ss IHJlY2VpdmVfYnVmZmVyLCBSQURJVVNfQlVGRkVSX1NJWkUsIDAsCi0JCQkJCQkJCShzdHJ1Y3Qg c29ja2FkZHIgKikgJnJlbW90ZWFkZHIsICZhZGRyc2l6ZSk7Ci0JCWlmIChwYWNrZXRsZW5ndGgg PCAwKQotCQl7Ci0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVycm1zZygiY291bGQgbm90IHJlYWQg UkFESVVTIHJlc3BvbnNlOiAlbSIpKSk7Ci0JCQljbG9zZXNvY2tldChzb2NrKTsKLQkJCXJldHVy biBTVEFUVVNfRVJST1I7Ci0JCX0KLQotCQlpZiAocmVtb3RlYWRkci5zaW42X3BvcnQgIT0gcGdf aHRvbjE2KHBvcnQpKQotCQl7Ci0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVycm1zZygiUkFESVVT IHJlc3BvbnNlIGZyb20gJXMgd2FzIHNlbnQgZnJvbSBpbmNvcnJlY3QgcG9ydDogJWQiLAotCQkJ CQkJCXNlcnZlciwgcGdfbnRvaDE2KHJlbW90ZWFkZHIuc2luNl9wb3J0KSkpKTsKLQkJCWNvbnRp bnVlOwotCQl9Ci0KLQkJaWYgKHBhY2tldGxlbmd0aCA8IFJBRElVU19IRUFERVJfTEVOR1RIKQot CQl7Ci0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVycm1zZygiUkFESVVTIHJlc3BvbnNlIGZyb20g JXMgdG9vIHNob3J0OiAlZCIsIHNlcnZlciwgcGFja2V0bGVuZ3RoKSkpOwotCQkJY29udGludWU7 Ci0JCX0KLQotCQlpZiAocGFja2V0bGVuZ3RoICE9IHBnX250b2gxNihyZWNlaXZlcGFja2V0LT5s ZW5ndGgpKQotCQl7Ci0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVycm1zZygiUkFESVVTIHJlc3Bv bnNlIGZyb20gJXMgaGFzIGNvcnJ1cHQgbGVuZ3RoOiAlZCAoYWN0dWFsIGxlbmd0aCAlZCkiLAot CQkJCQkJCXNlcnZlciwgcGdfbnRvaDE2KHJlY2VpdmVwYWNrZXQtPmxlbmd0aCksIHBhY2tldGxl bmd0aCkpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKHBhY2tldC0+aWQgIT0gcmVjZWl2 ZXBhY2tldC0+aWQpCi0JCXsKLQkJCWVyZXBvcnQoTE9HLAotCQkJCQkoZXJybXNnKCJSQURJVVMg cmVzcG9uc2UgZnJvbSAlcyBpcyB0byBhIGRpZmZlcmVudCByZXF1ZXN0OiAlZCAoc2hvdWxkIGJl ICVkKSIsCi0JCQkJCQkJc2VydmVyLCByZWNlaXZlcGFja2V0LT5pZCwgcGFja2V0LT5pZCkpKTsK LQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyoKLQkJICogVmVyaWZ5IHRoZSByZXNwb25zZSBhdXRo ZW50aWNhdG9yLCB3aGljaCBpcyBjYWxjdWxhdGVkIGFzCi0JCSAqIE1ENShDb2RlK0lEK0xlbmd0 aCtSZXF1ZXN0QXV0aGVudGljYXRvcitBdHRyaWJ1dGVzK1NlY3JldCkKLQkJICovCi0JCWNyeXB0 dmVjdG9yID0gcGFsbG9jKHBhY2tldGxlbmd0aCArIHN0cmxlbihzZWNyZXQpKTsKLQotCQltZW1j cHkoY3J5cHR2ZWN0b3IsIHJlY2VpdmVwYWNrZXQsIDQpOwkvKiBjb2RlK2lkK2xlbmd0aCAqLwot CQltZW1jcHkoY3J5cHR2ZWN0b3IgKyA0LCBwYWNrZXQtPnZlY3RvciwgUkFESVVTX1ZFQ1RPUl9M RU5HVEgpOwkvKiByZXF1ZXN0Ci0JCQkJCQkJCQkJCQkJCQkJCQkgKiBhdXRoZW50aWNhdG9yLCBm cm9tCi0JCQkJCQkJCQkJCQkJCQkJCQkgKiBvcmlnaW5hbCBwYWNrZXQgKi8KLQkJaWYgKHBhY2tl dGxlbmd0aCA+IFJBRElVU19IRUFERVJfTEVOR1RIKQkvKiB0aGVyZSBtYXkgYmUgbm8KLQkJCQkJ CQkJCQkJCQkgKiBhdHRyaWJ1dGVzIGF0IGFsbCAqLwotCQkJbWVtY3B5KGNyeXB0dmVjdG9yICsg UkFESVVTX0hFQURFUl9MRU5HVEgsCi0JCQkJICAgKGNoYXIgKikgcmVjZWl2ZV9idWZmZXIgKyBS QURJVVNfSEVBREVSX0xFTkdUSCwKLQkJCQkgICBwYWNrZXRsZW5ndGggLSBSQURJVVNfSEVBREVS X0xFTkdUSCk7Ci0JCW1lbWNweShjcnlwdHZlY3RvciArIHBhY2tldGxlbmd0aCwgc2VjcmV0LCBz dHJsZW4oc2VjcmV0KSk7Ci0KLQkJaWYgKCFwZ19tZDVfYmluYXJ5KGNyeXB0dmVjdG9yLAotCQkJ CQkJICAgcGFja2V0bGVuZ3RoICsgc3RybGVuKHNlY3JldCksCi0JCQkJCQkgICBlbmNyeXB0ZWRw YXNzd29yZCwgJmVycnN0cikpCi0JCXsKLQkJCWVyZXBvcnQoTE9HLAotCQkJCQkoZXJybXNnKCJj b3VsZCBub3QgcGVyZm9ybSBNRDUgZW5jcnlwdGlvbiBvZiByZWNlaXZlZCBwYWNrZXQ6ICVzIiwK LQkJCQkJCQllcnJzdHIpKSk7Ci0JCQlwZnJlZShjcnlwdHZlY3Rvcik7Ci0JCQljb250aW51ZTsK LQkJfQotCQlwZnJlZShjcnlwdHZlY3Rvcik7Ci0KLQkJaWYgKG1lbWNtcChyZWNlaXZlcGFja2V0 LT52ZWN0b3IsIGVuY3J5cHRlZHBhc3N3b3JkLCBSQURJVVNfVkVDVE9SX0xFTkdUSCkgIT0gMCkK LQkJewotCQkJZXJlcG9ydChMT0csCi0JCQkJCShlcnJtc2coIlJBRElVUyByZXNwb25zZSBmcm9t ICVzIGhhcyBpbmNvcnJlY3QgTUQ1IHNpZ25hdHVyZSIsCi0JCQkJCQkJc2VydmVyKSkpOwotCQkJ Y29udGludWU7Ci0JCX0KLQotCQlpZiAocmVjZWl2ZXBhY2tldC0+Y29kZSA9PSBSQURJVVNfQUND RVNTX0FDQ0VQVCkKLQkJewotCQkJY2xvc2Vzb2NrZXQoc29jayk7Ci0JCQlyZXR1cm4gU1RBVFVT X09LOwotCQl9Ci0JCWVsc2UgaWYgKHJlY2VpdmVwYWNrZXQtPmNvZGUgPT0gUkFESVVTX0FDQ0VT U19SRUpFQ1QpCi0JCXsKLQkJCWNsb3Nlc29ja2V0KHNvY2spOwotCQkJcmV0dXJuIFNUQVRVU19F T0Y7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVycm1zZygiUkFE SVVTIHJlc3BvbnNlIGZyb20gJXMgaGFzIGludmFsaWQgY29kZSAoJWQpIGZvciB1c2VyIFwiJXNc IiIsCi0JCQkJCQkJc2VydmVyLCByZWNlaXZlcGFja2V0LT5jb2RlLCB1c2VyX25hbWUpKSk7Ci0J CQljb250aW51ZTsKLQkJfQotCX0JCQkJCQkJLyogd2hpbGUgKHRydWUpICovCi19CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9saWJwcS9oYmEuYyBiL3NyYy9iYWNrZW5kL2xpYnBxL2hiYS5jCmlu ZGV4IDg3ZWU1NDFlODgwLi4wYWZjOWNkZGNlYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGli cHEvaGJhLmMKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEvaGJhLmMKQEAgLTExNCw3ICsxMTQsNiBA QCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgVXNlckF1dGhOYW1lW10gPQogCSJic2QiLAogCSJs ZGFwIiwKIAkiY2VydCIsCi0JInJhZGl1cyIsCiAJInBlZXIiLAogCSJvYXV0aCIsCiB9OwpAQCAt MTc0NCw4ICsxNzQzLDYgQEAgcGFyc2VfaGJhX2xpbmUoVG9rZW5pemVkQXV0aExpbmUgKnRva19s aW5lLCBpbnQgZWxldmVsKQogI2Vsc2UKIAkJdW5zdXBhdXRoID0gImNlcnQiOwogI2VuZGlmCi0J ZWxzZSBpZiAoc3RyY21wKHRva2VuLT5zdHJpbmcsICJyYWRpdXMiKSA9PSAwKQotCQlwYXJzZWRs aW5lLT5hdXRoX21ldGhvZCA9IHVhUkFESVVTOwogCWVsc2UgaWYgKHN0cmNtcCh0b2tlbi0+c3Ry aW5nLCAib2F1dGgiKSA9PSAwKQogCQlwYXJzZWRsaW5lLT5hdXRoX21ldGhvZCA9IHVhT0F1dGg7 CiAJZWxzZQpAQCAtMTk0Nyw4NyArMTk0NCw2IEBAIHBhcnNlX2hiYV9saW5lKFRva2VuaXplZEF1 dGhMaW5lICp0b2tfbGluZSwgaW50IGVsZXZlbCkKIAkJfQogCX0KIAotCWlmIChwYXJzZWRsaW5l LT5hdXRoX21ldGhvZCA9PSB1YVJBRElVUykKLQl7Ci0JCU1BTkRBVE9SWV9BVVRIX0FSRyhwYXJz ZWRsaW5lLT5yYWRpdXNzZXJ2ZXJzLCAicmFkaXVzc2VydmVycyIsICJyYWRpdXMiKTsKLQkJTUFO REFUT1JZX0FVVEhfQVJHKHBhcnNlZGxpbmUtPnJhZGl1c3NlY3JldHMsICJyYWRpdXNzZWNyZXRz IiwgInJhZGl1cyIpOwotCi0JCWlmIChwYXJzZWRsaW5lLT5yYWRpdXNzZXJ2ZXJzID09IE5JTCkK LQkJewotCQkJZXJlcG9ydChlbGV2ZWwsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfQ09ORklHX0ZJ TEVfRVJST1IpLAotCQkJCQkgZXJybXNnKCJsaXN0IG9mIFJBRElVUyBzZXJ2ZXJzIGNhbm5vdCBi ZSBlbXB0eSIpLAotCQkJCQkgZXJyY29udGV4dCgibGluZSAlZCBvZiBjb25maWd1cmF0aW9uIGZp bGUgXCIlc1wiIiwKLQkJCQkJCQkJbGluZV9udW0sIGZpbGVfbmFtZSkpKTsKLQkJCSplcnJfbXNn ID0gImxpc3Qgb2YgUkFESVVTIHNlcnZlcnMgY2Fubm90IGJlIGVtcHR5IjsKLQkJCXJldHVybiBO VUxMOwotCQl9Ci0KLQkJaWYgKHBhcnNlZGxpbmUtPnJhZGl1c3NlY3JldHMgPT0gTklMKQotCQl7 Ci0JCQllcmVwb3J0KGVsZXZlbCwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9DT05GSUdfRklMRV9F UlJPUiksCi0JCQkJCSBlcnJtc2coImxpc3Qgb2YgUkFESVVTIHNlY3JldHMgY2Fubm90IGJlIGVt cHR5IiksCi0JCQkJCSBlcnJjb250ZXh0KCJsaW5lICVkIG9mIGNvbmZpZ3VyYXRpb24gZmlsZSBc IiVzXCIiLAotCQkJCQkJCQlsaW5lX251bSwgZmlsZV9uYW1lKSkpOwotCQkJKmVycl9tc2cgPSAi bGlzdCBvZiBSQURJVVMgc2VjcmV0cyBjYW5ub3QgYmUgZW1wdHkiOwotCQkJcmV0dXJuIE5VTEw7 Ci0JCX0KLQotCQkvKgotCQkgKiBWZXJpZnkgbGVuZ3RoIG9mIG9wdGlvbiBsaXN0cyAtIGVhY2gg Y2FuIGJlIDAgKGV4Y2VwdCBmb3Igc2VjcmV0cywKLQkJICogYnV0IHRoYXQncyBhbHJlYWR5IGNo ZWNrZWQgYWJvdmUpLCAxICh1c2UgdGhlIHNhbWUgdmFsdWUKLQkJICogZXZlcnl3aGVyZSkgb3Ig dGhlIHNhbWUgYXMgdGhlIG51bWJlciBvZiBzZXJ2ZXJzLgotCQkgKi8KLQkJaWYgKCEobGlzdF9s ZW5ndGgocGFyc2VkbGluZS0+cmFkaXVzc2VjcmV0cykgPT0gMSB8fAotCQkJICBsaXN0X2xlbmd0 aChwYXJzZWRsaW5lLT5yYWRpdXNzZWNyZXRzKSA9PSBsaXN0X2xlbmd0aChwYXJzZWRsaW5lLT5y YWRpdXNzZXJ2ZXJzKSkpCi0JCXsKLQkJCWVyZXBvcnQoZWxldmVsLAotCQkJCQkoZXJyY29kZShF UlJDT0RFX0NPTkZJR19GSUxFX0VSUk9SKSwKLQkJCQkJIGVycm1zZygidGhlIG51bWJlciBvZiBS QURJVVMgc2VjcmV0cyAoJWQpIG11c3QgYmUgMSBvciB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9m IFJBRElVUyBzZXJ2ZXJzICglZCkiLAotCQkJCQkJCWxpc3RfbGVuZ3RoKHBhcnNlZGxpbmUtPnJh ZGl1c3NlY3JldHMpLAotCQkJCQkJCWxpc3RfbGVuZ3RoKHBhcnNlZGxpbmUtPnJhZGl1c3NlcnZl cnMpKSwKLQkJCQkJIGVycmNvbnRleHQoImxpbmUgJWQgb2YgY29uZmlndXJhdGlvbiBmaWxlIFwi JXNcIiIsCi0JCQkJCQkJCWxpbmVfbnVtLCBmaWxlX25hbWUpKSk7Ci0JCQkqZXJyX21zZyA9IHBz cHJpbnRmKCJ0aGUgbnVtYmVyIG9mIFJBRElVUyBzZWNyZXRzICglZCkgbXVzdCBiZSAxIG9yIHRo ZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgUkFESVVTIHNlcnZlcnMgKCVkKSIsCi0JCQkJCQkJCWxp c3RfbGVuZ3RoKHBhcnNlZGxpbmUtPnJhZGl1c3NlY3JldHMpLAotCQkJCQkJCQlsaXN0X2xlbmd0 aChwYXJzZWRsaW5lLT5yYWRpdXNzZXJ2ZXJzKSk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlp ZiAoIShsaXN0X2xlbmd0aChwYXJzZWRsaW5lLT5yYWRpdXNwb3J0cykgPT0gMCB8fAotCQkJICBs aXN0X2xlbmd0aChwYXJzZWRsaW5lLT5yYWRpdXNwb3J0cykgPT0gMSB8fAotCQkJICBsaXN0X2xl bmd0aChwYXJzZWRsaW5lLT5yYWRpdXNwb3J0cykgPT0gbGlzdF9sZW5ndGgocGFyc2VkbGluZS0+ cmFkaXVzc2VydmVycykpKQotCQl7Ci0JCQllcmVwb3J0KGVsZXZlbCwKLQkJCQkJKGVycmNvZGUo RVJSQ09ERV9DT05GSUdfRklMRV9FUlJPUiksCi0JCQkJCSBlcnJtc2coInRoZSBudW1iZXIgb2Yg UkFESVVTIHBvcnRzICglZCkgbXVzdCBiZSAxIG9yIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2Yg UkFESVVTIHNlcnZlcnMgKCVkKSIsCi0JCQkJCQkJbGlzdF9sZW5ndGgocGFyc2VkbGluZS0+cmFk aXVzcG9ydHMpLAotCQkJCQkJCWxpc3RfbGVuZ3RoKHBhcnNlZGxpbmUtPnJhZGl1c3NlcnZlcnMp KSwKLQkJCQkJIGVycmNvbnRleHQoImxpbmUgJWQgb2YgY29uZmlndXJhdGlvbiBmaWxlIFwiJXNc IiIsCi0JCQkJCQkJCWxpbmVfbnVtLCBmaWxlX25hbWUpKSk7Ci0JCQkqZXJyX21zZyA9IHBzcHJp bnRmKCJ0aGUgbnVtYmVyIG9mIFJBRElVUyBwb3J0cyAoJWQpIG11c3QgYmUgMSBvciB0aGUgc2Ft ZSBhcyB0aGUgbnVtYmVyIG9mIFJBRElVUyBzZXJ2ZXJzICglZCkiLAotCQkJCQkJCQlsaXN0X2xl bmd0aChwYXJzZWRsaW5lLT5yYWRpdXNwb3J0cyksCi0JCQkJCQkJCWxpc3RfbGVuZ3RoKHBhcnNl ZGxpbmUtPnJhZGl1c3NlcnZlcnMpKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCWlmICghKGxp c3RfbGVuZ3RoKHBhcnNlZGxpbmUtPnJhZGl1c2lkZW50aWZpZXJzKSA9PSAwIHx8Ci0JCQkgIGxp c3RfbGVuZ3RoKHBhcnNlZGxpbmUtPnJhZGl1c2lkZW50aWZpZXJzKSA9PSAxIHx8Ci0JCQkgIGxp c3RfbGVuZ3RoKHBhcnNlZGxpbmUtPnJhZGl1c2lkZW50aWZpZXJzKSA9PSBsaXN0X2xlbmd0aChw YXJzZWRsaW5lLT5yYWRpdXNzZXJ2ZXJzKSkpCi0JCXsKLQkJCWVyZXBvcnQoZWxldmVsLAotCQkJ CQkoZXJyY29kZShFUlJDT0RFX0NPTkZJR19GSUxFX0VSUk9SKSwKLQkJCQkJIGVycm1zZygidGhl IG51bWJlciBvZiBSQURJVVMgaWRlbnRpZmllcnMgKCVkKSBtdXN0IGJlIDEgb3IgdGhlIHNhbWUg YXMgdGhlIG51bWJlciBvZiBSQURJVVMgc2VydmVycyAoJWQpIiwKLQkJCQkJCQlsaXN0X2xlbmd0 aChwYXJzZWRsaW5lLT5yYWRpdXNpZGVudGlmaWVycyksCi0JCQkJCQkJbGlzdF9sZW5ndGgocGFy c2VkbGluZS0+cmFkaXVzc2VydmVycykpLAotCQkJCQkgZXJyY29udGV4dCgibGluZSAlZCBvZiBj b25maWd1cmF0aW9uIGZpbGUgXCIlc1wiIiwKLQkJCQkJCQkJbGluZV9udW0sIGZpbGVfbmFtZSkp KTsKLQkJCSplcnJfbXNnID0gcHNwcmludGYoInRoZSBudW1iZXIgb2YgUkFESVVTIGlkZW50aWZp ZXJzICglZCkgbXVzdCBiZSAxIG9yIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgUkFESVVTIHNl cnZlcnMgKCVkKSIsCi0JCQkJCQkJCWxpc3RfbGVuZ3RoKHBhcnNlZGxpbmUtPnJhZGl1c2lkZW50 aWZpZXJzKSwKLQkJCQkJCQkJbGlzdF9sZW5ndGgocGFyc2VkbGluZS0+cmFkaXVzc2VydmVycykp OwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQl9Ci0KIAkvKgogCSAqIEVuZm9yY2UgYW55IHBhcmFt ZXRlcnMgaW1wbGllZCBieSBvdGhlciBzZXR0aW5ncy4KIAkgKi8KQEAgLTIzNTAsMTM4ICsyMjY2 LDYgQEAgcGFyc2VfaGJhX2F1dGhfb3B0KGNoYXIgKm5hbWUsIGNoYXIgKnZhbCwgSGJhTGluZSAq aGJhbGluZSwKIAkJZWxzZQogCQkJaGJhbGluZS0+dXBuX3VzZXJuYW1lID0gZmFsc2U7CiAJfQot CWVsc2UgaWYgKHN0cmNtcChuYW1lLCAicmFkaXVzc2VydmVycyIpID09IDApCi0JewotCQlzdHJ1 Y3QgYWRkcmluZm8gKmdhaV9yZXN1bHQ7Ci0JCXN0cnVjdCBhZGRyaW5mbyBoaW50czsKLQkJaW50 CQkJcmV0OwotCQlMaXN0CSAgICpwYXJzZWRfc2VydmVyczsKLQkJTGlzdENlbGwgICAqbDsKLQkJ Y2hhcgkgICAqZHVwdmFsID0gcHN0cmR1cCh2YWwpOwotCi0JCVJFUVVJUkVfQVVUSF9PUFRJT04o dWFSQURJVVMsICJyYWRpdXNzZXJ2ZXJzIiwgInJhZGl1cyIpOwotCi0JCWlmICghU3BsaXRHVUNM aXN0KGR1cHZhbCwgJywnLCAmcGFyc2VkX3NlcnZlcnMpKQotCQl7Ci0JCQkvKiBzeW50YXggZXJy b3IgaW4gbGlzdCAqLwotCQkJZXJlcG9ydChlbGV2ZWwsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVf Q09ORklHX0ZJTEVfRVJST1IpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgcGFyc2UgUkFESVVT IHNlcnZlciBsaXN0IFwiJXNcIiIsCi0JCQkJCQkJdmFsKSwKLQkJCQkJIGVycmNvbnRleHQoImxp bmUgJWQgb2YgY29uZmlndXJhdGlvbiBmaWxlIFwiJXNcIiIsCi0JCQkJCQkJCWxpbmVfbnVtLCBm aWxlX25hbWUpKSk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQkvKiBGb3IgZWFjaCBlbnRy eSBpbiB0aGUgbGlzdCwgdHJhbnNsYXRlIGl0ICovCi0JCWZvcmVhY2gobCwgcGFyc2VkX3NlcnZl cnMpCi0JCXsKLQkJCU1lbVNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOwotCQkJaGludHMu YWlfc29ja3R5cGUgPSBTT0NLX0RHUkFNOwotCQkJaGludHMuYWlfZmFtaWx5ID0gQUZfVU5TUEVD OwotCi0JCQlyZXQgPSBwZ19nZXRhZGRyaW5mb19hbGwoKGNoYXIgKikgbGZpcnN0KGwpLCBOVUxM LCAmaGludHMsICZnYWlfcmVzdWx0KTsKLQkJCWlmIChyZXQgfHwgIWdhaV9yZXN1bHQpCi0JCQl7 Ci0JCQkJZXJlcG9ydChlbGV2ZWwsCi0JCQkJCQkoZXJyY29kZShFUlJDT0RFX0NPTkZJR19GSUxF X0VSUk9SKSwKLQkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCB0cmFuc2xhdGUgUkFESVVTIHNlcnZl ciBuYW1lIFwiJXNcIiB0byBhZGRyZXNzOiAlcyIsCi0JCQkJCQkJCShjaGFyICopIGxmaXJzdChs KSwgZ2FpX3N0cmVycm9yKHJldCkpLAotCQkJCQkJIGVycmNvbnRleHQoImxpbmUgJWQgb2YgY29u ZmlndXJhdGlvbiBmaWxlIFwiJXNcIiIsCi0JCQkJCQkJCQlsaW5lX251bSwgZmlsZV9uYW1lKSkp OwotCQkJCWlmIChnYWlfcmVzdWx0KQotCQkJCQlwZ19mcmVlYWRkcmluZm9fYWxsKGhpbnRzLmFp X2ZhbWlseSwgZ2FpX3Jlc3VsdCk7Ci0KLQkJCQlsaXN0X2ZyZWUocGFyc2VkX3NlcnZlcnMpOwot CQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJCXBnX2ZyZWVhZGRyaW5mb19hbGwoaGludHMuYWlf ZmFtaWx5LCBnYWlfcmVzdWx0KTsKLQkJfQotCi0JCS8qIEFsbCBlbnRyaWVzIGFyZSBPSywgc28g c3RvcmUgdGhlbSAqLwotCQloYmFsaW5lLT5yYWRpdXNzZXJ2ZXJzID0gcGFyc2VkX3NlcnZlcnM7 Ci0JCWhiYWxpbmUtPnJhZGl1c3NlcnZlcnNfcyA9IHBzdHJkdXAodmFsKTsKLQl9Ci0JZWxzZSBp ZiAoc3RyY21wKG5hbWUsICJyYWRpdXNwb3J0cyIpID09IDApCi0JewotCQlMaXN0CSAgICpwYXJz ZWRfcG9ydHM7Ci0JCUxpc3RDZWxsICAgKmw7Ci0JCWNoYXIJICAgKmR1cHZhbCA9IHBzdHJkdXAo dmFsKTsKLQotCQlSRVFVSVJFX0FVVEhfT1BUSU9OKHVhUkFESVVTLCAicmFkaXVzcG9ydHMiLCAi cmFkaXVzIik7Ci0KLQkJaWYgKCFTcGxpdEdVQ0xpc3QoZHVwdmFsLCAnLCcsICZwYXJzZWRfcG9y dHMpKQotCQl7Ci0JCQllcmVwb3J0KGVsZXZlbCwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9DT05G SUdfRklMRV9FUlJPUiksCi0JCQkJCSBlcnJtc2coImNvdWxkIG5vdCBwYXJzZSBSQURJVVMgcG9y dCBsaXN0IFwiJXNcIiIsCi0JCQkJCQkJdmFsKSwKLQkJCQkJIGVycmNvbnRleHQoImxpbmUgJWQg b2YgY29uZmlndXJhdGlvbiBmaWxlIFwiJXNcIiIsCi0JCQkJCQkJCWxpbmVfbnVtLCBmaWxlX25h bWUpKSk7Ci0JCQkqZXJyX21zZyA9IHBzcHJpbnRmKCJpbnZhbGlkIFJBRElVUyBwb3J0IG51bWJl cjogXCIlc1wiIiwgdmFsKTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCWZvcmVhY2gobCwg cGFyc2VkX3BvcnRzKQotCQl7Ci0JCQlpZiAoYXRvaShsZmlyc3QobCkpID09IDApCi0JCQl7Ci0J CQkJZXJlcG9ydChlbGV2ZWwsCi0JCQkJCQkoZXJyY29kZShFUlJDT0RFX0NPTkZJR19GSUxFX0VS Uk9SKSwKLQkJCQkJCSBlcnJtc2coImludmFsaWQgUkFESVVTIHBvcnQgbnVtYmVyOiBcIiVzXCIi LCB2YWwpLAotCQkJCQkJIGVycmNvbnRleHQoImxpbmUgJWQgb2YgY29uZmlndXJhdGlvbiBmaWxl IFwiJXNcIiIsCi0JCQkJCQkJCQlsaW5lX251bSwgZmlsZV9uYW1lKSkpOwotCi0JCQkJcmV0dXJu IGZhbHNlOwotCQkJfQotCQl9Ci0JCWhiYWxpbmUtPnJhZGl1c3BvcnRzID0gcGFyc2VkX3BvcnRz OwotCQloYmFsaW5lLT5yYWRpdXNwb3J0c19zID0gcHN0cmR1cCh2YWwpOwotCX0KLQllbHNlIGlm IChzdHJjbXAobmFtZSwgInJhZGl1c3NlY3JldHMiKSA9PSAwKQotCXsKLQkJTGlzdAkgICAqcGFy c2VkX3NlY3JldHM7Ci0JCWNoYXIJICAgKmR1cHZhbCA9IHBzdHJkdXAodmFsKTsKLQotCQlSRVFV SVJFX0FVVEhfT1BUSU9OKHVhUkFESVVTLCAicmFkaXVzc2VjcmV0cyIsICJyYWRpdXMiKTsKLQot CQlpZiAoIVNwbGl0R1VDTGlzdChkdXB2YWwsICcsJywgJnBhcnNlZF9zZWNyZXRzKSkKLQkJewot CQkJLyogc3ludGF4IGVycm9yIGluIGxpc3QgKi8KLQkJCWVyZXBvcnQoZWxldmVsLAotCQkJCQko ZXJyY29kZShFUlJDT0RFX0NPTkZJR19GSUxFX0VSUk9SKSwKLQkJCQkJIGVycm1zZygiY291bGQg bm90IHBhcnNlIFJBRElVUyBzZWNyZXQgbGlzdCBcIiVzXCIiLAotCQkJCQkJCXZhbCksCi0JCQkJ CSBlcnJjb250ZXh0KCJsaW5lICVkIG9mIGNvbmZpZ3VyYXRpb24gZmlsZSBcIiVzXCIiLAotCQkJ CQkJCQlsaW5lX251bSwgZmlsZV9uYW1lKSkpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJ aGJhbGluZS0+cmFkaXVzc2VjcmV0cyA9IHBhcnNlZF9zZWNyZXRzOwotCQloYmFsaW5lLT5yYWRp dXNzZWNyZXRzX3MgPSBwc3RyZHVwKHZhbCk7Ci0JfQotCWVsc2UgaWYgKHN0cmNtcChuYW1lLCAi cmFkaXVzaWRlbnRpZmllcnMiKSA9PSAwKQotCXsKLQkJTGlzdAkgICAqcGFyc2VkX2lkZW50aWZp ZXJzOwotCQljaGFyCSAgICpkdXB2YWwgPSBwc3RyZHVwKHZhbCk7Ci0KLQkJUkVRVUlSRV9BVVRI X09QVElPTih1YVJBRElVUywgInJhZGl1c2lkZW50aWZpZXJzIiwgInJhZGl1cyIpOwotCi0JCWlm ICghU3BsaXRHVUNMaXN0KGR1cHZhbCwgJywnLCAmcGFyc2VkX2lkZW50aWZpZXJzKSkKLQkJewot CQkJLyogc3ludGF4IGVycm9yIGluIGxpc3QgKi8KLQkJCWVyZXBvcnQoZWxldmVsLAotCQkJCQko ZXJyY29kZShFUlJDT0RFX0NPTkZJR19GSUxFX0VSUk9SKSwKLQkJCQkJIGVycm1zZygiY291bGQg bm90IHBhcnNlIFJBRElVUyBpZGVudGlmaWVycyBsaXN0IFwiJXNcIiIsCi0JCQkJCQkJdmFsKSwK LQkJCQkJIGVycmNvbnRleHQoImxpbmUgJWQgb2YgY29uZmlndXJhdGlvbiBmaWxlIFwiJXNcIiIs Ci0JCQkJCQkJCWxpbmVfbnVtLCBmaWxlX25hbWUpKSk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0K LQotCQloYmFsaW5lLT5yYWRpdXNpZGVudGlmaWVycyA9IHBhcnNlZF9pZGVudGlmaWVyczsKLQkJ aGJhbGluZS0+cmFkaXVzaWRlbnRpZmllcnNfcyA9IHBzdHJkdXAodmFsKTsKLQl9CiAJZWxzZSBp ZiAoc3RyY21wKG5hbWUsICJpc3N1ZXIiKSA9PSAwKQogCXsKIAkJUkVRVUlSRV9BVVRIX09QVElP Tih1YU9BdXRoLCAiaXNzdWVyIiwgIm9hdXRoIik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9s aWJwcS9wZ19oYmEuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC9saWJwcS9wZ19oYmEuY29uZi5z YW1wbGUKaW5kZXggYjY0YzhkZWE5N2MuLjBkYzM2MDEwM2U4IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9saWJwcS9wZ19oYmEuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEvcGdf aGJhLmNvbmYuc2FtcGxlCkBAIC01Myw4ICs1Myw4IEBACiAjIGRpcmVjdGx5IGNvbm5lY3RlZCB0 by4KICMKICMgTUVUSE9EIGNhbiBiZSAidHJ1c3QiLCAicmVqZWN0IiwgIm1kNSIsICJwYXNzd29y ZCIsICJzY3JhbS1zaGEtMjU2IiwKLSMgImdzcyIsICJzc3BpIiwgImlkZW50IiwgInBlZXIiLCAi cGFtIiwgIm9hdXRoIiwgImxkYXAiLCAicmFkaXVzIiBvcgotIyAiY2VydCIuICBOb3RlIHRoYXQg InBhc3N3b3JkIiBzZW5kcyBwYXNzd29yZHMgaW4gY2xlYXIgdGV4dDsgIm1kNSIgb3IKKyMgImdz cyIsICJzc3BpIiwgImlkZW50IiwgInBlZXIiLCAicGFtIiwgIm9hdXRoIiwgImxkYXAiIG9yICJj ZXJ0Ii4KKyMgTm90ZSB0aGF0ICJwYXNzd29yZCIgc2VuZHMgcGFzc3dvcmRzIGluIGNsZWFyIHRl eHQ7ICJtZDUiIG9yCiAjICJzY3JhbS1zaGEtMjU2IiBhcmUgcHJlZmVycmVkIHNpbmNlIHRoZXkg c2VuZCBlbmNyeXB0ZWQgcGFzc3dvcmRzLgogIwogIyBPUFRJT05TIGFyZSBhIHNldCBvZiBvcHRp b25zIGZvciB0aGUgYXV0aGVudGljYXRpb24gaW4gdGhlIGZvcm1hdApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2hiYWZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvaGJh ZnVuY3MuYwppbmRleCBlNzQzMmM0NDdlNy4uYmY1Y2M2MDFjYjEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9oYmFmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9o YmFmdW5jcy5jCkBAIC0xMzQsMjUgKzEzNCw2IEBAIGdldF9oYmFfb3B0aW9ucyhIYmFMaW5lICpo YmEpCiAJCQkJQ1N0cmluZ0dldFRleHREYXR1bShwc3ByaW50ZigibGRhcHNjb3BlPSVkIiwgaGJh LT5sZGFwc2NvcGUpKTsKIAl9CiAKLQlpZiAoaGJhLT5hdXRoX21ldGhvZCA9PSB1YVJBRElVUykK LQl7Ci0JCWlmIChoYmEtPnJhZGl1c3NlcnZlcnNfcykKLQkJCW9wdGlvbnNbbm9wdGlvbnMrK10g PQotCQkJCUNTdHJpbmdHZXRUZXh0RGF0dW0ocHNwcmludGYoInJhZGl1c3NlcnZlcnM9JXMiLCBo YmEtPnJhZGl1c3NlcnZlcnNfcykpOwotCi0JCWlmIChoYmEtPnJhZGl1c3NlY3JldHNfcykKLQkJ CW9wdGlvbnNbbm9wdGlvbnMrK10gPQotCQkJCUNTdHJpbmdHZXRUZXh0RGF0dW0ocHNwcmludGYo InJhZGl1c3NlY3JldHM9JXMiLCBoYmEtPnJhZGl1c3NlY3JldHNfcykpOwotCi0JCWlmIChoYmEt PnJhZGl1c2lkZW50aWZpZXJzX3MpCi0JCQlvcHRpb25zW25vcHRpb25zKytdID0KLQkJCQlDU3Ry aW5nR2V0VGV4dERhdHVtKHBzcHJpbnRmKCJyYWRpdXNpZGVudGlmaWVycz0lcyIsIGhiYS0+cmFk aXVzaWRlbnRpZmllcnNfcykpOwotCi0JCWlmIChoYmEtPnJhZGl1c3BvcnRzX3MpCi0JCQlvcHRp b25zW25vcHRpb25zKytdID0KLQkJCQlDU3RyaW5nR2V0VGV4dERhdHVtKHBzcHJpbnRmKCJyYWRp dXNwb3J0cz0lcyIsIGhiYS0+cmFkaXVzcG9ydHNfcykpOwotCX0KLQogCWlmIChoYmEtPmF1dGhf bWV0aG9kID09IHVhT0F1dGgpCiAJewogCQlpZiAoaGJhLT5vYXV0aF9pc3N1ZXIpCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaCBiL3NyYy9pbmNsdWRlL2xpYnBxL2hiYS5oCmlu ZGV4IDdiOTNiYTRhNzA5Li5kZmZmZmUyMDMzYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbGli cHEvaGJhLmgKKysrIGIvc3JjL2luY2x1ZGUvbGlicHEvaGJhLmgKQEAgLTM3LDcgKzM3LDYgQEAg dHlwZWRlZiBlbnVtIFVzZXJBdXRoCiAJdWFCU0QsCiAJdWFMREFQLAogCXVhQ2VydCwKLQl1YVJB RElVUywKIAl1YVBlZXIsCiAJdWFPQXV0aCwKICNkZWZpbmUgVVNFUl9BVVRIX0xBU1QgdWFPQXV0 aAkvKiBNdXN0IGJlIGxhc3QgdmFsdWUgb2YgdGhpcyBlbnVtICovCkBAIC0xMjgsMTQgKzEyNyw2 IEBAIHR5cGVkZWYgc3RydWN0IEhiYUxpbmUKIAlib29sCQlpbmNsdWRlX3JlYWxtOwogCWJvb2wJ CWNvbXBhdF9yZWFsbTsKIAlib29sCQl1cG5fdXNlcm5hbWU7Ci0JTGlzdAkgICAqcmFkaXVzc2Vy dmVyczsKLQljaGFyCSAgICpyYWRpdXNzZXJ2ZXJzX3M7Ci0JTGlzdAkgICAqcmFkaXVzc2VjcmV0 czsKLQljaGFyCSAgICpyYWRpdXNzZWNyZXRzX3M7Ci0JTGlzdAkgICAqcmFkaXVzaWRlbnRpZmll cnM7Ci0JY2hhcgkgICAqcmFkaXVzaWRlbnRpZmllcnNfczsKLQlMaXN0CSAgICpyYWRpdXNwb3J0 czsKLQljaGFyCSAgICpyYWRpdXNwb3J0c19zOwogCWNoYXIJICAgKm9hdXRoX2lzc3VlcjsKIAlj aGFyCSAgICpvYXV0aF9zY29wZTsKIAljaGFyCSAgICpvYXV0aF92YWxpZGF0b3I7CmRpZmYgLS1n aXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CmluZGV4IDFjODYxMGZkNDZjLi40YmM4YThkNmZhZCAxMDA2NDQKLS0t IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKQEAgLTQwNTMsOCArNDA1Myw2IEBAIHFjX2hhc2hfZnVuYwogcXNv cnRfYXJnX2NvbXBhcmF0b3IKIHFzb3J0X2NvbXBhcmF0b3IKIHF1ZXJ5X3BhdGhrZXlzX2NhbGxi YWNrCi1yYWRpdXNfYXR0cmlidXRlCi1yYWRpdXNfcGFja2V0CiByYW5nZVRhYmxlRW50cnlfdXNl ZF9jb250ZXh0CiByYW5rX2NvbnRleHQKIHJidF9hbGxvY2Z1bmMKLS0gCjIuNTIuMAoK --000000000000fa5f2606490b8b21 Content-Type: application/x-patch; name="0003-Remove-obsolete-Windows-select-and-UDP-support.patch" Content-Disposition: attachment; filename="0003-Remove-obsolete-Windows-select-and-UDP-support.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkqc4lml2 RnJvbSBmN2Y0ZDBhZjE0NDYwNDNmYzc4MWM5Y2Y4ZWY3ZDY0NWMyMGUyODMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjMgSmFuIDIwMjYgMTQ6NTg6MTUgKzEzMDAKU3ViamVjdDogW1BBVENIIDMv M10gUmVtb3ZlIG9ic29sZXRlIFdpbmRvd3Mgc2VsZWN0KCkgYW5kIFVEUCBzdXBwb3J0LgoKU2lu Y2UgdGhlIHJlbW92YWwgb2YgUkFESVVTLCB0aGVyZSBhcmUgbm8gcmVtYWluaW5nIHVzZXJzIG9m IHNlbGVjdCgpIGluCnRoZSBiYWNrZW5kLiAgQWxsIG5ldyBjb2RlLCBiZSBpdCBpbiB0aGUgdHJl ZSBvciBpbiBleHRlbnNpb25zLCBzaG91bGQKYmUgdXNpbmcgdGhlIFdhaXRFdmVudFNldCBBUEku ICBOb24tdGhyZWFkLXNhZmUgY29kZSByZWxhdGluZyB0byBVRFAKc29ja2V0cyBpcyBhbHNvIHJl bW92ZWQ7IGl0IHdhcyByZWxldmFudCB0byB0aGUgcGdzdGF0IHByb2Nlc3MgKGxvbmcKZ29uZSkg YW5kIHBlcmhhcHMgUkFESVVTLgoKV2l0aCBhIGJpdCBvZiBoaWdoZXItbGV2ZWwgd29yayB0byBl cmFkaWNhdGUgYmxvY2tpbmcgc29ja2V0cyBjb21wbGV0ZWx5CmZyb20gdGhlIGJhY2tlbmQsIHRo ZSBub24tdGhyZWFkLXNhZmUgYmxvY2tpbmcgY29kZSBpbiB0aGUgcmVtYWluaW5nCndyYXBwZXJz IGNvdWxkIGFsc28gYmUgZGVsZXRlZCwgYnV0IHRoYXQgaXNuJ3QgZG9uZSBoZXJlLgoKUmV2aWV3 ZWQtYnk6CkRpc2N1c3Npb246Ci0tLQogc3JjL2JhY2tlbmQvcG9ydC93aW4zMi9zb2NrZXQuYyB8 IDI3MCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2luY2x1ZGUvcG9ydC93 aW4zMl9wb3J0LmggICB8ICAgMiAtCiAyIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAy NzEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9ydC93aW4zMi9zb2Nr ZXQuYyBiL3NyYy9iYWNrZW5kL3BvcnQvd2luMzIvc29ja2V0LmMKaW5kZXggM2FhZjk3MWU5NzMu LjNmYmRmNTkxYjE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3J0L3dpbjMyL3NvY2tldC5j CisrKyBiL3NyYy9iYWNrZW5kL3BvcnQvd2luMzIvc29ja2V0LmMKQEAgLTMzLDcgKzMzLDYgQEAg aW50CQkJcGd3aW4zMl9ub2Jsb2NrID0gMDsKICN1bmRlZiBsaXN0ZW4KICN1bmRlZiBhY2NlcHQK ICN1bmRlZiBjb25uZWN0Ci0jdW5kZWYgc2VsZWN0CiAjdW5kZWYgcmVjdgogI3VuZGVmIHNlbmQK IApAQCAtMTY1LDI0ICsxNjQsMTAgQEAgcGd3aW4zMl9wb2xsX3NpZ25hbHModm9pZCkKIAlyZXR1 cm4gMDsKIH0KIAotc3RhdGljIGludAotaXNEYXRhR3JhbShTT0NLRVQgcykKLXsKLQlpbnQJCQl0 eXBlOwotCWludAkJCXR5cGVsZW4gPSBzaXplb2YodHlwZSk7Ci0KLQlpZiAoZ2V0c29ja29wdChz LCBTT0xfU09DS0VULCBTT19UWVBFLCAoY2hhciAqKSAmdHlwZSwgJnR5cGVsZW4pKQotCQlyZXR1 cm4gMTsKLQotCXJldHVybiAodHlwZSA9PSBTT0NLX0RHUkFNKSA/IDEgOiAwOwotfQotCiBpbnQK IHBnd2luMzJfd2FpdGZvcnNpbmdsZXNvY2tldChTT0NLRVQgcywgaW50IHdoYXQsIGludCB0aW1l b3V0KQogewogCXN0YXRpYyBIQU5ETEUgd2FpdGV2ZW50ID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7 Ci0Jc3RhdGljIFNPQ0tFVCBjdXJyZW50X3NvY2tldCA9IElOVkFMSURfU09DS0VUOwotCXN0YXRp YyBpbnQJaXNVRFAgPSAwOwogCUhBTkRMRQkJZXZlbnRzWzJdOwogCWludAkJCXI7CiAKQEAgLTE5 OSwxNSArMTg0LDYgQEAgcGd3aW4zMl93YWl0Zm9yc2luZ2xlc29ja2V0KFNPQ0tFVCBzLCBpbnQg d2hhdCwgaW50IHRpbWVvdXQpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycm1zZ19pbnRlcm5h bCgiY291bGQgbm90IHJlc2V0IHNvY2tldCB3YWl0aW5nIGV2ZW50OiBlcnJvciBjb2RlICVsdSIs IEdldExhc3RFcnJvcigpKSkpOwogCi0JLyoKLQkgKiBUcmFjayB3aGV0aGVyIHNvY2tldCBpcyBV RFAgb3Igbm90LiAgKE5COiBtb3N0IGxpa2VseSwgdGhpcyBpcyBib3RoCi0JICogdXNlbGVzcyBh bmQgd3Jvbmc7IHRoZXJlIGlzIG5vIHJlYXNvbiB0byB0aGluayB0aGF0IHRoZSBiZWhhdmlvciBv ZgotCSAqIFdTQUV2ZW50U2VsZWN0IGlzIGRpZmZlcmVudCBmb3IgVENQIGFuZCBVRFAuKQotCSAq LwotCWlmIChjdXJyZW50X3NvY2tldCAhPSBzKQotCQlpc1VEUCA9IGlzRGF0YUdyYW0ocyk7Ci0J Y3VycmVudF9zb2NrZXQgPSBzOwotCiAJLyoKIAkgKiBBdHRhY2ggZXZlbnQgdG8gc29ja2V0LiAg Tk9URTogd2UgbXVzdCBkZXRhY2ggaXQgYWdhaW4gYmVmb3JlCiAJICogcmV0dXJuaW5nLCBzaW5j ZSBvdGhlciBiaXRzIG9mIGNvZGUgbWF5IHRyeSB0byBhdHRhY2ggb3RoZXIgZXZlbnRzIHRvCkBA IC0yMjIsNDcgKzE5OCw3IEBAIHBnd2luMzJfd2FpdGZvcnNpbmdsZXNvY2tldChTT0NLRVQgcywg aW50IHdoYXQsIGludCB0aW1lb3V0KQogCWV2ZW50c1swXSA9IHBnd2luMzJfc2lnbmFsX2V2ZW50 OwogCWV2ZW50c1sxXSA9IHdhaXRldmVudDsKIAotCS8qCi0JICogSnVzdCBhIHdvcmthcm91bmQg b2YgdW5rbm93biBsb2NraW5nIHByb2JsZW0gd2l0aCB3cml0aW5nIGluIFVEUCBzb2NrZXQKLQkg KiB1bmRlciBoaWdoIGxvYWQ6IENsaWVudCdzIHBnc3FsIGJhY2tlbmQgc2xlZXBzIGluZmluaXRl bHkgaW4KLQkgKiBXYWl0Rm9yTXVsdGlwbGVPYmplY3RzRXgsIHBnc3RhdCBwcm9jZXNzIHNsZWVw cyBpbiBwZ3dpbjMyX3NlbGVjdCgpLgotCSAqIFNvLCB3ZSB3aWxsIHdhaXQgd2l0aCBzbWFsbCB0 aW1lb3V0KDAuMSBzZWMpIGFuZCBpZiBzb2NrZXQgaXMgc3RpbGwKLQkgKiBibG9ja2VkLCB0cnkg V1NBU2VuZCAoc2VlIGNvbW1lbnRzIGluIHBnd2luMzJfc2VsZWN0KSBhbmQgd2FpdCBhZ2Fpbi4K LQkgKi8KLQlpZiAoKHdoYXQgJiBGRF9XUklURSkgJiYgaXNVRFApCi0JewotCQlmb3IgKDs7KQot CQl7Ci0JCQlyID0gV2FpdEZvck11bHRpcGxlT2JqZWN0c0V4KDIsIGV2ZW50cywgRkFMU0UsIDEw MCwgVFJVRSk7Ci0KLQkJCWlmIChyID09IFdBSVRfVElNRU9VVCkKLQkJCXsKLQkJCQljaGFyCQlj OwotCQkJCVdTQUJVRgkJYnVmOwotCQkJCURXT1JECQlzZW50OwotCi0JCQkJYnVmLmJ1ZiA9ICZj OwotCQkJCWJ1Zi5sZW4gPSAwOwotCi0JCQkJciA9IFdTQVNlbmQocywgJmJ1ZiwgMSwgJnNlbnQs IDAsIE5VTEwsIE5VTEwpOwotCQkJCWlmIChyID09IDApCQkvKiBDb21wbGV0ZWQgLSBtZWFucyB0 aGluZ3MgYXJlIGZpbmUhICovCi0JCQkJewotCQkJCQlXU0FFdmVudFNlbGVjdChzLCBOVUxMLCAw KTsKLQkJCQkJcmV0dXJuIDE7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKFdTQUdldExhc3RFcnJvcigp ICE9IFdTQUVXT1VMREJMT0NLKQotCQkJCXsKLQkJCQkJVHJhbnNsYXRlU29ja2V0RXJyb3IoKTsK LQkJCQkJV1NBRXZlbnRTZWxlY3QocywgTlVMTCwgMCk7Ci0JCQkJCXJldHVybiAwOwotCQkJCX0K LQkJCX0KLQkJCWVsc2UKLQkJCQlicmVhazsKLQkJfQotCX0KLQllbHNlCi0JCXIgPSBXYWl0Rm9y TXVsdGlwbGVPYmplY3RzRXgoMiwgZXZlbnRzLCBGQUxTRSwgdGltZW91dCwgVFJVRSk7CisJciA9 IFdhaXRGb3JNdWx0aXBsZU9iamVjdHNFeCgyLCBldmVudHMsIEZBTFNFLCB0aW1lb3V0LCBUUlVF KTsKIAogCVdTQUV2ZW50U2VsZWN0KHMsIE5VTEwsIDApOwogCkBAIC00NjgsMTAgKzQwNCw2IEBA IHBnd2luMzJfc2VuZChTT0NLRVQgcywgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgZmxh Z3MpCiAJd2J1Zi5sZW4gPSBsZW47CiAJd2J1Zi5idWYgPSAoY2hhciAqKSBidWY7CiAKLQkvKgot CSAqIFJlYWRpbmVzcyBvZiBzb2NrZXQgdG8gc2VuZCBkYXRhIHRvIFVEUCBzb2NrZXQgbWF5IGJl IG5vdCB0cnVlOiBzb2NrZXQKLQkgKiBjYW4gYmVjb21lIGJ1c3kgYWdhaW4hIFNvIGxvb3AgdW50 aWwgc2VuZCBvciBlcnJvciBvY2N1cnMuCi0JICovCiAJZm9yICg7OykKIAl7CiAJCXIgPSBXU0FT ZW5kKHMsICZ3YnVmLCAxLCAmYiwgZmxhZ3MsIE5VTEwsIE5VTEwpOwpAQCAtNTA0LDIwMyArNDM2 LDMgQEAgcGd3aW4zMl9zZW5kKFNPQ0tFVCBzLCBjb25zdCB2b2lkICpidWYsIGludCBsZW4sIGlu dCBmbGFncykKIAogCXJldHVybiAtMTsKIH0KLQotCi0vKgotICogV2FpdCBmb3IgYWN0aXZpdHkg b24gb25lIG9yIG1vcmUgc29ja2V0cy4KLSAqIFdoaWxlIHdhaXRpbmcsIGFsbG93IHNpZ25hbHMg dG8gcnVuCi0gKgotICogTk9URSEgQ3VycmVudGx5IGRvZXMgbm90IGltcGxlbWVudCBleGNlcHRm ZHMgY2hlY2ssCi0gKiBzaW5jZSBpdCBpcyBub3QgdXNlZCBpbiBwb3N0Z3Jlc3FsIQotICovCi1p bnQKLXBnd2luMzJfc2VsZWN0KGludCBuZmRzLCBmZF9zZXQgKnJlYWRmZHMsIGZkX3NldCAqd3Jp dGVmZHMsIGZkX3NldCAqZXhjZXB0ZmRzLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdGltZW91dCkK LXsKLQlXU0FFVkVOVAlldmVudHNbRkRfU0VUU0laRSAqIDJdOyAvKiB3b3JzdCBjYXNlIGlzIHJl YWRmZHMgdG90YWxseQotCQkJCQkJCQkJCSAqIGRpZmZlcmVudCBmcm9tIHdyaXRlZmRzLCBzbwot CQkJCQkJCQkJCSAqIDIqRkRfU0VUU0laRSBzb2NrZXRzICovCi0JU09DS0VUCQlzb2NrZXRzW0ZE X1NFVFNJWkUgKiAyXTsKLQlpbnQJCQludW1ldmVudHMgPSAwOwotCWludAkJCWk7Ci0JaW50CQkJ cjsKLQlEV09SRAkJdGltZW91dHZhbCA9IFdTQV9JTkZJTklURTsKLQlGRF9TRVQJCW91dHJlYWRm ZHM7Ci0JRkRfU0VUCQlvdXR3cml0ZWZkczsKLQlpbnQJCQludW1tYXRjaGVzID0gMDsKLQotCUFz c2VydChleGNlcHRmZHMgPT0gTlVMTCk7Ci0KLQlpZiAocGd3aW4zMl9wb2xsX3NpZ25hbHMoKSkK LQkJcmV0dXJuIC0xOwotCi0JRkRfWkVSTygmb3V0cmVhZGZkcyk7Ci0JRkRfWkVSTygmb3V0d3Jp dGVmZHMpOwotCi0JLyoKLQkgKiBXaW5kb3dzIGRvZXMgbm90IGd1YXJhbnRlZSB0byBsb2cgYW4g RkRfV1JJVEUgbmV0d29yayBldmVudCBpbmRpY2F0aW5nCi0JICogdGhhdCBtb3JlIGRhdGEgY2Fu IGJlIHNlbnQgdW5sZXNzIHRoZSBwcmV2aW91cyBzZW5kKCkgZmFpbGVkIHdpdGgKLQkgKiBXU0FF V09VTERCTE9DSy4gIFdoaWxlIG91ciBjYWxsZXIgbWlnaHQgd2VsbCBoYXZlIG1hZGUgc3VjaCBh IGNhbGwsIHdlCi0JICogY2Fubm90IGFzc3VtZSB0aGF0IGhlcmUuICBUaGVyZWZvcmUsIGlmIHdh aXRpbmcgZm9yIHdyaXRlLXJlYWR5LCBmb3JjZQotCSAqIHRoZSBpc3N1ZSBieSBkb2luZyBhIGR1 bW15IHNlbmQoKS4gIElmIHRoZSBkdW1teSBzZW5kKCkgc3VjY2VlZHMsCi0JICogYXNzdW1lIHRo YXQgdGhlIHNvY2tldCBpcyBpbiBmYWN0IHdyaXRlLXJlYWR5LCBhbmQgcmV0dXJuIGltbWVkaWF0 ZWx5LgotCSAqIEFsc28sIGlmIGl0IGZhaWxzIHdpdGggc29tZXRoaW5nIG90aGVyIHRoYW4gV1NB RVdPVUxEQkxPQ0ssIHJldHVybiBhCi0JICogd3JpdGUtcmVhZHkgaW5kaWNhdGlvbiB0byBsZXQg b3VyIGNhbGxlciBkZWFsIHdpdGggdGhlIGVycm9yIGNvbmRpdGlvbi4KLQkgKi8KLQlpZiAod3Jp dGVmZHMgIT0gTlVMTCkKLQl7Ci0JCWZvciAoaSA9IDA7IGkgPCB3cml0ZWZkcy0+ZmRfY291bnQ7 IGkrKykKLQkJewotCQkJY2hhcgkJYzsKLQkJCVdTQUJVRgkJYnVmOwotCQkJRFdPUkQJCXNlbnQ7 Ci0KLQkJCWJ1Zi5idWYgPSAmYzsKLQkJCWJ1Zi5sZW4gPSAwOwotCi0JCQlyID0gV1NBU2VuZCh3 cml0ZWZkcy0+ZmRfYXJyYXlbaV0sICZidWYsIDEsICZzZW50LCAwLCBOVUxMLCBOVUxMKTsKLQkJ CWlmIChyID09IDAgfHwgV1NBR2V0TGFzdEVycm9yKCkgIT0gV1NBRVdPVUxEQkxPQ0spCi0JCQkJ RkRfU0VUKHdyaXRlZmRzLT5mZF9hcnJheVtpXSwgJm91dHdyaXRlZmRzKTsKLQkJfQotCi0JCS8q IElmIHdlIGZvdW5kIGFueSB3cml0ZS1yZWFkeSBzb2NrZXRzLCBqdXN0IHJldHVybiB0aGVtIGlt bWVkaWF0ZWx5ICovCi0JCWlmIChvdXR3cml0ZWZkcy5mZF9jb3VudCA+IDApCi0JCXsKLQkJCW1l bWNweSh3cml0ZWZkcywgJm91dHdyaXRlZmRzLCBzaXplb2YoZmRfc2V0KSk7Ci0JCQlpZiAocmVh ZGZkcykKLQkJCQlGRF9aRVJPKHJlYWRmZHMpOwotCQkJcmV0dXJuIG91dHdyaXRlZmRzLmZkX2Nv dW50OwotCQl9Ci0JfQotCi0KLQkvKiBOb3cgc2V0IHVwIGZvciBhbiBhY3R1YWwgc2VsZWN0ICov Ci0KLQlpZiAodGltZW91dCAhPSBOVUxMKQotCXsKLQkJLyogdGltZW91dHZhbCBpcyBpbiBtaWxs aXNlY29uZHMgKi8KLQkJdGltZW91dHZhbCA9IHRpbWVvdXQtPnR2X3NlYyAqIDEwMDAgKyB0aW1l b3V0LT50dl91c2VjIC8gMTAwMDsKLQl9Ci0KLQlpZiAocmVhZGZkcyAhPSBOVUxMKQotCXsKLQkJ Zm9yIChpID0gMDsgaSA8IHJlYWRmZHMtPmZkX2NvdW50OyBpKyspCi0JCXsKLQkJCWV2ZW50c1tu dW1ldmVudHNdID0gV1NBQ3JlYXRlRXZlbnQoKTsKLQkJCXNvY2tldHNbbnVtZXZlbnRzXSA9IHJl YWRmZHMtPmZkX2FycmF5W2ldOwotCQkJbnVtZXZlbnRzKys7Ci0JCX0KLQl9Ci0JaWYgKHdyaXRl ZmRzICE9IE5VTEwpCi0JewotCQlmb3IgKGkgPSAwOyBpIDwgd3JpdGVmZHMtPmZkX2NvdW50OyBp KyspCi0JCXsKLQkJCWlmICghcmVhZGZkcyB8fAotCQkJCSFGRF9JU1NFVCh3cml0ZWZkcy0+ZmRf YXJyYXlbaV0sIHJlYWRmZHMpKQotCQkJewotCQkJCS8qIElmIHRoZSBzb2NrZXQgaXMgbm90IGlu IHRoZSByZWFkIGxpc3QgKi8KLQkJCQlldmVudHNbbnVtZXZlbnRzXSA9IFdTQUNyZWF0ZUV2ZW50 KCk7Ci0JCQkJc29ja2V0c1tudW1ldmVudHNdID0gd3JpdGVmZHMtPmZkX2FycmF5W2ldOwotCQkJ CW51bWV2ZW50cysrOwotCQkJfQotCQl9Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG51bWV2ZW50 czsgaSsrKQotCXsKLQkJaW50CQkJZmxhZ3MgPSAwOwotCi0JCWlmIChyZWFkZmRzICYmIEZEX0lT U0VUKHNvY2tldHNbaV0sIHJlYWRmZHMpKQotCQkJZmxhZ3MgfD0gRkRfUkVBRCB8IEZEX0FDQ0VQ VCB8IEZEX0NMT1NFOwotCi0JCWlmICh3cml0ZWZkcyAmJiBGRF9JU1NFVChzb2NrZXRzW2ldLCB3 cml0ZWZkcykpCi0JCQlmbGFncyB8PSBGRF9XUklURSB8IEZEX0NMT1NFOwotCi0JCWlmIChXU0FF dmVudFNlbGVjdChzb2NrZXRzW2ldLCBldmVudHNbaV0sIGZsYWdzKSAhPSAwKQotCQl7Ci0JCQlU cmFuc2xhdGVTb2NrZXRFcnJvcigpOwotCQkJLyogcmVsZWFzZSBhbHJlYWR5LWFzc2lnbmVkIGV2 ZW50IG9iamVjdHMgKi8KLQkJCXdoaWxlICgtLWkgPj0gMCkKLQkJCQlXU0FFdmVudFNlbGVjdChz b2NrZXRzW2ldLCBOVUxMLCAwKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBudW1ldmVudHM7IGkrKykK LQkJCQlXU0FDbG9zZUV2ZW50KGV2ZW50c1tpXSk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0K LQlldmVudHNbbnVtZXZlbnRzXSA9IHBnd2luMzJfc2lnbmFsX2V2ZW50OwotCXIgPSBXYWl0Rm9y TXVsdGlwbGVPYmplY3RzRXgobnVtZXZlbnRzICsgMSwgZXZlbnRzLCBGQUxTRSwgdGltZW91dHZh bCwgVFJVRSk7Ci0JaWYgKHIgIT0gV0FJVF9USU1FT1VUICYmIHIgIT0gV0FJVF9JT19DT01QTEVU SU9OICYmIHIgIT0gKFdBSVRfT0JKRUNUXzAgKyBudW1ldmVudHMpKQotCXsKLQkJLyoKLQkJICog V2Ugc2NhbiBhbGwgZXZlbnRzLCBldmVuIHRob3NlIG5vdCBzaWduYWxlZCwgaW4gY2FzZSBtb3Jl IHRoYW4gb25lCi0JCSAqIGV2ZW50IGhhcyBiZWVuIHRhZ2dlZCBidXQgV2FpdC4uIGNhbiBvbmx5 IHJldHVybiBvbmUuCi0JCSAqLwotCQlXU0FORVRXT1JLRVZFTlRTIHJlc0V2ZW50czsKLQotCQlm b3IgKGkgPSAwOyBpIDwgbnVtZXZlbnRzOyBpKyspCi0JCXsKLQkJCVplcm9NZW1vcnkoJnJlc0V2 ZW50cywgc2l6ZW9mKHJlc0V2ZW50cykpOwotCQkJaWYgKFdTQUVudW1OZXR3b3JrRXZlbnRzKHNv Y2tldHNbaV0sIGV2ZW50c1tpXSwgJnJlc0V2ZW50cykgIT0gMCkKLQkJCQllbG9nKEVSUk9SLCAi ZmFpbGVkIHRvIGVudW1lcmF0ZSBuZXR3b3JrIGV2ZW50czogZXJyb3IgY29kZSAlZCIsCi0JCQkJ CSBXU0FHZXRMYXN0RXJyb3IoKSk7Ci0JCQkvKiBSZWFkIGFjdGl2aXR5PyAqLwotCQkJaWYgKHJl YWRmZHMgJiYgRkRfSVNTRVQoc29ja2V0c1tpXSwgcmVhZGZkcykpCi0JCQl7Ci0JCQkJaWYgKChy ZXNFdmVudHMubE5ldHdvcmtFdmVudHMgJiBGRF9SRUFEKSB8fAotCQkJCQkocmVzRXZlbnRzLmxO ZXR3b3JrRXZlbnRzICYgRkRfQUNDRVBUKSB8fAotCQkJCQkocmVzRXZlbnRzLmxOZXR3b3JrRXZl bnRzICYgRkRfQ0xPU0UpKQotCQkJCXsKLQkJCQkJRkRfU0VUKHNvY2tldHNbaV0sICZvdXRyZWFk ZmRzKTsKLQotCQkJCQludW1tYXRjaGVzKys7Ci0JCQkJfQotCQkJfQotCQkJLyogV3JpdGUgYWN0 aXZpdHk/ICovCi0JCQlpZiAod3JpdGVmZHMgJiYgRkRfSVNTRVQoc29ja2V0c1tpXSwgd3JpdGVm ZHMpKQotCQkJewotCQkJCWlmICgocmVzRXZlbnRzLmxOZXR3b3JrRXZlbnRzICYgRkRfV1JJVEUp IHx8Ci0JCQkJCShyZXNFdmVudHMubE5ldHdvcmtFdmVudHMgJiBGRF9DTE9TRSkpCi0JCQkJewot CQkJCQlGRF9TRVQoc29ja2V0c1tpXSwgJm91dHdyaXRlZmRzKTsKLQotCQkJCQludW1tYXRjaGVz Kys7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JLyogQ2xlYW4gdXAgYWxsIHRoZSBldmVudCBv YmplY3RzICovCi0JZm9yIChpID0gMDsgaSA8IG51bWV2ZW50czsgaSsrKQotCXsKLQkJV1NBRXZl bnRTZWxlY3Qoc29ja2V0c1tpXSwgTlVMTCwgMCk7Ci0JCVdTQUNsb3NlRXZlbnQoZXZlbnRzW2ld KTsKLQl9Ci0KLQlpZiAociA9PSBXU0FfV0FJVF9USU1FT1VUKQotCXsKLQkJaWYgKHJlYWRmZHMp Ci0JCQlGRF9aRVJPKHJlYWRmZHMpOwotCQlpZiAod3JpdGVmZHMpCi0JCQlGRF9aRVJPKHdyaXRl ZmRzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogU2lnbmFsLWxpa2UgZXZlbnRzLiAqLwotCWlm IChyID09IFdBSVRfT0JKRUNUXzAgKyBudW1ldmVudHMgfHwgciA9PSBXQUlUX0lPX0NPTVBMRVRJ T04pCi0JewotCQlwZ3dpbjMyX2Rpc3BhdGNoX3F1ZXVlZF9zaWduYWxzKCk7Ci0JCWVycm5vID0g RUlOVFI7Ci0JCWlmIChyZWFkZmRzKQotCQkJRkRfWkVSTyhyZWFkZmRzKTsKLQkJaWYgKHdyaXRl ZmRzKQotCQkJRkRfWkVSTyh3cml0ZWZkcyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKiBPdmVy d3JpdGUgc29ja2V0IHNldHMgd2l0aCBvdXIgcmVzdWx0aW5nIHZhbHVlcyAqLwotCWlmIChyZWFk ZmRzKQotCQltZW1jcHkocmVhZGZkcywgJm91dHJlYWRmZHMsIHNpemVvZihmZF9zZXQpKTsKLQlp ZiAod3JpdGVmZHMpCi0JCW1lbWNweSh3cml0ZWZkcywgJm91dHdyaXRlZmRzLCBzaXplb2YoZmRf c2V0KSk7Ci0JcmV0dXJuIG51bW1hdGNoZXM7Ci19CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9w b3J0L3dpbjMyX3BvcnQuaCBiL3NyYy9pbmNsdWRlL3BvcnQvd2luMzJfcG9ydC5oCmluZGV4IDk1 NmMwYjRiNGMzLi45ZmVhZjAyNDljYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9ydC93aW4z Ml9wb3J0LmgKKysrIGIvc3JjL2luY2x1ZGUvcG9ydC93aW4zMl9wb3J0LmgKQEAgLTQ5Nyw3ICs0 OTcsNiBAQCBleHRlcm4gaW50CXBna2lsbChpbnQgcGlkLCBpbnQgc2lnKTsKICNkZWZpbmUgbGlz dGVuKHMsIGJhY2tsb2cpIHBnd2luMzJfbGlzdGVuKHMsIGJhY2tsb2cpCiAjZGVmaW5lIGFjY2Vw dChzLCBhZGRyLCBhZGRybGVuKSBwZ3dpbjMyX2FjY2VwdChzLCBhZGRyLCBhZGRybGVuKQogI2Rl ZmluZSBjb25uZWN0KHMsIG5hbWUsIG5hbWVsZW4pIHBnd2luMzJfY29ubmVjdChzLCBuYW1lLCBu YW1lbGVuKQotI2RlZmluZSBzZWxlY3QobiwgciwgdywgZSwgdGltZW91dCkgcGd3aW4zMl9zZWxl Y3QobiwgciwgdywgZSwgdGltZW91dCkKICNkZWZpbmUgcmVjdihzLCBidWYsIGxlbiwgZmxhZ3Mp IHBnd2luMzJfcmVjdihzLCBidWYsIGxlbiwgZmxhZ3MpCiAjZGVmaW5lIHNlbmQocywgYnVmLCBs ZW4sIGZsYWdzKSBwZ3dpbjMyX3NlbmQocywgYnVmLCBsZW4sIGZsYWdzKQogCkBAIC01MDYsNyAr NTA1LDYgQEAgZXh0ZXJuIGludAlwZ3dpbjMyX2JpbmQoU09DS0VUIHMsIHN0cnVjdCBzb2NrYWRk ciAqYWRkciwgaW50IGFkZHJsZW4pOwogZXh0ZXJuIGludAlwZ3dpbjMyX2xpc3RlbihTT0NLRVQg cywgaW50IGJhY2tsb2cpOwogZXh0ZXJuIFNPQ0tFVCBwZ3dpbjMyX2FjY2VwdChTT0NLRVQgcywg c3RydWN0IHNvY2thZGRyICphZGRyLCBpbnQgKmFkZHJsZW4pOwogZXh0ZXJuIGludAlwZ3dpbjMy X2Nvbm5lY3QoU09DS0VUIHMsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50IGFkZHJs ZW4pOwotZXh0ZXJuIGludAlwZ3dpbjMyX3NlbGVjdChpbnQgbmZkcywgZmRfc2V0ICpyZWFkZmRz LCBmZF9zZXQgKndyaXRlZmRzLCBmZF9zZXQgKmV4Y2VwdGZkcywgY29uc3Qgc3RydWN0IHRpbWV2 YWwgKnRpbWVvdXQpOwogZXh0ZXJuIGludAlwZ3dpbjMyX3JlY3YoU09DS0VUIHMsIGNoYXIgKmJ1 ZiwgaW50IGxlbiwgaW50IGZsYWdzKTsKIGV4dGVybiBpbnQJcGd3aW4zMl9zZW5kKFNPQ0tFVCBz LCBjb25zdCB2b2lkICpidWYsIGludCBsZW4sIGludCBmbGFncyk7CiBleHRlcm4gaW50CXBnd2lu MzJfd2FpdGZvcnNpbmdsZXNvY2tldChTT0NLRVQgcywgaW50IHdoYXQsIGludCB0aW1lb3V0KTsK LS0gCjIuNTIuMAoK --000000000000fa5f2606490b8b21--