From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17571 invoked by alias); 20 Dec 2012 08:13:11 -0000 Received: (qmail 17556 invoked by uid 22791); 20 Dec 2012 08:13:07 -0000 X-SWARE-Spam-Status: No, hits=-3.8 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KAM_STOCKGEN,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_CP,TW_EG,TW_RV,TW_TR X-Spam-Check-By: sourceware.org Received: from mail-oa0-f46.google.com (HELO mail-oa0-f46.google.com) (209.85.219.46) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 20 Dec 2012 08:12:56 +0000 Received: by mail-oa0-f46.google.com with SMTP id h16so3038841oag.5 for ; Thu, 20 Dec 2012 00:12:55 -0800 (PST) Received: by 10.182.192.68 with SMTP id he4mr7130466obc.99.1355991175900; Thu, 20 Dec 2012 00:12:55 -0800 (PST) MIME-Version: 1.0 Received: by 10.60.84.5 with HTTP; Thu, 20 Dec 2012 00:12:15 -0800 (PST) In-Reply-To: References: <50AC3217.6040608@mentor.com> <878v9k5g46.fsf@fleche.redhat.com> From: Hui Zhu Date: Thu, 20 Dec 2012 08:13: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=14dae9340b335bac6004d1444c2c 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: 2012-12/txt/msg00734.txt.bz2 --14dae9340b335bac6004d1444c2c Content-Type: text/plain; charset=ISO-8859-1 Content-length: 12147 On Tue, Dec 18, 2012 at 10:26 PM, Hui Zhu wrote: > On Fri, Dec 14, 2012 at 7:36 PM, Hui Zhu wrote: >> On Fri, Nov 30, 2012 at 4:06 AM, Tom Tromey wrote: >>>>>>>> "Hui" == Hui Zhu writes: >>> >>> Hui> This patch is for the CTF write. >>> Hui> It add "-ctf" to tsave command. With this option, tsave can save >>> Hui> current trace frame to CTF file format. >>> >>> 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. >> >> I added some comments in the new patches. >> >>> >>> Hui> +static void >>> Hui> +ctf_save_fwrite (FILE *fd, const gdb_byte *buf, size_t size) >>> Hui> +{ >>> Hui> + if (fwrite (buf, size, 1, fd) != 1) >>> Hui> + error (_("Unable to write file for saving trace data (%s)"), >>> Hui> + safe_strerror (errno)); >>> >>> Why not use the existing ui_file code? >>> >>> Then you could remove this function plus several others. >>> >>> Maybe it is because you need fseek, but that seems like a simple >>> addition to ui_file. >> >> I still not update this part because fseek patch is still not OK. >> And after discussion with Pedro, I was really worry about change to >> ui_file will make CTF write doesn't have error check. Could you help >> me with it? >> >>> >>> Hui> + case TYPE_CODE_ARRAY: >>> Hui> + for (; TYPE_CODE (type) == TYPE_CODE_ARRAY; >>> Hui> + type = TYPE_TARGET_TYPE (type)) >>> Hui> + ; >>> >>> You probably want some check_typedef calls in there. >> >> Because typedef will be handle as a type in this part, so this part >> doesn't need check_typedef. >> >>> >>> Hui> + ctf_save_type_name_write (tcsp, TYPE_FIELD_TYPE (type, biggest_id)); >>> >>> Here too. >> >> I think this part is same with array. >> >>> >>> Hui> + ctf_save_fwrite_format (tcsp->metadata_fd, "%s", TYPE_NAME (type)); >>> >>> What if TYPE_NAME is NULL? >> >> Add code handle it like TYPE_CODE_STRUCT. >> >>> >>> Hui> +static void >>> Hui> +ctf_save_type_size_write (struct ctf_save_s *tcsp, struct type *type) >>> Hui> +{ >>> Hui> + if (TYPE_CODE (type) == TYPE_CODE_ARRAY) >>> Hui> + { >>> Hui> + for (; TYPE_CODE (type) == TYPE_CODE_ARRAY; >>> Hui> + type = TYPE_TARGET_TYPE (type)) >>> >>> check_typedef >> >> This is function will call itself to post all the define of type to file. >> So It don't need check_typedef. >> >>> >>> Hui> + if (TYPE_NAME (type) && (strcmp (TYPE_NAME (type), "uint32_t") == 0 >>> Hui> + || strcmp (TYPE_NAME (type), "uint64_t") == 0)) >>> Hui> + return; >>> >>> check_typedef. >>> >>> Also it seems like this clause should go in the TYPE_CODE_INT case. >>> >>> Hui> + >>> Hui> + switch (TYPE_CODE (type)) >>> Hui> + { >>> Hui> + case TYPE_CODE_TYPEDEF: >>> Hui> + ctf_save_fwrite_format (tcsp->metadata_fd, "typedef "); >>> Hui> + ctf_save_var_define_write (tcsp, TYPE_TARGET_TYPE (type), >>> >>> check_typedef; though if your intent is to peel just a single layer, >>> then it is a bit trickier -- I think the best you can do is always call >>> it, then use TYPE_TARGET_TYPE if it is non-NULL or the result of >>> check_typedef otherwise. >> >> If use check_typedef, this part will generate the define that >> different with the type descriptor of the code. >> >> For example: >> Following is the define in the code: >> typedef char test_t1; >> typedef test_t1 test_t2; >> typedef test_t2 test_t3; >> >> If use TYPE_TARGET_TYPE, it will generate following metadata: >> typedef char test_t1; >> typedef test_t1 test_t2; >> typedef test_t2 test_t3; >> >> If use check_typedef, it will generate following metadata: >> typedef char test_t1; >> typedef char test_t2; >> typedef char test_t3; >> >>> >>> Hui> + tcsp->tab = tab; >>> [...] >>> Hui> + tcsp->tab = old_tab; >>> >>> No idea if it matters, but if an exception is thrown during the '...' >>> code, then the 'tab' field will be left set improperly. >> >> Please don't worry about this part. >> This tab always be set to local value in stack. So even if it is >> drop, it will not affect anything. >> >> For example: >> char tab[256]; >> const char *old_tab; >> >> old_tab = tcsp->tab; >> snprintf (tab, 256, "%s\t", old_tab); >> tcsp->tab = tab; >> [...] >> tcsp->tab = old_tab; >> >>> >>> Hui> + case TYPE_CODE_PTR: >>> Hui> + align_size = TYPE_LENGTH (type); >>> Hui> + break; >>> >>> Surely the alignment rules are ABI dependent. >>> I would guess that what you have will work in many cases, but definitely >>> not all of them. >> >> All the type will be handle and record in function >> ctf_save_type_check_and_write. >> The size align will be handle in this function too. >> >>> >>> 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")); >>> >>> These messages could be improved. >>> >>> Hui> + warning (_("\ >>> Hui> +Not save \"%s\" of tracepoint %d to ctf file because get its value fail: %s"), >>> Hui> + str, tps->tp->base.number, e.message); >>> >>> Likewise. >> >> Could you help me with this part? :) >> >>> >>> Hui> + /* XXX: no sure about variable_length >>> Hui> + and need set is_variable_length if need. */ >>> Hui> + collect->align_size = align_size; >>> Hui> + if (collect->align_size > tps->align_size) >>> Hui> + tps->align_size = collect->align_size; >>> >>> No new FIXME comments. >>> Can you find the answer to this question and either fix the code or drop >>> the comment? >> >> Fixed. >> >>> >>> Hui> + char name[strlen (print_name) + 1]; >>> >>> I think you need an explicit alloca here. >>> Or xmalloc + xfree, which is probably better. >> >> Fixed. >> >>> >>> Although, this approach just seems weird, since it seems like you >>> already have the symbol and you want its value; constructing and parsing >>> an expression to get this is very roundabout. >>> >>> I'm not sure I really understand the goal here; but the parsing approach >>> is particularly fragile if you have shadowing. >> >> Function ctf_save_collect_get will parse the collect string and add >> them to struct. >> Each tracepoint will call this function just once. >> >> The code that try to get the value is in function ctf_save: >> back_chain = make_cleanup (null_cleanup, NULL); >> TRY_CATCH (e, RETURN_MASK_ERROR) >> { >> val = evaluate_expression (collect->expr); >> content = value_contents (val); >> } >> Could you tell me some better way? >> >>> >>> Hui> + iterate_over_block_local_vars (block, >>> Hui> + tsv_save_do_loc_arg_collect, >>> Hui> + &cb_data); >>> >>> Why just iterate over this block and not the enclosing ones as well? >>> >>> Hmm, a lot of this code looks like code from tracepoint.c. >>> I think it would be better to share the code if that is possible. >> >> I tried to share code with function add_local_symbols. But it is not >> a big function and use different way to get block. >> >>> >>> Hui> +static char * >>> Hui> +ctf_save_metadata_change_char (struct ctf_save_s *tcsp, char *ctf_str, >>> Hui> + int i, const char *str) >>> Hui> +{ >>> Hui> + char *new; >>> Hui> + >>> Hui> + new = xmalloc (strlen (ctf_str) + (i ? 1 : 0) + strlen (str) + 1 - 1); >>> Hui> + ctf_str[i] = '\0'; >>> Hui> + sprintf (new, "%s%s%s_%s", ctf_str, (i ? "_" : ""), str, ctf_str + i + 1); >>> >>> Just use xstrprintf. >> >> Fixed. >> >>> >>> Hui> +static void >>> Hui> +ctf_save_do_nothing (void *p) >>> Hui> +{ >>> Hui> +} >>> >>> Use null_cleanup instead. >> >> Fixed. >> >>> >>> Hui> + if (collect->expr) >>> Hui> + free_current_contents (&collect->expr); >>> >>> Why free_current_contents here? >>> That seems weird. >> >> If this collect is $_ret, it will not have collect->expr. >> Or maybe this collect will be free because when setup this collect get error. >> So check it before free it. >> >>> >>> Hui> + char file_name[strlen (dirname) + 1 + strlen (CTF_DATASTREAM_NAME) + 1]; >>> >>> alloca or malloc. >> >> Fixed. >> >>> >>> Hui> + sprintf (file_name, "%s/%s", dirname, CTF_METADATA_NAME); >>> Hui> + tcs.metadata_fd = fopen (file_name, "w"); >>> Hui> + if (!tcs.metadata_fd) >>> Hui> + error (_("Unable to open file '%s' for saving trace data (%s)"), >>> Hui> + file_name, safe_strerror (errno)); >>> Hui> + ctf_save_metadata_header (&tcs); >>> Hui> + >>> Hui> + sprintf (file_name, "%s/%s", dirname, CTF_DATASTREAM_NAME); >>> Hui> + tcs.datastream_fd = fopen (file_name, "w"); >>> Hui> + if (!tcs.datastream_fd) >>> Hui> + error (_("Unable to open file '%s' for saving trace data (%s)"), >>> Hui> + file_name, safe_strerror (errno)); >>> >>> On error these files will be left partially written. >>> Is that intentional? >> >> What my thought about this part is even if GDB get error when CTF >> save, the data before this error is OK. So in clean up function >> ctf_save_cleanup, it will not remove this file. And it will write the >> data that don't have error, function ctf_save_metadata (tcsp). >> >>> >>> Hui> +extern void ctf_save (char *dirname); >>> >>> Why not const? >>> This applies in a few spots in the patch. >> >> Fixed. >> >>> >>> Hui> @@ -2465,6 +2466,7 @@ void >>> Hui> mi_cmd_trace_save (char *command, char **argv, int argc) >>> [...] >>> Hui> + if (strcmp (argv[0], "-ctf") == 0) >>> Hui> + generate_ctf = 1; >>> >>> The 'usage' line needs an update. >> >> Fixed. >> >>> >>> Hui> + if (generate_ctf) >>> Hui> + ctf_save (filename); >>> Hui> + else >>> Hui> + trace_save (filename, target_saves); >>> >>> I don't understand why CTF isn't just an option to trace_save -- share >>> the trace-dependent work, separate out the formatting. >>> >> >> I separate read and write CTF support function because: >> CTF format is a complex format. I tried to support all of it but I failed. >> Then I changed to use libbabeltrace, it works very good with read CTF. >> But it doesn't supply API for CTF write. And I discussion the >> developer of libbabeltrace, they said they don't have plan for that. >> So I add CTF write function inside GDB with my hand. And because CTF >> is design for tracepoint support. So it is really fit with tsave >> command. So I add it as an option. >> >>> Hui> trace_save_command (char *args, int from_tty) >>> Hui> { >>> Tom >> >> Thanks for your comments. I post a new version. >> >> Best, >> Hui > > Hi Tom, > > I post a patch that updated according to the update of trunk. > > Thanks, > Hui > > > 2012-12-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. > * 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 (collect_pseudocommand): Add extern. Hi Tom, When I tried to fixed the format issue of target ctf patch, I found that this patch has some format issue too. So I post a new version that fixed these issues. Thanks, Hui 2012-12-20 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 (collect_pseudocommand): Add extern. --14dae9340b335bac6004d1444c2c 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_haxm3on31 Content-length: 50578 LS0tIGEvTWFrZWZpbGUuaW4KKysrIGIvTWFrZWZpbGUuaW4KQEAgLTUwOCw3 ICs1MDgsNyBAQCBTRVJfSEFSRFdJUkUgPSBAU0VSX0hBUkRXSVJFQAogIyBU aGUgYHJlbW90ZScgZGVidWdnaW5nIHRhcmdldCBpcyBzdXBwb3J0ZWQgZm9y IG1vc3QgYXJjaGl0ZWN0dXJlcywKICMgYnV0IG5vdCBhbGwgKGUuZy4gOTYw KQogUkVNT1RFX09CUyA9IHJlbW90ZS5vIGRjYWNoZS5vIHRyYWNlcG9pbnQu byBheC1nZW5lcmFsLm8gYXgtZ2RiLm8gcmVtb3RlLWZpbGVpby5vIFwKLQly ZW1vdGUtbm90aWYubworCXJlbW90ZS1ub3RpZi5vIGN0Zi5vCiAKICMgVGhp cyBpcyByZW1vdGUtc2ltLm8gaWYgYSBzaW11bGF0b3IgaXMgdG8gYmUgbGlu a2VkIGluLgogU0lNX09CUyA9IEBTSU1fT0JTQApAQCAtNzU0LDcgKzc1NCw3 IEBAIFNGSUxFUyA9IGFkYS1leHAueSBhZGEtbGFuZy5jIGFkYS10eXBlcHIK IAlyZWdzZXQuYyBzb2wtdGhyZWFkLmMgd2luZG93cy10ZXJtY2FwLmMgXAog CWNvbW1vbi9nZGJfdmVjcy5jIGNvbW1vbi9jb21tb24tdXRpbHMuYyBjb21t b24veG1sLXV0aWxzLmMgXAogCWNvbW1vbi9wdGlkLmMgY29tbW9uL2J1ZmZl ci5jIGdkYi1kbGZjbi5jIGNvbW1vbi9hZ2VudC5jIFwKLQljb21tb24vZm9y bWF0LmMKKwljb21tb24vZm9ybWF0LmMgY3RmLmMKIAogTElOVEZJTEVTID0g JChTRklMRVMpICQoWVlGSUxFUykgJChDT05GSUdfU1JDUykgaW5pdC5jCiAK QEAgLTgzMCw3ICs4MzAsNyBAQCBnbnVsaWIvaW1wb3J0L3N0ZGRlZi5pbi5o IGdudWxpYi9pbXBvcnQvCiBjb21tb24vY29tbW9uLXV0aWxzLmggY29tbW9u L3htbC11dGlscy5oIGNvbW1vbi9idWZmZXIuaCBjb21tb24vcHRpZC5oIFwK IGNvbW1vbi9mb3JtYXQuaCBjb21tb24vaG9zdC1kZWZzLmggdXRpbHMuaCBj b21tb24vcXVldWUuaCBcCiBjb21tb24vbGludXgtb3NkYXRhLmggZ2RiLWRs ZmNuLmggYXV0by1sb2FkLmggcHJvYmUuaCBzdGFwLXByb2JlLmggXAotZ2Ri X2JmZC5oIHNwYXJjLXJhdmVuc2Nhci10aHJlYWQuaCBwcGMtcmF2ZW5zY2Fy LXRocmVhZC5oCitnZGJfYmZkLmggc3BhcmMtcmF2ZW5zY2FyLXRocmVhZC5o IHBwYy1yYXZlbnNjYXItdGhyZWFkLmggY3RmLmgKIAogIyBIZWFkZXIgZmls ZXMgdGhhdCBhbHJlYWR5IGhhdmUgc3JjZGlyIGluIHRoZW0sIG9yIHdoaWNo IGFyZSBpbiBvYmpkaXIuCiAKLS0tIC9kZXYvbnVsbAorKysgYi9jdGYuYwpA QCAtMCwwICsxLDEyMzcgQEAKKy8qIENURiBmb3JtYXQgc3VwcG9ydC4KKwor ICAgQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJkZWZzLmgi CisjaW5jbHVkZSAiY3RmLmgiCisjaW5jbHVkZSAidHJhY2Vwb2ludC5oIgor I2luY2x1ZGUgInJlZ2NhY2hlLmgiCisjaW5jbHVkZSAiZ2RiY21kLmgiCisj aW5jbHVkZSAiZXhjZXB0aW9ucy5oIgorI2luY2x1ZGUgInN0YWNrLmgiCisK KyNpbmNsdWRlIDxjdHlwZS5oPgorCisvKiBGb2xsb3dpbmcgcGFydCBpcyBm b3IgdHNhdmUuICAqLworCisjZGVmaW5lIENURl9NQUdJQwkJMHhDMUZDMUZD MQorI2RlZmluZSBDVEZfU0FWRV9NQUpPUgkJMQorI2RlZmluZSBDVEZfU0FW RV9NSU5PUgkJOAorCisjZGVmaW5lIENURl9NRVRBREFUQV9OQU1FCSJtZXRh ZGF0YSIKKyNkZWZpbmUgQ1RGX0RBVEFTVFJFQU1fTkFNRQkiZGF0YXN0cmVh bSIKKworI2RlZmluZSBDVEZfUEFDS0VUX1NJWkUJCTQwOTYKKworI2RlZmlu ZSBBTElHTl9TSVpFKHNpemUsIGFsaWduKSBcCisJKCgoKGFsaWduKSArIChz aXplKSAtIDEpICYgKH4oKGFsaWduKSAtIDEpKSkgLSAoc2l6ZSkpCisKK3N0 cnVjdCBjdGZfc2F2ZV9jb2xsZWN0X3MKK3sKKyAgc3RydWN0IGN0Zl9zYXZl X2NvbGxlY3RfcyAqbmV4dDsKKyAgY2hhciAqc3RyOworICBjaGFyICpjdGZf c3RyOworICBpbnQgYWxpZ25fc2l6ZTsKKyAgc3RydWN0IGV4cHJlc3Npb24g KmV4cHI7CisgIHN0cnVjdCB0eXBlICp0eXBlOworICBpbnQgaXNfcmV0Owor fTsKKworc3RydWN0IGN0Zl9zYXZlX3RwX3MKK3sKKyAgc3RydWN0IGN0Zl9z YXZlX3RwX3MgKm5leHQ7CisgIHN0cnVjdCB0cmFjZXBvaW50ICp0cDsKKyAg aW50IHN0ZXBwaW5nX2ZyYW1lOworICBzdHJ1Y3QgY3RmX3NhdmVfY29sbGVj dF9zICpjb2xsZWN0OworICBpbnQgYWxpZ25fc2l6ZTsKKyAgaW50IGlzX3Zh cmlhYmxlX2xlbmd0aDsKKyAgaW50IGlzX2Ryb3BwZWQ7Cit9OworCitzdHJ1 Y3QgY3RmX3NhdmVfdHlwZV9zCit7CisgIHN0cnVjdCBjdGZfc2F2ZV90eXBl X3MgKm5leHQ7CisgIHN0cnVjdCB0eXBlICp0eXBlOworfTsKKworc3RydWN0 IGN0Zl9zYXZlX3MKK3sKKyAgRklMRSAqbWV0YWRhdGFfZmQ7CisgIEZJTEUg KmRhdGFzdHJlYW1fZmQ7CisKKyAgLyogVGhpcyBpcyB0aGUgY29udGVudCBz aXplIG9mIGN1cnJlbnQgcGFja2V0LiAgKi8KKyAgc2l6ZV90IGNvbnRlbnRf c2l6ZTsKKworICAvKiBUaGlzIGlzIHRoZSBiZWdpbiBvZmZzZXQgb2YgY3Vy cmVudCBwYWNrZXQuICAqLworICBsb25nIHBhY2tldF9iZWdpbjsKKworICAv KiBJZiB0cnVlLCBuZWVkIGNoZWNrIGlmIGNvbnRlbnRfc2l6ZSBiaWdnZXIg dGhhbiBDVEZfUEFDS0VUX1NJWkUuICAqLworICBpbnQgY2hlY2tfc2l6ZTsK KworICAvKiBUaGlzIGlzIHRoZSBjb250ZW50IHNpemUgb2YgY3VycmVudCBw YWNrZXQgYW5kIGV2ZW50IHRoYXQgaXMKKyAgICAgYmVpbmcgd3JpdHRlbiB0 byBmaWxlLgorICAgICBDaGVjayBzaXplIHVzZSBpdC4gICovCisgIHNpemVf dCBjdXJyZW50X2NvbnRlbnRfc2l6ZTsKKworICAvKiBTYXZlIHRoZSBudW1i ZXIgb2YgdHJhY2UgZnJhbWUgYmVmb3JlIGNhbGwgY3RmX3NhdmUuCisgICAg IFNldCBpdCBiYWNrIHdoZW4gcmV0dXJuIGN0Zl9zYXZlLiAgKi8KKyAgaW50 IG9sZF90cmFjZWZyYW1lX251bTsKKworICAvKiBUcmFjZXBvaW50IGxpc3Qu ICAqLworICBzdHJ1Y3QgY3RmX3NhdmVfdHBfcyAqdHA7CisKKyAgLyogVHlw ZSBsaXN0LiAgKi8KKyAgc3RydWN0IGN0Zl9zYXZlX3R5cGVfcyAqdHlwZTsK KworICBjb25zdCBjaGFyICp0YWI7Cit9OworCitzdGF0aWMgdm9pZAorY3Rm X3NhdmVfZndyaXRlIChGSUxFICpmZCwgY29uc3QgZ2RiX2J5dGUgKmJ1Ziwg c2l6ZV90IHNpemUpCit7CisgIGlmIChmd3JpdGUgKGJ1Ziwgc2l6ZSwgMSwg ZmQpICE9IDEpCisgICAgZXJyb3IgKF8oIlVuYWJsZSB0byB3cml0ZSBmaWxl IGZvciBzYXZpbmcgdHJhY2UgZGF0YSAoJXMpIiksCisJICAgc2FmZV9zdHJl cnJvciAoZXJybm8pKTsKK30KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX2Z3 cml0ZV9mb3JtYXRfMSAoRklMRSAqZmQsIGNvbnN0IGNoYXIgKmZvcm1hdCwg dmFfbGlzdCBhcmdzKQoreworICBjaGFyICpsaW5lYnVmZmVyOworICBzdHJ1 Y3QgY2xlYW51cCAqb2xkX2NsZWFudXBzOworCisgIGxpbmVidWZmZXIgPSB4 c3RydnByaW50ZiAoZm9ybWF0LCBhcmdzKTsKKyAgb2xkX2NsZWFudXBzID0g bWFrZV9jbGVhbnVwICh4ZnJlZSwgbGluZWJ1ZmZlcik7CisgIGN0Zl9zYXZl X2Z3cml0ZSAoZmQsIGxpbmVidWZmZXIsIHN0cmxlbiAobGluZWJ1ZmZlcikp OworICBkb19jbGVhbnVwcyAob2xkX2NsZWFudXBzKTsKK30KKworc3RhdGlj IHZvaWQKK2N0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKEZJTEUgKmZkLCBjb25z dCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworCisg IHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworICBjdGZfc2F2ZV9md3JpdGVf Zm9ybWF0XzEgKGZkLCBmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3Mp OworfQorCitzdGF0aWMgaW50CitjdGZfc2F2ZV93cml0ZSAoc3RydWN0IGN0 Zl9zYXZlX3MgKnRjc3AsIGNvbnN0IGdkYl9ieXRlICpidWYsIHNpemVfdCBz aXplKQoreworICBpZiAodGNzcC0+Y2hlY2tfc2l6ZSkKKyAgICB7CisgICAg ICBpZiAodGNzcC0+Y3VycmVudF9jb250ZW50X3NpemUgKyBzaXplID4gQ1RG X1BBQ0tFVF9TSVpFKQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisg IGN0Zl9zYXZlX2Z3cml0ZSAodGNzcC0+ZGF0YXN0cmVhbV9mZCwgYnVmLCBz aXplKTsKKworICB0Y3NwLT5jdXJyZW50X2NvbnRlbnRfc2l6ZSArPSBzaXpl OworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitjdGZfc2F2ZV9m c2VlayAoc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3AsIGxvbmcgb2Zmc2V0LCBp bnQgd2hlbmNlKQoreworICBpZiAod2hlbmNlID09IFNFRUtfQ1VSICYmIHRj c3AtPmNoZWNrX3NpemUpCisgICAgeworICAgICAgaWYgKHRjc3AtPmN1cnJl bnRfY29udGVudF9zaXplICsgb2Zmc2V0ID4gQ1RGX1BBQ0tFVF9TSVpFKQor ICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGlmIChmc2VlayAodGNz cC0+ZGF0YXN0cmVhbV9mZCwgb2Zmc2V0LCB3aGVuY2UpKQorICAgIGVycm9y IChfKCJVbmFibGUgdG8gc2VlayBmaWxlIGZvciBzYXZpbmcgdHJhY2UgZGF0 YSAoJXMpIiksCisJICAgc2FmZV9zdHJlcnJvciAoZXJybm8pKTsKKworICBp ZiAod2hlbmNlID09IFNFRUtfQ1VSKQorICAgIHRjc3AtPmN1cnJlbnRfY29u dGVudF9zaXplICs9IG9mZnNldDsKKworICByZXR1cm4gMDsKK30KKworc3Rh dGljIGludAorY3RmX3NhdmVfYWxpZ25fd3JpdGUgKHN0cnVjdCBjdGZfc2F2 ZV9zICp0Y3NwLCBjb25zdCBnZGJfYnl0ZSAqYnVmLAorCQkgICAgICBzaXpl X3Qgc2l6ZSwgc2l6ZV90IGFsaWduX3NpemUpCit7CisgIGlmIChjdGZfc2F2 ZV9mc2VlayAodGNzcCwKKwkJICAgICAgQUxJR05fU0laRSAodGNzcC0+Y3Vy cmVudF9jb250ZW50X3NpemUsIGFsaWduX3NpemUpLAorCQkgICAgICBTRUVL X0NVUikpCisgICAgcmV0dXJuIC0xOworCisgIGlmIChjdGZfc2F2ZV93cml0 ZSAodGNzcCwgYnVmLCBzaXplKSkKKyAgICByZXR1cm4gLTE7CisKKyAgcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGN0Zl9zYXZlX3R5cGVfZGVmaW5l X3dyaXRlIChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCwKKwkJCQkJc3RydWN0 IHR5cGUgKnR5cGUpOworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfdHlwZV9u YW1lX3dyaXRlIChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCwgc3RydWN0IHR5 cGUgKnR5cGUpCit7CisgIHN3aXRjaCAoVFlQRV9DT0RFICh0eXBlKSkKKyAg ICB7CisgICAgY2FzZSBUWVBFX0NPREVfQVJSQVk6CisgICAgICBmb3IgKDsg VFlQRV9DT0RFICh0eXBlKSA9PSBUWVBFX0NPREVfQVJSQVk7CisJICAgdHlw ZSA9IFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpKQorCTsKKyAgICAgIGlmIChU WVBFX05BTUUgKHR5cGUpKQorICAgICAgICBjdGZfc2F2ZV9md3JpdGVfZm9y bWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgIiVzIiwgVFlQRV9OQU1FICh0eXBl KSk7CisgICAgICBlbHNlCisJY3RmX3NhdmVfdHlwZV9kZWZpbmVfd3JpdGUg KHRjc3AsIHR5cGUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFRZUEVf Q09ERV9QVFI6CisgICAgICBpZiAoVFlQRV9MRU5HVEggKHR5cGUpID09IDgp CisJY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQs ICJ1aW50NjRfdCIpOworICAgICAgZWxzZQorCWN0Zl9zYXZlX2Z3cml0ZV9m b3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAidWludDMyX3QiKTsKKyAgICAg IGJyZWFrOworCisgICAgY2FzZSBUWVBFX0NPREVfU1RSVUNUOgorICAgIGNh c2UgVFlQRV9DT0RFX0VOVU06CisgICAgICBpZiAoVFlQRV9UQUdfTkFNRSAo dHlwZSkpCisgICAgICAgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3At Pm1ldGFkYXRhX2ZkLCAiJXMgJXMiLAorCQkJCVRZUEVfQ09ERSAodHlwZSkg PT0gVFlQRV9DT0RFX1NUUlVDVCA/CisJCQkJInN0cnVjdCIgOiAiZW51bSIs CisJCQkJVFlQRV9UQUdfTkFNRSAodHlwZSkpOworICAgICAgZWxzZQorCWN0 Zl9zYXZlX3R5cGVfZGVmaW5lX3dyaXRlICh0Y3NwLCB0eXBlKTsKKyAgICAg IGJyZWFrOworCisgICAgY2FzZSBUWVBFX0NPREVfVU5JT046CisgICAgICB7 CisJaW50IGksIGJpZ2dlc3RfaWQsIGJpZ2dlc3Rfc2l6ZSA9IDA7CisKKwlm b3IgKGkgPSAwOyBpIDwgVFlQRV9ORklFTERTICh0eXBlKTsgKytpKQorCSAg eworCSAgICBpZiAoYmlnZ2VzdF9zaXplIDwgVFlQRV9MRU5HVEggKFRZUEVf RklFTERfVFlQRSAodHlwZSwgaSkpKQorCSAgICAgIHsKKwkJYmlnZ2VzdF9z aXplID0gVFlQRV9MRU5HVEggKFRZUEVfRklFTERfVFlQRSAodHlwZSwgaSkp OworCQliaWdnZXN0X2lkID0gaTsKKwkgICAgICB9CisJICB9CisJY3RmX3Nh dmVfdHlwZV9uYW1lX3dyaXRlICh0Y3NwLCBUWVBFX0ZJRUxEX1RZUEUgKHR5 cGUsIGJpZ2dlc3RfaWQpKTsKKwlicmVhazsKKyAgICAgIH0KKworICAgIGRl ZmF1bHQ6CisgICAgICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5t ZXRhZGF0YV9mZCwgIiVzIiwgVFlQRV9OQU1FICh0eXBlKSk7CisgICAgICBi cmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitjdGZfc2F2ZV90eXBl X3NpemVfd3JpdGUgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwLCBzdHJ1Y3Qg dHlwZSAqdHlwZSkKK3sKKyAgaWYgKFRZUEVfQ09ERSAodHlwZSkgPT0gVFlQ RV9DT0RFX0FSUkFZKQorICAgIHsKKyAgICAgIGZvciAoOyBUWVBFX0NPREUg KHR5cGUpID09IFRZUEVfQ09ERV9BUlJBWTsKKwkgICB0eXBlID0gVFlQRV9U QVJHRVRfVFlQRSAodHlwZSkpCisJY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAo dGNzcC0+bWV0YWRhdGFfZmQsICJbJWRdIiwKKwkJCQlUWVBFX0xFTkdUSCAo dHlwZSkgLworCQkJCVRZUEVfTEVOR1RIIChUWVBFX1RBUkdFVF9UWVBFICh0 eXBlKSkpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX3Zh cl9kZWZpbmVfd3JpdGUgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwLCBzdHJ1 Y3QgdHlwZSAqdHlwZSwKKwkJCSAgIGNvbnN0IGNoYXIgKm5hbWUpCit7Cisg IGN0Zl9zYXZlX3R5cGVfbmFtZV93cml0ZSAodGNzcCwgdHlwZSk7CisgIGN0 Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiICVz IiwgbmFtZSk7CisgIGN0Zl9zYXZlX3R5cGVfc2l6ZV93cml0ZSAodGNzcCwg dHlwZSk7CisgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFk YXRhX2ZkLCAiO1xuIik7Cit9CisKKy8qIFdyaXRlIFRZUEUgdG8gVENTUC0+ bWV0YWRhdGFfZmQuICAqLworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfdHlw ZV9kZWZpbmVfd3JpdGUgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwLCBzdHJ1 Y3QgdHlwZSAqdHlwZSkKK3sKKyAgc3RydWN0IGN0Zl9zYXZlX3R5cGVfcyAq dDsKKworICBmb3IgKHQgPSB0Y3NwLT50eXBlOyB0OyB0ID0gdC0+bmV4dCkK KyAgICB7CisgICAgICBpZiAodC0+dHlwZSA9PSB0eXBlKQorCXJldHVybjsK KyAgICB9CisKKyAgdCA9IChzdHJ1Y3QgY3RmX3NhdmVfdHlwZV9zICopIHhj YWxsb2MgKDEsIHNpemVvZiAoKnQpKTsKKyAgdC0+dHlwZSA9IHR5cGU7CisK KyAgdC0+bmV4dCA9IHRjc3AtPnR5cGU7CisgIHRjc3AtPnR5cGUgPSB0Owor CisgIC8qIElnbm9yZSB0eXBlIHVpbnQzMl90IGFuZCB1aW50NjRfdCBiZWNh dXNlIHRoZXkgaGF2ZSB3cml0dGVuCisgICAgIGluIGZ1bmN0aW9uIGN0Zl9z YXZlX21ldGFkYXRhX2hlYWRlci4gICovCisgIGlmIChUWVBFX05BTUUgKHR5 cGUpICYmIChzdHJjbXAgKFRZUEVfTkFNRSAodHlwZSksICJ1aW50MzJfdCIp ID09IDAKKwkJCSAgIHx8IHN0cmNtcCAoVFlQRV9OQU1FICh0eXBlKSwgInVp bnQ2NF90IikgPT0gMCkpCisgICAgcmV0dXJuOworCisgIHN3aXRjaCAoVFlQ RV9DT0RFICh0eXBlKSkKKyAgICB7CisgICAgICBjYXNlIFRZUEVfQ09ERV9U WVBFREVGOgorCWN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFk YXRhX2ZkLCAidHlwZWRlZiAiKTsKKwljdGZfc2F2ZV92YXJfZGVmaW5lX3dy aXRlICh0Y3NwLCBUWVBFX1RBUkdFVF9UWVBFICh0eXBlKSwKKwkJCQkgICBU WVBFX05BTUUgKHR5cGUpKTsKKwlicmVhazsKKworICAgICAgY2FzZSBUWVBF X0NPREVfSU5UOgorCWN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1l dGFkYXRhX2ZkLCAiXAordHlwZWFsaWFzIGludGVnZXIgeyBzaXplID0gJWQ7 IGFsaWduID0gJWQ7IHNpZ25lZCA9ICVzOyB9IDo9ICVzO1xuIiwKKwkJCQlU WVBFX0xFTkdUSCAodHlwZSkgKiBUQVJHRVRfQ0hBUl9CSVQsCisJCQkJVFlQ RV9MRU5HVEggKHR5cGUpICogVEFSR0VUX0NIQVJfQklULAorCQkJCSFUWVBF X1VOU0lHTkVEICh0eXBlKSA/ICJ0cnVlIiA6ICJmYWxzZSIsCisJCQkJVFlQ RV9OQU1FICh0eXBlKSk7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgVFlQRV9D T0RFX1NUUlVDVDoKKyAgICAgIGNhc2UgVFlQRV9DT0RFX0VOVU06CisgICAg ICAgIHsKKwkgIGludCBpOworCSAgY2hhciB0YWJbMjU2XTsKKwkgIGNvbnN0 IGNoYXIgKm9sZF90YWI7CisKKwkgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQg KHRjc3AtPm1ldGFkYXRhX2ZkLCAiJXMgJXMge1xuIiwKKwkJCQkgIFRZUEVf Q09ERSAodHlwZSkgPT0gVFlQRV9DT0RFX1NUUlVDVCA/CisJCQkJICAic3Ry dWN0IiA6ICJlbnVtIiwKKwkJCQkgIFRZUEVfVEFHX05BTUUgKHR5cGUpID8g VFlQRV9UQUdfTkFNRSAodHlwZSkKKwkJCQkJCSAgICAgICA6ICIiKTsKKwor CSAgb2xkX3RhYiA9IHRjc3AtPnRhYjsKKwkgIHNucHJpbnRmICh0YWIsIDI1 NiwgIiVzXHQiLCBvbGRfdGFiKTsKKwkgIHRjc3AtPnRhYiA9IHRhYjsKKwkg IGZvciAoaSA9IDA7IGkgPCBUWVBFX05GSUVMRFMgKHR5cGUpOyArK2kpCisJ ICAgIHsKKwkgICAgICBpZiAoVFlQRV9DT0RFICh0eXBlKSA9PSBUWVBFX0NP REVfU1RSVUNUKQorCSAgICAgICAgeworCQkgIGN0Zl9zYXZlX2Z3cml0ZV9m b3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCB0Y3NwLT50YWIpOworCQkgIGN0 Zl9zYXZlX3Zhcl9kZWZpbmVfd3JpdGUgKHRjc3AsIFRZUEVfRklFTERfVFlQ RSAodHlwZSwgaSksCisJCQkJCSAgICAgVFlQRV9GSUVMRF9OQU1FICh0eXBl LCBpKSk7CisJCX0KKwkgICAgICBlbHNlCisJCWN0Zl9zYXZlX2Z3cml0ZV9m b3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiJXMlcyA9ICVzLFxuIiwKKwkJ CQkJdGNzcC0+dGFiLCBUWVBFX0ZJRUxEX05BTUUgKHR5cGUsIGkpLAorCQkJ CQlwbG9uZ2VzdCAoVFlQRV9GSUVMRF9FTlVNVkFMICh0eXBlLCBpKSkpOwor CSAgICB9CisJICB0Y3NwLT50YWIgPSBvbGRfdGFiOworCSAgY3RmX3NhdmVf ZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsICIlc30iLCB0Y3Nw LT50YWIpOworCSAgaWYgKFRZUEVfVEFHX05BTUUgKHR5cGUpKQorCSAgICBj dGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgIjtc biIpOworCSAgYnJlYWs7CisJfQorICAgIH0KK30KKworLyogQ2hlY2sgaWYg dGhpcyB0eXBlIGlzIHN1cHBvcnQgYnkgR0RCLgorICAgUmV0dXJuIHRoZSBh bGlnbiBzaXplLiAgKi8KKworc3RhdGljIGludAorY3RmX3NhdmVfdHlwZV9j aGVja19hbmRfd3JpdGUgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwLCBzdHJ1 Y3QgdHlwZSAqdHlwZSkKK3sKKyAgaW50IGFsaWduX3NpemUgPSAwOworCisg IHN3aXRjaCAoVFlQRV9DT0RFICh0eXBlKSkKKyAgICB7CisgICAgICBjYXNl IFRZUEVfQ09ERV9UWVBFREVGOgorCWFsaWduX3NpemUgPSBjdGZfc2F2ZV90 eXBlX2NoZWNrX2FuZF93cml0ZSAodGNzcCwKKwkJCQkJCSAgICBUWVBFX1RB UkdFVF9UWVBFICh0eXBlKSk7CisJaWYgKGFsaWduX3NpemUgPCAwKQorCSAg cmV0dXJuIGFsaWduX3NpemU7CisJY3RmX3NhdmVfdHlwZV9kZWZpbmVfd3Jp dGUgKHRjc3AsIHR5cGUpOworCWJyZWFrOworCisgICAgICBjYXNlIFRZUEVf Q09ERV9BUlJBWToKKwlhbGlnbl9zaXplID0gY3RmX3NhdmVfdHlwZV9jaGVj a19hbmRfd3JpdGUgKHRjc3AsCisJCQkJCQkgICAgVFlQRV9UQVJHRVRfVFlQ RSAodHlwZSkpOworCWlmIChhbGlnbl9zaXplIDwgMCkKKwkgIHJldHVybiBh bGlnbl9zaXplOworCWJyZWFrOworCisgICAgICBjYXNlIFRZUEVfQ09ERV9J TlQ6CisJY3RmX3NhdmVfdHlwZV9kZWZpbmVfd3JpdGUgKHRjc3AsIHR5cGUp OworCWFsaWduX3NpemUgPSBUWVBFX0xFTkdUSCAodHlwZSk7CisJYnJlYWs7 CisKKyAgICAgIGNhc2UgVFlQRV9DT0RFX1BUUjoKKwlhbGlnbl9zaXplID0g VFlQRV9MRU5HVEggKHR5cGUpOworCWJyZWFrOworCisgICAgICBjYXNlIFRZ UEVfQ09ERV9TVFJVQ1Q6CisgICAgICAgIHsKKwkgIGludCBpLCBzX2FsaWdu X3NpemU7CisKKwkgIGZvciAoaSA9IDA7IGkgPCBUWVBFX05GSUVMRFMgKHR5 cGUpOyArK2kpCisJICAgIHsKKwkgICAgICBzX2FsaWduX3NpemUKKwkJICA9 IGN0Zl9zYXZlX3R5cGVfY2hlY2tfYW5kX3dyaXRlICh0Y3NwLAorCQkJCQkJ ICAgVFlQRV9GSUVMRF9UWVBFICh0eXBlLCBpKSk7CisJICAgICAgaWYgKHNf YWxpZ25fc2l6ZSA8IDApCisJCXJldHVybiBzX2FsaWduX3NpemU7CisKKwkg ICAgICBpZiAoYWxpZ25fc2l6ZSA8IHNfYWxpZ25fc2l6ZSkKKwkJYWxpZ25f c2l6ZSA9IHNfYWxpZ25fc2l6ZTsKKwkgICAgfQorCSAgaWYgKFRZUEVfVEFH X05BTUUgKHR5cGUpKQorCSAgICBjdGZfc2F2ZV90eXBlX2RlZmluZV93cml0 ZSAodGNzcCwgdHlwZSk7CisJICBicmVhazsKKwl9CisKKyAgICAgIGNhc2Ug VFlQRV9DT0RFX0VOVU06CisJYWxpZ25fc2l6ZSA9IFRZUEVfTEVOR1RIICh0 eXBlKTsKKwlpZiAoVFlQRV9UQUdfTkFNRSAodHlwZSkpCisJICBjdGZfc2F2 ZV90eXBlX2RlZmluZV93cml0ZSAodGNzcCwgdHlwZSk7CisJYnJlYWs7CisK KyAgICAgIGNhc2UgVFlQRV9DT0RFX1VOSU9OOgorICAgICAgICB7CisJICBp bnQgaSwgc19hbGlnbl9zaXplOworCisJICBmb3IgKGkgPSAwOyBpIDwgVFlQ RV9ORklFTERTICh0eXBlKTsgKytpKQorCSAgICB7CisJICAgICAgc19hbGln bl9zaXplCisJCSAgPSBjdGZfc2F2ZV90eXBlX2NoZWNrX2FuZF93cml0ZSAo dGNzcCwKKwkJCQkJCSAgIFRZUEVfRklFTERfVFlQRSAodHlwZSwgaSkpOwor CSAgICAgIGlmIChzX2FsaWduX3NpemUgPCAwKQorCQlyZXR1cm4gc19hbGln bl9zaXplOworCisJICAgICAgaWYgKGFsaWduX3NpemUgPCBzX2FsaWduX3Np emUpCisJCWFsaWduX3NpemUgPSBzX2FsaWduX3NpemU7CisJICAgIH0KKwkg IGJyZWFrOworCX0KKworICAgICAgZGVmYXVsdDoKKwlhbGlnbl9zaXplID0g LTE7CisJYnJlYWs7CisgICAgfQorCisgIHJldHVybiBhbGlnbl9zaXplOwor fQorCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfY29sbGVjdF9nZXRfMSAoc3Ry dWN0IGN0Zl9zYXZlX3MgKnRjc3AsIHN0cnVjdCBjdGZfc2F2ZV90cF9zICp0 cHMsCisJCQljaGFyICpzdHIpCit7CisgIHN0cnVjdCBleHByZXNzaW9uICpl eHByOworICBzdHJ1Y3QgY3RmX3NhdmVfY29sbGVjdF9zICpjb2xsZWN0Owor ICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBlOworICBzdHJ1Y3Qg dHlwZSAqdHlwZTsKKyAgaW50IGlzX3JldCA9IDA7CisgIGludCBhbGlnbl9z aXplOworCisgIC8qIENoZWNrIGlmIGFjdGlvbl9leHAgaXMgYWxyZWFkeSBl eGlzdCBpbiB0cHMtPmNvbGxlY3QuICAqLworICBmb3IgKGNvbGxlY3QgPSB0 cHMtPmNvbGxlY3Q7IGNvbGxlY3Q7IGNvbGxlY3QgPSBjb2xsZWN0LT5uZXh0 KQorICAgIHsKKyAgICAgIGlmIChzdHJjbXAgKGNvbGxlY3QtPnN0ciwgc3Ry KSA9PSAwKQorCXJldHVybjsKKyAgICB9CisKKyAgaWYgKDAgPT0gc3RybmNh c2VjbXAgKHN0ciwgIiRfcmV0IiwgNSkpCisgICAgaXNfcmV0ID0gMTsKKwor ICBUUllfQ0FUQ0ggKGUsIFJFVFVSTl9NQVNLX0VSUk9SKQorICAgIHsKKyAg ICAgIGlmIChpc19yZXQpCisgICAgICAgIHsKKwkgIENPUkVfQUREUiBwYzsK KwkgIHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZTsKKworCSAgZnJhbWUgPSBn ZXRfY3VycmVudF9mcmFtZSAoKTsKKwkgIGlmICghZnJhbWUpCisJICAgIGVy cm9yIChfKCJnZXQgY3VycmVudCBmcmFtZSBmYWlsIikpOworCSAgZnJhbWUg PSBnZXRfcHJldl9mcmFtZSAoZnJhbWUpOworCSAgaWYgKCFmcmFtZSkKKwkg ICAgZXJyb3IgKF8oImdldCBwcmV2IGZyYW1lIGZhaWwiKSk7CisKKwkgIGlm ICghZ2V0X2ZyYW1lX3BjX2lmX2F2YWlsYWJsZSAoZnJhbWUsICZwYykpCisJ ICAgIGVycm9yIChfKCJQQyB1bmF2YWlsYWJsZSIpKTsKKwl9CisgICAgICBl bHNlCisgICAgICAgIHsKKwkgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2hhaW47 CisJICBzdHJ1Y3QgdmFsdWUgKnZhbDsKKworCSAgZXhwciA9IHBhcnNlX2V4 cHJlc3Npb24gKHN0cik7CisJICBvbGRfY2hhaW4gPSBtYWtlX2NsZWFudXAg KGZyZWVfY3VycmVudF9jb250ZW50cywgJmV4cHIpOworCSAgdHlwZSA9IHZh bHVlX3R5cGUgKGV2YWx1YXRlX2V4cHJlc3Npb24gKGV4cHIpKTsKKwkgIGRv X2NsZWFudXBzIChvbGRfY2hhaW4pOworCX0KKyAgICB9CisgIGlmIChlLnJl YXNvbiA8IDApCisgICAgeworICAgICAgd2FybmluZyAoXygiXAorbm90IHNh dmUgXCIlc1wiIG9mIHRyYWNlcG9pbnQgJWQgdG8gY3RmIGZpbGUgYmVjYXVz ZSBnZXQgaXRzIHZhbHVlIGZhaWw6ICVzIiksCisJICAgICAgIHN0ciwgdHBz LT50cC0+YmFzZS5udW1iZXIsIGUubWVzc2FnZSk7CisgICAgICByZXR1cm47 CisgICAgfQorCisgIGlmIChpc19yZXQpCisgICAgYWxpZ25fc2l6ZSA9IDg7 CisgIGVsc2UKKyAgICB7CisgICAgICBhbGlnbl9zaXplID0gY3RmX3NhdmVf dHlwZV9jaGVja19hbmRfd3JpdGUgKHRjc3AsIHR5cGUpOworICAgICAgaWYg KGFsaWduX3NpemUgPCAwKQorCXsKKwkgIHdhcm5pbmcgKF8oIlwKK25vdCBz YXZlIFwiJXNcIiBvZiB0cmFjZXBvaW50ICVkIHRvIGN0ZiBmaWxlIGJlY2F1 c2UgaXRzIHR5cGUgaXMgbm90IHN1cHBvcnQuIiksCisJCSAgIHN0ciwgdHBz LT50cC0+YmFzZS5udW1iZXIpOworCSAgcmV0dXJuOworCX0KKyAgICB9CisK KyAgY29sbGVjdCA9IChzdHJ1Y3QgY3RmX3NhdmVfY29sbGVjdF9zICopIHhj YWxsb2MgKDEsIHNpemVvZiAoKmNvbGxlY3QpKTsKKworICAvKiBBZGQgdHAg 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+Y29sbGVjdC4gICovCisKK3N0YXRpYyB2b2lkCitjdGZfc2F2ZV9jb2xs ZWN0X2dldCAoc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3AsIHN0cnVjdCBjdGZf c2F2ZV90cF9zICp0cHMsCisJCSAgICAgIGNoYXIgKnN0cikKK3sKKyAgY2hh ciAqYWN0aW9uX2V4cCA9IHN0ciwgKm5leHRfY29tbWE7CisgIHN0cnVjdCBj bGVhbnVwICpvbGRfY2hhaW47CisKKyAgZG8KKyAgICB7CisgICAgICBpZiAo KmFjdGlvbl9leHAgPT0gJywnKQorCWFjdGlvbl9leHArKzsKKyAgICAgIHdo aWxlIChpc3NwYWNlICgoaW50KSAqYWN0aW9uX2V4cCkpCisJYWN0aW9uX2V4 cCsrOworCisgICAgICBuZXh0X2NvbW1hID0gc3RyY2hyIChhY3Rpb25fZXhw LCAnLCcpOworICAgICAgaWYgKG5leHRfY29tbWEpCisJeworCSAgb2xkX2No YWluID0gbWFrZV9jbGVhbnVwIChyZXBsYWNlX2NvbW1hLCBuZXh0X2NvbW1h KTsKKwkgICpuZXh0X2NvbW1hID0gJ1wwJzsKKwl9CisKKyAgICAgIGlmICgw ID09IHN0cm5jYXNlY21wIChhY3Rpb25fZXhwLCAiJHJlZyIsIDQpKQorICAg ICAgICB7CisJICBpbnQgaTsKKwkgIHN0cnVjdCBnZGJhcmNoICphcmNoID0g dHBzLT50cC0+YmFzZS5sb2MtPmdkYmFyY2g7CisKKwkgIGZvciAoaSA9IDA7 IGkgPCBnZGJhcmNoX251bV9yZWdzIChhcmNoKTsgaSsrKQorCSAgICB7CisJ ICAgICAgY29uc3QgY2hhciAqbmFtZSA9IGdkYmFyY2hfcmVnaXN0ZXJfbmFt ZSAoYXJjaCwgaSk7CisJICAgICAgaW50IG5hbWVfc2l6ZSA9IHN0cmxlbiAo bmFtZSk7CisJICAgICAgY2hhciByZWduYW1lWzEgKyBuYW1lX3NpemUgKyAx XTsKKworCSAgICAgIGlmIChuYW1lX3NpemUgPT0gMCkKKwkJY29udGludWU7 CisKKwkgICAgICBzcHJpbnRmIChyZWduYW1lLCAiJCVzIiwgbmFtZSk7CisK KwkgICAgICBjdGZfc2F2ZV9jb2xsZWN0X2dldF8xICh0Y3NwLCB0cHMsIHJl Z25hbWUpOworCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAoMCA9PSBzdHJu Y2FzZWNtcCAoYWN0aW9uX2V4cCwgIiRsb2MiLCA0KQorCSAgICAgICB8fCAw ID09IHN0cm5jYXNlY21wIChhY3Rpb25fZXhwLCAiJGFyZyIsIDQpKQorCXsK KwkgIENPUkVfQUREUiBwYzsKKwkgIHN0cnVjdCBmcmFtZV9pbmZvICpmcmFt ZTsKKwkgIHN0cnVjdCBsb2NfYXJnX2NvbGxlY3RfZGF0YSBjYl9kYXRhOwor CSAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZTsKKworCSAgY2Jf ZGF0YS50Y3NwID0gdGNzcDsKKwkgIGNiX2RhdGEudHBzID0gdHBzOworCisJ ICBUUllfQ0FUQ0ggKGUsIFJFVFVSTl9NQVNLX0VSUk9SKQorCSAgICB7CisJ ICAgICAgZnJhbWUgPSBnZXRfc2VsZWN0ZWRfZnJhbWUgKF8oIk5vIGZyYW1l IHNlbGVjdGVkLiIpKTsKKwkgICAgICBpZiAoIWdldF9mcmFtZV9wY19pZl9h dmFpbGFibGUgKGZyYW1lLCAmcGMpKQorCSAgICAgICAgZXJyb3IgKF8oIlBD IHVuYXZhaWxhYmxlIikpOworCSAgICB9CisJICBpZiAoZS5yZWFzb24gPCAw KQorCSAgICB7CisJICAgICAgd2FybmluZyAoXygiXAorbm90IHNhdmUgXCIl c1wiIG9mIHRyYWNlcG9pbnQgJWQgdG8gY3RmIGZpbGUgYmVjYXVzZSBnZXQg aXRzIHZhbHVlIGZhaWw6ICVzIiksCisJCSAgICAgICBhY3Rpb25fZXhwLCB0 cHMtPnRwLT5iYXNlLm51bWJlciwgZS5tZXNzYWdlKTsKKwkgICAgICByZXR1 cm47CisJICAgIH0KKwkgIGlmICgwID09IHN0cm5jYXNlY21wIChhY3Rpb25f ZXhwLCAiJGxvYyIsIDQpKQorCSAgICB7CisJICAgICAgc3RydWN0IGJsb2Nr ICpibG9jazsKKworCSAgICAgIGJsb2NrID0gZ2V0X2ZyYW1lX2Jsb2NrIChm cmFtZSwgMCk7CisJICAgICAgaWYgKGJsb2NrID09IDApCisJCXsKKwkJICB3 YXJuaW5nIChfKCJcCitOb3Qgc2F2ZSBcIiVzXCIgb2YgdHJhY2Vwb2ludCAl ZCB0byBjdGYgZmlsZSBiZWNhdXNlIG5vIHN5bWJvbCB0YWJsZSBpbmZvIGF2 YWlsYWJsZS4iKSwKKwkJCSAgIGFjdGlvbl9leHAsIHRwcy0+dHAtPmJhc2Uu bnVtYmVyKTsKKwkJICBjb250aW51ZTsKKwkJfQorCisJICAgICAgaXRlcmF0 ZV9vdmVyX2Jsb2NrX2xvY2FsX3ZhcnMgKGJsb2NrLAorCQkJCQkgICAgIHRz dl9zYXZlX2RvX2xvY19hcmdfY29sbGVjdCwKKwkJCQkJICAgICAmY2JfZGF0 YSk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHN0cnVjdCBz eW1ib2wgKmZ1bmM7CisKKwkgICAgICBmdW5jID0gZ2V0X2ZyYW1lX2Z1bmN0 aW9uIChmcmFtZSk7CisJICAgICAgaWYgKGZ1bmMgPT0gTlVMTCkKKwkJewor CQkgIHdhcm5pbmcgKF8oIlwKK25vdCBzYXZlIFwiJXNcIiBvZiB0cmFjZXBv aW50ICVkIHRvIGN0ZiBmaWxlIGJlY2F1c2Ugbm8gc3ltYm9sIHRhYmxlIGlu Zm8gYXZhaWxhYmxlLiIpLAorCQkJICAgYWN0aW9uX2V4cCwgdHBzLT50cC0+ YmFzZS5udW1iZXIpOworCQkgIGNvbnRpbnVlOworCQl9CisKKwkgICAgICBp dGVyYXRlX292ZXJfYmxvY2tfYXJnX3ZhcnMgKFNZTUJPTF9CTE9DS19WQUxV RSAoZnVuYyksCisJCQkJCSAgIHRzdl9zYXZlX2RvX2xvY19hcmdfY29sbGVj dCwKKwkJCQkJICAgJmNiX2RhdGEpOworCSAgICB9CisJfQorICAgICAgZWxz ZQorCWN0Zl9zYXZlX2NvbGxlY3RfZ2V0XzEgKHRjc3AsIHRwcywgYWN0aW9u X2V4cCk7CisKKyAgICAgIGlmIChuZXh0X2NvbW1hKQorCWRvX2NsZWFudXBz IChvbGRfY2hhaW4pOworICAgICAgYWN0aW9uX2V4cCA9IG5leHRfY29tbWE7 CisgICAgfQorICB3aGlsZSAoYWN0aW9uX2V4cCAmJiAqYWN0aW9uX2V4cCA9 PSAnLCcpOworfQorCisvKiBDYWxsIGZ1bmN0aW9uIGN0Zl9zYXZlX2NvbGxl Y3RfZ2V0IEFkZCBhY3Rpb24gbGlzdCBBQ1RJT04gb2YgVFBTCisgICB0byBU UFMtPmNvbGxlY3QuCisgICBTVEVQUElOR19GUkFNRSBpcyB0cnVlIGlmIGl0 IGlzIHN0ZXAgYWN0aW9uLiAgKi8KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZl X3RwX2FjdGlvbnMgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwLCBzdHJ1Y3Qg Y3RmX3NhdmVfdHBfcyAqdHBzLAorCQkgICAgIHN0cnVjdCBjb21tYW5kX2xp bmUgKmFjdGlvbiwgaW50IHN0ZXBwaW5nX2ZyYW1lKQoreworICBmb3IgKDsg YWN0aW9uICE9IE5VTEw7IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKKyAgICB7 CisgICAgICBjaGFyICphY3Rpb25fZXhwOworICAgICAgc3RydWN0IGNtZF9s aXN0X2VsZW1lbnQgKmNtZDsKKworICAgICAgUVVJVDsKKyAgICAgIGFjdGlv bl9leHAgPSBhY3Rpb24tPmxpbmU7CisgICAgICB3aGlsZSAoaXNzcGFjZSAo KGludCkgKmFjdGlvbl9leHApKQorCWFjdGlvbl9leHArKzsKKyAgICAgIGlm ICgqYWN0aW9uX2V4cCA9PSAnIycpCisJY29udGludWU7CisKKyAgICAgIGNt ZCA9IGxvb2t1cF9jbWQgKCZhY3Rpb25fZXhwLCBjbWRsaXN0LCAiIiwgLTEs IDEpOworICAgICAgaWYgKGNtZCA9PSAwKQorCWVycm9yIChfKCJCYWQgYWN0 aW9uIGxpc3QgaXRlbTogJXMiKSwgYWN0aW9uX2V4cCk7CisKKyAgICAgIGlm IChjbWRfY2Z1bmNfZXEgKGNtZCwgd2hpbGVfc3RlcHBpbmdfcHNldWRvY29t bWFuZCkpCisJeworCSAgaW50IGk7CisKKwkgIGZvciAoaSA9IDA7IGkgPCBh Y3Rpb24tPmJvZHlfY291bnQ7ICsraSkKKwkgICAgY3RmX3NhdmVfdHBfYWN0 aW9ucyAodGNzcCwgdHBzLCBhY3Rpb24tPmJvZHlfbGlzdFtpXSwgMSk7CisJ fQorICAgICAgZWxzZSBpZiAoY21kX2NmdW5jX2VxIChjbWQsIGNvbGxlY3Rf cHNldWRvY29tbWFuZCkpCisJeworCSAgaWYgKHN0ZXBwaW5nX2ZyYW1lICE9 IHRwcy0+c3RlcHBpbmdfZnJhbWUpCisJICAgIGNvbnRpbnVlOworCSAgaWYg KCphY3Rpb25fZXhwID09ICcvJykKKwkgICAgYWN0aW9uX2V4cCA9IGRlY29k ZV9hZ2VudF9vcHRpb25zIChhY3Rpb25fZXhwKTsKKwkgIGN0Zl9zYXZlX2Nv bGxlY3RfZ2V0ICh0Y3NwLCB0cHMsIGFjdGlvbl9leHApOworCX0KKyAgICB9 Cit9CisKKworLyogVHJ5IHRvIGZpbmQgdGhlIGN0Zl9zYXZlX3RwX3Mgc3Ry dWN0IGluIHRoZSBUQ1NQLT50cC4KKyAgIElmIGNhbm5vdCBmaW5kIGl0IGlu IHRoZSBUQ1NQLT50cCwgbWFrZSBhIG5ldyBvbmUgZm9yIFRQCisgICBhbmQg YWRkIGl0IHRvIFRDU1AtPnRwLiAgKi8KKworc3RhdGljIHN0cnVjdCBjdGZf c2F2ZV90cF9zICoKK2N0Zl9zYXZlX3RwX2ZpbmQgKHN0cnVjdCBjdGZfc2F2 ZV9zICp0Y3NwLCBzdHJ1Y3QgdHJhY2Vwb2ludCAqdHApCit7CisgIHN0cnVj dCBjdGZfc2F2ZV90cF9zICpyZXQ7CisgIHN0cnVjdCBicF9sb2NhdGlvbiAq bG9jOworICBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlOworICBpbnQgc3Rl cHBpbmdfZnJhbWUgPSAwOworICBzdHJ1Y3QgY29tbWFuZF9saW5lICphY3Rp b247CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGU7CisgIENP UkVfQUREUiBwYzsKKworICBUUllfQ0FUQ0ggKGUsIFJFVFVSTl9NQVNLX0VS Uk9SKQorICAgIHsKKyAgICAgIHBjID0gcmVnY2FjaGVfcmVhZF9wYyAoZ2V0 X2N1cnJlbnRfcmVnY2FjaGUgKCkpOworICAgIH0KKyAgaWYgKGUucmVhc29u ID49IDApCisgICAgeworICAgICAgc3RlcHBpbmdfZnJhbWUgPSAxOworICAg ICAgZm9yIChsb2MgPSB0cC0+YmFzZS5sb2M7IGxvYzsgbG9jID0gbG9jLT5u ZXh0KQorCXsKKwkgIGlmIChsb2MtPmFkZHJlc3MgPT0gcGMpCisgICAgICAg ICAgICB7CisJICAgICAgc3RlcHBpbmdfZnJhbWUgPSAwOworCSAgICAgIGJy ZWFrOworCSAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgZm9yIChyZXQg PSB0Y3NwLT50cDsgcmV0OyByZXQgPSByZXQtPm5leHQpCisgICAgeworICAg ICAgaWYgKHJldC0+dHAgPT0gdHAgJiYgcmV0LT5zdGVwcGluZ19mcmFtZSA9 PSBzdGVwcGluZ19mcmFtZSkKKwlyZXR1cm4gcmV0OworICAgIH0KKworICBy ZXQgPSAoc3RydWN0IGN0Zl9zYXZlX3RwX3MgKikgeGNhbGxvYyAoMSwgc2l6 ZW9mICgqcmV0KSk7CisKKyAgLyogQWRkIHRwIHRvIHRoZSBsaXN0LiAgKi8K KyAgcmV0LT5uZXh0ID0gdGNzcC0+dHA7CisgIHRjc3AtPnRwID0gcmV0Owor CisgIHJldC0+c3RlcHBpbmdfZnJhbWUgPSBzdGVwcGluZ19mcmFtZTsKKyAg cmV0LT50cCA9IHRwOworCisgIGlmICghc3RlcHBpbmdfZnJhbWUgJiYgKmRl ZmF1bHRfY29sbGVjdCkKKyAgICBjdGZfc2F2ZV9jb2xsZWN0X2dldCAodGNz cCwgcmV0LCBkZWZhdWx0X2NvbGxlY3QpOworCisgIGN0Zl9zYXZlX3RwX2Fj dGlvbnMgKHRjc3AsIHJldCwgYnJlYWtwb2ludF9jb21tYW5kcyAoJnRwLT5i YXNlKSwgMCk7CisKKyAgcmV0dXJuIHJldDsKK30KKworLyogTGV0IFRDU1At PmRhdGFzdHJlYW1fZmQgcG9pbnQgdG8gdGhlIHBhcnQgZm9yIG5leHQgcGFj a2V0LiAgKi8KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX25leHRfcGFja2V0 IChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCkKK3sKKyAgdGNzcC0+cGFja2V0 X2JlZ2luICs9IENURl9QQUNLRVRfU0laRTsKKyAgY3RmX3NhdmVfZnNlZWsg KHRjc3AsIHRjc3AtPnBhY2tldF9iZWdpbiwgU0VFS19TRVQpOworICB0Y3Nw LT5jb250ZW50X3NpemUgPSAwOworfQorCisvKiBXcml0ZSB0aGUgY29udGVu dCBzaXplIHRvIHBhY2tldCBoZWFkZXIgY29udGV4dC4gKi8KKworc3RhdGlj IHZvaWQKK2N0Zl9zYXZlX3dyaXRlX2NvbnRlbnRfc2l6ZSAoc3RydWN0IGN0 Zl9zYXZlX3MgKnRjc3ApCit7CisgIHVpbnQzMl90IHUzMjsKKworICBjdGZf c2F2ZV9mc2VlayAodGNzcCwgdGNzcC0+cGFja2V0X2JlZ2luICsgNCwgU0VF S19TRVQpOworICB1MzIgPSB0Y3NwLT5jb250ZW50X3NpemUgKiBUQVJHRVRf Q0hBUl9CSVQ7CisgIGN0Zl9zYXZlX3dyaXRlICh0Y3NwLCAodm9pZCAqKSZ1 MzIsIDQpOworfQorCisvKiBXcml0ZSB0aGUgQ1RGIGRhdGEgcGFja2V0IGhl YWRlciBjb250ZXh0LiAgKi8KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX3dy aXRlX3BhY2tldF9oZWFkZXJfY29udGV4dCAoc3RydWN0IGN0Zl9zYXZlX3Mg KnRjc3ApCit7CisgIHVpbnQzMl90IHUzMjsKKworICAvKiBtYWdpYy4gICov CisgIHUzMiA9IENURl9NQUdJQzsKKyAgY3RmX3NhdmVfd3JpdGUgKHRjc3As ICh2b2lkICopJnUzMiwgNCk7CisgIHRjc3AtPmNvbnRlbnRfc2l6ZSArPSA0 OworCisgIC8qIGNvbnRlbnRfc2l6ZS4gIFdlIHN0aWxsIGRvbid0IGtub3cg dGhlIHNpemUsIHdyaXRlIGl0IGxhdGVyLiAgKi8KKyAgY3RmX3NhdmVfZnNl ZWsgKHRjc3AsIDQsIFNFRUtfQ1VSKTsKKyAgdGNzcC0+Y29udGVudF9zaXpl ICs9IDQ7CisKKyAgLyogcGFja2V0X3NpemUgKi8KKyAgdTMyID0gQ1RGX1BB Q0tFVF9TSVpFICogVEFSR0VUX0NIQVJfQklUOworICBjdGZfc2F2ZV93cml0 ZSAodGNzcCwgKHZvaWQgKikmdTMyLCA0KTsKKyAgdGNzcC0+Y29udGVudF9z aXplICs9IDQ7CisKKyAgdGNzcC0+Y3VycmVudF9jb250ZW50X3NpemUgPSB0 Y3NwLT5jb250ZW50X3NpemU7CisKKyAgLyogTWFrZSB0aGlzIHBhY2tldCBh bGwgaW50byBmaWxlLiAgKi8KKyAgY3RmX3NhdmVfZnNlZWsgKHRjc3AsIHRj c3AtPnBhY2tldF9iZWdpbiArIENURl9QQUNLRVRfU0laRSAtIDQsIFNFRUtf U0VUKTsKKyAgdTMyID0gMDsKKyAgY3RmX3NhdmVfd3JpdGUgKHRjc3AsICh2 b2lkICopJnUzMiwgNCk7CisgIGN0Zl9zYXZlX2ZzZWVrICh0Y3NwLCB0Y3Nw LT5wYWNrZXRfYmVnaW4gKyB0Y3NwLT5jb250ZW50X3NpemUsIFNFRUtfU0VU KTsKK30KKworLyogQ2hhbmdlIEktdGggY2hhciBpbiBDVEZfU1RSIHRvIFNU Ui4gICovCisKK3N0YXRpYyBjaGFyICoKK2N0Zl9zYXZlX21ldGFkYXRhX2No YW5nZV9jaGFyIChjaGFyICpjdGZfc3RyLCBpbnQgaSwgY29uc3QgY2hhciAq c3RyKQoreworICBjaGFyICpuZXc7CisKKyAgY3RmX3N0cltpXSA9ICdcMCc7 CisgIG5ldyA9IHhzdHJwcmludGYgKCIlcyVzJXNfJXMiLCBjdGZfc3RyLCAo aSA/ICJfIiA6ICIiKSwKKwkJICAgIHN0ciwgY3RmX3N0ciArIGkgKyAxKTsK KyAgeGZyZWUgKGN0Zl9zdHIpOworCisgIHJldHVybiBuZXc7Cit9CisKKy8q IFdyaXRlIHRoZSBoZWFkZXIgb2YgQ1RGJ3MgbWV0YWRhdGEgdG8gVENTUC0+ TUVUQURBVEFfRkQuICAqLworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfbWV0 YWRhdGFfaGVhZGVyIChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCkKK3sKKyAg Y29uc3QgY2hhciBtZXRhZGF0YV9mbXRbXSA9CisgICJcbnRyYWNlIHtcbiIK KyAgIgltYWpvciA9ICV1O1xuIgorICAiCW1pbm9yID0gJXU7XG4iCisgICIJ Ynl0ZV9vcmRlciA9ICVzO1xuIgkJLyogYmUgb3IgbGUgKi8KKyAgIglwYWNr ZXQuaGVhZGVyIDo9IHN0cnVjdCB7XG4iCisgICIJCXVpbnQzMl90IG1hZ2lj O1xuIgorICAiCX07XG4iCisgICJ9O1xuIgorICAiXG4iCisgICJzdHJlYW0g e1xuIgorICAiCXBhY2tldC5jb250ZXh0IDo9IHN0cnVjdCB7XG4iCisgICIJ CXVpbnQzMl90IGNvbnRlbnRfc2l6ZTtcbiIKKyAgIgkJdWludDMyX3QgcGFj a2V0X3NpemU7XG4iCisgICIJfTtcbiIKKyAgIglldmVudC5oZWFkZXIgOj0g c3RydWN0IHtcbiIKKyAgIgkJdWludDMyX3QgaWQ7XG4iCisgICIJfTtcbiIK KyAgIn07XG4iOworCisgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3At Pm1ldGFkYXRhX2ZkLCAiLyogQ1RGICVkLiVkICovXG4iLAorCQkJICBDVEZf U0FWRV9NQUpPUiwgQ1RGX1NBVkVfTUlOT1IpOworICBjdGZfc2F2ZV9md3Jp dGVfZm9ybWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgIlwKK3R5cGVhbGlhcyBp bnRlZ2VyIHsgc2l6ZSA9IDMyOyBhbGlnbiA9IDMyOyBzaWduZWQgPSBmYWxz ZTsgfSA6PSB1aW50MzJfdDtcbiIpOworICBjdGZfc2F2ZV9md3JpdGVfZm9y bWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgIlwKK3R5cGVhbGlhcyBpbnRlZ2Vy IHsgc2l6ZSA9IDY0OyBhbGlnbiA9IDY0OyBzaWduZWQgPSBmYWxzZTsgfSA6 PSB1aW50NjRfdDtcbiIpOworICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0 Y3NwLT5tZXRhZGF0YV9mZCwgIlxuIik7CisKKyAgY3RmX3NhdmVfZndyaXRl X2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsIG1ldGFkYXRhX2ZtdCwKKwkJ CSAgQ1RGX1NBVkVfTUFKT1IsIENURl9TQVZFX01JTk9SLAorCQkJICBCWVRF X09SREVSID09IExJVFRMRV9FTkRJQU4gPyAibGUiIDogImJlIik7CisgIGN0 Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiXG4i KTsKK30KKworLyogV3JpdGUgdGhlIGJvZHkgb2YgQ1RGJ3MgbWV0YWRhdGEg dG8gVENTUC0+TUVUQURBVEFfRkQuICAqLworCitzdGF0aWMgdm9pZAorY3Rm X3NhdmVfbWV0YWRhdGEgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwKQorewor ICBzdHJ1Y3QgY3RmX3NhdmVfdHBfcyAqdHBzOworICBzdHJ1Y3QgY3RmX3Nh dmVfY29sbGVjdF9zICpjb2xsZWN0OworICBzdHJ1Y3QgY3RmX3NhdmVfdHlw ZV9zICp0OworCisgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1l dGFkYXRhX2ZkLCAiXG4iKTsKKworICAvKiBXcml0ZSBldmVudC4gICovCisg IGZvciAodHBzID0gdGNzcC0+dHA7IHRwczsgdHBzID0gdHBzLT5uZXh0KQor ICAgIHsKKyAgICAgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1l dGFkYXRhX2ZkLAorCQkJICAgICAgImV2ZW50IHtcblx0bmFtZSA9IFwiJXNc Ijtcblx0aWQgPSAlZDtcbiIKKwkJCSAgICAgICJcdGZpZWxkcyA6PSBzdHJ1 Y3QgeyBcbiIsCisJCQkgICAgICB0cHMtPnRwLT5iYXNlLmFkZHJfc3RyaW5n LCB0cHMtPnRwLT5iYXNlLm51bWJlcik7CisgICAgICBmb3IgKGNvbGxlY3Qg PSB0cHMtPmNvbGxlY3Q7IGNvbGxlY3Q7IGNvbGxlY3QgPSBjb2xsZWN0LT5u ZXh0KQorICAgICAgICB7CisJICBjaGFyICp0bXA7CisJICBjb25zdCBjaGFy ICpvbGRfdGFiOworCisJICBpZiAoY29sbGVjdC0+aXNfcmV0KQorCSAgICBj b2xsZWN0LT5jdGZfc3RyID0geHN0cmR1cCAoInJldF9wYyIpOworCSAgZWxz ZQorCSAgICB7CisJICAgICAgY2hhciAqbmV3OworCSAgICAgIGludCBuZWVk X3JlY2hlY2s7CisJICAgICAgaW50IGk7CisKKwkgICAgICBjb2xsZWN0LT5j dGZfc3RyID0geHN0cmR1cCAoY29sbGVjdC0+c3RyKTsKKwkgICAgICBmb3Ig KGkgPSAwOyBjb2xsZWN0LT5jdGZfc3RyW2ldICE9ICdcMCc7ICsraSkKKwkg ICAgICAgIHsKKwkJICBzd2l0Y2ggKGNvbGxlY3QtPmN0Zl9zdHJbaV0pCisJ CSAgICB7CisJCSAgICBjYXNlICckJzoKKwkJICAgICAgY29sbGVjdC0+Y3Rm X3N0cgorCQkJICA9IGN0Zl9zYXZlX21ldGFkYXRhX2NoYW5nZV9jaGFyIChj b2xsZWN0LT5jdGZfc3RyLAorCQkJCQkJCSAgIGksICJkb2xsYXIiKTsKKwkJ ICAgICAgYnJlYWs7CisJCSAgICBjYXNlICcqJzoKKwkJICAgICAgY29sbGVj dC0+Y3RmX3N0cgorCQkJICA9IGN0Zl9zYXZlX21ldGFkYXRhX2NoYW5nZV9j aGFyIChjb2xsZWN0LT5jdGZfc3RyLAorCQkJCQkJCSAgIGksICJzdGFyIik7 CisJCSAgICAgIGJyZWFrOworCQkgICAgY2FzZSAnICc6CisJCSAgICAgIGNv bGxlY3QtPmN0Zl9zdHJbaV0gPSAnXyc7CisJCSAgICAgIGJyZWFrOworCQkg ICAgfQorCQl9CisJICAgIH0KKworCSAgdG1wID0gYWxsb2NhIChzdHJsZW4g KGNvbGxlY3QtPmN0Zl9zdHIpICsgMzApOworCSAgc3RyY3B5ICh0bXAsIGNv bGxlY3QtPmN0Zl9zdHIpOworCSAgd2hpbGUgKDEpCisJICAgIHsKKwkgICAg ICBzdHJ1Y3QgY3RmX3NhdmVfY29sbGVjdF9zICpjb2xsZWN0MjsKKwkgICAg ICBpbnQgaSA9IDA7CisKKwkgICAgICBmb3IgKGNvbGxlY3QyID0gdHBzLT5j b2xsZWN0OyBjb2xsZWN0MjsKKwkJICAgY29sbGVjdDIgPSBjb2xsZWN0Mi0+ bmV4dCkKKwkJeworCQkgIGlmIChjb2xsZWN0Mi0+Y3RmX3N0cgorCQkgICAg ICAmJiBzdHJjbXAgKGNvbGxlY3QyLT5jdGZfc3RyLCB0bXApID09IDApCisJ CSAgICBicmVhazsKKwkJfQorCSAgICAgIGlmIChjb2xsZWN0MiA9PSBOVUxM KQorCQlicmVhazsKKworCSAgICAgIHNucHJpbnRmICh0bXAsIHN0cmxlbiAo Y29sbGVjdC0+Y3RmX3N0cikgKyAzMCwKKwkJCSIlc18lZCIsIGNvbGxlY3Qt PmN0Zl9zdHIsIGkrKyk7CisJICAgIH0KKworCSAgaWYgKHN0cmNtcCAoY29s bGVjdC0+Y3RmX3N0ciwgY29sbGVjdC0+c3RyKSkKKwkgICAgd2FybmluZyAo XygiXAorXCIlc1wiIG9mIHRyYWNlcG9pbnQgJWQgcmVuYW1lIHRvIFwiJXNc IiBpbiBDVEYgZmlsZS4iKSwKKwkJICAgICAgIGNvbGxlY3QtPnN0ciwgdHBz LT50cC0+YmFzZS5udW1iZXIsCisJCSAgICAgICBjb2xsZWN0LT5jdGZfc3Ry KTsKKworCSAgb2xkX3RhYiA9IHRjc3AtPnRhYjsKKwkgIHRjc3AtPnRhYiA9 ICJcdFx0IjsKKwkgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1l dGFkYXRhX2ZkLCB0Y3NwLT50YWIpOworCSAgaWYgKGNvbGxlY3QtPmlzX3Jl dCkKKwkgICAgY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRh dGFfZmQsICJ1aW50NjRfdCAlcztcbiIsCisJCQkJICAgIGNvbGxlY3QtPmN0 Zl9zdHIpOworCSAgZWxzZQorCSAgICBjdGZfc2F2ZV92YXJfZGVmaW5lX3dy aXRlICh0Y3NwLCBjb2xsZWN0LT50eXBlLCBjb2xsZWN0LT5jdGZfc3RyKTsK KwkgIHRjc3AtPnRhYiA9IG9sZF90YWI7CisJfQorICAgICAgY3RmX3NhdmVf ZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsICJcdH07XG59O1xu Iik7CisgICAgfQorfQorCisvKiBDbGVhbiBmdW5jdGlvbiBmb3IgY3RmX3Nh dmUuICAqLworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfY2xlYW51cCAodm9p ZCAqcCkKK3sKKyAgc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3AgPSBwOworICBz dHJ1Y3QgY3RmX3NhdmVfdHBfcyAqdHAsICp0bXBfdHA7CisgIHN0cnVjdCBj dGZfc2F2ZV90eXBlX3MgKnR5cGUsICp0bXBfdHlwZTsKKworICBpZiAodGNz cC0+bWV0YWRhdGFfZmQpCisgICAgeworICAgICAgY3RmX3NhdmVfbWV0YWRh dGEgKHRjc3ApOworICAgICAgZmNsb3NlICh0Y3NwLT5tZXRhZGF0YV9mZCk7 CisgICAgfQorCisgIGlmICh0Y3NwLT5kYXRhc3RyZWFtX2ZkKQorICAgIGZj bG9zZSAodGNzcC0+ZGF0YXN0cmVhbV9mZCk7CisKKyAgZm9yICh0cCA9IHRj c3AtPnRwOyB0cDsgdHAgPSB0bXBfdHApCisgICAgeworICAgICAgc3RydWN0 IGN0Zl9zYXZlX2NvbGxlY3RfcyAqY29sbGVjdCwgKnRtcF9jb2xsZWN0Owor CisgICAgICBmb3IgKGNvbGxlY3QgPSB0cC0+Y29sbGVjdDsgY29sbGVjdDsg Y29sbGVjdCA9IHRtcF9jb2xsZWN0KQorICAgICAgICB7CisJICBpZiAoY29s bGVjdC0+ZXhwcikKKwkgICAgZnJlZV9jdXJyZW50X2NvbnRlbnRzICgmY29s bGVjdC0+ZXhwcik7CisJICBpZiAoY29sbGVjdC0+c3RyKQorCSAgICB4ZnJl ZSAoY29sbGVjdC0+c3RyKTsKKwkgIGlmIChjb2xsZWN0LT5jdGZfc3RyKQor CSAgICB4ZnJlZSAoY29sbGVjdC0+Y3RmX3N0cik7CisJICB0bXBfY29sbGVj dCA9IGNvbGxlY3QtPm5leHQ7CisJICB4ZnJlZSAoY29sbGVjdCk7CisgICAg ICAgIH0KKyAgICAgIHRtcF90cCA9IHRwLT5uZXh0OworICAgICAgeGZyZWUg KHRwKTsKKyAgICB9CisKKyAgZm9yICh0eXBlID0gdGNzcC0+dHlwZTsgdHlw ZTsgdHlwZSA9IHRtcF90eXBlKQorICAgIHsKKyAgICAgIHRtcF90eXBlID0g dHlwZS0+bmV4dDsKKyAgICAgIHhmcmVlICh0eXBlKTsKKyAgICB9CisKKyAg cmVpbml0X2ZyYW1lX2NhY2hlICgpOworICB0YXJnZXRfZGNhY2hlX2ludmFs aWRhdGUgKCk7CisgIHNldF9jdXJyZW50X3RyYWNlZnJhbWUgKHRjc3AtPm9s ZF90cmFjZWZyYW1lX251bSk7Cit9CisKKy8qIFNhdmUgY3VycmVudCB0cmFj ZSBmcmFtZSB0byBESVJOQU1FLiAgKi8KKwordm9pZAorY3RmX3NhdmUgKGNv bnN0IGNoYXIgKmRpcm5hbWUpCit7CisgIHN0cnVjdCBjdGZfc2F2ZV9zIHRj czsKKyAgc3RydWN0IGNsZWFudXAgKm9sZF9jaGFpbjsKKyAgaW50IGZyYW1l X251bTsKKyAgY2hhciAqZmlsZV9uYW1lOworICBzdHJ1Y3QgY3RmX3NhdmVf dHlwZV9zICp0OworICBjaGFyIHRhYltdID0gIiI7CisKKyAgLyogQ3JlYXRl IERJUk5BTUUuICAqLworICBmaWxlX25hbWUgPSBhbGxvY2EgKHN0cmxlbiAo ZGlybmFtZSkgKyAxCisJCSAgICAgICsgc3RybGVuIChDVEZfREFUQVNUUkVB TV9OQU1FKSArIDEpOworICBpZiAobWtkaXIgKGRpcm5hbWUsIFNfSVJXWFUg fCBTX0lSR1JQIHwgU19JWEdSUCB8IFNfSVJPVEggfCBTX0lYT1RIKQorICAg ICAgJiYgZXJybm8gIT0gRUVYSVNUKQorICAgIGVycm9yIChfKCJVbmFibGUg dG8gb3BlbiBkaXJlY3RvcnkgJyVzJyBmb3Igc2F2aW5nIHRyYWNlIGRhdGEg KCVzKSIpLAorCSAgIGRpcm5hbWUsIHNhZmVfc3RyZXJyb3IgKGVycm5vKSk7 CisKKyAgbWVtc2V0ICgmdGNzLCAnXDAnLCBzaXplb2YgKHRjcykpOworICB0 Y3Mub2xkX3RyYWNlZnJhbWVfbnVtID0gZ2V0X3RyYWNlZnJhbWVfbnVtYmVy ICgpOworICBvbGRfY2hhaW4gPSBtYWtlX2NsZWFudXAgKGN0Zl9zYXZlX2Ns ZWFudXAsICZ0Y3MpOworICB0Y3MudGFiID0gdGFiOworCisgIHNwcmludGYg KGZpbGVfbmFtZSwgIiVzLyVzIiwgZGlybmFtZSwgQ1RGX01FVEFEQVRBX05B TUUpOworICB0Y3MubWV0YWRhdGFfZmQgPSBmb3BlbiAoZmlsZV9uYW1lLCAi dyIpOworICBpZiAoIXRjcy5tZXRhZGF0YV9mZCkKKyAgICBlcnJvciAoXygi VW5hYmxlIHRvIG9wZW4gZmlsZSAnJXMnIGZvciBzYXZpbmcgdHJhY2UgZGF0 YSAoJXMpIiksCisJICAgZmlsZV9uYW1lLCBzYWZlX3N0cmVycm9yIChlcnJu bykpOworICBjdGZfc2F2ZV9tZXRhZGF0YV9oZWFkZXIgKCZ0Y3MpOworCisg IHNwcmludGYgKGZpbGVfbmFtZSwgIiVzLyVzIiwgZGlybmFtZSwgQ1RGX0RB VEFTVFJFQU1fTkFNRSk7CisgIHRjcy5kYXRhc3RyZWFtX2ZkID0gZm9wZW4g KGZpbGVfbmFtZSwgInciKTsKKyAgaWYgKCF0Y3MuZGF0YXN0cmVhbV9mZCkK KyAgICBlcnJvciAoXygiVW5hYmxlIHRvIG9wZW4gZmlsZSAnJXMnIGZvciBz YXZpbmcgdHJhY2UgZGF0YSAoJXMpIiksCisJICAgZmlsZV9uYW1lLCBzYWZl X3N0cmVycm9yIChlcnJubykpOworCisgIGN0Zl9zYXZlX3dyaXRlX3BhY2tl dF9oZWFkZXJfY29udGV4dCAoJnRjcyk7CisKKyAgZm9yIChmcmFtZV9udW0g PSAwOyAxOyBmcmFtZV9udW0gKyspCisgICAgeworICAgICAgaW50IHRudW07 CisgICAgICBzdHJ1Y3QgdHJhY2Vwb2ludCAqdHA7CisgICAgICBpbnQgdHJ5 X2NvdW50OworICAgICAgdWludDMyX3QgdTMyOworICAgICAgc3RydWN0IGN0 Zl9zYXZlX3RwX3MgKnRwczsKKyAgICAgIHN0cnVjdCBjdGZfc2F2ZV9jb2xs ZWN0X3MgKmNvbGxlY3Q7CisgICAgICBpbnQgdHJhY2VmcmFtZV9pc19kcm9w cGVkID0gMDsKKworICAgICAgLyogQWxsb3cgdXNlciB0byBiYWlsIG91dCB3 aXRoIF5DLiAgKi8KKyAgICAgIFFVSVQ7CisKKyAgICAgIC8qIEdvdG8gdHJh Y2VmcmFtZSBmcmFtZV9udW0gYW5kIHNldCB0cC4gICovCisgICAgICBmcmFt ZV9udW0gPSB0YXJnZXRfdHJhY2VfZmluZCAodGZpbmRfbnVtYmVyLCBmcmFt ZV9udW0sIDAsIDAsICZ0bnVtKTsKKyAgICAgIGlmIChmcmFtZV9udW0gPCAw KQorCWJyZWFrOworICAgICAgdHAgPSBnZXRfdHJhY2Vwb2ludF9ieV9udW1i ZXJfb25fdGFyZ2V0ICh0bnVtKTsKKyAgICAgIGlmICghdHApCisgICAgICAg IHsKKwkgIHdhcm5pbmcgKF8oImRyb3AgdHJhY2VmcmFtZSAlZCBiZWNhdXNl IGNhbm5vdCBmaW5kIHRyYWNlcG9pbnQgJWQuIiksCisJCSAgIGZyYW1lX251 bSwgdG51bSk7CisJICBjb250aW51ZTsKKwl9CisgICAgICBpZiAoIXRwLT5i YXNlLmxvYykKKyAgICAgICAgeworCSAgd2FybmluZyAoXygiZHJvcCB0cmFj ZWZyYW1lICVkIGJlY2F1c2UgdHJhY2Vwb2ludCAlZCBpcyBwZW5kaW5nLiIp LAorCQkgICBmcmFtZV9udW0sIHRwLT5iYXNlLm51bWJlcik7CisJICBjb250 aW51ZTsKKwl9CisgICAgICByZWluaXRfZnJhbWVfY2FjaGUgKCk7CisgICAg ICB0YXJnZXRfZGNhY2hlX2ludmFsaWRhdGUgKCk7CisgICAgICBzZXRfY3Vy cmVudF90cmFjZWZyYW1lIChmcmFtZV9udW0pOworCisgICAgICB0cHMgPSBj dGZfc2F2ZV90cF9maW5kICgmdGNzLCB0cCk7CisKKyAgICAgIC8qIFRoZSB0 cCBpcyBub3QgdmFyaWFibGUtbGVuZ3RoIGFuZCBiaWdnZXIgdGhhbiBDVEZf UEFDS0VUX1NJWkUuCisgICAgICAgICBTbyBkcm9wIGl0LiAgKi8KKyAgICAg IGlmICh0cHMtPmlzX2Ryb3BwZWQpCisJY29udGludWU7CisKKyAgICAgIC8q IFRyeSBjb3VudCBmb3IgY3VycmVudCB0cCB3cml0ZS4KKyAgICAgICAgIElm IHRyeSBzZWNvbmQgdGltZSwgdGhlIGV2ZW50IHNpemUgYmlnZ2VyIHRoYW4g YSBwYWNrZXQuCisgICAgICAgICBUaGVuIGRyb3AgdGhpcyBldmVudC4gICov CisgICAgICB0cnlfY291bnQgPSAwOworCityZV93cml0ZV90cDoKKyAgICAg IGlmICh0cnlfY291bnQgPiAwKQorICAgICAgICB7CisJICAvKiBIYW5kbGUg cmV0cnkuICAqLworCSAgaWYgKHRyeV9jb3VudCA+IDEgfHwgNCArIDQgKyA0 ID09IHRjcy5jb250ZW50X3NpemUpCisJICAgIHsKKwkgICAgICAvKiBTZWNv bmQgcmV0cnkgb3IgcGFja2V0IGp1c3Qgd3JpdGUgdGhhdCBwYWNrZXQgbWVh bnMKKwkgICAgICAgICB0aGlzIFRQIGlzIHRvbyBiaWcuICBTbyBkcm9wIGl0 LiAgKi8KKwkgICAgICBpZiAodHBzLT5pc192YXJpYWJsZV9sZW5ndGgpCisJ ICAgICAgICB7CisJCSAgLyogVGhlIHRwIGlzIHZhcmlhYmxlLWxlbmd0aC4g ICovCisJCSAgd2FybmluZyAoXygiXAordHJhY2VmcmFtZSAlZCBvZiB0cmFj ZXBvaW50ICVkIG5lZWQgc2F2ZSBkYXRhIHRoYXQgYmlnZ2VyIHRoYW4gcGFj a2V0IHNpemUgJWQuXG5cCitTbyBpdCB3aWxsIGJlIGRyb3BwZWQuIiksIGZy YW1lX251bSwgdHBzLT50cC0+YmFzZS5udW1iZXIsIENURl9QQUNLRVRfU0la RSk7CisJCX0KKwkgICAgICBlbHNlCisJICAgICAgICB7CisJCSAgLyogVGhl IHRwIGlzIG5vdCB2YXJpYWJsZS1sZW5ndGguICAqLworCQkgIHdhcm5pbmcg KF8oIlwKK3RyYWNlcG9pbnQgJWQgbmVlZCBzYXZlIGRhdGEgdGhhdCBiaWdn ZXIgdGhhbiBwYWNrZXQgc2l6ZSAlZC5cblwKK1NvIGFsbCBvZiBpdHMgdHJh Y2VmcmFtZXMgd2lsbCBiZSBkcm9wcGVkLiIpLAorCQkJICAgdHBzLT50cC0+ YmFzZS5udW1iZXIsIENURl9QQUNLRVRfU0laRSk7CisJCSAgLyogTWFyayB0 aGlzIHRwIHRvIGxldCBHREIgZHJvcCBpdHMgdHJhY2VmcmFtZXMuICAqLwor CQkgIHRwcy0+aXNfZHJvcHBlZCA9IDE7CisJCX0KKwkgICAgICBjb250aW51 ZTsKKwkgICAgfQorCisJICB0Y3MuY2hlY2tfc2l6ZSA9IDA7CisJICBjdGZf c2F2ZV93cml0ZV9jb250ZW50X3NpemUgKCZ0Y3MpOworICAgICAgICAgIGN0 Zl9zYXZlX25leHRfcGFja2V0ICgmdGNzKTsKKwkgIGN0Zl9zYXZlX3dyaXRl X3BhY2tldF9oZWFkZXJfY29udGV4dCAoJnRjcyk7CisJfQorCisgICAgICB0 cnlfY291bnQgKys7CisKKyAgICAgIHRjcy5jdXJyZW50X2NvbnRlbnRfc2l6 ZSA9IHRjcy5jb250ZW50X3NpemU7CisgICAgICB0Y3MuY2hlY2tfc2l6ZSA9 IDE7CisKKyAgICAgIC8qIFdyaXRlIGV2ZW50IGhlYWRlciAqLworICAgICAg aWYgKHRwcy0+c3RlcHBpbmdfZnJhbWUpCisgICAgICAgIHUzMiA9ICh1aW50 MzJfdCkgKC10cHMtPnRwLT5iYXNlLm51bWJlcik7CisgICAgICBlbHNlCisJ dTMyID0gKHVpbnQzMl90KSB0cHMtPnRwLT5iYXNlLm51bWJlcjsKKyAgICAg IGlmIChjdGZfc2F2ZV9hbGlnbl93cml0ZSAoJnRjcywgKHZvaWQgKikmdTMy LCBzaXplb2YgKHUzMiksCisJCQkJc2l6ZW9mICh1MzIpKSkKKwlnb3RvIHJl X3dyaXRlX3RwOworCisgICAgICAvKiBBbGlnbi4gICovCisgICAgICBpZiAo dHBzLT5hbGlnbl9zaXplKQorICAgICAgICB7CisJICBpZiAoY3RmX3NhdmVf ZnNlZWsgKCZ0Y3MsCisJCQkgICAgICBBTElHTl9TSVpFICh0Y3MuY3VycmVu dF9jb250ZW50X3NpemUsCisJCQkJCSAgdHBzLT5hbGlnbl9zaXplKSwKKwkJ CSAgICAgIFNFRUtfQ1VSKSkKKwkgICAgZ290byByZV93cml0ZV90cDsKKwl9 CisKKyAgICAgIGZvciAoY29sbGVjdCA9IHRwcy0+Y29sbGVjdDsgY29sbGVj dDsgY29sbGVjdCA9IGNvbGxlY3QtPm5leHQpCisgICAgICAgIHsKKwkgIHZv bGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGU7CisKKwkgIGlmIChjb2xs ZWN0LT5pc19yZXQpCisJICAgIHsKKwkgICAgICBDT1JFX0FERFIgcGM7CisJ ICAgICAgdWludDY0X3QgdTY0OworCisJICAgICAgVFJZX0NBVENIIChlLCBS RVRVUk5fTUFTS19FUlJPUikKKwkJeworCQkgIHN0cnVjdCBmcmFtZV9pbmZv ICpmcmFtZTsKKworCQkgIGZyYW1lID0gZ2V0X2N1cnJlbnRfZnJhbWUgKCk7 CisJCSAgaWYgKCFmcmFtZSkKKwkJICAgIGVycm9yIChfKCJnZXQgY3VycmVu dCBmcmFtZSBmYWlsIikpOworCQkgIGZyYW1lID0gZ2V0X3ByZXZfZnJhbWUg KGZyYW1lKTsKKwkJICBpZiAoIWZyYW1lKQorCQkgICAgZXJyb3IgKF8oImdl dCBwcmV2IGZyYW1lIGZhaWwiKSk7CisKKwkJICBpZiAoIWdldF9mcmFtZV9w Y19pZl9hdmFpbGFibGUgKGZyYW1lLCAmcGMpKQorCQkgICAgZXJyb3IgKF8o IlBDIHVuYXZhaWxhYmxlIikpOworCQl9CisJICAgICAgaWYgKGUucmVhc29u IDwgMCkKKwkJeworCQkgIHdhcm5pbmcgKF8oIlwKK3RyYWNlZnJhbWUgJWQg aXMgZHJvcHBlZCBiZWNhdXNlIHRyeSB0byBnZXQgdGhlIHZhbHVlIG9mIFwi JXNcIiBnb3QgZXJyb3I6ICVzIiksCisJCQkgICBmcmFtZV9udW0sIGNvbGxl Y3QtPnN0ciwgZS5tZXNzYWdlKTsKKwkJICB0cmFjZWZyYW1lX2lzX2Ryb3Bw ZWQgPSAxOworCQkgIGJyZWFrOworCQl9CisKKwkgICAgICB1NjQgPSBwYzsK KwkgICAgICBpZiAoY3RmX3NhdmVfYWxpZ25fd3JpdGUgKCZ0Y3MsIChnZGJf Ynl0ZSAqKSAmdTY0LAorCQkJCQlzaXplb2YgKHU2NCksIHNpemVvZiAodTY0 KSkpCisJCWdvdG8gcmVfd3JpdGVfdHA7CisJICAgIH0KKwkgIGVsc2UKKyAg ICAgICAgICAgIHsKKwkgICAgICBzdHJ1Y3QgdmFsdWUgKnZhbDsKKwkgICAg ICBzdHJ1Y3QgY2xlYW51cCAqYmFja19jaGFpbjsKKwkgICAgICBjb25zdCBn ZGJfYnl0ZSAqY29udGVudDsKKworCSAgICAgIGJhY2tfY2hhaW4gPSBtYWtl X2NsZWFudXAgKG51bGxfY2xlYW51cCwgTlVMTCk7CisJICAgICAgVFJZX0NB VENIIChlLCBSRVRVUk5fTUFTS19FUlJPUikKKwkgICAgICAgIHsKKwkJICB2 YWwgPSBldmFsdWF0ZV9leHByZXNzaW9uIChjb2xsZWN0LT5leHByKTsKKwkJ ICBjb250ZW50ID0gdmFsdWVfY29udGVudHMgKHZhbCk7CisJCX0KKwkgICAg ICBpZiAoZS5yZWFzb24gPCAwIHx8IGNvbGxlY3QtPnR5cGUgIT0gdmFsdWVf dHlwZSAodmFsKSkKKwkJeworCQkgIGlmIChlLnJlYXNvbiA8IDApCisJCSAg ICB3YXJuaW5nIChfKCJcCit0cmFjZWZyYW1lICVkIGlzIGRyb3BwZWQgYmVj YXVzZSB0cnkgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBcIiVzXCIgZ290IGVycm9y OiAlcyIpLAorCQkJICAgICBmcmFtZV9udW0sIGNvbGxlY3QtPnN0ciwgZS5t ZXNzYWdlKTsKKwkJICBlbHNlCisJCSAgICB3YXJuaW5nIChfKCJcCit0cmFj ZWZyYW1lICVkIGlzIGRyb3BwZWQgYmVjYXVzZSB0eXBlIG9mIFwiJXNcIiBp cyB3cm9uZy4iKSwKKwkJCSAgICAgZnJhbWVfbnVtLCBjb2xsZWN0LT5zdHIp OworCQkgIHRyYWNlZnJhbWVfaXNfZHJvcHBlZCA9IDE7CisJCSAgZG9fY2xl YW51cHMgKGJhY2tfY2hhaW4pOworCQkgIGJyZWFrOworCQl9CisKKwkgICAg ICAvKiBXcml0ZSB0aGlzIHZhbCBhY2NvcmRpbmcgdG8gdHlwZS4gICovCisJ ICAgICAgaWYgKGN0Zl9zYXZlX2FsaWduX3dyaXRlICgmdGNzLCBjb250ZW50 LAorCQkJCQlUWVBFX0xFTkdUSCAoY29sbGVjdC0+dHlwZSksCisJCQkJCWNv bGxlY3QtPmFsaWduX3NpemUpKQorCQl7CisJCSAgZG9fY2xlYW51cHMgKGJh Y2tfY2hhaW4pOworCQkgIGdvdG8gcmVfd3JpdGVfdHA7CisJCX0KKworCSAg ICAgIC8qIEZyZWUgdGhlIG1lbW9yeSB0aGF0IGFsbG9jIGJ5IGV2YWx1YXRl X2V4cHJlc3Npb24uICAqLworCSAgICAgIGRvX2NsZWFudXBzIChiYWNrX2No YWluKTsKKwkgICAgfQorCX0KKworICAgICAgaWYgKHRyYWNlZnJhbWVfaXNf ZHJvcHBlZCkKKwljb250aW51ZTsKKworICAgICAgdGNzLmNvbnRlbnRfc2l6 ZSA9IHRjcy5jdXJyZW50X2NvbnRlbnRfc2l6ZTsKKyAgICB9CisgIGN0Zl9z YXZlX3dyaXRlX2NvbnRlbnRfc2l6ZSAoJnRjcyk7CisKKyAgZG9fY2xlYW51 cHMgKG9sZF9jaGFpbik7Cit9Ci0tLSAvZGV2L251bGwKKysrIGIvY3RmLmgK QEAgLTAsMCArMSwyNSBAQAorLyogQ1RGIGZvcm1hdCBzdXBwb3J0LgorCisg ICBDb3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAg VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBDVEZfSAorI2Rl ZmluZSBDVEZfSAorCitleHRlcm4gdm9pZCBjdGZfc2F2ZSAoY29uc3QgY2hh ciAqZGlybmFtZSk7CisKKyNlbmRpZgotLS0gYS9taS9taS1tYWluLmMKKysr IGIvbWkvbWktbWFpbi5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAi b3NkYXRhLmgiCiAjaW5jbHVkZSAic3BsYXktdHJlZS5oIgogI2luY2x1ZGUg InRyYWNlcG9pbnQuaCIKKyNpbmNsdWRlICJjdGYuaCIKICNpbmNsdWRlICJh ZGEtbGFuZy5oIgogI2luY2x1ZGUgImxpbmVzcGVjLmgiCiAKQEAgLTI0OTUs MTYgKzI0OTYsMTkgQEAgdm9pZAogbWlfY21kX3RyYWNlX3NhdmUgKGNoYXIg KmNvbW1hbmQsIGNoYXIgKiphcmd2LCBpbnQgYXJnYykKIHsKICAgaW50IHRh cmdldF9zYXZlcyA9IDA7CisgIGludCBnZW5lcmF0ZV9jdGYgPSAwOwogICBj aGFyICpmaWxlbmFtZTsKIAogICBpZiAoYXJnYyAhPSAxICYmIGFyZ2MgIT0g MikKLSAgICBlcnJvciAoXygiVXNhZ2U6IC10cmFjZS1zYXZlIFstcl0gZmls ZW5hbWUiKSk7CisgICAgZXJyb3IgKF8oIlVzYWdlOiAtdHJhY2Utc2F2ZSBb LXJdIFstY3RmXSBmaWxlbmFtZSIpKTsKIAogICBpZiAoYXJnYyA9PSAyKQog ICAgIHsKICAgICAgIGZpbGVuYW1lID0gYXJndlsxXTsKICAgICAgIGlmIChz dHJjbXAgKGFyZ3ZbMF0sICItciIpID09IDApCiAJdGFyZ2V0X3NhdmVzID0g MTsKKyAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbMF0sICItY3RmIikgPT0gMCkK KwlnZW5lcmF0ZV9jdGYgPSAxOwogICAgICAgZWxzZQogCWVycm9yIChfKCJJ bnZhbGlkIG9wdGlvbjogJXMiKSwgYXJndlswXSk7CiAgICAgfQpAQCAtMjUx Myw3ICsyNTE3LDEwIEBAIG1pX2NtZF90cmFjZV9zYXZlIChjaGFyICpjb21t YW5kLCBjaGFyICoKICAgICAgIGZpbGVuYW1lID0gYXJndlswXTsKICAgICB9 CiAKLSAgdHJhY2Vfc2F2ZSAoZmlsZW5hbWUsIHRhcmdldF9zYXZlcyk7Cisg IGlmIChnZW5lcmF0ZV9jdGYpCisgICAgY3RmX3NhdmUgKGZpbGVuYW1lKTsK KyAgZWxzZQorICAgIHRyYWNlX3NhdmUgKGZpbGVuYW1lLCB0YXJnZXRfc2F2 ZXMpOwogfQogCiB2b2lkCi0tLSBhL3RyYWNlcG9pbnQuYworKysgYi90cmFj ZXBvaW50LmMKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJleGNlcHRp b25zLmgiCiAjaW5jbHVkZSAiY2xpL2NsaS11dGlscy5oIgogI2luY2x1ZGUg InByb2JlLmgiCisjaW5jbHVkZSAiY3RmLmgiCiAKIC8qIHJlYWRsaW5lIGlu Y2x1ZGUgZmlsZXMgKi8KICNpbmNsdWRlICJyZWFkbGluZS9yZWFkbGluZS5o IgpAQCAtNTc5LDcgKzU4MCw3IEBAIHdoaWxlX3N0ZXBwaW5nX3BzZXVkb2Nv bW1hbmQgKGNoYXIgKmFyZ3MKICAgZXJyb3IgKF8oIlRoaXMgY29tbWFuZCBj YW4gb25seSBiZSB1c2VkIGluIGEgdHJhY2Vwb2ludCBhY3Rpb25zIGxpc3Qu IikpOwogfQogCi1zdGF0aWMgdm9pZAordm9pZAogY29sbGVjdF9wc2V1ZG9j b21tYW5kIChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpCiB7CiAgIGVycm9y IChfKCJUaGlzIGNvbW1hbmQgY2FuIG9ubHkgYmUgdXNlZCBpbiBhIHRyYWNl cG9pbnQgYWN0aW9ucyBsaXN0LiIpKTsKQEAgLTMxNTcsNiArMzE1OCw3IEBA IHN0YXRpYyB2b2lkCiB0cmFjZV9zYXZlX2NvbW1hbmQgKGNoYXIgKmFyZ3Ms IGludCBmcm9tX3R0eSkKIHsKICAgaW50IHRhcmdldF9kb2VzX3NhdmUgPSAw OworICBpbnQgZ2VuZXJhdGVfY3RmID0gMDsKICAgY2hhciAqKmFyZ3Y7CiAg IGNoYXIgKmZpbGVuYW1lID0gTlVMTDsKICAgc3RydWN0IGNsZWFudXAgKmJh Y2tfdG87CkBAIC0zMTcxLDYgKzMxNzMsOCBAQCB0cmFjZV9zYXZlX2NvbW1h bmQgKGNoYXIgKmFyZ3MsIGludCBmcm9tCiAgICAgewogICAgICAgaWYgKHN0 cmNtcCAoKmFyZ3YsICItciIpID09IDApCiAJdGFyZ2V0X2RvZXNfc2F2ZSA9 IDE7CisgICAgICBpZiAoc3RyY21wICgqYXJndiwgIi1jdGYiKSA9PSAwKQor CWdlbmVyYXRlX2N0ZiA9IDE7CiAgICAgICBlbHNlIGlmICgqKmFyZ3YgPT0g Jy0nKQogCWVycm9yIChfKCJ1bmtub3duIG9wdGlvbiBgJXMnIiksICphcmd2 KTsKICAgICAgIGVsc2UKQEAgLTMxODAsMTAgKzMxODQsMTggQEAgdHJhY2Vf c2F2ZV9jb21tYW5kIChjaGFyICphcmdzLCBpbnQgZnJvbQogICBpZiAoIWZp bGVuYW1lKQogICAgIGVycm9yX25vX2FyZyAoXygiZmlsZSBpbiB3aGljaCB0 byBzYXZlIHRyYWNlIGRhdGEiKSk7CiAKLSAgdHJhY2Vfc2F2ZSAoZmlsZW5h bWUsIHRhcmdldF9kb2VzX3NhdmUpOworICBpZiAoZ2VuZXJhdGVfY3RmKQor ICAgIHsKKyAgICAgIGlmICh0YXJnZXRfZG9lc19zYXZlKQorCWVycm9yX25v X2FyZyAoXygiLXIgY2Fubm90IGJlIHVzZWQgd2l0aCAtY3RmLiIpKTsKKyAg ICAgIGN0Zl9zYXZlIChmaWxlbmFtZSk7CisgICAgfQorICBlbHNlCisgICAg dHJhY2Vfc2F2ZSAoZmlsZW5hbWUsIHRhcmdldF9kb2VzX3NhdmUpOwogCiAg IGlmIChmcm9tX3R0eSkKLSAgICBwcmludGZfZmlsdGVyZWQgKF8oIlRyYWNl IGRhdGEgc2F2ZWQgdG8gZmlsZSAnJXMnLlxuIiksIGZpbGVuYW1lKTsKKyAg ICBwcmludGZfZmlsdGVyZWQgKF8oIlRyYWNlIGRhdGEgc2F2ZWQgdG8gJXMg JyVzJy5cbiIpLAorCQkgICAgIGdlbmVyYXRlX2N0ZiA/ICJkaXJlY3Rvcnki IDogImZpbGUiLCBmaWxlbmFtZSk7CiAKICAgZG9fY2xlYW51cHMgKGJhY2tf dG8pOwogfQpAQCAtNTIyNyw2ICs1MjM5LDcgQEAgX2luaXRpYWxpemVfdHJh Y2Vwb2ludCAodm9pZCkKICAgYWRkX2NvbSAoInRzYXZlIiwgY2xhc3NfdHJh Y2UsIHRyYWNlX3NhdmVfY29tbWFuZCwgXygiXAogU2F2ZSB0aGUgdHJhY2Ug ZGF0YSB0byBhIGZpbGUuXG5cCiBVc2UgdGhlICctcicgb3B0aW9uIHRvIGRp cmVjdCB0aGUgdGFyZ2V0IHRvIHNhdmUgZGlyZWN0bHkgdG8gdGhlIGZpbGUs XG5cCitVc2UgdGhlICctY3RmJyBvcHRpb24gdG8gc2F2ZSB0aGUgZGF0YSB0 byBDVEYgZm9ybWF0LFxuXAogdXNpbmcgaXRzIG93biBmaWxlc3lzdGVtLiIp KTsKIAogICBjID0gYWRkX2NvbSAoInR2YXJpYWJsZSIsIGNsYXNzX3RyYWNl LCB0cmFjZV92YXJpYWJsZV9jb21tYW5kLF8oIlwKLS0tIGEvdHJhY2Vwb2lu dC5oCisrKyBiL3RyYWNlcG9pbnQuaApAQCAtMjQ2LDYgKzI0Niw3IEBAIGV4 dGVybiB2b2lkIHZhbGlkYXRlX2FjdGlvbmxpbmUgKGNoYXIgKioKIAogZXh0 ZXJuIHZvaWQgZW5kX2FjdGlvbnNfcHNldWRvY29tbWFuZCAoY2hhciAqYXJn cywgaW50IGZyb21fdHR5KTsKIGV4dGVybiB2b2lkIHdoaWxlX3N0ZXBwaW5n X3BzZXVkb2NvbW1hbmQgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSk7Citl eHRlcm4gdm9pZCBjb2xsZWN0X3BzZXVkb2NvbW1hbmQgKGNoYXIgKmFyZ3Ms IGludCBmcm9tX3R0eSk7CiAKIGV4dGVybiBzdHJ1Y3QgdHJhY2Vfc3RhdGVf dmFyaWFibGUgKmZpbmRfdHJhY2Vfc3RhdGVfdmFyaWFibGUgKGNvbnN0IGNo YXIgKm5hbWUpOwogZXh0ZXJuIHN0cnVjdCB0cmFjZV9zdGF0ZV92YXJpYWJs ZSAqY3JlYXRlX3RyYWNlX3N0YXRlX3ZhcmlhYmxlIChjb25zdCBjaGFyICpu YW1lKTsK --14dae9340b335bac6004d1444c2c--