From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18435 invoked by alias); 14 Jan 2013 05:19:35 -0000 Received: (qmail 18423 invoked by uid 22791); 14 Jan 2013 05:19:32 -0000 X-SWARE-Spam-Status: No, hits=-4.5 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_CP,TW_EG,TW_RV,TW_TR,TW_XZ X-Spam-Check-By: sourceware.org Received: from mail-ob0-f173.google.com (HELO mail-ob0-f173.google.com) (209.85.214.173) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 14 Jan 2013 05:19:12 +0000 Received: by mail-ob0-f173.google.com with SMTP id xn12so3466856obc.4 for ; Sun, 13 Jan 2013 21:19:12 -0800 (PST) Received: by 10.60.171.112 with SMTP id at16mr49945889oec.47.1358140751956; Sun, 13 Jan 2013 21:19:11 -0800 (PST) MIME-Version: 1.0 Received: by 10.60.84.5 with HTTP; Sun, 13 Jan 2013 21:18:31 -0800 (PST) In-Reply-To: References: <50AC3217.6040608@mentor.com> <878v9k5g46.fsf@fleche.redhat.com> <87hamy0x0q.fsf@fleche.redhat.com> From: Hui Zhu Date: Mon, 14 Jan 2013 05:19:00 -0000 Message-ID: Subject: Re: [PATCH] Add CTF support to GDB [1/4] Add "-ctf" to tsave command To: Tom Tromey Cc: Hui Zhu , gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=bcaec54c47a2134bd204d338c942 X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2013-01/txt/msg00266.txt.bz2 --bcaec54c47a2134bd204d338c942 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 7314 Hi Tom, I found a bug when I use test to test this patch. So I post a new version to fix this bug. The change of this patch is change the same type check to: static void ctf_save_type_define_write (struct ctf_save_s *tcsp, struct type *type) { struct ctf_save_type_s *t; for (t = tcsp->type; t; t = t->next) { if (t->type == type || (TYPE_NAME (t->type) && TYPE_NAME (type) && strcmp (TYPE_NAME (t->type), TYPE_NAME (type)) == 0)) return; } Thanks, Hui On Tue, Jan 8, 2013 at 9:40 AM, Hui Zhu wrote: > Hi Tom, > > Thanks for your review. > > On Fri, Jan 4, 2013 at 5:36 AM, Tom Tromey wrote: >>>>>>> "Hui" == Hui Zhu writes: >> >> Hui> +struct ctf_save_collect_s >> Hui> +{ >> Hui> + struct ctf_save_collect_s *next; >> Hui> + char *str; >> Hui> + char *ctf_str; >> Hui> + int align_size; >> Hui> + struct expression *expr; >> Hui> + struct type *type; >> Hui> + int is_ret; >> Hui> +}; >> >>>> Like Hafiz said -- comments would be nice. >> >> Hui> I added some comments in the new patches. >> >> I looked at the new patches and did not see comments. For example, I >> looked at this struct I quoted above. >> >> Every new structure, field, and function ought to have a comment. > > OK. I added comments for them in the new patch. > >> >> >> Hui> + case TYPE_CODE_ARRAY: >> Hui> + for (; TYPE_CODE (type) == TYPE_CODE_ARRAY; >> Hui> + type = TYPE_TARGET_TYPE (type)) >> Hui> + ; >> >> Tom> You probably want some check_typedef calls in there. >> >> Hui> Because typedef will be handle as a type in this part, so this part >> Hui> doesn't need check_typedef. >> >> That seems peculiar to me, but I don't really know CTF. >> In this case you need a comment, since the result will be non-obvious to >> gdb developers. >> >> Tom> check_typedef; though if your intent is to peel just a single layer, >> Tom> then it is a bit trickier -- I think the best you can do is always call >> Tom> it, then use TYPE_TARGET_TYPE if it is non-NULL or the result of >> Tom> check_typedef otherwise. >> >> Hui> If use check_typedef, this part will generate the define that >> Hui> different with the type descriptor of the code. >> >> You need to call check_typedef before you can even examine >> TYPE_TARGET_TYPE of a typedef. This is what I meant by using it before >> using TYPE_TARGET_TYPE. Otherwise with stubs I think you will see >> crashes -- check_typedef is what sets this field. >> >> If you then use TYPE_TARGET_TYPE and get NULL, you ought to instead use >> the result of check_typedef. This means the stub had to resolve to a >> typedef in a different objfile. > > I change it to following part: > case TYPE_CODE_ARRAY: > /* This part just to get the real name of this array. > This part should keep typedef if it can. */ > for (; TYPE_CODE (type) == TYPE_CODE_ARRAY; > type = TYPE_TARGET_TYPE (type) ? TYPE_TARGET_TYPE (type) > : check_typedef (type)) > ; > >> >> Hui> If use TYPE_TARGET_TYPE, it will generate following metadata: >> Hui> typedef char test_t1; >> Hui> typedef test_t1 test_t2; >> Hui> typedef test_t2 test_t3; >> >> I suppose there should be a test case doing this. > > OK. I will write a test for all this function. > >> >> Hui> + case TYPE_CODE_PTR: >> Hui> + align_size = TYPE_LENGTH (type); >> Hui> + break; >> >> Tom> Surely the alignment rules are ABI dependent. >> Tom> I would guess that what you have will work in many cases, but definitely >> Tom> not all of them. >> >> Hui> All the type will be handle and record in function >> Hui> ctf_save_type_check_and_write. >> Hui> The size align will be handle in this function too. >> >> I don't think this really addresses the issue. >> Not all platforms use the alignment rules currently coded in >> ctf_save_type_check_and_write. But maybe it doesn't matter. >> >> Hui> + frame = get_current_frame (); >> Hui> + if (!frame) >> Hui> + error (_("get current frame fail")); >> Hui> + frame = get_prev_frame (frame); >> Hui> + if (!frame) >> Hui> + error (_("get prev frame fail")); >> Tom> >> Tom> These messages could be improved. >> >> Actually, I don't think get_current_frame can return NULL, can it? >> >> For the second error, how about "could not find previous frame"? > > Fixed. > >> >> Hui> + warning (_("\ >> Hui> +Not save \"%s\" of tracepoint %d to ctf file because get its >> Hui> value fail: %s"), >> Hui> + str, tps->tp->base.number, e.message); >> Tom> >> Tom> Likewise. >> >> Hui> Could you help me with this part? :) >> >> How about "error saving tracepoint %d to CTF file %s: %s". > > It is more better. I updated them all. > >> >> Tom> Although, this approach just seems weird, since it seems like you >> Tom> already have the symbol and you want its value; constructing and parsing >> Tom> an expression to get this is very roundabout. >> Tom> >> Tom> I'm not sure I really understand the goal here; but the parsing approach >> Tom> is particularly fragile if you have shadowing. >> >> Hui> Function ctf_save_collect_get will parse the collect string and add >> Hui> them to struct. >> Hui> Each tracepoint will call this function just once. >> >> Ok, I don't know the answer here. > > I am sorry that this part is not very clear. So I update the comments > of ctf_save_collect_get to: > /* Get var that want to collect from STR and put them to TPS->collect. > This function will not be call when GDB add a new TP. */ > > static void > ctf_save_collect_get (struct ctf_save_s *tcsp, struct ctf_save_tp_s *tps, > char *str) > > How about this? > >> >> Tom> Hmm, a lot of this code looks like code from tracepoint.c. >> Tom> I think it would be better to share the code if that is possible. >> >> Hui> I tried to share code with function add_local_symbols. But it is not >> Hui> a big function and use different way to get block. >> >> I wonder why, and whether this means that the different ways of saving >> will in fact write out different data. > > I added function add_local_symbols_1 for that. > >> >> Hui> + if (collect->expr) >> Hui> + free_current_contents (&collect->expr); >> >> Tom> Why free_current_contents here? >> Tom> That seems weird. >> >> Hui> If this collect is $_ret, it will not have collect->expr. Or maybe >> Hui> this collect will be free because when setup this collect get >> Hui> error. So check it before free it. >> >> You can just write xfree (collect->expr). >> You don't need a NULL check here. >> This applies to all those xfree calls. >> > > OK. Fixed. > > I post a new version. Please help me review it. > > Thanks, > Hui > > 2013-01-08 Hui Zhu > > * Makefile.in (REMOTE_OBS): Add ctf.o. > (SFILES): Add ctf.c. > (HFILES_NO_SRCDIR): Add ctf.h. > * ctf.c, ctf.h: New files. > * mi/mi-main.c (ctf.h): New include. > (mi_cmd_trace_save): Add "-ctf". > * tracepoint.c (ctf.h): New include. > (collect_pseudocommand): Remove static. > (trace_save_command): Add "-ctf". > (_initialize_tracepoint): Ditto. > * tracepoint.h (stack.h): New include. > (collect_pseudocommand): Add extern. --bcaec54c47a2134bd204d338c942 Content-Type: text/plain; charset=US-ASCII; name="tsave-ctf.txt" Content-Disposition: attachment; filename="tsave-ctf.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hbx5w6t31 Content-length: 56165 LS0tIGEvTWFrZWZpbGUuaW4KKysrIGIvTWFrZWZpbGUuaW4KQEAgLTUwOCw3 ICs1MDgsNyBAQCBTRVJfSEFSRFdJUkUgPSBAU0VSX0hBUkRXSVJFQAogIyBU aGUgYHJlbW90ZScgZGVidWdnaW5nIHRhcmdldCBpcyBzdXBwb3J0ZWQgZm9y IG1vc3QgYXJjaGl0ZWN0dXJlcywKICMgYnV0IG5vdCBhbGwgKGUuZy4gOTYw KQogUkVNT1RFX09CUyA9IHJlbW90ZS5vIGRjYWNoZS5vIHRyYWNlcG9pbnQu byBheC1nZW5lcmFsLm8gYXgtZ2RiLm8gcmVtb3RlLWZpbGVpby5vIFwKLQly ZW1vdGUtbm90aWYubworCXJlbW90ZS1ub3RpZi5vIGN0Zi5vCiAKICMgVGhp cyBpcyByZW1vdGUtc2ltLm8gaWYgYSBzaW11bGF0b3IgaXMgdG8gYmUgbGlu a2VkIGluLgogU0lNX09CUyA9IEBTSU1fT0JTQApAQCAtNzU1LDcgKzc1NSw3 IEBAIFNGSUxFUyA9IGFkYS1leHAueSBhZGEtbGFuZy5jIGFkYS10eXBlcHIK IAlyZWdzZXQuYyBzb2wtdGhyZWFkLmMgd2luZG93cy10ZXJtY2FwLmMgXAog CWNvbW1vbi9nZGJfdmVjcy5jIGNvbW1vbi9jb21tb24tdXRpbHMuYyBjb21t b24veG1sLXV0aWxzLmMgXAogCWNvbW1vbi9wdGlkLmMgY29tbW9uL2J1ZmZl ci5jIGdkYi1kbGZjbi5jIGNvbW1vbi9hZ2VudC5jIFwKLQljb21tb24vZm9y bWF0LmMKKwljb21tb24vZm9ybWF0LmMgY3RmLmMKIAogTElOVEZJTEVTID0g JChTRklMRVMpICQoWVlGSUxFUykgJChDT05GSUdfU1JDUykgaW5pdC5jCiAK QEAgLTgzMSw3ICs4MzEsNyBAQCBnbnVsaWIvaW1wb3J0L3N0ZGRlZi5pbi5o IGdudWxpYi9pbXBvcnQvCiBjb21tb24vY29tbW9uLXV0aWxzLmggY29tbW9u L3htbC11dGlscy5oIGNvbW1vbi9idWZmZXIuaCBjb21tb24vcHRpZC5oIFwK IGNvbW1vbi9mb3JtYXQuaCBjb21tb24vaG9zdC1kZWZzLmggdXRpbHMuaCBj b21tb24vcXVldWUuaCBcCiBjb21tb24vbGludXgtb3NkYXRhLmggZ2RiLWRs ZmNuLmggYXV0by1sb2FkLmggcHJvYmUuaCBzdGFwLXByb2JlLmggXAotZ2Ri X2JmZC5oIHNwYXJjLXJhdmVuc2Nhci10aHJlYWQuaCBwcGMtcmF2ZW5zY2Fy LXRocmVhZC5oCitnZGJfYmZkLmggc3BhcmMtcmF2ZW5zY2FyLXRocmVhZC5o IHBwYy1yYXZlbnNjYXItdGhyZWFkLmggY3RmLmgKIAogIyBIZWFkZXIgZmls ZXMgdGhhdCBhbHJlYWR5IGhhdmUgc3JjZGlyIGluIHRoZW0sIG9yIHdoaWNo IGFyZSBpbiBvYmpkaXIuCiAKLS0tIC9kZXYvbnVsbAorKysgYi9jdGYuYwpA QCAtMCwwICsxLDEyODMgQEAKKy8qIENURiBmb3JtYXQgc3VwcG9ydC4KKwor ICAgQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4K KworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgImRl ZnMuaCIKKyNpbmNsdWRlICJjdGYuaCIKKyNpbmNsdWRlICJ0cmFjZXBvaW50 LmgiCisjaW5jbHVkZSAicmVnY2FjaGUuaCIKKyNpbmNsdWRlICJnZGJjbWQu aCIKKyNpbmNsdWRlICJleGNlcHRpb25zLmgiCisjaW5jbHVkZSAic3RhY2su aCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKKy8qIEZvbGxvd2luZyBwYXJ0 IGlzIGZvciB0c2F2ZS4gICovCisKKyNkZWZpbmUgQ1RGX01BR0lDCQkweEMx RkMxRkMxCisjZGVmaW5lIENURl9TQVZFX01BSk9SCQkxCisjZGVmaW5lIENU Rl9TQVZFX01JTk9SCQk4CisKKyNkZWZpbmUgQ1RGX01FVEFEQVRBX05BTUUJ Im1ldGFkYXRhIgorI2RlZmluZSBDVEZfREFUQVNUUkVBTV9OQU1FCSJkYXRh c3RyZWFtIgorCisjZGVmaW5lIENURl9QQUNLRVRfU0laRQkJNDA5NgorCisj ZGVmaW5lIEFMSUdOX1NJWkUoc2l6ZSwgYWxpZ24pIFwKKwkoKCgoYWxpZ24p ICsgKHNpemUpIC0gMSkgJiAofigoYWxpZ24pIC0gMSkpKSAtIChzaXplKSkK KworLyogVGhlIGVudHJ5IG9mIGNvbGxlY3QgbGlzdCBvZiBhIFRQLiAgKi8K Kworc3RydWN0IGN0Zl9zYXZlX2NvbGxlY3RfcworeworICBzdHJ1Y3QgY3Rm X3NhdmVfY29sbGVjdF9zICpuZXh0OworCisgIC8qIFBvaW50IHRoZSBvcmln aW5hbCBjb2xsZWN0IHN0cmluZy4gICovCisKKyAgY2hhciAqc3RyOworCisg IC8qIFBvaW50IHN0cmluZyB0aGUgY29udmVydCBmcm9tIFNUUiB0byB0aGUg Zm9ybWF0CisgICAgIHRoYXQgY2FuIHNhdmUgdG8gQ1RGLiAqLworCisgIGNo YXIgKmN0Zl9zdHI7CisKKyAgLyogQWxpZ24gc2l6ZSBvZiB0aGlzIGNvbGxl Y3QuICAqLworCisgIGludCBhbGlnbl9zaXplOworCisgIC8qIFRoZSBleHBy ZXNzaW9uIHRoYXQgZ2V0IGZyb20gU1RSLiAqLworCisgIHN0cnVjdCBleHBy ZXNzaW9uICpleHByOworCisgIC8qIFRoZSB0eXBlIG9mIHRoaXMgY29sbGVj dC4gICovCisKKyAgc3RydWN0IHR5cGUgKnR5cGU7CisKKyAgLyogSWYgdHJ1 ZSwgdGhpcyBjb2xsZWN0IGlzICRfcmV0LiAgKi8KKworICBpbnQgaXNfcmV0 OworfTsKKworLyogVGhlIGVudHJ5IG9mIHRyYWNlcG9pbnQgbGlzdCB0aGF0 IHdpbGwgc2F2ZSB0byBDVEYuICAqLworCitzdHJ1Y3QgY3RmX3NhdmVfdHBf cworeworICBzdHJ1Y3QgY3RmX3NhdmVfdHBfcyAqbmV4dDsKKworICBzdHJ1 Y3QgdHJhY2Vwb2ludCAqdHA7CisKKyAgLyogSWYgdHJ1ZSwgdGhpcyBpcyB0 aGUgc3RlcCBjb2xsZWN0IG9mIHRoaXMgVFAuCisgICAgIERpdmlkZSBUUCB0 byBub24tc3RlcCBjb2xsZWN0IGFuZCBzdGVwIGNvbGxlY3QKKyAgICAgYmVj YXVzZSB0aGV5IGNvbGxlY3QgZGlmZmVyZW50IHZhbHVlLiAgKi8KKworICBp bnQgc3RlcHBpbmdfZnJhbWU7CisKKyAgLyogVGhlIGNvbGxlY3QgbGlzdCBm b3IgdGhpcyBUUC4gICovCisKKyAgc3RydWN0IGN0Zl9zYXZlX2NvbGxlY3Rf cyAqY29sbGVjdDsKKworICAvKiBFYWNoIHRyYWNlZnJhbWUgZW50cnkgb2Yg YSB0cmFjZXBvaW50IHdpbGwgc2F2ZSBhcyBhIGRhdGEgZm9ybWF0CisgICAg IGxpa2UgYSBzdHJ1Y3QuCisgICAgIFRoaXMgaXMgdGhlIGFsaWduIHNpemUg b2YgdGhpcyBzdHJ1Y3QuICAqLworCisgIGludCBhbGlnbl9zaXplOworCisg IC8qIElmIHRydWUsIHRoZSBzaXplIG9mIHRoaXMgc3RydWN0IGlzIHZhcmlh YmxlLiAgKi8KKworICBpbnQgaXNfdmFyaWFibGVfbGVuZ3RoOworCisgIC8q IElmIHRydWUsIGFsbCB0aGUgdHJhY2VmcmFtZSBlbnRyeSBvZiB0aGlzIFRQ IHdpbGwgbm90IHNhdmUgdG8gQ1RGLgorICAgICBBZGQgYSBmbGFnIGluc3Rl YWQgb2YganVzdCByZW1vdmUgdGhpcyBzdHJ1Y3QgYmVjYXVzZSBHREIganVz dCBjYW4KKyAgICAgZ2V0IHRyYWNlcG9pbnQgaW5mb3JtYXRpb24gdGhyb3Vn aCB0cmFjZWZyYW1lIGVudHJ5LgorICAgICBJZiBqdXN0IHJlbW92ZSB0aGlz IHN0cnVjdCwgR0RCIHdpbGwgYWRkIGEgbmV3IHN0cnVjdCB3aGVuIEdEQiBn ZXQKKyAgICAgYW5vdGhlciB0cmFjZWZyYW1lIG9mIHRoaXMgVFAuCisgICAg IFVzZSBhIGZsYWcsIHdoZW4gR0RCIGdldCBhbm90aGVyIHRyYWNlZnJhbWUg b2YgdGhpcyBUUCwgR0RCIHdpbGwKKyAgICAga25vdyB0aGlzIHRyYWNlZnJh bWUgbmVlZCB0byBiZSBkcm9wcGVkIHdoZW4gaXQgZ2V0IGl0IHRocm91Z2gK KyAgICAgdGhpcyBmbGFnLiAgKi8KKworICBpbnQgaXNfZHJvcHBlZDsKK307 CisKKy8qIFRoZSBlbnRyeSBvZiB0eXBlIGxpc3QgdGhhdCB3aWxsIHNhdmUg dG8gQ1RGLiAgKi8KKworc3RydWN0IGN0Zl9zYXZlX3R5cGVfcworeworICBz dHJ1Y3QgY3RmX3NhdmVfdHlwZV9zICpuZXh0OworCisgIHN0cnVjdCB0eXBl ICp0eXBlOworfTsKKworLyogVGhlIGRhdGEgc3RydWN0IGZvciBDVEZfU0FW RS4gICovCisKK3N0cnVjdCBjdGZfc2F2ZV9zCit7CisgIEZJTEUgKm1ldGFk YXRhX2ZkOworICBGSUxFICpkYXRhc3RyZWFtX2ZkOworCisgIC8qIFRoaXMg aXMgdGhlIGNvbnRlbnQgc2l6ZSBvZiBjdXJyZW50IHBhY2tldC4gICovCisg IHNpemVfdCBjb250ZW50X3NpemU7CisKKyAgLyogVGhpcyBpcyB0aGUgYmVn aW4gb2Zmc2V0IG9mIGN1cnJlbnQgcGFja2V0LiAgKi8KKyAgbG9uZyBwYWNr ZXRfYmVnaW47CisKKyAgLyogSWYgdHJ1ZSwgbmVlZCBjaGVjayBpZiBjb250 ZW50X3NpemUgYmlnZ2VyIHRoYW4gQ1RGX1BBQ0tFVF9TSVpFLiAgKi8KKyAg aW50IGNoZWNrX3NpemU7CisKKyAgLyogVGhpcyBpcyB0aGUgY29udGVudCBz aXplIG9mIGN1cnJlbnQgcGFja2V0IGFuZCBldmVudCB0aGF0IGlzCisgICAg IGJlaW5nIHdyaXR0ZW4gdG8gZmlsZS4KKyAgICAgQ2hlY2sgc2l6ZSB1c2Ug aXQuICAqLworICBzaXplX3QgY3VycmVudF9jb250ZW50X3NpemU7CisKKyAg LyogU2F2ZSB0aGUgbnVtYmVyIG9mIHRyYWNlIGZyYW1lIGJlZm9yZSBjYWxs IGN0Zl9zYXZlLgorICAgICBTZXQgaXQgYmFjayB3aGVuIHJldHVybiBjdGZf c2F2ZS4gICovCisgIGludCBvbGRfdHJhY2VmcmFtZV9udW07CisKKyAgLyog VHJhY2Vwb2ludCBsaXN0LiAgKi8KKyAgc3RydWN0IGN0Zl9zYXZlX3RwX3Mg KnRwOworCisgIC8qIFR5cGUgbGlzdC4gICovCisgIHN0cnVjdCBjdGZfc2F2 ZV90eXBlX3MgKnR5cGU7CisKKyAgY29uc3QgY2hhciAqdGFiOworfTsKKwor c3RhdGljIHZvaWQKK2N0Zl9zYXZlX2Z3cml0ZSAoRklMRSAqZmQsIGNvbnN0 IGdkYl9ieXRlICpidWYsIHNpemVfdCBzaXplKQoreworICBpZiAoZndyaXRl IChidWYsIHNpemUsIDEsIGZkKSAhPSAxKQorICAgIGVycm9yIChfKCJVbmFi bGUgdG8gd3JpdGUgZmlsZSBmb3Igc2F2aW5nIHRyYWNlIGRhdGEgKCVzKSIp LAorCSAgIHNhZmVfc3RyZXJyb3IgKGVycm5vKSk7Cit9CisKK3N0YXRpYyB2 b2lkCitjdGZfc2F2ZV9md3JpdGVfZm9ybWF0XzEgKEZJTEUgKmZkLCBjb25z dCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKK3sKKyAgY2hhciAqbGlu ZWJ1ZmZlcjsKKyAgc3RydWN0IGNsZWFudXAgKm9sZF9jbGVhbnVwczsKKwor ICBsaW5lYnVmZmVyID0geHN0cnZwcmludGYgKGZvcm1hdCwgYXJncyk7Cisg IG9sZF9jbGVhbnVwcyA9IG1ha2VfY2xlYW51cCAoeGZyZWUsIGxpbmVidWZm ZXIpOworICBjdGZfc2F2ZV9md3JpdGUgKGZkLCBsaW5lYnVmZmVyLCBzdHJs ZW4gKGxpbmVidWZmZXIpKTsKKyAgZG9fY2xlYW51cHMgKG9sZF9jbGVhbnVw cyk7Cit9CisKKy8qIFdyaXRlIGRhdGEgaW4gRk9STUFUIHRvIEZELiAgKi8K Kworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKEZJTEUg KmZkLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBh cmdzOworCisgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworICBjdGZfc2F2 ZV9md3JpdGVfZm9ybWF0XzEgKGZkLCBmb3JtYXQsIGFyZ3MpOworICB2YV9l bmQgKGFyZ3MpOworfQorCisvKiBXcml0ZSBCVUYgdGhhdCBzaXplIGlzIFNJ WkUgdG8gZGF0YXN0cmVhbSBmaWxlLiAgKi8KKworc3RhdGljIGludAorY3Rm X3NhdmVfd3JpdGUgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwLCBjb25zdCBn ZGJfYnl0ZSAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKyAgaWYgKHRjc3AtPmNo ZWNrX3NpemUpCisgICAgeworICAgICAgaWYgKHRjc3AtPmN1cnJlbnRfY29u dGVudF9zaXplICsgc2l6ZSA+IENURl9QQUNLRVRfU0laRSkKKyAgICAgICAg cmV0dXJuIC0xOworICAgIH0KKworICBjdGZfc2F2ZV9md3JpdGUgKHRjc3At PmRhdGFzdHJlYW1fZmQsIGJ1Ziwgc2l6ZSk7CisKKyAgdGNzcC0+Y3VycmVu dF9jb250ZW50X3NpemUgKz0gc2l6ZTsKKworICByZXR1cm4gMDsKK30KKwor LyogU2V0IGRhdGFzdHJlYW0gZmlsZSBwb3NpdGlvbiBpbmRpY2F0b3IgYWNj b3JkaW5nIHRvIE9GRlNFVAorICAgYW5kIFdIRU5DRS4gICovCisKK3N0YXRp YyBpbnQKK2N0Zl9zYXZlX2ZzZWVrIChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNz cCwgbG9uZyBvZmZzZXQsIGludCB3aGVuY2UpCit7CisgIGlmICh3aGVuY2Ug PT0gU0VFS19DVVIgJiYgdGNzcC0+Y2hlY2tfc2l6ZSkKKyAgICB7CisgICAg ICBpZiAodGNzcC0+Y3VycmVudF9jb250ZW50X3NpemUgKyBvZmZzZXQgPiBD VEZfUEFDS0VUX1NJWkUpCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisK KyAgaWYgKGZzZWVrICh0Y3NwLT5kYXRhc3RyZWFtX2ZkLCBvZmZzZXQsIHdo ZW5jZSkpCisgICAgZXJyb3IgKF8oIlVuYWJsZSB0byBzZWVrIGZpbGUgZm9y IHNhdmluZyB0cmFjZSBkYXRhICglcykiKSwKKwkgICBzYWZlX3N0cmVycm9y IChlcnJubykpOworCisgIGlmICh3aGVuY2UgPT0gU0VFS19DVVIpCisgICAg dGNzcC0+Y3VycmVudF9jb250ZW50X3NpemUgKz0gb2Zmc2V0OworCisgIHJl dHVybiAwOworfQorCisvKiBBbGlnbmVkIEFMSUdOX1NJWkUgd3JpdGUgQlVG IHRoYXQgc2l6ZSBpcyBTSVpFCisgICB0byBkYXRhc3RyZWFtIGZpbGUuICAq LworCitzdGF0aWMgaW50CitjdGZfc2F2ZV9hbGlnbl93cml0ZSAoc3RydWN0 IGN0Zl9zYXZlX3MgKnRjc3AsIGNvbnN0IGdkYl9ieXRlICpidWYsCisJCSAg ICAgIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25fc2l6ZSkKK3sKKyAgaWYg KGN0Zl9zYXZlX2ZzZWVrICh0Y3NwLAorCQkgICAgICBBTElHTl9TSVpFICh0 Y3NwLT5jdXJyZW50X2NvbnRlbnRfc2l6ZSwgYWxpZ25fc2l6ZSksCisJCSAg ICAgIFNFRUtfQ1VSKSkKKyAgICByZXR1cm4gLTE7CisKKyAgaWYgKGN0Zl9z YXZlX3dyaXRlICh0Y3NwLCBidWYsIHNpemUpKQorICAgIHJldHVybiAtMTsK KworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3RmX3NhdmVfdHlw ZV9kZWZpbmVfd3JpdGUgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwLAorCQkJ CQlzdHJ1Y3QgdHlwZSAqdHlwZSk7CisKKy8qIFdyaXRlIHRoZSB0eXBlIHBh cnQgb2YgYSB2YXIgZGVmaW5lIHRvIENURiBtZXRhZGF0YSBmaWxlLiAgKi8K Kworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX3R5cGVfbmFtZV93cml0ZSAoc3Ry dWN0IGN0Zl9zYXZlX3MgKnRjc3AsIHN0cnVjdCB0eXBlICp0eXBlKQorewor ICBzd2l0Y2ggKFRZUEVfQ09ERSAodHlwZSkpCisgICAgeworICAgIGNhc2Ug VFlQRV9DT0RFX0FSUkFZOgorICAgICAgLyogVGhpcyBwYXJ0IGp1c3QgdG8g Z2V0IHRoZSByZWFsIG5hbWUgb2YgdGhpcyBhcnJheS4KKyAgICAgICAgIFRo aXMgcGFydCBzaG91bGQga2VlcCB0eXBlZGVmIGlmIGl0IGNhbi4gICovCisg ICAgICBmb3IgKDsgVFlQRV9DT0RFICh0eXBlKSA9PSBUWVBFX0NPREVfQVJS QVk7CisJICAgdHlwZSA9IFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpID8gVFlQ RV9UQVJHRVRfVFlQRSAodHlwZSkKKwkJCQkJICA6IGNoZWNrX3R5cGVkZWYg KHR5cGUpKQorCTsKKyAgICAgIGlmIChUWVBFX05BTUUgKHR5cGUpKQorICAg ICAgICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRhZGF0YV9m ZCwgIiVzIiwgVFlQRV9OQU1FICh0eXBlKSk7CisgICAgICBlbHNlCisJY3Rm X3NhdmVfdHlwZV9kZWZpbmVfd3JpdGUgKHRjc3AsIHR5cGUpOworICAgICAg YnJlYWs7CisKKyAgICBjYXNlIFRZUEVfQ09ERV9QVFI6CisgICAgICBpZiAo VFlQRV9MRU5HVEggKHR5cGUpID09IDgpCisJY3RmX3NhdmVfZndyaXRlX2Zv cm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsICJ1aW50NjRfdCIpOworICAgICAg ZWxzZQorCWN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRh X2ZkLCAidWludDMyX3QiKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBU WVBFX0NPREVfU1RSVUNUOgorICAgIGNhc2UgVFlQRV9DT0RFX0VOVU06Cisg ICAgICBpZiAoVFlQRV9UQUdfTkFNRSAodHlwZSkpCisgICAgICAgIGN0Zl9z YXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiJXMgJXMi LAorCQkJCVRZUEVfQ09ERSAodHlwZSkgPT0gVFlQRV9DT0RFX1NUUlVDVCA/ CisJCQkJInN0cnVjdCIgOiAiZW51bSIsCisJCQkJVFlQRV9UQUdfTkFNRSAo dHlwZSkpOworICAgICAgZWxzZQorCWN0Zl9zYXZlX3R5cGVfZGVmaW5lX3dy aXRlICh0Y3NwLCB0eXBlKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBU WVBFX0NPREVfVU5JT046CisgICAgICB7CisJaW50IGksIGJpZ2dlc3RfaWQs IGJpZ2dlc3Rfc2l6ZSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgVFlQRV9O RklFTERTICh0eXBlKTsgKytpKQorCSAgeworCSAgICBpZiAoYmlnZ2VzdF9z aXplIDwgVFlQRV9MRU5HVEggKFRZUEVfRklFTERfVFlQRSAodHlwZSwgaSkp KQorCSAgICAgIHsKKwkJYmlnZ2VzdF9zaXplID0gVFlQRV9MRU5HVEggKFRZ UEVfRklFTERfVFlQRSAodHlwZSwgaSkpOworCQliaWdnZXN0X2lkID0gaTsK KwkgICAgICB9CisJICB9CisJY3RmX3NhdmVfdHlwZV9uYW1lX3dyaXRlICh0 Y3NwLCBUWVBFX0ZJRUxEX1RZUEUgKHR5cGUsIGJpZ2dlc3RfaWQpKTsKKwli cmVhazsKKyAgICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICBjdGZfc2F2 ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgIiVzIiwgVFlQ RV9OQU1FICh0eXBlKSk7CisgICAgICBicmVhazsKKyAgICB9Cit9CisKKy8q IFdyaXRlIHRoZSBzaXplIHBhcnQgb2YgYSB2YXIgZGVmaW5lIHRvIENURiBt ZXRhZGF0YSBmaWxlLiAgKi8KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX3R5 cGVfc2l6ZV93cml0ZSAoc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3AsIHN0cnVj dCB0eXBlICp0eXBlKQoreworICBpZiAoVFlQRV9DT0RFICh0eXBlKSA9PSBU WVBFX0NPREVfQVJSQVkpCisgICAgeworICAgICAgLyogVGhpcyBwYXJ0IGp1 c3QgdG8gZ2V0IHRoZSByZWFsIG5hbWUgb2YgdGhpcyBhcnJheS4KKyAgICAg ICAgIFRoaXMgcGFydCBzaG91bGQga2VlcCB0eXBlZGVmIGlmIGl0IGNhbi4g ICovCisgICAgICBmb3IgKDsgVFlQRV9DT0RFICh0eXBlKSA9PSBUWVBFX0NP REVfQVJSQVk7CisJICAgdHlwZSA9IFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUp ID8gVFlQRV9UQVJHRVRfVFlQRSAodHlwZSkKKwkJCQkJICA6IGNoZWNrX3R5 cGVkZWYgKHR5cGUpKQorCWN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3At Pm1ldGFkYXRhX2ZkLCAiWyVkXSIsCisJCQkJVFlQRV9MRU5HVEggKHR5cGUp IC8KKwkJCQlUWVBFX0xFTkdUSCAoVFlQRV9UQVJHRVRfVFlQRSAodHlwZSkp KTsKKyAgICB9Cit9CisKKy8qIFdyaXRlIGEgdmFyIGRlZmluZSB0byBDVEYg bWV0YWRhdGEgZmlsZS4gICovCisKK3N0YXRpYyB2b2lkCitjdGZfc2F2ZV92 YXJfZGVmaW5lX3dyaXRlIChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCwgc3Ry dWN0IHR5cGUgKnR5cGUsCisJCQkgICBjb25zdCBjaGFyICpuYW1lKQorewor ICBjdGZfc2F2ZV90eXBlX25hbWVfd3JpdGUgKHRjc3AsIHR5cGUpOworICBj dGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgIiAl cyIsIG5hbWUpOworICBjdGZfc2F2ZV90eXBlX3NpemVfd3JpdGUgKHRjc3As IHR5cGUpOworICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRh ZGF0YV9mZCwgIjtcbiIpOworfQorCisvKiBXcml0ZSBUWVBFIHRvIFRDU1At Pm1ldGFkYXRhX2ZkLiAgKi8KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX3R5 cGVfZGVmaW5lX3dyaXRlIChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCwgc3Ry dWN0IHR5cGUgKnR5cGUpCit7CisgIHN0cnVjdCBjdGZfc2F2ZV90eXBlX3Mg KnQ7CisKKyAgZm9yICh0ID0gdGNzcC0+dHlwZTsgdDsgdCA9IHQtPm5leHQp CisgICAgeworICAgICAgaWYgKHQtPnR5cGUgPT0gdHlwZQorCSAgfHwgKFRZ UEVfTkFNRSAodC0+dHlwZSkgJiYgVFlQRV9OQU1FICh0eXBlKQorCSAgICAg ICYmIHN0cmNtcCAoVFlQRV9OQU1FICh0LT50eXBlKSwgVFlQRV9OQU1FICh0 eXBlKSkgPT0gMCkpCisJcmV0dXJuOworICAgIH0KKworICB0ID0gKHN0cnVj dCBjdGZfc2F2ZV90eXBlX3MgKikgeHphbGxvYyAoc2l6ZW9mICgqdCkpOwor ICB0LT50eXBlID0gdHlwZTsKKworICB0LT5uZXh0ID0gdGNzcC0+dHlwZTsK KyAgdGNzcC0+dHlwZSA9IHQ7CisKKyAgLyogSWdub3JlIHR5cGUgdWludDMy X3QgYW5kIHVpbnQ2NF90IGJlY2F1c2UgdGhleSBoYXZlIHdyaXR0ZW4KKyAg ICAgaW4gZnVuY3Rpb24gY3RmX3NhdmVfbWV0YWRhdGFfaGVhZGVyLiAgKi8K KyAgaWYgKFRZUEVfTkFNRSAodHlwZSkgJiYgKHN0cmNtcCAoVFlQRV9OQU1F ICh0eXBlKSwgInVpbnQzMl90IikgPT0gMAorCQkJICAgfHwgc3RyY21wIChU WVBFX05BTUUgKHR5cGUpLCAidWludDY0X3QiKSA9PSAwKSkKKyAgICByZXR1 cm47CisKKyAgc3dpdGNoIChUWVBFX0NPREUgKHR5cGUpKQorICAgIHsKKyAg ICAgIGNhc2UgVFlQRV9DT0RFX1RZUEVERUY6CisJY3RmX3NhdmVfZndyaXRl X2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsICJ0eXBlZGVmICIpOworCWN0 Zl9zYXZlX3Zhcl9kZWZpbmVfd3JpdGUgKHRjc3AsIFRZUEVfVEFSR0VUX1RZ UEUgKHR5cGUpLAorCQkJCSAgIFRZUEVfTkFNRSAodHlwZSkpOworCWJyZWFr OworCisgICAgICBjYXNlIFRZUEVfQ09ERV9JTlQ6CisJY3RmX3NhdmVfZndy aXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsICJcCit0eXBlYWxpYXMg aW50ZWdlciB7IHNpemUgPSAlZDsgYWxpZ24gPSAlZDsgc2lnbmVkID0gJXM7 IH0gOj0gJXM7XG4iLAorCQkJCVRZUEVfTEVOR1RIICh0eXBlKSAqIFRBUkdF VF9DSEFSX0JJVCwKKwkJCQlUWVBFX0xFTkdUSCAodHlwZSkgKiBUQVJHRVRf Q0hBUl9CSVQsCisJCQkJIVRZUEVfVU5TSUdORUQgKHR5cGUpID8gInRydWUi IDogImZhbHNlIiwKKwkJCQlUWVBFX05BTUUgKHR5cGUpKTsKKwlicmVhazsK KworICAgICAgY2FzZSBUWVBFX0NPREVfU1RSVUNUOgorICAgICAgY2FzZSBU WVBFX0NPREVfRU5VTToKKyAgICAgICAgeworCSAgaW50IGk7CisJICBjaGFy IHRhYlsyNTZdOworCSAgY29uc3QgY2hhciAqb2xkX3RhYjsKKworCSAgY3Rm X3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsICIlcyAl cyB7XG4iLAorCQkJCSAgVFlQRV9DT0RFICh0eXBlKSA9PSBUWVBFX0NPREVf U1RSVUNUID8KKwkJCQkgICJzdHJ1Y3QiIDogImVudW0iLAorCQkJCSAgVFlQ RV9UQUdfTkFNRSAodHlwZSkgPyBUWVBFX1RBR19OQU1FICh0eXBlKQorCQkJ CQkJICAgICAgIDogIiIpOworCisJICBvbGRfdGFiID0gdGNzcC0+dGFiOwor CSAgc25wcmludGYgKHRhYiwgMjU2LCAiJXNcdCIsIG9sZF90YWIpOworCSAg dGNzcC0+dGFiID0gdGFiOworCSAgZm9yIChpID0gMDsgaSA8IFRZUEVfTkZJ RUxEUyAodHlwZSk7ICsraSkKKwkgICAgeworCSAgICAgIGlmIChUWVBFX0NP REUgKHR5cGUpID09IFRZUEVfQ09ERV9TVFJVQ1QpCisJICAgICAgICB7CisJ CSAgY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQs IHRjc3AtPnRhYik7CisJCSAgY3RmX3NhdmVfdmFyX2RlZmluZV93cml0ZSAo dGNzcCwgVFlQRV9GSUVMRF9UWVBFICh0eXBlLCBpKSwKKwkJCQkJICAgICBU WVBFX0ZJRUxEX05BTUUgKHR5cGUsIGkpKTsKKwkJfQorCSAgICAgIGVsc2UK KwkJY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQs ICIlcyVzID0gJXMsXG4iLAorCQkJCQl0Y3NwLT50YWIsIFRZUEVfRklFTERf TkFNRSAodHlwZSwgaSksCisJCQkJCXBsb25nZXN0IChUWVBFX0ZJRUxEX0VO VU1WQUwgKHR5cGUsIGkpKSk7CisJICAgIH0KKwkgIHRjc3AtPnRhYiA9IG9s ZF90YWI7CisJICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRh ZGF0YV9mZCwgIiVzfSIsIHRjc3AtPnRhYik7CisJICBpZiAoVFlQRV9UQUdf TkFNRSAodHlwZSkpCisJICAgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRj c3AtPm1ldGFkYXRhX2ZkLCAiO1xuIik7CisJICBicmVhazsKKwl9CisgICAg fQorfQorCisvKiBDaGVjayBpZiB0aGlzIHR5cGUgaXMgc3VwcG9ydCBieSBH REIuCisgICBSZXR1cm4gdGhlIGFsaWduIHNpemUuICAqLworCitzdGF0aWMg aW50CitjdGZfc2F2ZV90eXBlX2NoZWNrX2FuZF93cml0ZSAoc3RydWN0IGN0 Zl9zYXZlX3MgKnRjc3AsIHN0cnVjdCB0eXBlICp0eXBlKQoreworICBpbnQg YWxpZ25fc2l6ZSA9IDA7CisKKyAgc3dpdGNoIChUWVBFX0NPREUgKHR5cGUp KQorICAgIHsKKyAgICAgIGNhc2UgVFlQRV9DT0RFX1RZUEVERUY6CisJYWxp Z25fc2l6ZSA9IGN0Zl9zYXZlX3R5cGVfY2hlY2tfYW5kX3dyaXRlICh0Y3Nw LAorCQkJCQkJICAgIFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpKTsKKwlpZiAo YWxpZ25fc2l6ZSA8IDApCisJICByZXR1cm4gYWxpZ25fc2l6ZTsKKwljdGZf c2F2ZV90eXBlX2RlZmluZV93cml0ZSAodGNzcCwgdHlwZSk7CisJYnJlYWs7 CisKKyAgICAgIGNhc2UgVFlQRV9DT0RFX0FSUkFZOgorCWFsaWduX3NpemUg PSBjdGZfc2F2ZV90eXBlX2NoZWNrX2FuZF93cml0ZSAodGNzcCwKKwkJCQkJ CSAgICBUWVBFX1RBUkdFVF9UWVBFICh0eXBlKSk7CisJaWYgKGFsaWduX3Np emUgPCAwKQorCSAgcmV0dXJuIGFsaWduX3NpemU7CisJYnJlYWs7CisKKyAg ICAgIGNhc2UgVFlQRV9DT0RFX0lOVDoKKwljdGZfc2F2ZV90eXBlX2RlZmlu ZV93cml0ZSAodGNzcCwgdHlwZSk7CisJYWxpZ25fc2l6ZSA9IFRZUEVfTEVO R1RIICh0eXBlKTsKKwlicmVhazsKKworICAgICAgY2FzZSBUWVBFX0NPREVf UFRSOgorCWFsaWduX3NpemUgPSBUWVBFX0xFTkdUSCAodHlwZSk7CisJYnJl YWs7CisKKyAgICAgIGNhc2UgVFlQRV9DT0RFX1NUUlVDVDoKKyAgICAgICAg eworCSAgaW50IGksIHNfYWxpZ25fc2l6ZTsKKworCSAgZm9yIChpID0gMDsg aSA8IFRZUEVfTkZJRUxEUyAodHlwZSk7ICsraSkKKwkgICAgeworCSAgICAg IHNfYWxpZ25fc2l6ZQorCQkgID0gY3RmX3NhdmVfdHlwZV9jaGVja19hbmRf d3JpdGUgKHRjc3AsCisJCQkJCQkgICBUWVBFX0ZJRUxEX1RZUEUgKHR5cGUs IGkpKTsKKwkgICAgICBpZiAoc19hbGlnbl9zaXplIDwgMCkKKwkJcmV0dXJu IHNfYWxpZ25fc2l6ZTsKKworCSAgICAgIGlmIChhbGlnbl9zaXplIDwgc19h bGlnbl9zaXplKQorCQlhbGlnbl9zaXplID0gc19hbGlnbl9zaXplOworCSAg ICB9CisJICBpZiAoVFlQRV9UQUdfTkFNRSAodHlwZSkpCisJICAgIGN0Zl9z YXZlX3R5cGVfZGVmaW5lX3dyaXRlICh0Y3NwLCB0eXBlKTsKKwkgIGJyZWFr OworCX0KKworICAgICAgY2FzZSBUWVBFX0NPREVfRU5VTToKKwlhbGlnbl9z aXplID0gVFlQRV9MRU5HVEggKHR5cGUpOworCWlmIChUWVBFX1RBR19OQU1F ICh0eXBlKSkKKwkgIGN0Zl9zYXZlX3R5cGVfZGVmaW5lX3dyaXRlICh0Y3Nw LCB0eXBlKTsKKwlicmVhazsKKworICAgICAgY2FzZSBUWVBFX0NPREVfVU5J T046CisgICAgICAgIHsKKwkgIGludCBpLCBzX2FsaWduX3NpemU7CisKKwkg IGZvciAoaSA9IDA7IGkgPCBUWVBFX05GSUVMRFMgKHR5cGUpOyArK2kpCisJ ICAgIHsKKwkgICAgICBzX2FsaWduX3NpemUKKwkJICA9IGN0Zl9zYXZlX3R5 cGVfY2hlY2tfYW5kX3dyaXRlICh0Y3NwLAorCQkJCQkJICAgVFlQRV9GSUVM RF9UWVBFICh0eXBlLCBpKSk7CisJICAgICAgaWYgKHNfYWxpZ25fc2l6ZSA8 IDApCisJCXJldHVybiBzX2FsaWduX3NpemU7CisKKwkgICAgICBpZiAoYWxp Z25fc2l6ZSA8IHNfYWxpZ25fc2l6ZSkKKwkJYWxpZ25fc2l6ZSA9IHNfYWxp Z25fc2l6ZTsKKwkgICAgfQorCSAgYnJlYWs7CisJfQorCisgICAgICBkZWZh dWx0OgorCWFsaWduX3NpemUgPSAtMTsKKwlicmVhazsKKyAgICB9CisKKyAg cmV0dXJuIGFsaWduX3NpemU7Cit9CisKK3N0YXRpYyB2b2lkCitjdGZfc2F2 ZV9jb2xsZWN0X2dldF8xIChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCwgc3Ry dWN0IGN0Zl9zYXZlX3RwX3MgKnRwcywKKwkJCWNoYXIgKnN0cikKK3sKKyAg c3RydWN0IGV4cHJlc3Npb24gKmV4cHI7CisgIHN0cnVjdCBjdGZfc2F2ZV9j b2xsZWN0X3MgKmNvbGxlY3Q7CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhj ZXB0aW9uIGU7CisgIHN0cnVjdCB0eXBlICp0eXBlOworICBpbnQgaXNfcmV0 ID0gMDsKKyAgaW50IGFsaWduX3NpemU7CisKKyAgLyogQ2hlY2sgaWYgYWN0 aW9uX2V4cCBpcyBhbHJlYWR5IGV4aXN0IGluIHRwcy0+Y29sbGVjdC4gICov CisgIGZvciAoY29sbGVjdCA9IHRwcy0+Y29sbGVjdDsgY29sbGVjdDsgY29s bGVjdCA9IGNvbGxlY3QtPm5leHQpCisgICAgeworICAgICAgaWYgKHN0cmNt cCAoY29sbGVjdC0+c3RyLCBzdHIpID09IDApCisJcmV0dXJuOworICAgIH0K KworICBpZiAoMCA9PSBzdHJuY2FzZWNtcCAoc3RyLCAiJF9yZXQiLCA1KSkK KyAgICBpc19yZXQgPSAxOworCisgIFRSWV9DQVRDSCAoZSwgUkVUVVJOX01B U0tfRVJST1IpCisgICAgeworICAgICAgaWYgKGlzX3JldCkKKyAgICAgICAg eworCSAgQ09SRV9BRERSIHBjOworCSAgc3RydWN0IGZyYW1lX2luZm8gKmZy YW1lOworCisJICBmcmFtZSA9IGdldF9wcmV2X2ZyYW1lIChnZXRfY3VycmVu dF9mcmFtZSAoKSk7CisJICBpZiAoIWZyYW1lKQorCSAgICBlcnJvciAoXygi Y291bGQgbm90IGZpbmQgcHJldmlvdXMgZnJhbWUiKSk7CisKKwkgIGlmICgh Z2V0X2ZyYW1lX3BjX2lmX2F2YWlsYWJsZSAoZnJhbWUsICZwYykpCisJICAg IGVycm9yIChfKCJQQyB1bmF2YWlsYWJsZSIpKTsKKwl9CisgICAgICBlbHNl CisgICAgICAgIHsKKwkgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2hhaW47CisJ ICBzdHJ1Y3QgdmFsdWUgKnZhbDsKKworCSAgZXhwciA9IHBhcnNlX2V4cHJl c3Npb24gKHN0cik7CisJICBvbGRfY2hhaW4gPSBtYWtlX2NsZWFudXAgKGZy ZWVfY3VycmVudF9jb250ZW50cywgJmV4cHIpOworCSAgdHlwZSA9IHZhbHVl X3R5cGUgKGV2YWx1YXRlX2V4cHJlc3Npb24gKGV4cHIpKTsKKwkgIGRvX2Ns ZWFudXBzIChvbGRfY2hhaW4pOworCX0KKyAgICB9CisgIGlmIChlLnJlYXNv biA8IDApCisgICAgeworICAgICAgd2FybmluZyAoXygiZXJyb3Igc2F2aW5n IHRyYWNlcG9pbnQgJWQgXCIlc1wiIHRvIENURiBmaWxlOiAlcyIpLAorCSAg ICAgICB0cHMtPnRwLT5iYXNlLm51bWJlciwgc3RyLCBlLm1lc3NhZ2UpOwor ICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAoaXNfcmV0KQorICAgIGFs aWduX3NpemUgPSA4OworICBlbHNlCisgICAgeworICAgICAgYWxpZ25fc2l6 ZSA9IGN0Zl9zYXZlX3R5cGVfY2hlY2tfYW5kX3dyaXRlICh0Y3NwLCB0eXBl KTsKKyAgICAgIGlmIChhbGlnbl9zaXplIDwgMCkKKwl7CisJICB3YXJuaW5n IChfKCJcCitlcnJvciBzYXZpbmcgdHJhY2Vwb2ludCAlZCBcIiVzXCIgdG8g Q1RGIGZpbGU6IHR5cGUgaXMgbm90IHN1cHBvcnQuIiksCisJCSAgIHRwcy0+ dHAtPmJhc2UubnVtYmVyLCBzdHIpOworCSAgcmV0dXJuOworCX0KKyAgICB9 CisKKyAgY29sbGVjdCA9IChzdHJ1Y3QgY3RmX3NhdmVfY29sbGVjdF9zICop IHh6YWxsb2MgKHNpemVvZiAoKmNvbGxlY3QpKTsKKworICAvKiBBZGQgdHAg dG8gdGhlIGxpc3QuICAqLworICBjb2xsZWN0LT5uZXh0ID0gdHBzLT5jb2xs ZWN0OworICB0cHMtPmNvbGxlY3QgPSBjb2xsZWN0OworCisgIGNvbGxlY3Qt PnN0ciA9IHhzdHJkdXAgKHN0cik7CisgIGNvbGxlY3QtPmlzX3JldCA9IGlz X3JldDsKKworICBpZiAoIWlzX3JldCkKKyAgICB7CisgICAgICBjb2xsZWN0 LT50eXBlID0gdHlwZTsKKworICAgICAgY29sbGVjdC0+YWxpZ25fc2l6ZSA9 IGFsaWduX3NpemU7CisgICAgICBpZiAoY29sbGVjdC0+YWxpZ25fc2l6ZSA+ IHRwcy0+YWxpZ25fc2l6ZSkKKyAgICAgICAgdHBzLT5hbGlnbl9zaXplID0g Y29sbGVjdC0+YWxpZ25fc2l6ZTsKKworICAgICAgY29sbGVjdC0+ZXhwciA9 IHBhcnNlX2V4cHJlc3Npb24gKHN0cik7CisgICAgfQorfQorCitzdHJ1Y3Qg bG9jX2FyZ19jb2xsZWN0X2RhdGEKK3sKKyAgc3RydWN0IGN0Zl9zYXZlX3Mg KnRjc3A7CisgIHN0cnVjdCBjdGZfc2F2ZV90cF9zICp0cHM7Cit9OworCitz dGF0aWMgdm9pZAordHN2X3NhdmVfZG9fbG9jX2FyZ19jb2xsZWN0IChjb25z dCBjaGFyICpwcmludF9uYW1lLAorCQkJICAgICBzdHJ1Y3Qgc3ltYm9sICpz eW0sCisJCQkgICAgIHZvaWQgKmNiX2RhdGEpCit7CisgIHN0cnVjdCBsb2Nf YXJnX2NvbGxlY3RfZGF0YSAqcCA9IGNiX2RhdGE7CisgIGNoYXIgKm5hbWU7 CisKKyAgbmFtZSA9IGFsbG9jYSAoc3RybGVuIChwcmludF9uYW1lKSArIDEp OworICBzdHJjcHkgKG5hbWUsIHByaW50X25hbWUpOworICBjdGZfc2F2ZV9j b2xsZWN0X2dldF8xIChwLT50Y3NwLCBwLT50cHMsIG5hbWUpOworfQorCisv KiB3b3JrZXIgZnVuY3Rpb24gKGNsZWFudXApICovCitzdGF0aWMgdm9pZAor cmVwbGFjZV9jb21tYSAodm9pZCAqZGF0YSkKK3sKKyAgY2hhciAqY29tbWEg PSBkYXRhOworICAqY29tbWEgPSAnLCc7Cit9CisKKy8qIEdldCB2YXIgdGhh dCB3YW50IHRvIGNvbGxlY3QgZnJvbSBTVFIgYW5kIHB1dCB0aGVtIHRvIFRQ Uy0+Y29sbGVjdC4KKyAgIFRoaXMgZnVuY3Rpb24gd2lsbCBub3QgYmUgY2Fs bCB3aGVuIEdEQiBhZGQgYSBuZXcgVFAuICAqLworCitzdGF0aWMgdm9pZAor Y3RmX3NhdmVfY29sbGVjdF9nZXQgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3Nw LCBzdHJ1Y3QgY3RmX3NhdmVfdHBfcyAqdHBzLAorCQkgICAgICBjaGFyICpz dHIpCit7CisgIGNoYXIgKmFjdGlvbl9leHAgPSBzdHIsICpuZXh0X2NvbW1h OworICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NoYWluOworCisgIGRvCisgICAg eworICAgICAgaWYgKCphY3Rpb25fZXhwID09ICcsJykKKwlhY3Rpb25fZXhw Kys7CisgICAgICB3aGlsZSAoaXNzcGFjZSAoKGludCkgKmFjdGlvbl9leHAp KQorCWFjdGlvbl9leHArKzsKKworICAgICAgbmV4dF9jb21tYSA9IHN0cmNo ciAoYWN0aW9uX2V4cCwgJywnKTsKKyAgICAgIGlmIChuZXh0X2NvbW1hKQor CXsKKwkgIG9sZF9jaGFpbiA9IG1ha2VfY2xlYW51cCAocmVwbGFjZV9jb21t YSwgbmV4dF9jb21tYSk7CisJICAqbmV4dF9jb21tYSA9ICdcMCc7CisJfQor CisgICAgICBpZiAoMCA9PSBzdHJuY2FzZWNtcCAoYWN0aW9uX2V4cCwgIiRy ZWciLCA0KSkKKyAgICAgICAgeworCSAgaW50IGk7CisJICBzdHJ1Y3QgZ2Ri YXJjaCAqYXJjaCA9IHRwcy0+dHAtPmJhc2UubG9jLT5nZGJhcmNoOworCisJ ICBmb3IgKGkgPSAwOyBpIDwgZ2RiYXJjaF9udW1fcmVncyAoYXJjaCk7IGkr KykKKwkgICAgeworCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBnZGJhcmNo X3JlZ2lzdGVyX25hbWUgKGFyY2gsIGkpOworCSAgICAgIGludCBuYW1lX3Np emUgPSBzdHJsZW4gKG5hbWUpOworCSAgICAgIGNoYXIgcmVnbmFtZVsxICsg bmFtZV9zaXplICsgMV07CisKKwkgICAgICBpZiAobmFtZV9zaXplID09IDAp CisJCWNvbnRpbnVlOworCisJICAgICAgc3ByaW50ZiAocmVnbmFtZSwgIiQl cyIsIG5hbWUpOworCisJICAgICAgY3RmX3NhdmVfY29sbGVjdF9nZXRfMSAo dGNzcCwgdHBzLCByZWduYW1lKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2Ug aWYgKDAgPT0gc3RybmNhc2VjbXAgKGFjdGlvbl9leHAsICIkbG9jIiwgNCkK KwkgICAgICAgfHwgMCA9PSBzdHJuY2FzZWNtcCAoYWN0aW9uX2V4cCwgIiRh cmciLCA0KSkKKwl7CisJICBDT1JFX0FERFIgcGM7CisJICBzdHJ1Y3QgbG9j X2FyZ19jb2xsZWN0X2RhdGEgY2JfZGF0YTsKKwkgIHZvbGF0aWxlIHN0cnVj dCBnZGJfZXhjZXB0aW9uIGU7CisKKwkgIGNiX2RhdGEudGNzcCA9IHRjc3A7 CisJICBjYl9kYXRhLnRwcyA9IHRwczsKKworCSAgVFJZX0NBVENIIChlLCBS RVRVUk5fTUFTS19FUlJPUikKKwkgICAgeworCSAgICAgIHBjID0gcmVnY2Fj aGVfcmVhZF9wYyAoZ2V0X2N1cnJlbnRfcmVnY2FjaGUgKCkpOworCSAgICB9 CisJICBpZiAoZS5yZWFzb24gPCAwKQorCSAgICB7CisJICAgICAgd2Fybmlu ZyAoXygiZXJyb3Igc2F2aW5nIHRyYWNlcG9pbnQgJWQgXCIlc1wiIHRvIENU RiBmaWxlOiAlcyIpLAorCQkgICAgICAgdHBzLT50cC0+YmFzZS5udW1iZXIs IGFjdGlvbl9leHAsIGUubWVzc2FnZSk7CisJICAgICAgY29udGludWU7CisJ ICAgIH0KKworCSAgaWYgKGFkZF9sb2NhbF9zeW1ib2xzXzEgKCgwID09IHN0 cm5jYXNlY21wIChhY3Rpb25fZXhwLCAiJGxvYyIsIDQpCisJCQkJCT8gJ0wn IDogJ0EnKSwKKwkJCQkgICBwYywgdHN2X3NhdmVfZG9fbG9jX2FyZ19jb2xs ZWN0LAorCQkJCSAgICZjYl9kYXRhKSkKKwkgICAgeworCSAgICAgIHdhcm5p bmcgKF8oIlwKK2Vycm9yIHNhdmluZyB0cmFjZXBvaW50ICVkIFwiJXNcIiB0 byBDVEYgZmlsZTogbm8gc3ltYm9sIHRhYmxlIGluZm8gYXZhaWxhYmxlLiIp LAorCQkgICAgICAgdHBzLT50cC0+YmFzZS5udW1iZXIsIGFjdGlvbl9leHAp OworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJfQorICAgICAgZWxzZQor CWN0Zl9zYXZlX2NvbGxlY3RfZ2V0XzEgKHRjc3AsIHRwcywgYWN0aW9uX2V4 cCk7CisKKyAgICAgIGlmIChuZXh0X2NvbW1hKQorCWRvX2NsZWFudXBzIChv bGRfY2hhaW4pOworICAgICAgYWN0aW9uX2V4cCA9IG5leHRfY29tbWE7Cisg ICAgfQorICB3aGlsZSAoYWN0aW9uX2V4cCAmJiAqYWN0aW9uX2V4cCA9PSAn LCcpOworfQorCisvKiBDYWxsIGZ1bmN0aW9uIGN0Zl9zYXZlX2NvbGxlY3Rf Z2V0IEFkZCBhY3Rpb24gbGlzdCBBQ1RJT04gb2YgVFBTCisgICB0byBUUFMt PmNvbGxlY3QuCisgICBTVEVQUElOR19GUkFNRSBpcyB0cnVlIGlmIGl0IGlz IHN0ZXAgYWN0aW9uLiAgKi8KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX3Rw X2FjdGlvbnMgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwLCBzdHJ1Y3QgY3Rm X3NhdmVfdHBfcyAqdHBzLAorCQkgICAgIHN0cnVjdCBjb21tYW5kX2xpbmUg KmFjdGlvbiwgaW50IHN0ZXBwaW5nX2ZyYW1lKQoreworICBmb3IgKDsgYWN0 aW9uICE9IE5VTEw7IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKKyAgICB7Cisg ICAgICBjaGFyICphY3Rpb25fZXhwOworICAgICAgc3RydWN0IGNtZF9saXN0 X2VsZW1lbnQgKmNtZDsKKworICAgICAgUVVJVDsKKyAgICAgIGFjdGlvbl9l eHAgPSBhY3Rpb24tPmxpbmU7CisgICAgICB3aGlsZSAoaXNzcGFjZSAoKGlu dCkgKmFjdGlvbl9leHApKQorCWFjdGlvbl9leHArKzsKKyAgICAgIGlmICgq YWN0aW9uX2V4cCA9PSAnIycpCisJY29udGludWU7CisKKyAgICAgIGNtZCA9 IGxvb2t1cF9jbWQgKCZhY3Rpb25fZXhwLCBjbWRsaXN0LCAiIiwgLTEsIDEp OworICAgICAgaWYgKGNtZCA9PSAwKQorCWVycm9yIChfKCJCYWQgYWN0aW9u IGxpc3QgaXRlbTogJXMiKSwgYWN0aW9uX2V4cCk7CisKKyAgICAgIGlmIChj bWRfY2Z1bmNfZXEgKGNtZCwgd2hpbGVfc3RlcHBpbmdfcHNldWRvY29tbWFu ZCkpCisJeworCSAgaW50IGk7CisKKwkgIGZvciAoaSA9IDA7IGkgPCBhY3Rp b24tPmJvZHlfY291bnQ7ICsraSkKKwkgICAgY3RmX3NhdmVfdHBfYWN0aW9u cyAodGNzcCwgdHBzLCBhY3Rpb24tPmJvZHlfbGlzdFtpXSwgMSk7CisJfQor ICAgICAgZWxzZSBpZiAoY21kX2NmdW5jX2VxIChjbWQsIGNvbGxlY3RfcHNl dWRvY29tbWFuZCkpCisJeworCSAgaWYgKHN0ZXBwaW5nX2ZyYW1lICE9IHRw cy0+c3RlcHBpbmdfZnJhbWUpCisJICAgIGNvbnRpbnVlOworCSAgaWYgKCph Y3Rpb25fZXhwID09ICcvJykKKwkgICAgYWN0aW9uX2V4cCA9IGRlY29kZV9h Z2VudF9vcHRpb25zIChhY3Rpb25fZXhwKTsKKwkgIGN0Zl9zYXZlX2NvbGxl Y3RfZ2V0ICh0Y3NwLCB0cHMsIGFjdGlvbl9leHApOworCX0KKyAgICB9Cit9 CisKKworLyogVHJ5IHRvIGZpbmQgdGhlIGN0Zl9zYXZlX3RwX3Mgc3RydWN0 IGluIHRoZSBUQ1NQLT50cC4KKyAgIElmIGNhbm5vdCBmaW5kIGl0IGluIHRo ZSBUQ1NQLT50cCwgbWFrZSBhIG5ldyBvbmUgZm9yIFRQCisgICBhbmQgYWRk IGl0IHRvIFRDU1AtPnRwLiAgKi8KKworc3RhdGljIHN0cnVjdCBjdGZfc2F2 ZV90cF9zICoKK2N0Zl9zYXZlX3RwX2ZpbmQgKHN0cnVjdCBjdGZfc2F2ZV9z ICp0Y3NwLCBzdHJ1Y3QgdHJhY2Vwb2ludCAqdHApCit7CisgIHN0cnVjdCBj dGZfc2F2ZV90cF9zICpyZXQ7CisgIHN0cnVjdCBicF9sb2NhdGlvbiAqbG9j OworICBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlOworICBpbnQgc3RlcHBp bmdfZnJhbWUgPSAwOworICBzdHJ1Y3QgY29tbWFuZF9saW5lICphY3Rpb247 CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGU7CisgIENPUkVf QUREUiBwYzsKKworICBUUllfQ0FUQ0ggKGUsIFJFVFVSTl9NQVNLX0VSUk9S KQorICAgIHsKKyAgICAgIHBjID0gcmVnY2FjaGVfcmVhZF9wYyAoZ2V0X2N1 cnJlbnRfcmVnY2FjaGUgKCkpOworICAgIH0KKyAgaWYgKGUucmVhc29uID49 IDApCisgICAgeworICAgICAgc3RlcHBpbmdfZnJhbWUgPSAxOworICAgICAg Zm9yIChsb2MgPSB0cC0+YmFzZS5sb2M7IGxvYzsgbG9jID0gbG9jLT5uZXh0 KQorCXsKKwkgIGlmIChsb2MtPmFkZHJlc3MgPT0gcGMpCisgICAgICAgICAg ICB7CisJICAgICAgc3RlcHBpbmdfZnJhbWUgPSAwOworCSAgICAgIGJyZWFr OworCSAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgZm9yIChyZXQgPSB0 Y3NwLT50cDsgcmV0OyByZXQgPSByZXQtPm5leHQpCisgICAgeworICAgICAg aWYgKHJldC0+dHAgPT0gdHAgJiYgcmV0LT5zdGVwcGluZ19mcmFtZSA9PSBz dGVwcGluZ19mcmFtZSkKKwlyZXR1cm4gcmV0OworICAgIH0KKworICByZXQg PSAoc3RydWN0IGN0Zl9zYXZlX3RwX3MgKikgeHphbGxvYyAoc2l6ZW9mICgq cmV0KSk7CisKKyAgLyogQWRkIHRwIHRvIHRoZSBsaXN0LiAgKi8KKyAgcmV0 LT5uZXh0ID0gdGNzcC0+dHA7CisgIHRjc3AtPnRwID0gcmV0OworCisgIHJl dC0+c3RlcHBpbmdfZnJhbWUgPSBzdGVwcGluZ19mcmFtZTsKKyAgcmV0LT50 cCA9IHRwOworCisgIGlmICghc3RlcHBpbmdfZnJhbWUgJiYgKmRlZmF1bHRf Y29sbGVjdCkKKyAgICBjdGZfc2F2ZV9jb2xsZWN0X2dldCAodGNzcCwgcmV0 LCBkZWZhdWx0X2NvbGxlY3QpOworCisgIGN0Zl9zYXZlX3RwX2FjdGlvbnMg KHRjc3AsIHJldCwgYnJlYWtwb2ludF9jb21tYW5kcyAoJnRwLT5iYXNlKSwg MCk7CisKKyAgcmV0dXJuIHJldDsKK30KKworLyogTGV0IFRDU1AtPmRhdGFz dHJlYW1fZmQgcG9pbnQgdG8gdGhlIHBhcnQgZm9yIG5leHQgcGFja2V0LiAg Ki8KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX25leHRfcGFja2V0IChzdHJ1 Y3QgY3RmX3NhdmVfcyAqdGNzcCkKK3sKKyAgdGNzcC0+cGFja2V0X2JlZ2lu ICs9IENURl9QQUNLRVRfU0laRTsKKyAgY3RmX3NhdmVfZnNlZWsgKHRjc3As IHRjc3AtPnBhY2tldF9iZWdpbiwgU0VFS19TRVQpOworICB0Y3NwLT5jb250 ZW50X3NpemUgPSAwOworfQorCisvKiBXcml0ZSB0aGUgY29udGVudCBzaXpl IHRvIHBhY2tldCBoZWFkZXIgY29udGV4dC4gKi8KKworc3RhdGljIHZvaWQK K2N0Zl9zYXZlX3dyaXRlX2NvbnRlbnRfc2l6ZSAoc3RydWN0IGN0Zl9zYXZl X3MgKnRjc3ApCit7CisgIHVpbnQzMl90IHUzMjsKKworICBjdGZfc2F2ZV9m c2VlayAodGNzcCwgdGNzcC0+cGFja2V0X2JlZ2luICsgNCwgU0VFS19TRVQp OworICB1MzIgPSB0Y3NwLT5jb250ZW50X3NpemUgKiBUQVJHRVRfQ0hBUl9C SVQ7CisgIGN0Zl9zYXZlX3dyaXRlICh0Y3NwLCAodm9pZCAqKSZ1MzIsIDQp OworfQorCisvKiBXcml0ZSB0aGUgQ1RGIGRhdGEgcGFja2V0IGhlYWRlciBj b250ZXh0LiAgKi8KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX3dyaXRlX3Bh Y2tldF9oZWFkZXJfY29udGV4dCAoc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3Ap Cit7CisgIHVpbnQzMl90IHUzMjsKKworICAvKiBtYWdpYy4gICovCisgIHUz MiA9IENURl9NQUdJQzsKKyAgY3RmX3NhdmVfd3JpdGUgKHRjc3AsICh2b2lk ICopJnUzMiwgNCk7CisgIHRjc3AtPmNvbnRlbnRfc2l6ZSArPSA0OworCisg IC8qIGNvbnRlbnRfc2l6ZS4gIFdlIHN0aWxsIGRvbid0IGtub3cgdGhlIHNp emUsIHdyaXRlIGl0IGxhdGVyLiAgKi8KKyAgY3RmX3NhdmVfZnNlZWsgKHRj c3AsIDQsIFNFRUtfQ1VSKTsKKyAgdGNzcC0+Y29udGVudF9zaXplICs9IDQ7 CisKKyAgLyogcGFja2V0X3NpemUgKi8KKyAgdTMyID0gQ1RGX1BBQ0tFVF9T SVpFICogVEFSR0VUX0NIQVJfQklUOworICBjdGZfc2F2ZV93cml0ZSAodGNz cCwgKHZvaWQgKikmdTMyLCA0KTsKKyAgdGNzcC0+Y29udGVudF9zaXplICs9 IDQ7CisKKyAgdGNzcC0+Y3VycmVudF9jb250ZW50X3NpemUgPSB0Y3NwLT5j b250ZW50X3NpemU7CisKKyAgLyogTWFrZSB0aGlzIHBhY2tldCBhbGwgaW50 byBmaWxlLiAgKi8KKyAgY3RmX3NhdmVfZnNlZWsgKHRjc3AsIHRjc3AtPnBh Y2tldF9iZWdpbiArIENURl9QQUNLRVRfU0laRSAtIDQsIFNFRUtfU0VUKTsK KyAgdTMyID0gMDsKKyAgY3RmX3NhdmVfd3JpdGUgKHRjc3AsICh2b2lkICop JnUzMiwgNCk7CisgIGN0Zl9zYXZlX2ZzZWVrICh0Y3NwLCB0Y3NwLT5wYWNr ZXRfYmVnaW4gKyB0Y3NwLT5jb250ZW50X3NpemUsIFNFRUtfU0VUKTsKK30K KworLyogQ2hhbmdlIEktdGggY2hhciBpbiBDVEZfU1RSIHRvIFNUUi4gICov CisKK3N0YXRpYyBjaGFyICoKK2N0Zl9zYXZlX21ldGFkYXRhX2NoYW5nZV9j aGFyIChjaGFyICpjdGZfc3RyLCBpbnQgaSwgY29uc3QgY2hhciAqc3RyKQor eworICBjaGFyICpuZXc7CisKKyAgY3RmX3N0cltpXSA9ICdcMCc7CisgIG5l dyA9IHhzdHJwcmludGYgKCIlcyVzJXNfJXMiLCBjdGZfc3RyLCAoaSA/ICJf IiA6ICIiKSwKKwkJICAgIHN0ciwgY3RmX3N0ciArIGkgKyAxKTsKKyAgeGZy ZWUgKGN0Zl9zdHIpOworCisgIHJldHVybiBuZXc7Cit9CisKKy8qIFdyaXRl IHRoZSBoZWFkZXIgb2YgQ1RGJ3MgbWV0YWRhdGEgdG8gVENTUC0+TUVUQURB VEFfRkQuICAqLworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfbWV0YWRhdGFf aGVhZGVyIChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCkKK3sKKyAgY29uc3Qg Y2hhciBtZXRhZGF0YV9mbXRbXSA9CisgICJcbnRyYWNlIHtcbiIKKyAgIglt YWpvciA9ICV1O1xuIgorICAiCW1pbm9yID0gJXU7XG4iCisgICIJYnl0ZV9v cmRlciA9ICVzO1xuIgkJLyogYmUgb3IgbGUgKi8KKyAgIglwYWNrZXQuaGVh ZGVyIDo9IHN0cnVjdCB7XG4iCisgICIJCXVpbnQzMl90IG1hZ2ljO1xuIgor ICAiCX07XG4iCisgICJ9O1xuIgorICAiXG4iCisgICJzdHJlYW0ge1xuIgor ICAiCXBhY2tldC5jb250ZXh0IDo9IHN0cnVjdCB7XG4iCisgICIJCXVpbnQz Ml90IGNvbnRlbnRfc2l6ZTtcbiIKKyAgIgkJdWludDMyX3QgcGFja2V0X3Np emU7XG4iCisgICIJfTtcbiIKKyAgIglldmVudC5oZWFkZXIgOj0gc3RydWN0 IHtcbiIKKyAgIgkJdWludDMyX3QgaWQ7XG4iCisgICIJfTtcbiIKKyAgIn07 XG4iOworCisgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFk YXRhX2ZkLCAiLyogQ1RGICVkLiVkICovXG4iLAorCQkJICBDVEZfU0FWRV9N QUpPUiwgQ1RGX1NBVkVfTUlOT1IpOworICBjdGZfc2F2ZV9md3JpdGVfZm9y bWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgIlwKK3R5cGVhbGlhcyBpbnRlZ2Vy IHsgc2l6ZSA9IDMyOyBhbGlnbiA9IDMyOyBzaWduZWQgPSBmYWxzZTsgfSA6 PSB1aW50MzJfdDtcbiIpOworICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0 Y3NwLT5tZXRhZGF0YV9mZCwgIlwKK3R5cGVhbGlhcyBpbnRlZ2VyIHsgc2l6 ZSA9IDY0OyBhbGlnbiA9IDY0OyBzaWduZWQgPSBmYWxzZTsgfSA6PSB1aW50 NjRfdDtcbiIpOworICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5t ZXRhZGF0YV9mZCwgIlxuIik7CisKKyAgY3RmX3NhdmVfZndyaXRlX2Zvcm1h dCAodGNzcC0+bWV0YWRhdGFfZmQsIG1ldGFkYXRhX2ZtdCwKKwkJCSAgQ1RG X1NBVkVfTUFKT1IsIENURl9TQVZFX01JTk9SLAorCQkJICBCWVRFX09SREVS ID09IExJVFRMRV9FTkRJQU4gPyAibGUiIDogImJlIik7CisgIGN0Zl9zYXZl X2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiXG4iKTsKK30K KworLyogV3JpdGUgdGhlIGJvZHkgb2YgQ1RGJ3MgbWV0YWRhdGEgdG8gVENT UC0+TUVUQURBVEFfRkQuICAqLworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVf bWV0YWRhdGEgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwKQoreworICBzdHJ1 Y3QgY3RmX3NhdmVfdHBfcyAqdHBzOworICBzdHJ1Y3QgY3RmX3NhdmVfY29s bGVjdF9zICpjb2xsZWN0OworICBzdHJ1Y3QgY3RmX3NhdmVfdHlwZV9zICp0 OworCisgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRh X2ZkLCAiXG4iKTsKKworICAvKiBXcml0ZSBldmVudC4gICovCisgIGZvciAo dHBzID0gdGNzcC0+dHA7IHRwczsgdHBzID0gdHBzLT5uZXh0KQorICAgIHsK KyAgICAgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRh X2ZkLAorCQkJICAgICAgImV2ZW50IHtcblx0bmFtZSA9IFwiJXNcIjtcblx0 aWQgPSAlZDtcbiIKKwkJCSAgICAgICJcdGZpZWxkcyA6PSBzdHJ1Y3QgeyBc biIsCisJCQkgICAgICB0cHMtPnRwLT5iYXNlLmFkZHJfc3RyaW5nLCB0cHMt PnRwLT5iYXNlLm51bWJlcik7CisgICAgICBmb3IgKGNvbGxlY3QgPSB0cHMt PmNvbGxlY3Q7IGNvbGxlY3Q7IGNvbGxlY3QgPSBjb2xsZWN0LT5uZXh0KQor ICAgICAgICB7CisJICBjaGFyICp0bXA7CisJICBjb25zdCBjaGFyICpvbGRf dGFiOworCisJICBpZiAoY29sbGVjdC0+aXNfcmV0KQorCSAgICBjb2xsZWN0 LT5jdGZfc3RyID0geHN0cmR1cCAoInJldF9wYyIpOworCSAgZWxzZQorCSAg ICB7CisJICAgICAgY2hhciAqbmV3OworCSAgICAgIGludCBuZWVkX3JlY2hl Y2s7CisJICAgICAgaW50IGk7CisKKwkgICAgICBjb2xsZWN0LT5jdGZfc3Ry ID0geHN0cmR1cCAoY29sbGVjdC0+c3RyKTsKKwkgICAgICBmb3IgKGkgPSAw OyBjb2xsZWN0LT5jdGZfc3RyW2ldICE9ICdcMCc7ICsraSkKKwkgICAgICAg IHsKKwkJICBzd2l0Y2ggKGNvbGxlY3QtPmN0Zl9zdHJbaV0pCisJCSAgICB7 CisJCSAgICBjYXNlICckJzoKKwkJICAgICAgY29sbGVjdC0+Y3RmX3N0cgor CQkJICA9IGN0Zl9zYXZlX21ldGFkYXRhX2NoYW5nZV9jaGFyIChjb2xsZWN0 LT5jdGZfc3RyLAorCQkJCQkJCSAgIGksICJkb2xsYXIiKTsKKwkJICAgICAg YnJlYWs7CisJCSAgICBjYXNlICcqJzoKKwkJICAgICAgY29sbGVjdC0+Y3Rm X3N0cgorCQkJICA9IGN0Zl9zYXZlX21ldGFkYXRhX2NoYW5nZV9jaGFyIChj b2xsZWN0LT5jdGZfc3RyLAorCQkJCQkJCSAgIGksICJzdGFyIik7CisJCSAg ICAgIGJyZWFrOworCQkgICAgY2FzZSAnICc6CisJCSAgICAgIGNvbGxlY3Qt PmN0Zl9zdHJbaV0gPSAnXyc7CisJCSAgICAgIGJyZWFrOworCQkgICAgfQor CQl9CisJICAgIH0KKworCSAgdG1wID0gYWxsb2NhIChzdHJsZW4gKGNvbGxl Y3QtPmN0Zl9zdHIpICsgMzApOworCSAgc3RyY3B5ICh0bXAsIGNvbGxlY3Qt PmN0Zl9zdHIpOworCSAgd2hpbGUgKDEpCisJICAgIHsKKwkgICAgICBzdHJ1 Y3QgY3RmX3NhdmVfY29sbGVjdF9zICpjb2xsZWN0MjsKKwkgICAgICBpbnQg aSA9IDA7CisKKwkgICAgICBmb3IgKGNvbGxlY3QyID0gdHBzLT5jb2xsZWN0 OyBjb2xsZWN0MjsKKwkJICAgY29sbGVjdDIgPSBjb2xsZWN0Mi0+bmV4dCkK KwkJeworCQkgIGlmIChjb2xsZWN0Mi0+Y3RmX3N0cgorCQkgICAgICAmJiBz dHJjbXAgKGNvbGxlY3QyLT5jdGZfc3RyLCB0bXApID09IDApCisJCSAgICBi cmVhazsKKwkJfQorCSAgICAgIGlmIChjb2xsZWN0MiA9PSBOVUxMKQorCQli cmVhazsKKworCSAgICAgIHNucHJpbnRmICh0bXAsIHN0cmxlbiAoY29sbGVj dC0+Y3RmX3N0cikgKyAzMCwKKwkJCSIlc18lZCIsIGNvbGxlY3QtPmN0Zl9z dHIsIGkrKyk7CisJICAgIH0KKworCSAgaWYgKHN0cmNtcCAoY29sbGVjdC0+ Y3RmX3N0ciwgY29sbGVjdC0+c3RyKSkKKwkgICAgd2FybmluZyAoXygiXAor XCIlc1wiIG9mIHRyYWNlcG9pbnQgJWQgcmVuYW1lIHRvIFwiJXNcIiBpbiBD VEYgZmlsZS4iKSwKKwkJICAgICAgIGNvbGxlY3QtPnN0ciwgdHBzLT50cC0+ YmFzZS5udW1iZXIsCisJCSAgICAgICBjb2xsZWN0LT5jdGZfc3RyKTsKKwor CSAgb2xkX3RhYiA9IHRjc3AtPnRhYjsKKwkgIHRjc3AtPnRhYiA9ICJcdFx0 IjsKKwkgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRh X2ZkLCB0Y3NwLT50YWIpOworCSAgaWYgKGNvbGxlY3QtPmlzX3JldCkKKwkg ICAgY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQs ICJ1aW50NjRfdCAlcztcbiIsCisJCQkJICAgIGNvbGxlY3QtPmN0Zl9zdHIp OworCSAgZWxzZQorCSAgICBjdGZfc2F2ZV92YXJfZGVmaW5lX3dyaXRlICh0 Y3NwLCBjb2xsZWN0LT50eXBlLCBjb2xsZWN0LT5jdGZfc3RyKTsKKwkgIHRj c3AtPnRhYiA9IG9sZF90YWI7CisJfQorICAgICAgY3RmX3NhdmVfZndyaXRl X2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsICJcdH07XG59O1xuIik7Cisg ICAgfQorfQorCisvKiBDbGVhbiBmdW5jdGlvbiBmb3IgY3RmX3NhdmUuICAq LworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfY2xlYW51cCAodm9pZCAqcCkK K3sKKyAgc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3AgPSBwOworICBzdHJ1Y3Qg Y3RmX3NhdmVfdHBfcyAqdHAsICp0bXBfdHA7CisgIHN0cnVjdCBjdGZfc2F2 ZV90eXBlX3MgKnR5cGUsICp0bXBfdHlwZTsKKworICBpZiAodGNzcC0+bWV0 YWRhdGFfZmQpCisgICAgeworICAgICAgY3RmX3NhdmVfbWV0YWRhdGEgKHRj c3ApOworICAgICAgZmNsb3NlICh0Y3NwLT5tZXRhZGF0YV9mZCk7CisgICAg fQorCisgIGlmICh0Y3NwLT5kYXRhc3RyZWFtX2ZkKQorICAgIGZjbG9zZSAo dGNzcC0+ZGF0YXN0cmVhbV9mZCk7CisKKyAgZm9yICh0cCA9IHRjc3AtPnRw OyB0cDsgdHAgPSB0bXBfdHApCisgICAgeworICAgICAgc3RydWN0IGN0Zl9z YXZlX2NvbGxlY3RfcyAqY29sbGVjdCwgKnRtcF9jb2xsZWN0OworCisgICAg ICBmb3IgKGNvbGxlY3QgPSB0cC0+Y29sbGVjdDsgY29sbGVjdDsgY29sbGVj dCA9IHRtcF9jb2xsZWN0KQorICAgICAgICB7CisJICB4ZnJlZSAoY29sbGVj dC0+ZXhwcik7CisJICB4ZnJlZSAoY29sbGVjdC0+c3RyKTsKKwkgIHhmcmVl IChjb2xsZWN0LT5jdGZfc3RyKTsKKwkgIHRtcF9jb2xsZWN0ID0gY29sbGVj dC0+bmV4dDsKKwkgIHhmcmVlIChjb2xsZWN0KTsKKyAgICAgICAgfQorICAg ICAgdG1wX3RwID0gdHAtPm5leHQ7CisgICAgICB4ZnJlZSAodHApOworICAg IH0KKworICBmb3IgKHR5cGUgPSB0Y3NwLT50eXBlOyB0eXBlOyB0eXBlID0g dG1wX3R5cGUpCisgICAgeworICAgICAgdG1wX3R5cGUgPSB0eXBlLT5uZXh0 OworICAgICAgeGZyZWUgKHR5cGUpOworICAgIH0KKworICByZWluaXRfZnJh bWVfY2FjaGUgKCk7CisgIHRhcmdldF9kY2FjaGVfaW52YWxpZGF0ZSAoKTsK KyAgc2V0X2N1cnJlbnRfdHJhY2VmcmFtZSAodGNzcC0+b2xkX3RyYWNlZnJh bWVfbnVtKTsKK30KKworLyogU2F2ZSBjdXJyZW50IHRyYWNlIGZyYW1lIHRv IERJUk5BTUUuICAqLworCit2b2lkCitjdGZfc2F2ZSAoY29uc3QgY2hhciAq ZGlybmFtZSkKK3sKKyAgc3RydWN0IGN0Zl9zYXZlX3MgdGNzOworICBzdHJ1 Y3QgY2xlYW51cCAqb2xkX2NoYWluOworICBpbnQgZnJhbWVfbnVtOworICBj aGFyICpmaWxlX25hbWU7CisgIHN0cnVjdCBjdGZfc2F2ZV90eXBlX3MgKnQ7 CisgIGNoYXIgdGFiW10gPSAiIjsKKworICAvKiBDcmVhdGUgRElSTkFNRS4g ICovCisgIGZpbGVfbmFtZSA9IGFsbG9jYSAoc3RybGVuIChkaXJuYW1lKSAr IDEKKwkJICAgICAgKyBzdHJsZW4gKENURl9EQVRBU1RSRUFNX05BTUUpICsg MSk7CisgIGlmIChta2RpciAoZGlybmFtZSwgU19JUldYVSB8IFNfSVJHUlAg fCBTX0lYR1JQIHwgU19JUk9USCB8IFNfSVhPVEgpCisgICAgICAmJiBlcnJu byAhPSBFRVhJU1QpCisgICAgZXJyb3IgKF8oIlVuYWJsZSB0byBvcGVuIGRp cmVjdG9yeSAnJXMnIGZvciBzYXZpbmcgdHJhY2UgZGF0YSAoJXMpIiksCisJ ICAgZGlybmFtZSwgc2FmZV9zdHJlcnJvciAoZXJybm8pKTsKKworICBtZW1z ZXQgKCZ0Y3MsICdcMCcsIHNpemVvZiAodGNzKSk7CisgIHRjcy5vbGRfdHJh Y2VmcmFtZV9udW0gPSBnZXRfdHJhY2VmcmFtZV9udW1iZXIgKCk7CisgIG9s ZF9jaGFpbiA9IG1ha2VfY2xlYW51cCAoY3RmX3NhdmVfY2xlYW51cCwgJnRj cyk7CisgIHRjcy50YWIgPSB0YWI7CisKKyAgc3ByaW50ZiAoZmlsZV9uYW1l LCAiJXMvJXMiLCBkaXJuYW1lLCBDVEZfTUVUQURBVEFfTkFNRSk7CisgIHRj cy5tZXRhZGF0YV9mZCA9IGZvcGVuIChmaWxlX25hbWUsICJ3Iik7CisgIGlm ICghdGNzLm1ldGFkYXRhX2ZkKQorICAgIGVycm9yIChfKCJVbmFibGUgdG8g b3BlbiBmaWxlICclcycgZm9yIHNhdmluZyB0cmFjZSBkYXRhICglcykiKSwK KwkgICBmaWxlX25hbWUsIHNhZmVfc3RyZXJyb3IgKGVycm5vKSk7CisgIGN0 Zl9zYXZlX21ldGFkYXRhX2hlYWRlciAoJnRjcyk7CisKKyAgc3ByaW50ZiAo ZmlsZV9uYW1lLCAiJXMvJXMiLCBkaXJuYW1lLCBDVEZfREFUQVNUUkVBTV9O QU1FKTsKKyAgdGNzLmRhdGFzdHJlYW1fZmQgPSBmb3BlbiAoZmlsZV9uYW1l LCAidyIpOworICBpZiAoIXRjcy5kYXRhc3RyZWFtX2ZkKQorICAgIGVycm9y IChfKCJVbmFibGUgdG8gb3BlbiBmaWxlICclcycgZm9yIHNhdmluZyB0cmFj ZSBkYXRhICglcykiKSwKKwkgICBmaWxlX25hbWUsIHNhZmVfc3RyZXJyb3Ig KGVycm5vKSk7CisKKyAgY3RmX3NhdmVfd3JpdGVfcGFja2V0X2hlYWRlcl9j b250ZXh0ICgmdGNzKTsKKworICBmb3IgKGZyYW1lX251bSA9IDA7IDE7IGZy YW1lX251bSArKykKKyAgICB7CisgICAgICBpbnQgdG51bTsKKyAgICAgIHN0 cnVjdCB0cmFjZXBvaW50ICp0cDsKKyAgICAgIGludCB0cnlfY291bnQ7Cisg ICAgICB1aW50MzJfdCB1MzI7CisgICAgICBzdHJ1Y3QgY3RmX3NhdmVfdHBf cyAqdHBzOworICAgICAgc3RydWN0IGN0Zl9zYXZlX2NvbGxlY3RfcyAqY29s bGVjdDsKKyAgICAgIGludCB0cmFjZWZyYW1lX2lzX2Ryb3BwZWQgPSAwOwor CisgICAgICAvKiBBbGxvdyB1c2VyIHRvIGJhaWwgb3V0IHdpdGggXkMuICAq LworICAgICAgUVVJVDsKKworICAgICAgLyogR290byB0cmFjZWZyYW1lIGZy YW1lX251bSBhbmQgc2V0IHRwLiAgKi8KKyAgICAgIGZyYW1lX251bSA9IHRh cmdldF90cmFjZV9maW5kICh0ZmluZF9udW1iZXIsIGZyYW1lX251bSwgMCwg MCwgJnRudW0pOworICAgICAgaWYgKGZyYW1lX251bSA8IDApCisJYnJlYWs7 CisgICAgICB0cCA9IGdldF90cmFjZXBvaW50X2J5X251bWJlcl9vbl90YXJn ZXQgKHRudW0pOworICAgICAgaWYgKCF0cCkKKyAgICAgICAgeworCSAgd2Fy bmluZyAoXygiZHJvcCB0cmFjZWZyYW1lICVkIGJlY2F1c2UgY2Fubm90IGZp bmQgdHJhY2Vwb2ludCAlZC4iKSwKKwkJICAgZnJhbWVfbnVtLCB0bnVtKTsK KwkgIGNvbnRpbnVlOworCX0KKyAgICAgIGlmICghdHAtPmJhc2UubG9jKQor ICAgICAgICB7CisJICB3YXJuaW5nIChfKCJkcm9wIHRyYWNlZnJhbWUgJWQg YmVjYXVzZSB0cmFjZXBvaW50ICVkIGlzIHBlbmRpbmcuIiksCisJCSAgIGZy YW1lX251bSwgdHAtPmJhc2UubnVtYmVyKTsKKwkgIGNvbnRpbnVlOworCX0K KyAgICAgIHJlaW5pdF9mcmFtZV9jYWNoZSAoKTsKKyAgICAgIHRhcmdldF9k Y2FjaGVfaW52YWxpZGF0ZSAoKTsKKyAgICAgIHNldF9jdXJyZW50X3RyYWNl ZnJhbWUgKGZyYW1lX251bSk7CisKKyAgICAgIHRwcyA9IGN0Zl9zYXZlX3Rw X2ZpbmQgKCZ0Y3MsIHRwKTsKKworICAgICAgLyogVGhlIHRwIGlzIG5vdCB2 YXJpYWJsZS1sZW5ndGggYW5kIGJpZ2dlciB0aGFuIENURl9QQUNLRVRfU0la RS4KKyAgICAgICAgIFNvIGRyb3AgaXQuICAqLworICAgICAgaWYgKHRwcy0+ aXNfZHJvcHBlZCkKKwljb250aW51ZTsKKworICAgICAgLyogVHJ5IGNvdW50 IGZvciBjdXJyZW50IHRwIHdyaXRlLgorICAgICAgICAgSWYgdHJ5IHNlY29u ZCB0aW1lLCB0aGUgZXZlbnQgc2l6ZSBiaWdnZXIgdGhhbiBhIHBhY2tldC4K KyAgICAgICAgIFRoZW4gZHJvcCB0aGlzIGV2ZW50LiAgKi8KKyAgICAgIHRy eV9jb3VudCA9IDA7CisKK3JlX3dyaXRlX3RwOgorICAgICAgaWYgKHRyeV9j b3VudCA+IDApCisgICAgICAgIHsKKwkgIC8qIEhhbmRsZSByZXRyeS4gICov CisJICBpZiAodHJ5X2NvdW50ID4gMSB8fCA0ICsgNCArIDQgPT0gdGNzLmNv bnRlbnRfc2l6ZSkKKwkgICAgeworCSAgICAgIC8qIFNlY29uZCByZXRyeSBv ciBwYWNrZXQganVzdCB3cml0ZSB0aGF0IHBhY2tldCBtZWFucworCSAgICAg ICAgIHRoaXMgVFAgaXMgdG9vIGJpZy4gIFNvIGRyb3AgaXQuICAqLworCSAg ICAgIGlmICh0cHMtPmlzX3ZhcmlhYmxlX2xlbmd0aCkKKwkgICAgICAgIHsK KwkJICAvKiBUaGUgdHAgaXMgdmFyaWFibGUtbGVuZ3RoLiAgKi8KKwkJICB3 YXJuaW5nIChfKCJcCit0cmFjZWZyYW1lICVkIG9mIHRyYWNlcG9pbnQgJWQg bmVlZCBzYXZlIGRhdGEgdGhhdCBiaWdnZXIgdGhhbiBwYWNrZXQgc2l6ZSAl ZC5cblwKK1NvIGl0IHdpbGwgYmUgZHJvcHBlZC4iKSwgZnJhbWVfbnVtLCB0 cHMtPnRwLT5iYXNlLm51bWJlciwgQ1RGX1BBQ0tFVF9TSVpFKTsKKwkJfQor CSAgICAgIGVsc2UKKwkgICAgICAgIHsKKwkJICAvKiBUaGUgdHAgaXMgbm90 IHZhcmlhYmxlLWxlbmd0aC4gICovCisJCSAgd2FybmluZyAoXygiXAordHJh Y2Vwb2ludCAlZCBuZWVkIHNhdmUgZGF0YSB0aGF0IGJpZ2dlciB0aGFuIHBh Y2tldCBzaXplICVkLlxuXAorU28gYWxsIG9mIGl0cyB0cmFjZWZyYW1lcyB3 aWxsIGJlIGRyb3BwZWQuIiksCisJCQkgICB0cHMtPnRwLT5iYXNlLm51bWJl ciwgQ1RGX1BBQ0tFVF9TSVpFKTsKKwkJICAvKiBNYXJrIHRoaXMgdHAgdG8g bGV0IEdEQiBkcm9wIGl0cyB0cmFjZWZyYW1lcy4gICovCisJCSAgdHBzLT5p c19kcm9wcGVkID0gMTsKKwkJfQorCSAgICAgIGNvbnRpbnVlOworCSAgICB9 CisKKwkgIHRjcy5jaGVja19zaXplID0gMDsKKwkgIGN0Zl9zYXZlX3dyaXRl X2NvbnRlbnRfc2l6ZSAoJnRjcyk7CisgICAgICAgICAgY3RmX3NhdmVfbmV4 dF9wYWNrZXQgKCZ0Y3MpOworCSAgY3RmX3NhdmVfd3JpdGVfcGFja2V0X2hl YWRlcl9jb250ZXh0ICgmdGNzKTsKKwl9CisKKyAgICAgIHRyeV9jb3VudCAr KzsKKworICAgICAgdGNzLmN1cnJlbnRfY29udGVudF9zaXplID0gdGNzLmNv bnRlbnRfc2l6ZTsKKyAgICAgIHRjcy5jaGVja19zaXplID0gMTsKKworICAg ICAgLyogV3JpdGUgZXZlbnQgaGVhZGVyICovCisgICAgICBpZiAodHBzLT5z dGVwcGluZ19mcmFtZSkKKyAgICAgICAgdTMyID0gKHVpbnQzMl90KSAoLXRw cy0+dHAtPmJhc2UubnVtYmVyKTsKKyAgICAgIGVsc2UKKwl1MzIgPSAodWlu dDMyX3QpIHRwcy0+dHAtPmJhc2UubnVtYmVyOworICAgICAgaWYgKGN0Zl9z YXZlX2FsaWduX3dyaXRlICgmdGNzLCAodm9pZCAqKSZ1MzIsIHNpemVvZiAo dTMyKSwKKwkJCQlzaXplb2YgKHUzMikpKQorCWdvdG8gcmVfd3JpdGVfdHA7 CisKKyAgICAgIC8qIEFsaWduLiAgKi8KKyAgICAgIGlmICh0cHMtPmFsaWdu X3NpemUpCisgICAgICAgIHsKKwkgIGlmIChjdGZfc2F2ZV9mc2VlayAoJnRj cywKKwkJCSAgICAgIEFMSUdOX1NJWkUgKHRjcy5jdXJyZW50X2NvbnRlbnRf c2l6ZSwKKwkJCQkJICB0cHMtPmFsaWduX3NpemUpLAorCQkJICAgICAgU0VF S19DVVIpKQorCSAgICBnb3RvIHJlX3dyaXRlX3RwOworCX0KKworICAgICAg Zm9yIChjb2xsZWN0ID0gdHBzLT5jb2xsZWN0OyBjb2xsZWN0OyBjb2xsZWN0 ID0gY29sbGVjdC0+bmV4dCkKKyAgICAgICAgeworCSAgdm9sYXRpbGUgc3Ry dWN0IGdkYl9leGNlcHRpb24gZTsKKworCSAgaWYgKGNvbGxlY3QtPmlzX3Jl dCkKKwkgICAgeworCSAgICAgIENPUkVfQUREUiBwYzsKKwkgICAgICB1aW50 NjRfdCB1NjQ7CisKKwkgICAgICBUUllfQ0FUQ0ggKGUsIFJFVFVSTl9NQVNL X0VSUk9SKQorCQl7CisJCSAgc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lOwor CisJCSAgZnJhbWUgPSBnZXRfY3VycmVudF9mcmFtZSAoKTsKKwkJICBpZiAo IWZyYW1lKQorCQkgICAgZXJyb3IgKF8oImdldCBjdXJyZW50IGZyYW1lIGZh aWwiKSk7CisJCSAgZnJhbWUgPSBnZXRfcHJldl9mcmFtZSAoZnJhbWUpOwor CQkgIGlmICghZnJhbWUpCisJCSAgICBlcnJvciAoXygiZ2V0IHByZXYgZnJh bWUgZmFpbCIpKTsKKworCQkgIGlmICghZ2V0X2ZyYW1lX3BjX2lmX2F2YWls YWJsZSAoZnJhbWUsICZwYykpCisJCSAgICBlcnJvciAoXygiUEMgdW5hdmFp bGFibGUiKSk7CisJCX0KKwkgICAgICBpZiAoZS5yZWFzb24gPCAwKQorCQl7 CisJCSAgd2FybmluZyAoXygiXAordHJhY2VmcmFtZSAlZCBpcyBkcm9wcGVk IGJlY2F1c2UgdHJ5IHRvIGdldCB0aGUgdmFsdWUgb2YgXCIlc1wiIGdvdCBl cnJvcjogJXMiKSwKKwkJCSAgIGZyYW1lX251bSwgY29sbGVjdC0+c3RyLCBl Lm1lc3NhZ2UpOworCQkgIHRyYWNlZnJhbWVfaXNfZHJvcHBlZCA9IDE7CisJ CSAgYnJlYWs7CisJCX0KKworCSAgICAgIHU2NCA9IHBjOworCSAgICAgIGlm IChjdGZfc2F2ZV9hbGlnbl93cml0ZSAoJnRjcywgKGdkYl9ieXRlICopICZ1 NjQsCisJCQkJCXNpemVvZiAodTY0KSwgc2l6ZW9mICh1NjQpKSkKKwkJZ290 byByZV93cml0ZV90cDsKKwkgICAgfQorCSAgZWxzZQorICAgICAgICAgICAg eworCSAgICAgIHN0cnVjdCB2YWx1ZSAqdmFsOworCSAgICAgIHN0cnVjdCBj bGVhbnVwICpiYWNrX2NoYWluOworCSAgICAgIGNvbnN0IGdkYl9ieXRlICpj b250ZW50OworCisJICAgICAgYmFja19jaGFpbiA9IG1ha2VfY2xlYW51cCAo bnVsbF9jbGVhbnVwLCBOVUxMKTsKKwkgICAgICBUUllfQ0FUQ0ggKGUsIFJF VFVSTl9NQVNLX0VSUk9SKQorCSAgICAgICAgeworCQkgIHZhbCA9IGV2YWx1 YXRlX2V4cHJlc3Npb24gKGNvbGxlY3QtPmV4cHIpOworCQkgIGNvbnRlbnQg PSB2YWx1ZV9jb250ZW50cyAodmFsKTsKKwkJfQorCSAgICAgIGlmIChlLnJl YXNvbiA8IDAgfHwgY29sbGVjdC0+dHlwZSAhPSB2YWx1ZV90eXBlICh2YWwp KQorCQl7CisJCSAgaWYgKGUucmVhc29uIDwgMCkKKwkJICAgIHdhcm5pbmcg KF8oIlwKK3RyYWNlZnJhbWUgJWQgaXMgZHJvcHBlZCBiZWNhdXNlIHRyeSB0 byBnZXQgdGhlIHZhbHVlIG9mIFwiJXNcIiBnb3QgZXJyb3I6ICVzIiksCisJ CQkgICAgIGZyYW1lX251bSwgY29sbGVjdC0+c3RyLCBlLm1lc3NhZ2UpOwor CQkgIGVsc2UKKwkJICAgIHdhcm5pbmcgKF8oIlwKK3RyYWNlZnJhbWUgJWQg aXMgZHJvcHBlZCBiZWNhdXNlIHR5cGUgb2YgXCIlc1wiIGlzIHdyb25nLiIp LAorCQkJICAgICBmcmFtZV9udW0sIGNvbGxlY3QtPnN0cik7CisJCSAgdHJh Y2VmcmFtZV9pc19kcm9wcGVkID0gMTsKKwkJICBkb19jbGVhbnVwcyAoYmFj a19jaGFpbik7CisJCSAgYnJlYWs7CisJCX0KKworCSAgICAgIC8qIFdyaXRl IHRoaXMgdmFsIGFjY29yZGluZyB0byB0eXBlLiAgKi8KKwkgICAgICBpZiAo Y3RmX3NhdmVfYWxpZ25fd3JpdGUgKCZ0Y3MsIGNvbnRlbnQsCisJCQkJCVRZ UEVfTEVOR1RIIChjb2xsZWN0LT50eXBlKSwKKwkJCQkJY29sbGVjdC0+YWxp Z25fc2l6ZSkpCisJCXsKKwkJICBkb19jbGVhbnVwcyAoYmFja19jaGFpbik7 CisJCSAgZ290byByZV93cml0ZV90cDsKKwkJfQorCisJICAgICAgLyogRnJl ZSB0aGUgbWVtb3J5IHRoYXQgYWxsb2MgYnkgZXZhbHVhdGVfZXhwcmVzc2lv bi4gICovCisJICAgICAgZG9fY2xlYW51cHMgKGJhY2tfY2hhaW4pOworCSAg ICB9CisJfQorCisgICAgICBpZiAodHJhY2VmcmFtZV9pc19kcm9wcGVkKQor CWNvbnRpbnVlOworCisgICAgICB0Y3MuY29udGVudF9zaXplID0gdGNzLmN1 cnJlbnRfY29udGVudF9zaXplOworICAgIH0KKyAgY3RmX3NhdmVfd3JpdGVf Y29udGVudF9zaXplICgmdGNzKTsKKworICBkb19jbGVhbnVwcyAob2xkX2No YWluKTsKK30KLS0tIC9kZXYvbnVsbAorKysgYi9jdGYuaApAQCAtMCwwICsx LDI1IEBACisvKiBDVEYgZm9ybWF0IHN1cHBvcnQuCisKKyAgIENvcHlyaWdo dCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwor ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAg IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor CisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uICAqLworCisjaWZuZGVmIENURl9ICisjZGVmaW5lIENURl9I CisKK2V4dGVybiB2b2lkIGN0Zl9zYXZlIChjb25zdCBjaGFyICpkaXJuYW1l KTsKKworI2VuZGlmCi0tLSBhL21pL21pLW1haW4uYworKysgYi9taS9taS1t YWluLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJvc2RhdGEuaCIK ICNpbmNsdWRlICJzcGxheS10cmVlLmgiCiAjaW5jbHVkZSAidHJhY2Vwb2lu dC5oIgorI2luY2x1ZGUgImN0Zi5oIgogI2luY2x1ZGUgImFkYS1sYW5nLmgi CiAjaW5jbHVkZSAibGluZXNwZWMuaCIKIApAQCAtMjQ5NSwxNiArMjQ5Niwx OSBAQCB2b2lkCiBtaV9jbWRfdHJhY2Vfc2F2ZSAoY2hhciAqY29tbWFuZCwg Y2hhciAqKmFyZ3YsIGludCBhcmdjKQogewogICBpbnQgdGFyZ2V0X3NhdmVz ID0gMDsKKyAgaW50IGdlbmVyYXRlX2N0ZiA9IDA7CiAgIGNoYXIgKmZpbGVu YW1lOwogCiAgIGlmIChhcmdjICE9IDEgJiYgYXJnYyAhPSAyKQotICAgIGVy cm9yIChfKCJVc2FnZTogLXRyYWNlLXNhdmUgWy1yXSBmaWxlbmFtZSIpKTsK KyAgICBlcnJvciAoXygiVXNhZ2U6IC10cmFjZS1zYXZlIFstcl0gWy1jdGZd IGZpbGVuYW1lIikpOwogCiAgIGlmIChhcmdjID09IDIpCiAgICAgewogICAg ICAgZmlsZW5hbWUgPSBhcmd2WzFdOwogICAgICAgaWYgKHN0cmNtcCAoYXJn dlswXSwgIi1yIikgPT0gMCkKIAl0YXJnZXRfc2F2ZXMgPSAxOworICAgICAg aWYgKHN0cmNtcCAoYXJndlswXSwgIi1jdGYiKSA9PSAwKQorCWdlbmVyYXRl X2N0ZiA9IDE7CiAgICAgICBlbHNlCiAJZXJyb3IgKF8oIkludmFsaWQgb3B0 aW9uOiAlcyIpLCBhcmd2WzBdKTsKICAgICB9CkBAIC0yNTEzLDcgKzI1MTcs MTAgQEAgbWlfY21kX3RyYWNlX3NhdmUgKGNoYXIgKmNvbW1hbmQsIGNoYXIg KgogICAgICAgZmlsZW5hbWUgPSBhcmd2WzBdOwogICAgIH0KIAotICB0cmFj ZV9zYXZlIChmaWxlbmFtZSwgdGFyZ2V0X3NhdmVzKTsKKyAgaWYgKGdlbmVy YXRlX2N0ZikKKyAgICBjdGZfc2F2ZSAoZmlsZW5hbWUpOworICBlbHNlCisg ICAgdHJhY2Vfc2F2ZSAoZmlsZW5hbWUsIHRhcmdldF9zYXZlcyk7CiB9CiAK IHZvaWQKLS0tIGEvdHJhY2Vwb2ludC5jCisrKyBiL3RyYWNlcG9pbnQuYwpA QCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgImV4Y2VwdGlvbnMuaCIKICNp bmNsdWRlICJjbGkvY2xpLXV0aWxzLmgiCiAjaW5jbHVkZSAicHJvYmUuaCIK KyNpbmNsdWRlICJjdGYuaCIKIAogLyogcmVhZGxpbmUgaW5jbHVkZSBmaWxl cyAqLwogI2luY2x1ZGUgInJlYWRsaW5lL3JlYWRsaW5lLmgiCkBAIC01NzMs NyArNTc0LDcgQEAgd2hpbGVfc3RlcHBpbmdfcHNldWRvY29tbWFuZCAoY2hh ciAqYXJncwogICBlcnJvciAoXygiVGhpcyBjb21tYW5kIGNhbiBvbmx5IGJl IHVzZWQgaW4gYSB0cmFjZXBvaW50IGFjdGlvbnMgbGlzdC4iKSk7CiB9CiAK LXN0YXRpYyB2b2lkCit2b2lkCiBjb2xsZWN0X3BzZXVkb2NvbW1hbmQgKGNo YXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKIHsKICAgZXJyb3IgKF8oIlRoaXMg Y29tbWFuZCBjYW4gb25seSBiZSB1c2VkIGluIGEgdHJhY2Vwb2ludCBhY3Rp b25zIGxpc3QuIikpOwpAQCAtMTE0Nyw2ICsxMTQ4LDM0IEBAIGRvX2NvbGxl Y3Rfc3ltYm9sIChjb25zdCBjaGFyICpwcmludF9uYW0KICAgcC0+Y291bnQr KzsKIH0KIAoraW50CithZGRfbG9jYWxfc3ltYm9sc18xIChpbnQgdHlwZSwg Q09SRV9BRERSIHBjLAorCQkgICAgIGl0ZXJhdGVfb3Zlcl9ibG9ja19hcmdf bG9jYWxfdmFyc19jYiBjYiwKKwkJICAgICB2b2lkICpjYl9kYXRhKQorewor ICBzdHJ1Y3QgYmxvY2sgKmJsb2NrOworCisgIGlmICh0eXBlID09ICdMJykK KyAgICB7CisgICAgICBibG9jayA9IGJsb2NrX2Zvcl9wYyAocGMpOworICAg ICAgaWYgKGJsb2NrID09IE5VTEwpCisJcmV0dXJuIC0xOworCisgICAgICBp dGVyYXRlX292ZXJfYmxvY2tfbG9jYWxfdmFycyAoYmxvY2ssIGNiLCBjYl9k YXRhKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwYyA9IGdldF9w Y19mdW5jdGlvbl9zdGFydCAocGMpOworICAgICAgYmxvY2sgPSBibG9ja19m b3JfcGMgKHBjKTsKKyAgICAgIGlmIChibG9jayA9PSBOVUxMKQorCXJldHVy biAtMTsKKworICAgICAgaXRlcmF0ZV9vdmVyX2Jsb2NrX2FyZ192YXJzIChi bG9jaywgY2IsIGNiX2RhdGEpOworICAgIH0KKworICByZXR1cm4gMDsKK30K KwogLyogQWRkIGFsbCBsb2NhbHMgKG9yIGFyZ3MpIHN5bWJvbHMgdG8gY29s bGVjdGlvbiBsaXN0LiAgKi8KIHN0YXRpYyB2b2lkCiBhZGRfbG9jYWxfc3lt Ym9scyAoc3RydWN0IGNvbGxlY3Rpb25fbGlzdCAqY29sbGVjdCwKQEAgLTEx NTUsNiArMTE4NCw3IEBAIGFkZF9sb2NhbF9zeW1ib2xzIChzdHJ1Y3QgY29s bGVjdGlvbl9saXMKIHsKICAgc3RydWN0IGJsb2NrICpibG9jazsKICAgc3Ry dWN0IGFkZF9sb2NhbF9zeW1ib2xzX2RhdGEgY2JfZGF0YTsKKyAgY29uc3Qg Y2hhciAqbmFtZTsKIAogICBjYl9kYXRhLmNvbGxlY3QgPSBjb2xsZWN0Owog ICBjYl9kYXRhLmdkYmFyY2ggPSBnZGJhcmNoOwpAQCAtMTE2NCwzMyArMTE5 NCwxOSBAQCBhZGRfbG9jYWxfc3ltYm9scyAoc3RydWN0IGNvbGxlY3Rpb25f bGlzCiAgIGNiX2RhdGEuY291bnQgPSAwOwogCiAgIGlmICh0eXBlID09ICdM JykKLSAgICB7Ci0gICAgICBibG9jayA9IGJsb2NrX2Zvcl9wYyAocGMpOwot ICAgICAgaWYgKGJsb2NrID09IE5VTEwpCi0JewotCSAgd2FybmluZyAoXygi Q2FuJ3QgY29sbGVjdCBsb2NhbHM7ICIKLQkJICAgICAibm8gc3ltYm9sIHRh YmxlIGluZm8gYXZhaWxhYmxlLlxuIikpOwotCSAgcmV0dXJuOwotCX0KLQot ICAgICAgaXRlcmF0ZV9vdmVyX2Jsb2NrX2xvY2FsX3ZhcnMgKGJsb2NrLCBk b19jb2xsZWN0X3N5bWJvbCwgJmNiX2RhdGEpOwotICAgICAgaWYgKGNiX2Rh dGEuY291bnQgPT0gMCkKLQl3YXJuaW5nIChfKCJObyBsb2NhbHMgZm91bmQg aW4gc2NvcGUuIikpOwotICAgIH0KKyAgICBuYW1lID0gImxvY2FscyI7CiAg IGVsc2UKLSAgICB7Ci0gICAgICBwYyA9IGdldF9wY19mdW5jdGlvbl9zdGFy dCAocGMpOwotICAgICAgYmxvY2sgPSBibG9ja19mb3JfcGMgKHBjKTsKLSAg ICAgIGlmIChibG9jayA9PSBOVUxMKQotCXsKLQkgIHdhcm5pbmcgKF8oIkNh bid0IGNvbGxlY3QgYXJnczsgbm8gc3ltYm9sIHRhYmxlIGluZm8gYXZhaWxh YmxlLiIpKTsKLQkgIHJldHVybjsKLQl9CisgICAgbmFtZSA9ICJhcmdzIjsK IAotICAgICAgaXRlcmF0ZV9vdmVyX2Jsb2NrX2FyZ192YXJzIChibG9jaywg ZG9fY29sbGVjdF9zeW1ib2wsICZjYl9kYXRhKTsKLSAgICAgIGlmIChjYl9k YXRhLmNvdW50ID09IDApCi0Jd2FybmluZyAoXygiTm8gYXJncyBmb3VuZCBp biBzY29wZS4iKSk7CisgIGlmIChhZGRfbG9jYWxfc3ltYm9sc18xICh0eXBl LCBwYywgZG9fY29sbGVjdF9zeW1ib2wsICZjYl9kYXRhKSkKKyAgICB7Cisg ICAgICB3YXJuaW5nIChfKCJDYW4ndCBjb2xsZWN0ICVzOyBubyBzeW1ib2wg dGFibGUgaW5mbyBhdmFpbGFibGUuXG4iKSwKKwkgICAgICAgbmFtZSk7Cisg ICAgICByZXR1cm47CiAgICAgfQorCisgIGlmIChjYl9kYXRhLmNvdW50ID09 IDApCisgICAgd2FybmluZyAoXygiTm8gJXMgZm91bmQgaW4gc2NvcGUuIiks IG5hbWUpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMzE1MSw2ICszMTY3LDcg QEAgc3RhdGljIHZvaWQKIHRyYWNlX3NhdmVfY29tbWFuZCAoY2hhciAqYXJn cywgaW50IGZyb21fdHR5KQogewogICBpbnQgdGFyZ2V0X2RvZXNfc2F2ZSA9 IDA7CisgIGludCBnZW5lcmF0ZV9jdGYgPSAwOwogICBjaGFyICoqYXJndjsK ICAgY2hhciAqZmlsZW5hbWUgPSBOVUxMOwogICBzdHJ1Y3QgY2xlYW51cCAq YmFja190bzsKQEAgLTMxNjUsNiArMzE4Miw4IEBAIHRyYWNlX3NhdmVfY29t bWFuZCAoY2hhciAqYXJncywgaW50IGZyb20KICAgICB7CiAgICAgICBpZiAo c3RyY21wICgqYXJndiwgIi1yIikgPT0gMCkKIAl0YXJnZXRfZG9lc19zYXZl ID0gMTsKKyAgICAgIGlmIChzdHJjbXAgKCphcmd2LCAiLWN0ZiIpID09IDAp CisJZ2VuZXJhdGVfY3RmID0gMTsKICAgICAgIGVsc2UgaWYgKCoqYXJndiA9 PSAnLScpCiAJZXJyb3IgKF8oInVua25vd24gb3B0aW9uIGAlcyciKSwgKmFy Z3YpOwogICAgICAgZWxzZQpAQCAtMzE3NCwxMCArMzE5MywxOCBAQCB0cmFj ZV9zYXZlX2NvbW1hbmQgKGNoYXIgKmFyZ3MsIGludCBmcm9tCiAgIGlmICgh ZmlsZW5hbWUpCiAgICAgZXJyb3Jfbm9fYXJnIChfKCJmaWxlIGluIHdoaWNo IHRvIHNhdmUgdHJhY2UgZGF0YSIpKTsKIAotICB0cmFjZV9zYXZlIChmaWxl bmFtZSwgdGFyZ2V0X2RvZXNfc2F2ZSk7CisgIGlmIChnZW5lcmF0ZV9jdGYp CisgICAgeworICAgICAgaWYgKHRhcmdldF9kb2VzX3NhdmUpCisJZXJyb3Jf bm9fYXJnIChfKCItciBjYW5ub3QgYmUgdXNlZCB3aXRoIC1jdGYuIikpOwor ICAgICAgY3RmX3NhdmUgKGZpbGVuYW1lKTsKKyAgICB9CisgIGVsc2UKKyAg ICB0cmFjZV9zYXZlIChmaWxlbmFtZSwgdGFyZ2V0X2RvZXNfc2F2ZSk7CiAK ICAgaWYgKGZyb21fdHR5KQotICAgIHByaW50Zl9maWx0ZXJlZCAoXygiVHJh Y2UgZGF0YSBzYXZlZCB0byBmaWxlICclcycuXG4iKSwgZmlsZW5hbWUpOwor ICAgIHByaW50Zl9maWx0ZXJlZCAoXygiVHJhY2UgZGF0YSBzYXZlZCB0byAl cyAnJXMnLlxuIiksCisJCSAgICAgZ2VuZXJhdGVfY3RmID8gImRpcmVjdG9y eSIgOiAiZmlsZSIsIGZpbGVuYW1lKTsKIAogICBkb19jbGVhbnVwcyAoYmFj a190byk7CiB9CkBAIC01MjIwLDYgKzUyNDcsNyBAQCBfaW5pdGlhbGl6ZV90 cmFjZXBvaW50ICh2b2lkKQogICBhZGRfY29tICgidHNhdmUiLCBjbGFzc190 cmFjZSwgdHJhY2Vfc2F2ZV9jb21tYW5kLCBfKCJcCiBTYXZlIHRoZSB0cmFj ZSBkYXRhIHRvIGEgZmlsZS5cblwKIFVzZSB0aGUgJy1yJyBvcHRpb24gdG8g ZGlyZWN0IHRoZSB0YXJnZXQgdG8gc2F2ZSBkaXJlY3RseSB0byB0aGUgZmls ZSxcblwKK1VzZSB0aGUgJy1jdGYnIG9wdGlvbiB0byBzYXZlIHRoZSBkYXRh IHRvIENURiBmb3JtYXQsXG5cCiB1c2luZyBpdHMgb3duIGZpbGVzeXN0ZW0u IikpOwogCiAgIGMgPSBhZGRfY29tICgidHZhcmlhYmxlIiwgY2xhc3NfdHJh Y2UsIHRyYWNlX3ZhcmlhYmxlX2NvbW1hbmQsXygiXAotLS0gYS90cmFjZXBv aW50LmgKKysrIGIvdHJhY2Vwb2ludC5oCkBAIC0yMyw2ICsyMyw3IEBACiAj aW5jbHVkZSAidGFyZ2V0LmgiCiAjaW5jbHVkZSAibWVtcmFuZ2UuaCIKICNp bmNsdWRlICJnZGJfdmVjcy5oIgorI2luY2x1ZGUgInN0YWNrLmgiCiAKIC8q IEEgdHJhY2Ugc3RhdGUgdmFyaWFibGUgaXMgYSB2YWx1ZSBtYW5hZ2VkIGJ5 IGEgdGFyZ2V0IGJlaW5nCiAgICB0cmFjZWQuICBBIHRyYWNlIHN0YXRlIHZh cmlhYmxlIChvciB0c3YgZm9yIHNob3J0KSBjYW4gYmUgYWNjZXNzZWQKQEAg LTI0Niw2ICsyNDcsNyBAQCBleHRlcm4gdm9pZCB2YWxpZGF0ZV9hY3Rpb25s aW5lIChjaGFyICoqCiAKIGV4dGVybiB2b2lkIGVuZF9hY3Rpb25zX3BzZXVk b2NvbW1hbmQgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSk7CiBleHRlcm4g dm9pZCB3aGlsZV9zdGVwcGluZ19wc2V1ZG9jb21tYW5kIChjaGFyICphcmdz LCBpbnQgZnJvbV90dHkpOworZXh0ZXJuIHZvaWQgY29sbGVjdF9wc2V1ZG9j b21tYW5kIChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpOwogCiBleHRlcm4g c3RydWN0IHRyYWNlX3N0YXRlX3ZhcmlhYmxlICpmaW5kX3RyYWNlX3N0YXRl X3ZhcmlhYmxlIChjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiBzdHJ1Y3Qg dHJhY2Vfc3RhdGVfdmFyaWFibGUgKmNyZWF0ZV90cmFjZV9zdGF0ZV92YXJp YWJsZSAoY29uc3QgY2hhciAqbmFtZSk7CkBAIC0yOTAsNCArMjkyLDcgQEAg ZXh0ZXJuIHN0cnVjdCB0cmFjZWZyYW1lX2luZm8gKnBhcnNlX3RyYQogZXh0 ZXJuIGludCB0cmFjZWZyYW1lX2F2YWlsYWJsZV9tZW1vcnkgKFZFQyhtZW1f cmFuZ2VfcykgKipyZXN1bHQsCiAJCQkJCUNPUkVfQUREUiBtZW1hZGRyLCBV TE9OR0VTVCBsZW4pOwogCitleHRlcm4gaW50IGFkZF9sb2NhbF9zeW1ib2xz XzEgKGludCB0eXBlLCBDT1JFX0FERFIgcGMsCisJCQkJaXRlcmF0ZV9vdmVy X2Jsb2NrX2FyZ19sb2NhbF92YXJzX2NiIGNiLAorCQkJCXZvaWQgKmNiX2Rh dGEpOwogI2VuZGlmCS8qIFRSQUNFUE9JTlRfSCAqLwo= --bcaec54c47a2134bd204d338c942--