From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mailout08.t-online.de (mailout08.t-online.de [194.25.134.20]) by sourceware.org (Postfix) with ESMTPS id 33C04385B522 for ; Tue, 3 Oct 2023 12:39:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 33C04385B522 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=t-online.de Authentication-Results: sourceware.org; spf=none smtp.mailfrom=t-online.de Received: from fwd88.aul.t-online.de (fwd88.aul.t-online.de [10.223.144.114]) by mailout08.t-online.de (Postfix) with SMTP id E9A0D1C35A for ; Tue, 3 Oct 2023 14:39:54 +0200 (CEST) Received: from [192.168.2.101] ([79.230.168.216]) by fwd88.t-online.de with (TLSv1.3:TLS_AES_256_GCM_SHA384 encrypted) esmtp id 1qnego-1p8ncu0; Tue, 3 Oct 2023 14:39:50 +0200 Subject: Re: [PATCH] Cygwin: Add /dev/disk/by-id symlinks From: Christian Franke To: cygwin-patches@cygwin.com References: <9cf93e3b-36c8-a50c-0154-85f06da29d61@t-online.de> Message-ID: <9fd70b83-2364-1e02-555f-dc7b24feff9c@t-online.de> Date: Tue, 3 Oct 2023 14:39:49 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 SeaMonkey/2.53.16 MIME-Version: 1.0 In-Reply-To: <9cf93e3b-36c8-a50c-0154-85f06da29d61@t-online.de> Content-Type: multipart/mixed; boundary="------------FE0D96C3EAB5133C00C14124" X-TOI-EXPURGATEID: 150726::1696336790-EE7FBDD2-F9223FAA/0/0 CLEAN NORMAL X-TOI-MSGID: 8660ab3c-8c10-4d7e-8c25-01c7b76adabe X-Spam-Status: No, score=-11.1 required=5.0 tests=BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,KAM_DMARC_STATUS,KAM_LAZY_DOMAIN_SECURITY,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------FE0D96C3EAB5133C00C14124 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Christian Franke wrote: > This is a first attempt to partly emulate the Linux directory > /dev/disk/by-id. Useful to make sure the correct device is accessed in > conjunction with dd, ddrescue, fdisk, .... Attached is the second attempt. > The additional '*-partN' links to partitions are not yet included. These are now included. > This only works properly if Win32 path '\\.\PhysicalDriveN' is always > trivially mapped to NT path '\Device\HarddiskN\Partition0'. > IOCTL_STORAGE_QUERY_PROPERTY with a handle from NtOpenFile(., > READ_CONTROL,...) instead of CreateFile(., 0, ...) did not work with > all drivers. With stornvme.sys, it fails with permission denied. > Perhaps other permission bits are required for NtOpenFile(). Thanks > for any info regarding this. According to NtQueryObject(., ObjectBasicInformation, ...), using NtOpenFile(., MAXIMUM_ALLOWED, ...) without admin rights sets GrantedAccess to 0x001200a0 (FILE_EXECUTE|FILE_READ_ATTRIBUTES|READ_CONTROL|SYNCHRONIZE). For some unknown reason, NVMe drives behind stornvme.sys additionally require SYNCHRONIZE to use IOCTL_STORAGE_QUERY_PROPERTY. Possibly a harmless bug in the access check somewhere in the NVMe stack. The disk scanning from the first patch has been reworked based on code borrowed from proc.cc:format_proc_partitions(). For the longer term, it may make sense to provide one flexible scanning function for /dev/sdXN, /proc/partitions and /proc/disk/by-id. > Note that the BusType information is often not accurate. For example > drives behind Intel RST drivers may always be listed as > "raid-PRODUCT_SERIAL" even if not part of a RAID volume. > > The changes for the generated file devices.cc are not included in the > patch. -- Regards, Christian --------------FE0D96C3EAB5133C00C14124 Content-Type: text/plain; charset=UTF-8; name="0001-Cygwin-Add-dev-disk-by-id-symlinks.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-Cygwin-Add-dev-disk-by-id-symlinks.patch" RnJvbSBiYTE5OTBhNDNiNzU4NWY4OGE5MzY5ZjVkYjBiZGM1NmQ2ZTkxM2JmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBDaHJpc3RpYW4gRnJhbmtlIDxjaHJpc3RpYW4uZnJh bmtlQHQtb25saW5lLmRlPgpEYXRlOiBUdWUsIDMgT2N0IDIwMjMgMTQ6MTU6MTIgKzAyMDAK U3ViamVjdDogW1BBVENIXSBDeWd3aW46IEFkZCAvZGV2L2Rpc2svYnktaWQgc3ltbGlua3MK ClRoZSBuZXcgZGlyZWN0b3J5ICcvZGV2L2Rpc2svYnktaWQnIHByb3ZpZGVzIHN5bWxpbmtz IGZvciBlYWNoCmRpc2sgYW5kIGl0cyBwYXJ0aXRpb25zOgonQlVTVFlQRS1bVkVORE9SX11Q Uk9EVUNUX1NFUklBTFstcGFydE5dJyAtPiAnLi4vLi4vc2RYW05dJy4KSU9DVExfU1RPUkFH RV9RVUVSWV9QUk9QRVJUWSBpcyB1c2VkIHRvIGZldGNoIGJ1cyB0eXBlLCB2ZW5kb3IsCnBy b2R1Y3QgYW5kIHNlcmlhbCBudW1iZXIgaW5mb3JtYXRpb24uICBBZG1pbmlzdHJhdG9yIHBy aXZpbGVnZXMKYXJlIG5vdCByZXF1aXJlZC4KClNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBG cmFua2UgPGNocmlzdGlhbi5mcmFua2VAdC1vbmxpbmUuZGU+Ci0tLQogd2luc3VwL2N5Z3dp bi9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgIHwgICAxICsKIHdpbnN1cC9jeWd3aW4vZGV2 aWNlcy5pbiAgICAgICAgICAgICAgICB8ICAgNCArCiB3aW5zdXAvY3lnd2luL2R0YWJsZS5j YyAgICAgICAgICAgICAgICAgfCAgIDMgKwogd2luc3VwL2N5Z3dpbi9maGFuZGxlci9kZXZf ZGlzay5jYyAgICAgIHwgNTg5ICsrKysrKysrKysrKysrKysrKysrKysrKwogd2luc3VwL2N5 Z3dpbi9sb2NhbF9pbmNsdWRlcy9kZXZpY2VzLmggIHwgICA2ICstCiB3aW5zdXAvY3lnd2lu L2xvY2FsX2luY2x1ZGVzL2ZoYW5kbGVyLmggfCAgNDcgKysKIHdpbnN1cC9jeWd3aW4vbW91 bnQuY2MgICAgICAgICAgICAgICAgICB8ICAxMCArCiA3IGZpbGVzIGNoYW5nZWQsIDY1OSBp bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgd2luc3Vw L2N5Z3dpbi9maGFuZGxlci9kZXZfZGlzay5jYwoKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3 aW4vTWFrZWZpbGUuYW0gYi93aW5zdXAvY3lnd2luL01ha2VmaWxlLmFtCmluZGV4IDY0YjI1 MmEyMi4uMzc2Yzc5ZmMzIDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL01ha2VmaWxlLmFt CisrKyBiL3dpbnN1cC9jeWd3aW4vTWFrZWZpbGUuYW0KQEAgLTg0LDYgKzg0LDcgQEAgRkhB TkRMRVJfRklMRVM9IFwKIAlmaGFuZGxlci9jb25zb2xlLmNjIFwKIAlmaGFuZGxlci9jeWdk cml2ZS5jYyBcCiAJZmhhbmRsZXIvZGV2LmNjIFwKKwlmaGFuZGxlci9kZXZfZGlzay5jYyBc CiAJZmhhbmRsZXIvZGV2X2ZkLmNjIFwKIAlmaGFuZGxlci9kaXNrX2ZpbGUuY2MgXAogCWZo YW5kbGVyL2RzcC5jYyBcCmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL2RldmljZXMuaW4g Yi93aW5zdXAvY3lnd2luL2RldmljZXMuaW4KaW5kZXggMjU0NWRkODVlLi40OGQzODQzZmUg MTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vZGV2aWNlcy5pbgorKysgYi93aW5zdXAvY3ln d2luL2RldmljZXMuaW4KQEAgLTExNSw2ICsxMTUsOSBAQCBjb25zdCBfZGV2aWNlIGRldl9j eWdkcml2ZV9zdG9yYWdlID0KIGNvbnN0IF9kZXZpY2UgZGV2X2ZzX3N0b3JhZ2UgPQogICB7 IiIsIHtGSF9GU30sICIiLCBleGlzdHN9OwogCitjb25zdCBfZGV2aWNlIGRldl9kZXZfZGlz a19zdG9yYWdlID0KKyAgeyIiLCB7RkhfREVWX0RJU0t9LCAiIiwgZXhpc3RzfTsKKwogY29u c3QgX2RldmljZSBkZXZfcHJvY19zdG9yYWdlID0KICAgeyIiLCB7RkhfUFJPQ30sICIiLCBl eGlzdHN9OwogCkBAIC0xNzMsNiArMTc2LDcgQEAgY29uc3QgX2RldmljZSBkZXZfZXJyb3Jf c3RvcmFnZSA9CiAgICB0aGUgUE9TSVggbmFtZXNwYWNlLiAgKi8KICUlCiAiL2RldiIsIEJS QUNLKEZIX0RFViksICIiLCBleGlzdHMsIFNfSUZESVIKKyIvZGV2L2Rpc2siLCBCUkFDSyhG SF9ERVZfRElTSyksICIiLCBleGlzdHMsIFNfSUZESVIKICIvZGV2L3R0eSIsIEJSQUNLKEZI X1RUWSksICIvZGV2L3R0eSIsIGV4aXN0cywgU19JRkNIUgogIi9kZXYvcHR5JSgwLTEyNylk IiwgQlJBQ0soRkhERVYoREVWX1BUWVNfTUFKT1IsIHskMX0pKSwgIi9kZXYvcHR5eyQxfSIs IGV4aXN0c19wdHksIFNfSUZDSFIsID1wdHlzX2RldgogIjpwdHltJSgwLTEyNylkIiwgQlJB Q0soRkhERVYoREVWX1BUWU1fTUFKT1IsIHskMX0pKSwgIi9kZXYvcHR5bXskMX0iLCBleGlz dHNfaW50ZXJuYWwsIFNfSUZDSFIsID1wdHltX2RldgpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5 Z3dpbi9kdGFibGUuY2MgYi93aW5zdXAvY3lnd2luL2R0YWJsZS5jYwppbmRleCAyMWQ1MjUz ODkuLjk1MDhmM2UwYiAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9kdGFibGUuY2MKKysr IGIvd2luc3VwL2N5Z3dpbi9kdGFibGUuY2MKQEAgLTU4NSw2ICs1ODUsOSBAQCBmaF9hbGxv YyAocGF0aF9jb252JiBwYykKIAljYXNlIEZIX0RFVjoKIAkgIGZoID0gY25ldyAoZmhhbmRs ZXJfZGV2KTsKIAkgIGJyZWFrOworCWNhc2UgRkhfREVWX0RJU0s6CisJICBmaCA9IGNuZXcg KGZoYW5kbGVyX2Rldl9kaXNrKTsKKwkgIGJyZWFrOwogCWNhc2UgRkhfREVWX0ZEOgogCSAg ZmggPSBjbmV3IChmaGFuZGxlcl9kZXZfZmQpOwogCSAgYnJlYWs7CmRpZmYgLS1naXQgYS93 aW5zdXAvY3lnd2luL2ZoYW5kbGVyL2Rldl9kaXNrLmNjIGIvd2luc3VwL2N5Z3dpbi9maGFu ZGxlci9kZXZfZGlzay5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAu LmNhY2E1N2Q2MwotLS0gL2Rldi9udWxsCisrKyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXIv ZGV2X2Rpc2suY2MKQEAgLTAsMCArMSw1ODkgQEAKKy8qIGZoYW5kbGVyL2Rldl9kaXNrLmNj OiBmaGFuZGxlciBmb3IgdGhlIC9kZXYvZGlzay9ieS1pZC8uLi4gc3ltbGlua3MuCisKK1Ro aXMgZmlsZSBpcyBwYXJ0IG9mIEN5Z3dpbi4KKworVGhpcyBzb2Z0d2FyZSBpcyBhIGNvcHly aWdodGVkIHdvcmsgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorQ3lnd2luIGxp Y2Vuc2UuICBQbGVhc2UgY29uc3VsdCB0aGUgZmlsZSAiQ1lHV0lOX0xJQ0VOU0UiIGZvcgor ZGV0YWlscy4gKi8KKworI2luY2x1ZGUgIndpbnN1cC5oIgorI2luY2x1ZGUgInBhdGguaCIK KyNpbmNsdWRlICJmaGFuZGxlci5oIgorI2luY2x1ZGUgInRsc19wYnVmLmgiCisjaW5jbHVk ZSA8d2N0eXBlLmg+CisjaW5jbHVkZSA8d2luaW9jdGwuaD4KKworLyogUmVwbGFjZSBub24t cHJpbnRpbmcgYW5kIHVuZXhwZWN0ZWQgY2hhcmFjdGVycywgcmVtb3ZlIHRyYWlsaW5nIHNw YWNlcywKKyAgIHJldHVybiByZW1haW5pbmcgc3RyaW5nIGxlbmd0aC4gKi8KK3N0YXRpYyBp bnQKK3Nhbml0aXplX2lkX3N0cmluZyAoY2hhciAqcykKK3sKKyAgaW50IGxhc3RzcGFjZSA9 IC0xLCBpOworICBmb3IgKGkgPSAwOyBzW2ldOyBpKyspCisgICAgeworICAgICAgY2hhciBj ID0gc1tpXTsKKyAgICAgIGlmIChjICE9ICcgJykKKwlsYXN0c3BhY2UgPSAtMTsKKyAgICAg IGVsc2UgaWYgKGxhc3RzcGFjZSA8IDApCisJbGFzdHNwYWNlID0gaTsKKyAgICAgIGlmICgo JzAnIDw9IGMgJiYgYyA8PSAnOScpIHx8IGMgPT0gJy4nIHx8IGMgPT0gJy0nCisJICB8fCAo J0EnIDw9IGMgJiYgYyA8PSAnWicpIHx8ICgnYScgPD0gYyAmJiBjIDw9ICd6JykpCisJY29u dGludWU7CisgICAgICBzW2ldID0gJ18nOworICAgIH0KKyAgaWYgKGxhc3RzcGFjZSA+PSAw KQorICAgIHNbKGkgPSBsYXN0c3BhY2UpXSA9ICdcMCc7CisgIHJldHVybiBpOworfQorCisv KiBHZXQgSUQgc3RyaW5nIGZyb20gU1RPUkFHRV9ERVZJQ0VfREVTQ1JJUFRJT1IuICovCitz dGF0aWMgYm9vbAorc3RvcmRlc2NfdG9faWRfbmFtZSAoY29uc3QgVU5JQ09ERV9TVFJJTkcg KnVwYXRoLCBjaGFyICppb2N0bF9idWYsCisJCSAgICBjaGFyICgmIG5hbWUpW05BTUVfTUFY ICsgMV0pCit7CisgIGNvbnN0IFNUT1JBR0VfREVWSUNFX0RFU0NSSVBUT1IgKmRlc2MgPQor ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgU1RPUkFHRV9ERVZJQ0VfREVTQ1JJUFRPUiAq Pihpb2N0bF9idWYpOworICAvKiBJZ25vcmUgZHJpdmUgaWYgaW5mb3JtYXRpb24gaXMgbWlz c2luZywgdG9vIHNob3J0IG9yIHRvbyBsb25nLiAqLworICBpbnQgdmVuZG9yX2xlbiA9IDAs IHByb2R1Y3RfbGVuID0gMCwgc2VyaWFsX2xlbiA9IDA7CisgIGlmIChkZXNjLT5WZW5kb3JJ ZE9mZnNldCkKKyAgICB2ZW5kb3JfbGVuID0gc2FuaXRpemVfaWRfc3RyaW5nIChpb2N0bF9i dWYgKyBkZXNjLT5WZW5kb3JJZE9mZnNldCk7CisgIGlmIChkZXNjLT5Qcm9kdWN0SWRPZmZz ZXQpCisgICAgcHJvZHVjdF9sZW4gPSBzYW5pdGl6ZV9pZF9zdHJpbmcgKGlvY3RsX2J1ZiAr IGRlc2MtPlByb2R1Y3RJZE9mZnNldCk7CisgIGlmIChkZXNjLT5TZXJpYWxOdW1iZXJPZmZz ZXQpCisgICAgc2VyaWFsX2xlbiA9IHNhbml0aXplX2lkX3N0cmluZyAoaW9jdGxfYnVmICsg ZGVzYy0+U2VyaWFsTnVtYmVyT2Zmc2V0KTsKKworICBib29sIHZhbGlkID0gKDQgPD0gdmVu ZG9yX2xlbiArIHByb2R1Y3RfbGVuICYmIDQgPD0gc2VyaWFsX2xlbgorCQkmJiAoMjAgKyB2 ZW5kb3JfbGVuICsgMSArIHByb2R1Y3RfbGVuICsgMSArIHNlcmlhbF9sZW4gKyAxMCkKKwkJ ICAgPCAoaW50KSBzaXplb2YgKG5hbWUpKTsKKyAgZGVidWdfcHJpbnRmICgiJVM6ICclcycg JyVzJyAnJXMnJXMiLCB1cGF0aCwKKwkJKHZlbmRvcl9sZW4gPyBpb2N0bF9idWYgKyBkZXNj LT5WZW5kb3JJZE9mZnNldCA6ICIiKSwKKwkJKHByb2R1Y3RfbGVuID8gaW9jdGxfYnVmICsg ZGVzYy0+UHJvZHVjdElkT2Zmc2V0IDogIiIpLAorCQkoc2VyaWFsX2xlbiA/IGlvY3RsX2J1 ZiArIGRlc2MtPlNlcmlhbE51bWJlck9mZnNldCA6ICIiKSwKKwkJKHZhbGlkID8gIiIgOiAi IChpZ25vcmVkKSIpKTsKKyAgaWYgKCF2YWxpZCkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAg LyogVHJhbnNsYXRlIGJ1cyB0eXBlcy4gKi8KKyAgY29uc3QgY2hhciAqYnVzOworICBzd2l0 Y2ggKGRlc2MtPkJ1c1R5cGUpCisgICAgeworICAgICAgY2FzZSBCdXNUeXBlQXRhOiAgICAg YnVzID0gImF0YS0iOyBicmVhazsKKyAgICAgIGNhc2UgQnVzVHlwZUZpYnJlOiAgIGJ1cyA9 ICJmaWJyZS0iOyBicmVhazsKKyAgICAgIGNhc2UgQnVzVHlwZU52bWU6ICAgIGJ1cyA9ICJu dm1lLSI7IGJyZWFrOworICAgICAgY2FzZSBCdXNUeXBlUkFJRDogICAgYnVzID0gInJhaWQt IjsgYnJlYWs7CisgICAgICBjYXNlIEJ1c1R5cGVTYXM6ICAgICBidXMgPSAic2FzLSI7IGJy ZWFrOworICAgICAgY2FzZSBCdXNUeXBlU2F0YTogICAgYnVzID0gInNhdGEtIjsgYnJlYWs7 CisgICAgICBjYXNlIEJ1c1R5cGVTY3NpOiAgICBidXMgPSAic2NzaS0iOyBicmVhazsKKyAg ICAgIGNhc2UgQnVzVHlwZVVzYjogICAgIGJ1cyA9ICJ1c2ItIjsgYnJlYWs7CisgICAgICBj YXNlIEJ1c1R5cGVWaXJ0dWFsOiBidXMgPSAidmlydHVhbC0iOyBicmVhazsKKyAgICAgIGRl ZmF1bHQ6IGJ1cyA9IG51bGxwdHI7IGJyZWFrOworICAgIH0KKyAgaWYgKGJ1cykKKyAgICBz dHJjcHkgKG5hbWUsIGJ1cyk7CisgIGVsc2UKKyAgICBfX3NtYWxsX3NwcmludGYgKG5hbWUs ICJidXN0eXBlMHglMDJ4LSIsIGRlc2MtPkJ1c1R5cGUpOworCisgIC8qIENyZWF0ZSAiQlVT VFlQRS1bVkVORE9SX11QUk9EVUNUX1NFUklBTCIgc3RyaW5nLiAqLworICBpZiAodmVuZG9y X2xlbikKKyAgICBzdHJjYXQgKG5hbWUsIGlvY3RsX2J1ZiArIGRlc2MtPlZlbmRvcklkT2Zm c2V0KTsKKyAgaWYgKHByb2R1Y3RfbGVuKQorICAgIHsKKyAgICAgIGlmICh2ZW5kb3JfbGVu KQorCXN0cmNhdCAobmFtZSwgIl8iKTsKKyAgICAgIHN0cmNhdCAobmFtZSwgaW9jdGxfYnVm ICsgZGVzYy0+UHJvZHVjdElkT2Zmc2V0KTsKKyAgICB9CisgIHN0cmNhdCAobmFtZSwgIl8i KTsKKyAgc3RyY2F0IChuYW1lLCBpb2N0bF9idWYgKyBkZXNjLT5TZXJpYWxOdW1iZXJPZmZz ZXQpOworICByZXR1cm4gdHJ1ZTsKK30KKworc3RydWN0IGJ5X2lkX2VudHJ5Cit7CisgIGNo YXIgbmFtZVtOQU1FX01BWCArIDFdOworICB1X2ludDhfdCBkcml2ZTsKKyAgdV9pbnQ4X3Qg cGFydDsKK307CisKK3N0YXRpYyBpbnQKK2J5X2lkX2NvbXBhcmVfbmFtZSAoY29uc3Qgdm9p ZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKyAgY29uc3QgYnlfaWRfZW50cnkgKmFwID0gcmVp bnRlcnByZXRfY2FzdDxjb25zdCBieV9pZF9lbnRyeSAqPihhKTsKKyAgY29uc3QgYnlfaWRf ZW50cnkgKmJwID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBieV9pZF9lbnRyeSAqPihiKTsK KyAgcmV0dXJuIHN0cmNtcCAoYXAtPm5hbWUsIGJwLT5uYW1lKTsKK30KKworc3RhdGljIGJ5 X2lkX2VudHJ5ICoKK2J5X2lkX3JlYWxsb2MgKGJ5X2lkX2VudHJ5ICpwLCBzaXplX3QgbikK K3sKKyAgdm9pZCAqcDIgPSByZWFsbG9jKHAsIG4gKiBzaXplb2YgKCpwKSk7CisgIGlmICgh cDIpCisgICAgeworICAgICAgZnJlZSAocCk7CisgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg ICB9CisgIHJldHVybiByZWludGVycHJldF9jYXN0PGJ5X2lkX2VudHJ5ICo+KHAyKTsKK30K KworLyogQ3JlYXRlIHNvcnRlZCBuYW1lIC0+IGRyaXZlIG1hcHBpbmcgdGFibGUuIE11c3Qg YmUgZnJlZWQgYnkgY2FsbGVyLiAqLworc3RhdGljIGludAorZ2V0X2J5X2lkX3RhYmxlIChi eV9pZF9lbnRyeSAqICZ0YWJsZSkKK3sKKyAgdGFibGUgPSBudWxscHRyOworCisgIC8qIE9w ZW4gXERldmljZSBvYmplY3QgZGlyZWN0b3J5LiAqLworICB3Y2hhcl90IHdwYXRoW01BWF9Q QVRIXSA9IEwiXFxEZXZpY2UiOworICBVTklDT0RFX1NUUklORyB1cGF0aCA9IHsxNCwgMTYs IHdwYXRofTsKKyAgT0JKRUNUX0FUVFJJQlVURVMgYXR0cjsKKyAgSW5pdGlhbGl6ZU9iamVj dEF0dHJpYnV0ZXMgKCZhdHRyLCAmdXBhdGgsIE9CSl9DQVNFX0lOU0VOU0lUSVZFLCBudWxs cHRyLCBudWxscHRyKTsKKyAgSEFORExFIGRpcmhkbDsKKyAgTlRTVEFUVVMgc3RhdHVzID0g TnRPcGVuRGlyZWN0b3J5T2JqZWN0ICgmZGlyaGRsLCBESVJFQ1RPUllfUVVFUlksICZhdHRy KTsKKyAgaWYgKCFOVF9TVUNDRVNTIChzdGF0dXMpKQorICAgIHsKKyAgICAgIGRlYnVnX3By aW50ZiAoIk50T3BlbkRpcmVjdG9yeU9iamVjdCwgc3RhdHVzICV5Iiwgc3RhdHVzKTsKKyAg ICAgIF9fc2V0ZXJybm9fZnJvbV9udF9zdGF0dXMgKHN0YXR1cyk7CisgICAgICByZXR1cm4g LTE7CisgICAgfQorCisgIC8qIExpbWl0IGRpc2sgYW5kIHBhcnRpdGlvbiBudW1iZXJzIGxp a2UgZmhhbmRsZXJfZGV2OjpyZWFkZGlyICgpLiAqLworICBjb25zdCB1bnNpZ25lZCBtYXhf ZHJpdmVfbnVtID0gMTI3LCBtYXhfcGFydF9udW0gPSA2MzsKKworICB1bnNpZ25lZCBhbGxv Y19zaXplID0gMCwgdGFibGVfc2l6ZSA9IDA7CisgIHRtcF9wYXRoYnVmIHRwOworICBjaGFy ICppb2N0bF9idWYgPSB0cC5jX2dldCAoKTsKKyAgRElSRUNUT1JZX0JBU0lDX0lORk9STUFU SU9OICpkYmlfYnVmID0KKyAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8RElSRUNUT1JZX0JBU0lD X0lORk9STUFUSU9OICo+KHRwLndfZ2V0ICgpKTsKKworICAvKiBUcmF2ZXJzZSBcRGV2aWNl IGRpcmVjdG9yeSAuLi4gKi8KKyAgYm9vbCBlcnJub19zZXQgPSBmYWxzZTsKKyAgQk9PTEVB TiByZXN0YXJ0ID0gVFJVRTsKKyAgYm9vbCBsYXN0X3J1biA9IGZhbHNlOworICBVTE9ORyBj b250ZXh0ID0gMDsKKyAgd2hpbGUgKCFsYXN0X3J1bikKKyAgICB7CisgICAgICBzdGF0dXMg PSBOdFF1ZXJ5RGlyZWN0b3J5T2JqZWN0IChkaXJoZGwsIGRiaV9idWYsIDY1NTM2LCBGQUxT RSwgcmVzdGFydCwKKwkJCQkgICAgICAgJmNvbnRleHQsIG51bGxwdHIpOworICAgICAgaWYg KCFOVF9TVUNDRVNTIChzdGF0dXMpKQorCXsKKwkgIF9fc2V0ZXJybm9fZnJvbV9udF9zdGF0 dXMgKHN0YXR1cyk7CisJICBlcnJub19zZXQgPSB0cnVlOworCSAgZGVidWdfcHJpbnRmICgi TnRRdWVyeURpcmVjdG9yeU9iamVjdCwgc3RhdHVzICV5Iiwgc3RhdHVzKTsKKwkgIGJyZWFr OworCX0KKyAgICAgIGlmIChzdGF0dXMgIT0gU1RBVFVTX01PUkVfRU5UUklFUykKKwlsYXN0 X3J1biA9IHRydWU7CisgICAgICByZXN0YXJ0ID0gRkFMU0U7CisgICAgICBmb3IgKGNvbnN0 IERJUkVDVE9SWV9CQVNJQ19JTkZPUk1BVElPTiAqZGJpID0gZGJpX2J1ZjsKKwkgICBkYmkt Pk9iamVjdE5hbWUuTGVuZ3RoID4gMDsKKwkgICBkYmkrKykKKwl7CisJICAvKiAuLi4gYW5k IGNoZWNrIGZvciBhICJIYXJkZGlza1swLTldKiIgZW50cnkuICovCisJICBpZiAoZGJpLT5P YmplY3ROYW1lLkxlbmd0aCA8IDkgKiBzaXplb2YgKFdDSEFSKQorCSAgICAgIHx8IHdjc25j YXNlY21wIChkYmktPk9iamVjdE5hbWUuQnVmZmVyLCBMIkhhcmRkaXNrIiwgOCkgIT0gMAor CSAgICAgIHx8ICFpc3dkaWdpdCAoZGJpLT5PYmplY3ROYW1lLkJ1ZmZlcls4XSkpCisJICAg IGNvbnRpbnVlOworCSAgLyogR290IGl0LiAgTm93IGNvbnN0cnVjdCB0aGUgcGF0aCB0byB0 aGUgZW50aXJlIGRpc2ssIHdoaWNoIGlzCisJICAgICAiXFxEZXZpY2VcXEhhcmRkaXNrWFxc UGFydGl0aW9uMCIsIGFuZCBvcGVuIHRoZSBkaXNrIHdpdGgKKwkgICAgIG1pbmltdW0gcGVy bWlzc2lvbnMuICovCisJICB1bnNpZ25lZCBsb25nIGRyaXZlX251bSA9IHdjc3RvdWwgKGRi aS0+T2JqZWN0TmFtZS5CdWZmZXIgKyA4LAorCQkJCQkgICAgIG51bGxwdHIsIDEwKTsKKwkg IGlmIChkcml2ZV9udW0gPiBtYXhfZHJpdmVfbnVtKQorCSAgICBjb250aW51ZTsKKwkgIHdj c2NweSAod3BhdGgsIGRiaS0+T2JqZWN0TmFtZS5CdWZmZXIpOworCSAgUFdDSEFSIHdwYXJ0 ID0gd3BhdGggKyBkYmktPk9iamVjdE5hbWUuTGVuZ3RoIC8gc2l6ZW9mIChXQ0hBUik7CisJ ICB3Y3BjcHkgKHdwYXJ0LCBMIlxcUGFydGl0aW9uMCIpOworCSAgdXBhdGguTGVuZ3RoID0g ZGJpLT5PYmplY3ROYW1lLkxlbmd0aCArIDIyOworCSAgdXBhdGguTWF4aW11bUxlbmd0aCA9 IHVwYXRoLkxlbmd0aCArIHNpemVvZiAoV0NIQVIpOworCSAgSW5pdGlhbGl6ZU9iamVjdEF0 dHJpYnV0ZXMgKCZhdHRyLCAmdXBhdGgsIE9CSl9DQVNFX0lOU0VOU0lUSVZFLAorCQkJCSAg ICAgIGRpcmhkbCwgbnVsbHB0cik7CisJICAvKiBTWU5DSFJPTklaRSBhY2Nlc3MgaXMgcmVx dWlyZWQgZm9yIElPQ1RMX1NUT1JBR0VfUVVFUllfUFJPUEVSVFkKKwkgICAgIGZvciBkcml2 ZXMgYmVoaW5kIHNvbWUgZHJpdmVycyAobnZtZXN0b3Iuc3lzKS4gKi8KKwkgIEhBTkRMRSBk ZXZoZGw7CisJICBJT19TVEFUVVNfQkxPQ0sgaW87CisJICBzdGF0dXMgPSBOdE9wZW5GaWxl ICgmZGV2aGRsLCBSRUFEX0NPTlRST0wgfCBTWU5DSFJPTklaRSwgJmF0dHIsICZpbywKKwkJ CSAgICAgICBGSUxFX1NIQVJFX1ZBTElEX0ZMQUdTLCAwKTsKKwkgIGlmICghTlRfU1VDQ0VT UyAoc3RhdHVzKSkKKwkgICAgeworCSAgICAgIF9fc2V0ZXJybm9fZnJvbV9udF9zdGF0dXMg KHN0YXR1cyk7CisJICAgICAgZXJybm9fc2V0ID0gdHJ1ZTsKKwkgICAgICBkZWJ1Z19wcmlu dGYgKCJOdE9wZW5GaWxlKCVTKSwgc3RhdHVzICV5IiwgJnVwYXRoLCBzdGF0dXMpOworCSAg ICAgIGNvbnRpbnVlOworCSAgICB9CisKKwkgIC8qIEZldGNoIHZlbmRvciwgcHJvZHVjdCBh bmQgc2VyaWFsIG51bWJlci4gKi8KKwkgIERXT1JEIGJ5dGVzX3JlYWQ7CisJICBTVE9SQUdF X1BST1BFUlRZX1FVRVJZIHF1ZXJ5ID0KKwkgICAgeyBTdG9yYWdlRGV2aWNlUHJvcGVydHks IFByb3BlcnR5U3RhbmRhcmRRdWVyeSwgeyAwIH0gfTsKKwkgIGlmICghRGV2aWNlSW9Db250 cm9sIChkZXZoZGwsIElPQ1RMX1NUT1JBR0VfUVVFUllfUFJPUEVSVFksCisJCQkJJnF1ZXJ5 LCBzaXplb2YgKHF1ZXJ5KSwKKwkJCQlpb2N0bF9idWYsIE5UX01BWF9QQVRILAorCQkJCSZi eXRlc19yZWFkLCBudWxscHRyKSkKKwkgICAgeworCSAgICAgIF9fc2V0ZXJybm9fZnJvbV93 aW5fZXJyb3IgKEdldExhc3RFcnJvciAoKSk7CisJICAgICAgZXJybm9fc2V0ID0gdHJ1ZTsK KwkgICAgICBkZWJ1Z19wcmludGYgKCJEZXZpY2VJb0NvbnRyb2wgKCVTLCAiCisJCQkgICAg IklPQ1RMX1NUT1JBR0VfUVVFUllfUFJPUEVSVFkpOiAlRSIsICZ1cGF0aCk7CisJICAgICAg Y29udGludWU7CisJICAgIH0KKworCSAgLyogQWRkIHRhYmxlIHNwYWNlIGZvciBkcml2ZSwg cGFydGl0aW9ucyBhbmQgZW5kIG1hcmtlci4gKi8KKwkgIGlmIChhbGxvY19zaXplIDw9IHRh YmxlX3NpemUgKyBtYXhfcGFydF9udW0pCisJICAgIHsKKwkgICAgICBhbGxvY19zaXplID0g dGFibGVfc2l6ZSArIG1heF9wYXJ0X251bSArIDg7CisJICAgICAgdGFibGUgPSBieV9pZF9y ZWFsbG9jICh0YWJsZSwgYWxsb2Nfc2l6ZSk7CisJICAgICAgaWYgKCF0YWJsZSkKKwkJcmV0 dXJuIC0xOworCSAgICB9CisKKwkgIGlmICghc3RvcmRlc2NfdG9faWRfbmFtZSAoJnVwYXRo LCBpb2N0bF9idWYsIHRhYmxlW3RhYmxlX3NpemVdLm5hbWUpKQorCSAgICBjb250aW51ZTsK KwkgIGludCBkcml2ZV9pbmRleCA9IHRhYmxlX3NpemUrKzsKKwkgIHNpemVfdCBkcml2ZV9s ZW4gPSBzdHJsZW4odGFibGVbZHJpdmVfaW5kZXhdLm5hbWUpOworCSAgdGFibGVbZHJpdmVf aW5kZXhdLmRyaXZlID0gZHJpdmVfbnVtOworCSAgdGFibGVbZHJpdmVfaW5kZXhdLnBhcnQg PSAwOworCisJICAvKiBGZXRjaCBkcml2ZSBsYXlvdXQgaW5mbyB0byBnZXQgc2l6ZSBvZiBh bGwgcGFydGl0aW9ucyBvbiBkaXNrLiAqLworCSAgRFdPUkQgcGFydF9jbnQgPSAwOworCSAg UEFSVElUSU9OX0lORk9STUFUSU9OX0VYICpwaXggPSBudWxscHRyOworCSAgUEFSVElUSU9O X0lORk9STUFUSU9OICpwaSA9IG51bGxwdHI7CisJICBpZiAoRGV2aWNlSW9Db250cm9sIChk ZXZoZGwsIElPQ1RMX0RJU0tfR0VUX0RSSVZFX0xBWU9VVF9FWCwgbnVsbHB0ciwgMCwKKwkJ CSAgICAgICBpb2N0bF9idWYsIE5UX01BWF9QQVRILCAmYnl0ZXNfcmVhZCwgbnVsbHB0cikp CisJICAgIHsKKwkgICAgICBEUklWRV9MQVlPVVRfSU5GT1JNQVRJT05fRVggKnBkbGl4ID0K KwkJICByZWludGVycHJldF9jYXN0PERSSVZFX0xBWU9VVF9JTkZPUk1BVElPTl9FWCAqPihp b2N0bF9idWYpOworCSAgICAgIHBhcnRfY250ID0gcGRsaXgtPlBhcnRpdGlvbkNvdW50Owor CSAgICAgIHBpeCA9IHBkbGl4LT5QYXJ0aXRpb25FbnRyeTsKKwkgICAgfQorCSAgZWxzZSBp ZiAoRGV2aWNlSW9Db250cm9sIChkZXZoZGwsIElPQ1RMX0RJU0tfR0VUX0RSSVZFX0xBWU9V VCwgbnVsbHB0ciwKKwkJCQkgICAgMCwgaW9jdGxfYnVmLCBOVF9NQVhfUEFUSCwgJmJ5dGVz X3JlYWQsCisJCQkJICAgIG51bGxwdHIpKQorCSAgICB7CisJICAgICAgRFJJVkVfTEFZT1VU X0lORk9STUFUSU9OICpwZGxpID0KKwkJICByZWludGVycHJldF9jYXN0PERSSVZFX0xBWU9V VF9JTkZPUk1BVElPTiAqPihpb2N0bF9idWYpOworCSAgICAgIHBhcnRfY250ID0gcGRsaS0+ UGFydGl0aW9uQ291bnQ7CisJICAgICAgcGkgPSBwZGxpLT5QYXJ0aXRpb25FbnRyeTsKKwkg ICAgfQorCSAgZWxzZQorCSAgICBkZWJ1Z19wcmludGYgKCJEZXZpY2VJb0NvbnRyb2woJVMs ICIKKwkJCSAgIklPQ1RMX0RJU0tfR0VUX0RSSVZFX0xBWU9VVHtfRVh9KTogJUUiLCAmdXBh dGgpOworCisJICAvKiBMb29wIG92ZXIgcGFydGl0aW9ucy4gKi8KKwkgIGlmIChwaXggfHwg cGkpCisJICAgIGZvciAoRFdPUkQgaSA9IDA7IGkgPCBwYXJ0X2NudDsgaSsrKQorCSAgICAg IHsKKwkJRFdPUkQgcGFydF9udW07CisJCWlmIChwaXgpCisJCSAgeworCQkgICAgcGFydF9u dW0gPSBwaXgtPlBhcnRpdGlvbk51bWJlcjsKKwkJICAgICsrcGl4OworCQkgIH0KKwkJZWxz ZQorCQkgIHsKKwkJICAgIHBhcnRfbnVtID0gcGktPlBhcnRpdGlvbk51bWJlcjsKKwkJICAg ICsrcGk7CisJCSAgfQorCQkvKiBBIHBhcnRpdGlvbiBudW1iZXIgb2YgMCBkZW5vdGVzIGFu IGV4dGVuZGVkIHBhcnRpdGlvbiBvciBhCisJCSAgIGZpbGxlciBlbnRyeSBhcyBkZXNjcmli ZWQgaW4KKwkJICAgZmhhbmRsZXJfZGV2X2Zsb3BweTo6bG9ja19wYXJ0aXRpb24uICBKdXN0 IHNraXAuICovCisJCWlmIChwYXJ0X251bSA9PSAwKQorCQkgIGNvbnRpbnVlOworCQlpZiAo cGFydF9udW0gPiBtYXhfcGFydF9udW0pCisJCSAgYnJlYWs7CisJCXRhYmxlW3RhYmxlX3Np emVdID0gdGFibGVbZHJpdmVfaW5kZXhdOworCQlfX3NtYWxsX3NwcmludGYodGFibGVbdGFi bGVfc2l6ZV0ubmFtZSArIGRyaXZlX2xlbiwgIi1wYXJ0JXUiLAorCQkJCXBhcnRfbnVtKTsK KwkJdGFibGVbdGFibGVfc2l6ZV0ucGFydCA9IHBhcnRfbnVtOworCQl0YWJsZV9zaXplKys7 CisJICAgICAgfQorCSAgTnRDbG9zZSAoZGV2aGRsKTsKKwl9CisgICAgfQorICBOdENsb3Nl IChkaXJoZGwpOworCisgIGlmICghdGFibGVfc2l6ZSAmJiB0YWJsZSkKKyAgICB7CisgICAg ICBmcmVlICh0YWJsZSk7CisgICAgICB0YWJsZSA9IG51bGxwdHI7CisgICAgfQorICBpZiAo IXRhYmxlKQorICAgIHJldHVybiAoZXJybm9fc2V0ID8gLTEgOiAwKTsKKworICAvKiBTb3J0 IGJ5IG5hbWUgYW5kIHJlbW92ZSBkdXBsaWNhdGVzLiAqLworICBxc29ydCAodGFibGUsIHRh YmxlX3NpemUsIHNpemVvZiAoKnRhYmxlKSwgYnlfaWRfY29tcGFyZV9uYW1lKTsKKyAgZm9y ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlX3NpemU7IGkrKykKKyAgICB7CisgICAgICB1 bnNpZ25lZCBqID0gaSArIDE7CisgICAgICB3aGlsZSAoaiA8IHRhYmxlX3NpemUgJiYgIXN0 cmNtcCAodGFibGVbaV0ubmFtZSwgdGFibGVbal0ubmFtZSkpCisJaisrOworICAgICAgaWYg KGogPT0gaSArIDEpCisJY29udGludWU7CisgICAgICAvKiBEdXBsaWNhdGUocykgZm91bmQs IHJlbW92ZSBhbGwgZW50cmllcyB3aXRoIHRoaXMgbmFtZS4gKi8KKyAgICAgIGRlYnVnX3By aW50ZiAoInJlbW92aW5nIGR1cGxpY2F0ZXMgJWQtJWQ6ICclcyciLCBpLCBqIC0gMSwgdGFi bGVbaV0ubmFtZSk7CisgICAgICBpZiAoaiA8IHRhYmxlX3NpemUpCisJbWVtbW92ZSAodGFi bGUgKyBpLCB0YWJsZSArIGosICh0YWJsZV9zaXplIC0gaikgKiBzaXplb2YgKCp0YWJsZSkp OworICAgICAgdGFibGVfc2l6ZSAtPSBqIC0gaTsKKyAgICAgIGktLTsKKyAgICB9CisKKyAg ZGVidWdfcHJpbnRmICgidGFibGVfc2l6ZTogJWQiLCB0YWJsZV9zaXplKTsKKyAgcmV0dXJu IHRhYmxlX3NpemU7Cit9CisKK2NvbnN0IGNoYXIgZGV2X2Rpc2tbXSA9ICIvZGV2L2Rpc2si OworY29uc3Qgc2l6ZV90IGRldl9kaXNrX2xlbiA9IHNpemVvZiAoZGV2X2Rpc2spIC0gMTsK KworZmhhbmRsZXJfZGV2X2Rpc2s6OmZoYW5kbGVyX2Rldl9kaXNrICgpOgorICBmaGFuZGxl cl92aXJ0dWFsICgpLAorICBsb2MgKHVua25vd25fbG9jKSwKKyAgZHJpdmVfZnJvbV9pZCAo LTEpLAorICBwYXJ0X2Zyb21faWQgKDApCit7Cit9CisKK3ZvaWQKK2ZoYW5kbGVyX2Rldl9k aXNrOjppbml0X2Rldl9kaXNrICgpCit7CisgIGlmIChsb2MgIT0gdW5rbm93bl9sb2MpCisg ICAgcmV0dXJuOworCisgIHN0YXRpYyBjb25zdCBjaGFyIGJ5X2lkW10gPSAiL2J5LWlkIjsK KyAgY29uc3Qgc2l6ZV90IGJ5X2lkX2xlbiA9IHNpemVvZihieV9pZCkgLSAxOworCisgIC8q IERldGVybWluZSBsb2NhdGlvbi4gKi8KKyAgY29uc3QgY2hhciAqcGF0aCA9IGdldF9uYW1l ICgpOworICBpZiAoIXBhdGhfcHJlZml4X3AgKGRldl9kaXNrLCBwYXRoLCBkZXZfZGlza19s ZW4sIGZhbHNlKSkKKyAgICBsb2MgPSBpbnZhbGlkX2xvYzsgLy8gc2hvdWxkIG5vdCBoYXBw ZW4KKyAgZWxzZSBpZiAoIXBhdGhbZGV2X2Rpc2tfbGVuXSkKKyAgICBsb2MgPSBkaXNrX2Rp cjsgLy8gIi9kZXYvZGlzayIKKyAgZWxzZSBpZiAoIXBhdGhfcHJlZml4X3AgKGJ5X2lkLCBw YXRoICsgZGV2X2Rpc2tfbGVuLCBieV9pZF9sZW4sIGZhbHNlKSkKKyAgICBsb2MgPSBpbnZh bGlkX2xvYzsgLy8gIi9kZXYvZGlzay9pbnZhbGlkIgorICBlbHNlIGlmICghcGF0aFtkZXZf ZGlza19sZW4gKyBieV9pZF9sZW5dKQorICAgIGxvYyA9IGJ5X2lkX2RpcjsgLy8gIi9kZXYv ZGlzay9ieS1pZCIKKyAgZWxzZSBpZiAoc3RyY2hyIChwYXRoICsgZGV2X2Rpc2tfbGVuICsg YnlfaWRfbGVuICsgMSwgJy8nKSkKKyAgICBsb2MgPSBpbnZhbGlkX2xvYzsgLy8gIi9kZXYv ZGlzay9ieS1pZC9kaXIvaW52YWxpZCIKKyAgZWxzZQorICAgIGxvYyA9IGJ5X2lkX2xpbms7 IC8vIHBvc3NpYmxlICIvZGV2L2Rpc2svYnktaWQvTElOSyIKKyAgZGVidWdfcHJpbnRmICgi JyVzJzogbG9jICVkIiwgcGF0aCwgKGludClsb2MpOworCisgIC8qIERvbmUgaWYgIi9kZXYv ZGlzayIsICIvZGV2L2Rpc2svYnlfaWQiIG9yIGludmFsaWQuICovCisgIGlmIChsb2MgIT0g YnlfaWRfbGluaykKKyAgICByZXR1cm47CisKKyAgLyogQ2hlY2sgd2hldGhlciAiL2Rldi9k aXNrL2J5X2lkL0xJTksiIGV4aXN0cy4gKi8KKyAgYnlfaWRfZW50cnkgKnRhYmxlOworICBp bnQgdGFibGVfc2l6ZSA9IGdldF9ieV9pZF90YWJsZSAodGFibGUpOworICBpZiAoIXRhYmxl KQorICAgIHsKKyAgICAgIGxvYyA9IGludmFsaWRfbG9jOworICAgICAgcmV0dXJuOworICAg IH0KKworICBieV9pZF9lbnRyeSBrZXk7CisgIHN0cmNweSAoa2V5Lm5hbWUsIHBhdGggKyBk ZXZfZGlza19sZW4gKyBieV9pZF9sZW4gKyAxKTsKKyAgY29uc3Qgdm9pZCAqZm91bmQgPSBi c2VhcmNoICgma2V5LCB0YWJsZSwgdGFibGVfc2l6ZSwgc2l6ZW9mICgqdGFibGUpLAorCQkJ ICAgICAgIGJ5X2lkX2NvbXBhcmVfbmFtZSk7CisgIGlmIChmb3VuZCkKKyAgICB7CisgICAg ICAvKiBQcmVzZXJ2ZSBkcml2ZSBhbmQgcGFydGl0aW9uIG51bWJlcnMgZm9yIGZpbGxidWYg KCkuICovCisgICAgICBjb25zdCBieV9pZF9lbnRyeSAqZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8 Y29uc3QgYnlfaWRfZW50cnkgKj4oZm91bmQpOworICAgICAgZHJpdmVfZnJvbV9pZCA9IGUt PmRyaXZlOworICAgICAgcGFydF9mcm9tX2lkID0gZS0+cGFydDsKKyAgICB9CisgIGVsc2UK KyAgICBsb2MgPSBpbnZhbGlkX2xvYzsKKyAgZnJlZSAodGFibGUpOworfQorCit2aXJ0dWFs X2Z0eXBlX3QKK2ZoYW5kbGVyX2Rldl9kaXNrOjpleGlzdHMgKCkKK3sKKyAgZGVidWdfcHJp bnRmICgiZXhpc3RzICglcykiLCBnZXRfbmFtZSAoKSk7CisgIGVuc3VyZV9pbml0ZWQgKCk7 CisgIHN3aXRjaCAobG9jKQorICAgIHsKKyAgICAgIGNhc2UgZGlza19kaXI6CisgICAgICBj YXNlIGJ5X2lkX2RpcjoKKwlyZXR1cm4gdmlydF9kaXJlY3Rvcnk7CisgICAgICBjYXNlIGJ5 X2lkX2xpbms6CisJcmV0dXJuIHZpcnRfc3ltbGluazsKKyAgICAgIGRlZmF1bHQ6CisJcmV0 dXJuIHZpcnRfbm9uZTsKKyAgICB9Cit9CisKK2ludAorZmhhbmRsZXJfZGV2X2Rpc2s6OmZz dGF0IChzdHJ1Y3Qgc3RhdCAqYnVmKQoreworICBkZWJ1Z19wcmludGYgKCJmc3RhdCAoJXMp IiwgZ2V0X25hbWUgKCkpOworICBlbnN1cmVfaW5pdGVkICgpOworICBpZiAobG9jID09IGlu dmFsaWRfbG9jKQorICAgIHsKKyAgICAgIHNldF9lcnJubyAoRU5PRU5UKTsKKyAgICAgIHJl dHVybiAtMTsKKyAgICB9CisKKyAgZmhhbmRsZXJfYmFzZTo6ZnN0YXQgKGJ1Zik7CisgIGJ1 Zi0+c3RfbW9kZSA9IChsb2MgPT0gYnlfaWRfbGluayA/IFNfSUZMTksgfCBTX0lXVVNSIHwg U19JV0dSUCB8IFNfSVdPVEgKKwkJICA6IFNfSUZESVIpIHwgU1REX1JCSVRTIHwgU1REX1hC SVRTOworICBidWYtPnN0X2lubyA9IGdldF9pbm8gKCk7CisgIHJldHVybiAwOworfQorCitz dGF0aWMgaW5saW5lIGJ5X2lkX2VudHJ5ICoqCitkaXJfaWRfdGFibGUgKERJUiAqZGlyKQor eworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxieV9pZF9lbnRyeSAqKj4oJmRpci0+X19k X2ludGVybmFsKTsKK30KKworRElSICoKK2ZoYW5kbGVyX2Rldl9kaXNrOjpvcGVuZGlyIChp bnQgZmQpCit7CisgIGVuc3VyZV9pbml0ZWQgKCk7CisgIGlmICghKGxvYyA9PSBkaXNrX2Rp ciB8fCBsb2MgPT0gYnlfaWRfZGlyKSkKKyAgICB7CisgICAgICBzZXRfZXJybm8gKEVOT1RE SVIpOworICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgIGJ5X2lkX2VudHJ5ICp0 YWJsZSA9IG51bGxwdHI7CisgIGlmIChsb2MgPT0gYnlfaWRfZGlyKQorICAgIHsKKyAgICAg IGludCB0YWJsZV9zaXplID0gZ2V0X2J5X2lkX3RhYmxlICh0YWJsZSk7CisgICAgICBpZiAo dGFibGVfc2l6ZSA8IDApCisJcmV0dXJuIG51bGxwdHI7IC8qIGVycm5vIGlzIHNldC4gKi8K KyAgICAgIGlmICh0YWJsZSkKKwl7CisJICAvKiBTaHJpbmsgdG8gcmVxdWlyZWQgdGFibGVf c2l6ZS4gKi8KKwkgIHRhYmxlID0gYnlfaWRfcmVhbGxvYyAodGFibGUsIHRhYmxlX3NpemUg KyAxKTsKKwkgIGlmICghdGFibGUpCisJICAgIHJldHVybiBudWxscHRyOyAvKiBTaG91bGQg bm90IGhhcHBlbi4gKi8KKwkgIC8qIE1hcmsgZW5kIG9mIHRhYmxlIGZvciByZWFkZGlyICgp LiAqLworCSAgdGFibGVbdGFibGVfc2l6ZV0ubmFtZVswXSA9ICdcMCc7CisJfQorICAgIH0K KworICBESVIgKmRpciA9IGZoYW5kbGVyX3ZpcnR1YWw6Om9wZW5kaXIgKGZkKTsKKyAgaWYg KCFkaXIpCisgICAgeworICAgICAgZnJlZSAodGFibGUpOworICAgICAgcmV0dXJuIG51bGxw dHI7CisgICAgfQorICBkaXItPl9fZmxhZ3MgPSBkaXJlbnRfc2F3X2RvdCB8IGRpcmVudF9z YXdfZG90X2RvdDsKKyAgKmRpcl9pZF90YWJsZSAoZGlyKSA9IHRhYmxlOworICByZXR1cm4g ZGlyOworfQorCitpbnQKK2ZoYW5kbGVyX2Rldl9kaXNrOjpjbG9zZWRpciAoRElSICpkaXIp Cit7CisgIGZyZWUgKCpkaXJfaWRfdGFibGUgKGRpcikpOworICByZXR1cm4gZmhhbmRsZXJf dmlydHVhbDo6Y2xvc2VkaXIgKGRpcik7Cit9CisKK2ludAorZmhhbmRsZXJfZGV2X2Rpc2s6 OnJlYWRkaXIgKERJUiAqZGlyLCBkaXJlbnQgKmRlKQoreworICBpbnQgcmVzOworICBpZiAo ZGlyLT5fX2RfcG9zaXRpb24gPCAyKQorICAgIHsKKyAgICAgIGRlLT5kX25hbWVbMF0gPSAn Lic7CisgICAgICBkZS0+ZF9uYW1lWzFdID0gKGRpci0+X19kX3Bvc2l0aW9uID8gJy4nIDog J1wwJyk7CisgICAgICBkZS0+ZF9uYW1lWzJdID0gJ1wwJzsKKyAgICAgIGRlLT5kX3R5cGUg PSBEVF9ESVI7CisgICAgICBkaXItPl9fZF9wb3NpdGlvbisrOworICAgICAgcmVzID0gMDsK KyAgICB9CisgIGVsc2UgaWYgKGxvYyA9PSBkaXNrX2RpciAmJiBkaXItPl9fZF9wb3NpdGlv biA9PSAyKQorICAgIHsKKyAgICAgIHN0cmNweSAoZGUtPmRfbmFtZSwgImJ5LWlkIik7Cisg ICAgICBkZS0+ZF90eXBlID0gRFRfRElSOworICAgICAgZGlyLT5fX2RfcG9zaXRpb24rKzsK KyAgICAgIHJlcyA9IDA7CisgICAgfQorICBlbHNlIGlmIChsb2MgPT0gYnlfaWRfZGlyICYm ICpkaXJfaWRfdGFibGUgKGRpcikpCisgICAgeworICAgICAgY29uc3QgY2hhciAqbmFtZSA9 ICgqZGlyX2lkX3RhYmxlIChkaXIpKVtkaXItPl9fZF9wb3NpdGlvbiAtIDJdLm5hbWU7Cisg ICAgICBpZiAobmFtZVswXSkKKwl7CisJICBzdHJjcHkgKGRlLT5kX25hbWUsIG5hbWUpOwor CSAgZGUtPmRfdHlwZSA9IERUX0xOSzsKKwkgIGRpci0+X19kX3Bvc2l0aW9uKys7CisJICBy ZXMgPSAwOworCX0KKyAgICAgIGVsc2UKKwlyZXMgPSBFTk1GSUxFOworICAgIH0KKyAgZWxz ZQorICAgIHJlcyA9IEVOTUZJTEU7CisKKyAgc3lzY2FsbF9wcmludGYgKCIlZCA9IHJlYWRk aXIoJXAsICVwKSAoJXMpIiwgcmVzLCBkaXIsIGRlLAorCQkgICghcmVzID8gZGUtPmRfbmFt ZSA6ICIiKSk7CisgIHJldHVybiByZXM7Cit9CisKK2ludAorZmhhbmRsZXJfZGV2X2Rpc2s6 Om9wZW4gKGludCBmbGFncywgbW9kZV90IG1vZGUpCit7CisgIGVuc3VyZV9pbml0ZWQgKCk7 CisgIGludCBlcnIgPSAwOworICBpZiAoIWZoYW5kbGVyX3ZpcnR1YWw6Om9wZW4gKGZsYWdz LCBtb2RlKSkKKyAgICBlcnIgPSAtMTsKKyAgZWxzZSBpZiAobG9jID09IGRpc2tfZGlyIHx8 IGxvYyA9PSBieV9pZF9kaXIpCisgICAgeworICAgICAgaWYgKChmbGFncyAmIChPX0NSRUFU IHwgT19FWENMKSkgPT0gKE9fQ1JFQVQgfCBPX0VYQ0wpKQorCWVyciA9IEVFWElTVDsKKyAg ICAgIGVsc2UgaWYgKGZsYWdzICYgT19XUk9OTFkpCisJZXJyID0gRUlTRElSOworICAgICAg ZWxzZQorCWRpcm9wZW4gPSB0cnVlOworICAgIH0KKyAgLyogZWxzZSBpZiAobG9jID09IGJ5 X2lkX2xpbmspIHsgfSAqLyAvKiBzaG91bGQgbm90IGhhcHBlbiAqLworICBlbHNlIC8qIChs b2MgPT0gaW52YWxpZF9sb2MpICovCisgICAgeworICAgICAgaWYgKGZsYWdzICYgT19DUkVB VCkKKwllcnIgPSBFUk9GUzsKKyAgICAgIGVsc2UKKwllcnIgPSBFTk9FTlQ7CisgICAgfQor CisgIGludCByZXM7CisgIGlmICghZXJyKQorICAgIHsKKyAgICAgIG5vaGFuZGxlICh0cnVl KTsKKyAgICAgIHNldF9vcGVuX3N0YXR1cyAoKTsKKyAgICAgIHJlcyA9IDE7CisgICAgfQor ICBlbHNlCisgICAgeworICAgICAgaWYgKGVyciA+IDApCisJc2V0X2Vycm5vIChlcnIpOwor ICAgICAgcmVzID0gMDsKKyAgICB9CisKKyAgc3lzY2FsbF9wcmludGYgKCIlZCA9IGZoYW5k bGVyX2Rldl9kaXNrOjpvcGVuKCV5LCAwJW8pIiwgcmVzLCBmbGFncywgbW9kZSk7CisgIHJl dHVybiByZXM7Cit9CisKK2Jvb2wKK2ZoYW5kbGVyX2Rldl9kaXNrOjpmaWxsX2ZpbGVidWYg KCkKK3sKKyAgZGVidWdfcHJpbnRmICgiZmlsbF9maWxlYnVmICglcykiLCBnZXRfbmFtZSAo KSk7CisgIGVuc3VyZV9pbml0ZWQgKCk7CisgIGlmICghKGxvYyA9PSBieV9pZF9saW5rICYm IGRyaXZlX2Zyb21faWQgPj0gMCkpCisgICAgcmV0dXJuIGZhbHNlOworCisgIGNoYXIgYnVm WzMyXTsKKyAgaW50IGxlbjsKKyAgaWYgKGRyaXZlX2Zyb21faWQgKyAnYScgPD0gJ3onKQor ICAgIGxlbiA9IF9fc21hbGxfc3ByaW50ZiAoYnVmLCAiLi4vLi4vc2QlYyIsIGRyaXZlX2Zy b21faWQgKyAnYScpOworICBlbHNlCisgICAgbGVuID0gX19zbWFsbF9zcHJpbnRmIChidWYs ICIuLi8uLi9zZCVjJWMiLAorCQkJICAgZHJpdmVfZnJvbV9pZCAvICgneicgLSAnYScgKyAx KSAtIDEgKyAnYScsCisJCQkgICBkcml2ZV9mcm9tX2lkICUgKCd6JyAtICdhJyArIDEpICsg J2EnKTsKKyAgaWYgKHBhcnRfZnJvbV9pZCkKKyAgICBfX3NtYWxsX3NwcmludGYgKGJ1ZiAr IGxlbiwgIiVkIiwgcGFydF9mcm9tX2lkKTsKKworICBpZiAoZmlsZWJ1ZikKKyAgICBjZnJl ZSAoZmlsZWJ1Zik7CisgIGZpbGVidWYgPSBjc3RyZHVwIChidWYpOworICByZXR1cm4gdHJ1 ZTsKK30KZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vbG9jYWxfaW5jbHVkZXMvZGV2aWNl cy5oIGIvd2luc3VwL2N5Z3dpbi9sb2NhbF9pbmNsdWRlcy9kZXZpY2VzLmgKaW5kZXggMTAw MzUyNjNkLi4xZTAzNWY5ZDYgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vbG9jYWxfaW5j bHVkZXMvZGV2aWNlcy5oCisrKyBiL3dpbnN1cC9jeWd3aW4vbG9jYWxfaW5jbHVkZXMvZGV2 aWNlcy5oCkBAIC03MSw2ICs3MSw3IEBAIGVudW0gZmhfZGV2aWNlcwogICBGSF9ERVYgICAg ID0gRkhERVYgKERFVl9WSVJURlNfTUFKT1IsIDE5MyksCiAgIEZIX0NZR0RSSVZFPSBGSERF ViAoREVWX1ZJUlRGU19NQUpPUiwgMTkyKSwKICAgRkhfREVWX0ZEICA9IEZIREVWIChERVZf VklSVEZTX01BSk9SLCAxOTEpLAorICBGSF9ERVZfRElTSz0gRkhERVYgKERFVl9WSVJURlNf TUFKT1IsIDE5MCksCiAKICAgRkhfU0lHTkFMRkQ9IEZIREVWIChERVZfVklSVEZTX01BSk9S LCAxMyksCiAgIEZIX1RJTUVSRkQgPSBGSERFViAoREVWX1ZJUlRGU19NQUpPUiwgMTQpLApA QCAtNDE1LDYgKzQxNiw4IEBAIGV4dGVybiBjb25zdCBfZGV2aWNlIGRldl9waXBlcl9zdG9y YWdlOwogI2RlZmluZSBwaXBlcl9kZXYgKChkZXZpY2UgKikgJmRldl9waXBlcl9zdG9yYWdl KQogZXh0ZXJuIGNvbnN0IF9kZXZpY2UgZGV2X3BpcGV3X3N0b3JhZ2U7CiAjZGVmaW5lIHBp cGV3X2RldiAoKGRldmljZSAqKSAmZGV2X3BpcGV3X3N0b3JhZ2UpCitleHRlcm4gY29uc3Qg X2RldmljZSBkZXZfZGV2X2Rpc2tfc3RvcmFnZTsKKyNkZWZpbmUgZGV2X2Rpc2tfZGV2ICgo ZGV2aWNlICopICZkZXZfZGV2X2Rpc2tfc3RvcmFnZSkKIGV4dGVybiBjb25zdCBfZGV2aWNl IGRldl9wcm9jX3N0b3JhZ2U7CiAjZGVmaW5lIHByb2NfZGV2ICgoZGV2aWNlICopICZkZXZf cHJvY19zdG9yYWdlKQogZXh0ZXJuIGNvbnN0IF9kZXZpY2UgZGV2X2Rldl9zdG9yYWdlOwpA QCAtNDM5LDcgKzQ0Miw4IEBAIGV4dGVybiBjb25zdCBfZGV2aWNlIGRldl9mc19zdG9yYWdl OwogI2RlZmluZSBpc3Byb2NzeXNfZGV2KGRldm4pIChkZXZuID09IEZIX1BST0NTWVMpCiAK ICNkZWZpbmUgaXN2aXJ0dWFsX2RldihkZXZuKSBcCi0gIChpc3Byb2NfZGV2IChkZXZuKSB8 fCBkZXZuID09IEZIX0NZR0RSSVZFIHx8IGRldm4gPT0gRkhfTkVURFJJVkUgfHwgZGV2biA9 PSBGSF9ERVZfRkQpCisgIChpc3Byb2NfZGV2IChkZXZuKSB8fCBkZXZuID09IEZIX0NZR0RS SVZFIHx8IGRldm4gPT0gRkhfTkVURFJJVkUgXAorICAgfHwgZGV2biA9PSBGSF9ERVZfRkQg fHwgZGV2biA9PSBGSF9ERVZfRElTSykKIAogI2RlZmluZSBpc2NvbnNfZGV2KG4pIFwKICAg KChkZXZpY2U6Om1ham9yICgoZGV2X3QpIChuKSkgPT0gREVWX0NPTlNfTUFKT1IpIFwKZGlm ZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vbG9jYWxfaW5jbHVkZXMvZmhhbmRsZXIuaCBiL3dp bnN1cC9jeWd3aW4vbG9jYWxfaW5jbHVkZXMvZmhhbmRsZXIuaAppbmRleCAyMTJjMjIzNDQu LmNkNjFhYWRmOCAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9sb2NhbF9pbmNsdWRlcy9m aGFuZGxlci5oCisrKyBiL3dpbnN1cC9jeWd3aW4vbG9jYWxfaW5jbHVkZXMvZmhhbmRsZXIu aApAQCAtNDAsNiArNDAsOCBAQCBkZXRhaWxzLiAqLwogZXh0ZXJuIGNvbnN0IGNoYXIgKndp bmRvd3NfZGV2aWNlX25hbWVzW107CiBleHRlcm4gc3RydWN0IF9fY3lnd2luX3BlcmZpbGUg KnBlcmZpbGVfdGFibGU7CiAjZGVmaW5lIF9fZm1vZGUgKCoodXNlcl9kYXRhLT5mbW9kZV9w dHIpKQorZXh0ZXJuIGNvbnN0IGNoYXIgZGV2X2Rpc2tbXTsKK2V4dGVybiBjb25zdCBzaXpl X3QgZGV2X2Rpc2tfbGVuOwogZXh0ZXJuIGNvbnN0IGNoYXIgcHJvY1tdOwogZXh0ZXJuIGNv bnN0IHNpemVfdCBwcm9jX2xlbjsKIGV4dGVybiBjb25zdCBjaGFyIHByb2NzeXNbXTsKQEAg LTMxOTAsNiArMzE5Miw1MCBAQCBjbGFzcyBmaGFuZGxlcl9wcm9jbmV0OiBwdWJsaWMgZmhh bmRsZXJfcHJvYwogICB9CiB9OwogCitjbGFzcyBmaGFuZGxlcl9kZXZfZGlzazogcHVibGlj IGZoYW5kbGVyX3ZpcnR1YWwKK3sKKyAgZW51bSBkZXZfZGlza19sb2NhdGlvbiB7CisgICAg dW5rbm93bl9sb2MsIGludmFsaWRfbG9jLCBkaXNrX2RpciwgYnlfaWRfZGlyLCBieV9pZF9s aW5rCisgIH07CisgIGRldl9kaXNrX2xvY2F0aW9uIGxvYzsKKworICB2b2lkIGluaXRfZGV2 X2Rpc2sgKCk7CisgIHZvaWQgZW5zdXJlX2luaXRlZCAoKQorICB7CisgICAgaWYgKGxvYyA9 PSB1bmtub3duX2xvYykKKyAgICAgIGluaXRfZGV2X2Rpc2sgKCk7CisgIH0KKworICBpbnQg ZHJpdmVfZnJvbV9pZDsKKyAgaW50IHBhcnRfZnJvbV9pZDsKKworIHB1YmxpYzoKKyAgZmhh bmRsZXJfZGV2X2Rpc2sgKCk7CisgIGZoYW5kbGVyX2Rldl9kaXNrICh2b2lkICopIHt9Cisg IHZpcnR1YWxfZnR5cGVfdCBleGlzdHMoKTsKKyAgRElSICpvcGVuZGlyIChpbnQgZmQpOwor ICBpbnQgY2xvc2VkaXIgKERJUiAqKTsKKyAgaW50IHJlYWRkaXIgKERJUiAqLCBkaXJlbnQg Kik7CisgIGludCBvcGVuIChpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlID0gMCk7CisgIGludCBm c3RhdCAoc3RydWN0IHN0YXQgKmJ1Zik7CisgIGJvb2wgZmlsbF9maWxlYnVmICgpOworCisg IHZvaWQgY29weV9mcm9tIChmaGFuZGxlcl9iYXNlICp4KQorICB7CisgICAgcGMuZnJlZV9z dHJpbmdzICgpOworICAgICp0aGlzID0gKnJlaW50ZXJwcmV0X2Nhc3Q8ZmhhbmRsZXJfZGV2 X2Rpc2sgKj4gKHgpOworICAgIF9jb3B5X2Zyb21fcmVzZXRfaGVscGVyICgpOworICB9CisK KyAgZmhhbmRsZXJfZGV2X2Rpc2sgKmNsb25lIChjeWdoZWFwX3R5cGVzIG1hbGxvY190eXBl ID0gSEVBUF9GSEFORExFUikKKyAgeworICAgIHZvaWQgKnB0ciA9ICh2b2lkICopIGNjYWxs b2MgKG1hbGxvY190eXBlLCAxLCBzaXplb2YgKGZoYW5kbGVyX2Rldl9kaXNrKSk7CisgICAg ZmhhbmRsZXJfZGV2X2Rpc2sgKmZoID0gbmV3IChwdHIpIGZoYW5kbGVyX2Rldl9kaXNrIChw dHIpOworICAgIGZoLT5jb3B5X2Zyb20gKHRoaXMpOworICAgIHJldHVybiBmaDsKKyAgfQor fTsKKwogY2xhc3MgZmhhbmRsZXJfZGV2X2ZkOiBwdWJsaWMgZmhhbmRsZXJfdmlydHVhbAog ewogIHB1YmxpYzoKQEAgLTM0MTYsNiArMzQ2Miw3IEBAIHR5cGVkZWYgdW5pb24KICAgY2hh ciBfX2Rldl9yYXdbc2l6ZW9mIChmaGFuZGxlcl9kZXZfcmF3KV07CiAgIGNoYXIgX19kZXZf dGFwZVtzaXplb2YgKGZoYW5kbGVyX2Rldl90YXBlKV07CiAgIGNoYXIgX19kZXZfemVyb1tz aXplb2YgKGZoYW5kbGVyX2Rldl96ZXJvKV07CisgIGNoYXIgX19kZXZfZGlza1tzaXplb2Yg KGZoYW5kbGVyX2Rldl9kaXNrKV07CiAgIGNoYXIgX19kZXZfZmRbc2l6ZW9mIChmaGFuZGxl cl9kZXZfZmQpXTsKICAgY2hhciBfX2Rpc2tfZmlsZVtzaXplb2YgKGZoYW5kbGVyX2Rpc2tf ZmlsZSldOwogICBjaGFyIF9fZmlmb1tzaXplb2YgKGZoYW5kbGVyX2ZpZm8pXTsKZGlmZiAt LWdpdCBhL3dpbnN1cC9jeWd3aW4vbW91bnQuY2MgYi93aW5zdXAvY3lnd2luL21vdW50LmNj CmluZGV4IDM2YWIwNDJhNy4uMTNhY2U2MjUwIDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2lu L21vdW50LmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vbW91bnQuY2MKQEAgLTM1LDYgKzM1LDkg QEAgZGV0YWlscy4gKi8KICAgIChwYXRoW21vdW50X3RhYmxlLT5jeWdkcml2ZV9sZW4gKyAx XSA9PSAnLycgfHwgXAogICAgICFwYXRoW21vdW50X3RhYmxlLT5jeWdkcml2ZV9sZW4gKyAx XSkpCiAKKyNkZWZpbmUgaXNkZXZfZGlzayhwYXRoKSBcCisgIChwYXRoX3ByZWZpeF9wIChk ZXZfZGlzaywgKHBhdGgpLCBkZXZfZGlza19sZW4sIGZhbHNlKSkKKwogI2RlZmluZSBpc3By b2MocGF0aCkgXAogICAocGF0aF9wcmVmaXhfcCAocHJvYywgKHBhdGgpLCBwcm9jX2xlbiwg ZmFsc2UpKQogCkBAIC02ODUsNiArNjg4LDEzIEBAIG1vdW50X2luZm86OmNvbnZfdG9fd2lu MzJfcGF0aCAoY29uc3QgY2hhciAqc3JjX3BhdGgsIGNoYXIgKmRzdCwgZGV2aWNlJiBkZXYs CiAgICAgICAvKiBHbyB0aHJvdWdoIGNocm9vdCBjaGVjayAqLwogICAgICAgZ290byBvdXQ7 CiAgICAgfQorICBpZiAoaXNkZXZfZGlzayAoc3JjX3BhdGgpKQorICAgIHsKKyAgICAgIGRl diA9ICpkZXZfZGlza19kZXY7CisgICAgICAqZmxhZ3MgPSAwOworICAgICAgc3RyY3B5IChk c3QsIHNyY19wYXRoKTsKKyAgICAgIGdvdG8gb3V0OworICAgIH0KICAgaWYgKGlzcHJvYyAo c3JjX3BhdGgpKQogICAgIHsKICAgICAgIGRldiA9ICpwcm9jX2RldjsKLS0gCjIuMzkuMAoK --------------FE0D96C3EAB5133C00C14124--