From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26389 invoked by alias); 19 Feb 2013 07:06:04 -0000 Received: (qmail 26369 invoked by uid 22791); 19 Feb 2013 07:06:02 -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_XS,TW_XZ X-Spam-Check-By: sourceware.org Received: from mail-oa0-f49.google.com (HELO mail-oa0-f49.google.com) (209.85.219.49) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 19 Feb 2013 07:05:42 +0000 Received: by mail-oa0-f49.google.com with SMTP id j6so6685359oag.36 for ; Mon, 18 Feb 2013 23:05:41 -0800 (PST) X-Received: by 10.182.3.134 with SMTP id c6mr7269459obc.10.1361257541635; Mon, 18 Feb 2013 23:05:41 -0800 (PST) MIME-Version: 1.0 Received: by 10.60.46.133 with HTTP; Mon, 18 Feb 2013 23:05:01 -0800 (PST) In-Reply-To: References: <1358519377.21794.2@abidh-ubunto1104> From: Hui Zhu Date: Tue, 19 Feb 2013 07:06:00 -0000 Message-ID: Subject: Re: [PATCH] Add CTF support to GDB [1/4] Add "-ctf" to tsave command To: "Abid, Hafiz" Cc: Tom Tromey , "Zhu, Hui" , "gdb-patches@sourceware.org" Content-Type: multipart/mixed; boundary=f46d0444ea7d378fe404d60e7828 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-02/txt/msg00489.txt.bz2 --f46d0444ea7d378fe404d60e7828 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable Content-length: 22107 The old patch have some build issues with upstream. So I post a new version to handle it. Thanks, Hui 2013-02-19 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. * breakpoint.c (tracepoint_count): Remove static. * mi/mi-main.c (ctf.h): New include. (mi_cmd_trace_save): Add "-ctf". * tracepoint.c (ctf.h): New include. (while_stepping_pseudocommand, collect_pseudocommand): Remove static. (trace_save_command): Add "-ctf". (_initialize_tracepoint): Ditto. * tracepoint.h (stack.h): New include. (while_stepping_pseudocommand, collect_pseudocommand): Add extern. On Mon, Feb 11, 2013 at 8:53 PM, Hui Zhu wrote: > On Tue, Feb 5, 2013 at 6:51 AM, Hui Zhu wrote: >> On Mon, Feb 4, 2013 at 11:33 PM, Abid, Hafiz wro= te: >>> Hi Hui, >>> I tested the latest patch. I get some build error due to uninitialized = local variables. >>> ../../gdb/gdb/ctf.c: In function =91ctf_save_collect_get_1=92: >>> ../../gdb/gdb/ctf.c:636:21: error: =91type=92 may be used uninitialised= in this function [-Werror=3Duninitialized] >>> ../../gdb/gdb/ctf.c: In function =91ctf_save_collect_get=92: >>> ../../gdb/gdb/ctf.c:734:28: error: =91pc=92 may be used uninitialised i= n this function [-Werror=3Duninitialized] >>> ../../gdb/gdb/ctf.c: In function =91ctf_save_tp_find=92: >>> ../../gdb/gdb/ctf.c:823:7: error: =91pc=92 may be used uninitialised in= this function [-Werror=3Duninitialized] >>> ../../gdb/gdb/ctf.c: In function =91ctf_save=92: >>> ../../gdb/gdb/ctf.c:1323:33: error: =91content=92 may be used uninitial= ised in this function [-Werror=3Duninitialized] >>> ../../gdb/gdb/ctf.c:1307:56: error: =91val=92 may be used uninitialised= in this function [-Werror=3Duninitialized] >>> >>> After fixing that, I can see that array and while-stepping are working = OK. As I understand, bitfields are not yet supported in babeltrace. So that= takes care of most of the issues I reported. >>> >>> Regards, >>> Abid >> >> >> Hi Abid, >> >> Thanks for your help. I just post a new version that fixed these issues. >> >> Best, >> Hui > > Hi, > > Ping. > > Thanks, > Hui > >> >> 2013-02-05 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. >> * breakpoint.c (tracepoint_count): Remove static. >> * 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. >> >>> ________________________________________ >>> From: Hui Zhu [teawater@gmail.com] >>> Sent: Wednesday, January 23, 2013 1:32 PM >>> To: Abid, Hafiz >>> Cc: Tom Tromey; Zhu, Hui; gdb-patches@sourceware.org >>> Subject: Re: [PATCH] Add CTF support to GDB [1/4] Add "-ctf" to tsave c= ommand >>> >>> Hi Abid, >>> >>> I post a new version according to your comments. >>> >>> Following part have the reply for your comments. >>> >>> Thanks, >>> Hui >>> >>> 2013-01-23 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. >>> * breakpoint.c (tracepoint_count): Remove static. >>> * 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. >>> >>> On Fri, Jan 18, 2013 at 10:29 PM, Hafiz Abid Qadeer >>> wrote: >>>> On 18/01/13 01:16:24, Hui Zhu wrote: >>>>> >>>>> Hi Abid, >>>>> >>>>> Thanks for your review. >>>>> >>>>> On Mon, Jan 14, 2013 at 10:27 PM, Abid, Hafiz >>>>> wrote: >>>>> > Hi Hui, >>>>> > I tested your patch and found a few problems. I used 'tsave -ctf ou= tput' >>>>> > and then used babeltrace to get a text dump of the output. >>>>> > >>>>> > 1. In case of array, the tracing results are off by one. >>>>> > 2. Struct members values are not shown correctly in case of bitfiel= ds. >>>>> >>>>> Could you give me some example about this 2 issues? >>>>> And I just fixed some type issue with while-stepping. I think maybe >>>>> they were fixed in the new patch. >>>>> >>>> I made an array of size 5 and gave it elements values from 5 to 9. I >>>> collected this array in trace. After trace was finished, GDB will show >>>> correct values of all the array elements. But in babeltrace, the first >>>> element would have value of 6 and last will have a garbage value. So it >>>> looked that values are off by one index. >>>> >>>> For bitfield, I had a structure like this and I observed that value of= b was >>>> not correct in babeltrace. >>>> struct test_main >>>> { >>>> int a; >>>> int b: 16; >>>> int c: 16; >>>> }; >>>> >>>> I will send you my test application offline. >>> >>> Thanks. This issue is because old patch doesn't support bitfields. I >>> add them in the new patch. But babeltrace doesn't support gcc >>> bitfields. So I didn't update test for bitfields. >>> >>>> >>>> >>>>> > 3. When I use while-stepping on tracepoints actions, I see some err= or in >>>>> > the babeltrace. >>>>> >>>>> Fixed. And I think it is a good idea for test. So I updated test for >>>>> this issue. >>>>> >>>>> > 4. It looks that TYPE_CODE_FLT is not supported which cause the >>>>> > following warning when I use collect $reg on the tracepoint actions. >>>>> > "warning: error saving tracepoint 2 "$st0" to CTF file: type is not >>>>> > support." >>>>> >>>>> Yes. current patch is still not support all the type of GDB. >>>>> >>>>> > >>>>> > Below are some comments on the code. I see many tab characters in t= he >>>>> > patch. It may be problem in my editor but something to keep an eye = on. >>>>> > >>>>> >>+#define CTF_PACKET_SIZE 4096 >>>>> > It may be my ignorance but is this size sufficient? Should it be >>>>> > possible to increase the limit using some command? >>>>> >>>>> Yes, add a command to change current ctf_packet_size is a good idea. >>>>> Do you mind I add it after CTF patch get commit? Then we can keep >>>>> focus on the current function of CTF patch. >>>> >>>> I dont have any problem with fixed size. I was just giving an idea tha= t you >>>> may want to implement in future. >>>> >>>> >>>>> >>>>> > >>>>> >>+ /* This is the content size of current packet. */ >>>>> >>+ size_t content_size; >>>>> > ... >>>>> >>+ /* This is the content size of current packet and event that is >>>>> >>+ being written to file. >>>>> >>+ Check size use it. */ >>>>> >>+ size_t current_content_size; >>>>> > I don't fully understand the difference between these 2 variables. >>>>> > Probably they need a more helpful comment. >>>>> > >>>>> >>>>> I update it to: >>>>> /* This is the temp value of CONTENT_SIZE when GDB write a event to >>>>> CTF file. >>>>> If this event save success, CURRENT_CONTENT_SIZE will set to >>>>> CONTENT_SIZE. */ >>>>> size_t current_content_size; >>>>> >>>>> >> +error saving tracepoint %d \"%s\" to CTF file: type is not suppor= t."), >>>>> > 'supported' instead of 'support'. >>>>> >>>>> Fixed. >>>>> >>>>> > >>>>> >>+ sprintf (regname, "$%s", name); >>>>> >>+ sprintf (file_name, "%s/%s", dirname, CTF_METADATA_NAME); >>>>> >>+ sprintf (file_name, "%s/%s", dirname, CTF_DATASTREAM_NAME); >>>>> > Please use xsnprintf. There are also a bunch of snprintf calls in t= his >>>>> > file. >>>>> >>>>> The size of file_name is alloca as the right size for both this >>>>> string. So I think this part doesn't need xsnprintf. >>>>> file_name =3D alloca (strlen (dirname) + 1 >>>>> + strlen (CTF_DATASTREAM_NAME) + 1); >>>>> > >>>>> >>+ case '$': >>>>> >>+ collect->ctf_str >>>>> >>+ =3D ctf_save_metadata_change_char >>>>> >> (collect->ctf_str, >>>>> >>+ i, "dolla= r"); >>>>> > This will change expression like $eip in gdb to dollar_eip in ctf. = Does >>>>> > CTF forbid these characters? >>>>> >>>>> No. >>>> >>>> In that case, the question will be why we do this change from $eip to >>>> dollar_eip. >>> >>> Oops, sorry for my mistake. CTF doesn't support this char like $ or >>> something else. >>> >>>> >>>> >>>>> >>>>> > >>>>> >>+static void >>>>> >>+tsv_save_do_loc_arg_collect (const char *print_name, >>>>> >>+ struct symbol *sym, >>>>> >>+ void *cb_data) >>>>> >>+{ >>>>> >>+ struct loc_arg_collect_data *p =3D cb_data; >>>>> >>+ char *name; >>>>> >>+ >>>>> >>+ name =3D alloca (strlen (print_name) + 1); >>>>> >>+ strcpy (name, print_name); >>>>> >>+ ctf_save_collect_get_1 (p->tcsp, p->tps, name); >>>>> >>+} >>>>> > Is there any real need to make a copy of the print_name? I think it= can >>>>> > be passed directly to the ctf_save_collect_get_1. >>>>> >>>>> This is because print_name is a const but ctf_save_collect_get_1's >>>>> argument name need to be a string that is not a const. >>>>> Added comments for that. >>>> >>>> You probably would have done a cast or perhaps ctf_save_collect_get_1's >>>> argument can be changed to const. >>>> >>> >>> Fixed. >>> >>>> >>>>> >>>>> > >>>>> >>+ tmp =3D alloca (strlen (collect->ctf_str) + 30); >>>>> >>+ strcpy (tmp, collect->ctf_str); >>>>> >>+ while (1) >>>>> >>+ { >>>>> >>+ struct ctf_save_collect_s *collect2; >>>>> >>+ int i =3D 0; >>>>> >>+ >>>>> >>+ for (collect2 =3D tps->collect; collect2; >>>>> >>+ collect2 =3D collect2->next) >>>>> >>+ { >>>>> >>+ if (collect2->ctf_str >>>>> >>+ && strcmp (collect2->ctf_str, tmp) =3D=3D 0) >>>>> >>+ break; >>>>> >>+ } >>>>> >>+ if (collect2 =3D=3D NULL) >>>>> >>+ break; >>>>> >>+ >>>>> >>+ snprintf (tmp, strlen (collect->ctf_str) + 30, >>>>> >>+ "%s_%d", collect->ctf_str, i++); >>>>> >>+ } >>>>> > What is the purpose of this loop? It only writes a new string in th= e tmp >>>>> > local variable which is not used after the loop. >>>>> >>>>> Fixed. >>>>> >>>>> > >>>>> >>+\"%s\" of tracepoint %d rename to \"%s\" in CTF file."), >>>>> > I think 'is renamed' will be better instead of rename here. >>>>> >>>>> Fixed. >>>>> >>>>> > >>>>> >>+ if (try_count > 1 || 4 + 4 + 4 =3D=3D tcs.content_size) >>>>> > what is the significance of this 4 + 4 + 4 >>>>> >>>>> Change it to CONTENT_HEADER_SIZE >>>>> >>>>> > >>>>> >>+traceframe %d of tracepoint %d need save data that bigger than pac= ket >>>>> >> size %d.\n\ >>>>> > should be "needs to save data that is bigger than the packet size" >>>>> >>>>> Fixed. >>>>> >>>>> > >>>>> >>+traceframe %d is dropped because try to get the value of \"%s\" got >>>>> >> error: %s"), >>>>> > This probably needs to re-phrased. >>>>> >>>>> Fixed. >>>>> >>>>> > >>>>> > Also many comments can be improved grammatically. This will make th= em >>>>> > easier to understand. Please let me know if I need any help there. >>>>> > >>>>> > Thanks, >>>>> > Abid >>>>> >>>>> Post a new version according to your comments. >>>>> >>>>> Thanks, >>>>> Hui >>>>> >>>>> 2013-01-18 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. >>>>> * breakpoint.c (tracepoint_count): Remove static. >>>>> * 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. >>>>> >>>>> > >>>>> > ________________________________________ >>>>> > From: gdb-patches-owner@sourceware.org >>>>> > [gdb-patches-owner@sourceware.org] on behalf of Hui Zhu [teawater@g= mail.com] >>>>> > Sent: Monday, January 14, 2013 5:18 AM >>>>> > To: Tom Tromey >>>>> > Cc: Zhu, Hui; gdb-patches@sourceware.org >>>>> > Subject: Re: [PATCH] Add CTF support to GDB [1/4] Add "-ctf" to tsa= ve >>>>> > command >>>>> > >>>>> > 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 *t= ype) >>>>> > { >>>>> > struct ctf_save_type_s *t; >>>>> > >>>>> > for (t =3D tcsp->type; t; t =3D t->next) >>>>> > { >>>>> > if (t->type =3D=3D type >>>>> > || (TYPE_NAME (t->type) && TYPE_NAME (type) >>>>> > && strcmp (TYPE_NAME (t->type), TYPE_NAME (type)) =3D= =3D 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 wro= te: >>>>> >>>>>>>> "Hui" =3D=3D 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 exampl= e, 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) =3D=3D TYPE_CODE_ARRAY; >>>>> >>> Hui> + type =3D 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 th= is >>>>> >>> 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-obv= ious >>>>> >>> 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 resul= t 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 inste= ad >>>>> >>> 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) =3D=3D TYPE_CODE_ARRAY; >>>>> >> type =3D TYPE_TARGET_TYPE (type) ? TYPE_TARGET_TYPE (ty= pe) >>>>> >> : 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 =3D 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 =3D get_current_frame (); >>>>> >>> Hui> + if (!frame) >>>>> >>> Hui> + error (_("get current frame fail")); >>>>> >>> Hui> + frame =3D 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 lik= e 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 pars= ing >>>>> >>> 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 comm= ents >>>>> >> of ctf_save_collect_get to: >>>>> >> /* Get var that want to collect from STR and put them to TPS->coll= ect. >>>>> >> 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 poss= ible. >>>>> >>> >>>>> >>> 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 s= aving >>>>> >>> 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. >>>>> >>>> --f46d0444ea7d378fe404d60e7828 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_hdcpjxh40 Content-length: 59097 LS0tIGEvTWFrZWZpbGUuaW4KKysrIGIvTWFrZWZpbGUuaW4KQEAgLTUxMCw3 ICs1MTAsNyBAQCBTRVJfSEFSRFdJUkUgPSBAU0VSX0hBUkRXSVJFQAogIyBU aGUgYHJlbW90ZScgZGVidWdnaW5nIHRhcmdldCBpcyBzdXBwb3J0ZWQgZm9y IG1vc3QgYXJjaGl0ZWN0dXJlcywKICMgYnV0IG5vdCBhbGwgKGUuZy4gOTYw KQogUkVNT1RFX09CUyA9IHJlbW90ZS5vIGRjYWNoZS5vIHRyYWNlcG9pbnQu byBheC1nZW5lcmFsLm8gYXgtZ2RiLm8gcmVtb3RlLWZpbGVpby5vIFwKLQly ZW1vdGUtbm90aWYubworCXJlbW90ZS1ub3RpZi5vIGN0Zi5vCiAKICMgVGhp cyBpcyByZW1vdGUtc2ltLm8gaWYgYSBzaW11bGF0b3IgaXMgdG8gYmUgbGlu a2VkIGluLgogU0lNX09CUyA9IEBTSU1fT0JTQApAQCAtNzU5LDcgKzc1OSw3 IEBAIFNGSUxFUyA9IGFkYS1leHAueSBhZGEtbGFuZy5jIGFkYS10eXBlcHIK IAlyZWdzZXQuYyBzb2wtdGhyZWFkLmMgd2luZG93cy10ZXJtY2FwLmMgXAog CWNvbW1vbi9nZGJfdmVjcy5jIGNvbW1vbi9jb21tb24tdXRpbHMuYyBjb21t b24veG1sLXV0aWxzLmMgXAogCWNvbW1vbi9wdGlkLmMgY29tbW9uL2J1ZmZl ci5jIGdkYi1kbGZjbi5jIGNvbW1vbi9hZ2VudC5jIFwKLQljb21tb24vZm9y bWF0LmMKKwljb21tb24vZm9ybWF0LmMgY3RmLmMKIAogTElOVEZJTEVTID0g JChTRklMRVMpICQoWVlGSUxFUykgJChDT05GSUdfU1JDUykgaW5pdC5jCiAK QEAgLTgzNSw3ICs4MzUsNyBAQCBnbnVsaWIvaW1wb3J0L3N0ZGRlZi5pbi5o IGdudWxpYi9pbXBvcnQvCiBjb21tb24vY29tbW9uLXV0aWxzLmggY29tbW9u L3htbC11dGlscy5oIGNvbW1vbi9idWZmZXIuaCBjb21tb24vcHRpZC5oIFwK IGNvbW1vbi9mb3JtYXQuaCBjb21tb24vaG9zdC1kZWZzLmggdXRpbHMuaCBj b21tb24vcXVldWUuaCBcCiBjb21tb24vbGludXgtb3NkYXRhLmggZ2RiLWRs ZmNuLmggYXV0by1sb2FkLmggcHJvYmUuaCBzdGFwLXByb2JlLmggXAotZ2Ri X2JmZC5oIHNwYXJjLXJhdmVuc2Nhci10aHJlYWQuaCBwcGMtcmF2ZW5zY2Fy LXRocmVhZC5oCitnZGJfYmZkLmggc3BhcmMtcmF2ZW5zY2FyLXRocmVhZC5o IHBwYy1yYXZlbnNjYXItdGhyZWFkLmggY3RmLmgKIAogIyBIZWFkZXIgZmls ZXMgdGhhdCBhbHJlYWR5IGhhdmUgc3JjZGlyIGluIHRoZW0sIG9yIHdoaWNo IGFyZSBpbiBvYmpkaXIuCiAKLS0tIGEvYnJlYWtwb2ludC5jCisrKyBiL2Jy ZWFrcG9pbnQuYwpAQCAtNjEwLDcgKzYxMCw3IEBAIHN0YXRpYyBpbnQgcHJl dl9icmVha3BvaW50X2NvdW50OwogCiAvKiBOdW1iZXIgb2YgbGFzdCB0cmFj ZXBvaW50IG1hZGUuICAqLwogCi1zdGF0aWMgaW50IHRyYWNlcG9pbnRfY291 bnQ7CitpbnQgdHJhY2Vwb2ludF9jb3VudDsKIAogc3RhdGljIHN0cnVjdCBj bWRfbGlzdF9lbGVtZW50ICpicmVha3BvaW50X3NldF9jbWRsaXN0Owogc3Rh dGljIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpicmVha3BvaW50X3Nob3df Y21kbGlzdDsKLS0tIC9kZXYvbnVsbAorKysgYi9jdGYuYwpAQCAtMCwwICsx LDEzNDQgQEAKKy8qIENURiBmb3JtYXQgc3VwcG9ydC4KKworICAgQ29weXJp Z2h0IChDKSAyMDEyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgImRlZnMuaCIKKyNp bmNsdWRlICJjdGYuaCIKKyNpbmNsdWRlICJ0cmFjZXBvaW50LmgiCisjaW5j bHVkZSAicmVnY2FjaGUuaCIKKyNpbmNsdWRlICJnZGJjbWQuaCIKKyNpbmNs dWRlICJleGNlcHRpb25zLmgiCisjaW5jbHVkZSAic3RhY2suaCIKKworI2lu Y2x1ZGUgPGN0eXBlLmg+CisKKy8qIEZvbGxvd2luZyBwYXJ0IGlzIGZvciB0 c2F2ZS4gICovCisKKyNkZWZpbmUgQ1RGX01BR0lDCQkweEMxRkMxRkMxCisj ZGVmaW5lIENURl9TQVZFX01BSk9SCQkxCisjZGVmaW5lIENURl9TQVZFX01J Tk9SCQk4CisKKyNkZWZpbmUgQ1RGX01FVEFEQVRBX05BTUUJIm1ldGFkYXRh IgorI2RlZmluZSBDVEZfREFUQVNUUkVBTV9OQU1FCSJkYXRhc3RyZWFtIgor CisjZGVmaW5lIENURl9QQUNLRVRfU0laRQkJNDA5NgorCisjZGVmaW5lIEFM SUdOX1NJWkUoc2l6ZSwgYWxpZ24pIFwKKwkoKCgoYWxpZ24pICsgKHNpemUp IC0gMSkgJiAofigoYWxpZ24pIC0gMSkpKSAtIChzaXplKSkKKworLyogVGhl IGVudHJ5IG9mIGNvbGxlY3QgbGlzdCBvZiBhIFRQLiAgKi8KKworc3RydWN0 IGN0Zl9zYXZlX2NvbGxlY3RfcworeworICBzdHJ1Y3QgY3RmX3NhdmVfY29s bGVjdF9zICpuZXh0OworCisgIC8qIFBvaW50IHRoZSBvcmlnaW5hbCBjb2xs ZWN0IHN0cmluZy4gICovCisKKyAgY2hhciAqc3RyOworCisgIC8qIFBvaW50 IHN0cmluZyB0aGUgY29udmVydCBmcm9tIFNUUiB0byB0aGUgZm9ybWF0Cisg ICAgIHRoYXQgY2FuIHNhdmUgdG8gQ1RGLiAqLworCisgIGNoYXIgKmN0Zl9z dHI7CisKKyAgLyogQWxpZ24gc2l6ZSBvZiB0aGlzIGNvbGxlY3QuICAqLwor CisgIGludCBhbGlnbl9zaXplOworCisgIC8qIFRoZSBleHByZXNzaW9uIHRo YXQgZ2V0IGZyb20gU1RSLiAqLworCisgIHN0cnVjdCBleHByZXNzaW9uICpl eHByOworCisgIC8qIFRoZSB0eXBlIG9mIHRoaXMgY29sbGVjdC4gICovCisK KyAgc3RydWN0IHR5cGUgKnR5cGU7CisKKyAgLyogSWYgdHJ1ZSwgdGhpcyBj b2xsZWN0IGlzICRfcmV0LiAgKi8KKworICBpbnQgaXNfcmV0OworfTsKKwor LyogVGhlIGVudHJ5IG9mIHRyYWNlcG9pbnQgbGlzdCB0aGF0IHdpbGwgc2F2 ZSB0byBDVEYuICAqLworCitzdHJ1Y3QgY3RmX3NhdmVfdHBfcworeworICBz dHJ1Y3QgY3RmX3NhdmVfdHBfcyAqbmV4dDsKKworICBzdHJ1Y3QgdHJhY2Vw b2ludCAqdHA7CisKKyAgLyogSWYgdHJ1ZSwgdGhpcyBpcyB0aGUgc3RlcCBj b2xsZWN0IG9mIHRoaXMgVFAuCisgICAgIERpdmlkZSBUUCB0byBub24tc3Rl cCBjb2xsZWN0IGFuZCBzdGVwIGNvbGxlY3QKKyAgICAgYmVjYXVzZSB0aGV5 IGNvbGxlY3QgZGlmZmVyZW50IHZhbHVlLiAgKi8KKworICBpbnQgc3RlcHBp bmdfZnJhbWU7CisKKyAgLyogVGhpcyBpcyB0aGUgaWQgdGhhdCB3aWxsIHNh dmUgdG8gQ1RGIGZpbGUuCisgICAgIERvZXNuJ3QgdXNlIFRQUy0+VFAtPkJB U0UuTlVNQkVSIGRpcmVjdGx5IGJlY2F1c2Ugc3RlcHBpbmdfZnJhbWUKKyAg ICAgZXZlbnQgbmVlZCB1c2UgZGlmZmVyZW50IHdpdGggb3JpZ2luYWwgZXZl bnQuICAqLworICBpbnQgaWQ7CisKKyAgLyogVGhlIGNvbGxlY3QgbGlzdCBm 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 aW50IGNoZWNrX3NpemU7CisKKyAgLyogVGhpcyBpcyB0aGUgdGVtcCB2YWx1 ZSBvZiBDT05URU5UX1NJWkUgd2hlbiBHREIgd3JpdGUgYSBldmVudCB0bwor ICAgICBDVEYgZmlsZS4KKyAgICAgSWYgdGhpcyBldmVudCBzYXZlIHN1Y2Nl c3MsIENVUlJFTlRfQ09OVEVOVF9TSVpFIHdpbGwgc2V0IHRvCisgICAgIENP TlRFTlRfU0laRS4gICovCisgIHNpemVfdCBjdXJyZW50X2NvbnRlbnRfc2l6 ZTsKKworICAvKiBTYXZlIHRoZSBudW1iZXIgb2YgdHJhY2UgZnJhbWUgYmVm b3JlIGNhbGwgY3RmX3NhdmUuCisgICAgIFNldCBpdCBiYWNrIHdoZW4gcmV0 dXJuIGN0Zl9zYXZlLiAgKi8KKyAgaW50IG9sZF90cmFjZWZyYW1lX251bTsK KworICAvKiBUcmFjZXBvaW50IGxpc3QuICAqLworICBzdHJ1Y3QgY3RmX3Nh dmVfdHBfcyAqdHA7CisKKyAgLyogVHlwZSBsaXN0LiAgKi8KKyAgc3RydWN0 IGN0Zl9zYXZlX3R5cGVfcyAqdHlwZTsKKworICBjb25zdCBjaGFyICp0YWI7 Cit9OworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfZndyaXRlIChGSUxFICpm ZCwgY29uc3QgZ2RiX2J5dGUgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisgIGlm IChmd3JpdGUgKGJ1Ziwgc2l6ZSwgMSwgZmQpICE9IDEpCisgICAgZXJyb3Ig KF8oIlVuYWJsZSB0byB3cml0ZSBmaWxlIGZvciBzYXZpbmcgdHJhY2UgZGF0 YSAoJXMpIiksCisJICAgc2FmZV9zdHJlcnJvciAoZXJybm8pKTsKK30KKwor c3RhdGljIHZvaWQKK2N0Zl9zYXZlX2Z3cml0ZV9mb3JtYXRfMSAoRklMRSAq ZmQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQoreworICBj aGFyICpsaW5lYnVmZmVyOworICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NsZWFu dXBzOworCisgIGxpbmVidWZmZXIgPSB4c3RydnByaW50ZiAoZm9ybWF0LCBh cmdzKTsKKyAgb2xkX2NsZWFudXBzID0gbWFrZV9jbGVhbnVwICh4ZnJlZSwg bGluZWJ1ZmZlcik7CisgIGN0Zl9zYXZlX2Z3cml0ZSAoZmQsIGxpbmVidWZm ZXIsIHN0cmxlbiAobGluZWJ1ZmZlcikpOworICBkb19jbGVhbnVwcyAob2xk X2NsZWFudXBzKTsKK30KKworLyogV3JpdGUgZGF0YSBpbiBGT1JNQVQgdG8g RkQuICAqLworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfZndyaXRlX2Zvcm1h dCAoRklMRSAqZmQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2 YV9saXN0IGFyZ3M7CisKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7Cisg IGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXRfMSAoZmQsIGZvcm1hdCwgYXJncyk7 CisgIHZhX2VuZCAoYXJncyk7Cit9CisKKy8qIFdyaXRlIEJVRiB0aGF0IHNp emUgaXMgU0laRSB0byBkYXRhc3RyZWFtIGZpbGUuICAqLworCitzdGF0aWMg aW50CitjdGZfc2F2ZV93cml0ZSAoc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3As IGNvbnN0IGdkYl9ieXRlICpidWYsIHNpemVfdCBzaXplKQoreworICBpZiAo dGNzcC0+Y2hlY2tfc2l6ZSkKKyAgICB7CisgICAgICBpZiAodGNzcC0+Y3Vy cmVudF9jb250ZW50X3NpemUgKyBzaXplID4gQ1RGX1BBQ0tFVF9TSVpFKQor ICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGN0Zl9zYXZlX2Z3cml0 ZSAodGNzcC0+ZGF0YXN0cmVhbV9mZCwgYnVmLCBzaXplKTsKKworICB0Y3Nw LT5jdXJyZW50X2NvbnRlbnRfc2l6ZSArPSBzaXplOworCisgIHJldHVybiAw OworfQorCisvKiBTZXQgZGF0YXN0cmVhbSBmaWxlIHBvc2l0aW9uIGluZGlj YXRvciBhY2NvcmRpbmcgdG8gT0ZGU0VUCisgICBhbmQgV0hFTkNFLiAgKi8K Kworc3RhdGljIGludAorY3RmX3NhdmVfZnNlZWsgKHN0cnVjdCBjdGZfc2F2 ZV9zICp0Y3NwLCBsb25nIG9mZnNldCwgaW50IHdoZW5jZSkKK3sKKyAgaWYg KHdoZW5jZSA9PSBTRUVLX0NVUiAmJiB0Y3NwLT5jaGVja19zaXplKQorICAg IHsKKyAgICAgIGlmICh0Y3NwLT5jdXJyZW50X2NvbnRlbnRfc2l6ZSArIG9m ZnNldCA+IENURl9QQUNLRVRfU0laRSkKKyAgICAgICAgcmV0dXJuIC0xOwor ICAgIH0KKworICBpZiAoZnNlZWsgKHRjc3AtPmRhdGFzdHJlYW1fZmQsIG9m ZnNldCwgd2hlbmNlKSkKKyAgICBlcnJvciAoXygiVW5hYmxlIHRvIHNlZWsg ZmlsZSBmb3Igc2F2aW5nIHRyYWNlIGRhdGEgKCVzKSIpLAorCSAgIHNhZmVf c3RyZXJyb3IgKGVycm5vKSk7CisKKyAgaWYgKHdoZW5jZSA9PSBTRUVLX0NV UikKKyAgICB0Y3NwLT5jdXJyZW50X2NvbnRlbnRfc2l6ZSArPSBvZmZzZXQ7 CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEFsaWduZWQgQUxJR05fU0laRSB3 cml0ZSBCVUYgdGhhdCBzaXplIGlzIFNJWkUKKyAgIHRvIGRhdGFzdHJlYW0g ZmlsZS4gICovCisKK3N0YXRpYyBpbnQKK2N0Zl9zYXZlX2FsaWduX3dyaXRl IChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCwgY29uc3QgZ2RiX2J5dGUgKmJ1 ZiwKKwkJICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbl9zaXplKQor eworICBpZiAoY3RmX3NhdmVfZnNlZWsgKHRjc3AsCisJCSAgICAgIEFMSUdO X1NJWkUgKHRjc3AtPmN1cnJlbnRfY29udGVudF9zaXplLCBhbGlnbl9zaXpl KSwKKwkJICAgICAgU0VFS19DVVIpKQorICAgIHJldHVybiAtMTsKKworICBp ZiAoY3RmX3NhdmVfd3JpdGUgKHRjc3AsIGJ1Ziwgc2l6ZSkpCisgICAgcmV0 dXJuIC0xOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjdGZf c2F2ZV90eXBlX2RlZmluZV93cml0ZSAoc3RydWN0IGN0Zl9zYXZlX3MgKnRj c3AsCisJCQkJCXN0cnVjdCB0eXBlICp0eXBlLCBpbnQgbG9jYWwpOworCisv KiBXcml0ZSB0aGUgdHlwZSBwYXJ0IG9mIGEgdmFyIGRlZmluZSB0byBDVEYg bWV0YWRhdGEgZmlsZS4gICovCisKK3N0YXRpYyB2b2lkCitjdGZfc2F2ZV90 eXBlX25hbWVfd3JpdGUgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwLCBzdHJ1 Y3QgdHlwZSAqdHlwZSkKK3sKKyAgc3dpdGNoIChUWVBFX0NPREUgKHR5cGUp KQorICAgIHsKKyAgICBjYXNlIFRZUEVfQ09ERV9BUlJBWToKKyAgICAgIC8q IFRoaXMgcGFydCBqdXN0IHRvIGdldCB0aGUgcmVhbCBuYW1lIG9mIHRoaXMg YXJyYXkuCisgICAgICAgICBUaGlzIHBhcnQgc2hvdWxkIGtlZXAgdHlwZWRl ZiBpZiBpdCBjYW4uICAqLworICAgICAgZm9yICg7IFRZUEVfQ09ERSAodHlw ZSkgPT0gVFlQRV9DT0RFX0FSUkFZOworCSAgIHR5cGUgPSBUWVBFX1RBUkdF VF9UWVBFICh0eXBlKSA/IFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpCisJCQkJ CSAgOiBjaGVja190eXBlZGVmICh0eXBlKSkKKwk7CisgICAgICBpZiAoVFlQ RV9OQU1FICh0eXBlKSkKKyAgICAgICAgY3RmX3NhdmVfZndyaXRlX2Zvcm1h dCAodGNzcC0+bWV0YWRhdGFfZmQsICIlcyIsIFRZUEVfTkFNRSAodHlwZSkp OworICAgICAgZWxzZQorCWN0Zl9zYXZlX3R5cGVfZGVmaW5lX3dyaXRlICh0 Y3NwLCB0eXBlLCAxKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBUWVBF X0NPREVfUFRSOgorICAgICAgaWYgKFRZUEVfTEVOR1RIICh0eXBlKSA9PSA4 KQorCWN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2Zk LCAidWludDY0X3QiKTsKKyAgICAgIGVsc2UKKwljdGZfc2F2ZV9md3JpdGVf Zm9ybWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgInVpbnQzMl90Iik7CisgICAg ICBicmVhazsKKworICAgIGNhc2UgVFlQRV9DT0RFX1NUUlVDVDoKKyAgICBj YXNlIFRZUEVfQ09ERV9FTlVNOgorICAgICAgaWYgKFRZUEVfVEFHX05BTUUg KHR5cGUpKQorICAgICAgICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3Nw LT5tZXRhZGF0YV9mZCwgIiVzICVzIiwKKwkJCQlUWVBFX0NPREUgKHR5cGUp ID09IFRZUEVfQ09ERV9TVFJVQ1QgPworCQkJCSJzdHJ1Y3QiIDogImVudW0i LAorCQkJCVRZUEVfVEFHX05BTUUgKHR5cGUpKTsKKyAgICAgIGVsc2UKKwlj dGZfc2F2ZV90eXBlX2RlZmluZV93cml0ZSAodGNzcCwgdHlwZSwgMSk7Cisg ICAgICBicmVhazsKKworICAgIGNhc2UgVFlQRV9DT0RFX1VOSU9OOgorICAg ICAgeworCWludCBpLCBiaWdnZXN0X2lkLCBiaWdnZXN0X3NpemUgPSAwOwor CisJZm9yIChpID0gMDsgaSA8IFRZUEVfTkZJRUxEUyAodHlwZSk7ICsraSkK KwkgIHsKKwkgICAgaWYgKGJpZ2dlc3Rfc2l6ZSA8IFRZUEVfTEVOR1RIIChU WVBFX0ZJRUxEX1RZUEUgKHR5cGUsIGkpKSkKKwkgICAgICB7CisJCWJpZ2dl c3Rfc2l6ZSA9IFRZUEVfTEVOR1RIIChUWVBFX0ZJRUxEX1RZUEUgKHR5cGUs IGkpKTsKKwkJYmlnZ2VzdF9pZCA9IGk7CisJICAgICAgfQorCSAgfQorCWN0 Zl9zYXZlX3R5cGVfbmFtZV93cml0ZSAodGNzcCwgVFlQRV9GSUVMRF9UWVBF ICh0eXBlLCBiaWdnZXN0X2lkKSk7CisJYnJlYWs7CisgICAgICB9CisKKyAg ICBkZWZhdWx0OgorICAgICAgY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNz cC0+bWV0YWRhdGFfZmQsICIlcyIsIFRZUEVfTkFNRSAodHlwZSkpOworICAg ICAgYnJlYWs7CisgICAgfQorfQorCisvKiBXcml0ZSB0aGUgc2l6ZSBwYXJ0 IG9mIGEgdmFyIGRlZmluZSB0byBDVEYgbWV0YWRhdGEgZmlsZS4gICovCisK K3N0YXRpYyB2b2lkCitjdGZfc2F2ZV90eXBlX3NpemVfd3JpdGUgKHN0cnVj dCBjdGZfc2F2ZV9zICp0Y3NwLCBzdHJ1Y3QgdHlwZSAqdHlwZSkKK3sKKyAg aWYgKFRZUEVfQ09ERSAodHlwZSkgPT0gVFlQRV9DT0RFX0FSUkFZKQorICAg IHsKKyAgICAgIC8qIFRoaXMgcGFydCBqdXN0IHRvIGdldCB0aGUgcmVhbCBu YW1lIG9mIHRoaXMgYXJyYXkuCisgICAgICAgICBUaGlzIHBhcnQgc2hvdWxk IGtlZXAgdHlwZWRlZiBpZiBpdCBjYW4uICAqLworICAgICAgZm9yICg7IFRZ UEVfQ09ERSAodHlwZSkgPT0gVFlQRV9DT0RFX0FSUkFZOworCSAgIHR5cGUg PSBUWVBFX1RBUkdFVF9UWVBFICh0eXBlKSA/IFRZUEVfVEFSR0VUX1RZUEUg KHR5cGUpCisJCQkJCSAgOiBjaGVja190eXBlZGVmICh0eXBlKSkKKwljdGZf c2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgIlslZF0i LAorCQkJCVRZUEVfTEVOR1RIICh0eXBlKSAvCisJCQkJVFlQRV9MRU5HVEgg KFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpKSk7CisgICAgfQorfQorCisvKiBX cml0ZSBhIHZhciBkZWZpbmUgdG8gQ1RGIG1ldGFkYXRhIGZpbGUuICAqLwor CitzdGF0aWMgdm9pZAorY3RmX3NhdmVfdmFyX2RlZmluZV93cml0ZSAoc3Ry dWN0IGN0Zl9zYXZlX3MgKnRjc3AsIHN0cnVjdCB0eXBlICp0eXBlLAorCQkJ ICAgY29uc3QgY2hhciAqbmFtZSwgaW50IGJpdHNpemUpCit7CisgIGN0Zl9z YXZlX3R5cGVfbmFtZV93cml0ZSAodGNzcCwgdHlwZSk7CisgIGN0Zl9zYXZl X2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiICVzIiwgbmFt ZSk7CisgIGlmIChiaXRzaXplKQorICAgIGN0Zl9zYXZlX2Z3cml0ZV9mb3Jt YXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiOiVkIiwgYml0c2l6ZSk7CisgIGN0 Zl9zYXZlX3R5cGVfc2l6ZV93cml0ZSAodGNzcCwgdHlwZSk7CisgIGN0Zl9z YXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiO1xuIik7 Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIFQxIGFuZCBUMiBpcyBzYW1lLiAg Ki8KKworc3RhdGljIGludAorY3RmX3NhdmVfdHlwZV9pc19zYW1lIChzdHJ1 Y3QgdHlwZSAqdDEsIHN0cnVjdCB0eXBlICp0MikKK3sKKyAgY29uc3QgY2hh ciAqbmFtZTEsICpuYW1lMjsKKworICBpZiAodDEgPT0gdDIpCisgICAgcmV0 dXJuIDE7CisKKyAgaWYgKFRZUEVfQ09ERSAodDEpICE9IFRZUEVfQ09ERSAo dDIpKQorICAgIHJldHVybiAwOworCisgIGlmIChUWVBFX0NPREUgKHQxKSA9 PSBUWVBFX0NPREVfU1RSVUNUIHx8IFRZUEVfQ09ERSAodDEpID09IFRZUEVf Q09ERV9FTlVNKQorICAgIHsKKyAgICAgIG5hbWUxID0gVFlQRV9UQUdfTkFN RSAodDEpOworICAgICAgbmFtZTIgPSBUWVBFX1RBR19OQU1FICh0Mik7Cisg ICAgfQorICBlbHNlCisgICAgeworICAgICAgbmFtZTEgPSBUWVBFX05BTUUg KHQxKTsKKyAgICAgIG5hbWUyID0gVFlQRV9OQU1FICh0Mik7CisgICAgfQor CisgIGlmIChuYW1lMSAmJiBuYW1lMiAmJiBzdHJjbXAgKG5hbWUxLCBuYW1l MikgPT0gMCkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKwor LyogQ2hlY2sgaWYgVFlQRSBpbiBUQ1NQLT5UWVBFLgorICAgSWYgbm90LCB3 cml0ZSBUWVBFIHRvIFRDU1AtPm1ldGFkYXRhX2ZkLgorICAgSWYgTE9DQUwg aXMgdHJ1ZSwgdGhpcyB0eXBlIGRlZmluZSBqdXN0IGRlZmluZSB3aXRoIGEg dmFyLiAgKi8KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX3R5cGVfZGVmaW5l X3dyaXRlIChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCwgc3RydWN0IHR5cGUg KnR5cGUsCisJCQkgICAgaW50IGxvY2FsKQoreworICBzdHJ1Y3QgY3RmX3Nh dmVfdHlwZV9zICp0OworCisgIC8qIElnbm9yZSB0eXBlIHVpbnQzMl90IGFu ZCB1aW50NjRfdCBiZWNhdXNlIHRoZXkgaGF2ZSB3cml0dGVuCisgICAgIGlu IGZ1bmN0aW9uIGN0Zl9zYXZlX21ldGFkYXRhX2hlYWRlci4gICovCisgIGlm IChUWVBFX05BTUUgKHR5cGUpICYmIChzdHJjbXAgKFRZUEVfTkFNRSAodHlw ZSksICJ1aW50MzJfdCIpID09IDAKKwkJCSAgIHx8IHN0cmNtcCAoVFlQRV9O QU1FICh0eXBlKSwgInVpbnQ2NF90IikgPT0gMCkpCisgICAgcmV0dXJuOwor CisgIGlmICghbG9jYWwpCisgICAgeworICAgICAgZm9yICh0ID0gdGNzcC0+ dHlwZTsgdDsgdCA9IHQtPm5leHQpCisJeworCSAgaWYgKGN0Zl9zYXZlX3R5 cGVfaXNfc2FtZSAodHlwZSwgdC0+dHlwZSkpCisJICAgIHJldHVybjsKKwl9 CisKKyAgICAgIHQgPSAoc3RydWN0IGN0Zl9zYXZlX3R5cGVfcyAqKSB4emFs bG9jIChzaXplb2YgKCp0KSk7CisgICAgICB0LT50eXBlID0gdHlwZTsKKyAg ICAgIHQtPm5leHQgPSB0Y3NwLT50eXBlOworICAgICAgdGNzcC0+dHlwZSA9 IHQ7CisgICAgfQorCisgIHN3aXRjaCAoVFlQRV9DT0RFICh0eXBlKSkKKyAg ICB7CisgICAgICBjYXNlIFRZUEVfQ09ERV9UWVBFREVGOgorCWN0Zl9zYXZl X2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAidHlwZWRlZiAi KTsKKwljdGZfc2F2ZV92YXJfZGVmaW5lX3dyaXRlICh0Y3NwLCBUWVBFX1RB UkdFVF9UWVBFICh0eXBlKSwKKwkJCQkgICBUWVBFX05BTUUgKHR5cGUpLCAw KTsKKwlicmVhazsKKworICAgICAgY2FzZSBUWVBFX0NPREVfSU5UOgorCWN0 Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiXAor dHlwZWFsaWFzIGludGVnZXIgeyBzaXplID0gJWQ7IGFsaWduID0gJWQ7IHNp Z25lZCA9ICVzOyB9IDo9ICVzO1xuIiwKKwkJCQlUWVBFX0xFTkdUSCAodHlw ZSkgKiBUQVJHRVRfQ0hBUl9CSVQsCisJCQkJVFlQRV9MRU5HVEggKHR5cGUp ICogVEFSR0VUX0NIQVJfQklULAorCQkJCSFUWVBFX1VOU0lHTkVEICh0eXBl KSA/ICJ0cnVlIiA6ICJmYWxzZSIsCisJCQkJVFlQRV9OQU1FICh0eXBlKSk7 CisJYnJlYWs7CisKKyAgICAgIGNhc2UgVFlQRV9DT0RFX1NUUlVDVDoKKyAg ICAgIGNhc2UgVFlQRV9DT0RFX0VOVU06CisgICAgICAgIHsKKwkgIGludCBp OworCSAgY2hhciB0YWJbMjU2XTsKKwkgIGNvbnN0IGNoYXIgKm9sZF90YWI7 CisKKwkgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRh X2ZkLCAiJXMgJXMge1xuIiwKKwkJCQkgIFRZUEVfQ09ERSAodHlwZSkgPT0g VFlQRV9DT0RFX1NUUlVDVCA/CisJCQkJICAic3RydWN0IiA6ICJlbnVtIiwK KwkJCQkgIFRZUEVfVEFHX05BTUUgKHR5cGUpID8gVFlQRV9UQUdfTkFNRSAo dHlwZSkKKwkJCQkJCSAgICAgICA6ICIiKTsKKworCSAgb2xkX3RhYiA9IHRj c3AtPnRhYjsKKwkgIHNucHJpbnRmICh0YWIsIDI1NiwgIiVzXHQiLCBvbGRf dGFiKTsKKwkgIHRjc3AtPnRhYiA9IHRhYjsKKwkgIGZvciAoaSA9IDA7IGkg PCBUWVBFX05GSUVMRFMgKHR5cGUpOyArK2kpCisJICAgIHsKKwkgICAgICBp ZiAoVFlQRV9DT0RFICh0eXBlKSA9PSBUWVBFX0NPREVfU1RSVUNUKQorCSAg ICAgICAgeworCQkgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1l dGFkYXRhX2ZkLCB0Y3NwLT50YWIpOworCQkgIGN0Zl9zYXZlX3Zhcl9kZWZp bmVfd3JpdGUgKHRjc3AsIFRZUEVfRklFTERfVFlQRSAodHlwZSwgaSksCisJ CQkJCSAgICAgVFlQRV9GSUVMRF9OQU1FICh0eXBlLCBpKSwKKwkJCQkJICAg ICBUWVBFX0ZJRUxEX0JJVFNJWkUgKHR5cGUsIGkpKTsKKwkJfQorCSAgICAg IGVsc2UKKwkJY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRh dGFfZmQsICIlcyVzID0gJXMsXG4iLAorCQkJCQl0Y3NwLT50YWIsIFRZUEVf RklFTERfTkFNRSAodHlwZSwgaSksCisJCQkJCXBsb25nZXN0IChUWVBFX0ZJ RUxEX0VOVU1WQUwgKHR5cGUsIGkpKSk7CisJICAgIH0KKwkgIHRjc3AtPnRh YiA9IG9sZF90YWI7CisJICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3Nw LT5tZXRhZGF0YV9mZCwgIiVzfSIsIHRjc3AtPnRhYik7CisJICBpZiAoVFlQ RV9UQUdfTkFNRSAodHlwZSkpCisJICAgIGN0Zl9zYXZlX2Z3cml0ZV9mb3Jt YXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiO1xuIik7CisJICBicmVhazsKKwl9 CisgICAgfQorfQorCisvKiBDaGVjayBpZiB0aGlzIHR5cGUgaXMgc3VwcG9y dGVkIGJ5IEdEQi4KKyAgIFJldHVybiB0aGUgYWxpZ24gc2l6ZS4gICovCisK K3N0YXRpYyBpbnQKK2N0Zl9zYXZlX3R5cGVfY2hlY2tfYW5kX3dyaXRlIChz dHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCwgc3RydWN0IHR5cGUgKnR5cGUpCit7 CisgIGludCBhbGlnbl9zaXplID0gMDsKKworICBzd2l0Y2ggKFRZUEVfQ09E RSAodHlwZSkpCisgICAgeworICAgICAgY2FzZSBUWVBFX0NPREVfVFlQRURF RjoKKwlhbGlnbl9zaXplID0gY3RmX3NhdmVfdHlwZV9jaGVja19hbmRfd3Jp dGUgKHRjc3AsCisJCQkJCQkgICAgVFlQRV9UQVJHRVRfVFlQRSAodHlwZSkp OworCWlmIChhbGlnbl9zaXplIDwgMCkKKwkgIHJldHVybiBhbGlnbl9zaXpl OworCWN0Zl9zYXZlX3R5cGVfZGVmaW5lX3dyaXRlICh0Y3NwLCB0eXBlLCAw KTsKKwlicmVhazsKKworICAgICAgY2FzZSBUWVBFX0NPREVfQVJSQVk6CisJ YWxpZ25fc2l6ZSA9IGN0Zl9zYXZlX3R5cGVfY2hlY2tfYW5kX3dyaXRlICh0 Y3NwLAorCQkJCQkJICAgIFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpKTsKKwlp ZiAoYWxpZ25fc2l6ZSA8IDApCisJICByZXR1cm4gYWxpZ25fc2l6ZTsKKwli cmVhazsKKworICAgICAgY2FzZSBUWVBFX0NPREVfSU5UOgorCWN0Zl9zYXZl X3R5cGVfZGVmaW5lX3dyaXRlICh0Y3NwLCB0eXBlLCAwKTsKKwlhbGlnbl9z aXplID0gVFlQRV9MRU5HVEggKHR5cGUpOworCWJyZWFrOworCisgICAgICBj YXNlIFRZUEVfQ09ERV9QVFI6CisJYWxpZ25fc2l6ZSA9IFRZUEVfTEVOR1RI ICh0eXBlKTsKKwlicmVhazsKKworICAgICAgY2FzZSBUWVBFX0NPREVfU1RS VUNUOgorICAgICAgICB7CisJICBpbnQgaSwgc19hbGlnbl9zaXplOworCisJ ICBmb3IgKGkgPSAwOyBpIDwgVFlQRV9ORklFTERTICh0eXBlKTsgKytpKQor CSAgICB7CisJICAgICAgc19hbGlnbl9zaXplCisJCSAgPSBjdGZfc2F2ZV90 eXBlX2NoZWNrX2FuZF93cml0ZSAodGNzcCwKKwkJCQkJCSAgIFRZUEVfRklF TERfVFlQRSAodHlwZSwgaSkpOworCSAgICAgIGlmIChzX2FsaWduX3NpemUg PCAwKQorCQlyZXR1cm4gc19hbGlnbl9zaXplOworCisJICAgICAgaWYgKGFs aWduX3NpemUgPCBzX2FsaWduX3NpemUpCisJCWFsaWduX3NpemUgPSBzX2Fs aWduX3NpemU7CisJICAgIH0KKwkgIGlmIChUWVBFX1RBR19OQU1FICh0eXBl KSkKKwkgICAgY3RmX3NhdmVfdHlwZV9kZWZpbmVfd3JpdGUgKHRjc3AsIHR5 cGUsIDApOworCSAgYnJlYWs7CisJfQorCisgICAgICBjYXNlIFRZUEVfQ09E RV9FTlVNOgorCWFsaWduX3NpemUgPSBUWVBFX0xFTkdUSCAodHlwZSk7CisJ aWYgKFRZUEVfVEFHX05BTUUgKHR5cGUpKQorCSAgY3RmX3NhdmVfdHlwZV9k ZWZpbmVfd3JpdGUgKHRjc3AsIHR5cGUsIDApOworCWJyZWFrOworCisgICAg ICBjYXNlIFRZUEVfQ09ERV9VTklPTjoKKyAgICAgICAgeworCSAgaW50IGks IHNfYWxpZ25fc2l6ZTsKKworCSAgZm9yIChpID0gMDsgaSA8IFRZUEVfTkZJ RUxEUyAodHlwZSk7ICsraSkKKwkgICAgeworCSAgICAgIHNfYWxpZ25fc2l6 ZQorCQkgID0gY3RmX3NhdmVfdHlwZV9jaGVja19hbmRfd3JpdGUgKHRjc3As CisJCQkJCQkgICBUWVBFX0ZJRUxEX1RZUEUgKHR5cGUsIGkpKTsKKwkgICAg ICBpZiAoc19hbGlnbl9zaXplIDwgMCkKKwkJcmV0dXJuIHNfYWxpZ25fc2l6 ZTsKKworCSAgICAgIGlmIChhbGlnbl9zaXplIDwgc19hbGlnbl9zaXplKQor CQlhbGlnbl9zaXplID0gc19hbGlnbl9zaXplOworCSAgICB9CisJICBicmVh azsKKwl9CisKKyAgICAgIGRlZmF1bHQ6CisJYWxpZ25fc2l6ZSA9IC0xOwor CWJyZWFrOworICAgIH0KKworICByZXR1cm4gYWxpZ25fc2l6ZTsKK30KKwor c3RhdGljIHZvaWQKK2N0Zl9zYXZlX2NvbGxlY3RfZ2V0XzEgKHN0cnVjdCBj dGZfc2F2ZV9zICp0Y3NwLCBzdHJ1Y3QgY3RmX3NhdmVfdHBfcyAqdHBzLAor CQkJY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgc3RydWN0IGV4cHJlc3Npb24g KmV4cHI7CisgIHN0cnVjdCBjdGZfc2F2ZV9jb2xsZWN0X3MgKmNvbGxlY3Q7 CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGU7CisgIHN0cnVj dCB0eXBlICp0eXBlID0gTlVMTDsKKyAgaW50IGlzX3JldCA9IDA7CisgIGlu dCBhbGlnbl9zaXplOworICBjaGFyICpzdHI7CisKKyAgLyogQWxsb2NhIFNU UiBiZWNhdXNlIFBBUlNFX0VYUFJFU1NJT04gbmVlZCBhcmd1bWVudAorICAg ICBpcyBub3QgYSBjb25zdCBzdHJpbmcuICAqLworICBzdHIgPSBhbGxvY2Eg KHN0cmxlbiAobmFtZSkgKyAxKTsKKyAgc3RyY3B5IChzdHIsIG5hbWUpOwor CisgIC8qIENoZWNrIGlmIGFjdGlvbl9leHAgaXMgYWxyZWFkeSBleGlzdCBp biB0cHMtPmNvbGxlY3QuICAqLworICBmb3IgKGNvbGxlY3QgPSB0cHMtPmNv bGxlY3Q7IGNvbGxlY3Q7IGNvbGxlY3QgPSBjb2xsZWN0LT5uZXh0KQorICAg IHsKKyAgICAgIGlmIChzdHJjbXAgKGNvbGxlY3QtPnN0ciwgc3RyKSA9PSAw KQorCXJldHVybjsKKyAgICB9CisKKyAgaWYgKDAgPT0gc3RybmNhc2VjbXAg KHN0ciwgIiRfcmV0IiwgNSkpCisgICAgaXNfcmV0ID0gMTsKKworICBUUllf Q0FUQ0ggKGUsIFJFVFVSTl9NQVNLX0VSUk9SKQorICAgIHsKKyAgICAgIGlm IChpc19yZXQpCisgICAgICAgIHsKKwkgIENPUkVfQUREUiBwYzsKKwkgIHN0 cnVjdCBmcmFtZV9pbmZvICpmcmFtZTsKKworCSAgZnJhbWUgPSBnZXRfcHJl dl9mcmFtZSAoZ2V0X2N1cnJlbnRfZnJhbWUgKCkpOworCSAgaWYgKCFmcmFt ZSkKKwkgICAgZXJyb3IgKF8oImNvdWxkIG5vdCBmaW5kIHByZXZpb3VzIGZy YW1lIikpOworCisJICBpZiAoIWdldF9mcmFtZV9wY19pZl9hdmFpbGFibGUg KGZyYW1lLCAmcGMpKQorCSAgICBlcnJvciAoXygiUEMgdW5hdmFpbGFibGUi KSk7CisJfQorICAgICAgZWxzZQorICAgICAgICB7CisJICBzdHJ1Y3QgY2xl YW51cCAqb2xkX2NoYWluOworCSAgc3RydWN0IHZhbHVlICp2YWw7CisKKwkg IGV4cHIgPSBwYXJzZV9leHByZXNzaW9uIChzdHIpOworCSAgb2xkX2NoYWlu ID0gbWFrZV9jbGVhbnVwIChmcmVlX2N1cnJlbnRfY29udGVudHMsICZleHBy KTsKKwkgIHR5cGUgPSB2YWx1ZV90eXBlIChldmFsdWF0ZV9leHByZXNzaW9u IChleHByKSk7CisJICBkb19jbGVhbnVwcyAob2xkX2NoYWluKTsKKwl9Cisg ICAgfQorICBpZiAoZS5yZWFzb24gPCAwKQorICAgIHsKKyAgICAgIHdhcm5p bmcgKF8oImVycm9yIHNhdmluZyB0cmFjZXBvaW50ICVkIFwiJXNcIiB0byBD VEYgZmlsZTogJXMiKSwKKwkgICAgICAgdHBzLT50cC0+YmFzZS5udW1iZXIs IHN0ciwgZS5tZXNzYWdlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAg aWYgKGlzX3JldCkKKyAgICBhbGlnbl9zaXplID0gODsKKyAgZWxzZQorICAg IHsKKyAgICAgIGFsaWduX3NpemUgPSBjdGZfc2F2ZV90eXBlX2NoZWNrX2Fu ZF93cml0ZSAodGNzcCwgdHlwZSk7CisgICAgICBpZiAoYWxpZ25fc2l6ZSA8 IDApCisJeworCSAgd2FybmluZyAoXygiXAorZXJyb3Igc2F2aW5nIHRyYWNl cG9pbnQgJWQgXCIlc1wiIHRvIENURiBmaWxlOiB0eXBlIGlzIG5vdCBzdXBw b3J0ZWQuIiksCisJCSAgIHRwcy0+dHAtPmJhc2UubnVtYmVyLCBzdHIpOwor CSAgcmV0dXJuOworCX0KKyAgICB9CisKKyAgY29sbGVjdCA9IChzdHJ1Y3Qg Y3RmX3NhdmVfY29sbGVjdF9zICopIHh6YWxsb2MgKHNpemVvZiAoKmNvbGxl Y3QpKTsKKworICAvKiBBZGQgdHAgdG8gdGhlIGxpc3QuICAqLworICBjb2xs ZWN0LT5uZXh0ID0gdHBzLT5jb2xsZWN0OworICB0cHMtPmNvbGxlY3QgPSBj b2xsZWN0OworCisgIGNvbGxlY3QtPnN0ciA9IHhzdHJkdXAgKHN0cik7Cisg IGNvbGxlY3QtPmlzX3JldCA9IGlzX3JldDsKKworICBpZiAoIWlzX3JldCkK KyAgICB7CisgICAgICBjb2xsZWN0LT50eXBlID0gdHlwZTsKKworICAgICAg Y29sbGVjdC0+YWxpZ25fc2l6ZSA9IGFsaWduX3NpemU7CisgICAgICBpZiAo Y29sbGVjdC0+YWxpZ25fc2l6ZSA+IHRwcy0+YWxpZ25fc2l6ZSkKKyAgICAg ICAgdHBzLT5hbGlnbl9zaXplID0gY29sbGVjdC0+YWxpZ25fc2l6ZTsKKwor ICAgICAgY29sbGVjdC0+ZXhwciA9IHBhcnNlX2V4cHJlc3Npb24gKHN0cik7 CisgICAgfQorfQorCitzdHJ1Y3QgbG9jX2FyZ19jb2xsZWN0X2RhdGEKK3sK KyAgc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3A7CisgIHN0cnVjdCBjdGZfc2F2 ZV90cF9zICp0cHM7Cit9OworCitzdGF0aWMgdm9pZAordHN2X3NhdmVfZG9f bG9jX2FyZ19jb2xsZWN0IChjb25zdCBjaGFyICpwcmludF9uYW1lLAorCQkJ ICAgICBzdHJ1Y3Qgc3ltYm9sICpzeW0sCisJCQkgICAgIHZvaWQgKmNiX2Rh dGEpCit7CisgIHN0cnVjdCBsb2NfYXJnX2NvbGxlY3RfZGF0YSAqcCA9IGNi X2RhdGE7CisKKyAgY3RmX3NhdmVfY29sbGVjdF9nZXRfMSAocC0+dGNzcCwg cC0+dHBzLCBwcmludF9uYW1lKTsKK30KKworLyogd29ya2VyIGZ1bmN0aW9u IChjbGVhbnVwKSAqLworc3RhdGljIHZvaWQKK3JlcGxhY2VfY29tbWEgKHZv aWQgKmRhdGEpCit7CisgIGNoYXIgKmNvbW1hID0gZGF0YTsKKyAgKmNvbW1h ID0gJywnOworfQorCisvKiBHZXQgdmFyIHRoYXQgd2FudCB0byBjb2xsZWN0 IGZyb20gU1RSIGFuZCBwdXQgdGhlbSB0byBUUFMtPmNvbGxlY3QuCisgICBU aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGwgd2hlbiBHREIgYWRkIGEg bmV3IFRQLiAgKi8KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX2NvbGxlY3Rf Z2V0IChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCwgc3RydWN0IGN0Zl9zYXZl X3RwX3MgKnRwcywKKwkJICAgICAgY2hhciAqc3RyKQoreworICBjaGFyICph Y3Rpb25fZXhwID0gc3RyLCAqbmV4dF9jb21tYTsKKyAgc3RydWN0IGNsZWFu dXAgKm9sZF9jaGFpbjsKKworICBkbworICAgIHsKKyAgICAgIGlmICgqYWN0 aW9uX2V4cCA9PSAnLCcpCisJYWN0aW9uX2V4cCsrOworICAgICAgd2hpbGUg KGlzc3BhY2UgKChpbnQpICphY3Rpb25fZXhwKSkKKwlhY3Rpb25fZXhwKys7 CisKKyAgICAgIG5leHRfY29tbWEgPSBzdHJjaHIgKGFjdGlvbl9leHAsICcs Jyk7CisgICAgICBpZiAobmV4dF9jb21tYSkKKwl7CisJICBvbGRfY2hhaW4g PSBtYWtlX2NsZWFudXAgKHJlcGxhY2VfY29tbWEsIG5leHRfY29tbWEpOwor CSAgKm5leHRfY29tbWEgPSAnXDAnOworCX0KKworICAgICAgaWYgKDAgPT0g c3RybmNhc2VjbXAgKGFjdGlvbl9leHAsICIkcmVnIiwgNCkpCisgICAgICAg IHsKKwkgIGludCBpOworCSAgc3RydWN0IGdkYmFyY2ggKmFyY2ggPSB0cHMt PnRwLT5iYXNlLmxvYy0+Z2RiYXJjaDsKKworCSAgZm9yIChpID0gMDsgaSA8 IGdkYmFyY2hfbnVtX3JlZ3MgKGFyY2gpOyBpKyspCisJICAgIHsKKwkgICAg ICBjb25zdCBjaGFyICpuYW1lID0gZ2RiYXJjaF9yZWdpc3Rlcl9uYW1lIChh cmNoLCBpKTsKKwkgICAgICBpbnQgbmFtZV9zaXplID0gc3RybGVuIChuYW1l KTsKKwkgICAgICBjaGFyIHJlZ25hbWVbMSArIG5hbWVfc2l6ZSArIDFdOwor CisJICAgICAgaWYgKG5hbWVfc2l6ZSA9PSAwKQorCQljb250aW51ZTsKKwor CSAgICAgIHNwcmludGYgKHJlZ25hbWUsICIkJXMiLCBuYW1lKTsKKworCSAg ICAgIGN0Zl9zYXZlX2NvbGxlY3RfZ2V0XzEgKHRjc3AsIHRwcywgcmVnbmFt ZSk7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmICgwID09IHN0cm5jYXNl Y21wIChhY3Rpb25fZXhwLCAiJGxvYyIsIDQpCisJICAgICAgIHx8IDAgPT0g c3RybmNhc2VjbXAgKGFjdGlvbl9leHAsICIkYXJnIiwgNCkpCisJeworCSAg Q09SRV9BRERSIHBjID0gMDsKKwkgIHN0cnVjdCBsb2NfYXJnX2NvbGxlY3Rf ZGF0YSBjYl9kYXRhOworCSAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRp b24gZTsKKworCSAgY2JfZGF0YS50Y3NwID0gdGNzcDsKKwkgIGNiX2RhdGEu dHBzID0gdHBzOworCisJICBUUllfQ0FUQ0ggKGUsIFJFVFVSTl9NQVNLX0VS Uk9SKQorCSAgICB7CisJICAgICAgcGMgPSByZWdjYWNoZV9yZWFkX3BjIChn ZXRfY3VycmVudF9yZWdjYWNoZSAoKSk7CisJICAgIH0KKwkgIGlmIChlLnJl YXNvbiA8IDApCisJICAgIHsKKwkgICAgICB3YXJuaW5nIChfKCJlcnJvciBz YXZpbmcgdHJhY2Vwb2ludCAlZCBcIiVzXCIgdG8gQ1RGIGZpbGU6ICVzIiks CisJCSAgICAgICB0cHMtPnRwLT5iYXNlLm51bWJlciwgYWN0aW9uX2V4cCwg ZS5tZXNzYWdlKTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCisJICBp ZiAoYWRkX2xvY2FsX3N5bWJvbHNfMSAoKDAgPT0gc3RybmNhc2VjbXAgKGFj dGlvbl9leHAsICIkbG9jIiwgNCkKKwkJCQkJPyAnTCcgOiAnQScpLAorCQkJ CSAgIHBjLCB0c3Zfc2F2ZV9kb19sb2NfYXJnX2NvbGxlY3QsCisJCQkJICAg JmNiX2RhdGEpKQorCSAgICB7CisJICAgICAgd2FybmluZyAoXygiXAorZXJy b3Igc2F2aW5nIHRyYWNlcG9pbnQgJWQgXCIlc1wiIHRvIENURiBmaWxlOiBu byBzeW1ib2wgdGFibGUgaW5mbyBhdmFpbGFibGUuIiksCisJCSAgICAgICB0 cHMtPnRwLT5iYXNlLm51bWJlciwgYWN0aW9uX2V4cCk7CisJICAgICAgY29u dGludWU7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJY3RmX3NhdmVfY29s bGVjdF9nZXRfMSAodGNzcCwgdHBzLCBhY3Rpb25fZXhwKTsKKworICAgICAg aWYgKG5leHRfY29tbWEpCisJZG9fY2xlYW51cHMgKG9sZF9jaGFpbik7Cisg ICAgICBhY3Rpb25fZXhwID0gbmV4dF9jb21tYTsKKyAgICB9CisgIHdoaWxl IChhY3Rpb25fZXhwICYmICphY3Rpb25fZXhwID09ICcsJyk7Cit9CisKKy8q IENhbGwgZnVuY3Rpb24gY3RmX3NhdmVfY29sbGVjdF9nZXQgQWRkIGFjdGlv biBsaXN0IEFDVElPTiBvZiBUUFMKKyAgIHRvIFRQUy0+Y29sbGVjdC4KKyAg IFNURVBQSU5HX0ZSQU1FIGlzIHRydWUgaWYgaXQgaXMgc3RlcCBhY3Rpb24u ICAqLworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfdHBfYWN0aW9ucyAoc3Ry dWN0IGN0Zl9zYXZlX3MgKnRjc3AsIHN0cnVjdCBjdGZfc2F2ZV90cF9zICp0 cHMsCisJCSAgICAgc3RydWN0IGNvbW1hbmRfbGluZSAqYWN0aW9uLCBpbnQg c3RlcHBpbmdfZnJhbWUpCit7CisgIGZvciAoOyBhY3Rpb24gIT0gTlVMTDsg YWN0aW9uID0gYWN0aW9uLT5uZXh0KQorICAgIHsKKyAgICAgIGNoYXIgKmFj dGlvbl9leHA7CisgICAgICBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAqY21k OworCisgICAgICBRVUlUOworICAgICAgYWN0aW9uX2V4cCA9IGFjdGlvbi0+ bGluZTsKKyAgICAgIHdoaWxlIChpc3NwYWNlICgoaW50KSAqYWN0aW9uX2V4 cCkpCisJYWN0aW9uX2V4cCsrOworICAgICAgaWYgKCphY3Rpb25fZXhwID09 ICcjJykKKwljb250aW51ZTsKKworICAgICAgY21kID0gbG9va3VwX2NtZCAo JmFjdGlvbl9leHAsIGNtZGxpc3QsICIiLCAtMSwgMSk7CisgICAgICBpZiAo Y21kID09IDApCisJZXJyb3IgKF8oIkJhZCBhY3Rpb24gbGlzdCBpdGVtOiAl cyIpLCBhY3Rpb25fZXhwKTsKKworICAgICAgaWYgKGNtZF9jZnVuY19lcSAo Y21kLCB3aGlsZV9zdGVwcGluZ19wc2V1ZG9jb21tYW5kKSkKKwl7CisJICBp bnQgaTsKKworCSAgZm9yIChpID0gMDsgaSA8IGFjdGlvbi0+Ym9keV9jb3Vu dDsgKytpKQorCSAgICBjdGZfc2F2ZV90cF9hY3Rpb25zICh0Y3NwLCB0cHMs IGFjdGlvbi0+Ym9keV9saXN0W2ldLCAxKTsKKwl9CisgICAgICBlbHNlIGlm IChjbWRfY2Z1bmNfZXEgKGNtZCwgY29sbGVjdF9wc2V1ZG9jb21tYW5kKSkK Kwl7CisJICBpZiAoc3RlcHBpbmdfZnJhbWUgIT0gdHBzLT5zdGVwcGluZ19m cmFtZSkKKwkgICAgY29udGludWU7CisJICBpZiAoKmFjdGlvbl9leHAgPT0g Jy8nKQorCSAgICBhY3Rpb25fZXhwID0gZGVjb2RlX2FnZW50X29wdGlvbnMg KGFjdGlvbl9leHApOworCSAgY3RmX3NhdmVfY29sbGVjdF9nZXQgKHRjc3As IHRwcywgYWN0aW9uX2V4cCk7CisJfQorICAgIH0KK30KKworCisvKiBUcnkg dG8gZmluZCB0aGUgY3RmX3NhdmVfdHBfcyBzdHJ1Y3QgaW4gdGhlIFRDU1At PnRwLgorICAgSWYgY2Fubm90IGZpbmQgaXQgaW4gdGhlIFRDU1AtPnRwLCBt YWtlIGEgbmV3IG9uZSBmb3IgVFAKKyAgIGFuZCBhZGQgaXQgdG8gVENTUC0+ dHAuICAqLworCitzdGF0aWMgc3RydWN0IGN0Zl9zYXZlX3RwX3MgKgorY3Rm X3NhdmVfdHBfZmluZCAoc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3AsIHN0cnVj dCB0cmFjZXBvaW50ICp0cCkKK3sKKyAgc3RydWN0IGN0Zl9zYXZlX3RwX3Mg KnJldDsKKyAgc3RydWN0IGJwX2xvY2F0aW9uICpsb2M7CisgIHN0cnVjdCBy ZWdjYWNoZSAqcmVnY2FjaGU7CisgIGludCBzdGVwcGluZ19mcmFtZSA9IDA7 CisgIHN0cnVjdCBjb21tYW5kX2xpbmUgKmFjdGlvbjsKKyAgdm9sYXRpbGUg c3RydWN0IGdkYl9leGNlcHRpb24gZTsKKyAgQ09SRV9BRERSIHBjID0gMDsK KyAgZXh0ZXJuIGludCB0cmFjZXBvaW50X2NvdW50OworCisgIFRSWV9DQVRD SCAoZSwgUkVUVVJOX01BU0tfRVJST1IpCisgICAgeworICAgICAgcGMgPSBy ZWdjYWNoZV9yZWFkX3BjIChnZXRfY3VycmVudF9yZWdjYWNoZSAoKSk7Cisg ICAgfQorICBpZiAoZS5yZWFzb24gPj0gMCkKKyAgICB7CisgICAgICBzdGVw cGluZ19mcmFtZSA9IDE7CisgICAgICBmb3IgKGxvYyA9IHRwLT5iYXNlLmxv YzsgbG9jOyBsb2MgPSBsb2MtPm5leHQpCisJeworCSAgaWYgKGxvYy0+YWRk cmVzcyA9PSBwYykKKyAgICAgICAgICAgIHsKKwkgICAgICBzdGVwcGluZ19m cmFtZSA9IDA7CisJICAgICAgYnJlYWs7CisJICAgIH0KKyAgICAgICAgfQor ICAgIH0KKworICBmb3IgKHJldCA9IHRjc3AtPnRwOyByZXQ7IHJldCA9IHJl dC0+bmV4dCkKKyAgICB7CisgICAgICBpZiAocmV0LT50cCA9PSB0cCAmJiBy ZXQtPnN0ZXBwaW5nX2ZyYW1lID09IHN0ZXBwaW5nX2ZyYW1lKQorCXJldHVy biByZXQ7CisgICAgfQorCisgIHJldCA9IChzdHJ1Y3QgY3RmX3NhdmVfdHBf cyAqKSB4emFsbG9jIChzaXplb2YgKCpyZXQpKTsKKworICAvKiBBZGQgdHAg dG8gdGhlIGxpc3QuICAqLworICByZXQtPm5leHQgPSB0Y3NwLT50cDsKKyAg dGNzcC0+dHAgPSByZXQ7CisKKyAgcmV0LT5zdGVwcGluZ19mcmFtZSA9IHN0 ZXBwaW5nX2ZyYW1lOworICBpZiAoc3RlcHBpbmdfZnJhbWUpCisgICAgcmV0 LT5pZCA9IHRyYWNlcG9pbnRfY291bnQgKyB0cC0+YmFzZS5udW1iZXI7Cisg IGVsc2UKKyAgICByZXQtPmlkID0gdHAtPmJhc2UubnVtYmVyOworICByZXQt PnRwID0gdHA7CisKKyAgaWYgKCFzdGVwcGluZ19mcmFtZSAmJiAqZGVmYXVs dF9jb2xsZWN0KQorICAgIGN0Zl9zYXZlX2NvbGxlY3RfZ2V0ICh0Y3NwLCBy ZXQsIGRlZmF1bHRfY29sbGVjdCk7CisKKyAgY3RmX3NhdmVfdHBfYWN0aW9u cyAodGNzcCwgcmV0LCBicmVha3BvaW50X2NvbW1hbmRzICgmdHAtPmJhc2Up LCAwKTsKKworICByZXR1cm4gcmV0OworfQorCisvKiBMZXQgVENTUC0+ZGF0 YXN0cmVhbV9mZCBwb2ludCB0byB0aGUgcGFydCBmb3IgbmV4dCBwYWNrZXQu ICAqLworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfbmV4dF9wYWNrZXQgKHN0 cnVjdCBjdGZfc2F2ZV9zICp0Y3NwKQoreworICB0Y3NwLT5wYWNrZXRfYmVn aW4gKz0gQ1RGX1BBQ0tFVF9TSVpFOworICBjdGZfc2F2ZV9mc2VlayAodGNz cCwgdGNzcC0+cGFja2V0X2JlZ2luLCBTRUVLX1NFVCk7CisgIHRjc3AtPmNv bnRlbnRfc2l6ZSA9IDA7Cit9CisKKy8qIFdyaXRlIHRoZSBjb250ZW50IHNp emUgdG8gcGFja2V0IGhlYWRlciBjb250ZXh0LiAqLworCitzdGF0aWMgdm9p ZAorY3RmX3NhdmVfd3JpdGVfY29udGVudF9zaXplIChzdHJ1Y3QgY3RmX3Nh dmVfcyAqdGNzcCkKK3sKKyAgdWludDMyX3QgdTMyOworCisgIGN0Zl9zYXZl X2ZzZWVrICh0Y3NwLCB0Y3NwLT5wYWNrZXRfYmVnaW4gKyA0LCBTRUVLX1NF VCk7CisgIHUzMiA9IHRjc3AtPmNvbnRlbnRfc2l6ZSAqIFRBUkdFVF9DSEFS X0JJVDsKKyAgY3RmX3NhdmVfd3JpdGUgKHRjc3AsICh2b2lkICopJnUzMiwg NCk7Cit9CisKKy8qIFdyaXRlIHRoZSBDVEYgZGF0YSBwYWNrZXQgaGVhZGVy IGNvbnRleHQuICAqLworCisjZGVmaW5lIFBBQ0tFVF9IRUFERVJfU0laRQko NCArIDQgKyA0KQorCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfd3JpdGVfcGFj a2V0X2hlYWRlcl9jb250ZXh0IChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCkK K3sKKyAgdWludDMyX3QgdTMyOworCisgIC8qIG1hZ2ljLiAgKi8KKyAgdTMy ID0gQ1RGX01BR0lDOworICBjdGZfc2F2ZV93cml0ZSAodGNzcCwgKHZvaWQg KikmdTMyLCA0KTsKKyAgdGNzcC0+Y29udGVudF9zaXplICs9IDQ7CisKKyAg LyogY29udGVudF9zaXplLiAgV2Ugc3RpbGwgZG9uJ3Qga25vdyB0aGUgc2l6 ZSwgd3JpdGUgaXQgbGF0ZXIuICAqLworICBjdGZfc2F2ZV9mc2VlayAodGNz cCwgNCwgU0VFS19DVVIpOworICB0Y3NwLT5jb250ZW50X3NpemUgKz0gNDsK KworICAvKiBwYWNrZXRfc2l6ZSAqLworICB1MzIgPSBDVEZfUEFDS0VUX1NJ WkUgKiBUQVJHRVRfQ0hBUl9CSVQ7CisgIGN0Zl9zYXZlX3dyaXRlICh0Y3Nw LCAodm9pZCAqKSZ1MzIsIDQpOworICB0Y3NwLT5jb250ZW50X3NpemUgKz0g NDsKKworICB0Y3NwLT5jdXJyZW50X2NvbnRlbnRfc2l6ZSA9IHRjc3AtPmNv bnRlbnRfc2l6ZTsKKworICAvKiBNYWtlIHRoaXMgcGFja2V0IGFsbCBpbnRv IGZpbGUuICAqLworICBjdGZfc2F2ZV9mc2VlayAodGNzcCwgdGNzcC0+cGFj a2V0X2JlZ2luICsgQ1RGX1BBQ0tFVF9TSVpFIC0gNCwgU0VFS19TRVQpOwor ICB1MzIgPSAwOworICBjdGZfc2F2ZV93cml0ZSAodGNzcCwgKHZvaWQgKikm dTMyLCA0KTsKKyAgY3RmX3NhdmVfZnNlZWsgKHRjc3AsIHRjc3AtPnBhY2tl dF9iZWdpbiArIHRjc3AtPmNvbnRlbnRfc2l6ZSwgU0VFS19TRVQpOworfQor CisvKiBDaGFuZ2UgSS10aCBjaGFyIGluIENURl9TVFIgdG8gU1RSLiAgKi8K Kworc3RhdGljIGNoYXIgKgorY3RmX3NhdmVfbWV0YWRhdGFfY2hhbmdlX2No YXIgKGNoYXIgKmN0Zl9zdHIsIGludCBpLCBjb25zdCBjaGFyICpzdHIpCit7 CisgIGNoYXIgKm5ldzsKKworICBjdGZfc3RyW2ldID0gJ1wwJzsKKyAgbmV3 ID0geHN0cnByaW50ZiAoIiVzJXMlc18lcyIsIGN0Zl9zdHIsIChpID8gIl8i IDogIiIpLAorCQkgICAgc3RyLCBjdGZfc3RyICsgaSArIDEpOworICB4ZnJl ZSAoY3RmX3N0cik7CisKKyAgcmV0dXJuIG5ldzsKK30KKworLyogV3JpdGUg dGhlIGhlYWRlciBvZiBDVEYncyBtZXRhZGF0YSB0byBUQ1NQLT5NRVRBREFU QV9GRC4gICovCisKK3N0YXRpYyB2b2lkCitjdGZfc2F2ZV9tZXRhZGF0YV9o ZWFkZXIgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwKQoreworICBjb25zdCBj aGFyIG1ldGFkYXRhX2ZtdFtdID0KKyAgIlxudHJhY2Uge1xuIgorICAiCW1h am9yID0gJXU7XG4iCisgICIJbWlub3IgPSAldTtcbiIKKyAgIglieXRlX29y ZGVyID0gJXM7XG4iCQkvKiBiZSBvciBsZSAqLworICAiCXBhY2tldC5oZWFk ZXIgOj0gc3RydWN0IHtcbiIKKyAgIgkJdWludDMyX3QgbWFnaWM7XG4iCisg ICIJfTtcbiIKKyAgIn07XG4iCisgICJcbiIKKyAgInN0cmVhbSB7XG4iCisg ICIJcGFja2V0LmNvbnRleHQgOj0gc3RydWN0IHtcbiIKKyAgIgkJdWludDMy X3QgY29udGVudF9zaXplO1xuIgorICAiCQl1aW50MzJfdCBwYWNrZXRfc2l6 ZTtcbiIKKyAgIgl9O1xuIgorICAiCWV2ZW50LmhlYWRlciA6PSBzdHJ1Y3Qg e1xuIgorICAiCQl1aW50MzJfdCBpZDtcbiIKKyAgIgl9O1xuIgorICAifTtc biI7CisKKyAgY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRh dGFfZmQsICIvKiBDVEYgJWQuJWQgKi9cbiIsCisJCQkgIENURl9TQVZFX01B Sk9SLCBDVEZfU0FWRV9NSU5PUik7CisgIGN0Zl9zYXZlX2Z3cml0ZV9mb3Jt YXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiXAordHlwZWFsaWFzIGludGVnZXIg eyBzaXplID0gMzI7IGFsaWduID0gMzI7IHNpZ25lZCA9IGZhbHNlOyB9IDo9 IHVpbnQzMl90O1xuIik7CisgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRj c3AtPm1ldGFkYXRhX2ZkLCAiXAordHlwZWFsaWFzIGludGVnZXIgeyBzaXpl ID0gNjQ7IGFsaWduID0gNjQ7IHNpZ25lZCA9IGZhbHNlOyB9IDo9IHVpbnQ2 NF90O1xuIik7CisgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1l dGFkYXRhX2ZkLCAiXG4iKTsKKworICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0 ICh0Y3NwLT5tZXRhZGF0YV9mZCwgbWV0YWRhdGFfZm10LAorCQkJICBDVEZf U0FWRV9NQUpPUiwgQ1RGX1NBVkVfTUlOT1IsCisJCQkgIEJZVEVfT1JERVIg PT0gTElUVExFX0VORElBTiA/ICJsZSIgOiAiYmUiKTsKKyAgY3RmX3NhdmVf ZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsICJcbiIpOworfQor CisvKiBXcml0ZSB0aGUgYm9keSBvZiBDVEYncyBtZXRhZGF0YSB0byBUQ1NQ LT5NRVRBREFUQV9GRC4gICovCisKK3N0YXRpYyB2b2lkCitjdGZfc2F2ZV9t ZXRhZGF0YSAoc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3ApCit7CisgIHN0cnVj dCBjdGZfc2F2ZV90cF9zICp0cHM7CisgIHN0cnVjdCBjdGZfc2F2ZV9jb2xs ZWN0X3MgKmNvbGxlY3Q7CisgIHN0cnVjdCBjdGZfc2F2ZV90eXBlX3MgKnQ7 CisKKyAgY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFf ZmQsICJcbiIpOworCisgIC8qIFdyaXRlIGV2ZW50LiAgKi8KKyAgZm9yICh0 cHMgPSB0Y3NwLT50cDsgdHBzOyB0cHMgPSB0cHMtPm5leHQpCisgICAgewor ICAgICAgY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFf ZmQsCisJCQkgICAgICAiZXZlbnQge1xuXHRuYW1lID0gXCIlcyVzXCI7XG5c dGlkID0gJXU7XG4iCisJCQkgICAgICAiXHRmaWVsZHMgOj0gc3RydWN0IHsg XG4iLAorCQkJICAgICAgdHBzLT50cC0+YmFzZS5hZGRyX3N0cmluZywKKwkJ CSAgICAgIHRwcy0+c3RlcHBpbmdfZnJhbWUgPyAiIHdoaWxlLXN0ZXBwaW5n IiA6ICIiLAorCQkJICAgICAgdHBzLT5pZCk7CisgICAgICBmb3IgKGNvbGxl Y3QgPSB0cHMtPmNvbGxlY3Q7IGNvbGxlY3Q7IGNvbGxlY3QgPSBjb2xsZWN0 LT5uZXh0KQorICAgICAgICB7CisJICBjaGFyICp0bXA7CisJICBjb25zdCBj aGFyICpvbGRfdGFiOworCSAgaW50IGZpbmRfc2FtZSA9IDA7CisKKwkgIGlm IChjb2xsZWN0LT5pc19yZXQpCisJICAgIGNvbGxlY3QtPmN0Zl9zdHIgPSB4 c3RyZHVwICgicmV0X3BjIik7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBj aGFyICpuZXc7CisJICAgICAgaW50IG5lZWRfcmVjaGVjazsKKwkgICAgICBp bnQgaTsKKworCSAgICAgIGNvbGxlY3QtPmN0Zl9zdHIgPSB4c3RyZHVwIChj b2xsZWN0LT5zdHIpOworCSAgICAgIGZvciAoaSA9IDA7IGNvbGxlY3QtPmN0 Zl9zdHJbaV0gIT0gJ1wwJzsgKytpKQorCSAgICAgICAgeworCQkgIHN3aXRj aCAoY29sbGVjdC0+Y3RmX3N0cltpXSkKKwkJICAgIHsKKwkJICAgIGNhc2Ug JyQnOgorCQkgICAgICBjb2xsZWN0LT5jdGZfc3RyCisJCQkgID0gY3RmX3Nh dmVfbWV0YWRhdGFfY2hhbmdlX2NoYXIgKGNvbGxlY3QtPmN0Zl9zdHIsCisJ CQkJCQkJICAgaSwgImRvbGxhciIpOworCQkgICAgICBicmVhazsKKwkJICAg IGNhc2UgJyonOgorCQkgICAgICBjb2xsZWN0LT5jdGZfc3RyCisJCQkgID0g Y3RmX3NhdmVfbWV0YWRhdGFfY2hhbmdlX2NoYXIgKGNvbGxlY3QtPmN0Zl9z dHIsCisJCQkJCQkJICAgaSwgInN0YXIiKTsKKwkJICAgICAgYnJlYWs7CisJ CSAgICBjYXNlICcgJzoKKwkJICAgICAgY29sbGVjdC0+Y3RmX3N0cltpXSA9 ICdfJzsKKwkJICAgICAgYnJlYWs7CisJCSAgICB9CisJCX0KKwkgICAgfQor CisJICAvKiBDaGVjayBpZiBUUFMgaW5jbHVkZSBhIGNvbGxlY3QgdGhhdCBD VEZfU1RSIHNhbWUKKwkgICAgIHdpdGggQ09MTEVDVC0+Q1RGX1NUUi4KKwkg ICAgIElmIHNvLCByZW5hbWUgaXQgYW5kIGtlZXAgY2hlY2suICAqLworCSAg dG1wID0gYWxsb2NhIChzdHJsZW4gKGNvbGxlY3QtPmN0Zl9zdHIpICsgMzAp OworCSAgc3RyY3B5ICh0bXAsIGNvbGxlY3QtPmN0Zl9zdHIpOworCSAgd2hp bGUgKDEpCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgY3RmX3NhdmVfY29sbGVj dF9zICpjb2xsZWN0MjsKKwkgICAgICBpbnQgaSA9IDA7CisKKwkgICAgICBm b3IgKGNvbGxlY3QyID0gdHBzLT5jb2xsZWN0OyBjb2xsZWN0MjsKKwkJICAg Y29sbGVjdDIgPSBjb2xsZWN0Mi0+bmV4dCkKKwkJeworCQkgIGlmIChjb2xs ZWN0ICE9IGNvbGxlY3QyICYmIGNvbGxlY3QyLT5jdGZfc3RyCisJCSAgICAg ICYmIHN0cmNtcCAoY29sbGVjdDItPmN0Zl9zdHIsIHRtcCkgPT0gMCkKKwkJ ICAgIGJyZWFrOworCQl9CisJICAgICAgaWYgKGNvbGxlY3QyID09IE5VTEwp CisJCWJyZWFrOworCisJICAgICAgZmluZF9zYW1lID0gMTsKKwkgICAgICB4 c25wcmludGYgKHRtcCwgc3RybGVuIChjb2xsZWN0LT5jdGZfc3RyKSArIDMw LAorCQkJICIlc18lZCIsIGNvbGxlY3QtPmN0Zl9zdHIsIGkrKyk7CisJICAg IH0KKwkgIGlmIChmaW5kX3NhbWUpCisJICAgIHsKKwkgICAgICB4ZnJlZSAo Y29sbGVjdC0+Y3RmX3N0cik7CisJICAgICAgY29sbGVjdC0+Y3RmX3N0ciA9 IHhzdHJkdXAgKHRtcCk7CisJICAgIH0KKworCSAgaWYgKHN0cmNtcCAoY29s bGVjdC0+Y3RmX3N0ciwgY29sbGVjdC0+c3RyKSkKKwkgICAgd2FybmluZyAo XygiXAorXCIlc1wiIG9mIHRyYWNlcG9pbnQgJWQgcmVuYW1lZCB0byBcIiVz XCIgaW4gQ1RGIGZpbGUuIiksCisJCSAgICAgICBjb2xsZWN0LT5zdHIsIHRw cy0+dHAtPmJhc2UubnVtYmVyLAorCQkgICAgICAgY29sbGVjdC0+Y3RmX3N0 cik7CisKKwkgIG9sZF90YWIgPSB0Y3NwLT50YWI7CisJICB0Y3NwLT50YWIg PSAiXHRcdCI7CisJICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5t ZXRhZGF0YV9mZCwgdGNzcC0+dGFiKTsKKwkgIGlmIChjb2xsZWN0LT5pc19y ZXQpCisJICAgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFk YXRhX2ZkLCAidWludDY0X3QgJXM7XG4iLAorCQkJCSAgICBjb2xsZWN0LT5j dGZfc3RyKTsKKwkgIGVsc2UKKwkgICAgY3RmX3NhdmVfdmFyX2RlZmluZV93 cml0ZSAodGNzcCwgY29sbGVjdC0+dHlwZSwKKwkJCQkgICAgICAgY29sbGVj dC0+Y3RmX3N0ciwgMCk7CisJICB0Y3NwLT50YWIgPSBvbGRfdGFiOworCX0K KyAgICAgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRh X2ZkLCAiXHR9O1xufTtcbiIpOworICAgIH0KK30KKworLyogQ2xlYW4gZnVu Y3Rpb24gZm9yIGN0Zl9zYXZlLiAgKi8KKworc3RhdGljIHZvaWQKK2N0Zl9z YXZlX2NsZWFudXAgKHZvaWQgKnApCit7CisgIHN0cnVjdCBjdGZfc2F2ZV9z ICp0Y3NwID0gcDsKKyAgc3RydWN0IGN0Zl9zYXZlX3RwX3MgKnRwLCAqdG1w X3RwOworICBzdHJ1Y3QgY3RmX3NhdmVfdHlwZV9zICp0eXBlLCAqdG1wX3R5 cGU7CisKKyAgaWYgKHRjc3AtPm1ldGFkYXRhX2ZkKQorICAgIHsKKyAgICAg IGN0Zl9zYXZlX21ldGFkYXRhICh0Y3NwKTsKKyAgICAgIGZjbG9zZSAodGNz cC0+bWV0YWRhdGFfZmQpOworICAgIH0KKworICBpZiAodGNzcC0+ZGF0YXN0 cmVhbV9mZCkKKyAgICBmY2xvc2UgKHRjc3AtPmRhdGFzdHJlYW1fZmQpOwor CisgIGZvciAodHAgPSB0Y3NwLT50cDsgdHA7IHRwID0gdG1wX3RwKQorICAg IHsKKyAgICAgIHN0cnVjdCBjdGZfc2F2ZV9jb2xsZWN0X3MgKmNvbGxlY3Qs ICp0bXBfY29sbGVjdDsKKworICAgICAgZm9yIChjb2xsZWN0ID0gdHAtPmNv bGxlY3Q7IGNvbGxlY3Q7IGNvbGxlY3QgPSB0bXBfY29sbGVjdCkKKyAgICAg ICAgeworCSAgeGZyZWUgKGNvbGxlY3QtPmV4cHIpOworCSAgeGZyZWUgKGNv bGxlY3QtPnN0cik7CisJICB4ZnJlZSAoY29sbGVjdC0+Y3RmX3N0cik7CisJ ICB0bXBfY29sbGVjdCA9IGNvbGxlY3QtPm5leHQ7CisJICB4ZnJlZSAoY29s bGVjdCk7CisgICAgICAgIH0KKyAgICAgIHRtcF90cCA9IHRwLT5uZXh0Owor ICAgICAgeGZyZWUgKHRwKTsKKyAgICB9CisKKyAgZm9yICh0eXBlID0gdGNz cC0+dHlwZTsgdHlwZTsgdHlwZSA9IHRtcF90eXBlKQorICAgIHsKKyAgICAg IHRtcF90eXBlID0gdHlwZS0+bmV4dDsKKyAgICAgIHhmcmVlICh0eXBlKTsK KyAgICB9CisKKyAgcmVpbml0X2ZyYW1lX2NhY2hlICgpOworICB0YXJnZXRf ZGNhY2hlX2ludmFsaWRhdGUgKCk7CisgIHNldF9jdXJyZW50X3RyYWNlZnJh bWUgKHRjc3AtPm9sZF90cmFjZWZyYW1lX251bSk7Cit9CisKKy8qIFNhdmUg Y3VycmVudCB0cmFjZSBmcmFtZSB0byBESVJOQU1FLiAgKi8KKwordm9pZAor Y3RmX3NhdmUgKGNvbnN0IGNoYXIgKmRpcm5hbWUpCit7CisgIHN0cnVjdCBj dGZfc2F2ZV9zIHRjczsKKyAgc3RydWN0IGNsZWFudXAgKm9sZF9jaGFpbjsK KyAgaW50IGZyYW1lX251bTsKKyAgY2hhciAqZmlsZV9uYW1lOworICBzdHJ1 Y3QgY3RmX3NhdmVfdHlwZV9zICp0OworICBjaGFyIHRhYltdID0gIiI7CisK KyAgLyogQ3JlYXRlIERJUk5BTUUuICAqLworICBmaWxlX25hbWUgPSBhbGxv Y2EgKHN0cmxlbiAoZGlybmFtZSkgKyAxCisJCSAgICAgICsgc3RybGVuIChD VEZfREFUQVNUUkVBTV9OQU1FKSArIDEpOworICBpZiAobWtkaXIgKGRpcm5h bWUsIFNfSVJXWFUgfCBTX0lSR1JQIHwgU19JWEdSUCB8IFNfSVJPVEggfCBT X0lYT1RIKQorICAgICAgJiYgZXJybm8gIT0gRUVYSVNUKQorICAgIGVycm9y IChfKCJVbmFibGUgdG8gb3BlbiBkaXJlY3RvcnkgJyVzJyBmb3Igc2F2aW5n IHRyYWNlIGRhdGEgKCVzKSIpLAorCSAgIGRpcm5hbWUsIHNhZmVfc3RyZXJy b3IgKGVycm5vKSk7CisKKyAgbWVtc2V0ICgmdGNzLCAnXDAnLCBzaXplb2Yg KHRjcykpOworICB0Y3Mub2xkX3RyYWNlZnJhbWVfbnVtID0gZ2V0X3RyYWNl ZnJhbWVfbnVtYmVyICgpOworICBvbGRfY2hhaW4gPSBtYWtlX2NsZWFudXAg KGN0Zl9zYXZlX2NsZWFudXAsICZ0Y3MpOworICB0Y3MudGFiID0gdGFiOwor CisgIHNwcmludGYgKGZpbGVfbmFtZSwgIiVzLyVzIiwgZGlybmFtZSwgQ1RG X01FVEFEQVRBX05BTUUpOworICB0Y3MubWV0YWRhdGFfZmQgPSBmb3BlbiAo ZmlsZV9uYW1lLCAidyIpOworICBpZiAoIXRjcy5tZXRhZGF0YV9mZCkKKyAg ICBlcnJvciAoXygiVW5hYmxlIHRvIG9wZW4gZmlsZSAnJXMnIGZvciBzYXZp bmcgdHJhY2UgZGF0YSAoJXMpIiksCisJICAgZmlsZV9uYW1lLCBzYWZlX3N0 cmVycm9yIChlcnJubykpOworICBjdGZfc2F2ZV9tZXRhZGF0YV9oZWFkZXIg KCZ0Y3MpOworCisgIHNwcmludGYgKGZpbGVfbmFtZSwgIiVzLyVzIiwgZGly bmFtZSwgQ1RGX0RBVEFTVFJFQU1fTkFNRSk7CisgIHRjcy5kYXRhc3RyZWFt X2ZkID0gZm9wZW4gKGZpbGVfbmFtZSwgInciKTsKKyAgaWYgKCF0Y3MuZGF0 YXN0cmVhbV9mZCkKKyAgICBlcnJvciAoXygiVW5hYmxlIHRvIG9wZW4gZmls ZSAnJXMnIGZvciBzYXZpbmcgdHJhY2UgZGF0YSAoJXMpIiksCisJICAgZmls ZV9uYW1lLCBzYWZlX3N0cmVycm9yIChlcnJubykpOworCisgIGN0Zl9zYXZl X3dyaXRlX3BhY2tldF9oZWFkZXJfY29udGV4dCAoJnRjcyk7CisKKyAgZm9y IChmcmFtZV9udW0gPSAwOyAxOyBmcmFtZV9udW0gKyspCisgICAgeworICAg ICAgaW50IHRudW07CisgICAgICBzdHJ1Y3QgdHJhY2Vwb2ludCAqdHA7Cisg ICAgICBpbnQgdHJ5X2NvdW50OworICAgICAgdWludDMyX3QgdTMyOworICAg ICAgc3RydWN0IGN0Zl9zYXZlX3RwX3MgKnRwczsKKyAgICAgIHN0cnVjdCBj dGZfc2F2ZV9jb2xsZWN0X3MgKmNvbGxlY3Q7CisgICAgICBpbnQgdHJhY2Vm cmFtZV9pc19kcm9wcGVkID0gMDsKKworICAgICAgLyogQWxsb3cgdXNlciB0 byBiYWlsIG91dCB3aXRoIF5DLiAgKi8KKyAgICAgIFFVSVQ7CisKKyAgICAg IC8qIEdvdG8gdHJhY2VmcmFtZSBmcmFtZV9udW0gYW5kIHNldCB0cC4gICov CisgICAgICBmcmFtZV9udW0gPSB0YXJnZXRfdHJhY2VfZmluZCAodGZpbmRf bnVtYmVyLCBmcmFtZV9udW0sIDAsIDAsICZ0bnVtKTsKKyAgICAgIGlmIChm cmFtZV9udW0gPCAwKQorCWJyZWFrOworICAgICAgdHAgPSBnZXRfdHJhY2Vw b2ludF9ieV9udW1iZXJfb25fdGFyZ2V0ICh0bnVtKTsKKyAgICAgIGlmICgh dHApCisgICAgICAgIHsKKwkgIHdhcm5pbmcgKF8oImRyb3AgdHJhY2VmcmFt ZSAlZCBiZWNhdXNlIGNhbm5vdCBmaW5kIHRyYWNlcG9pbnQgJWQuIiksCisJ CSAgIGZyYW1lX251bSwgdG51bSk7CisJICBjb250aW51ZTsKKwl9CisgICAg ICBpZiAoIXRwLT5iYXNlLmxvYykKKyAgICAgICAgeworCSAgd2FybmluZyAo XygiZHJvcCB0cmFjZWZyYW1lICVkIGJlY2F1c2UgdHJhY2Vwb2ludCAlZCBp cyBwZW5kaW5nLiIpLAorCQkgICBmcmFtZV9udW0sIHRwLT5iYXNlLm51bWJl cik7CisJICBjb250aW51ZTsKKwl9CisgICAgICByZWluaXRfZnJhbWVfY2Fj aGUgKCk7CisgICAgICB0YXJnZXRfZGNhY2hlX2ludmFsaWRhdGUgKCk7Cisg ICAgICBzZXRfY3VycmVudF90cmFjZWZyYW1lIChmcmFtZV9udW0pOworCisg ICAgICB0cHMgPSBjdGZfc2F2ZV90cF9maW5kICgmdGNzLCB0cCk7CisKKyAg ICAgIC8qIFRoZSB0cCBpcyBub3QgdmFyaWFibGUtbGVuZ3RoIGFuZCBiaWdn ZXIgdGhhbiBDVEZfUEFDS0VUX1NJWkUuCisgICAgICAgICBTbyBkcm9wIGl0 LiAgKi8KKyAgICAgIGlmICh0cHMtPmlzX2Ryb3BwZWQpCisJY29udGludWU7 CisKKyAgICAgIC8qIFRyeSBjb3VudCBmb3IgY3VycmVudCB0cCB3cml0ZS4K KyAgICAgICAgIElmIHRyeSBzZWNvbmQgdGltZSwgdGhlIGV2ZW50IHNpemUg YmlnZ2VyIHRoYW4gYSBwYWNrZXQuCisgICAgICAgICBUaGVuIGRyb3AgdGhp cyBldmVudC4gICovCisgICAgICB0cnlfY291bnQgPSAwOworCityZV93cml0 ZV90cDoKKyAgICAgIGlmICh0cnlfY291bnQgPiAwKQorICAgICAgICB7CisJ ICAvKiBIYW5kbGUgcmV0cnkuICAqLworCSAgaWYgKHRyeV9jb3VudCA+IDEg fHwgUEFDS0VUX0hFQURFUl9TSVpFID09IHRjcy5jb250ZW50X3NpemUpCisJ ICAgIHsKKwkgICAgICAvKiBTZWNvbmQgcmV0cnkgb3IgcGFja2V0IGp1c3Qg d3JpdGUgdGhhdCBwYWNrZXQgbWVhbnMKKwkgICAgICAgICB0aGlzIFRQIGlz IHRvbyBiaWcuICBTbyBkcm9wIGl0LiAgKi8KKwkgICAgICBpZiAodHBzLT5p c192YXJpYWJsZV9sZW5ndGgpCisJICAgICAgICB7CisJCSAgLyogVGhlIHRw IGlzIHZhcmlhYmxlLWxlbmd0aC4gICovCisJCSAgd2FybmluZyAoXygiXAor dHJhY2VmcmFtZSAlZCBvZiB0cmFjZXBvaW50ICVkIG5lZWRzIHRvIHNhdmUg ZGF0YSB0aGF0IGlzIGJpZ2dlciB0aGFuIHBhY2tldCBzaXplICVkLlxuXAor U28gaXQgd2lsbCBiZSBkcm9wcGVkLiIpLCBmcmFtZV9udW0sIHRwcy0+dHAt PmJhc2UubnVtYmVyLCBDVEZfUEFDS0VUX1NJWkUpOworCQl9CisJICAgICAg ZWxzZQorCSAgICAgICAgeworCQkgIC8qIFRoZSB0cCBpcyBub3QgdmFyaWFi bGUtbGVuZ3RoLiAgKi8KKwkJICB3YXJuaW5nIChfKCJcCit0cmFjZXBvaW50 ICVkIG5lZWQgc2F2ZSBkYXRhIHRoYXQgYmlnZ2VyIHRoYW4gcGFja2V0IHNp emUgJWQuXG5cCitTbyBhbGwgb2YgaXRzIHRyYWNlZnJhbWVzIHdpbGwgYmUg ZHJvcHBlZC4iKSwKKwkJCSAgIHRwcy0+dHAtPmJhc2UubnVtYmVyLCBDVEZf UEFDS0VUX1NJWkUpOworCQkgIC8qIE1hcmsgdGhpcyB0cCB0byBsZXQgR0RC IGRyb3AgaXRzIHRyYWNlZnJhbWVzLiAgKi8KKwkJICB0cHMtPmlzX2Ryb3Bw ZWQgPSAxOworCQl9CisJICAgICAgY29udGludWU7CisJICAgIH0KKworCSAg dGNzLmNoZWNrX3NpemUgPSAwOworCSAgY3RmX3NhdmVfd3JpdGVfY29udGVu dF9zaXplICgmdGNzKTsKKyAgICAgICAgICBjdGZfc2F2ZV9uZXh0X3BhY2tl dCAoJnRjcyk7CisJICBjdGZfc2F2ZV93cml0ZV9wYWNrZXRfaGVhZGVyX2Nv bnRleHQgKCZ0Y3MpOworCX0KKworICAgICAgdHJ5X2NvdW50ICsrOworCisg ICAgICB0Y3MuY3VycmVudF9jb250ZW50X3NpemUgPSB0Y3MuY29udGVudF9z aXplOworICAgICAgdGNzLmNoZWNrX3NpemUgPSAxOworCisgICAgICB1MzIg PSAodWludDMyX3QpIHRwcy0+aWQ7CisgICAgICBpZiAoY3RmX3NhdmVfYWxp Z25fd3JpdGUgKCZ0Y3MsICh2b2lkICopJnUzMiwgc2l6ZW9mICh1MzIpLAor CQkJCXNpemVvZiAodTMyKSkpCisJZ290byByZV93cml0ZV90cDsKKworICAg ICAgLyogQWxpZ24uICAqLworICAgICAgaWYgKHRwcy0+YWxpZ25fc2l6ZSkK KyAgICAgICAgeworCSAgaWYgKGN0Zl9zYXZlX2ZzZWVrICgmdGNzLAorCQkJ ICAgICAgQUxJR05fU0laRSAodGNzLmN1cnJlbnRfY29udGVudF9zaXplLAor CQkJCQkgIHRwcy0+YWxpZ25fc2l6ZSksCisJCQkgICAgICBTRUVLX0NVUikp CisJICAgIGdvdG8gcmVfd3JpdGVfdHA7CisJfQorCisgICAgICBmb3IgKGNv bGxlY3QgPSB0cHMtPmNvbGxlY3Q7IGNvbGxlY3Q7IGNvbGxlY3QgPSBjb2xs ZWN0LT5uZXh0KQorICAgICAgICB7CisJICB2b2xhdGlsZSBzdHJ1Y3QgZ2Ri X2V4Y2VwdGlvbiBlOworCisJICBpZiAoY29sbGVjdC0+aXNfcmV0KQorCSAg ICB7CisJICAgICAgQ09SRV9BRERSIHBjOworCSAgICAgIHVpbnQ2NF90IHU2 NDsKKworCSAgICAgIFRSWV9DQVRDSCAoZSwgUkVUVVJOX01BU0tfRVJST1Ip CisJCXsKKwkJICBzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWU7CisKKwkJICBm cmFtZSA9IGdldF9jdXJyZW50X2ZyYW1lICgpOworCQkgIGlmICghZnJhbWUp CisJCSAgICBlcnJvciAoXygiZ2V0IGN1cnJlbnQgZnJhbWUgZmFpbCIpKTsK KwkJICBmcmFtZSA9IGdldF9wcmV2X2ZyYW1lIChmcmFtZSk7CisJCSAgaWYg KCFmcmFtZSkKKwkJICAgIGVycm9yIChfKCJnZXQgcHJldiBmcmFtZSBmYWls IikpOworCisJCSAgaWYgKCFnZXRfZnJhbWVfcGNfaWZfYXZhaWxhYmxlIChm cmFtZSwgJnBjKSkKKwkJICAgIGVycm9yIChfKCJQQyB1bmF2YWlsYWJsZSIp KTsKKwkJfQorCSAgICAgIGlmIChlLnJlYXNvbiA8IDApCisJCXsKKwkJICB3 YXJuaW5nIChfKCJcCit0cmFjZWZyYW1lICVkIGlzIGRyb3BwZWQgYmVjYXVz ZSBHREIgdHJ5IHRvIGdldCB0aGUgdmFsdWUgb2YgXCIlc1wiIGdvdCBlcnJv cjogJXMiKSwKKwkJCSAgIGZyYW1lX251bSwgY29sbGVjdC0+c3RyLCBlLm1l c3NhZ2UpOworCQkgIHRyYWNlZnJhbWVfaXNfZHJvcHBlZCA9IDE7CisJCSAg YnJlYWs7CisJCX0KKworCSAgICAgIHU2NCA9IHBjOworCSAgICAgIGlmIChj dGZfc2F2ZV9hbGlnbl93cml0ZSAoJnRjcywgKGdkYl9ieXRlICopICZ1NjQs CisJCQkJCXNpemVvZiAodTY0KSwgc2l6ZW9mICh1NjQpKSkKKwkJZ290byBy ZV93cml0ZV90cDsKKwkgICAgfQorCSAgZWxzZQorICAgICAgICAgICAgewor CSAgICAgIHN0cnVjdCB2YWx1ZSAqdmFsID0gTlVMTDsKKwkgICAgICBzdHJ1 Y3QgY2xlYW51cCAqYmFja19jaGFpbjsKKwkgICAgICBjb25zdCBnZGJfYnl0 ZSAqY29udGVudCA9IE5VTEw7CisKKwkgICAgICBiYWNrX2NoYWluID0gbWFr ZV9jbGVhbnVwIChudWxsX2NsZWFudXAsIE5VTEwpOworCSAgICAgIFRSWV9D QVRDSCAoZSwgUkVUVVJOX01BU0tfRVJST1IpCisJICAgICAgICB7CisJCSAg dmFsID0gZXZhbHVhdGVfZXhwcmVzc2lvbiAoY29sbGVjdC0+ZXhwcik7CisJ CSAgY29udGVudCA9IHZhbHVlX2NvbnRlbnRzICh2YWwpOworCQl9CisJICAg ICAgaWYgKGUucmVhc29uIDwgMCB8fCBjb2xsZWN0LT50eXBlICE9IHZhbHVl X3R5cGUgKHZhbCkpCisJCXsKKwkJICBpZiAoZS5yZWFzb24gPCAwKQorCQkg ICAgd2FybmluZyAoXygiXAordHJhY2VmcmFtZSAlZCBpcyBkcm9wcGVkIGJl Y2F1c2UgdHJ5IHRvIGdldCB0aGUgdmFsdWUgb2YgXCIlc1wiIGdvdCBlcnJv cjogJXMiKSwKKwkJCSAgICAgZnJhbWVfbnVtLCBjb2xsZWN0LT5zdHIsIGUu bWVzc2FnZSk7CisJCSAgZWxzZQorCQkgICAgd2FybmluZyAoXygiXAordHJh Y2VmcmFtZSAlZCBpcyBkcm9wcGVkIGJlY2F1c2UgdHlwZSBvZiBcIiVzXCIg aXMgd3JvbmcuIiksCisJCQkgICAgIGZyYW1lX251bSwgY29sbGVjdC0+c3Ry KTsKKwkJICB0cmFjZWZyYW1lX2lzX2Ryb3BwZWQgPSAxOworCQkgIGRvX2Ns ZWFudXBzIChiYWNrX2NoYWluKTsKKwkJICBicmVhazsKKwkJfQorCisJICAg ICAgLyogV3JpdGUgdGhpcyB2YWwgYWNjb3JkaW5nIHRvIHR5cGUuICAqLwor CSAgICAgIGlmIChjdGZfc2F2ZV9hbGlnbl93cml0ZSAoJnRjcywgY29udGVu dCwKKwkJCQkJVFlQRV9MRU5HVEggKGNvbGxlY3QtPnR5cGUpLAorCQkJCQlj b2xsZWN0LT5hbGlnbl9zaXplKSkKKwkJeworCQkgIGRvX2NsZWFudXBzIChi YWNrX2NoYWluKTsKKwkJICBnb3RvIHJlX3dyaXRlX3RwOworCQl9CisKKwkg ICAgICAvKiBGcmVlIHRoZSBtZW1vcnkgdGhhdCBhbGxvYyBieSBldmFsdWF0 ZV9leHByZXNzaW9uLiAgKi8KKwkgICAgICBkb19jbGVhbnVwcyAoYmFja19j aGFpbik7CisJICAgIH0KKwl9CisKKyAgICAgIGlmICh0cmFjZWZyYW1lX2lz X2Ryb3BwZWQpCisJY29udGludWU7CisKKyAgICAgIHRjcy5jb250ZW50X3Np emUgPSB0Y3MuY3VycmVudF9jb250ZW50X3NpemU7CisgICAgfQorICBjdGZf c2F2ZV93cml0ZV9jb250ZW50X3NpemUgKCZ0Y3MpOworCisgIGRvX2NsZWFu dXBzIChvbGRfY2hhaW4pOworfQotLS0gL2Rldi9udWxsCisrKyBiL2N0Zi5o CkBAIC0wLDAgKzEsMjUgQEAKKy8qIENURiBmb3JtYXQgc3VwcG9ydC4KKwor ICAgQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgQ1RGX0gKKyNk ZWZpbmUgQ1RGX0gKKworZXh0ZXJuIHZvaWQgY3RmX3NhdmUgKGNvbnN0IGNo YXIgKmRpcm5hbWUpOworCisjZW5kaWYKLS0tIGEvbWkvbWktbWFpbi5jCisr KyBiL21pL21pLW1haW4uYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUg Im9zZGF0YS5oIgogI2luY2x1ZGUgInNwbGF5LXRyZWUuaCIKICNpbmNsdWRl ICJ0cmFjZXBvaW50LmgiCisjaW5jbHVkZSAiY3RmLmgiCiAjaW5jbHVkZSAi YWRhLWxhbmcuaCIKICNpbmNsdWRlICJsaW5lc3BlYy5oIgogCkBAIC0yNDc3 LDE2ICsyNDc4LDE5IEBAIHZvaWQKIG1pX2NtZF90cmFjZV9zYXZlIChjaGFy ICpjb21tYW5kLCBjaGFyICoqYXJndiwgaW50IGFyZ2MpCiB7CiAgIGludCB0 YXJnZXRfc2F2ZXMgPSAwOworICBpbnQgZ2VuZXJhdGVfY3RmID0gMDsKICAg Y2hhciAqZmlsZW5hbWU7CiAKICAgaWYgKGFyZ2MgIT0gMSAmJiBhcmdjICE9 IDIpCi0gICAgZXJyb3IgKF8oIlVzYWdlOiAtdHJhY2Utc2F2ZSBbLXJdIGZp bGVuYW1lIikpOworICAgIGVycm9yIChfKCJVc2FnZTogLXRyYWNlLXNhdmUg Wy1yXSBbLWN0Zl0gZmlsZW5hbWUiKSk7CiAKICAgaWYgKGFyZ2MgPT0gMikK ICAgICB7CiAgICAgICBmaWxlbmFtZSA9IGFyZ3ZbMV07CiAgICAgICBpZiAo c3RyY21wIChhcmd2WzBdLCAiLXIiKSA9PSAwKQogCXRhcmdldF9zYXZlcyA9 IDE7CisgICAgICBpZiAoc3RyY21wIChhcmd2WzBdLCAiLWN0ZiIpID09IDAp CisJZ2VuZXJhdGVfY3RmID0gMTsKICAgICAgIGVsc2UKIAllcnJvciAoXygi SW52YWxpZCBvcHRpb246ICVzIiksIGFyZ3ZbMF0pOwogICAgIH0KQEAgLTI0 OTUsNyArMjQ5OSwxMCBAQCBtaV9jbWRfdHJhY2Vfc2F2ZSAoY2hhciAqY29t bWFuZCwgY2hhciAqCiAgICAgICBmaWxlbmFtZSA9IGFyZ3ZbMF07CiAgICAg fQogCi0gIHRyYWNlX3NhdmUgKGZpbGVuYW1lLCB0YXJnZXRfc2F2ZXMpOwor ICBpZiAoZ2VuZXJhdGVfY3RmKQorICAgIGN0Zl9zYXZlIChmaWxlbmFtZSk7 CisgIGVsc2UKKyAgICB0cmFjZV9zYXZlIChmaWxlbmFtZSwgdGFyZ2V0X3Nh dmVzKTsKIH0KIAogdm9pZAotLS0gYS90cmFjZXBvaW50LmMKKysrIGIvdHJh Y2Vwb2ludC5jCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiZXhjZXB0 aW9ucy5oIgogI2luY2x1ZGUgImNsaS9jbGktdXRpbHMuaCIKICNpbmNsdWRl ICJwcm9iZS5oIgorI2luY2x1ZGUgImN0Zi5oIgogCiAvKiByZWFkbGluZSBp bmNsdWRlIGZpbGVzICovCiAjaW5jbHVkZSAicmVhZGxpbmUvcmVhZGxpbmUu aCIKQEAgLTU4OCwxMyArNTg5LDEzIEBAIGVuZF9hY3Rpb25zX3BzZXVkb2Nv bW1hbmQgKGNoYXIgKmFyZ3MsIGkKICAgZXJyb3IgKF8oIlRoaXMgY29tbWFu ZCBjYW5ub3QgYmUgdXNlZCBhdCB0aGUgdG9wIGxldmVsLiIpKTsKIH0KIAot c3RhdGljIHZvaWQKK3ZvaWQKIHdoaWxlX3N0ZXBwaW5nX3BzZXVkb2NvbW1h bmQgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKIHsKICAgZXJyb3IgKF8o IlRoaXMgY29tbWFuZCBjYW4gb25seSBiZSB1c2VkIGluIGEgdHJhY2Vwb2lu dCBhY3Rpb25zIGxpc3QuIikpOwogfQogCi1zdGF0aWMgdm9pZAordm9pZAog Y29sbGVjdF9wc2V1ZG9jb21tYW5kIChjaGFyICphcmdzLCBpbnQgZnJvbV90 dHkpCiB7CiAgIGVycm9yIChfKCJUaGlzIGNvbW1hbmQgY2FuIG9ubHkgYmUg dXNlZCBpbiBhIHRyYWNlcG9pbnQgYWN0aW9ucyBsaXN0LiIpKTsKQEAgLTEx NjgsNiArMTE2OSwzNCBAQCBkb19jb2xsZWN0X3N5bWJvbCAoY29uc3QgY2hh ciAqcHJpbnRfbmFtCiAgIHAtPmNvdW50Kys7CiB9CiAKK2ludAorYWRkX2xv Y2FsX3N5bWJvbHNfMSAoaW50IHR5cGUsIENPUkVfQUREUiBwYywKKwkJICAg ICBpdGVyYXRlX292ZXJfYmxvY2tfYXJnX2xvY2FsX3ZhcnNfY2IgY2IsCisJ CSAgICAgdm9pZCAqY2JfZGF0YSkKK3sKKyAgc3RydWN0IGJsb2NrICpibG9j azsKKworICBpZiAodHlwZSA9PSAnTCcpCisgICAgeworICAgICAgYmxvY2sg PSBibG9ja19mb3JfcGMgKHBjKTsKKyAgICAgIGlmIChibG9jayA9PSBOVUxM KQorCXJldHVybiAtMTsKKworICAgICAgaXRlcmF0ZV9vdmVyX2Jsb2NrX2xv Y2FsX3ZhcnMgKGJsb2NrLCBjYiwgY2JfZGF0YSk7CisgICAgfQorICBlbHNl CisgICAgeworICAgICAgcGMgPSBnZXRfcGNfZnVuY3Rpb25fc3RhcnQgKHBj KTsKKyAgICAgIGJsb2NrID0gYmxvY2tfZm9yX3BjIChwYyk7CisgICAgICBp ZiAoYmxvY2sgPT0gTlVMTCkKKwlyZXR1cm4gLTE7CisKKyAgICAgIGl0ZXJh dGVfb3Zlcl9ibG9ja19hcmdfdmFycyAoYmxvY2ssIGNiLCBjYl9kYXRhKTsK KyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKIC8qIEFkZCBhbGwgbG9jYWxz IChvciBhcmdzKSBzeW1ib2xzIHRvIGNvbGxlY3Rpb24gbGlzdC4gICovCiBz dGF0aWMgdm9pZAogYWRkX2xvY2FsX3N5bWJvbHMgKHN0cnVjdCBjb2xsZWN0 aW9uX2xpc3QgKmNvbGxlY3QsCkBAIC0xMTc2LDYgKzEyMDUsNyBAQCBhZGRf bG9jYWxfc3ltYm9scyAoc3RydWN0IGNvbGxlY3Rpb25fbGlzCiB7CiAgIHN0 cnVjdCBibG9jayAqYmxvY2s7CiAgIHN0cnVjdCBhZGRfbG9jYWxfc3ltYm9s c19kYXRhIGNiX2RhdGE7CisgIGNvbnN0IGNoYXIgKm5hbWU7CiAKICAgY2Jf ZGF0YS5jb2xsZWN0ID0gY29sbGVjdDsKICAgY2JfZGF0YS5nZGJhcmNoID0g Z2RiYXJjaDsKQEAgLTExODUsMzMgKzEyMTUsMTkgQEAgYWRkX2xvY2FsX3N5 bWJvbHMgKHN0cnVjdCBjb2xsZWN0aW9uX2xpcwogICBjYl9kYXRhLmNvdW50 ID0gMDsKIAogICBpZiAodHlwZSA9PSAnTCcpCi0gICAgewotICAgICAgYmxv Y2sgPSBibG9ja19mb3JfcGMgKHBjKTsKLSAgICAgIGlmIChibG9jayA9PSBO VUxMKQotCXsKLQkgIHdhcm5pbmcgKF8oIkNhbid0IGNvbGxlY3QgbG9jYWxz OyAiCi0JCSAgICAgIm5vIHN5bWJvbCB0YWJsZSBpbmZvIGF2YWlsYWJsZS5c biIpKTsKLQkgIHJldHVybjsKLQl9Ci0KLSAgICAgIGl0ZXJhdGVfb3Zlcl9i bG9ja19sb2NhbF92YXJzIChibG9jaywgZG9fY29sbGVjdF9zeW1ib2wsICZj Yl9kYXRhKTsKLSAgICAgIGlmIChjYl9kYXRhLmNvdW50ID09IDApCi0Jd2Fy bmluZyAoXygiTm8gbG9jYWxzIGZvdW5kIGluIHNjb3BlLiIpKTsKLSAgICB9 CisgICAgbmFtZSA9ICJsb2NhbHMiOwogICBlbHNlCi0gICAgewotICAgICAg cGMgPSBnZXRfcGNfZnVuY3Rpb25fc3RhcnQgKHBjKTsKLSAgICAgIGJsb2Nr ID0gYmxvY2tfZm9yX3BjIChwYyk7Ci0gICAgICBpZiAoYmxvY2sgPT0gTlVM TCkKLQl7Ci0JICB3YXJuaW5nIChfKCJDYW4ndCBjb2xsZWN0IGFyZ3M7IG5v IHN5bWJvbCB0YWJsZSBpbmZvIGF2YWlsYWJsZS4iKSk7Ci0JICByZXR1cm47 Ci0JfQorICAgIG5hbWUgPSAiYXJncyI7CiAKLSAgICAgIGl0ZXJhdGVfb3Zl cl9ibG9ja19hcmdfdmFycyAoYmxvY2ssIGRvX2NvbGxlY3Rfc3ltYm9sLCAm Y2JfZGF0YSk7Ci0gICAgICBpZiAoY2JfZGF0YS5jb3VudCA9PSAwKQotCXdh cm5pbmcgKF8oIk5vIGFyZ3MgZm91bmQgaW4gc2NvcGUuIikpOworICBpZiAo YWRkX2xvY2FsX3N5bWJvbHNfMSAodHlwZSwgcGMsIGRvX2NvbGxlY3Rfc3lt Ym9sLCAmY2JfZGF0YSkpCisgICAgeworICAgICAgd2FybmluZyAoXygiQ2Fu J3QgY29sbGVjdCAlczsgbm8gc3ltYm9sIHRhYmxlIGluZm8gYXZhaWxhYmxl LlxuIiksCisJICAgICAgIG5hbWUpOworICAgICAgcmV0dXJuOwogICAgIH0K KworICBpZiAoY2JfZGF0YS5jb3VudCA9PSAwKQorICAgIHdhcm5pbmcgKF8o Ik5vICVzIGZvdW5kIGluIHNjb3BlLiIpLCBuYW1lKTsKIH0KIAogc3RhdGlj IHZvaWQKQEAgLTMxODIsNiArMzE5OCw3IEBAIHN0YXRpYyB2b2lkCiB0cmFj ZV9zYXZlX2NvbW1hbmQgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKIHsK ICAgaW50IHRhcmdldF9kb2VzX3NhdmUgPSAwOworICBpbnQgZ2VuZXJhdGVf Y3RmID0gMDsKICAgY2hhciAqKmFyZ3Y7CiAgIGNoYXIgKmZpbGVuYW1lID0g TlVMTDsKICAgc3RydWN0IGNsZWFudXAgKmJhY2tfdG87CkBAIC0zMTk2LDYg KzMyMTMsOCBAQCB0cmFjZV9zYXZlX2NvbW1hbmQgKGNoYXIgKmFyZ3MsIGlu dCBmcm9tCiAgICAgewogICAgICAgaWYgKHN0cmNtcCAoKmFyZ3YsICItciIp ID09IDApCiAJdGFyZ2V0X2RvZXNfc2F2ZSA9IDE7CisgICAgICBpZiAoc3Ry Y21wICgqYXJndiwgIi1jdGYiKSA9PSAwKQorCWdlbmVyYXRlX2N0ZiA9IDE7 CiAgICAgICBlbHNlIGlmICgqKmFyZ3YgPT0gJy0nKQogCWVycm9yIChfKCJ1 bmtub3duIG9wdGlvbiBgJXMnIiksICphcmd2KTsKICAgICAgIGVsc2UKQEAg LTMyMDUsMTAgKzMyMjQsMTggQEAgdHJhY2Vfc2F2ZV9jb21tYW5kIChjaGFy ICphcmdzLCBpbnQgZnJvbQogICBpZiAoIWZpbGVuYW1lKQogICAgIGVycm9y X25vX2FyZyAoXygiZmlsZSBpbiB3aGljaCB0byBzYXZlIHRyYWNlIGRhdGEi KSk7CiAKLSAgdHJhY2Vfc2F2ZSAoZmlsZW5hbWUsIHRhcmdldF9kb2VzX3Nh dmUpOworICBpZiAoZ2VuZXJhdGVfY3RmKQorICAgIHsKKyAgICAgIGlmICh0 YXJnZXRfZG9lc19zYXZlKQorCWVycm9yX25vX2FyZyAoXygiLXIgY2Fubm90 IGJlIHVzZWQgd2l0aCAtY3RmLiIpKTsKKyAgICAgIGN0Zl9zYXZlIChmaWxl bmFtZSk7CisgICAgfQorICBlbHNlCisgICAgdHJhY2Vfc2F2ZSAoZmlsZW5h bWUsIHRhcmdldF9kb2VzX3NhdmUpOwogCiAgIGlmIChmcm9tX3R0eSkKLSAg ICBwcmludGZfZmlsdGVyZWQgKF8oIlRyYWNlIGRhdGEgc2F2ZWQgdG8gZmls ZSAnJXMnLlxuIiksIGZpbGVuYW1lKTsKKyAgICBwcmludGZfZmlsdGVyZWQg KF8oIlRyYWNlIGRhdGEgc2F2ZWQgdG8gJXMgJyVzJy5cbiIpLAorCQkgICAg IGdlbmVyYXRlX2N0ZiA/ICJkaXJlY3RvcnkiIDogImZpbGUiLCBmaWxlbmFt ZSk7CiAKICAgZG9fY2xlYW51cHMgKGJhY2tfdG8pOwogfQpAQCAtNTI1MSw2 ICs1Mjc4LDcgQEAgX2luaXRpYWxpemVfdHJhY2Vwb2ludCAodm9pZCkKICAg YWRkX2NvbSAoInRzYXZlIiwgY2xhc3NfdHJhY2UsIHRyYWNlX3NhdmVfY29t bWFuZCwgXygiXAogU2F2ZSB0aGUgdHJhY2UgZGF0YSB0byBhIGZpbGUuXG5c CiBVc2UgdGhlICctcicgb3B0aW9uIHRvIGRpcmVjdCB0aGUgdGFyZ2V0IHRv IHNhdmUgZGlyZWN0bHkgdG8gdGhlIGZpbGUsXG5cCitVc2UgdGhlICctY3Rm JyBvcHRpb24gdG8gc2F2ZSB0aGUgZGF0YSB0byBDVEYgZm9ybWF0LFxuXAog dXNpbmcgaXRzIG93biBmaWxlc3lzdGVtLiIpKTsKIAogICBjID0gYWRkX2Nv bSAoInR2YXJpYWJsZSIsIGNsYXNzX3RyYWNlLCB0cmFjZV92YXJpYWJsZV9j b21tYW5kLF8oIlwKLS0tIGEvdHJhY2Vwb2ludC5oCisrKyBiL3RyYWNlcG9p bnQuaApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgInRhcmdldC5oIgog I2luY2x1ZGUgIm1lbXJhbmdlLmgiCiAjaW5jbHVkZSAiZ2RiX3ZlY3MuaCIK KyNpbmNsdWRlICJzdGFjay5oIgogCiAvKiBBIHRyYWNlIHN0YXRlIHZhcmlh YmxlIGlzIGEgdmFsdWUgbWFuYWdlZCBieSBhIHRhcmdldCBiZWluZwogICAg dHJhY2VkLiAgQSB0cmFjZSBzdGF0ZSB2YXJpYWJsZSAob3IgdHN2IGZvciBz aG9ydCkgY2FuIGJlIGFjY2Vzc2VkCkBAIC0yNDUsNiArMjQ2LDkgQEAgZXh0 ZXJuIHZvaWQgZW5jb2RlX2FjdGlvbnMgKHN0cnVjdCBicmVhawogZXh0ZXJu IHZvaWQgdmFsaWRhdGVfYWN0aW9ubGluZSAoY2hhciAqKiwgc3RydWN0IGJy ZWFrcG9pbnQgKik7CiBleHRlcm4gdm9pZCB2YWxpZGF0ZV90cmFjZV9zdGF0 ZV92YXJpYWJsZV9uYW1lIChjb25zdCBjaGFyICpuYW1lKTsKIAorZXh0ZXJu IHZvaWQgd2hpbGVfc3RlcHBpbmdfcHNldWRvY29tbWFuZCAoY2hhciAqYXJn cywgaW50IGZyb21fdHR5KTsKK2V4dGVybiB2b2lkIGNvbGxlY3RfcHNldWRv Y29tbWFuZCAoY2hhciAqYXJncywgaW50IGZyb21fdHR5KTsKKwogZXh0ZXJu IHN0cnVjdCB0cmFjZV9zdGF0ZV92YXJpYWJsZSAqZmluZF90cmFjZV9zdGF0 ZV92YXJpYWJsZSAoY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gc3RydWN0 IHRyYWNlX3N0YXRlX3ZhcmlhYmxlICpjcmVhdGVfdHJhY2Vfc3RhdGVfdmFy aWFibGUgKGNvbnN0IGNoYXIgKm5hbWUpOwogCkBAIC0yODgsNCArMjkyLDcg QEAgZXh0ZXJuIHN0cnVjdCB0cmFjZWZyYW1lX2luZm8gKnBhcnNlX3RyYQog ZXh0ZXJuIGludCB0cmFjZWZyYW1lX2F2YWlsYWJsZV9tZW1vcnkgKFZFQyht ZW1fcmFuZ2VfcykgKipyZXN1bHQsCiAJCQkJCUNPUkVfQUREUiBtZW1hZGRy LCBVTE9OR0VTVCBsZW4pOwogCitleHRlcm4gaW50IGFkZF9sb2NhbF9zeW1i b2xzXzEgKGludCB0eXBlLCBDT1JFX0FERFIgcGMsCisJCQkJaXRlcmF0ZV9v dmVyX2Jsb2NrX2FyZ19sb2NhbF92YXJzX2NiIGNiLAorCQkJCXZvaWQgKmNi X2RhdGEpOwogI2VuZGlmCS8qIFRSQUNFUE9JTlRfSCAqLwo= --f46d0444ea7d378fe404d60e7828--