Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S262181AbVBJSG6 (ORCPT ); Thu, 10 Feb 2005 13:06:58 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S262182AbVBJSG6 (ORCPT ); Thu, 10 Feb 2005 13:06:58 -0500 Received: from coriana6.CIS.McMaster.CA ([130.113.128.17]:49282 "EHLO coriana6.cis.mcmaster.ca") by vger.kernel.org with ESMTP id S262181AbVBJSEs (ORCPT ); Thu, 10 Feb 2005 13:04:48 -0500 Subject: [ANNOUNCE] inotify 0.19 From: John McCutchan To: linux-kernel@vger.kernel.org, gamin-list@gnome.org, rml@novell.com, viro@parcelfarce.linux.theplanet.co.uk, akpm@osdl.org, bkonrath@redhat.com, greg@kroah.com Content-Type: multipart/mixed; boundary="=-Od44onNoEfxZtK69+bF0" Date: Thu, 10 Feb 2005 13:07:55 -0500 Message-Id: <1108058875.14341.6.camel@vertex> Mime-Version: 1.0 X-Mailer: Evolution 2.0.3 X-PMX-Version-Mac: 4.7.1.128075, Antispam-Engine: 2.0.3.0, Antispam-Data: 2005.2.10.9 X-PerlMx-Spam: Gauge=IIIIIII, Probability=7%, Report='__CT 0, __CTYPE_HAS_BOUNDARY 0, __CTYPE_MULTIPART 0, __HAS_MSGID 0, __HAS_X_MAILER 0, __MIME_VERSION 0, __SANE_MSGID 0' X-Spam-Flag: NO Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 94296 Lines: 1362 --=-Od44onNoEfxZtK69+bF0 Content-Type: text/plain Content-Transfer-Encoding: 7bit Announcing release 0.19.0 of inotify. Changes in this release include: - Rename event.filename to event.name (breaks api) - Rename request.dirname to request.name (breaks api) - Add Mike's patch to fix unmount race - Remove watch_mask and all the associated code. - Don't check the mask in inotify_dev_queue_event() - Adding Robert Love to Authors list - Update Copyright to 2005 - Check the mask in the one place we actually need to. - Break ignore_helper up, adding a lockless version - Remove the event parameter from ignore_helper, handle that one case as needed, separately - Rename ignore_helper to remove_watch - More comments! Attached is a patch for 2.6.10 Attached is a patch for gamin CVS Attached is an updated inotify-utils Or, http://tentacle.dhs.org/inotify/ And for even more patches, ftp://ftp.kernel.org/pub/linux/kernel/people/rml/inotify John McCutchan Inotify documentation: --HOWTO USE-- Inotify is a character device that when opened offers 2 IOCTL's. INOTIFY_WATCH: Which takes a path and event mask and returns a unique (to the instance of the driver) integer (wd [watch descriptor] from here on) that is a 1:1 mapping to the path passed. What happens is inotify refs the inode for the path and adds a inotify_watch structure to the inode. Each inotify device instance can only watch an inode once. INOTIFY_IGNORE: Which takes an integer (that you got from INOTIFY_WATCH) representing a wd that you are not interested in watching anymore. This will: send an IGNORE event to the device remove the inotify_watch structure from the device and from the inode and unref the inode. After you are watching 1 or more paths, you can read from the fd and get events. The events are struct inotify_event. If you are watching a directory and something happens to a file in the directory the event will contain the filename (just the filename not the full path). -- EVENTS -- IN_ACCESS - Sent when file is accessed. IN_MODIFY - Sent when file is modified. IN_ATTRIB - Sent when file is chmod'ed. IN_CLOSE_WRITE - Sent when file is closed and was opened for writing. IN_CLOSE_NOWRITE - Sent when file is closed but was not opened for writing. IN_CLOSE - either of the two above events. IN_OPEN - Sent when file is opened. IN_MOVED_FROM - Sent to the source folder of a move. IN_MOVED_TO - Sent to the destination folder of a move. IN_DELETE_SUBDIR - Sent when a sub directory is deleted.(When watching parent) IN_DELETE_FILE - Sent when a file is deleted. (When watching parent) IN_CREATE_SUBDIR - Sent when a sub directory is created.(When watching parent) IN_CREATE_FILE - Sent when a file is created. (When watching parent) IN_DELETE_SELF - Sent when file is deleted. IN_UNMOUNT - Sent when the filesystem is being unmounted. IN_Q_OVERFLOW - Sent when your event queue has over flowed. The MOVED_FROM/MOVED_TO events are always sent in pairs. MOVED_FROM/MOVED_TO is also sent when a file is renamed. The cookie field in the event structure allows you to pair MOVED_FROM/MOVED_TO events. These two events are not guaranteed to be successive in the event stream. You must rely on the cookie to pair them up. If you aren't watching the source and destination folders of a move/rename You will only get MOVED_TO or MOVED_FROM. In this case, MOVED_TO is equivelent to a CREATE and MOVED_FROM is equivelent to a DELETE. --Why Not dnotify and Why inotify (By Robert Love)-- Everyone seems quick to deride the blunder known as "dnotify" and applaud a replacement, any replacement, man anything but that current mess, but in the name of fairness I present my treatise on why dnotify is what one might call not good: * dnotify requires the opening of one fd per each directory that you intend to watch. o The file descriptor pins the directory, disallowing the backing device to be unmounted, which absolutely wrecks havoc with removable media. o Watching many directories results in many open file descriptors, possibly hitting a per-process fd limit. * dnotify is directory-based. You only learn about changes to directories. Sure, a change to a file in a directory affects the directory, but you are then forced to keep a cache of stat structures around to compare things in order to find out which file. * dnotify's interface to user-space is awful. o dnotify uses signals to communicate with user-space. o Specifically, dnotify uses SIGIO. o But then you can pick a different signal! So by "signals," I really meant you need to use real-time signals if you want to queue the events. * dnotify basically ignores any problems that would arise in the VFS from hard links. * Rumor is that the "d" in "dnotify" does not stand for "directory" but for "suck." A suitable replacement is "inotify." And now, my tract on what inotify brings to the table: * inotify's interface is a device node, not SIGIO. o You open only a single fd, to the device node. No more pinning directories or opening a million file descriptors. o Usage is nice: open the device, issue simple commands via ioctl(), and then block on the device. It returns events when, well, there are events to be returned. o You can select() on the device node and so it integrates with main loops like coffee mixed with vanilla milkshake. * inotify has an event that says "the filesystem that the item you were watching is on was unmounted" (this is particularly cool). * inotify can watch directories or files. * The "i" in inotify does not stand for "suck" but for "inode" -- the logical choice since inotify is inode-based. --COMPLEXITY-- I have been asked what the complexity of inotify is. Inotify has 2 path codes where complexity could be an issue: Adding a watch to a device This code has to check if the inode is already being watched by the device, this is O(N) where N is the number of devices watching the inode Removing a watch from a device This code This code has to do a search of all watches on the device to find the watch descriptor that is being asked to remove. This involves a linear search, but should not really be an issue because it is limited to 8192 entries. If this does turn in to a concern, I would replace the list of watches on the device with a sorted binary tree, so that the search could be done very quickly. In the near future this will be based on idr, and the complexity will be O(logn) The calls to inotify from the VFS code has a complexity of O(1). --MEMORY USAGE-- The inotify data structures are light weight: **NOTE** The memory analysis is out of date as of dynamic filename lengths inotify watch is 40 bytes inotify device is 68 bytes inotify event is 272 bytes So assuming a device has 8192 watches, the structures are only going to consume 320KB of memory. With a maximum number of 8 devices allowed to exist at a time, this is still only 2.5 MB Each device can also have 256 events queued at a time, which sums to 68KB per device. And only .5 MB if all devices are opened and have a full event queue. So approximately 3 MB of memory are used in the rare case of everything open and full. Each inotify watch pins the inode of a directory/file in memory, the size of an inode is different per file system but lets assume that it is 512 byes. So assuming the maximum number of global watches are active, this would pin down 32 MB of inodes in the inode cache. Again not a problem on a modern system. On smaller systems, the maximum watches / events could be lowered to provide a smaller foot print. Keep in mind that this is an absolute worst case memory analysis. In reality it will most likely cost approximately 5MB. --KERNEL CHANGES-- inotify char device driver. Adding calls to inotify_inode_queue_event and inotify_dentry_parent_queue_event from VFS operations. Dnotify has the same function calls. Adding a call to inotify_super_block_umount from generic_shutdown_superblock inotify_super_block_umount: find all of the inodes that are on the super block being shut down foreach of these inodes: remove the watchers on them send UNMOUNT and IGNORED events unref the inode --=-Od44onNoEfxZtK69+bF0 Content-Disposition: attachment; filename=inotify-0.19.patch Content-Type: text/x-patch; name=inotify-0.19.patch; charset=UTF-8 Content-Transfer-Encoding: base64 aW5vdGlmeSwgYml0Y2hlcw0KDQpTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgTG92ZSA8cm1sQG5vdmVs bC5jb20+DQoNCiBhcmNoL3NwYXJjNjQvS2NvbmZpZyAgICAgICB8ICAgMTMgDQogZHJpdmVycy9j aGFyL0tjb25maWcgICAgICAgfCAgIDEzIA0KIGRyaXZlcnMvY2hhci9NYWtlZmlsZSAgICAgIHwg ICAgMiANCiBkcml2ZXJzL2NoYXIvaW5vdGlmeS5jICAgICB8IDEwNTMgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQogZHJpdmVycy9jaGFyL21pc2MuYyAgICAg ICAgfCAgIDE0IA0KIGZzL2F0dHIuYyAgICAgICAgICAgICAgICAgIHwgICAzNCAtDQogZnMvY29t cGF0LmMgICAgICAgICAgICAgICAgfCAgIDE0IA0KIGZzL2ZpbGVfdGFibGUuYyAgICAgICAgICAg IHwgICAgNCANCiBmcy9pbm9kZS5jICAgICAgICAgICAgICAgICB8ICAgIDMgDQogZnMvbmFtZWku YyAgICAgICAgICAgICAgICAgfCAgIDM4IC0NCiBmcy9vcGVuLmMgICAgICAgICAgICAgICAgICB8 ICAgIDkgDQogZnMvcmVhZF93cml0ZS5jICAgICAgICAgICAgfCAgIDI4IC0NCiBmcy9zdXBlci5j ICAgICAgICAgICAgICAgICB8ICAgIDMgDQogaW5jbHVkZS9saW51eC9mcy5oICAgICAgICAgfCAg ICA3IA0KIGluY2x1ZGUvbGludXgvZnNub3RpZnkuaCAgIHwgIDIzNSArKysrKysrKysrDQogaW5j bHVkZS9saW51eC9pbm90aWZ5LmggICAgfCAgMTE4ICsrKysrDQogaW5jbHVkZS9saW51eC9taXNj ZGV2aWNlLmggfCAgICA1IA0KIGluY2x1ZGUvbGludXgvc2NoZWQuaCAgICAgIHwgICAgMiANCiBr ZXJuZWwvdXNlci5jICAgICAgICAgICAgICB8ICAgIDIgDQogMTkgZmlsZXMgY2hhbmdlZCwgMTUy MiBpbnNlcnRpb25zKCspLCA3NSBkZWxldGlvbnMoLSkNCg0KZGlmZiAtdXJOIGxpbnV4LTIuNi4x MC9hcmNoL3NwYXJjNjQvS2NvbmZpZyBsaW51eC9hcmNoL3NwYXJjNjQvS2NvbmZpZw0KLS0tIGxp bnV4LTIuNi4xMC9hcmNoL3NwYXJjNjQvS2NvbmZpZwkyMDA0LTEyLTI0IDE2OjM1OjI1LjAwMDAw MDAwMCAtMDUwMA0KKysrIGxpbnV4L2FyY2gvc3BhcmM2NC9LY29uZmlnCTIwMDUtMDItMDEgMTI6 MjQ6MjYuMDAwMDAwMDAwIC0wNTAwDQpAQCAtODgsNiArODgsMTkgQEANCiAJYm9vbA0KIAlkZWZh dWx0IHkNCiANCitjb25maWcgSU5PVElGWQ0KKwlib29sICJJbm90aWZ5IGZpbGUgY2hhbmdlIG5v dGlmaWNhdGlvbiBzdXBwb3J0Ig0KKwlkZWZhdWx0IHkNCisJLS0taGVscC0tLQ0KKwkgIFNheSBZ IGhlcmUgdG8gZW5hYmxlIGlub3RpZnkgc3VwcG9ydCBhbmQgdGhlIC9kZXYvaW5vdGlmeSBjaGFy YWN0ZXINCisJICBkZXZpY2UuICBJbm90aWZ5IGlzIGEgZmlsZSBjaGFuZ2Ugbm90aWZpY2F0aW9u IHN5c3RlbSBhbmQgYQ0KKwkgIHJlcGxhY2VtZW50IGZvciBkbm90aWZ5LiAgSW5vdGlmeSBmaXhl cyBudW1lcm91cyBzaG9ydGNvbWluZ3MgaW4NCisJICBkbm90aWZ5IGFuZCBpbnRyb2R1Y2VzIHNl dmVyYWwgbmV3IGZlYXR1cmVzLiAgSXQgYWxsb3dzIG1vbml0b3JpbmcNCisJICBvZiBib3RoIGZp bGVzIGFuZCBkaXJlY3RvcmllcyB2aWEgYSBzaW5nbGUgb3BlbiBmZC4gIE11bHRpcGxlIGZpbGUN CisJICBldmVudHMgYXJlIHN1cHBvcnRlZC4NCisNCisJICBJZiB1bnN1cmUsIHNheSBZLg0KKw0K IGNvbmZpZyBTTVANCiAJYm9vbCAiU3ltbWV0cmljIG11bHRpLXByb2Nlc3Npbmcgc3VwcG9ydCIN CiAJLS0taGVscC0tLQ0KZGlmZiAtdXJOIGxpbnV4LTIuNi4xMC9kcml2ZXJzL2NoYXIvaW5vdGlm eS5jIGxpbnV4L2RyaXZlcnMvY2hhci9pbm90aWZ5LmMNCi0tLSBsaW51eC0yLjYuMTAvZHJpdmVy cy9jaGFyL2lub3RpZnkuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMA0KKysr IGxpbnV4L2RyaXZlcnMvY2hhci9pbm90aWZ5LmMJMjAwNS0wMi0wOSAxNjowNTowNy45NTkyNjU2 NDggLTA1MDANCkBAIC0wLDAgKzEsMTA1MyBAQA0KKy8qDQorICogZHJpdmVycy9jaGFyL2lub3Rp ZnkuYyAtIGlub2RlLWJhc2VkIGZpbGUgZXZlbnQgbm90aWZpY2F0aW9ucw0KKyAqDQorICogQXV0 aG9yczoNCisgKglKb2huIE1jQ3V0Y2hhbgk8dHRiQHRlbnRhY2xlLmRocy5vcmc+DQorICoJUm9i ZXJ0IExvdmUJPHJtbEBub3ZlbGwuY29tPg0KKyAqDQorICogQ29weXJpZ2h0IChDKSAyMDA1IEpv aG4gTWNDdXRjaGFuDQorICoNCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdA0KKyAqIHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQ0K KyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkNCisgKiBsYXRlciB2ZXJzaW9uLg0KKyAqDQorICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0K KyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YNCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlIEdOVQ0KKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4NCisgKi8NCisNCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPg0KKyNpbmNsdWRlIDxs aW51eC9zcGlubG9jay5oPg0KKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4NCisjaW5jbHVkZSA8bGlu dXgvc2xhYi5oPg0KKyNpbmNsdWRlIDxsaW51eC9mcy5oPg0KKyNpbmNsdWRlIDxsaW51eC9uYW1l aS5oPg0KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+DQorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5o Pg0KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+DQorI2luY2x1ZGUgPGxpbnV4L2luaXQu aD4NCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPg0KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2su aD4NCisjaW5jbHVkZSA8bGludXgvaW5vdGlmeS5oPg0KKw0KKyNpbmNsdWRlIDxhc20vaW9jdGxz Lmg+DQorDQorc3RhdGljIGF0b21pY190IGlub3RpZnlfY29va2llOw0KK3N0YXRpYyBrbWVtX2Nh Y2hlX3QgKndhdGNoX2NhY2hlcDsNCitzdGF0aWMga21lbV9jYWNoZV90ICpldmVudF9jYWNoZXA7 DQorc3RhdGljIGttZW1fY2FjaGVfdCAqaW5vZGVfZGF0YV9jYWNoZXA7DQorDQorc3RhdGljIGlu dCBzeXNmc19hdHRyaWJfbWF4X3VzZXJfZGV2aWNlczsNCitzdGF0aWMgaW50IHN5c2ZzX2F0dHJp Yl9tYXhfdXNlcl93YXRjaGVzOw0KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3lzZnNfYXR0cmliX21h eF9xdWV1ZWRfZXZlbnRzOw0KKw0KKy8qDQorICogc3RydWN0IGlub3RpZnlfZGV2aWNlIC0gcmVw cmVzZW50cyBhbiBvcGVuIGluc3RhbmNlIG9mIGFuIGlub3RpZnkgZGV2aWNlDQorICoNCisgKiBG b3IgZWFjaCBpbm90aWZ5IGRldmljZSwgd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBldmVu dHMgcXVldWVkIG9uIGl0LA0KKyAqIGEgbGlzdCBvZiB0aGUgaW5vZGVzIHRoYXQgd2UgYXJlIHdh dGNoaW5nLCBhbmQgc28gb24uDQorICoNCisgKiBUaGlzIHN0cnVjdHVyZSBpcyBwcm90ZWN0ZWQg YnkgJ2xvY2snLiAgTG9jayBvcmRlcmluZzoNCisgKg0KKyAqIGRldi0+bG9jayAocHJvdGVjdHMg ZGV2KQ0KKyAqCWlub2RlX2xvY2sgKHVzZWQgdG8gc2FmZWx5IHdhbGsgaW5vZGVfaW5fdXNlIGxp c3QpDQorICoJCWlub2RlLT5pX2xvY2sgKG9ubHkgbmVlZGVkIGZvciBnZXR0aW5nIHJlZiBvbiBp bm9kZV9kYXRhKQ0KKyAqLw0KK3N0cnVjdCBpbm90aWZ5X2RldmljZSB7DQorCXdhaXRfcXVldWVf aGVhZF90IAl3YWl0Ow0KKwlzdHJ1Y3QgaWRyCQlpZHI7DQorCXN0cnVjdCBsaXN0X2hlYWQgCWV2 ZW50czsNCisJc3RydWN0IGxpc3RfaGVhZCAJd2F0Y2hlczsNCisJc3BpbmxvY2tfdAkJbG9jazsN CisJdW5zaWduZWQgaW50CQlxdWV1ZV9zaXplOw0KKwl1bnNpZ25lZCBpbnQJCWV2ZW50X2NvdW50 Ow0KKwl1bnNpZ25lZCBpbnQJCW1heF9ldmVudHM7DQorCXN0cnVjdCB1c2VyX3N0cnVjdAkqdXNl cjsNCit9Ow0KKw0KK3N0cnVjdCBpbm90aWZ5X3dhdGNoIHsNCisJczMyIAkJCXdkOwkvKiB3YXRj aCBkZXNjcmlwdG9yICovDQorCXUzMgkJCW1hc2s7CS8qIGV2ZW50IG1hc2sgZm9yIHRoaXMgd2F0 Y2ggKi8NCisJc3RydWN0IGlub2RlCQkqaW5vZGU7CS8qIGFzc29jaWF0ZWQgaW5vZGUgKi8NCisJ c3RydWN0IGlub3RpZnlfZGV2aWNlCSpkZXY7CS8qIGFzc29jaWF0ZWQgZGV2aWNlICovDQorCXN0 cnVjdCBsaXN0X2hlYWQJZF9saXN0OwkvKiBlbnRyeSBpbiBkZXZpY2UncyBsaXN0ICovDQorCXN0 cnVjdCBsaXN0X2hlYWQJaV9saXN0OyAvKiBlbnRyeSBpbiBpbm90aWZ5X2RhdGEncyBsaXN0ICov DQorfTsNCisNCisvKg0KKyAqIEEgbGlzdCBvZiB0aGVzZSBpcyBhdHRhY2hlZCB0byBlYWNoIGlu c3RhbmNlIG9mIHRoZSBkcml2ZXIuICBJbiByZWFkKCksIHRoaXMNCisgKiB0aGlzIGxpc3QgaXMg d2Fsa2VkIGFuZCBhbGwgZXZlbnRzIHRoYXQgY2FuIGZpdCBpbiB0aGUgYnVmZmVyIGFyZSByZXR1 cm5lZC4NCisgKi8NCitzdHJ1Y3QgaW5vdGlmeV9rZXJuZWxfZXZlbnQgew0KKwlzdHJ1Y3QgaW5v dGlmeV9ldmVudAlldmVudDsNCisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgbGlzdDsNCisJY2hh cgkJCSpmaWxlbmFtZTsNCit9Ow0KKw0KK3N0YXRpYyBzc2l6ZV90IHNob3dfbWF4X3F1ZXVlZF9l dmVudHMoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3MsIGNoYXIgKmJ1ZikNCit7DQorCXJldHVy biBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBzeXNmc19hdHRyaWJfbWF4X3F1ZXVlZF9ldmVudHMpOw0K K30NCisNCitzdGF0aWMgc3NpemVfdCBzdG9yZV9tYXhfcXVldWVkX2V2ZW50cyhzdHJ1Y3QgY2xh c3NfZGV2aWNlICpjbGFzcywNCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNv dW50KQ0KK3sNCisJdW5zaWduZWQgaW50IG1heDsNCisNCisJaWYgKHNzY2FuZihidWYsICIldSIs ICZtYXgpID4gMCAmJiBtYXggPiAwKSB7DQorCQlzeXNmc19hdHRyaWJfbWF4X3F1ZXVlZF9ldmVu dHMgPSBtYXg7DQorCQlyZXR1cm4gc3RybGVuKGJ1Zik7DQorCX0NCisJcmV0dXJuIC1FSU5WQUw7 DQorfQ0KKw0KK3N0YXRpYyBzc2l6ZV90IHNob3dfbWF4X3VzZXJfZGV2aWNlcyhzdHJ1Y3QgY2xh c3NfZGV2aWNlICpjbGFzcywgY2hhciAqYnVmKQ0KK3sNCisJcmV0dXJuIHNwcmludGYoYnVmLCAi JWRcbiIsIHN5c2ZzX2F0dHJpYl9tYXhfdXNlcl9kZXZpY2VzKTsNCit9DQorDQorc3RhdGljIHNz aXplX3Qgc3RvcmVfbWF4X3VzZXJfZGV2aWNlcyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzcywN CisJCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpDQorew0KKwlpbnQgbWF4 Ow0KKw0KKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJm1heCkgPiAwICYmIG1heCA+IDApIHsNCisJ CXN5c2ZzX2F0dHJpYl9tYXhfdXNlcl9kZXZpY2VzID0gbWF4Ow0KKwkJcmV0dXJuIHN0cmxlbihi dWYpOw0KKwl9DQorCXJldHVybiAtRUlOVkFMOw0KK30NCisNCitzdGF0aWMgc3NpemVfdCBzaG93 X21heF91c2VyX3dhdGNoZXMoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3MsIGNoYXIgKmJ1ZikN Cit7DQorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBzeXNmc19hdHRyaWJfbWF4X3VzZXJf d2F0Y2hlcyk7DQorfQ0KKw0KK3N0YXRpYyBzc2l6ZV90IHN0b3JlX21heF91c2VyX3dhdGNoZXMo c3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3MsDQorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwg c2l6ZV90IGNvdW50KQ0KK3sNCisJaW50IG1heDsNCisNCisJaWYgKHNzY2FuZihidWYsICIlZCIs ICZtYXgpID4gMCAmJiBtYXggPiAwKSB7DQorCQlzeXNmc19hdHRyaWJfbWF4X3VzZXJfd2F0Y2hl cyA9IG1heDsNCisJCXJldHVybiBzdHJsZW4oYnVmKTsNCisJfQ0KKwlyZXR1cm4gLUVJTlZBTDsN Cit9DQorDQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKG1heF9xdWV1ZWRfZXZlbnRzLCBTX0lS VUdPIHwgU19JV1VTUiwNCisJc2hvd19tYXhfcXVldWVkX2V2ZW50cywgc3RvcmVfbWF4X3F1ZXVl ZF9ldmVudHMpOw0KK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihtYXhfdXNlcl9kZXZpY2VzLCBT X0lSVUdPIHwgU19JV1VTUiwNCisJc2hvd19tYXhfdXNlcl9kZXZpY2VzLCBzdG9yZV9tYXhfdXNl cl9kZXZpY2VzKTsNCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobWF4X3VzZXJfd2F0Y2hlcywg U19JUlVHTyB8IFNfSVdVU1IsDQorCXNob3dfbWF4X3VzZXJfd2F0Y2hlcywgc3RvcmVfbWF4X3Vz ZXJfd2F0Y2hlcyk7DQorDQorc3RhdGljIGlubGluZSB2b2lkIF9fZ2V0X2lub2RlX2RhdGEoc3Ry dWN0IGlub3RpZnlfaW5vZGVfZGF0YSAqZGF0YSkNCit7DQorCWF0b21pY19pbmMoJmRhdGEtPmNv dW50KTsNCit9DQorDQorLyoNCisgKiBnZXRfaW5vZGVfZGF0YSAtIHBpbiBhbiBpbm90aWZ5X2lu b2RlX2RhdGEgc3RydWN0dXJlLiAgUmV0dXJucyB0aGUgc3RydWN0dXJlDQorICogaWYgc3VjY2Vz c2Z1bCBhbmQgTlVMTCBvbiBmYWlsdXJlLCB3aGljaCBjYW4gb25seSBvY2N1ciBpZiBpbm90aWZ5 X2RhdGEgaXMNCisgKiBub3QgeWV0IGFsbG9jYXRlZC4gIFRoZSBpbm9kZSBtdXN0IGJlIHBpbm5l ZCBwcmlvciB0byBpbnZvY2F0aW9uLg0KKyAqLw0KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlub3Rp ZnlfaW5vZGVfZGF0YSAqIGdldF9pbm9kZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpDQorew0K KwlzdHJ1Y3QgaW5vdGlmeV9pbm9kZV9kYXRhICpkYXRhOw0KKw0KKwlzcGluX2xvY2soJmlub2Rl LT5pX2xvY2spOw0KKwlkYXRhID0gaW5vZGUtPmlub3RpZnlfZGF0YTsNCisJaWYgKGRhdGEpDQor CQlfX2dldF9pbm9kZV9kYXRhKGRhdGEpOw0KKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7 DQorDQorCXJldHVybiBkYXRhOw0KK30NCisNCisvKg0KKyAqIHB1dF9pbm9kZV9kYXRhIC0gZHJv cCBvdXIgcmVmZXJlbmNlIG9uIGFuIGlub3RpZnlfaW5vZGVfZGF0YSBhbmQgdGhlDQorICogaW5v ZGUgc3RydWN0dXJlIGluIHdoaWNoIGl0IGxpdmVzLiAgSWYgdGhlIHJlZmVyZW5jZSBjb3VudCBv biBpbm90aWZ5X2RhdGENCisgKiByZWFjaGVzIHplcm8sIGZyZWUgaXQuDQorICovDQorc3RhdGlj IGlubGluZSB2b2lkIHB1dF9pbm9kZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpDQorew0KKwkv L3NwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7DQorCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZp bm9kZS0+aW5vdGlmeV9kYXRhLT5jb3VudCkpIHsNCisJCWttZW1fY2FjaGVfZnJlZShpbm9kZV9k YXRhX2NhY2hlcCwgaW5vZGUtPmlub3RpZnlfZGF0YSk7DQorCQlpbm9kZS0+aW5vdGlmeV9kYXRh ID0gTlVMTDsNCisJfQ0KKwkvL3NwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsNCit9DQorDQor LyoNCisgKiBmaW5kX2lub2RlIC0gcmVzb2x2ZSBhIHVzZXItZ2l2ZW4gcGF0aCB0byBhIHNwZWNp ZmljIGlub2RlIGFuZCByZXR1cm4gYSBuZA0KKyAqLw0KK3N0YXRpYyBpbnQgZmluZF9pbm9kZShj b25zdCBjaGFyIF9fdXNlciAqZGlybmFtZSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpDQorew0KKwlp bnQgZXJyb3I7DQorDQorCWVycm9yID0gX191c2VyX3dhbGsoZGlybmFtZSwgTE9PS1VQX0ZPTExP VywgbmQpOw0KKwlpZiAoZXJyb3IpDQorCQlyZXR1cm4gZXJyb3I7DQorDQorCS8qIHlvdSBjYW4g b25seSB3YXRjaCBhbiBpbm9kZSBpZiB5b3UgaGF2ZSByZWFkIHBlcm1pc3Npb25zIG9uIGl0ICov DQorCXJldHVybiBwZXJtaXNzaW9uKG5kLT5kZW50cnktPmRfaW5vZGUsIE1BWV9SRUFELCBOVUxM KTsNCit9DQorDQorc3RhdGljIHN0cnVjdCBpbm90aWZ5X2tlcm5lbF9ldmVudCAqIGtlcm5lbF9l dmVudChzMzIgd2QsIHUzMiBtYXNrLCB1MzIgY29va2llLA0KKwkJCQkJCSAgY29uc3QgY2hhciAq ZmlsZW5hbWUpDQorew0KKwlzdHJ1Y3QgaW5vdGlmeV9rZXJuZWxfZXZlbnQgKmtldmVudDsNCisN CisJa2V2ZW50ID0ga21lbV9jYWNoZV9hbGxvYyhldmVudF9jYWNoZXAsIEdGUF9BVE9NSUMpOw0K KwlpZiAoIWtldmVudCkNCisJCXJldHVybiBOVUxMOw0KKw0KKwkvKiB3ZSBoYW5kIHRoaXMgb3V0 IHRvIHVzZXItc3BhY2UsIHNvIHplcm8gaXQganVzdCBpbiBjYXNlICovDQorCW1lbXNldCgma2V2 ZW50LT5ldmVudCwgMCwgc2l6ZW9mKHN0cnVjdCBpbm90aWZ5X2V2ZW50KSk7DQorDQorCWtldmVu dC0+ZXZlbnQud2QgPSB3ZDsNCisJa2V2ZW50LT5ldmVudC5tYXNrID0gbWFzazsNCisJa2V2ZW50 LT5ldmVudC5jb29raWUgPSBjb29raWU7DQorCUlOSVRfTElTVF9IRUFEKCZrZXZlbnQtPmxpc3Qp Ow0KKw0KKwlpZiAoZmlsZW5hbWUpIHsNCisJCXNpemVfdCBsZW4sIHJlbSwgZXZlbnRfc2l6ZSA9 IHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9ldmVudCk7DQorDQorCQkvKg0KKwkJICogV2UgbmVlZCB0 byBwYWQgdGhlIGZpbGVuYW1lIHNvIGFzIHRvIHByb3Blcmx5IGFsaWduIGFuDQorCQkgKiBhcnJh eSBvZiBpbm90aWZ5X2V2ZW50IHN0cnVjdHVyZXMuICBCZWNhdXNlIHRoZSBzdHJ1Y3R1cmUgaXMN CisJCSAqIHNtYWxsIGFuZCB0aGUgY29tbW9uIGNhc2UgaXMgYSBzbWFsbCBmaWxlbmFtZSwgd2Ug anVzdCByb3VuZA0KKwkJICogdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgdGhlIHN0cnVjdHVy ZSdzIHNpemVvZi4gIFRoaXMgaXMNCisJCSAqIHNpbXBsZSBhbmQgc2FmZSBmb3IgYWxsIGFyY2hp dGVjdHVyZXMuDQorCQkgKi8NCisJCWxlbiA9IHN0cmxlbihmaWxlbmFtZSkgKyAxOw0KKwkJcmVt ID0gZXZlbnRfc2l6ZSAtIGxlbjsNCisJCWlmIChsZW4gPiBldmVudF9zaXplKSB7DQorCQkJcmVt ID0gZXZlbnRfc2l6ZSAtIChsZW4gJSBldmVudF9zaXplKTsNCisJCQlpZiAobGVuICUgZXZlbnRf c2l6ZSA9PSAwKQ0KKwkJCQlyZW0gPSAwOw0KKwkJfQ0KKwkJbGVuICs9IHJlbTsNCisNCisJCWtl dmVudC0+ZmlsZW5hbWUgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7DQorCQlpZiAoIWtldmVu dC0+ZmlsZW5hbWUpIHsNCisJCQlrbWVtX2NhY2hlX2ZyZWUoZXZlbnRfY2FjaGVwLCBrZXZlbnQp Ow0KKwkJCXJldHVybiBOVUxMOw0KKwkJfQ0KKwkJbWVtc2V0KGtldmVudC0+ZmlsZW5hbWUsIDAs IGxlbik7DQorCQlzdHJuY3B5KGtldmVudC0+ZmlsZW5hbWUsIGZpbGVuYW1lLCBzdHJsZW4oZmls ZW5hbWUpKTsNCisJCWtldmVudC0+ZXZlbnQubGVuID0gbGVuOw0KKwl9IGVsc2Ugew0KKwkJa2V2 ZW50LT5ldmVudC5sZW4gPSAwOw0KKwkJa2V2ZW50LT5maWxlbmFtZSA9IE5VTEw7DQorCX0NCisN CisJcmV0dXJuIGtldmVudDsNCit9DQorDQorI2RlZmluZSBsaXN0X3RvX2lub3RpZnlfa2VybmVs X2V2ZW50KHBvcykJXA0KKwkJbGlzdF9lbnRyeSgocG9zKSwgc3RydWN0IGlub3RpZnlfa2VybmVs X2V2ZW50LCBsaXN0KQ0KKw0KKyNkZWZpbmUgaW5vdGlmeV9kZXZfZ2V0X2V2ZW50KGRldikJCVwN CisJCShsaXN0X3RvX2lub3RpZnlfa2VybmVsX2V2ZW50KGRldi0+ZXZlbnRzLm5leHQpKQ0KKw0K Ky8qDQorICogaW5vdGlmeV9kZXZfcXVldWVfZXZlbnQgLSBhZGQgYSBuZXcgZXZlbnQgdG8gdGhl IGdpdmVuIGRldmljZQ0KKyAqDQorICogQ2FsbGVyIG11c3QgaG9sZCBkZXYtPmxvY2suDQorICov DQorc3RhdGljIHZvaWQgaW5vdGlmeV9kZXZfcXVldWVfZXZlbnQoc3RydWN0IGlub3RpZnlfZGV2 aWNlICpkZXYsDQorCQkJCSAgICBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gsIHUzMiBtYXNr LA0KKwkJCQkgICAgdTMyIGNvb2tpZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpDQorew0KKwlzdHJ1 Y3QgaW5vdGlmeV9rZXJuZWxfZXZlbnQgKmtldmVudCwgKmxhc3Q7DQorDQorCS8qIGRyb3AgdGhp cyBldmVudCBpZiBpdCBpcyBhIGR1cGUgb2YgdGhlIHByZXZpb3VzICovDQorCWxhc3QgPSBpbm90 aWZ5X2Rldl9nZXRfZXZlbnQoZGV2KTsNCisJaWYgKGRldi0+ZXZlbnRfY291bnQgJiYgbGFzdC0+ ZXZlbnQubWFzayA9PSBtYXNrICYmDQorCQkJbGFzdC0+ZXZlbnQud2QgPT0gd2F0Y2gtPndkKSB7 DQorCQljb25zdCBjaGFyICpsYXN0bmFtZSA9IGxhc3QtPmZpbGVuYW1lOw0KKw0KKwkJaWYgKCFm aWxlbmFtZSAmJiAhbGFzdG5hbWUpDQorCQkJcmV0dXJuOw0KKwkJaWYgKGZpbGVuYW1lICYmIGxh c3RuYW1lICYmICFzdHJjbXAobGFzdG5hbWUsIGZpbGVuYW1lKSkNCisJCQlyZXR1cm47DQorCX0N CisNCisJLyoNCisJICogdGhlIHF1ZXVlIGhhcyBhbHJlYWR5IG92ZXJmbG93ZWQgYW5kIHdlIGhh dmUgYWxyZWFkeSBzZW50IHRoZQ0KKwkgKiBRX09WRVJGTE9XIGV2ZW50DQorCSAqLw0KKwlpZiAo ZGV2LT5ldmVudF9jb3VudCA+IGRldi0+bWF4X2V2ZW50cykNCisJCXJldHVybjsNCisNCisJLyog dGhlIHF1ZXVlIGhhcyBqdXN0IG92ZXJmbG93ZWQgYW5kIHdlIG5lZWQgdG8gbm90aWZ5IHVzZXIg c3BhY2UgKi8NCisJaWYgKGRldi0+ZXZlbnRfY291bnQgPT0gZGV2LT5tYXhfZXZlbnRzKSB7DQor CQlrZXZlbnQgPSBrZXJuZWxfZXZlbnQoLTEsIElOX1FfT1ZFUkZMT1csIGNvb2tpZSwgTlVMTCk7 DQorCQlnb3RvIGFkZF9ldmVudF90b19xdWV1ZTsNCisJfQ0KKw0KKwlrZXZlbnQgPSBrZXJuZWxf ZXZlbnQod2F0Y2gtPndkLCBtYXNrLCBjb29raWUsIGZpbGVuYW1lKTsNCisNCithZGRfZXZlbnRf dG9fcXVldWU6DQorCWlmICgha2V2ZW50KQ0KKwkJcmV0dXJuOw0KKw0KKwkvKiBxdWV1ZSB0aGUg ZXZlbnQgYW5kIHdha2UgdXAgYW55b25lIHdhaXRpbmcgKi8NCisJZGV2LT5ldmVudF9jb3VudCsr Ow0KKwlkZXYtPnF1ZXVlX3NpemUgKz0gc2l6ZW9mKHN0cnVjdCBpbm90aWZ5X2V2ZW50KSArIGtl dmVudC0+ZXZlbnQubGVuOw0KKwlsaXN0X2FkZF90YWlsKCZrZXZlbnQtPmxpc3QsICZkZXYtPmV2 ZW50cyk7DQorCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0KTsNCit9DQorDQorc3Rh dGljIGlubGluZSBpbnQgaW5vdGlmeV9kZXZfaGFzX2V2ZW50cyhzdHJ1Y3QgaW5vdGlmeV9kZXZp Y2UgKmRldikNCit7DQorCXJldHVybiAhbGlzdF9lbXB0eSgmZGV2LT5ldmVudHMpOw0KK30NCisN CisvKg0KKyAqIGlub3RpZnlfZGV2X2V2ZW50X2RlcXVldWUgLSBkZXN0cm95IGFuIGV2ZW50IG9u IHRoZSBnaXZlbiBkZXZpY2UNCisgKg0KKyAqIENhbGxlciBtdXN0IGhvbGQgZGV2LT5sb2NrLg0K KyAqLw0KK3N0YXRpYyB2b2lkIGlub3RpZnlfZGV2X2V2ZW50X2RlcXVldWUoc3RydWN0IGlub3Rp ZnlfZGV2aWNlICpkZXYpDQorew0KKwlzdHJ1Y3QgaW5vdGlmeV9rZXJuZWxfZXZlbnQgKmtldmVu dDsNCisNCisJaWYgKCFpbm90aWZ5X2Rldl9oYXNfZXZlbnRzKGRldikpDQorCQlyZXR1cm47DQor DQorCWtldmVudCA9IGlub3RpZnlfZGV2X2dldF9ldmVudChkZXYpOw0KKwlsaXN0X2RlbF9pbml0 KCZrZXZlbnQtPmxpc3QpOw0KKwlpZiAoa2V2ZW50LT5maWxlbmFtZSkNCisJCWtmcmVlKGtldmVu dC0+ZmlsZW5hbWUpOw0KKw0KKwlkZXYtPmV2ZW50X2NvdW50LS07DQorCWRldi0+cXVldWVfc2l6 ZSAtPSBzaXplb2Yoc3RydWN0IGlub3RpZnlfZXZlbnQpICsga2V2ZW50LT5ldmVudC5sZW47CQ0K Kw0KKwlrbWVtX2NhY2hlX2ZyZWUoZXZlbnRfY2FjaGVwLCBrZXZlbnQpOw0KK30NCisNCisvKg0K KyAqIGlub3RpZnlfZGV2X2dldF93ZCAtIHJldHVybnMgdGhlIG5leHQgV0QgZm9yIHVzZSBieSB0 aGUgZ2l2ZW4gZGV2DQorICoNCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBzbGVlcC4NCisgKi8NCitz dGF0aWMgaW50IGlub3RpZnlfZGV2X2dldF93ZChzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldiwN CisJCQkgICAgIHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkNCit7DQorCWludCByZXQ7DQor DQorCWlmIChhdG9taWNfcmVhZCgmZGV2LT51c2VyLT5pbm90aWZ5X3dhdGNoZXMpID49DQorCQkJ c3lzZnNfYXR0cmliX21heF91c2VyX3dhdGNoZXMpDQorCQlyZXR1cm4gLUVOT1NQQzsNCisNCity ZXBlYXQ6DQorCWlmICghaWRyX3ByZV9nZXQoJmRldi0+aWRyLCBHRlBfS0VSTkVMKSkNCisJCXJl dHVybiAtRU5PU1BDOw0KKwlzcGluX2xvY2soJmRldi0+bG9jayk7DQorCXJldCA9IGlkcl9nZXRf bmV3KCZkZXYtPmlkciwgd2F0Y2gsICZ3YXRjaC0+d2QpOw0KKwlzcGluX3VubG9jaygmZGV2LT5s b2NrKTsNCisJaWYgKHJldCA9PSAtRUFHQUlOKSAvKiBtb3JlIG1lbW9yeSBpcyByZXF1aXJlZCwg dHJ5IGFnYWluICovDQorCQlnb3RvIHJlcGVhdDsNCisJZWxzZSBpZiAocmV0KSAgICAgICAvKiB0 aGUgaWRyIGlzIGZ1bGwhICovDQorCQlyZXR1cm4gLUVOT1NQQzsNCisNCisJYXRvbWljX2luYygm ZGV2LT51c2VyLT5pbm90aWZ5X3dhdGNoZXMpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorLyoN CisgKiBpbm90aWZ5X2Rldl9wdXRfd2QgLSByZWxlYXNlIHRoZSBnaXZlbiBXRCBvbiB0aGUgZ2l2 ZW4gZGV2aWNlDQorICoNCisgKiBDYWxsZXIgbXVzdCBob2xkIGRldi0+bG9jay4NCisgKi8NCitz dGF0aWMgaW50IGlub3RpZnlfZGV2X3B1dF93ZChzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldiwg czMyIHdkKQ0KK3sNCisJaWYgKCFkZXYgfHwgd2QgPCAwKQ0KKwkJcmV0dXJuIC0xOw0KKw0KKwlh dG9taWNfZGVjKCZkZXYtPnVzZXItPmlub3RpZnlfd2F0Y2hlcyk7DQorCWlkcl9yZW1vdmUoJmRl di0+aWRyLCB3ZCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCisvKg0KKyAqIGNyZWF0ZV93YXRj aCAtIGNyZWF0ZXMgYSB3YXRjaCBvbiB0aGUgZ2l2ZW4gZGV2aWNlLg0KKyAqDQorICogR3JhYnMg ZGV2LT5sb2NrLCBzbyB0aGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgaXQuDQorICovDQorc3RhdGlj IHN0cnVjdCBpbm90aWZ5X3dhdGNoICpjcmVhdGVfd2F0Y2goc3RydWN0IGlub3RpZnlfZGV2aWNl ICpkZXYsDQorCQkJCQkgIHUzMiBtYXNrLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQ0KK3sNCisJc3Ry dWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoOw0KKw0KKwl3YXRjaCA9IGttZW1fY2FjaGVfYWxsb2Mo d2F0Y2hfY2FjaGVwLCBHRlBfS0VSTkVMKTsNCisJaWYgKCF3YXRjaCkNCisJCXJldHVybiBOVUxM Ow0KKw0KKwl3YXRjaC0+bWFzayA9IG1hc2s7DQorCXdhdGNoLT5pbm9kZSA9IGlub2RlOw0KKwl3 YXRjaC0+ZGV2ID0gZGV2Ow0KKwlJTklUX0xJU1RfSEVBRCgmd2F0Y2gtPmRfbGlzdCk7DQorCUlO SVRfTElTVF9IRUFEKCZ3YXRjaC0+aV9saXN0KTsNCisNCisJaWYgKGlub3RpZnlfZGV2X2dldF93 ZChkZXYsIHdhdGNoKSkgew0KKwkJa21lbV9jYWNoZV9mcmVlKHdhdGNoX2NhY2hlcCwgd2F0Y2gp Ow0KKwkJcmV0dXJuIE5VTEw7DQorCX0NCisNCisJcmV0dXJuIHdhdGNoOw0KK30NCisNCisvKg0K KyAqIGRlbGV0ZV93YXRjaCAtIHJlbW92ZXMgdGhlIGdpdmVuICd3YXRjaCcgZnJvbSB0aGUgZ2l2 ZW4gJ2RldicNCisgKg0KKyAqIENhbGxlciBtdXN0IGhvbGQgZGV2LT5sb2NrLg0KKyAqLw0KK3N0 YXRpYyB2b2lkIGRlbGV0ZV93YXRjaChzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldiwNCisJCQkg c3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQ0KK3sNCisJaW5vdGlmeV9kZXZfcHV0X3dkKGRl diwgd2F0Y2gtPndkKTsNCisJa21lbV9jYWNoZV9mcmVlKHdhdGNoX2NhY2hlcCwgd2F0Y2gpOw0K K30NCisNCisvKg0KKyAqIGlub3RpZnlfZmluZF9kZXYgLSBmaW5kIHRoZSB3YXRjaCBhc3NvY2lh dGVkIHdpdGggdGhlIGdpdmVuIGlub2RlIGFuZCBkZXYNCisgKg0KKyAqIENhbGxlciBtdXN0IGhv bGQgZGV2LT5sb2NrLg0KKyAqIEZJWE1FOiBOZWVkcyBpbm90aWZ5X2RhdGEtPmxvY2sgdG9vLiAg RG9uJ3QgbmVlZCBkZXYtPmxvY2ssIGp1c3QgcGluIGl0Lg0KKyAqLw0KK3N0YXRpYyBzdHJ1Y3Qg aW5vdGlmeV93YXRjaCAqaW5vZGVfZmluZF9kZXYoc3RydWN0IGlub2RlICppbm9kZSwNCisJCQkJ CSAgICBzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldikNCit7DQorCXN0cnVjdCBpbm90aWZ5X3dh dGNoICp3YXRjaDsNCisNCisJaWYgKCFpbm9kZS0+aW5vdGlmeV9kYXRhKQ0KKwkJcmV0dXJuIE5V TEw7DQorDQorCWxpc3RfZm9yX2VhY2hfZW50cnkod2F0Y2gsICZpbm9kZS0+aW5vdGlmeV9kYXRh LT53YXRjaGVzLCBpX2xpc3QpIHsNCisJCWlmICh3YXRjaC0+ZGV2ID09IGRldikNCisJCQlyZXR1 cm4gd2F0Y2g7DQorCX0NCisNCisJcmV0dXJuIE5VTEw7DQorfQ0KKw0KKy8qDQorICogZGV2X2Zp bmRfd2QgLSBnaXZlbiBhIChkZXYsd2QpIHBhaXIsIHJldHVybnMgdGhlIG1hdGNoaW5nIGlub3Rp Znlfd2F0Y2hlcg0KKyAqDQorICogUmV0dXJucyB0aGUgcmVzdWx0cyBvZiBsb29raW5nIHVwIChk ZXYsd2QpIGluIHRoZSBpZHIgbGF5ZXIuICBOVUxMIGlzDQorICogcmV0dXJuZWQgb24gZXJyb3Iu DQorICoNCisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBkZXYtPmxvY2suDQorICovDQorc3RhdGlj IGlubGluZSBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqZGV2X2ZpbmRfd2Qoc3RydWN0IGlub3RpZnlf ZGV2aWNlICpkZXYsDQorCQkJCQkJdTMyIHdkKQ0KK3sNCisJcmV0dXJuIGlkcl9maW5kKCZkZXYt Pmlkciwgd2QpOw0KK30NCisNCitzdGF0aWMgaW50IGlub3RpZnlfZGV2X2lzX3dhdGNoaW5nX2lu b2RlKHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2LA0KKwkJCQkJIHN0cnVjdCBpbm9kZSAqaW5v ZGUpDQorew0KKwlzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2g7DQorDQorCWxpc3RfZm9yX2Vh Y2hfZW50cnkod2F0Y2gsICZkZXYtPndhdGNoZXMsIGRfbGlzdCkgew0KKwkJaWYgKHdhdGNoLT5p bm9kZSA9PSBpbm9kZSkNCisJCQlyZXR1cm4gMTsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQor DQorLyoNCisgKiBpbm90aWZ5X2Rldl9hZGRfd2F0Y2hlciAtIGFkZCB0aGUgZ2l2ZW4gd2F0Y2hl ciB0byB0aGUgZ2l2ZW4gZGV2aWNlIGluc3RhbmNlDQorICoNCisgKiBDYWxsZXIgbXVzdCBob2xk IGRldi0+bG9jay4NCisgKi8NCitzdGF0aWMgaW50IGlub3RpZnlfZGV2X2FkZF93YXRjaChzdHJ1 Y3QgaW5vdGlmeV9kZXZpY2UgKmRldiwNCisJCQkJIHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRj aCkNCit7DQorCWlmICghZGV2IHx8ICF3YXRjaCkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwls aXN0X2FkZCgmd2F0Y2gtPmRfbGlzdCwgJmRldi0+d2F0Y2hlcyk7DQorCXJldHVybiAwOw0KK30N CisNCisvKg0KKyAqIGlub3RpZnlfZGV2X3JtX3dhdGNoIC0gcmVtb3ZlIHRoZSBnaXZlbiB3YXRj aCBmcm9tIHRoZSBnaXZlbiBkZXZpY2UNCisgKg0KKyAqIENhbGxlciBtdXN0IGhvbGQgZGV2LT5s b2NrIGJlY2F1c2Ugd2UgY2FsbCBpbm90aWZ5X2Rldl9xdWV1ZV9ldmVudCgpLg0KKyAqLw0KK3N0 YXRpYyBpbnQgaW5vdGlmeV9kZXZfcm1fd2F0Y2goc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYs DQorCQkJCXN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkNCit7DQorCWlmICghd2F0Y2gpDQor CQlyZXR1cm4gLUVJTlZBTDsNCisNCisJaW5vdGlmeV9kZXZfcXVldWVfZXZlbnQoZGV2LCB3YXRj aCwgSU5fSUdOT1JFRCwgMCwgTlVMTCk7DQorCWxpc3RfZGVsX2luaXQoJndhdGNoLT5kX2xpc3Qp Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorLyoNCisgKiBpbm9kZV9hZGRfd2F0Y2ggLSBhZGQg YSB3YXRjaCB0byB0aGUgZ2l2ZW4gaW5vZGUNCisgKg0KKyAqIENhbGxlcnMgbXVzdCBob2xkIGRl di0+bG9jaywgYmVjYXVzZSB3ZSBjYWxsIGlub2RlX2ZpbmRfZGV2KCkuDQorICovDQorc3RhdGlj IGludCBpbm9kZV9hZGRfd2F0Y2goc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub3RpZnlf d2F0Y2ggKndhdGNoKQ0KK3sNCisJaW50IHJldDsNCisNCisJaWYgKCFpbm9kZSB8fCAhd2F0Y2gp DQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsNCisJ aWYgKCFpbm9kZS0+aW5vdGlmeV9kYXRhKSB7DQorCQkvKiBpbm90aWZ5X2RhdGEgaXMgbm90IGF0 dGFjaGVkIHRvIHRoZSBpbm9kZSwgc28gYWRkIGl0ICovDQorCQlpbm9kZS0+aW5vdGlmeV9kYXRh ID0ga21lbV9jYWNoZV9hbGxvYyhpbm9kZV9kYXRhX2NhY2hlcCwNCisJCQkJCQkgICAgICAgR0ZQ X0FUT01JQyk7DQorCQlpZiAoIWlub2RlLT5pbm90aWZ5X2RhdGEpIHsNCisJCQlyZXQgPSAtRU5P TUVNOw0KKwkJCWdvdG8gb3V0X2xvY2s7DQorCQl9DQorDQorCQlhdG9taWNfc2V0KCZpbm9kZS0+ aW5vdGlmeV9kYXRhLT5jb3VudCwgMCk7DQorCQlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlub3Rp ZnlfZGF0YS0+d2F0Y2hlcyk7DQorCQlzcGluX2xvY2tfaW5pdCgmaW5vZGUtPmlub3RpZnlfZGF0 YS0+bG9jayk7DQorCX0gZWxzZSBpZiAoaW5vZGVfZmluZF9kZXYoaW5vZGUsIHdhdGNoLT5kZXYp KSB7DQorCQkvKiBhIHdhdGNoIGlzIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgKGlub2Rl LGRldikgcGFpciAqLw0KKwkJcmV0ID0gLUVJTlZBTDsNCisJCWdvdG8gb3V0X2xvY2s7DQorCX0N CisJX19nZXRfaW5vZGVfZGF0YShpbm9kZS0+aW5vdGlmeV9kYXRhKTsNCisJc3Bpbl91bmxvY2so Jmlub2RlLT5pX2xvY2spOw0KKw0KKwlsaXN0X2FkZCgmd2F0Y2gtPmlfbGlzdCwgJmlub2RlLT5p bm90aWZ5X2RhdGEtPndhdGNoZXMpOw0KKw0KKwlyZXR1cm4gMDsNCitvdXRfbG9jazoNCisJc3Bp bl91bmxvY2soJmlub2RlLT5pX2xvY2spOw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMg aW50IGlub2RlX3JtX3dhdGNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsDQorCQkJICBzdHJ1Y3QgaW5v dGlmeV93YXRjaCAqd2F0Y2gpDQorew0KKwlpZiAoIWlub2RlIHx8ICF3YXRjaCB8fCAhaW5vZGUt Pmlub3RpZnlfZGF0YSkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlsaXN0X2RlbF9pbml0KCZ3 YXRjaC0+aV9saXN0KTsNCisNCisJLyogY2xlYW4gdXAgaW5vZGUtPmlub3RpZnlfZGF0YSAqLw0K KwlwdXRfaW5vZGVfZGF0YShpbm9kZSk7CQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorLyogS2Vy bmVsIEFQSSAqLw0KKw0KKy8qDQorICogaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudCAtIHF1ZXVl IGFuIGV2ZW50IHdpdGggdGhlIGdpdmVuIG1hc2ssIGNvb2tpZSwgYW5kDQorICogZmlsZW5hbWUg dG8gYW55IHdhdGNoZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBpbm9kZS4NCisgKg0KKyAq IGlub2RlIG11c3QgYmUgcGlubmVkIHByaW9yIHRvIGNhbGxpbmcuDQorICovDQordm9pZCBpbm90 aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBtYXNrLCB1MzIg Y29va2llLA0KKwkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lKQ0KK3sNCisJc3RydWN0IGlub3Rp Znlfd2F0Y2ggKndhdGNoOw0KKw0KKwlpZiAoIWlub2RlLT5pbm90aWZ5X2RhdGEpDQorCQlyZXR1 cm47DQorDQorCWxpc3RfZm9yX2VhY2hfZW50cnkod2F0Y2gsICZpbm9kZS0+aW5vdGlmeV9kYXRh LT53YXRjaGVzLCBpX2xpc3QpIHsNCisJCWlmICh3YXRjaC0+bWFzayAmIG1hc2spIHsNCisJCQlz dHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldiA9IHdhdGNoLT5kZXY7DQorCQkJc3Bpbl9sb2NrKCZk ZXYtPmxvY2spOw0KKwkJCWlub3RpZnlfZGV2X3F1ZXVlX2V2ZW50KGRldiwgd2F0Y2gsIG1hc2ss IGNvb2tpZSwgbmFtZSk7DQorCQkJc3Bpbl91bmxvY2soJmRldi0+bG9jayk7DQorCQl9DQorCX0N Cit9DQorRVhQT1JUX1NZTUJPTF9HUEwoaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudCk7DQorDQor dm9pZCBpbm90aWZ5X2RlbnRyeV9wYXJlbnRfcXVldWVfZXZlbnQoc3RydWN0IGRlbnRyeSAqZGVu dHJ5LCB1MzIgbWFzaywNCisJCQkJICAgICAgIHUzMiBjb29raWUsIGNvbnN0IGNoYXIgKmZpbGVu YW1lKQ0KK3sNCisJc3RydWN0IGRlbnRyeSAqcGFyZW50Ow0KKwlzdHJ1Y3QgaW5vZGUgKmlub2Rl Ow0KKw0KKwlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsNCisJcGFyZW50ID0gZGVudHJ5LT5k X3BhcmVudDsNCisJaW5vZGUgPSBwYXJlbnQtPmRfaW5vZGU7DQorCWlmIChpbm9kZS0+aW5vdGlm eV9kYXRhKSB7DQorCQlkZ2V0KHBhcmVudCk7DQorCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xv Y2spOw0KKwkJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgbWFzaywgY29va2llLCBm aWxlbmFtZSk7DQorCQlkcHV0KHBhcmVudCk7DQorCX0gZWxzZQ0KKwkJc3Bpbl91bmxvY2soJmRl bnRyeS0+ZF9sb2NrKTsNCit9DQorRVhQT1JUX1NZTUJPTF9HUEwoaW5vdGlmeV9kZW50cnlfcGFy ZW50X3F1ZXVlX2V2ZW50KTsNCisNCit1MzIgaW5vdGlmeV9nZXRfY29va2llKHZvaWQpDQorew0K KwlhdG9taWNfaW5jKCZpbm90aWZ5X2Nvb2tpZSk7DQorCXJldHVybiBhdG9taWNfcmVhZCgmaW5v dGlmeV9jb29raWUpOw0KK30NCitFWFBPUlRfU1lNQk9MX0dQTChpbm90aWZ5X2dldF9jb29raWUp Ow0KKw0KKy8qDQorICogQ2FsbGVyIG11c3QgaG9sZCBkZXYtPmxvY2suDQorICovDQorc3RhdGlj IHZvaWQgX19yZW1vdmVfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoLA0KKwkJCSAg IHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2KQ0KK3sNCisJc3RydWN0IGlub2RlICppbm9kZTsN CisNCisJaW5vZGUgPSB3YXRjaC0+aW5vZGU7DQorDQorCWlub2RlX3JtX3dhdGNoKGlub2RlLCB3 YXRjaCk7DQorCWlub3RpZnlfZGV2X3JtX3dhdGNoKGRldiwgd2F0Y2gpOw0KKwlkZWxldGVfd2F0 Y2goZGV2LCB3YXRjaCk7DQorDQorCWlwdXQoaW5vZGUpOw0KK30NCisNCisvKg0KKyAqIGRlc3Ry b3lfd2F0Y2ggLSByZW1vdmUgYSB3YXRjaCBmcm9tIGJvdGggdGhlIGRldmljZSBhbmQgdGhlIGlu b2RlLg0KKyAqDQorICogd2F0Y2gtPmlub2RlIG11c3QgYmUgcGlubmVkLiAgV2UgZHJvcCBhIHJl ZmVyZW5jZSBiZWZvcmUgcmV0dXJuaW5nLiAgR3JhYnMNCisgKiBkZXYtPmxvY2suDQorICovDQor c3RhdGljIHZvaWQgcmVtb3ZlX3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkNCit7 DQorCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2ID0gd2F0Y2gtPmRldjsNCisNCisJc3Bpbl9s b2NrKCZkZXYtPmxvY2spOw0KKwlfX3JlbW92ZV93YXRjaCh3YXRjaCwgZGV2KTsNCisJc3Bpbl91 bmxvY2soJmRldi0+bG9jayk7DQorfQ0KKw0KK3ZvaWQgaW5vdGlmeV9zdXBlcl9ibG9ja191bW91 bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikNCit7DQorCXN0cnVjdCBpbm9kZSAqaW5vZGU7DQor DQorCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7DQorDQorCS8qDQorCSAqIFdlIGhvbGQgdGhlIGlu b2RlX2xvY2ssIHNvIHRoZSBpbm9kZXMgYXJlIG5vdCBnb2luZyBhbnl3aGVyZSwgYW5kDQorCSAq IHdlIGdyYWIgYSByZWZlcmVuY2Ugb24gaW5vdGlmeV9kYXRhIGJlZm9yZSB3YWxraW5nIGl0cyBs aXN0IG9mDQorCSAqIHdhdGNoZXMuDQorCSAqLw0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2Rl LCAmaW5vZGVfaW5fdXNlLCBpX2xpc3QpIHsNCisJCXN0cnVjdCBpbm90aWZ5X2lub2RlX2RhdGEg Kmlub2RlX2RhdGE7DQorCQlzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2g7DQorDQorCQlpZiAo aW5vZGUtPmlfc2IgIT0gc2IpDQorCQkJY29udGludWU7DQorDQorCQlpbm9kZV9kYXRhID0gZ2V0 X2lub2RlX2RhdGEoaW5vZGUpOw0KKwkJaWYgKCFpbm9kZV9kYXRhKQ0KKwkJCWNvbnRpbnVlOw0K Kw0KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3YXRjaCwgJmlub2RlX2RhdGEtPndhdGNoZXMsIGlf bGlzdCkgew0KKwkJCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2ID0gd2F0Y2gtPmRldjsNCisJ CQlzcGluX2xvY2soJmRldi0+bG9jayk7DQorCQkJaW5vdGlmeV9kZXZfcXVldWVfZXZlbnQoZGV2 LCB3YXRjaCwgSU5fVU5NT1VOVCwgMCwNCisJCQkJCQlOVUxMKTsNCisJCQlfX3JlbW92ZV93YXRj aCh3YXRjaCwgZGV2KTsNCisJCQlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsNCisJCX0NCisJCXB1 dF9pbm9kZV9kYXRhKGlub2RlKTsNCisJfQ0KKw0KKwlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7 DQorfQ0KK0VYUE9SVF9TWU1CT0xfR1BMKGlub3RpZnlfc3VwZXJfYmxvY2tfdW1vdW50KTsNCisN CisvKg0KKyAqIGlub3RpZnlfaW5vZGVfaXNfZGVhZCAtIGFuIGlub2RlIGhhcyBiZWVuIGRlbGV0 ZWQsIGNsZWFudXAgYW55IHdhdGNoZXMNCisgKi8NCit2b2lkIGlub3RpZnlfaW5vZGVfaXNfZGVh ZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQ0KK3sNCisJc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNo LCAqbmV4dDsNCisJc3RydWN0IGlub3RpZnlfaW5vZGVfZGF0YSAqZGF0YTsNCisNCisJZGF0YSA9 IGdldF9pbm9kZV9kYXRhKGlub2RlKTsNCisJaWYgKCFkYXRhKQ0KKwkJcmV0dXJuOw0KKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2F0Y2gsIG5leHQsICZkYXRhLT53YXRjaGVzLCBpX2xpc3Qp DQorCQlyZW1vdmVfd2F0Y2god2F0Y2gpOw0KKwlwdXRfaW5vZGVfZGF0YShpbm9kZSk7DQorfQ0K K0VYUE9SVF9TWU1CT0xfR1BMKGlub3RpZnlfaW5vZGVfaXNfZGVhZCk7DQorDQorLyogVGhlIGRy aXZlciBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYmVsb3cgKi8NCisNCitzdGF0aWMgdW5zaWdu ZWQgaW50IGlub3RpZnlfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkN Cit7DQorICAgICAgICBzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldjsNCisNCisgICAgICAgIGRl diA9IGZpbGUtPnByaXZhdGVfZGF0YTsNCisNCisgICAgICAgIHBvbGxfd2FpdChmaWxlLCAmZGV2 LT53YWl0LCB3YWl0KTsNCisNCisgICAgICAgIGlmIChpbm90aWZ5X2Rldl9oYXNfZXZlbnRzKGRl dikpDQorICAgICAgICAgICAgICAgIHJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOw0KKw0KKyAg ICAgICAgcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBzc2l6ZV90IGlub3RpZnlfcmVhZChzdHJ1 Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwNCisJCQkgICAgc2l6ZV90IGNvdW50LCBs b2ZmX3QgKnBvcykNCit7DQorCXNpemVfdCBldmVudF9zaXplOw0KKwlzdHJ1Y3QgaW5vdGlmeV9k ZXZpY2UgKmRldjsNCisJY2hhciBfX3VzZXIgKnN0YXJ0Ow0KKwlERUNMQVJFX1dBSVRRVUVVRSh3 YWl0LCBjdXJyZW50KTsNCisNCisJc3RhcnQgPSBidWY7DQorCWRldiA9IGZpbGUtPnByaXZhdGVf ZGF0YTsNCisNCisJLyogV2Ugb25seSBoYW5kIG91dCBmdWxsIGlub3RpZnkgZXZlbnRzICovDQor CWV2ZW50X3NpemUgPSBzaXplb2Yoc3RydWN0IGlub3RpZnlfZXZlbnQpOw0KKwlpZiAoY291bnQg PCBldmVudF9zaXplKQ0KKwkJcmV0dXJuIDA7DQorDQorCXdoaWxlICgxKSB7DQorCQlpbnQgaGFz X2V2ZW50czsNCisNCisJCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsNCisJCWhhc19ldmVudHMgPSBp bm90aWZ5X2Rldl9oYXNfZXZlbnRzKGRldik7DQorCQlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsN CisJCWlmIChoYXNfZXZlbnRzKQ0KKwkJCWJyZWFrOw0KKw0KKwkJaWYgKGZpbGUtPmZfZmxhZ3Mg JiBPX05PTkJMT0NLKQ0KKwkJCXJldHVybiAtRUFHQUlOOw0KKw0KKwkJaWYgKHNpZ25hbF9wZW5k aW5nKGN1cnJlbnQpKQ0KKwkJCXJldHVybiAtRUlOVFI7DQorDQorCQlhZGRfd2FpdF9xdWV1ZSgm ZGV2LT53YWl0LCAmd2FpdCk7DQorCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElC TEUpOw0KKw0KKwkJc2NoZWR1bGUoKTsNCisNCisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVO TklORyk7CQkNCisJCXJlbW92ZV93YWl0X3F1ZXVlKCZkZXYtPndhaXQsICZ3YWl0KTsNCisJfQ0K Kw0KKwl3aGlsZSAoY291bnQgPj0gZXZlbnRfc2l6ZSkgew0KKwkJc3RydWN0IGlub3RpZnlfa2Vy bmVsX2V2ZW50ICprZXZlbnQ7DQorDQorCQlzcGluX2xvY2soJmRldi0+bG9jayk7DQorCQlpZiAo IWlub3RpZnlfZGV2X2hhc19ldmVudHMoZGV2KSkgew0KKwkJCXNwaW5fdW5sb2NrKCZkZXYtPmxv Y2spOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKwkJa2V2ZW50ID0gaW5vdGlmeV9kZXZfZ2V0X2V2ZW50 KGRldik7DQorCQlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsJCQ0KKw0KKwkJLyogV2UgY2FuJ3Qg c2VuZCB0aGlzIGV2ZW50LCBub3QgZW5vdWdoIHNwYWNlIGluIHRoZSBidWZmZXIgKi8NCisJCWlm IChldmVudF9zaXplICsga2V2ZW50LT5ldmVudC5sZW4gPiBjb3VudCkNCisJCQlicmVhazsNCisN CisJCS8qIENvcHkgdGhlIGVudGlyZSBldmVudCBleGNlcHQgdGhlIHN0cmluZyB0byB1c2VyIHNw YWNlICovDQorCQlpZiAoY29weV90b191c2VyKGJ1ZiwgJmtldmVudC0+ZXZlbnQsIGV2ZW50X3Np emUpKSANCisJCQlyZXR1cm4gLUVGQVVMVDsNCisNCisJCWJ1ZiArPSBldmVudF9zaXplOw0KKwkJ Y291bnQgLT0gZXZlbnRfc2l6ZTsNCisNCisJCS8qIENvcHkgdGhlIGZpbGVuYW1lIHRvIHVzZXIg c3BhY2UgKi8NCisJCWlmIChrZXZlbnQtPmZpbGVuYW1lKSB7DQorCQkJaWYgKGNvcHlfdG9fdXNl cihidWYsIGtldmVudC0+ZmlsZW5hbWUsDQorCQkJCQkga2V2ZW50LT5ldmVudC5sZW4pKQ0KKwkJ CQlyZXR1cm4gLUVGQVVMVDsNCisJCQlidWYgKz0ga2V2ZW50LT5ldmVudC5sZW47DQorCQkJY291 bnQgLT0ga2V2ZW50LT5ldmVudC5sZW47DQorCQl9DQorDQorCQlzcGluX2xvY2soJmRldi0+bG9j ayk7DQorCQlpbm90aWZ5X2Rldl9ldmVudF9kZXF1ZXVlKGRldik7DQorCQlzcGluX3VubG9jaygm ZGV2LT5sb2NrKTsNCisJfQ0KKw0KKwlyZXR1cm4gYnVmIC0gc3RhcnQ7DQorfQ0KKw0KK3N0YXRp YyBpbnQgaW5vdGlmeV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxl KQ0KK3sNCisJc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXY7DQorCXN0cnVjdCB1c2VyX3N0cnVj dCAqdXNlcjsNCisJaW50IHJldDsNCisNCisJdXNlciA9IGdldF91aWQoY3VycmVudC0+dXNlcik7 DQorDQorCWlmIChhdG9taWNfcmVhZCgmdXNlci0+aW5vdGlmeV9kZXZzKSA+PSBzeXNmc19hdHRy aWJfbWF4X3VzZXJfZGV2aWNlcykgew0KKwkJcmV0ID0gLUVNRklMRTsNCisJCWdvdG8gb3V0X2Vy cjsNCisJfQ0KKw0KKwlkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9kZXZpY2Up LCBHRlBfS0VSTkVMKTsNCisJaWYgKCFkZXYpIHsNCisJCXJldCA9IC1FTk9NRU07DQorCQlnb3Rv IG91dF9lcnI7DQorCX0NCisNCisJYXRvbWljX2luYygmY3VycmVudC0+dXNlci0+aW5vdGlmeV9k ZXZzKTsJDQorDQorCWlkcl9pbml0KCZkZXYtPmlkcik7DQorDQorCUlOSVRfTElTVF9IRUFEKCZk ZXYtPmV2ZW50cyk7DQorCUlOSVRfTElTVF9IRUFEKCZkZXYtPndhdGNoZXMpOw0KKwlpbml0X3dh aXRxdWV1ZV9oZWFkKCZkZXYtPndhaXQpOw0KKw0KKwlkZXYtPmV2ZW50X2NvdW50ID0gMDsNCisJ ZGV2LT5xdWV1ZV9zaXplID0gMDsNCisJZGV2LT5tYXhfZXZlbnRzID0gc3lzZnNfYXR0cmliX21h eF9xdWV1ZWRfZXZlbnRzOw0KKwlkZXYtPnVzZXIgPSB1c2VyOw0KKwlzcGluX2xvY2tfaW5pdCgm ZGV2LT5sb2NrKTsNCisNCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2Ow0KKw0KKwlyZXR1cm4g MDsNCitvdXRfZXJyOg0KKwlmcmVlX3VpZChjdXJyZW50LT51c2VyKTsNCisJcmV0dXJuIHJldDsN Cit9DQorDQorLyoNCisgKiBpbm90aWZ5X3JlbGVhc2VfYWxsX3dhdGNoZXMgLSBkZXN0cm95IGFs bCB3YXRjaGVzIG9uIGEgZ2l2ZW4gZGV2aWNlDQorICoNCisgKiBGSVhNRTogV2UgbmVlZCBhIGxv Y2sgb24gdGhlIHdhdGNoIGhlcmUuDQorICovDQorc3RhdGljIHZvaWQgaW5vdGlmeV9yZWxlYXNl X2FsbF93YXRjaGVzKHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2KQ0KK3sNCisJc3RydWN0IGlu b3RpZnlfd2F0Y2ggKndhdGNoLCAqbmV4dDsNCisNCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KHdhdGNoLCBuZXh0LCAmZGV2LT53YXRjaGVzLCBkX2xpc3QpDQorCQlyZW1vdmVfd2F0Y2god2F0 Y2gpOw0KK30NCisNCisvKg0KKyAqIGlub3RpZnlfcmVsZWFzZV9hbGxfZXZlbnRzIC0gZGVzdHJv eSBhbGwgb2YgdGhlIGV2ZW50cyBvbiBhIGdpdmVuIGRldmljZQ0KKyAqLw0KK3N0YXRpYyB2b2lk IGlub3RpZnlfcmVsZWFzZV9hbGxfZXZlbnRzKHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2KQ0K K3sNCisJc3Bpbl9sb2NrKCZkZXYtPmxvY2spOw0KKwl3aGlsZSAoaW5vdGlmeV9kZXZfaGFzX2V2 ZW50cyhkZXYpKQ0KKwkJaW5vdGlmeV9kZXZfZXZlbnRfZGVxdWV1ZShkZXYpOw0KKwlzcGluX3Vu bG9jaygmZGV2LT5sb2NrKTsNCit9DQorDQorc3RhdGljIGludCBpbm90aWZ5X3JlbGVhc2Uoc3Ry dWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpDQorew0KKwlzdHJ1Y3QgaW5vdGlm eV9kZXZpY2UgKmRldjsNCisNCisJZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOw0KKw0KKwlpbm90 aWZ5X3JlbGVhc2VfYWxsX3dhdGNoZXMoZGV2KTsNCisJaW5vdGlmeV9yZWxlYXNlX2FsbF9ldmVu dHMoZGV2KTsNCisNCisJYXRvbWljX2RlYygmZGV2LT51c2VyLT5pbm90aWZ5X2RldnMpOw0KKwlm cmVlX3VpZChkZXYtPnVzZXIpOw0KKw0KKwlrZnJlZShkZXYpOw0KKw0KKwlyZXR1cm4gMDsNCit9 DQorDQorc3RhdGljIGludCBpbm90aWZ5X2FkZF93YXRjaChzdHJ1Y3QgaW5vdGlmeV9kZXZpY2Ug KmRldiwNCisJCQkgICAgIHN0cnVjdCBpbm90aWZ5X3dhdGNoX3JlcXVlc3QgKnJlcXVlc3QpDQor ew0KKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOw0KKwlzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2g7 DQorCXN0cnVjdCBuYW1laWRhdGEgbmQ7DQorCWludCByZXQ7DQorDQorCXJldCA9IGZpbmRfaW5v ZGUoKGNvbnN0IGNoYXIgX191c2VyKikgcmVxdWVzdC0+bmFtZSwgJm5kKTsNCisJaWYgKHJldCkN CisJCXJldHVybiByZXQ7DQorDQorCS8qIGhlbGQgaW4gcGxhY2UgYnkgcmVmZXJlbmNlcyBpbiBu ZCAqLw0KKwlpbm9kZSA9IG5kLmRlbnRyeS0+ZF9pbm9kZTsNCisNCisJc3Bpbl9sb2NrKCZkZXYt PmxvY2spOw0KKw0KKwkvKg0KKwkgKiBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugb2YgcmUtYWRkaW5n IGEgZGlyZWN0b3J5IHdlIGFyZSBhbHJlYWR5DQorCSAqIHdhdGNoaW5nLCB3ZSBqdXN0IHVwZGF0 ZSB0aGUgbWFzayBhbmQgcmV0dXJuIDANCisJICovDQorCWlmIChpbm90aWZ5X2Rldl9pc193YXRj aGluZ19pbm9kZShkZXYsIGlub2RlKSkgew0KKwkJc3RydWN0IGlub3RpZnlfd2F0Y2ggKm93YXRj aDsJLyogdGhlIG9sZCB3YXRjaCAqLw0KKw0KKwkJb3dhdGNoID0gaW5vZGVfZmluZF9kZXYoaW5v ZGUsIGRldik7DQorCQlvd2F0Y2gtPm1hc2sgPSByZXF1ZXN0LT5tYXNrOw0KKwkJc3Bpbl91bmxv Y2soJmRldi0+bG9jayk7DQorCQlwYXRoX3JlbGVhc2UoJm5kKTsNCisNCisJCXJldHVybiBvd2F0 Y2gtPndkOw0KKwl9DQorDQorCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOw0KKw0KKwl3YXRjaCA9 IGNyZWF0ZV93YXRjaChkZXYsIHJlcXVlc3QtPm1hc2ssIGlub2RlKTsNCisJaWYgKCF3YXRjaCkg ew0KKwkJcGF0aF9yZWxlYXNlKCZuZCk7DQorCQlyZXR1cm4gLUVOT1NQQzsNCisJfQ0KKw0KKwlz cGluX2xvY2soJmRldi0+bG9jayk7DQorDQorCS8qIFdlIGNhbid0IGFkZCBhbnltb3JlIHdhdGNo ZXMgdG8gdGhpcyBkZXZpY2UgKi8NCisJaWYgKGlub3RpZnlfZGV2X2FkZF93YXRjaChkZXYsIHdh dGNoKSkgew0KKwkJZGVsZXRlX3dhdGNoKGRldiwgd2F0Y2gpOw0KKwkJc3Bpbl91bmxvY2soJmRl di0+bG9jayk7DQorCQlwYXRoX3JlbGVhc2UoJm5kKTsNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9 DQorDQorCXJldCA9IGlub2RlX2FkZF93YXRjaChpbm9kZSwgd2F0Y2gpOw0KKwlpZiAocmV0IDwg MCkgew0KKwkJbGlzdF9kZWxfaW5pdCgmd2F0Y2gtPmRfbGlzdCk7DQorCQlkZWxldGVfd2F0Y2go ZGV2LCB3YXRjaCk7DQorCQlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsNCisJCXBhdGhfcmVsZWFz ZSgmbmQpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlzcGluX3VubG9jaygmZGV2LT5sb2Nr KTsNCisNCisJLyoNCisJICogRGVtb3RlIHRoZSByZWZlcmVuY2UgdG8gbmFtZWlkYXRhIHRvIGEg cmVmZXJlbmNlIHRvIHRoZSBpbm9kZSBoZWxkDQorCSAqIGJ5IHRoZSB3YXRjaC4NCisJICovDQor CXNwaW5fbG9jaygmaW5vZGVfbG9jayk7DQorCV9faWdldChpbm9kZSk7DQorCXNwaW5fdW5sb2Nr KCZpbm9kZV9sb2NrKTsNCisJcGF0aF9yZWxlYXNlKCZuZCk7DQorDQorCXJldHVybiB3YXRjaC0+ d2Q7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaW5vdGlmeV9pZ25vcmUoc3RydWN0IGlub3RpZnlfZGV2 aWNlICpkZXYsIHMzMiB3ZCkNCit7DQorCXN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaDsNCisJ aW50IHJldCA9IDA7DQorDQorCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsNCisJd2F0Y2ggPSBkZXZf ZmluZF93ZChkZXYsIHdkKTsNCisJc3Bpbl91bmxvY2soJmRldi0+bG9jayk7DQorCWlmICghd2F0 Y2gpIHsNCisJCXJldCA9IC1FSU5WQUw7DQorCQlnb3RvIG91dDsNCisJfQ0KKwlfX3JlbW92ZV93 YXRjaCh3YXRjaCwgZGV2KTsNCisNCitvdXQ6DQorCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOw0K KwlyZXR1cm4gcmV0Ow0KK30NCisNCisvKg0KKyAqIGlub3RpZnlfaW9jdGwoKSAtIG91ciBkZXZp Y2UgZmlsZSdzIGlvY3RsIG1ldGhvZA0KKyAqDQorICogVGhlIFZGUyBzZXJpYWxpemVzIGFsbCBv ZiBvdXIgY2FsbHMgdmlhIHRoZSBCS0wgYW5kIHdlIHJlbHkgb24gdGhhdC4gIFdlDQorICogY291 bGQsIGFsdGVybmF0aXZlbHksIGdyYWIgZGV2LT5sb2NrLiAgUmlnaHQgbm93IGxvd2VyIGxldmVs cyBncmFiIHRoYXQNCisgKiB3aGVyZSBuZWVkZWQuDQorICovDQorc3RhdGljIGludCBpbm90aWZ5 X2lvY3RsKHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBmaWxlICpmcCwNCisJCQkgdW5zaWduZWQg aW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpDQorew0KKwlzdHJ1Y3QgaW5vdGlmeV9kZXZpY2Ug KmRldjsNCisJc3RydWN0IGlub3RpZnlfd2F0Y2hfcmVxdWVzdCByZXF1ZXN0Ow0KKwl2b2lkIF9f dXNlciAqcDsNCisJczMyIHdkOw0KKw0KKwlkZXYgPSBmcC0+cHJpdmF0ZV9kYXRhOw0KKwlwID0g KHZvaWQgX191c2VyICopIGFyZzsNCisNCisJc3dpdGNoIChjbWQpIHsNCisJY2FzZSBJTk9USUZZ X1dBVENIOg0KKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZyZXF1ZXN0LCBwLCBzaXplb2YgKHJlcXVl c3QpKSkNCisJCQlyZXR1cm4gLUVGQVVMVDsNCisJCXJldHVybiBpbm90aWZ5X2FkZF93YXRjaChk ZXYsICZyZXF1ZXN0KTsNCisJY2FzZSBJTk9USUZZX0lHTk9SRToNCisJCWlmIChjb3B5X2Zyb21f dXNlcigmd2QsIHAsIHNpemVvZiAod2QpKSkNCisJCQlyZXR1cm4gLUVGQVVMVDsNCisJCXJldHVy biBpbm90aWZ5X2lnbm9yZShkZXYsIHdkKTsNCisJY2FzZSBGSU9OUkVBRDoNCisJCXJldHVybiBw dXRfdXNlcihkZXYtPnF1ZXVlX3NpemUsIChpbnQgX191c2VyICopIHApOw0KKwlkZWZhdWx0Og0K KwkJcmV0dXJuIC1FTk9UVFk7DQorCX0NCit9DQorDQorc3RhdGljIHN0cnVjdCBmaWxlX29wZXJh dGlvbnMgaW5vdGlmeV9mb3BzID0gew0KKwkub3duZXIJCT0gVEhJU19NT0RVTEUsDQorCS5wb2xs CQk9IGlub3RpZnlfcG9sbCwNCisJLnJlYWQJCT0gaW5vdGlmeV9yZWFkLA0KKwkub3BlbgkJPSBp bm90aWZ5X29wZW4sDQorCS5yZWxlYXNlCT0gaW5vdGlmeV9yZWxlYXNlLA0KKwkuaW9jdGwJCT0g aW5vdGlmeV9pb2N0bCwNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBpbm90aWZ5 X2RldmljZSA9IHsNCisJLm1pbm9yICA9IE1JU0NfRFlOQU1JQ19NSU5PUiwNCisJLm5hbWUJPSAi aW5vdGlmeSIsDQorCS5mb3BzCT0gJmlub3RpZnlfZm9wcywNCit9Ow0KKw0KK3N0YXRpYyBpbnQg X19pbml0IGlub3RpZnlfaW5pdCh2b2lkKQ0KK3sNCisJc3RydWN0IGNsYXNzX2RldmljZSAqY2xh c3M7DQorCWludCByZXQ7DQorDQorCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmlub3RpZnlfZGV2aWNl KTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCXN5c2ZzX2F0dHJpYl9tYXhfcXVl dWVkX2V2ZW50cyA9IDUxMjsNCisJc3lzZnNfYXR0cmliX21heF91c2VyX2RldmljZXMgPSA2NDsN CisJc3lzZnNfYXR0cmliX21heF91c2VyX3dhdGNoZXMgPSAxNjM4NDsNCisNCisJY2xhc3MgPSBp bm90aWZ5X2RldmljZS5jbGFzczsNCisJY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKGNsYXNzLCAm Y2xhc3NfZGV2aWNlX2F0dHJfbWF4X3F1ZXVlZF9ldmVudHMpOw0KKwljbGFzc19kZXZpY2VfY3Jl YXRlX2ZpbGUoY2xhc3MsICZjbGFzc19kZXZpY2VfYXR0cl9tYXhfdXNlcl9kZXZpY2VzKTsNCisJ Y2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKGNsYXNzLCAmY2xhc3NfZGV2aWNlX2F0dHJfbWF4X3Vz ZXJfd2F0Y2hlcyk7DQorDQorCWF0b21pY19zZXQoJmlub3RpZnlfY29va2llLCAwKTsNCisNCisJ d2F0Y2hfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImlub3RpZnlfd2F0Y2hfY2FjaGUiLA0K KwkJCXNpemVvZihzdHJ1Y3QgaW5vdGlmeV93YXRjaCksIDAsIFNMQUJfUEFOSUMsDQorCQkJTlVM TCwgTlVMTCk7DQorDQorCWV2ZW50X2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJpbm90aWZ5 X2V2ZW50X2NhY2hlIiwNCisJCQlzaXplb2Yoc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50KSwg MCwNCisJCQlTTEFCX1BBTklDLCBOVUxMLCBOVUxMKTsNCisNCisJaW5vZGVfZGF0YV9jYWNoZXAg PSBrbWVtX2NhY2hlX2NyZWF0ZSgiaW5vdGlmeV9pbm9kZV9kYXRhX2NhY2hlIiwNCisJCQlzaXpl b2Yoc3RydWN0IGlub3RpZnlfaW5vZGVfZGF0YSksIDAsIFNMQUJfUEFOSUMsDQorCQkJTlVMTCwg TlVMTCk7DQorDQorCXByaW50ayhLRVJOX0lORk8gImlub3RpZnkgZGV2aWNlIG1pbm9yPSVkXG4i LCBpbm90aWZ5X2RldmljZS5taW5vcik7DQorDQorCXJldHVybiAwOw0KK30NCisNCittb2R1bGVf aW5pdChpbm90aWZ5X2luaXQpOw0KZGlmZiAtdXJOIGxpbnV4LTIuNi4xMC9kcml2ZXJzL2NoYXIv S2NvbmZpZyBsaW51eC9kcml2ZXJzL2NoYXIvS2NvbmZpZw0KLS0tIGxpbnV4LTIuNi4xMC9kcml2 ZXJzL2NoYXIvS2NvbmZpZwkyMDA0LTEyLTI0IDE2OjMzOjQ5LjAwMDAwMDAwMCAtMDUwMA0KKysr IGxpbnV4L2RyaXZlcnMvY2hhci9LY29uZmlnCTIwMDUtMDEtMTggMTY6MTE6MDguMDAwMDAwMDAw IC0wNTAwDQpAQCAtNjIsNiArNjIsMTkgQEANCiAJZGVwZW5kcyBvbiBWVCAmJiAhUzM5MCAmJiAh VVNFUk1PREUNCiAJZGVmYXVsdCB5DQogDQorY29uZmlnIElOT1RJRlkNCisJYm9vbCAiSW5vdGlm eSBmaWxlIGNoYW5nZSBub3RpZmljYXRpb24gc3VwcG9ydCINCisJZGVmYXVsdCB5DQorCS0tLWhl bHAtLS0NCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBpbm90aWZ5IHN1cHBvcnQgYW5kIHRoZSAv ZGV2L2lub3RpZnkgY2hhcmFjdGVyDQorCSAgZGV2aWNlLiAgSW5vdGlmeSBpcyBhIGZpbGUgY2hh bmdlIG5vdGlmaWNhdGlvbiBzeXN0ZW0gYW5kIGENCisJICByZXBsYWNlbWVudCBmb3IgZG5vdGlm eS4gIElub3RpZnkgZml4ZXMgbnVtZXJvdXMgc2hvcnRjb21pbmdzIGluDQorCSAgZG5vdGlmeSBh bmQgaW50cm9kdWNlcyBzZXZlcmFsIG5ldyBmZWF0dXJlcy4gIEl0IGFsbG93cyBtb25pdG9yaW5n DQorCSAgb2YgYm90aCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdmlhIGEgc2luZ2xlIG9wZW4gZmQu ICBNdWx0aXBsZSBmaWxlDQorCSAgZXZlbnRzIGFyZSBzdXBwb3J0ZWQuDQorCSAgDQorCSAgSWYg dW5zdXJlLCBzYXkgWS4NCisNCiBjb25maWcgU0VSSUFMX05PTlNUQU5EQVJEDQogCWJvb2wgIk5v bi1zdGFuZGFyZCBzZXJpYWwgcG9ydCBzdXBwb3J0Ig0KIAktLS1oZWxwLS0tDQpkaWZmIC11ck4g bGludXgtMi42LjEwL2RyaXZlcnMvY2hhci9NYWtlZmlsZSBsaW51eC9kcml2ZXJzL2NoYXIvTWFr ZWZpbGUNCi0tLSBsaW51eC0yLjYuMTAvZHJpdmVycy9jaGFyL01ha2VmaWxlCTIwMDQtMTItMjQg MTY6MzU6MjkuMDAwMDAwMDAwIC0wNTAwDQorKysgbGludXgvZHJpdmVycy9jaGFyL01ha2VmaWxl CTIwMDUtMDEtMTggMTY6MTE6MDguMDAwMDAwMDAwIC0wNTAwDQpAQCAtOSw2ICs5LDggQEANCiAN CiBvYmoteQkgKz0gbWVtLm8gcmFuZG9tLm8gdHR5X2lvLm8gbl90dHkubyB0dHlfaW9jdGwubw0K IA0KKw0KK29iai0kKENPTkZJR19JTk9USUZZKSAgICAgICAgICAgKz0gaW5vdGlmeS5vDQogb2Jq LSQoQ09ORklHX0xFR0FDWV9QVFlTKQkrPSBwdHkubw0KIG9iai0kKENPTkZJR19VTklYOThfUFRZ UykJKz0gcHR5Lm8NCiBvYmoteQkJCQkrPSBtaXNjLm8NCmRpZmYgLXVyTiBsaW51eC0yLjYuMTAv ZHJpdmVycy9jaGFyL21pc2MuYyBsaW51eC9kcml2ZXJzL2NoYXIvbWlzYy5jDQotLS0gbGludXgt Mi42LjEwL2RyaXZlcnMvY2hhci9taXNjLmMJMjAwNC0xMi0yNCAxNjozNToyOC4wMDAwMDAwMDAg LTA1MDANCisrKyBsaW51eC9kcml2ZXJzL2NoYXIvbWlzYy5jCTIwMDUtMDEtMTggMTY6MTE6MDgu MDAwMDAwMDAwIC0wNTAwDQpAQCAtMjA3LDEwICsyMDcsOSBAQA0KIGludCBtaXNjX3JlZ2lzdGVy KHN0cnVjdCBtaXNjZGV2aWNlICogbWlzYykNCiB7DQogCXN0cnVjdCBtaXNjZGV2aWNlICpjOw0K LQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzczsNCiAJZGV2X3QgZGV2Ow0KIAlpbnQgZXJyOw0K LQkNCisNCiAJZG93bigmbWlzY19zZW0pOw0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZtaXNj X2xpc3QsIGxpc3QpIHsNCiAJCWlmIChjLT5taW5vciA9PSBtaXNjLT5taW5vcikgew0KQEAgLTIy NCw4ICsyMjMsNyBAQA0KIAkJd2hpbGUgKC0taSA+PSAwKQ0KIAkJCWlmICggKG1pc2NfbWlub3Jz W2k+PjNdICYgKDEgPDwgKGkmNykpKSA9PSAwKQ0KIAkJCQlicmVhazsNCi0JCWlmIChpPDApDQot CQl7DQorCQlpZiAoaTwwKSB7DQogCQkJdXAoJm1pc2Nfc2VtKTsNCiAJCQlyZXR1cm4gLUVCVVNZ Ow0KIAkJfQ0KQEAgLTI0MCwxMCArMjM4LDEwIEBADQogCX0NCiAJZGV2ID0gTUtERVYoTUlTQ19N QUpPUiwgbWlzYy0+bWlub3IpOw0KIA0KLQljbGFzcyA9IGNsYXNzX3NpbXBsZV9kZXZpY2VfYWRk KG1pc2NfY2xhc3MsIGRldiwNCi0JCQkJCW1pc2MtPmRldiwgbWlzYy0+bmFtZSk7DQotCWlmIChJ U19FUlIoY2xhc3MpKSB7DQotCQllcnIgPSBQVFJfRVJSKGNsYXNzKTsNCisJbWlzYy0+Y2xhc3Mg PSBjbGFzc19zaW1wbGVfZGV2aWNlX2FkZChtaXNjX2NsYXNzLCBkZXYsDQorCQkJCQkgICAgICBt aXNjLT5kZXYsIG1pc2MtPm5hbWUpOw0KKwlpZiAoSVNfRVJSKG1pc2MtPmNsYXNzKSkgew0KKwkJ ZXJyID0gUFRSX0VSUihtaXNjLT5jbGFzcyk7DQogCQlnb3RvIG91dDsNCiAJfQ0KIA0KZGlmZiAt dXJOIGxpbnV4LTIuNi4xMC9mcy9hdHRyLmMgbGludXgvZnMvYXR0ci5jDQotLS0gbGludXgtMi42 LjEwL2ZzL2F0dHIuYwkyMDA0LTEyLTI0IDE2OjM0OjAwLjAwMDAwMDAwMCAtMDUwMA0KKysrIGxp bnV4L2ZzL2F0dHIuYwkyMDA1LTAxLTMxIDE1OjUyOjM3LjAwMDAwMDAwMCAtMDUwMA0KQEAgLTEw LDcgKzEwLDcgQEANCiAjaW5jbHVkZSA8bGludXgvbW0uaD4NCiAjaW5jbHVkZSA8bGludXgvc3Ry aW5nLmg+DQogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+DQotI2luY2x1ZGUgPGxpbnV4L2Ru b3RpZnkuaD4NCisjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4NCiAjaW5jbHVkZSA8bGludXgv ZmNudGwuaD4NCiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4NCiAjaW5jbHVkZSA8bGludXgv c2VjdXJpdHkuaD4NCkBAIC0xMDMsMzEgKzEwMyw4IEBADQogb3V0Og0KIAlyZXR1cm4gZXJyb3I7 DQogfQ0KLQ0KIEVYUE9SVF9TWU1CT0woaW5vZGVfc2V0YXR0cik7DQogDQotaW50IHNldGF0dHJf bWFzayh1bnNpZ25lZCBpbnQgaWFfdmFsaWQpDQotew0KLQl1bnNpZ25lZCBsb25nIGRuX21hc2sg PSAwOw0KLQ0KLQlpZiAoaWFfdmFsaWQgJiBBVFRSX1VJRCkNCi0JCWRuX21hc2sgfD0gRE5fQVRU UklCOw0KLQlpZiAoaWFfdmFsaWQgJiBBVFRSX0dJRCkNCi0JCWRuX21hc2sgfD0gRE5fQVRUUklC Ow0KLQlpZiAoaWFfdmFsaWQgJiBBVFRSX1NJWkUpDQotCQlkbl9tYXNrIHw9IEROX01PRElGWTsN Ci0JLyogYm90aCB0aW1lcyBpbXBsaWVzIGEgdXRpbWUocykgY2FsbCAqLw0KLQlpZiAoKGlhX3Zh bGlkICYgKEFUVFJfQVRJTUV8QVRUUl9NVElNRSkpID09IChBVFRSX0FUSU1FfEFUVFJfTVRJTUUp KQ0KLQkJZG5fbWFzayB8PSBETl9BVFRSSUI7DQotCWVsc2UgaWYgKGlhX3ZhbGlkICYgQVRUUl9B VElNRSkNCi0JCWRuX21hc2sgfD0gRE5fQUNDRVNTOw0KLQllbHNlIGlmIChpYV92YWxpZCAmIEFU VFJfTVRJTUUpDQotCQlkbl9tYXNrIHw9IEROX01PRElGWTsNCi0JaWYgKGlhX3ZhbGlkICYgQVRU Ul9NT0RFKQ0KLQkJZG5fbWFzayB8PSBETl9BVFRSSUI7DQotCXJldHVybiBkbl9tYXNrOw0KLX0N Ci0NCiBpbnQgbm90aWZ5X2NoYW5nZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCBzdHJ1Y3QgaWF0 dHIgKiBhdHRyKQ0KIHsNCiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsN CkBAIC0xODMsMTEgKzE2MCwxMCBAQA0KIAkJCQllcnJvciA9IGlub2RlX3NldGF0dHIoaW5vZGUs IGF0dHIpOw0KIAkJfQ0KIAl9DQotCWlmICghZXJyb3IpIHsNCi0JCXVuc2lnbmVkIGxvbmcgZG5f bWFzayA9IHNldGF0dHJfbWFzayhpYV92YWxpZCk7DQotCQlpZiAoZG5fbWFzaykNCi0JCQlkbm90 aWZ5X3BhcmVudChkZW50cnksIGRuX21hc2spOw0KLQl9DQorDQorCWlmICghZXJyb3IpDQorCQlm c25vdGlmeV9jaGFuZ2UoZGVudHJ5LCBpYV92YWxpZCk7DQorDQogCXJldHVybiBlcnJvcjsNCiB9 DQogDQpkaWZmIC11ck4gbGludXgtMi42LjEwL2ZzL2NvbXBhdC5jIGxpbnV4L2ZzL2NvbXBhdC5j DQotLS0gbGludXgtMi42LjEwL2ZzL2NvbXBhdC5jCTIwMDQtMTItMjQgMTY6MzQ6NDQuMDAwMDAw MDAwIC0wNTAwDQorKysgbGludXgvZnMvY29tcGF0LmMJMjAwNS0wMi0wNCAxMjowNzo0Ny4wMDAw MDAwMDAgLTA1MDANCkBAIC0zNSw3ICszNSw3IEBADQogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+ DQogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KICNpbmNsdWRlIDxsaW51eC9kaXJlbnQuaD4N Ci0jaW5jbHVkZSA8bGludXgvZG5vdGlmeS5oPg0KKyNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5o Pg0KICNpbmNsdWRlIDxsaW51eC9oaWdodWlkLmg+DQogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9z dmMuaD4NCiAjaW5jbHVkZSA8bGludXgvbmZzZC9uZnNkLmg+DQpAQCAtMTE5Miw5ICsxMTkyLDE1 IEBADQogb3V0Og0KIAlpZiAoaW92ICE9IGlvdnN0YWNrKQ0KIAkJa2ZyZWUoaW92KTsNCi0JaWYg KChyZXQgKyAodHlwZSA9PSBSRUFEKSkgPiAwKQ0KLQkJZG5vdGlmeV9wYXJlbnQoZmlsZS0+Zl9k ZW50cnksDQotCQkJCSh0eXBlID09IFJFQUQpID8gRE5fQUNDRVNTIDogRE5fTU9ESUZZKTsNCisJ aWYgKChyZXQgKyAodHlwZSA9PSBSRUFEKSkgPiAwKSB7DQorCQlzdHJ1Y3QgZGVudHJ5ICpkZW50 cnkgPSBmaWxlLT5mX2RlbnRyeTsNCisJCWlmICh0eXBlID09IFJFQUQpDQorCQkJZnNub3RpZnlf YWNjZXNzKGRlbnRyeSwgZGVudHJ5LT5kX2lub2RlLA0KKwkJCQkJZGVudHJ5LT5kX25hbWUubmFt ZSk7DQorCQllbHNlDQorCQkJZnNub3RpZnlfbW9kaWZ5KGRlbnRyeSwgZGVudHJ5LT5kX2lub2Rl LA0KKwkJCQkJZGVudHJ5LT5kX25hbWUubmFtZSk7DQorCX0NCiAJcmV0dXJuIHJldDsNCiB9DQog DQpkaWZmIC11ck4gbGludXgtMi42LjEwL2ZzL2ZpbGVfdGFibGUuYyBsaW51eC9mcy9maWxlX3Rh YmxlLmMNCi0tLSBsaW51eC0yLjYuMTAvZnMvZmlsZV90YWJsZS5jCTIwMDQtMTItMjQgMTY6MzM6 NTAuMDAwMDAwMDAwIC0wNTAwDQorKysgbGludXgvZnMvZmlsZV90YWJsZS5jCTIwMDUtMDEtMzEg MTU6NDY6NDkuMDAwMDAwMDAwIC0wNTAwDQpAQCAtMTYsNiArMTYsNyBAQA0KICNpbmNsdWRlIDxs aW51eC9ldmVudHBvbGwuaD4NCiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4NCiAjaW5jbHVkZSA8 bGludXgvY2Rldi5oPg0KKyNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPg0KIA0KIC8qIHN5c2N0 bCB0dW5hYmxlcy4uLiAqLw0KIHN0cnVjdCBmaWxlc19zdGF0X3N0cnVjdCBmaWxlc19zdGF0ID0g ew0KQEAgLTEyMSw2ICsxMjIsOSBAQA0KIAlzdHJ1Y3QgdmZzbW91bnQgKm1udCA9IGZpbGUtPmZf dmZzbW50Ow0KIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOw0KIA0KKw0K Kwlmc25vdGlmeV9jbG9zZShkZW50cnksIGlub2RlLCBmaWxlLT5mX21vZGUsIGRlbnRyeS0+ZF9u YW1lLm5hbWUpOw0KKw0KIAltaWdodF9zbGVlcCgpOw0KIAkvKg0KIAkgKiBUaGUgZnVuY3Rpb24g ZXZlbnRwb2xsX3JlbGVhc2UoKSBzaG91bGQgYmUgdGhlIGZpcnN0IGNhbGxlZA0KZGlmZiAtdXJO IGxpbnV4LTIuNi4xMC9mcy9pbm9kZS5jIGxpbnV4L2ZzL2lub2RlLmMNCi0tLSBsaW51eC0yLjYu MTAvZnMvaW5vZGUuYwkyMDA0LTEyLTI0IDE2OjM1OjQwLjAwMDAwMDAwMCAtMDUwMA0KKysrIGxp bnV4L2ZzL2lub2RlLmMJMjAwNS0wMS0xOCAxNjoxMTowOC4wMDAwMDAwMDAgLTA1MDANCkBAIC0x MzAsNiArMTMwLDkgQEANCiAjaWZkZWYgQ09ORklHX1FVT1RBDQogCQltZW1zZXQoJmlub2RlLT5p X2RxdW90LCAwLCBzaXplb2YoaW5vZGUtPmlfZHF1b3QpKTsNCiAjZW5kaWYNCisjaWZkZWYgQ09O RklHX0lOT1RJRlkNCisJCWlub2RlLT5pbm90aWZ5X2RhdGEgPSBOVUxMOw0KKyNlbmRpZg0KIAkJ aW5vZGUtPmlfcGlwZSA9IE5VTEw7DQogCQlpbm9kZS0+aV9iZGV2ID0gTlVMTDsNCiAJCWlub2Rl LT5pX2NkZXYgPSBOVUxMOw0KZGlmZiAtdXJOIGxpbnV4LTIuNi4xMC9mcy9uYW1laS5jIGxpbnV4 L2ZzL25hbWVpLmMNCi0tLSBsaW51eC0yLjYuMTAvZnMvbmFtZWkuYwkyMDA0LTEyLTI0IDE2OjM0 OjMwLjAwMDAwMDAwMCAtMDUwMA0KKysrIGxpbnV4L2ZzL25hbWVpLmMJMjAwNS0wMS0zMSAxNzoy NDoyMS4wMDAwMDAwMDAgLTA1MDANCkBAIC0yMSw3ICsyMSw3IEBADQogI2luY2x1ZGUgPGxpbnV4 L25hbWVpLmg+DQogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+DQogI2luY2x1ZGUgPGxpbnV4 L3BhZ2VtYXAuaD4NCi0jaW5jbHVkZSA8bGludXgvZG5vdGlmeS5oPg0KKyNpbmNsdWRlIDxsaW51 eC9mc25vdGlmeS5oPg0KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPg0KICNpbmNsdWRlIDxs aW51eC9wZXJzb25hbGl0eS5oPg0KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPg0KQEAgLTEy NDEsNyArMTI0MSw3IEBADQogCURRVU9UX0lOSVQoZGlyKTsNCiAJZXJyb3IgPSBkaXItPmlfb3At PmNyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSwgbmQpOw0KIAlpZiAoIWVycm9yKSB7DQotCQlpbm9k ZV9kaXJfbm90aWZ5KGRpciwgRE5fQ1JFQVRFKTsNCisJCWZzbm90aWZ5X2NyZWF0ZShkaXIsIGRl bnRyeS0+ZF9uYW1lLm5hbWUpOw0KIAkJc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGUoZGlyLCBk ZW50cnksIG1vZGUpOw0KIAl9DQogCXJldHVybiBlcnJvcjsNCkBAIC0xNTU1LDcgKzE1NTUsNyBA QA0KIAlEUVVPVF9JTklUKGRpcik7DQogCWVycm9yID0gZGlyLT5pX29wLT5ta25vZChkaXIsIGRl bnRyeSwgbW9kZSwgZGV2KTsNCiAJaWYgKCFlcnJvcikgew0KLQkJaW5vZGVfZGlyX25vdGlmeShk aXIsIEROX0NSRUFURSk7DQorCQlmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnktPmRfbmFtZS5u YW1lKTsNCiAJCXNlY3VyaXR5X2lub2RlX3Bvc3RfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRl dik7DQogCX0NCiAJcmV0dXJuIGVycm9yOw0KQEAgLTE2MjgsNyArMTYyOCw3IEBADQogCURRVU9U X0lOSVQoZGlyKTsNCiAJZXJyb3IgPSBkaXItPmlfb3AtPm1rZGlyKGRpciwgZGVudHJ5LCBtb2Rl KTsNCiAJaWYgKCFlcnJvcikgew0KLQkJaW5vZGVfZGlyX25vdGlmeShkaXIsIEROX0NSRUFURSk7 DQorCQlmc25vdGlmeV9ta2RpcihkaXIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOw0KIAkJc2VjdXJp dHlfaW5vZGVfcG9zdF9ta2RpcihkaXIsZGVudHJ5LCBtb2RlKTsNCiAJfQ0KIAlyZXR1cm4gZXJy b3I7DQpAQCAtMTcyMiwxMCArMTcyMiw4IEBADQogCQl9DQogCX0NCiAJdXAoJmRlbnRyeS0+ZF9p bm9kZS0+aV9zZW0pOw0KLQlpZiAoIWVycm9yKSB7DQotCQlpbm9kZV9kaXJfbm90aWZ5KGRpciwg RE5fREVMRVRFKTsNCi0JCWRfZGVsZXRlKGRlbnRyeSk7DQotCX0NCisJaWYgKCFlcnJvcikNCisJ CWZzbm90aWZ5X3JtZGlyKGRlbnRyeSwgZGVudHJ5LT5kX2lub2RlLCBkaXIpOw0KIAlkcHV0KGRl bnRyeSk7DQogDQogCXJldHVybiBlcnJvcjsNCkBAIC0xNzk1LDEwICsxNzkzLDkgQEANCiAJdXAo JmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOw0KIA0KIAkvKiBXZSBkb24ndCBkX2RlbGV0ZSgpIE5G UyBzaWxseXJlbmFtZWQgZmlsZXMtLXRoZXkgc3RpbGwgZXhpc3QuICovDQotCWlmICghZXJyb3Ig JiYgIShkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfTkZTRlNfUkVOQU1FRCkpIHsNCi0JCWRfZGVs ZXRlKGRlbnRyeSk7DQotCQlpbm9kZV9kaXJfbm90aWZ5KGRpciwgRE5fREVMRVRFKTsNCi0JfQ0K KwlpZiAoIWVycm9yICYmICEoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX05GU0ZTX1JFTkFNRUQp KQ0KKwkJZnNub3RpZnlfdW5saW5rKGRlbnRyeS0+ZF9pbm9kZSwgZGlyLCBkZW50cnkpOw0KKw0K IAlyZXR1cm4gZXJyb3I7DQogfQ0KIA0KQEAgLTE4NzIsNyArMTg2OSw3IEBADQogCURRVU9UX0lO SVQoZGlyKTsNCiAJZXJyb3IgPSBkaXItPmlfb3AtPnN5bWxpbmsoZGlyLCBkZW50cnksIG9sZG5h bWUpOw0KIAlpZiAoIWVycm9yKSB7DQotCQlpbm9kZV9kaXJfbm90aWZ5KGRpciwgRE5fQ1JFQVRF KTsNCisJCWZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOw0KIAkJc2Vj dXJpdHlfaW5vZGVfcG9zdF9zeW1saW5rKGRpciwgZGVudHJ5LCBvbGRuYW1lKTsNCiAJfQ0KIAly ZXR1cm4gZXJyb3I7DQpAQCAtMTk0NSw3ICsxOTQyLDcgQEANCiAJZXJyb3IgPSBkaXItPmlfb3At Pmxpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsNCiAJdXAoJm9sZF9kZW50cnktPmRf aW5vZGUtPmlfc2VtKTsNCiAJaWYgKCFlcnJvcikgew0KLQkJaW5vZGVfZGlyX25vdGlmeShkaXIs IEROX0NSRUFURSk7DQorCQlmc25vdGlmeV9jcmVhdGUoZGlyLCBuZXdfZGVudHJ5LT5kX25hbWUu bmFtZSk7DQogCQlzZWN1cml0eV9pbm9kZV9wb3N0X2xpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdf ZGVudHJ5KTsNCiAJfQ0KIAlyZXR1cm4gZXJyb3I7DQpAQCAtMjEwOSw2ICsyMTA2LDcgQEANCiB7 DQogCWludCBlcnJvcjsNCiAJaW50IGlzX2RpciA9IFNfSVNESVIob2xkX2RlbnRyeS0+ZF9pbm9k ZS0+aV9tb2RlKTsNCisJY2hhciAqb2xkX25hbWU7DQogDQogCWlmIChvbGRfZGVudHJ5LT5kX2lu b2RlID09IG5ld19kZW50cnktPmRfaW5vZGUpDQogIAkJcmV0dXJuIDA7DQpAQCAtMjEzMCwxOCAr MjEyOCwxOCBAQA0KIAlEUVVPVF9JTklUKG9sZF9kaXIpOw0KIAlEUVVPVF9JTklUKG5ld19kaXIp Ow0KIA0KKwlvbGRfbmFtZSA9IGZzbm90aWZ5X29sZG5hbWVfaW5pdChvbGRfZGVudHJ5KTsNCisN CiAJaWYgKGlzX2RpcikNCiAJCWVycm9yID0gdmZzX3JlbmFtZV9kaXIob2xkX2RpcixvbGRfZGVu dHJ5LG5ld19kaXIsbmV3X2RlbnRyeSk7DQogCWVsc2UNCiAJCWVycm9yID0gdmZzX3JlbmFtZV9v dGhlcihvbGRfZGlyLG9sZF9kZW50cnksbmV3X2RpcixuZXdfZGVudHJ5KTsNCiAJaWYgKCFlcnJv cikgew0KLQkJaWYgKG9sZF9kaXIgPT0gbmV3X2RpcikNCi0JCQlpbm9kZV9kaXJfbm90aWZ5KG9s ZF9kaXIsIEROX1JFTkFNRSk7DQotCQllbHNlIHsNCi0JCQlpbm9kZV9kaXJfbm90aWZ5KG9sZF9k aXIsIEROX0RFTEVURSk7DQotCQkJaW5vZGVfZGlyX25vdGlmeShuZXdfZGlyLCBETl9DUkVBVEUp Ow0KLQkJfQ0KKwkJY29uc3QgY2hhciAqbmV3X25hbWUgPSBvbGRfZGVudHJ5LT5kX25hbWUubmFt ZTsNCisJCWZzbm90aWZ5X21vdmUob2xkX2RpciwgbmV3X2Rpciwgb2xkX25hbWUsIG5ld19uYW1l KTsNCiAJfQ0KKwlmc25vdGlmeV9vbGRuYW1lX2ZyZWUob2xkX25hbWUpOw0KKw0KIAlyZXR1cm4g ZXJyb3I7DQogfQ0KIA0KZGlmZiAtdXJOIGxpbnV4LTIuNi4xMC9mcy9vcGVuLmMgbGludXgvZnMv b3Blbi5jDQotLS0gbGludXgtMi42LjEwL2ZzL29wZW4uYwkyMDA0LTEyLTI0IDE2OjMzOjUwLjAw MDAwMDAwMCAtMDUwMA0KKysrIGxpbnV4L2ZzL29wZW4uYwkyMDA1LTAyLTAyIDExOjI2OjA2LjAw MDAwMDAwMCAtMDUwMA0KQEAgLTEwLDcgKzEwLDcgQEANCiAjaW5jbHVkZSA8bGludXgvZmlsZS5o Pg0KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPg0KICNpbmNsdWRlIDxsaW51eC9xdW90YW9w cy5oPg0KLSNpbmNsdWRlIDxsaW51eC9kbm90aWZ5Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2Zzbm90 aWZ5Lmg+DQogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KICNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+DQogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPg0KQEAgLTk1Myw5ICs5NTMsMTQgQEANCiAJCWZk ID0gZ2V0X3VudXNlZF9mZCgpOw0KIAkJaWYgKGZkID49IDApIHsNCiAJCQlzdHJ1Y3QgZmlsZSAq ZiA9IGZpbHBfb3Blbih0bXAsIGZsYWdzLCBtb2RlKTsNCisJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50 cnk7DQorDQogCQkJZXJyb3IgPSBQVFJfRVJSKGYpOw0KIAkJCWlmIChJU19FUlIoZikpDQogCQkJ CWdvdG8gb3V0X2Vycm9yOw0KKwkJCWRlbnRyeSA9IGYtPmZfZGVudHJ5Ow0KKwkJCWZzbm90aWZ5 X29wZW4oZGVudHJ5LCBkZW50cnktPmRfaW5vZGUsDQorCQkJCSAgICAgIGRlbnRyeS0+ZF9uYW1l Lm5hbWUpOw0KIAkJCWZkX2luc3RhbGwoZmQsIGYpOw0KIAkJfQ0KIG91dDoNCkBAIC0xMDA3LDcg KzEwMTIsNyBAQA0KIAkJCXJldHZhbCA9IGVycjsNCiAJfQ0KIA0KLQlkbm90aWZ5X2ZsdXNoKGZp bHAsIGlkKTsNCisJZnNub3RpZnlfZmx1c2goZmlscCwgaWQpOw0KIAlsb2Nrc19yZW1vdmVfcG9z aXgoZmlscCwgaWQpOw0KIAlmcHV0KGZpbHApOw0KIAlyZXR1cm4gcmV0dmFsOw0KZGlmZiAtdXJO IGxpbnV4LTIuNi4xMC9mcy9yZWFkX3dyaXRlLmMgbGludXgvZnMvcmVhZF93cml0ZS5jDQotLS0g bGludXgtMi42LjEwL2ZzL3JlYWRfd3JpdGUuYwkyMDA0LTEyLTI0IDE2OjM1OjAwLjAwMDAwMDAw MCAtMDUwMA0KKysrIGxpbnV4L2ZzL3JlYWRfd3JpdGUuYwkyMDA1LTAxLTMxIDE2OjM1OjA1LjAw MDAwMDAwMCAtMDUwMA0KQEAgLTEwLDcgKzEwLDcgQEANCiAjaW5jbHVkZSA8bGludXgvZmlsZS5o Pg0KICNpbmNsdWRlIDxsaW51eC91aW8uaD4NCiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4N Ci0jaW5jbHVkZSA8bGludXgvZG5vdGlmeS5oPg0KKyNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5o Pg0KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPg0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4NCiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4NCkBAIC0yMTYsOCArMjE2LDExIEBADQog CQkJCXJldCA9IGZpbGUtPmZfb3AtPnJlYWQoZmlsZSwgYnVmLCBjb3VudCwgcG9zKTsNCiAJCQll bHNlDQogCQkJCXJldCA9IGRvX3N5bmNfcmVhZChmaWxlLCBidWYsIGNvdW50LCBwb3MpOw0KLQkJ CWlmIChyZXQgPiAwKQ0KLQkJCQlkbm90aWZ5X3BhcmVudChmaWxlLT5mX2RlbnRyeSwgRE5fQUND RVNTKTsNCisJCQlpZiAocmV0ID4gMCkgew0KKwkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBm aWxlLT5mX2RlbnRyeTsNCisJCQkJZnNub3RpZnlfYWNjZXNzKGRlbnRyeSwgaW5vZGUsDQorCQkJ CQkJZGVudHJ5LT5kX25hbWUubmFtZSk7DQorCQkJfQ0KIAkJfQ0KIAl9DQogDQpAQCAtMjYwLDgg KzI2MywxMSBAQA0KIAkJCQlyZXQgPSBmaWxlLT5mX29wLT53cml0ZShmaWxlLCBidWYsIGNvdW50 LCBwb3MpOw0KIAkJCWVsc2UNCiAJCQkJcmV0ID0gZG9fc3luY193cml0ZShmaWxlLCBidWYsIGNv dW50LCBwb3MpOw0KLQkJCWlmIChyZXQgPiAwKQ0KLQkJCQlkbm90aWZ5X3BhcmVudChmaWxlLT5m X2RlbnRyeSwgRE5fTU9ESUZZKTsNCisJCQlpZiAocmV0ID4gMCkgew0KKwkJCQlzdHJ1Y3QgZGVu dHJ5ICpkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsNCisJCQkJZnNub3RpZnlfbW9kaWZ5KGRlbnRy eSwgaW5vZGUsDQorCQkJCQkJZGVudHJ5LT5kX25hbWUubmFtZSk7DQorCQkJfQ0KIAkJfQ0KIAl9 DQogDQpAQCAtNDkzLDkgKzQ5OSwxNSBAQA0KIG91dDoNCiAJaWYgKGlvdiAhPSBpb3ZzdGFjaykN CiAJCWtmcmVlKGlvdik7DQotCWlmICgocmV0ICsgKHR5cGUgPT0gUkVBRCkpID4gMCkNCi0JCWRu b3RpZnlfcGFyZW50KGZpbGUtPmZfZGVudHJ5LA0KLQkJCQkodHlwZSA9PSBSRUFEKSA/IEROX0FD Q0VTUyA6IEROX01PRElGWSk7DQorCWlmICgocmV0ICsgKHR5cGUgPT0gUkVBRCkpID4gMCkgew0K KwkJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7DQorCQlzdHJ1Y3QgaW5v ZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOw0KKw0KKwkJaWYgKHR5cGUgPT0gUkVBRCkNCisJ CQlmc25vdGlmeV9hY2Nlc3MoZGVudHJ5LCBpbm9kZSwgZGVudHJ5LT5kX25hbWUubmFtZSk7DQor CQllbHNlDQorCQkJZnNub3RpZnlfbW9kaWZ5KGRlbnRyeSwgaW5vZGUsIGRlbnRyeS0+ZF9uYW1l Lm5hbWUpOw0KKwl9DQogCXJldHVybiByZXQ7DQogfQ0KIA0KZGlmZiAtdXJOIGxpbnV4LTIuNi4x MC9mcy9zdXBlci5jIGxpbnV4L2ZzL3N1cGVyLmMNCi0tLSBsaW51eC0yLjYuMTAvZnMvc3VwZXIu YwkyMDA0LTEyLTI0IDE2OjM0OjMzLjAwMDAwMDAwMCAtMDUwMA0KKysrIGxpbnV4L2ZzL3N1cGVy LmMJMjAwNS0wMS0zMSAxNDo1MzozOC4wMDAwMDAwMDAgLTA1MDANCkBAIC0zNyw5ICszNyw5IEBA DQogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgkJLyogZm9yIHRoZSBlbWVyZ2VuY3kgcmVt b3VudCBzdHVmZiAqLw0KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4NCiAjaW5jbHVkZSA8bGludXgv a29iamVjdC5oPg0KKyNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPg0KICNpbmNsdWRlIDxhc20v dWFjY2Vzcy5oPg0KIA0KLQ0KIHZvaWQgZ2V0X2ZpbGVzeXN0ZW0oc3RydWN0IGZpbGVfc3lzdGVt X3R5cGUgKmZzKTsNCiB2b2lkIHB1dF9maWxlc3lzdGVtKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBl ICpmcyk7DQogc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmdldF9mc190eXBlKGNvbnN0IGNoYXIg Km5hbWUpOw0KQEAgLTIyNyw2ICsyMjcsNyBAQA0KIA0KIAlpZiAocm9vdCkgew0KIAkJc2ItPnNf cm9vdCA9IE5VTEw7DQorCQlmc25vdGlmeV9zYl91bW91bnQoc2IpOw0KIAkJc2hyaW5rX2RjYWNo ZV9wYXJlbnQocm9vdCk7DQogCQlzaHJpbmtfZGNhY2hlX2Fub24oJnNiLT5zX2Fub24pOw0KIAkJ ZHB1dChyb290KTsNCmRpZmYgLXVyTiBsaW51eC0yLjYuMTAvaW5jbHVkZS9saW51eC9mcy5oIGxp bnV4L2luY2x1ZGUvbGludXgvZnMuaA0KLS0tIGxpbnV4LTIuNi4xMC9pbmNsdWRlL2xpbnV4L2Zz LmgJMjAwNC0xMi0yNCAxNjozNDoyNy4wMDAwMDAwMDAgLTA1MDANCisrKyBsaW51eC9pbmNsdWRl L2xpbnV4L2ZzLmgJMjAwNS0wMS0xOCAxNjoxMTowOC4wMDAwMDAwMDAgLTA1MDANCkBAIC0yNyw2 ICsyNyw3IEBADQogc3RydWN0IGtzdGF0ZnM7DQogc3RydWN0IHZtX2FyZWFfc3RydWN0Ow0KIHN0 cnVjdCB2ZnNtb3VudDsNCitzdHJ1Y3QgaW5vdGlmeV9pbm9kZV9kYXRhOw0KIA0KIC8qDQogICog SXQncyBzaWxseSB0byBoYXZlIE5SX09QRU4gYmlnZ2VyIHRoYW4gTlJfRklMRSwgYnV0IHlvdSBj YW4gY2hhbmdlDQpAQCAtNDczLDYgKzQ3NCwxMCBAQA0KIAlzdHJ1Y3QgZG5vdGlmeV9zdHJ1Y3QJ KmlfZG5vdGlmeTsgLyogZm9yIGRpcmVjdG9yeSBub3RpZmljYXRpb25zICovDQogI2VuZGlmDQog DQorI2lmZGVmIENPTkZJR19JTk9USUZZDQorCXN0cnVjdCBpbm90aWZ5X2lub2RlX2RhdGEgKmlu b3RpZnlfZGF0YTsNCisjZW5kaWYNCisNCiAJdW5zaWduZWQgbG9uZwkJaV9zdGF0ZTsNCiAJdW5z aWduZWQgbG9uZwkJZGlydGllZF93aGVuOwkvKiBqaWZmaWVzIG9mIGZpcnN0IGRpcnR5aW5nICov DQogDQpAQCAtMTM1Myw3ICsxMzU4LDcgQEANCiBleHRlcm4gaW50IGRvX3JlbW91bnRfc2Ioc3Ry dWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGZsYWdzLA0KIAkJCSB2b2lkICpkYXRhLCBpbnQgZm9y Y2UpOw0KIGV4dGVybiBzZWN0b3JfdCBibWFwKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCk7DQot ZXh0ZXJuIGludCBzZXRhdHRyX21hc2sodW5zaWduZWQgaW50KTsNCitleHRlcm4gdm9pZCBzZXRh dHRyX21hc2sodW5zaWduZWQgaW50LCBpbnQgKiwgdTMyICopOw0KIGV4dGVybiBpbnQgbm90aWZ5 X2NoYW5nZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsNCiBleHRlcm4gaW50IHBl cm1pc3Npb24oc3RydWN0IGlub2RlICosIGludCwgc3RydWN0IG5hbWVpZGF0YSAqKTsNCiBleHRl cm4gaW50IGdlbmVyaWNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKiwgaW50LA0KZGlmZiAtdXJO IGxpbnV4LTIuNi4xMC9pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmggbGludXgvaW5jbHVkZS9saW51 eC9mc25vdGlmeS5oDQotLS0gbGludXgtMi42LjEwL2luY2x1ZGUvbGludXgvZnNub3RpZnkuaAkx OTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMA0KKysrIGxpbnV4L2luY2x1ZGUvbGlu dXgvZnNub3RpZnkuaAkyMDA1LTAyLTA0IDEyOjA5OjQ4LjAwMDAwMDAwMCAtMDUwMA0KQEAgLTAs MCArMSwyMzUgQEANCisjaWZuZGVmIF9MSU5VWF9GU19OT1RJRllfSA0KKyNkZWZpbmUgX0xJTlVY X0ZTX05PVElGWV9IDQorDQorLyoNCisgKiBpbmNsdWRlL2xpbnV4L2ZzX25vdGlmeS5oIC0gZ2Vu ZXJpYyBob29rcyBmb3IgZmlsZXN5c3RlbSBub3RpZmljYXRpb24sIHRvDQorICogcmVkdWNlIGlu LXNvdXJjZSBkdXBsaWNhdGlvbiBmcm9tIGJvdGggZG5vdGlmeSBhbmQgaW5vdGlmeS4NCisgKg0K KyAqIFdlIGRvbid0IGNvbXBpbGUgYW55IG9mIHRoaXMgYXdheSBpbiBzb21lIGNvbXBsaWNhdGVk IG1lbmFnZXJpZSBvZiBpZmRlZnMuDQorICogSW5zdGVhZCwgd2UgcmVseSBvbiB0aGUgY29kZSBp bnNpZGUgdG8gb3B0aW1pemUgYXdheSBhcyBuZWVkZWQuDQorICoNCisgKiAoQykgQ29weXJpZ2h0 IDIwMDUgUm9iZXJ0IExvdmUNCisgKi8NCisNCisjaWZkZWYgX19LRVJORUxfXw0KKw0KKyNpbmNs dWRlIDxsaW51eC9kbm90aWZ5Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2lub3RpZnkuaD4NCisNCisv Kg0KKyAqIGZzbm90aWZ5X21vdmUgLSBmaWxlIG9sZF9uYW1lIGF0IG9sZF9kaXIgd2FzIG1vdmVk IHRvIG5ld19uYW1lIGF0IG5ld19kaXINCisgKi8NCitzdGF0aWMgaW5saW5lIHZvaWQgZnNub3Rp ZnlfbW92ZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBpbm9kZSAqbmV3X2RpciwNCisJ CQkJIGNvbnN0IGNoYXIgKm9sZF9uYW1lLCBjb25zdCBjaGFyICpuZXdfbmFtZSkNCit7DQorCXUz MiBjb29raWU7DQorDQorCWlmIChvbGRfZGlyID09IG5ld19kaXIpDQorCQlpbm9kZV9kaXJfbm90 aWZ5KG9sZF9kaXIsIEROX1JFTkFNRSk7DQorCWVsc2Ugew0KKwkJaW5vZGVfZGlyX25vdGlmeShv bGRfZGlyLCBETl9ERUxFVEUpOw0KKwkJaW5vZGVfZGlyX25vdGlmeShuZXdfZGlyLCBETl9DUkVB VEUpOw0KKwl9DQorDQorCWNvb2tpZSA9IGlub3RpZnlfZ2V0X2Nvb2tpZSgpOw0KKw0KKwlpbm90 aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KG9sZF9kaXIsIElOX01PVkVEX0ZST00sIGNvb2tpZSwgb2xk X25hbWUpOw0KKwlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KG5ld19kaXIsIElOX01PVkVEX1RP LCBjb29raWUsIG5ld19uYW1lKTsNCit9DQorDQorLyoNCisgKiBmc25vdGlmeV91bmxpbmsgLSBm aWxlIHdhcyB1bmxpbmtlZA0KKyAqLw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmc25vdGlmeV91bmxp bmsoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsDQorCQkJCSAgIHN0cnVj dCBkZW50cnkgKmRlbnRyeSkNCit7DQorCWlub2RlX2Rpcl9ub3RpZnkoZGlyLCBETl9ERUxFVEUp Ow0KKwlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGRpciwgSU5fREVMRVRFX0ZJTEUsIDAsIGRl bnRyeS0+ZF9uYW1lLm5hbWUpOw0KKwlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBJ Tl9ERUxFVEVfU0VMRiwgMCwgTlVMTCk7DQorDQorCWlub3RpZnlfaW5vZGVfaXNfZGVhZChpbm9k ZSk7DQorCWRfZGVsZXRlKGRlbnRyeSk7DQorfQ0KKw0KKy8qDQorICogZnNub3RpZnlfcm1kaXIg LSBkaXJlY3Rvcnkgd2FzIHJlbW92ZWQNCisgKi8NCitzdGF0aWMgaW5saW5lIHZvaWQgZnNub3Rp Znlfcm1kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLA0KKwkJ CQkgIHN0cnVjdCBpbm9kZSAqZGlyKQ0KK3sNCisJaW5vZGVfZGlyX25vdGlmeShkaXIsIEROX0RF TEVURSk7DQorCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoZGlyLCBJTl9ERUxFVEVfU1VCRElS LDAsZGVudHJ5LT5kX25hbWUubmFtZSk7DQorCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5v ZGUsIElOX0RFTEVURV9TRUxGLCAwLCBOVUxMKTsNCisNCisJaW5vdGlmeV9pbm9kZV9pc19kZWFk KGlub2RlKTsNCisJZF9kZWxldGUoZGVudHJ5KTsNCit9DQorDQorLyoNCisgKiBmc25vdGlmeV9j cmVhdGUgLSBmaWxlbmFtZSB3YXMgbGlua2VkIGluDQorICovDQorc3RhdGljIGlubGluZSB2b2lk IGZzbm90aWZ5X2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpmaWxlbmFt ZSkNCit7DQorCWlub2RlX2Rpcl9ub3RpZnkoaW5vZGUsIEROX0NSRUFURSk7DQorCWlub3RpZnlf aW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIElOX0NSRUFURV9GSUxFLCAwLCBmaWxlbmFtZSk7DQor fQ0KKw0KKy8qDQorICogZnNub3RpZnlfbWtkaXIgLSBkaXJlY3RvcnkgJ25hbWUnIHdhcyBjcmVh dGVkDQorICovDQorc3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X21rZGlyKHN0cnVjdCBpbm9k ZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpDQorew0KKwlpbm9kZV9kaXJfbm90aWZ5KGlub2Rl LCBETl9DUkVBVEUpOw0KKwlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBJTl9DUkVB VEVfU1VCRElSLCAwLCBuYW1lKTsNCit9DQorDQorLyoNCisgKiBmc25vdGlmeV9hY2Nlc3MgLSBm aWxlIHdhcyByZWFkDQorICovDQorc3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X2FjY2Vzcyhz dHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsDQorCQkJCSAgIGNvbnN0 IGNoYXIgKmZpbGVuYW1lKQ0KK3sNCisJZG5vdGlmeV9wYXJlbnQoZGVudHJ5LCBETl9BQ0NFU1Mp Ow0KKwlpbm90aWZ5X2RlbnRyeV9wYXJlbnRfcXVldWVfZXZlbnQoZGVudHJ5LCBJTl9BQ0NFU1Ms IDAsDQorCQkJCQkgIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOw0KKwlpbm90aWZ5X2lub2RlX3F1ZXVl X2V2ZW50KGlub2RlLCBJTl9BQ0NFU1MsIDAsIE5VTEwpOw0KK30NCisNCisvKg0KKyAqIGZzbm90 aWZ5X21vZGlmeSAtIGZpbGUgd2FzIG1vZGlmaWVkDQorICovDQorc3RhdGljIGlubGluZSB2b2lk IGZzbm90aWZ5X21vZGlmeShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5v ZGUsDQorCQkJCSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQ0KK3sNCisJZG5vdGlmeV9wYXJlbnQo ZGVudHJ5LCBETl9NT0RJRlkpOw0KKwlpbm90aWZ5X2RlbnRyeV9wYXJlbnRfcXVldWVfZXZlbnQo ZGVudHJ5LCBJTl9NT0RJRlksIDAsIGZpbGVuYW1lKTsNCisJaW5vdGlmeV9pbm9kZV9xdWV1ZV9l dmVudChpbm9kZSwgSU5fTU9ESUZZLCAwLCBOVUxMKTsNCit9DQorDQorLyoNCisgKiBmc25vdGlm eV9vcGVuIC0gZmlsZSB3YXMgb3BlbmVkDQorICovDQorc3RhdGljIGlubGluZSB2b2lkIGZzbm90 aWZ5X29wZW4oc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLA0KKwkJ CQkgY29uc3QgY2hhciAqZmlsZW5hbWUpDQorew0KKwlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50 KGlub2RlLCBJTl9PUEVOLCAwLCBOVUxMKTsNCisJaW5vdGlmeV9kZW50cnlfcGFyZW50X3F1ZXVl X2V2ZW50KGRlbnRyeSwgSU5fT1BFTiwgMCwgZmlsZW5hbWUpOw0KK30NCisNCisvKg0KKyAqIGZz bm90aWZ5X2Nsb3NlIC0gZmlsZSB3YXMgY2xvc2VkDQorICovDQorc3RhdGljIGlubGluZSB2b2lk IGZzbm90aWZ5X2Nsb3NlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9k ZSwNCisJCQkJICBtb2RlX3QgbW9kZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpDQorew0KKwl1MzIg bWFzazsNCisNCisJbWFzayA9IChtb2RlICYgRk1PREVfV1JJVEUpID8gSU5fQ0xPU0VfV1JJVEUg OiBJTl9DTE9TRV9OT1dSSVRFOw0KKwlpbm90aWZ5X2RlbnRyeV9wYXJlbnRfcXVldWVfZXZlbnQo ZGVudHJ5LCBtYXNrLCAwLCBmaWxlbmFtZSk7DQorCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQo aW5vZGUsIG1hc2ssIDAsIE5VTEwpOw0KK30NCisNCisvKg0KKyAqIGZzbm90aWZ5X2NoYW5nZSAt IG5vdGlmeV9jaGFuZ2UgZXZlbnQuICBmaWxlIHdhcyBtb2RpZmllZCBhbmQvb3IgbWV0YWRhdGEN CisgKiB3YXMgY2hhbmdlZC4NCisgKi8NCitzdGF0aWMgaW5saW5lIHZvaWQgZnNub3RpZnlfY2hh bmdlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGlhX3ZhbGlkKQ0KK3sNCisJ aW50IGRuX21hc2sgPSAwOw0KKwl1MzIgaW5fbWFzayA9IDA7DQorDQorCWlmIChpYV92YWxpZCAm IEFUVFJfVUlEKSB7DQorCQlpbl9tYXNrIHw9IElOX0FUVFJJQjsNCisJCWRuX21hc2sgfD0gRE5f QVRUUklCOw0KKwl9DQorCWlmIChpYV92YWxpZCAmIEFUVFJfR0lEKSB7DQorCQlpbl9tYXNrIHw9 IElOX0FUVFJJQjsNCisJCWRuX21hc2sgfD0gRE5fQVRUUklCOw0KKwl9DQorCWlmIChpYV92YWxp ZCAmIEFUVFJfU0laRSkgew0KKwkJaW5fbWFzayB8PSBJTl9NT0RJRlk7DQorCQlkbl9tYXNrIHw9 IEROX01PRElGWTsNCisJfQ0KKwkvKiBib3RoIHRpbWVzIGltcGxpZXMgYSB1dGltZShzKSBjYWxs ICovDQorCWlmICgoaWFfdmFsaWQgJiAoQVRUUl9BVElNRSB8IEFUVFJfTVRJTUUpKSA9PSAoQVRU Ul9BVElNRSB8IEFUVFJfTVRJTUUpKQ0KKwl7DQorCQlpbl9tYXNrIHw9IElOX0FUVFJJQjsNCisJ CWRuX21hc2sgfD0gRE5fQVRUUklCOw0KKwl9IGVsc2UgaWYgKGlhX3ZhbGlkICYgQVRUUl9BVElN RSkgew0KKwkJaW5fbWFzayB8PSBJTl9BQ0NFU1M7DQorCQlkbl9tYXNrIHw9IEROX0FDQ0VTUzsN CisJfSBlbHNlIGlmIChpYV92YWxpZCAmIEFUVFJfTVRJTUUpIHsNCisJCWluX21hc2sgfD0gSU5f TU9ESUZZOw0KKwkJZG5fbWFzayB8PSBETl9NT0RJRlk7DQorCX0NCisJaWYgKGlhX3ZhbGlkICYg QVRUUl9NT0RFKSB7DQorCQlpbl9tYXNrIHw9IElOX0FUVFJJQjsNCisJCWRuX21hc2sgfD0gRE5f QVRUUklCOw0KKwl9DQorDQorCWlmIChkbl9tYXNrKQ0KKwkJZG5vdGlmeV9wYXJlbnQoZGVudHJ5 LCBkbl9tYXNrKTsNCisJaWYgKGluX21hc2spIHsNCisJCWlub3RpZnlfaW5vZGVfcXVldWVfZXZl bnQoZGVudHJ5LT5kX2lub2RlLCBpbl9tYXNrLCAwLCBOVUxMKTsNCisJCWlub3RpZnlfZGVudHJ5 X3BhcmVudF9xdWV1ZV9ldmVudChkZW50cnksIGluX21hc2ssIDAsDQorCQkJCQkJICBkZW50cnkt PmRfbmFtZS5uYW1lKTsNCisJfQ0KK30NCisNCisvKg0KKyAqIGZzbm90aWZ5X3NiX3Vtb3VudCAt IGZpbGVzeXN0ZW0gdW5tb3VudA0KKyAqLw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmc25vdGlmeV9z Yl91bW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikNCit7DQorCWlub3RpZnlfc3VwZXJfYmxv Y2tfdW1vdW50KHNiKTsNCit9DQorDQorLyoNCisgKiBmc25vdGlmeV9mbHVzaCAtIGZsdXNoIHRp bWUhDQorICovDQorc3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X2ZsdXNoKHN0cnVjdCBmaWxl ICpmaWxwLCBmbF9vd25lcl90IGlkKQ0KK3sNCisJZG5vdGlmeV9mbHVzaChmaWxwLCBpZCk7DQor fQ0KKw0KKyNpZmRlZiBDT05GSUdfSU5PVElGWQkvKiBpbm90aWZ5IGhlbHBlcnMgKi8NCisNCisv Kg0KKyAqIGZzbm90aWZ5X29sZG5hbWVfaW5pdCAtIHNhdmUgb2ZmIHRoZSBvbGQgZmlsZW5hbWUg YmVmb3JlIHdlIGNoYW5nZSBpdA0KKyAqDQorICogdGhpcyBjb3VsZCBiZSBrc3RyZHVwIGlmIG9u bHkgd2UgY291bGQgYWRkIHRoYXQgdG8gbGliL3N0cmluZy5jDQorICovDQorc3RhdGljIGlubGlu ZSBjaGFyICpmc25vdGlmeV9vbGRuYW1lX2luaXQoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSkN Cit7DQorCWNoYXIgKm9sZF9uYW1lOw0KKw0KKwlvbGRfbmFtZSA9IGttYWxsb2Moc3RybGVuKG9s ZF9kZW50cnktPmRfbmFtZS5uYW1lKSArIDEsIEdGUF9LRVJORUwpOw0KKwlpZiAob2xkX25hbWUp DQorCQlzdHJjcHkob2xkX25hbWUsIG9sZF9kZW50cnktPmRfbmFtZS5uYW1lKTsNCisJcmV0dXJu IG9sZF9uYW1lOw0KK30NCisNCisvKg0KKyAqIGZzbm90aWZ5X29sZG5hbWVfZnJlZSAtIGZyZWUg dGhlIG5hbWUgd2UgZ290IGZyb20gZnNub3RpZnlfb2xkbmFtZV9pbml0DQorICovDQorc3RhdGlj IGlubGluZSB2b2lkIGZzbm90aWZ5X29sZG5hbWVfZnJlZShjb25zdCBjaGFyICpvbGRfbmFtZSkN Cit7DQorCWtmcmVlKG9sZF9uYW1lKTsNCit9DQorDQorI2Vsc2UJLyogQ09ORklHX0lOT1RJRlkg Ki8NCisNCitzdGF0aWMgaW5saW5lIGNoYXIgKmZzbm90aWZ5X29sZG5hbWVfaW5pdChzdHJ1Y3Qg ZGVudHJ5ICpvbGRfZGVudHJ5KQ0KK3sNCisJcmV0dXJuIE5VTEw7DQorfQ0KKw0KK3N0YXRpYyBp bmxpbmUgdm9pZCBmc25vdGlmeV9vbGRuYW1lX2ZyZWUoY29uc3QgY2hhciAqb2xkX25hbWUpDQor ew0KK30NCisNCisjZW5kaWYJLyogISBDT05GSUdfSU5PVElGWSAqLw0KKw0KKyNlbmRpZgkvKiBf X0tFUk5FTF9fICovDQorDQorI2VuZGlmCS8qIF9MSU5VWF9GU19OT1RJRllfSCAqLw0KZGlmZiAt dXJOIGxpbnV4LTIuNi4xMC9pbmNsdWRlL2xpbnV4L2lub3RpZnkuaCBsaW51eC9pbmNsdWRlL2xp bnV4L2lub3RpZnkuaA0KLS0tIGxpbnV4LTIuNi4xMC9pbmNsdWRlL2xpbnV4L2lub3RpZnkuaAkx OTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMA0KKysrIGxpbnV4L2luY2x1ZGUvbGlu dXgvaW5vdGlmeS5oCTIwMDUtMDItMDkgMTY6MDI6NTguMjkxOTc4MDcyIC0wNTAwDQpAQCAtMCww ICsxLDExOCBAQA0KKy8qDQorICogSW5vZGUgYmFzZWQgZGlyZWN0b3J5IG5vdGlmaWNhdGlvbiBm b3IgTGludXgNCisgKg0KKyAqIENvcHlyaWdodCAoQykgMjAwNSBKb2huIE1jQ3V0Y2hhbg0KKyAq Lw0KKw0KKyNpZm5kZWYgX0xJTlVYX0lOT1RJRllfSA0KKyNkZWZpbmUgX0xJTlVYX0lOT1RJRllf SA0KKw0KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KKyNpbmNsdWRlIDxsaW51eC9saW1pdHMu aD4NCisNCisvKg0KKyAqIHN0cnVjdCBpbm90aWZ5X2V2ZW50IC0gc3RydWN0dXJlIHJlYWQgZnJv bSB0aGUgaW5vdGlmeSBkZXZpY2UgZm9yIGVhY2ggZXZlbnQNCisgKg0KKyAqIFdoZW4geW91IGFy ZSB3YXRjaGluZyBhIGRpcmVjdG9yeSwgeW91IHdpbGwgcmVjZWl2ZSB0aGUgZmlsZW5hbWUgZm9y IGV2ZW50cw0KKyAqIHN1Y2ggYXMgSU5fQ1JFQVRFLCBJTl9ERUxFVEUsIElOX09QRU4sIElOX0NM T1NFLCAuLi4sIHJlbGF0aXZlIHRvIHRoZSB3ZC4NCisgKi8NCitzdHJ1Y3QgaW5vdGlmeV9ldmVu dCB7DQorCV9fczMyIHdkOwkvKiB3YXRjaCBkZXNjcmlwdG9yICovDQorCV9fdTMyIG1hc2s7CS8q IHdhdGNoIG1hc2sgKi8NCisJX191MzIgY29va2llOwkvKiBjb29raWUgdXNlZCBmb3Igc3luY2hy b25pemluZyB0d28gZXZlbnRzICovDQorCXNpemVfdCBsZW47CS8qIGxlbmd0aCAoaW5jbHVkaW5n IG51bGxzKSBvZiBuYW1lICovDQorCWNoYXIgbmFtZVswXTsJLyogc3R1YiBmb3IgcG9zc2libGUg bmFtZSAqLw0KK307DQorDQorLyoNCisgKiBzdHJ1Y3QgaW5vdGlmeV93YXRjaF9yZXF1ZXN0IC0g cmVwcmVzZW50cyBhIHdhdGNoIHJlcXVlc3QNCisgKg0KKyAqIFBhc3MgdG8gdGhlIGlub3RpZnkg ZGV2aWNlIHZpYSB0aGUgSU5PVElGWV9XQVRDSCBpb2N0bA0KKyAqLw0KK3N0cnVjdCBpbm90aWZ5 X3dhdGNoX3JlcXVlc3Qgew0KKwljaGFyICpuYW1lOwkJLyogZGlyZWN0b3J5IG5hbWUgKi8NCisJ X191MzIgbWFzazsJCS8qIGV2ZW50IG1hc2sgKi8NCit9Ow0KKw0KKy8qIHRoZSBmb2xsb3dpbmcg YXJlIGxlZ2FsLCBpbXBsZW1lbnRlZCBldmVudHMgKi8NCisjZGVmaW5lIElOX0FDQ0VTUwkJMHgw MDAwMDAwMQkvKiBGaWxlIHdhcyBhY2Nlc3NlZCAqLw0KKyNkZWZpbmUgSU5fTU9ESUZZCQkweDAw MDAwMDAyCS8qIEZpbGUgd2FzIG1vZGlmaWVkICovDQorI2RlZmluZSBJTl9BVFRSSUIJCTB4MDAw MDAwMDQJLyogRmlsZSBjaGFuZ2VkIGF0dHJpYnV0ZXMgKi8NCisjZGVmaW5lIElOX0NMT1NFX1dS SVRFCQkweDAwMDAwMDA4CS8qIFdyaXR0YWJsZSBmaWxlIHdhcyBjbG9zZWQgKi8NCisjZGVmaW5l IElOX0NMT1NFX05PV1JJVEUJMHgwMDAwMDAxMAkvKiBVbndyaXR0YWJsZSBmaWxlIGNsb3NlZCAq Lw0KKyNkZWZpbmUgSU5fT1BFTgkJCTB4MDAwMDAwMjAJLyogRmlsZSB3YXMgb3BlbmVkICovDQor I2RlZmluZSBJTl9NT1ZFRF9GUk9NCQkweDAwMDAwMDQwCS8qIEZpbGUgd2FzIG1vdmVkIGZyb20g WCAqLw0KKyNkZWZpbmUgSU5fTU9WRURfVE8JCTB4MDAwMDAwODAJLyogRmlsZSB3YXMgbW92ZWQg dG8gWSAqLw0KKyNkZWZpbmUgSU5fREVMRVRFX1NVQkRJUgkweDAwMDAwMTAwCS8qIFN1YmRpciB3 YXMgZGVsZXRlZCAqLyANCisjZGVmaW5lIElOX0RFTEVURV9GSUxFCQkweDAwMDAwMjAwCS8qIFN1 YmZpbGUgd2FzIGRlbGV0ZWQgKi8NCisjZGVmaW5lIElOX0NSRUFURV9TVUJESVIJMHgwMDAwMDQw MAkvKiBTdWJkaXIgd2FzIGNyZWF0ZWQgKi8NCisjZGVmaW5lIElOX0NSRUFURV9GSUxFCQkweDAw MDAwODAwCS8qIFN1YmZpbGUgd2FzIGNyZWF0ZWQgKi8NCisjZGVmaW5lIElOX0RFTEVURV9TRUxG CQkweDAwMDAxMDAwCS8qIFNlbGYgd2FzIGRlbGV0ZWQgKi8NCisjZGVmaW5lIElOX1VOTU9VTlQJ CTB4MDAwMDIwMDAJLyogQmFja2luZyBmcyB3YXMgdW5tb3VudGVkICovDQorI2RlZmluZSBJTl9R X09WRVJGTE9XCQkweDAwMDA0MDAwCS8qIEV2ZW50IHF1ZXVlZCBvdmVyZmxvd2VkICovDQorI2Rl ZmluZSBJTl9JR05PUkVECQkweDAwMDA4MDAwCS8qIEZpbGUgd2FzIGlnbm9yZWQgKi8NCisNCisv KiBzcGVjaWFsIGZsYWdzICovDQorI2RlZmluZSBJTl9BTExfRVZFTlRTCQkweGZmZmZmZmZmCS8q IEFsbCB0aGUgZXZlbnRzICovDQorI2RlZmluZSBJTl9DTE9TRQkJKElOX0NMT1NFX1dSSVRFIHwg SU5fQ0xPU0VfTk9XUklURSkNCisNCisjZGVmaW5lIElOT1RJRllfSU9DVExfTUFHSUMJJ1EnDQor I2RlZmluZSBJTk9USUZZX0lPQ1RMX01BWE5SCTINCisNCisjZGVmaW5lIElOT1RJRllfV0FUQ0gg IAkJX0lPUihJTk9USUZZX0lPQ1RMX01BR0lDLCAxLCBzdHJ1Y3QgaW5vdGlmeV93YXRjaF9yZXF1 ZXN0KQ0KKyNkZWZpbmUgSU5PVElGWV9JR05PUkUgCQlfSU9SKElOT1RJRllfSU9DVExfTUFHSUMs IDIsIGludCkNCisNCisjaWZkZWYgX19LRVJORUxfXw0KKw0KKyNpbmNsdWRlIDxsaW51eC9kY2Fj aGUuaD4NCisjaW5jbHVkZSA8bGludXgvZnMuaD4NCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+ DQorDQorc3RydWN0IGlub3RpZnlfaW5vZGVfZGF0YSB7DQorCXN0cnVjdCBsaXN0X2hlYWQgd2F0 Y2hlczsJLyogbGlzdCBvZiB3YXRjaGVzIG9uIHRoaXMgaW5vZGUgKi8NCisJc3BpbmxvY2tfdCBs b2NrOwkJLyogbG9jayBwcm90ZWN0aW5nIHRoZSBzdHJ1Y3QgKi8NCisJYXRvbWljX3QgY291bnQ7 CQkJLyogcmVmIGNvdW50ICovDQorfTsNCisNCisjaWZkZWYgQ09ORklHX0lOT1RJRlkNCisNCitl eHRlcm4gdm9pZCBpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KHN0cnVjdCBpbm9kZSAqLCBfX3Uz MiwgX191MzIsDQorCQkJCSAgICAgIGNvbnN0IGNoYXIgKik7DQorZXh0ZXJuIHZvaWQgaW5vdGlm eV9kZW50cnlfcGFyZW50X3F1ZXVlX2V2ZW50KHN0cnVjdCBkZW50cnkgKiwgX191MzIsIF9fdTMy LA0KKwkJCQkJICAgICAgY29uc3QgY2hhciAqKTsNCitleHRlcm4gdm9pZCBpbm90aWZ5X3N1cGVy X2Jsb2NrX3Vtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7DQorZXh0ZXJuIHZvaWQgaW5vdGlm eV9pbm9kZV9pc19kZWFkKHN0cnVjdCBpbm9kZSAqKTsNCitleHRlcm4gX191MzIgaW5vdGlmeV9n ZXRfY29va2llKHZvaWQpOw0KKw0KKyNlbHNlDQorDQorc3RhdGljIGlubGluZSB2b2lkIGlub3Rp ZnlfaW5vZGVfcXVldWVfZXZlbnQoc3RydWN0IGlub2RlICppbm9kZSwNCisJCQkJCSAgICAgX191 MzIgbWFzaywgX191MzIgY29va2llLA0KKwkJCQkJICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSkN Cit7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbm90aWZ5X2RlbnRyeV9wYXJlbnRfcXVl dWVfZXZlbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LA0KKwkJCQkJCSAgICAgX191MzIgbWFzaywg X191MzIgY29va2llLA0KKwkJCQkJCSAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUpDQorew0KK30N CisNCitzdGF0aWMgaW5saW5lIHZvaWQgaW5vdGlmeV9zdXBlcl9ibG9ja191bW91bnQoc3RydWN0 IHN1cGVyX2Jsb2NrICpzYikNCit7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbm90aWZ5 X2lub2RlX2lzX2RlYWQoc3RydWN0IGlub2RlICppbm9kZSkNCit7DQorfQ0KKw0KK3N0YXRpYyBp bmxpbmUgX191MzIgaW5vdGlmeV9nZXRfY29va2llKHZvaWQpDQorew0KKwlyZXR1cm4gMDsNCit9 DQorDQorI2VuZGlmCS8qIENPTkZJR19JTk9USUZZICovDQorDQorI2VuZGlmCS8qIF9fS0VSTkVM IF9fICovDQorDQorI2VuZGlmCS8qIF9MSU5VWF9JTk9USUZZX0ggKi8NCmRpZmYgLXVyTiBsaW51 eC0yLjYuMTAvaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmggbGludXgvaW5jbHVkZS9saW51eC9t aXNjZGV2aWNlLmgNCi0tLSBsaW51eC0yLjYuMTAvaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmgJ MjAwNC0xMi0yNCAxNjozNDo1OC4wMDAwMDAwMDAgLTA1MDANCisrKyBsaW51eC9pbmNsdWRlL2xp bnV4L21pc2NkZXZpY2UuaAkyMDA1LTAxLTE4IDE2OjExOjA4LjAwMDAwMDAwMCAtMDUwMA0KQEAg LTIsNiArMiw3IEBADQogI2RlZmluZSBfTElOVVhfTUlTQ0RFVklDRV9IDQogI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPg0KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPg0KKyNpbmNsdWRlIDxsaW51 eC9kZXZpY2UuaD4NCiANCiAjZGVmaW5lIFBTTU9VU0VfTUlOT1IgIDENCiAjZGVmaW5lIE1TX0JV U01PVVNFX01JTk9SIDINCkBAIC0zMiwxMyArMzMsMTMgQEANCiANCiBzdHJ1Y3QgZGV2aWNlOw0K IA0KLXN0cnVjdCBtaXNjZGV2aWNlIA0KLXsNCitzdHJ1Y3QgbWlzY2RldmljZSAgew0KIAlpbnQg bWlub3I7DQogCWNvbnN0IGNoYXIgKm5hbWU7DQogCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZv cHM7DQogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsNCiAJc3RydWN0IGRldmljZSAqZGV2Ow0KKwlz dHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzczsNCiAJY2hhciBkZXZmc19uYW1lWzY0XTsNCiB9Ow0K IA0KZGlmZiAtdXJOIGxpbnV4LTIuNi4xMC9pbmNsdWRlL2xpbnV4L3NjaGVkLmggbGludXgvaW5j bHVkZS9saW51eC9zY2hlZC5oDQotLS0gbGludXgtMi42LjEwL2luY2x1ZGUvbGludXgvc2NoZWQu aAkyMDA0LTEyLTI0IDE2OjMzOjU5LjAwMDAwMDAwMCAtMDUwMA0KKysrIGxpbnV4L2luY2x1ZGUv bGludXgvc2NoZWQuaAkyMDA1LTAxLTE4IDE2OjExOjA4LjAwMDAwMDAwMCAtMDUwMA0KQEAgLTM1 Myw2ICszNTMsOCBAQA0KIAlhdG9taWNfdCBwcm9jZXNzZXM7CS8qIEhvdyBtYW55IHByb2Nlc3Nl cyBkb2VzIHRoaXMgdXNlciBoYXZlPyAqLw0KIAlhdG9taWNfdCBmaWxlczsJCS8qIEhvdyBtYW55 IG9wZW4gZmlsZXMgZG9lcyB0aGlzIHVzZXIgaGF2ZT8gKi8NCiAJYXRvbWljX3Qgc2lncGVuZGlu ZzsJLyogSG93IG1hbnkgcGVuZGluZyBzaWduYWxzIGRvZXMgdGhpcyB1c2VyIGhhdmU/ICovDQor CWF0b21pY190IGlub3RpZnlfd2F0Y2hlczsJLyogSG93IG1hbnkgaW5vdGlmeSB3YXRjaGVzIGRv ZXMgdGhpcyB1c2VyIGhhdmU/ICovDQorCWF0b21pY190IGlub3RpZnlfZGV2czsJLyogSG93IG1h bnkgaW5vdGlmeSBkZXZzIGRvZXMgdGhpcyB1c2VyIGhhdmUgb3BlbmVkPyAqLw0KIAkvKiBwcm90 ZWN0ZWQgYnkgbXFfbG9jawkqLw0KIAl1bnNpZ25lZCBsb25nIG1xX2J5dGVzOwkvKiBIb3cgbWFu eSBieXRlcyBjYW4gYmUgYWxsb2NhdGVkIHRvIG1xdWV1ZT8gKi8NCiAJdW5zaWduZWQgbG9uZyBs b2NrZWRfc2htOyAvKiBIb3cgbWFueSBwYWdlcyBvZiBtbG9ja2VkIHNobSA/ICovDQpkaWZmIC11 ck4gbGludXgtMi42LjEwL2tlcm5lbC91c2VyLmMgbGludXgva2VybmVsL3VzZXIuYw0KLS0tIGxp bnV4LTIuNi4xMC9rZXJuZWwvdXNlci5jCTIwMDQtMTItMjQgMTY6MzQ6MzEuMDAwMDAwMDAwIC0w NTAwDQorKysgbGludXgva2VybmVsL3VzZXIuYwkyMDA1LTAxLTE4IDE2OjExOjA4LjAwMDAwMDAw MCAtMDUwMA0KQEAgLTExOSw2ICsxMTksOCBAQA0KIAkJYXRvbWljX3NldCgmbmV3LT5wcm9jZXNz ZXMsIDApOw0KIAkJYXRvbWljX3NldCgmbmV3LT5maWxlcywgMCk7DQogCQlhdG9taWNfc2V0KCZu ZXctPnNpZ3BlbmRpbmcsIDApOw0KKwkJYXRvbWljX3NldCgmbmV3LT5pbm90aWZ5X3dhdGNoZXMs IDApOw0KKwkJYXRvbWljX3NldCgmbmV3LT5pbm90aWZ5X2RldnMsIDApOw0KIA0KIAkJbmV3LT5t cV9ieXRlcyA9IDA7DQogCQluZXctPmxvY2tlZF9zaG0gPSAwOw0K --=-Od44onNoEfxZtK69+bF0 Content-Disposition: attachment; filename=gamin-inotify-0.19.patch Content-Type: text/x-patch; name=gamin-inotify-0.19.patch; charset=UTF-8 Content-Transfer-Encoding: base64 SW5kZXg6IHNlcnZlci9nYW1faW5vdGlmeS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2cy9n bm9tZS9nYW1pbi9zZXJ2ZXIvZ2FtX2lub3RpZnkuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEu MTINCmRpZmYgLXUgLXIxLjEyIGdhbV9pbm90aWZ5LmMNCi0tLSBzZXJ2ZXIvZ2FtX2lub3RpZnku YwkyOSBKYW4gMjAwNSAxOToyOTowMCAtMDAwMAkxLjEyDQorKysgc2VydmVyL2dhbV9pbm90aWZ5 LmMJMTAgRmViIDIwMDUgMTc6NTM6MjYgLTAwMDANCkBAIC0xMTYsMTEgKzExNiwxMSBAQA0KICAg ICAgICAgICAgIHJldHVybjsNCiAgICAgICAgIH0NCiANCi0JaXdyLmRpcm5hbWUgPSBnX3N0cmR1 cChwYXRoKTsNCisJaXdyLm5hbWUgPSBnX3N0cmR1cChwYXRoKTsNCiAJaXdyLm1hc2sgPSAweGZm ZmZmZmZmOyAvLyBhbGwgZXZlbnRzDQogDQogICAgICAgICB3ZCA9IGlvY3RsKGZkLCBJTk9USUZZ X1dBVENILCAmaXdyKTsNCi0gICAgICAgIGdfZnJlZShpd3IuZGlybmFtZSk7DQorICAgICAgICBn X2ZyZWUoaXdyLm5hbWUpOw0KIA0KICAgICAgICAgaWYgKHdkIDwgMCkgew0KICAgICAgICAgICAg IEdfVU5MT0NLKGlub3RpZnkpOw0KQEAgLTIwNCwxMiArMjA0LDEyIEBADQogCQlyZXR1cm47DQog CX0NCiANCi0JaWYgKGV2ZW50LT5maWxlbmFtZVswXSAhPSAnXDAnKSB7DQorCWlmIChldmVudC0+ bmFtZVswXSAhPSAnXDAnKSB7DQogCQlpbnQgcGF0aGxlbiA9IHN0cmxlbihkYXRhLT5wYXRoKTsN CiAJCWlmIChkYXRhLT5wYXRoW3BhdGhsZW4tMV0gPT0gJy8nKSB7DQotCQkJZXZlbnRfcGF0aCA9 IGdfc3RyY29uY2F0IChkYXRhLT5wYXRoLCBldmVudC0+ZmlsZW5hbWUsIE5VTEwpOw0KKwkJCWV2 ZW50X3BhdGggPSBnX3N0cmNvbmNhdCAoZGF0YS0+cGF0aCwgZXZlbnQtPm5hbWUsIE5VTEwpOw0K IAkJfSBlbHNlIHsNCi0JCQlldmVudF9wYXRoID0gZ19zdHJjb25jYXQgKGRhdGEtPnBhdGgsICIv IiwgZXZlbnQtPmZpbGVuYW1lLCBOVUxMKTsNCisJCQlldmVudF9wYXRoID0gZ19zdHJjb25jYXQg KGRhdGEtPnBhdGgsICIvIiwgZXZlbnQtPm5hbWUsIE5VTEwpOw0KIAkJfQ0KIAl9IGVsc2Ugew0K IAkJZXZlbnRfcGF0aCA9IGdfc3RyZHVwIChkYXRhLT5wYXRoKTsNCkluZGV4OiBzZXJ2ZXIvbG9j YWxfaW5vdGlmeS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2cy9nbm9tZS9nYW1pbi9zZXJ2 ZXIvbG9jYWxfaW5vdGlmeS5oLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS40DQpkaWZmIC11IC1y MS40IGxvY2FsX2lub3RpZnkuaA0KLS0tIHNlcnZlci9sb2NhbF9pbm90aWZ5LmgJMjYgSmFuIDIw MDUgMDk6Mjc6MjMgLTAwMDAJMS40DQorKysgc2VydmVyL2xvY2FsX2lub3RpZnkuaAkxMCBGZWIg MjAwNSAxNzo1MzoyNiAtMDAwMA0KQEAgLTEsNyArMSw3IEBADQogLyoNCiAgKiBJbm9kZSBiYXNl ZCBkaXJlY3Rvcnkgbm90aWZpY2F0aW9uIGZvciBMaW51eA0KICAqDQotICogQ29weXJpZ2h0IChD KSAyMDA0IEpvaG4gTWNDdXRjaGFuDQorICogQ29weXJpZ2h0IChDKSAyMDA1IEpvaG4gTWNDdXRj aGFuDQogICovDQogDQogI2lmbmRlZiBfTElOVVhfSU5PVElGWV9IDQpAQCAtMTAsMjggKzEwLDE4 IEBADQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQogI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5o Pg0KIA0KLS8qIHRoaXMgc2l6ZSBjb3VsZCBsaW1pdCB0aGluZ3MsIHNpbmNlIHRlY2huaWNhbGx5 IHdlIGNvdWxkIG5lZWQgUEFUSF9NQVggKi8NCi0jZGVmaW5lIElOT1RJRllfRklMRU5BTUVfTUFY CTI1Ng0KLQ0KIC8qDQogICogc3RydWN0IGlub3RpZnlfZXZlbnQgLSBzdHJ1Y3R1cmUgcmVhZCBm cm9tIHRoZSBpbm90aWZ5IGRldmljZSBmb3IgZWFjaCBldmVudA0KICAqDQogICogV2hlbiB5b3Ug YXJlIHdhdGNoaW5nIGEgZGlyZWN0b3J5LCB5b3Ugd2lsbCByZWNlaXZlIHRoZSBmaWxlbmFtZSBm b3IgZXZlbnRzDQotICogc3VjaCBhcyBJTl9DUkVBVEUsIElOX0RFTEVURSwgSU5fT1BFTiwgSU5f Q0xPU0UsIC4uLg0KLSAqDQotICogTm90ZTogV2hlbiByZWFkaW5nIGZyb20gdGhlIGRldmljZSB5 b3UgbXVzdCBwcm92aWRlIGEgYnVmZmVyIHRoYXQgaXMgYQ0KLSAqIG11bHRpcGxlIG9mIHNpemVv ZihzdHJ1Y3QgaW5vdGlmeV9ldmVudCkNCisgKiBzdWNoIGFzIElOX0NSRUFURSwgSU5fREVMRVRF LCBJTl9PUEVOLCBJTl9DTE9TRSwgLi4uLCByZWxhdGl2ZSB0byB0aGUgd2QuDQogICovDQogc3Ry dWN0IGlub3RpZnlfZXZlbnQgew0KLQlfX3MzMiB3ZDsNCi0JX191MzIgbWFzazsNCi0JX191MzIg Y29va2llOw0KLQlzaXplX3QgbGVuOw0KLSNpZmRlZiBfX0tFUk5FTF9fDQotCWNoYXIgKmZpbGVu YW1lOw0KLSNlbHNlDQotCWNoYXIgZmlsZW5hbWVbMF07DQotI2VuZGlmDQorCV9fczMyIHdkOwkv KiB3YXRjaCBkZXNjcmlwdG9yICovDQorCV9fdTMyIG1hc2s7CS8qIHdhdGNoIG1hc2sgKi8NCisJ X191MzIgY29va2llOwkvKiBjb29raWUgdXNlZCBmb3Igc3luY2hyb25pemluZyB0d28gZXZlbnRz ICovDQorCXNpemVfdCBsZW47CS8qIGxlbmd0aCAoaW5jbHVkaW5nIG51bGxzKSBvZiBuYW1lICov DQorCWNoYXIgbmFtZVswXTsJLyogc3R1YiBmb3IgcG9zc2libGUgbmFtZSAqLw0KIH07DQogDQog LyoNCkBAIC00MCw3ICszMCw3IEBADQogICogUGFzcyB0byB0aGUgaW5vdGlmeSBkZXZpY2Ugdmlh IHRoZSBJTk9USUZZX1dBVENIIGlvY3RsDQogICovDQogc3RydWN0IGlub3RpZnlfd2F0Y2hfcmVx dWVzdCB7DQotCWNoYXIgKmRpcm5hbWU7CQkvKiBkaXJlY3RvcnkgbmFtZSAqLw0KKwljaGFyICpu YW1lOwkJLyogZGlyZWN0b3J5IG5hbWUgKi8NCiAJX191MzIgbWFzazsJCS8qIGV2ZW50IG1hc2sg Ki8NCiB9Ow0KIA0KQEAgLTc5LDEwICs2OSw5IEBADQogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5o Pg0KIA0KIHN0cnVjdCBpbm90aWZ5X2lub2RlX2RhdGEgew0KLQlzdHJ1Y3QgbGlzdF9oZWFkIHdh dGNoZXM7DQotCV9fdTMyIHdhdGNoX21hc2s7DQotCXNwaW5sb2NrX3QgbG9jazsNCi0JYXRvbWlj X3QgY291bnQ7DQorCXN0cnVjdCBsaXN0X2hlYWQgd2F0Y2hlczsJLyogbGlzdCBvZiB3YXRjaGVz IG9uIHRoaXMgaW5vZGUgKi8NCisJc3BpbmxvY2tfdCBsb2NrOwkJLyogbG9jayBwcm90ZWN0aW5n IHRoZSBzdHJ1Y3QgKi8NCisJYXRvbWljX3QgY291bnQ7CQkJLyogcmVmIGNvdW50ICovDQogfTsN CiANCiAjaWZkZWYgQ09ORklHX0lOT1RJRlkNCkBAIC05NCwyMyArODMsNiBAQA0KIGV4dGVybiB2 b2lkIGlub3RpZnlfc3VwZXJfYmxvY2tfdW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqKTsNCiBl eHRlcm4gdm9pZCBpbm90aWZ5X2lub2RlX2lzX2RlYWQoc3RydWN0IGlub2RlICopOw0KIGV4dGVy biBfX3UzMiBpbm90aWZ5X2dldF9jb29raWUodm9pZCk7DQotZXh0ZXJuIF9fdTMyIHNldGF0dHJf bWFza19pbm90aWZ5KHVuc2lnbmVkIGludCk7DQotDQotLyogdGhpcyBjb3VsZCBiZSBrc3RyZHVw IGlmIG9ubHkgd2UgY291bGQgYWRkIHRoYXQgdG8gbGliL3N0cmluZy5jICovDQotc3RhdGljIGlu bGluZSBjaGFyICogaW5vdGlmeV9vbGRuYW1lX2luaXQoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRy eSkNCi17DQotCWNoYXIgKm9sZF9uYW1lOw0KLQ0KLQlvbGRfbmFtZSA9IGttYWxsb2Moc3RybGVu KG9sZF9kZW50cnktPmRfbmFtZS5uYW1lKSArIDEsIEdGUF9LRVJORUwpOw0KLQlpZiAob2xkX25h bWUpDQotCQlzdHJjcHkob2xkX25hbWUsIG9sZF9kZW50cnktPmRfbmFtZS5uYW1lKTsNCi0JcmV0 dXJuIG9sZF9uYW1lOw0KLX0NCi0NCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5vdGlmeV9vbGRuYW1l X2ZyZWUoY29uc3QgY2hhciAqb2xkX25hbWUpDQotew0KLQlrZnJlZShvbGRfbmFtZSk7DQotfQ0K IA0KICNlbHNlDQogDQpAQCAtMTM0LDIxICsxMDYsNyBAQA0KIHsNCiB9DQogDQotc3RhdGljIGlu bGluZSBjaGFyICogaW5vdGlmeV9vbGRuYW1lX2luaXQoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRy eSkNCi17DQotCXJldHVybiBOVUxMOw0KLX0NCi0NCiBzdGF0aWMgaW5saW5lIF9fdTMyIGlub3Rp ZnlfZ2V0X2Nvb2tpZSh2b2lkKQ0KLXsNCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBpbmxp bmUgdm9pZCBpbm90aWZ5X29sZG5hbWVfZnJlZShjb25zdCBjaGFyICpvbGRfbmFtZSkNCi17DQot fQ0KLQ0KLXN0YXRpYyBpbmxpbmUgaW50IHNldGF0dHJfbWFza19pbm90aWZ5KHVuc2lnbmVkIGlu dCBpYV9tYXNrKQ0KIHsNCiAJcmV0dXJuIDA7DQogfQ0K --=-Od44onNoEfxZtK69+bF0 Content-Disposition: attachment; filename=inotify-utils-0.19.tar.gz Content-Type: application/x-compressed-tar; name=inotify-utils-0.19.tar.gz Content-Transfer-Encoding: base64 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 2n8AwBGqPgBQAAA= --=-Od44onNoEfxZtK69+bF0-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/