From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: passt.top; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=YJsW8nOq; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by passt.top (Postfix) with ESMTPS id B01D65A0275 for ; Fri, 17 Jul 2026 19:57:29 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1784311046; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=cklV2kR9TmPtCPTmF/cwVJqEjmBDkwey/lnx9ZGvJVk=; b=YJsW8nOqua/GjUSlit1OcBoANNNW5HgAfM6YlaC9XFznzSxjTM1/kZZDMa20TH8+9Cz4tZ 75/stwV81jfJn0N+3ymke3ZuSafndLfvu010EzoiOZbtW9FkdYP2ybx8c4wEXylb9cb5h6 HDZFGezk50c2Gd+YxQHAbvTkZfKzwGE= Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-316-aIViSbqPOyqxGzhpZmO1Ow-1; Fri, 17 Jul 2026 13:57:19 -0400 X-MC-Unique: aIViSbqPOyqxGzhpZmO1Ow-1 X-Mimecast-MFC-AGG-ID: aIViSbqPOyqxGzhpZmO1Ow_1784311037 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 864661955DE2; Fri, 17 Jul 2026 17:57:17 +0000 (UTC) Received: from anskuma-thinkpadp1gen7.bengluru.csb (unknown [10.74.80.5]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 6C5BA180025E; Fri, 17 Jul 2026 17:57:14 +0000 (UTC) From: Anshu Kumari To: anskuma@redhat.com, sbrivio@redhat.com, passt-dev@passt.top Subject: [PATCH v5 4/7] dhcp: Add --dhcp-opt with option table and value parser Date: Fri, 17 Jul 2026 23:26:41 +0530 Message-ID: <20260717175648.879152-5-anskuma@redhat.com> In-Reply-To: <20260717175648.879152-1-anskuma@redhat.com> References: <20260717175648.879152-1-anskuma@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: vuuhQK4lsHNeAy20n5i9lVPYFPCz1ND89U_ETZexruU_1784311037 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Message-ID-Hash: UZRMCXFLYO5OGSPNEYM36P7AJUJV3H6C X-Message-ID-Hash: UZRMCXFLYO5OGSPNEYM36P7AJUJV3H6C X-MailFrom: anskuma@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: lvivier@redhat.com, david@gibson.dropbear.id.au, jmaloy@redhat.com X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: SW50cm9kdWNlIHRoZSAtLWRoY3Atb3B0IGZsYWcgdGhhdCBhbGxvd3Mgc2V0dGluZyBhcmJpdHJh cnkgREhDUA0Kb3B0aW9ucyBmcm9tIGNvbW1hbmQtbGluZSBpbiB0aGUgZm9ybSBbLS1kaGNwLW9w dCBDT0RFLFZBTFVFXS4NCg0KQWRkIGEgdHlwZSBsb29rdXAgdGFibGUgbWFwcGluZyBvcHRpb24g Y29kZXMgdG8gUkZDIDIxMzIgdmFsdWUgdHlwZXMNCihJUHY0LCBJUHY0IGxpc3QsIGludGVnZXIs IHN0cmluZykgYW5kIGRoY3Bfb3B0X3BhcnNlKCkgdG8gY29udmVydA0KQ0xJIHN0cmluZ3MgdG8g YmluYXJ5IHdpcmUgZm9ybWF0LiAgUGFyc2VkIG9wdGlvbnMgYXJlIHN0b3JlZCBpbg0Kc3RydWN0 IG9wdHNbXSBhbmQgaW5qZWN0ZWQgaW50byBESENQIHJlcGxpZXMuICBJZiB0aGUgc2FtZSBvcHRp b24gY29kZQ0KaXMgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UsIHRoZSBsYXN0IHZhbHVlIHdpbnMuDQoN Ckxpbms6IGh0dHBzOi8vYnVncy5wYXNzdC50b3Avc2hvd19idWcuY2dpP2lkPTE5Mg0KU2lnbmVk LW9mZi1ieTogQW5zaHUgS3VtYXJpIDxhbnNrdW1hQHJlZGhhdC5jb20+DQotLS0NCnY1Og0KICAt IFJlbmFtZSBlbnVtIHZhbHVlczogSU5UOC9JTlQxNi9JTlQzMi9TSU5UMzIg4oaSIFVJTlQ4L1VJ TlQxNi9VSU5UMzIvSU5UMzINCiAgLSBDaGFuZ2UgaW50IGxlbiB0byBzaXplX3QgbGVuIGluIGRo Y3Bfb3B0X3BhcnNlKCksIHJlbW92ZSBpbnQgY2FzdHMNCiAgLSBNYWtlIGRoY3Bfb3B0X3BhcnNl KCkgc3RhdGljLCBhZGQgZGhjcF9zZXRfb3B0KCkgdG8gc3RvcmUgb3B0aW9ucyANCiAgICBkaXJl Y3RseSBpbiBvcHRzW10gYXQgc3RhcnR1cCBpbnN0ZWFkIG9mIGRvdWJsZS1wYXJzaW5nIHZpYSBj dHgtPmRoY3Bfb3B0cw0KICAtIEFkZCBPUFRfVVNFUiB0byBlbnVtIG9wdF9zdGF0ZSB0byBwcm90 ZWN0IHVzZXIgb3B0aW9ucyBmcm9tIGJlaW5nDQogICAgb3ZlcndyaXR0ZW4gYnkgYnVpbHQtaW4g ZGVmYXVsdHMNCiAgLSBBZGQgZGhjcF9vcHRfdG9fc3RyKCkgZm9yIGNvbmZfcHJpbnQoKSBkaXNw bGF5DQogIC0gUmVtb3ZlIGRoY3Bfb3B0c1tdIGZyb20gc3RydWN0IGN0eCBpbiBwYXNzdC5oDQog IC0gUmVtb3ZlIGNvbmZfZGhjcF9vcHRpb24oKSB3cmFwcGVyIGZyb20gY29uZi5jDQoNCnY0Og0K ICAtIFJlbmFtZWQgY3VzdG9tX29wdHMgdG8gZGhjcF9vcHRzLCAyNTYgZW50cmllcyBpbmRleGVk IGJ5IG9wdGlvbg0KICAgIGNvZGUsIHJlbW92ZWQgTUFYX0NVU1RPTV9ESENQX09QVFMgYW5kIGNv dW50IGZpZWxkLg0KICAtIENoYW5nZWQgc3RyIGJ1ZmZlciBmcm9tIDI1NiB0byAyNTUgYnl0ZXMu DQogIC0gTW92ZWQgZnVuY3Rpb24gdG8gY29uZi5jIGFzIHN0YXRpYyBjb25mX2RoY3Bfb3B0aW9u KCksIHJlbmFtZWQNCiAgICBmcm9tIGRoY3BfYWRkX29wdGlvbigpLg0KICAtIE1hZGUgZGhjcF9v cHRfcGFyc2UoKSBub24tc3RhdGljLCBkZWNsYXJlZCBpbiBkaGNwLmgNCiAgLSBEcm9wcGVkIHZh bC9sZW4gZnJvbSBjdHggc3RydWN0OyBjb25mX2RoY3Bfb3B0aW9uKCkgdmFsaWRhdGVzDQogICAg d2l0aCB0ZW1wIGJ1ZmZlciwgZGhjcCgpIHBhcnNlcyBzdHIgZGlyZWN0bHkgaW50byBvcHRzW10g YXQNCiAgICByZXBseSB0aW1lLg0KICAtIFJlcGxhY2VkIHN0cnRva19yKCkgKyAyNTYtYnl0ZSBi dWZmZXIgd2l0aCBzdHJjc3BuKCkgKw0KICAgIElORVRfQUREUlNUUkxFTiBidWZmZXIuDQogIC0g QWRkZWQgREhDUF9PUFRfU0lOVDMyIGZvciBvcHRpb24gMiAoVGltZSBPZmZzZXQpLCB1c2VzIHN0 cnRvbCgpDQogICAgcGVyIFJGQyAyMTMyIFNlY3Rpb24gOC4yLg0KICAtIEFsbCBlcnJvcnMgaW4g ZGhjcF9vcHRfcGFyc2UoKSByZXR1cm4gLTEsIHJlbW92ZWQgZGllKCkgY2FsbHM7DQogICAgY2Fs bGVyIGhhbmRsZXMgZXJyb3IgbWVzc2FnZSBjb25zaXN0ZW50bHkuDQogIC0gUmVtb3ZlZCByZWR1 bmRhbnQgIXNsZW4gY2hlY2sgaW4gREhDUF9PUFRfU1RSIGNhc2UuDQogIC0gT21pdHRlZCBleHBs aWNpdCBhcnJheSBzaXplIGZvciBkaGNwX29wdF90eXBlc1tdLCBhcnJheWRkZWQgYm91bmRzDQog ICAgY2hlY2sgYmVmb3JlIGxvb2t1cC4NCiAgLSBBZGRlZCBlcnJubyA9IDAgKyBlcnJubyBjaGVj ayBmb3Igc3RydG91bCgpIGluIGNhc2UgMzQuDQogIC0gRml4ZWQgdXNhZ2UgdGV4dDogIlNldCBE SENQIG9wdGlvbiBDT0RFIHRvIFZBTCIuDQogIC0gSW1wcm92ZWQgbWFuIHBhZ2U6IGFkZGVkIGZv cm1hdCBkZXNjcmlwdGlvbiBhbmQgZXhhbXBsZXMNCg0KdjM6DQogIC0gUmVwbGFjZWQgREhDUF9P UFRfSU5URUdFUiB3aXRoIHNlcGFyYXRlIERIQ1BfT1BUX0lOVDgvSU5UMTYvSU5UMzINCiAgICBl bnVtcywgcmVtb3ZlZCBkaGNwX29wdF9pbnRfd2lkdGhbXSBhcnJheS4NCiAgLSBTaGFyZWQgbG9n aWMgYmV0d2VlbiBESENQX09QVF9JUFY0IGFuZCBESENQX09QVF9JUFY0X0xJU1Qg4oCUIHBhcnNl DQogICAgYm90aCBhcyBsaXN0LCBlcnJvciBpZiA+MSBpbiBzaW5nbGUgY2FzZS4NCiAgLSBBZGRl ZCBlcnJubyA9IDAgYmVmb3JlIHN0cnRvdWwoKSBhbmQgY2hlY2sgYWZ0ZXIuDQogIC0gRml4ZWQg cmFuZ2UgY2hlY2s6IDFVTEwgPDwgKHdpZHRoICogOCkgZm9yIGFsbCB3aWR0aHMgaW5jbHVkaW5n DQogICAgd2lkdGg9PTQuDQogIC0gc3RybmNweSDihpIgbWVtY3B5IGZvciBESENQX09QVF9TVFIu DQogIC0gTW92ZWQgZW51bSB0byBkaGNwLmMgc2luY2Ugbm90IHVzZWQgaW4gb3RoZXIgZmlsZXMu DQogIC0gUmVtb3ZlZCBvcHRpb25zIDU1LCA2MSAoY2xpZW50LW9ubHkpLCAxMTkgKEROUyBjb21w cmVzc2lvbiwgdXNlDQogICAgLS1kaGNwLXNlYXJjaCBpbnN0ZWFkKSwgMzMgKElQIHBhaXJzIG5v dCBzdXBwb3J0ZWQpLg0KICAtIERIQ1BfT1BUX1BBUlNFX0JVRiAxMDI0IOKGkiBjaGFyIHRtcFsy NTZdLg0KICAtIFVwZ3JhZGVkIGRoY3BfYWRkX29wdGlvbigpIHRvIGNhbGwgZGhjcF9vcHRfcGFy c2UoKSBhbmQgcG9wdWxhdGUNCiAgICB2YWxbXS9sZW4uDQogIC0gQWxpZ25lZCBhcnJheSBlbnRy aWVzIGZvciByZWFkYWJpbGl0eS4NCiAgLSBBZGRlZCB0YWIgYWZ0ZXIgQERIQ1BfT1BUX0lQVjRf TElTVDogaW4ga2VybmVsZG9jLg0KICAtIFJlamVjdCBlbXB0eSB2YWx1ZSBzdHJpbmdzIGJlZm9y ZSBwYXJzaW5nDQogIC0gUmVqZWN0IGxlYWRpbmcvdHJhaWxpbmcvY29uc2VjdXRpdmUgY29tbWFz IGluIElQIGxpc3QgdmFsdWVzLg0KDQp2MjoNCiAgLSBSZXBsYWNlZCBzdHJ1Y3QgbG9va3VwIHRh YmxlICsgZGhjcF9vcHRfdHlwZV9sb29rdXAoKSBmdW5jdGlvbiB3aXRoIGZsYXQgZGhjcF9vcHRf dHlwZXNbMjU2XSBhcnJheSBpbmRleGVkIGJ5IGNvZGUuDQogIC0gQ29uc29saWRhdGVkIERIQ1Bf T1BUX1VJTlQ4L1VJTlQxNi9VSU5UMzIgaW50byBzaW5nbGUgREhDUF9PUFRfSU5URUdFUiB3aXRo IGRoY3Bfb3B0X2ludF93aWR0aFsyNTZdIHRhYmxlLg0KICAtIERyb3BwZWQgREhDUF9PUFRfUk9V VEVTIC8gb3B0aW9uIDEyMSBlbnRpcmVseS4NCiAgLSBBZGRlZCBrZXJuZWxkb2MgZm9yIGVudW0g ZGhjcF9vcHRfdHlwZSB2YWx1ZXMuDQogIC0gUmVtb3ZlZCBjdXJseSBicmFjZXMgZnJvbSBzd2l0 Y2ggY2FzZXMsIGRlY2xhcmF0aW9ucyBiZWZvcmUgc3dpdGNoLg0KICAtIEFkZGVkIG5ld2xpbmVz IGJlZm9yZSByZXR1cm4gc3RhdGVtZW50cy4NCiAgLSBDaGFuZ2VkIElQIGxpc3QgZGVsaW1pdGVy IGZyb20gc3BhY2UgdG8gY29tbWEgKC0tZGhjcC1vcHQgNiwxLjEuMS4xLDguOC44LjgpLg0KICAt IERlZmluZWQgREhDUF9PUFRfUEFSU0VfQlVGIGNvbnN0YW50IGZvciBiYXJlIDEwMjQuDQogIC0g QWRkZWQgbGVuIGFuZCB2YWxbMjU1XSBmaWVsZHMgdG8gc3RydWN0IGhlcmUgKG1vdmVkIGZyb20g cGF0Y2ggMSkuDQogIC0gQWRkZWQga2VybmVsZG9jIGZvciBAY3VzdG9tX29wdHMubGVuIGFuZCBA Y3VzdG9tX29wdHMudmFsLg0KICAtIFdpcmVkIGRoY3Bfb3B0X3BhcnNlKCkgaW50byBjYXNlIDMy ICgtLWRoY3AtYm9vdCkgdG8gcG9wdWxhdGUgdmFsL2xlbi4NCg0KLS0tDQogY29uZi5jICB8ICAy NSArKysrLQ0KIGRoY3AuYyAgfCAzMzggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrLS0tLS0NCiBkaGNwLmggIHwgICAyICsNCiBwYXNzdC4xIHwgIDQy ICsrKysrKysNCiA0IGZpbGVzIGNoYW5nZWQsIDM4MSBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlv bnMoLSkNCg0KZGlmZiAtLWdpdCBhL2NvbmYuYyBiL2NvbmYuYw0KaW5kZXggNWI2Y2MyYi4uZTdm M2VhMCAxMDA2NDQNCi0tLSBhL2NvbmYuYw0KKysrIGIvY29uZi5jDQpAQCAtNDcsNiArNDcsNyBA QA0KICNpbmNsdWRlICJsaW5lcmVhZC5oIg0KICNpbmNsdWRlICJpc29sYXRpb24uaCINCiAjaW5j bHVkZSAibG9nLmgiDQorI2luY2x1ZGUgImRoY3AuaCINCiAjaW5jbHVkZSAidmhvc3RfdXNlci5o Ig0KICNpbmNsdWRlICJlcG9sbF9jdGwuaCINCiAjaW5jbHVkZSAiY29uZi5oIg0KQEAgLTYxNSw3 ICs2MTYsOCBAQCBzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpuYW1lLCBGSUxFICpmLCBp bnQgc3RhdHVzKQ0KIAkJIiAgLVMsIC0tc2VhcmNoIExJU1QJU3BhY2Utc2VwYXJhdGVkIGxpc3Qs IHNlYXJjaCBkb21haW5zXG4iDQogCQkiICAgIGEgc2luZ2xlLCBlbXB0eSBvcHRpb24gZGlzYWJs ZXMgdGhlIEROUyBzZWFyY2ggbGlzdFxuIg0KIAkJIiAgLUgsIC0taG9zdG5hbWUgTkFNRSAJSG9z dG5hbWUgdG8gY29uZmlndXJlIGNsaWVudCB3aXRoXG4iDQotCQkiICAtLWZxZG4gTkFNRQkJRlFE TiB0byBjb25maWd1cmUgY2xpZW50IHdpdGhcbiIpOw0KKwkJIiAgLS1mcWRuIE5BTUUJCUZRRE4g dG8gY29uZmlndXJlIGNsaWVudCB3aXRoXG4iDQorCQkiICAtLWRoY3Atb3B0IENPREUsVkFMCVNl dCBESENQIG9wdGlvbiBDT0RFIHRvIFZBTFxuIik7DQogCWlmIChzdHJzdHIobmFtZSwgInBhc3Rh IikpDQogCQlGUFJJTlRGKGYsICIgICAgZGVmYXVsdDogZG9uJ3QgdXNlIGFueSBzZWFyY2ggbGlz dFxuIik7DQogCWVsc2UNCkBAIC04NDMsNiArODQ1LDkgQEAgc3RhdGljIHZvaWQgY29uZl9wcmlu dChjb25zdCBzdHJ1Y3QgY3R4ICpjKQ0KIAkJCWluZm8oIiAgICByb3V0ZXI6ICVzIiwNCiAJCQkg ICAgIGluZXRfbnRvcChBRl9JTkVULCAmYy0+aXA0Lmd1ZXN0X2d3LA0KIAkJCQkgICAgICAgYnVm LCBzaXplb2YoYnVmKSkpOw0KKwkJCWZvciAoaSA9IDE7IGkgPCAyNTU7IGkrKykNCisJCQkJaWYg KGRoY3Bfb3B0X3RvX3N0cihpLCBidWYsIHNpemVvZihidWYpKSkNCisJCQkJCWluZm8oIiAgICBv cHRpb24gJXU6ICVzIiwgaSwgYnVmKTsNCiAJCX0NCiANCiAJCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKGMtPmlwNC5kbnMpOyBpKyspIHsNCkBAIC0xMzE2LDYgKzEzMjEsNyBAQCB2b2lkIGNv bmYoc3RydWN0IGN0eCAqYywgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAkJeyJzdGF0cyIsIHJl cXVpcmVkX2FyZ3VtZW50LAkJTlVMTCwJCTMxIH0sDQogCQl7ImNvbmYtcGF0aCIsCXJlcXVpcmVk X2FyZ3VtZW50LAlOVUxMLAkJJ2MnIH0sDQogCQl7ImNocm9vdC1mYWxsYmFjayIsIG5vX2FyZ3Vt ZW50LAlOVUxMLCAJCTMyIH0sDQorCQl7ImRoY3Atb3B0IiwgcmVxdWlyZWRfYXJndW1lbnQsCQlO VUxMLAkJMzQgfSwNCiAJCXsgMCB9LA0KIAl9Ow0KIAljb25zdCBjaGFyICpvcHRzdHJpbmcgPSAi K2RxZmVsOmhzOmM6RjpJOnA6UDptOmE6bjpNOmc6aTpvOkQ6UzpIOjQ2MXQ6dTpUOlU6IjsNCkBA IC0xMzMwLDEwICsxMzM2LDEzIEBAIHZvaWQgY29uZihzdHJ1Y3QgY3R4ICpjLCBpbnQgYXJnYywg Y2hhciAqKmFyZ3YpDQogCXVuc2lnbmVkIGludCBpZmk0ID0gMCwgaWZpNiA9IDA7DQogCWJvb2wg b3B0X2FfaXNfcHJlZml4ID0gZmFsc2U7DQogCWNvbnN0IGNoYXIgKmxvZ2ZpbGUgPSBOVUxMOw0K Kwl1bnNpZ25lZCBsb25nIG9wdGNvZGU7DQogCWNoYXIgKnJ1bmFzID0gTlVMTDsNCiAJc2l6ZV90 IGxvZ3NpemUgPSAwOw0KKwljb25zdCBjaGFyICpjb21tYTsNCiAJdWludDhfdCBvcHRfbiA9IDA7 DQogCWludCBuYW1lLCByZXQ7DQorCWNoYXIgKmVuZDsNCiAJdWlkX3QgdWlkOw0KIAlnaWRfdCBn aWQ7DQogDQpAQCAtMTU1Nyw2ICsxNTY2LDIwIEBAIHZvaWQgY29uZihzdHJ1Y3QgY3R4ICpjLCBp bnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCQljYXNlIDMyOg0KIAkJCWMtPmNocm9vdF9mYWxsYmFj ayA9IHRydWU7DQogCQkJYnJlYWs7DQorCQljYXNlIDM0Og0KKwkJCWNvbW1hID0gc3RyY2hyKG9w dGFyZywgJywnKTsNCisJCQlpZiAoIWNvbW1hKQ0KKwkJCQlkaWUoIi0tZGhjcC1vcHQgcmVxdWly ZXMgQ09ERSxWQUxVRSBmb3JtYXQiKTsNCisNCisJCQllcnJubyA9IDA7DQorCQkJb3B0Y29kZSA9 IHN0cnRvdWwob3B0YXJnLCAmZW5kLCAwKTsNCisJCQlpZiAoZW5kICE9IGNvbW1hIHx8IGVycm5v IHx8DQorCQkJICAgIG9wdGNvZGUgPCAxIHx8IG9wdGNvZGUgPiAyNTQpDQorCQkJCWRpZSgiREhD UCBvcHRpb24gY29kZSBtdXN0IGJlIDEtMjU0OiAlcyIsDQorCQkJCSAgICBvcHRhcmcpOw0KKw0K KwkJCWRoY3Bfc2V0X29wdChvcHRjb2RlLCBjb21tYSArIDEpOw0KKwkJCWJyZWFrOw0KIAkJY2Fz ZSAnZCc6DQogCQkJYy0+ZGVidWcgPSAxOw0KIAkJCWMtPnF1aWV0ID0gMDsNCmRpZmYgLS1naXQg YS9kaGNwLmMgYi9kaGNwLmMNCmluZGV4IDM5Zjc5NTIuLmNjOTEwZWUgMTAwNjQ0DQotLS0gYS9k aGNwLmMNCisrKyBiL2RoY3AuYw0KQEAgLTIzLDYgKzIzLDcgQEANCiAjaW5jbHVkZSA8dW5pc3Rk Lmg+DQogI2luY2x1ZGUgPHN0cmluZy5oPg0KICNpbmNsdWRlIDxsaW1pdHMuaD4NCisjaW5jbHVk ZSA8ZXJybm8uaD4NCiANCiAjaW5jbHVkZSAidXRpbC5oIg0KICNpbmNsdWRlICJpcC5oIg0KQEAg LTM3LDEwICszOCwxMiBAQA0KICAqIGVudW0gb3B0X3N0YXRlIC0gREhDUCBvcHRpb24gc3RhdGUN CiAgKiBAT1BUX1VOU0VUOgkJT3B0aW9uIG5vdCBjb25maWd1cmVkDQogICogQE9QVF9ERUZBVUxU OglPcHRpb24gc2V0IGZyb20gaG9zdCBjb25maWcNCisgKiBAT1BUX1VTRVI6CQlPcHRpb24gc2V0 IHZpYSAtLWRoY3Atb3B0IGNvbW1hbmQgbGluZQ0KICAqLw0KIGVudW0gb3B0X3N0YXRlIHsNCiAJ T1BUX1VOU0VULA0KIAlPUFRfREVGQVVMVCwNCisJT1BUX1VTRVIsDQogfTsNCiANCiAvKioNCkBA IC01MCw3ICs1Myw3IEBAIGVudW0gb3B0X3N0YXRlIHsNCiAgKiBAczoJCU9wdGlvbiBwYXlsb2Fk IGZyb20gc2VydmVyDQogICogQGNsZW46CUxlbmd0aCBvZiBvcHRpb24gcmVjZWl2ZWQgZnJvbSBj bGllbnQsIC0xIGlmIG5vdCByZWNlaXZlZA0KICAqIEBjOgkJT3B0aW9uIHBheWxvYWQgZnJvbSBj bGllbnQNCi0gKiBAc3RhdGU6CU9wdGlvbiBzdGF0ZSAodW5zZXQgb3IgZGVmYXVsdCkNCisgKiBA c3RhdGU6CU9wdGlvbiBzdGF0ZSAodW5zZXQsIGRlZmF1bHQsIG9yIHVzZXIpDQogICovDQogc3Ry dWN0IG9wdCB7DQogCWludCBzZW50Ow0KQEAgLTg4LDE5ICs5MSwyMCBAQCB2b2lkIGRoY3BfaW5p dCh2b2lkKQ0KIAlpbnQgaTsNCiANCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob3B0cyk7 IGkrKykNCi0JCW9wdHNbaV0uc3RhdGUgPSBPUFRfVU5TRVQ7DQotDQotCS8qIE1hc2sgKi8NCi0J b3B0c1sxXSAgPSAoc3RydWN0IG9wdCkgeyAwLCA0LCB7ICAwIH0sIDAsIHsgMCB9LCBPUFRfREVG QVVMVCwgfTsNCi0JLyogUm91dGVyICovDQotCW9wdHNbM10gID0gKHN0cnVjdCBvcHQpIHsgMCwg NCwgeyAgMCB9LCAwLCB7IDAgfSwgT1BUX0RFRkFVTFQsIH07DQotCS8qIExlYXNlIHRpbWUgKi8N Ci0Jb3B0c1s1MV0gPSAoc3RydWN0IG9wdCkgeyAwLCA0LCB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4 ZmYgfSwNCisJCWlmIChvcHRzW2ldLnN0YXRlICE9IE9QVF9VU0VSKQ0KKwkJCW9wdHNbaV0uc3Rh dGUgPSBPUFRfVU5TRVQ7DQorDQorCWlmIChvcHRzWzFdLnN0YXRlICE9IE9QVF9VU0VSKQkJCS8q IE1hc2sgKi8NCisJCW9wdHNbMV0gID0gKHN0cnVjdCBvcHQpIHsgMCwgNCwgeyAgMCB9LCAwLCB7 IDAgfSwgT1BUX0RFRkFVTFQsIH07DQorCWlmIChvcHRzWzNdLnN0YXRlICE9IE9QVF9VU0VSKQkJ CS8qIFJvdXRlciAqLw0KKwkJb3B0c1szXSAgPSAoc3RydWN0IG9wdCkgeyAwLCA0LCB7ICAwIH0s IDAsIHsgMCB9LCBPUFRfREVGQVVMVCwgfTsNCisJaWYgKG9wdHNbNTFdLnN0YXRlICE9IE9QVF9V U0VSKQkJCS8qIExlYXNlIHRpbWUgKi8NCisJCW9wdHNbNTFdID0gKHN0cnVjdCBvcHQpIHsgMCwg NCwgeyAweGZmLCAweGZmLCAweGZmLCAweGZmIH0sDQogCQkJCSAwLCB7IDAgfSwgT1BUX0RFRkFV TFQsIH07DQotCS8qIFR5cGUgKi8NCi0Jb3B0c1s1M10gPSAoc3RydWN0IG9wdCkgeyAwLCAxLCB7 ICAwIH0sIDAsIHsgMCB9LCBPUFRfREVGQVVMVCwgfTsNCi0JLyogU2VydmVyIElEICovDQotCW9w dHNbNTRdID0gKHN0cnVjdCBvcHQpIHsgMCwgNCwgeyAgMCB9LCAwLCB7IDAgfSwgT1BUX0RFRkFV TFQsIH07DQorCWlmIChvcHRzWzUzXS5zdGF0ZSAhPSBPUFRfVVNFUikJCQkvKiBUeXBlICovDQor CQlvcHRzWzUzXSA9IChzdHJ1Y3Qgb3B0KSB7IDAsIDEsIHsgIDAgfSwgMCwgeyAwIH0sIE9QVF9E RUZBVUxULCB9Ow0KKwlpZiAob3B0c1s1NF0uc3RhdGUgIT0gT1BUX1VTRVIpCQkJLyogU2VydmVy IElEICovDQorCQlvcHRzWzU0XSA9IChzdHJ1Y3Qgb3B0KSB7IDAsIDQsIHsgIDAgfSwgMCwgeyAw IH0sIE9QVF9ERUZBVUxULCB9Ow0KIH0NCiANCiAvKioNCkBAIC0xNDUsNiArMTQ5LDI4MCBAQCBz dHJ1Y3QgbXNnIHsNCiAJdWludDhfdCBvW09QVF9NQVggKyAxIC8qIEVuZCBvcHRpb24gKi8gXTsN CiB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsNCiANCisvKioNCisgKiBlbnVtIGRoY3Bf b3B0X3R5cGUgLSBESENQIG9wdGlvbiB2YWx1ZSB0eXBlcyBwZXIgUkZDIDIxMzINCisgKiBAREhD UF9PUFRfTk9ORToJVW5zdXBwb3J0ZWQgb3IgdW5rbm93biBvcHRpb24NCisgKiBAREhDUF9PUFRf U1RSOglWYXJpYWJsZS1sZW5ndGggc3RyaW5nDQorICogQERIQ1BfT1BUX0lQVjQ6CVNpbmdsZSBJ UHY0IGFkZHJlc3MNCisgKiBAREhDUF9PUFRfSVBWNF9MSVNUOglNdWx0aXBsZSBJUHY0IGFkZHJl c3NlcywgY29tbWEtc2VwYXJhdGVkDQorICogQERIQ1BfT1BUX1VJTlQ4OglVbnNpZ25lZCA4LWJp dCBpbnRlZ2VyDQorICogQERIQ1BfT1BUX1VJTlQxNjoJVW5zaWduZWQgMTYtYml0IGludGVnZXIN CisgKiBAREhDUF9PUFRfVUlOVDMyOglVbnNpZ25lZCAzMi1iaXQgaW50ZWdlcg0KKyAqIEBESENQ X09QVF9JTlQzMjoJU2lnbmVkIDMyLWJpdCBpbnRlZ2VyDQorICovDQorZW51bSBkaGNwX29wdF90 eXBlIHsNCisJREhDUF9PUFRfTk9ORSwNCisJREhDUF9PUFRfU1RSLA0KKwlESENQX09QVF9JUFY0 LA0KKwlESENQX09QVF9JUFY0X0xJU1QsDQorCURIQ1BfT1BUX1VJTlQ4LA0KKwlESENQX09QVF9V SU5UMTYsDQorCURIQ1BfT1BUX1VJTlQzMiwNCisJREhDUF9PUFRfSU5UMzIsDQorfTsNCisNCisv KioNCisgKiBkaGNwX29wdF90eXBlcyAtIE1hcHMgb3B0aW9uIGNvZGUgdG8gUkZDIDIxMzIgdmFs dWUgdHlwZSwgaW5kZXhlZCBieSBjb2RlDQorICovDQorc3RhdGljIGNvbnN0IGVudW0gZGhjcF9v cHRfdHlwZSBkaGNwX29wdF90eXBlc1tdID0gew0KKwlbMV0gICA9IERIQ1BfT1BUX0lQVjQsCQkv KiBTdWJuZXQgTWFzayAqLw0KKwlbMl0gICA9IERIQ1BfT1BUX0lOVDMyLAkJLyogVGltZSBPZmZz ZXQgKi8NCisJWzNdICAgPSBESENQX09QVF9JUFY0X0xJU1QsCS8qIFJvdXRlciAqLw0KKwlbNF0g ICA9IERIQ1BfT1BUX0lQVjRfTElTVCwJLyogVGltZSBTZXJ2ZXIgKi8NCisJWzVdICAgPSBESENQ X09QVF9JUFY0X0xJU1QsCS8qIE5hbWUgU2VydmVyICovDQorCVs2XSAgID0gREhDUF9PUFRfSVBW NF9MSVNULAkvKiBEb21haW4gTmFtZSBTZXJ2ZXIgKi8NCisJWzddICAgPSBESENQX09QVF9JUFY0 X0xJU1QsCS8qIExvZyBTZXJ2ZXIgKi8NCisJWzhdICAgPSBESENQX09QVF9JUFY0X0xJU1QsCS8q IENvb2tpZSBTZXJ2ZXIgKi8NCisJWzldICAgPSBESENQX09QVF9JUFY0X0xJU1QsCS8qIExQUiBT ZXJ2ZXIgKi8NCisJWzEwXSAgPSBESENQX09QVF9JUFY0X0xJU1QsCS8qIEltcHJlc3MgU2VydmVy ICovDQorCVsxMV0gID0gREhDUF9PUFRfSVBWNF9MSVNULAkvKiBSZXNvdXJjZSBMb2NhdGlvbiBT ZXJ2ZXIgKi8NCisJWzEyXSAgPSBESENQX09QVF9TVFIsCQkvKiBIb3N0IE5hbWUgKi8NCisJWzEz XSAgPSBESENQX09QVF9VSU5UMTYsCS8qIEJvb3QgRmlsZSBTaXplICovDQorCVsxNV0gID0gREhD UF9PUFRfU1RSLAkJLyogRG9tYWluIE5hbWUgKi8NCisJWzE2XSAgPSBESENQX09QVF9JUFY0LAkJ LyogU3dhcCBTZXJ2ZXIgKi8NCisJWzE3XSAgPSBESENQX09QVF9TVFIsCQkvKiBSb290IFBhdGgg Ki8NCisJWzE5XSAgPSBESENQX09QVF9VSU5UOCwJCS8qIElQIEZvcndhcmRpbmcgKi8NCisJWzIz XSAgPSBESENQX09QVF9VSU5UOCwJCS8qIERlZmF1bHQgSVAgVFRMICovDQorCVsyNl0gID0gREhD UF9PUFRfVUlOVDE2LAkvKiBJbnRlcmZhY2UgTVRVICovDQorCVsyOF0gID0gREhDUF9PUFRfSVBW NCwJCS8qIEJyb2FkY2FzdCBBZGRyZXNzICovDQorCVszN10gID0gREhDUF9PUFRfVUlOVDgsCQkv KiBUQ1AgRGVmYXVsdCBUVEwgKi8NCisJWzM4XSAgPSBESENQX09QVF9VSU5UMzIsCS8qIFRDUCBL ZWVwYWxpdmUgSW50ZXJ2YWwgKi8NCisJWzQwXSAgPSBESENQX09QVF9TVFIsCQkvKiBOSVMgRG9t YWluIE5hbWUgKi8NCisJWzQxXSAgPSBESENQX09QVF9JUFY0X0xJU1QsCS8qIE5JUyBTZXJ2ZXJz ICovDQorCVs0Ml0gID0gREhDUF9PUFRfSVBWNF9MSVNULAkvKiBOVFAgU2VydmVycyAqLw0KKwlb NDRdICA9IERIQ1BfT1BUX0lQVjRfTElTVCwJLyogTmV0QklPUyBOYW1lIFNlcnZlciAqLw0KKwlb NTBdICA9IERIQ1BfT1BUX0lQVjQsCQkvKiBSZXF1ZXN0ZWQgSVAgQWRkcmVzcyAqLw0KKwlbNTFd ICA9IERIQ1BfT1BUX1VJTlQzMiwJLyogSVAgQWRkcmVzcyBMZWFzZSBUaW1lICovDQorCVs1M10g ID0gREhDUF9PUFRfVUlOVDgsCQkvKiBESENQIE1lc3NhZ2UgVHlwZSAqLw0KKwlbNTRdICA9IERI Q1BfT1BUX0lQVjQsCQkvKiBTZXJ2ZXIgSWRlbnRpZmllciAqLw0KKwlbNTddICA9IERIQ1BfT1BU X1VJTlQxNiwJLyogTWF4IERIQ1AgTWVzc2FnZSBTaXplICovDQorCVs1OF0gID0gREhDUF9PUFRf VUlOVDMyLAkvKiBSZW5ld2FsIChUMSkgVGltZSAqLw0KKwlbNTldICA9IERIQ1BfT1BUX1VJTlQz MiwJLyogUmViaW5kaW5nIChUMikgVGltZSAqLw0KKwlbNjBdICA9IERIQ1BfT1BUX1NUUiwJCS8q IFZlbmRvciBDbGFzcyBJZGVudGlmaWVyICovDQorCVs2Nl0gID0gREhDUF9PUFRfU1RSLAkJLyog VEZUUCBTZXJ2ZXIgTmFtZSAqLw0KKwlbNjddICA9IERIQ1BfT1BUX1NUUiwJCS8qIEJvb3RmaWxl IE5hbWUgKi8NCisJWzI1Ml0gPSBESENQX09QVF9TVFIsCQkvKiBXUEFEIFVSTCAqLw0KK307DQor DQorLyoqDQorICogZGhjcF9vcHRfcGFyc2UoKSAtIFBhcnNlIGEgREhDUCBvcHRpb24gdmFsdWUN CisgKiBAY29kZToJREhDUCBvcHRpb24gY29kZQ0KKyAqIEBzdHI6CVZhbHVlIHN0cmluZyBmcm9t IGNvbW1hbmQgbGluZQ0KKyAqIEBidWY6CU91dHB1dCBidWZmZXIgZm9yIGJpbmFyeSB2YWx1ZQ0K KyAqIEBidWZfbGVuOglTaXplIG9mIG91dHB1dCBidWZmZXINCisgKg0KKyAqIFJldHVybjogbnVt YmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gQGJ1Ziwgb3IgLTEgb24gZXJyb3INCisgKi8NCitzdGF0 aWMgaW50IGRoY3Bfb3B0X3BhcnNlKHVpbnQ4X3QgY29kZSwgY29uc3QgY2hhciAqc3RyLA0KKwkJ ICAgdWludDhfdCAqYnVmLCBzaXplX3QgYnVmX2xlbikNCit7DQorCWVudW0gZGhjcF9vcHRfdHlw ZSB0eXBlOw0KKwl1bnNpZ25lZCBsb25nIHZhbDsNCisJdW5zaWduZWQgaW50IGk7DQorCXVpbnQ4 X3Qgd2lkdGg7DQorCXNpemVfdCBzbGVuOw0KKwlzaXplX3QgbGVuOw0KKwljaGFyICplbmQ7DQor DQorCWlmIChjb2RlID49IEFSUkFZX1NJWkUoZGhjcF9vcHRfdHlwZXMpKQ0KKwkJcmV0dXJuIC0x Ow0KKw0KKwl0eXBlID0gZGhjcF9vcHRfdHlwZXNbY29kZV07DQorDQorCWlmICghKnN0cikNCisJ CXJldHVybiAtMTsNCisNCisJc3dpdGNoICh0eXBlKSB7DQorCWNhc2UgREhDUF9PUFRfTk9ORToN CisJCXJldHVybiAtMTsNCisJY2FzZSBESENQX09QVF9JUFY0Og0KKwljYXNlIERIQ1BfT1BUX0lQ VjRfTElTVDoNCisJCWxlbiA9IDA7DQorDQorCQl3aGlsZSAoKnN0cikgew0KKwkJCWNoYXIgaXBi dWZbSU5FVF9BRERSU1RSTEVOXTsNCisJCQlzaXplX3QgY2h1bms7DQorDQorCQkJY2h1bmsgPSBz dHJjc3BuKHN0ciwgIiwiKTsNCisNCisJCQlpZiAoIWNodW5rIHx8IGNodW5rID49IHNpemVvZihp cGJ1ZikpDQorCQkJCXJldHVybiAtMTsNCisNCisJCQltZW1jcHkoaXBidWYsIHN0ciwgY2h1bmsp Ow0KKwkJCWlwYnVmW2NodW5rXSA9ICdcMCc7DQorDQorCQkJaWYgKGxlbiArIHNpemVvZihzdHJ1 Y3QgaW5fYWRkcikgPiBidWZfbGVuKQ0KKwkJCQlyZXR1cm4gLTE7DQorDQorCQkJaWYgKGluZXRf cHRvbihBRl9JTkVULCBpcGJ1ZiwgYnVmICsgbGVuKSAhPSAxKQ0KKwkJCQlyZXR1cm4gLTE7DQor DQorCQkJbGVuICs9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcik7DQorDQorCQkJaWYgKHR5cGUgPT0g REhDUF9PUFRfSVBWNCkgew0KKwkJCQlpZiAoc3RyW2NodW5rXSA9PSAnLCcpDQorCQkJCQlyZXR1 cm4gLTE7DQorCQkJCWJyZWFrOw0KKwkJCX0NCisNCisJCQlzdHIgKz0gY2h1bmsgKyAoc3RyW2No dW5rXSA9PSAnLCcpOw0KKwkJfQ0KKw0KKwkJaWYgKCFsZW4pDQorCQkJcmV0dXJuIC0xOw0KKw0K KwkJcmV0dXJuIGxlbjsNCisJY2FzZSBESENQX09QVF9VSU5UODoNCisJY2FzZSBESENQX09QVF9V SU5UMTY6DQorCWNhc2UgREhDUF9PUFRfVUlOVDMyOg0KKwljYXNlIERIQ1BfT1BUX0lOVDMyOg0K KwkJaWYgKHR5cGUgPT0gREhDUF9PUFRfVUlOVDgpDQorCQkJd2lkdGggPSAxOw0KKwkJZWxzZSBp ZiAodHlwZSA9PSBESENQX09QVF9VSU5UMTYpDQorCQkJd2lkdGggPSAyOw0KKwkJZWxzZQ0KKwkJ CXdpZHRoID0gNDsNCisNCisJCWlmIChidWZfbGVuIDwgd2lkdGgpDQorCQkJcmV0dXJuIC0xOw0K Kw0KKwkJZXJybm8gPSAwOw0KKwkJaWYgKHR5cGUgPT0gREhDUF9PUFRfSU5UMzIpIHsNCisJCQls b25nIHN2YWw7DQorDQorCQkJc3ZhbCA9IHN0cnRvbChzdHIsICZlbmQsIDApOw0KKwkJCWlmICgq ZW5kIHx8IGVycm5vIHx8DQorCQkJICAgIHN2YWwgPCBJTlQzMl9NSU4gfHwgc3ZhbCA+IElOVDMy X01BWCkNCisJCQkJcmV0dXJuIC0xOw0KKwkJCXZhbCA9ICh1aW50MzJfdClzdmFsOw0KKwkJfSBl bHNlIHsNCisJCQl2YWwgPSBzdHJ0b3VsKHN0ciwgJmVuZCwgMCk7DQorCQkJaWYgKCplbmQgfHwg ZXJybm8gfHwNCisJCQkgICAgdmFsID49ICgxVUxMIDw8ICh3aWR0aCAqIDgpKSkNCisJCQkJcmV0 dXJuIC0xOw0KKwkJfQ0KKw0KKwkJZm9yIChpID0gd2lkdGg7IGkgPiAwOyBpLS0pIHsNCisJCQli dWZbaSAtIDFdID0gdmFsICYgMHhmZjsNCisJCQl2YWwgPj49IDg7DQorCQl9DQorDQorCQlyZXR1 cm4gd2lkdGg7DQorCWNhc2UgREhDUF9PUFRfU1RSOg0KKwkJc2xlbiA9IHN0cmxlbihzdHIpOw0K Kw0KKwkJaWYgKHNsZW4gPj0gYnVmX2xlbikNCisJCQlyZXR1cm4gLTE7DQorDQorCQltZW1jcHko YnVmLCBzdHIsIHNsZW4pOw0KKw0KKwkJcmV0dXJuIHNsZW47DQorCX0NCisNCisJcmV0dXJuIC0x Ow0KK30NCisNCisvKioNCisgKiBkaGNwX3NldF9vcHQoKSAtIFBhcnNlIGFuZCBzdG9yZSBhIHVz ZXItc3BlY2lmaWVkIERIQ1Agb3B0aW9uDQorICogQGNvZGU6CURIQ1Agb3B0aW9uIGNvZGUNCisg KiBAdmFsX3N0cjoJVmFsdWUgc3RyaW5nIGZyb20gY29tbWFuZCBsaW5lDQorICovDQordm9pZCBk aGNwX3NldF9vcHQodWludDhfdCBjb2RlLCBjb25zdCBjaGFyICp2YWxfc3RyKQ0KK3sNCisJaW50 IHJldDsNCisNCisJcmV0ID0gZGhjcF9vcHRfcGFyc2UoY29kZSwgdmFsX3N0ciwgb3B0c1tjb2Rl XS5zLCBzaXplb2Yob3B0c1tjb2RlXS5zKSk7DQorCWlmIChyZXQgPCAwKQ0KKwkJZGllKCJJbnZh bGlkIHZhbHVlIGZvciBESENQIG9wdGlvbiAldTogJXMiLCBjb2RlLCB2YWxfc3RyKTsNCisNCisJ b3B0c1tjb2RlXS5zbGVuID0gcmV0Ow0KKwlvcHRzW2NvZGVdLnN0YXRlID0gT1BUX1VTRVI7DQor fQ0KKw0KKy8qKg0KKyAqIGRoY3Bfb3B0X3RvX3N0cigpIC0gUmVuZGVyIGEgYmluYXJ5IERIQ1Ag b3B0aW9uIHZhbHVlIHRvIGEgcHJpbnRhYmxlIHN0cmluZw0KKyAqIEBjb2RlOglESENQIG9wdGlv biBjb2RlDQorICogQGJ1ZjoJT3V0cHV0IHN0cmluZyBidWZmZXINCisgKiBAYnVmX2xlbjoJU2l6 ZSBvZiBvdXRwdXQgYnVmZmVyDQorICoNCisgKiBSZXR1cm46IHBvaW50ZXIgdG8gQGJ1ZiBpZiBv cHRpb24gaXMgdXNlci1zZXQsIE5VTEwgb3RoZXJ3aXNlDQorICovDQorY29uc3QgY2hhciAqZGhj cF9vcHRfdG9fc3RyKHVpbnQ4X3QgY29kZSwgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbikNCit7 DQorCWVudW0gZGhjcF9vcHRfdHlwZSB0eXBlOw0KKwlpbnQgb2ZmID0gMDsNCisJdW5zaWduZWQg aW50IGk7DQorDQorCWlmIChvcHRzW2NvZGVdLnN0YXRlICE9IE9QVF9VU0VSIHx8IG9wdHNbY29k ZV0uc2xlbiA8IDApDQorCQlyZXR1cm4gTlVMTDsNCisNCisJaWYgKGNvZGUgPj0gQVJSQVlfU0la RShkaGNwX29wdF90eXBlcykpDQorCQlyZXR1cm4gTlVMTDsNCisNCisJdHlwZSA9IGRoY3Bfb3B0 X3R5cGVzW2NvZGVdOw0KKw0KKwlzd2l0Y2ggKHR5cGUpIHsNCisJY2FzZSBESENQX09QVF9JUFY0 Og0KKwljYXNlIERIQ1BfT1BUX0lQVjRfTElTVDoNCisJCWZvciAoaSA9IDA7IGkgKyA0IDw9ICh1 bnNpZ25lZCBpbnQpb3B0c1tjb2RlXS5zbGVuOyBpICs9IDQpIHsNCisJCQlpZiAob2ZmKQ0KKwkJ CQlvZmYgKz0gc25wcmludGYoYnVmICsgb2ZmLCBidWZfbGVuIC0gb2ZmLCAiLCIpOw0KKwkJCWlu ZXRfbnRvcChBRl9JTkVULCBvcHRzW2NvZGVdLnMgKyBpLA0KKwkJCQkgIGJ1ZiArIG9mZiwgYnVm X2xlbiAtIG9mZik7DQorCQkJb2ZmID0gc3RybGVuKGJ1Zik7DQorCQl9DQorCQlyZXR1cm4gYnVm Ow0KKwljYXNlIERIQ1BfT1BUX1VJTlQ4Og0KKwkJaWYgKHNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwg IiV1IiwNCisJCQkgICAgIG9wdHNbY29kZV0uc1swXSkgPj0gKGludClidWZfbGVuKQ0KKwkJCXJl dHVybiBOVUxMOw0KKwkJcmV0dXJuIGJ1ZjsNCisJY2FzZSBESENQX09QVF9VSU5UMTY6DQorCQlp ZiAoc25wcmludGYoYnVmLCBidWZfbGVuLCAiJXUiLA0KKwkJCSAgICAgKCh1bnNpZ25lZClvcHRz W2NvZGVdLnNbMF0gPDwgOCkgfA0KKwkJCSAgICAgIG9wdHNbY29kZV0uc1sxXSkgPj0gKGludCli dWZfbGVuKQ0KKwkJCXJldHVybiBOVUxMOw0KKwkJcmV0dXJuIGJ1ZjsNCisJY2FzZSBESENQX09Q VF9VSU5UMzI6DQorCQlpZiAoc25wcmludGYoYnVmLCBidWZfbGVuLCAiJXUiLA0KKwkJCSAgICAg KCh1bnNpZ25lZClvcHRzW2NvZGVdLnNbMF0gPDwgMjQpIHwNCisJCQkgICAgICgodW5zaWduZWQp b3B0c1tjb2RlXS5zWzFdIDw8IDE2KSB8DQorCQkJICAgICAoKHVuc2lnbmVkKW9wdHNbY29kZV0u c1syXSA8PCA4KSAgfA0KKwkJCSAgICAgIG9wdHNbY29kZV0uc1szXSkgPj0gKGludClidWZfbGVu KQ0KKwkJCXJldHVybiBOVUxMOw0KKwkJcmV0dXJuIGJ1ZjsNCisJY2FzZSBESENQX09QVF9JTlQz MjoNCisJCWlmIChzbnByaW50ZihidWYsIGJ1Zl9sZW4sICIlZCIsDQorCQkJICAgICAoaW50KSgo KHVuc2lnbmVkKW9wdHNbY29kZV0uc1swXSA8PCAyNCkgfA0KKwkJCQkgICAoKHVuc2lnbmVkKW9w dHNbY29kZV0uc1sxXSA8PCAxNikgfA0KKwkJCQkgICAoKHVuc2lnbmVkKW9wdHNbY29kZV0uc1sy XSA8PCA4KSAgfA0KKwkJCQkgICAgb3B0c1tjb2RlXS5zWzNdKSkgPj0gKGludClidWZfbGVuKQ0K KwkJCXJldHVybiBOVUxMOw0KKwkJcmV0dXJuIGJ1ZjsNCisJY2FzZSBESENQX09QVF9TVFI6DQor CQlpZiAoKHNpemVfdClvcHRzW2NvZGVdLnNsZW4gPCBidWZfbGVuKSB7DQorCQkJbWVtY3B5KGJ1 Ziwgb3B0c1tjb2RlXS5zLCBvcHRzW2NvZGVdLnNsZW4pOw0KKwkJCWJ1ZltvcHRzW2NvZGVdLnNs ZW5dID0gJ1wwJzsNCisJCX0gZWxzZSB7DQorCQkJbWVtY3B5KGJ1Ziwgb3B0c1tjb2RlXS5zLCBi dWZfbGVuIC0gMSk7DQorCQkJYnVmW2J1Zl9sZW4gLSAxXSA9ICdcMCc7DQorCQl9DQorCQlyZXR1 cm4gYnVmOw0KKwlkZWZhdWx0Og0KKwkJcmV0dXJuIE5VTEw7DQorCX0NCit9DQorDQogLyoqDQog ICogZmlsbF9vbmUoKSAtIEZpbGwgYSBzaW5nbGUgb3B0aW9uIGludG8gYSBidWZmZXINCiAgKiBA YnVmOglCdWZmZXIgdG8gd3JpdGUgb3B0aW9uDQpAQCAtNDgyLDE0ICs3NjAsMTkgQEAgaW50IGRo Y3AoY29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IGlvdl90YWlsICpkYXRhKQ0KIAlpbmZvKCIg ICAgZnJvbSAlcyIsIGV0aF9udG9wKG0tPmNoYWRkciwgbWFjc3RyLCBzaXplb2YobWFjc3RyKSkp Ow0KIA0KIAltYXNrLnNfYWRkciA9IGh0b25sKDB4ZmZmZmZmZmYgPDwgKDMyIC0gYy0+aXA0LnBy ZWZpeF9sZW4pKTsNCi0JbWVtY3B5KG9wdHNbMV0ucywgICZtYXNrLCAgICAgICAgICAgICAgICBz aXplb2YobWFzaykpOw0KLQltZW1jcHkob3B0c1szXS5zLCAgJmMtPmlwNC5ndWVzdF9ndywgICAg IHNpemVvZihjLT5pcDQuZ3Vlc3RfZ3cpKTsNCi0JbWVtY3B5KG9wdHNbNTRdLnMsICZjLT5pcDQu b3VyX3RhcF9hZGRyLCBzaXplb2YoYy0+aXA0Lm91cl90YXBfYWRkcikpOw0KKwlpZiAob3B0c1sx XS5zdGF0ZSAhPSBPUFRfVVNFUikNCisJCW1lbWNweShvcHRzWzFdLnMsICZtYXNrLCBzaXplb2Yo bWFzaykpOw0KKwlpZiAob3B0c1szXS5zdGF0ZSAhPSBPUFRfVVNFUikNCisJCW1lbWNweShvcHRz WzNdLnMsICZjLT5pcDQuZ3Vlc3RfZ3csIHNpemVvZihjLT5pcDQuZ3Vlc3RfZ3cpKTsNCisJaWYg KG9wdHNbNTRdLnN0YXRlICE9IE9QVF9VU0VSKQ0KKwkJbWVtY3B5KG9wdHNbNTRdLnMsICZjLT5p cDQub3VyX3RhcF9hZGRyLA0KKwkJICAgICAgIHNpemVvZihjLT5pcDQub3VyX3RhcF9hZGRyKSk7 DQogDQogCS8qIElmIHRoZSBnYXRld2F5IGlzIG5vdCBvbiB0aGUgYXNzaWduZWQgc3VibmV0LCBz ZW5kIGFuIG9wdGlvbiAxMjENCiAJICogKENsYXNzbGVzcyBTdGF0aWMgUm91dGluZykgYWRkaW5n IGEgZHVtbXkgcm91dGUgdG8gaXQuDQogCSAqLw0KLQlpZiAoKGMtPmlwNC5hZGRyLnNfYWRkciAm IG1hc2suc19hZGRyKQ0KKwlpZiAob3B0c1sxMjFdLnN0YXRlICE9IE9QVF9VU0VSICYmDQorCSAg ICAoYy0+aXA0LmFkZHIuc19hZGRyICYgbWFzay5zX2FkZHIpDQogCSAgICAhPSAoYy0+aXA0Lmd1 ZXN0X2d3LnNfYWRkciAmIG1hc2suc19hZGRyKSkgew0KIAkJLyogYS5iLmMuZC8zMjowLjAuMC4w LCAwOmEuYi5jLmQgKi8NCiAJCW9wdHNbMTIxXS5zbGVuID0gMTQ7DQpAQCAtNTAxLDI3ICs3ODQs MzIgQEAgaW50IGRoY3AoY29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IGlvdl90YWlsICpkYXRh KQ0KIAkJICAgICAgICZjLT5pcDQuZ3Vlc3RfZ3csIHNpemVvZihjLT5pcDQuZ3Vlc3RfZ3cpKTsN CiAJfQ0KIA0KLQlpZiAoYy0+bXR1KSB7DQorCWlmIChvcHRzWzI2XS5zdGF0ZSAhPSBPUFRfVVNF UiAmJiBjLT5tdHUpIHsNCiAJCW9wdHNbMjZdLnNsZW4gPSAyOw0KIAkJb3B0c1syNl0uc3RhdGUg PSBPUFRfREVGQVVMVDsNCiAJCW9wdHNbMjZdLnNbMF0gPSBjLT5tdHUgLyAyNTY7DQogCQlvcHRz WzI2XS5zWzFdID0gYy0+bXR1ICUgMjU2Ow0KIAl9DQogDQotCWZvciAoaSA9IDAsIG9wdHNbNl0u c2xlbiA9IDA7DQotCSAgICAgIWMtPm5vX2RoY3BfZG5zICYmIGkgPCBBUlJBWV9TSVpFKGMtPmlw NC5kbnMpOyBpKyspIHsNCi0JCWlmIChJTjRfSVNfQUREUl9VTlNQRUNJRklFRCgmYy0+aXA0LmRu c1tpXSkpDQotCQkJYnJlYWs7DQotCQkoKHN0cnVjdCBpbl9hZGRyICopb3B0c1s2XS5zKVtpXSA9 IGMtPmlwNC5kbnNbaV07DQotCQlvcHRzWzZdLnNsZW4gKz0gc2l6ZW9mKHVpbnQzMl90KTsNCisJ aWYgKG9wdHNbNl0uc3RhdGUgIT0gT1BUX1VTRVIpIHsNCisJCWZvciAoaSA9IDAsIG9wdHNbNl0u c2xlbiA9IDA7DQorCQkgICAgICFjLT5ub19kaGNwX2RucyAmJiBpIDwgQVJSQVlfU0laRShjLT5p cDQuZG5zKTsgaSsrKSB7DQorCQkJaWYgKElONF9JU19BRERSX1VOU1BFQ0lGSUVEKCZjLT5pcDQu ZG5zW2ldKSkNCisJCQkJYnJlYWs7DQorCQkJKChzdHJ1Y3QgaW5fYWRkciAqKW9wdHNbNl0ucylb aV0gPSBjLT5pcDQuZG5zW2ldOw0KKwkJCW9wdHNbNl0uc2xlbiArPSBzaXplb2YodWludDMyX3Qp Ow0KKwkJfQ0KKwkJaWYgKCFvcHRzWzZdLnNsZW4pDQorCQkJb3B0c1s2XS5zbGVuID0gLTE7DQog CX0NCisNCiAJaWYgKG9wdHNbNl0uc2xlbikNCiAJCW9wdHNbNl0uc3RhdGUgPSBPUFRfREVGQVVM VDsNCiAJZWxzZQ0KIAkJb3B0c1s2XS5zdGF0ZSA9IE9QVF9VTlNFVDsNCiANCiAJb3B0X2xlbiA9 IHN0cmxlbihjLT5ob3N0bmFtZSk7DQotCWlmIChvcHRfbGVuID4gMCkgew0KKwlpZiAob3B0c1sx Ml0uc3RhdGUgIT0gT1BUX1VTRVIgJiYgb3B0X2xlbiA+IDApIHsNCiAJCW9wdHNbMTJdLnNsZW4g PSBvcHRfbGVuOw0KIAkJb3B0c1sxMl0uc3RhdGUgPSBPUFRfREVGQVVMVDsNCiAJCW1lbWNweShv cHRzWzEyXS5zLCAmYy0+aG9zdG5hbWUsIG9wdF9sZW4pOw0KZGlmZiAtLWdpdCBhL2RoY3AuaCBi L2RoY3AuaA0KaW5kZXggY2Q1MGM5OS4uODBhYmRhNiAxMDA2NDQNCi0tLSBhL2RoY3AuaA0KKysr IGIvZGhjcC5oDQpAQCAtOCw1ICs4LDcgQEANCiANCiBpbnQgZGhjcChjb25zdCBzdHJ1Y3QgY3R4 ICpjLCBzdHJ1Y3QgaW92X3RhaWwgKmRhdGEpOw0KIHZvaWQgZGhjcF9pbml0KHZvaWQpOw0KK3Zv aWQgZGhjcF9zZXRfb3B0KHVpbnQ4X3QgY29kZSwgY29uc3QgY2hhciAqdmFsX3N0cik7DQorY29u c3QgY2hhciAqZGhjcF9vcHRfdG9fc3RyKHVpbnQ4X3QgY29kZSwgY2hhciAqYnVmLCBzaXplX3Qg YnVmX2xlbik7DQogDQogI2VuZGlmIC8qIERIQ1BfSCAqLw0KZGlmZiAtLWdpdCBhL3Bhc3N0LjEg Yi9wYXNzdC4xDQppbmRleCA5OTU1OTBhLi4yMTVhMjg5IDEwMDY0NA0KLS0tIGEvcGFzc3QuMQ0K KysrIGIvcGFzc3QuMQ0KQEAgLTQ0MCw2ICs0NDAsNDggQEAgU2VuZCBcZkluYW1lXGZSIGFzIERI Q1Agb3B0aW9uIDEyIChob3N0bmFtZSkuDQogRlFETiB0byBjb25maWd1cmUgdGhlIGNsaWVudCB3 aXRoLg0KIFNlbmQgXGZJbmFtZVxmUiBhcyBDbGllbnQgRlFETjogREhDUCBvcHRpb24gODEgYW5k IERIQ1B2NiBvcHRpb24gMzkuDQogDQorLlRQDQorLkJSIFwtXC1kaGNwLW9wdCAiICIgXGZJQ09E RVxmUixcZklWQUxVRVxmUg0KK1NldCBESENQIG9wdGlvbiBcZklDT0RFXGZSICgxXC0yNTQpIHRv IFxmSVZBTFVFXGZSLiBUaGUgdmFsdWUgZm9ybWF0IGRlcGVuZHMNCitvbiB0aGUgb3B0aW9uIHR5 cGUgYW5kIGlzIGRldGVybWluZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcHRpb24gY29kZS4N CitNdWx0aXBsZSBJUHY0IGFkZHJlc3NlcyBhcmUgY29tbWEtc2VwYXJhdGVkLg0KK1RoaXMgb3B0 aW9uIGNhbiBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuIElmIHRoZSBzYW1lIG9wdGlvbiBj b2RlIGlzDQorZ2l2ZW4gbW9yZSB0aGFuIG9uY2UsIHRoZSBsYXN0IHZhbHVlIHdpbnMuIE9wdGlv bnMgc2V0IHdpdGgNCitcZkJcLVwtZGhjcC1vcHRcZlIgb3ZlcnJpZGUgYnVpbHQtaW4gdmFsdWVz Lg0KKy5QUA0KK0V4YW1wbGVzOg0KKy5uZg0KKyAgXC1cLWRoY3Atb3B0IDYsOC44LjguOCw0LjQu NC40DQorICBcLVwtZGhjcC1vcHQgMTIsbXlob3N0bmFtZQ0KKy5maQ0KKy5QUA0KK09ubHkgdGhl IGZvbGxvd2luZyBvcHRpb24gY29kZXMgYXJlIHN1cHBvcnRlZCAodW5zdXBwb3J0ZWQgY29kZXMg Y2F1c2UgYW4gZXJyb3IpOg0KKy5SUw0KKy5UUA0KKy5CIElQdjQgYWRkcmVzcyBvcHRpb25zDQor MSAoU3VibmV0IE1hc2spLCAxNiAoU3dhcCBTZXJ2ZXIpLCAyOCAoQnJvYWRjYXN0IEFkZHJlc3Mp LCA1MCAoUmVxdWVzdGVkIElQKSwNCis1NCAoU2VydmVyIElkZW50aWZpZXIpDQorLlRQDQorLkIg SVB2NCBhZGRyZXNzIGxpc3Qgb3B0aW9ucyAoY29tbWEtc2VwYXJhdGVkKQ0KKzMgKFJvdXRlciks IDQgKFRpbWUgU2VydmVyKSwgNSAoTmFtZSBTZXJ2ZXIpLCA2IChETlMpLCA3IChMb2cgU2VydmVy KSwNCis4IChDb29raWUgU2VydmVyKSwgOSAoTFBSIFNlcnZlciksIDEwIChJbXByZXNzIFNlcnZl ciksDQorMTEgKFJlc291cmNlIExvY2F0aW9uIFNlcnZlciksIDQxIChOSVMgU2VydmVycyksDQor NDIgKE5UUCBTZXJ2ZXJzKSwgNDQgKE5ldEJJT1MgTmFtZSBTZXJ2ZXIpDQorLlRQDQorLkIgSW50 ZWdlciBvcHRpb25zDQorMiAoVGltZSBPZmZzZXQsIDMyLWJpdCksIDEzIChCb290IEZpbGUgU2l6 ZSwgMTYtYml0KSwgMTkgKElQIEZvcndhcmRpbmcsIDgtYml0KSwNCisyMyAoRGVmYXVsdCBJUCBU VEwsIDgtYml0KSwgMjYgKEludGVyZmFjZSBNVFUsIDE2LWJpdCksDQorMzcgKFRDUCBEZWZhdWx0 IFRUTCwgOC1iaXQpLCAzOCAoVENQIEtlZXBhbGl2ZSBJbnRlcnZhbCwgMzItYml0KSwNCis1MSAo SVAgQWRkcmVzcyBMZWFzZSBUaW1lLCAzMi1iaXQpLA0KKzUzIChESENQIE1lc3NhZ2UgVHlwZSwg OC1iaXQpLCA1NyAoTWF4IERIQ1AgTWVzc2FnZSBTaXplLCAxNi1iaXQpLA0KKzU4IChSZW5ld2Fs IFRpbWUsIDMyLWJpdCksIDU5IChSZWJpbmRpbmcgVGltZSwgMzItYml0KQ0KKy5UUA0KKy5CIFN0 cmluZyBvcHRpb25zDQorMTIgKEhvc3QgTmFtZSksIDE1IChEb21haW4gTmFtZSksIDE3IChSb290 IFBhdGgpLCA0MCAoTklTIERvbWFpbiBOYW1lKSwNCis2MCAoVmVuZG9yIENsYXNzIElkZW50aWZp ZXIpLCA2NiAoVEZUUCBTZXJ2ZXIgTmFtZSksDQorNjcgKEJvb3RmaWxlIE5hbWUpLCAyNTIgKFdQ QUQgVVJMKQ0KKy5SRQ0KKw0KIC5UUA0KIC5CUiBcLXQgIiwgIiBcLVwtdGNwLXBvcnRzICIgIiBc ZklzcGVjDQogQ29uZmlndXJlIFRDUCBwb3J0IGZvcndhcmRpbmcgdG8gZ3Vlc3Qgb3IgbmFtZXNw YWNlLiBcZklzcGVjXGZSIGNhbiBiZSBlaXRoZXI6DQotLSANCjIuNTQuMA0KDQo=